{"version":3,"sources":["../../../../node_modules/browser-pack/_prelude.js","../../../../node_modules/core-js/internals/a-callable.js","../../../../node_modules/core-js/internals/try-to-string.js","../../../../node_modules/core-js/internals/is-callable.js","../../../../node_modules/core-js/internals/a-constructor.js","../../../../node_modules/core-js/internals/is-constructor.js","../../../../node_modules/core-js/internals/a-possible-prototype.js","../../../../node_modules/core-js/internals/add-to-unscopables.js","../../../../node_modules/core-js/internals/object-create.js","node_modules/core-js/internals/object-define-property.js","../../../../node_modules/core-js/internals/well-known-symbol.js","../../../../node_modules/core-js/internals/an-instance.js","../../../../node_modules/core-js/internals/object-is-prototype-of.js","../../../../node_modules/core-js/internals/an-object.js","../../../../node_modules/core-js/internals/is-object.js","../../../../node_modules/core-js/internals/array-buffer-non-extensible.js","../../../../node_modules/core-js/internals/fails.js","node_modules/core-js/internals/array-includes.js","../../../../node_modules/core-js/internals/to-indexed-object.js","../../../../node_modules/core-js/internals/length-of-array-like.js","../../../../node_modules/core-js/internals/to-absolute-index.js","node_modules/core-js/internals/array-iteration.js","../../../../node_modules/core-js/internals/function-bind-context.js","../../../../node_modules/core-js/internals/to-object.js","../../../../node_modules/core-js/internals/indexed-object.js","../../../../node_modules/core-js/internals/function-uncurry-this.js","../../../../node_modules/core-js/internals/array-species-create.js","../../../../node_modules/core-js/internals/array-slice-simple.js","../../../../node_modules/core-js/internals/create-property.js","../../../../node_modules/core-js/internals/array-slice.js","../../../../node_modules/core-js/internals/array-species-constructor.js","../../../../node_modules/core-js/internals/is-array.js","../../../../node_modules/core-js/internals/array-unique-by.js","../../../../node_modules/core-js/internals/get-built-in.js","../../../../node_modules/core-js/internals/check-correctness-of-iteration.js","../../../../node_modules/core-js/internals/classof-raw.js","../../../../node_modules/core-js/internals/classof.js","../../../../node_modules/core-js/internals/to-string-tag-support.js","../../../../node_modules/core-js/internals/collection-add-all.js","../../../../node_modules/core-js/internals/function-call.js","../../../../node_modules/core-js/internals/collection-delete-all.js","../../../../node_modules/core-js/internals/collection-from.js","../../../../node_modules/core-js/internals/iterate.js","../../../../node_modules/core-js/internals/collection-of.js","../../../../node_modules/core-js/internals/collection-strong.js","../../../../node_modules/core-js/internals/define-built-ins.js","../../../../node_modules/core-js/internals/set-species.js","node_modules/core-js/internals/internal-metadata.js","../../../../node_modules/core-js/internals/descriptors.js","node_modules/core-js/internals/internal-state.js","../../../../node_modules/core-js/internals/define-iterator.js","../../../../node_modules/core-js/internals/collection-weak.js","../../../../node_modules/core-js/internals/has-own-property.js","../../../../node_modules/core-js/internals/collection.js","../../../../node_modules/core-js/internals/global.js","../../../../node_modules/core-js/internals/export.js","../../../../node_modules/core-js/internals/define-built-in.js","../../../../node_modules/core-js/internals/is-forced.js","../../../../node_modules/core-js/internals/set-to-string-tag.js","../../../../node_modules/core-js/internals/inherit-if-required.js","../../../../node_modules/core-js/internals/composite-key.js","../../../../node_modules/core-js/modules/es.weak-map.js","../../../../node_modules/core-js/modules/es.map.js","../../../../node_modules/core-js/internals/copy-constructor-properties.js","node_modules/core-js/internals/object-get-own-property-descriptor.js","../../../../node_modules/core-js/internals/own-keys.js","../../../../node_modules/core-js/internals/correct-prototype-getter.js","../../../../node_modules/core-js/internals/create-iterator-constructor.js","../../../../node_modules/core-js/internals/create-property-descriptor.js","node_modules/core-js/internals/iterators-core.js","../../../../node_modules/core-js/internals/create-non-enumerable-property.js","../../../../node_modules/core-js/internals/to-property-key.js","../../../../node_modules/core-js/internals/define-built-in-accessor.js","../../../../node_modules/core-js/internals/make-built-in.js","../../../../node_modules/core-js/internals/define-global-property.js","node_modules/core-js/internals/function-name.js","../../../../node_modules/core-js/internals/is-pure.js","../../../../node_modules/core-js/internals/object-get-prototype-of.js","../../../../node_modules/core-js/internals/object-set-prototype-of.js","../../../../node_modules/core-js/internals/define-well-known-symbol.js","node_modules/core-js/internals/well-known-symbol-wrapped.js","../../../../node_modules/core-js/internals/path.js","../../../../node_modules/core-js/internals/document-create-element.js","../../../../node_modules/core-js/internals/engine-is-ios.js","../../../../node_modules/core-js/internals/engine-user-agent.js","../../../../node_modules/core-js/internals/engine-is-node.js","../../../../node_modules/core-js/internals/engine-v8-version.js","../../../../node_modules/core-js/internals/enum-bug-keys.js","../../../../node_modules/core-js/internals/freezing.js","../../../../node_modules/core-js/internals/function-apply.js","../../../../node_modules/core-js/internals/function-bind-native.js","../../../../node_modules/core-js/internals/get-iterator-method.js","../../../../node_modules/core-js/internals/get-method.js","../../../../node_modules/core-js/internals/get-iterator.js","../../../../node_modules/core-js/internals/get-map-iterator.js","../../../../node_modules/core-js/internals/get-set-iterator.js","../../../../node_modules/core-js/internals/hidden-keys.js","../../../../node_modules/core-js/internals/host-report-errors.js","../../../../node_modules/core-js/internals/html.js","../../../../node_modules/core-js/internals/ie8-dom-define.js","../../../../node_modules/core-js/internals/inspect-source.js","../../../../node_modules/core-js/internals/shared-store.js","../../../../node_modules/core-js/internals/object-is-extensible.js","../../../../node_modules/core-js/internals/uid.js","../../../../node_modules/core-js/internals/object-get-own-property-names.js","node_modules/core-js/internals/object-get-own-property-names-external.js","../../../../node_modules/core-js/internals/shared-key.js","../../../../node_modules/core-js/internals/native-weak-map.js","../../../../node_modules/core-js/internals/is-array-iterator-method.js","../../../../node_modules/core-js/internals/is-symbol.js","../../../../node_modules/core-js/internals/use-symbol-as-uid.js","../../../../node_modules/core-js/internals/iterator-close.js","../../../../node_modules/core-js/internals/to-length.js","../../../../node_modules/core-js/internals/math-fround.js","../../../../node_modules/core-js/internals/math-sign.js","../../../../node_modules/core-js/internals/math-scale.js","../../../../node_modules/core-js/internals/math-trunc.js","../../../../node_modules/core-js/internals/native-symbol.js","node_modules/core-js/internals/new-promise-capability.js","../../../../node_modules/core-js/internals/number-is-finite.js","../../../../node_modules/core-js/internals/number-parse-int.js","../../../../node_modules/core-js/internals/to-string.js","../../../../node_modules/core-js/internals/whitespaces.js","node_modules/core-js/internals/string-trim.js","node_modules/core-js/internals/object-define-properties.js","../../../../node_modules/core-js/internals/v8-prototype-define-bug.js","../../../../node_modules/core-js/internals/object-keys.js","node_modules/core-js/internals/object-property-is-enumerable.js","../../../../node_modules/core-js/internals/object-keys-internal.js","node_modules/core-js/internals/object-get-own-property-symbols.js","../../../../node_modules/core-js/internals/observable-forced.js","../../../../node_modules/core-js/internals/ordinary-to-primitive.js","../../../../node_modules/core-js/internals/perform.js","node_modules/core-js/internals/reflect-metadata.js","../../../../node_modules/core-js/internals/shared.js","../../../../node_modules/core-js/internals/regexp-flags.js","../../../../node_modules/core-js/internals/require-object-coercible.js","../../../../node_modules/core-js/internals/same-value-zero.js","../../../../node_modules/core-js/internals/species-constructor.js","node_modules/core-js/internals/string-multibyte.js","../../../../node_modules/core-js/internals/to-integer-or-infinity.js","node_modules/core-js/internals/task.js","../../../../node_modules/core-js/internals/validate-arguments-length.js","../../../../node_modules/core-js/internals/to-primitive.js","../../../../node_modules/core-js/modules/es.map.constructor.js","../../../../node_modules/core-js/modules/es.regexp.flags.js","../../../../node_modules/core-js/modules/es.weak-map.constructor.js","../../../../node_modules/core-js/modules/esnext.array.last-index.js","../../../../node_modules/core-js/modules/esnext.array.last-item.js","../../../../node_modules/core-js/modules/esnext.composite-key.js","../../../../node_modules/core-js/modules/esnext.composite-symbol.js","../../../../node_modules/core-js/modules/esnext.map.delete-all.js","../../../../node_modules/core-js/modules/esnext.map.every.js","../../../../node_modules/core-js/modules/esnext.map.filter.js","../../../../node_modules/core-js/modules/esnext.map.find-key.js","../../../../node_modules/core-js/modules/esnext.map.find.js","../../../../node_modules/core-js/modules/esnext.map.from.js","../../../../node_modules/core-js/modules/esnext.map.group-by.js","../../../../node_modules/core-js/modules/esnext.map.includes.js","../../../../node_modules/core-js/modules/esnext.map.key-by.js","../../../../node_modules/core-js/modules/esnext.map.key-of.js","../../../../node_modules/core-js/modules/esnext.map.map-keys.js","../../../../node_modules/core-js/modules/esnext.map.map-values.js","../../../../node_modules/core-js/modules/esnext.map.merge.js","../../../../node_modules/core-js/modules/esnext.map.of.js","../../../../node_modules/core-js/modules/esnext.map.reduce.js","../../../../node_modules/core-js/modules/esnext.map.some.js","../../../../node_modules/core-js/modules/esnext.map.update.js","../../../../node_modules/core-js/modules/esnext.math.clamp.js","../../../../node_modules/core-js/modules/esnext.math.deg-per-rad.js","../../../../node_modules/core-js/modules/esnext.math.degrees.js","../../../../node_modules/core-js/modules/esnext.math.fscale.js","../../../../node_modules/core-js/modules/esnext.math.iaddh.js","../../../../node_modules/core-js/modules/esnext.math.imulh.js","../../../../node_modules/core-js/modules/esnext.math.isubh.js","../../../../node_modules/core-js/modules/esnext.math.rad-per-deg.js","../../../../node_modules/core-js/modules/esnext.math.radians.js","../../../../node_modules/core-js/modules/esnext.math.scale.js","../../../../node_modules/core-js/modules/esnext.math.seeded-prng.js","../../../../node_modules/core-js/modules/esnext.math.signbit.js","../../../../node_modules/core-js/modules/esnext.math.umulh.js","../../../../node_modules/core-js/modules/esnext.number.from-string.js","../../../../node_modules/core-js/modules/esnext.observable.constructor.js","../../../../node_modules/core-js/modules/esnext.observable.from.js","../../../../node_modules/core-js/modules/esnext.observable.js","../../../../node_modules/core-js/modules/esnext.observable.of.js","../../../../node_modules/core-js/modules/esnext.promise.try.js","../../../../node_modules/core-js/modules/esnext.reflect.define-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.delete-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js","../../../../node_modules/core-js/modules/esnext.reflect.get-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js","../../../../node_modules/core-js/modules/esnext.reflect.get-own-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.has-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.has-own-metadata.js","../../../../node_modules/core-js/modules/esnext.reflect.metadata.js","../../../../node_modules/core-js/modules/esnext.set.add-all.js","../../../../node_modules/core-js/modules/esnext.set.delete-all.js","../../../../node_modules/core-js/modules/esnext.set.difference.js","../../../../node_modules/core-js/modules/esnext.set.every.js","../../../../node_modules/core-js/modules/esnext.set.filter.js","../../../../node_modules/core-js/modules/esnext.set.find.js","../../../../node_modules/core-js/modules/esnext.set.from.js","../../../../node_modules/core-js/modules/esnext.set.intersection.js","../../../../node_modules/core-js/modules/esnext.set.is-disjoint-from.js","../../../../node_modules/core-js/modules/esnext.set.is-subset-of.js","../../../../node_modules/core-js/modules/esnext.set.is-superset-of.js","../../../../node_modules/core-js/modules/esnext.set.join.js","../../../../node_modules/core-js/modules/esnext.set.map.js","../../../../node_modules/core-js/modules/esnext.set.of.js","../../../../node_modules/core-js/modules/esnext.set.reduce.js","../../../../node_modules/core-js/modules/esnext.set.some.js","../../../../node_modules/core-js/modules/esnext.set.symmetric-difference.js","../../../../node_modules/core-js/modules/esnext.set.union.js","../../../../node_modules/core-js/modules/esnext.string.at.js","../../../../node_modules/core-js/modules/esnext.string.code-points.js","../../../../node_modules/core-js/modules/esnext.symbol.dispose.js","../../../../node_modules/core-js/modules/esnext.symbol.observable.js","../../../../node_modules/core-js/modules/esnext.symbol.pattern-match.js","../../../../node_modules/core-js/modules/esnext.weak-map.delete-all.js","../../../../node_modules/core-js/modules/esnext.weak-map.from.js","../../../../node_modules/core-js/modules/esnext.weak-map.of.js","../../../../node_modules/core-js/modules/esnext.weak-set.add-all.js","../../../../node_modules/core-js/modules/esnext.weak-set.delete-all.js","../../../../node_modules/core-js/modules/esnext.weak-set.from.js","../../../../node_modules/core-js/modules/esnext.weak-set.of.js","../../../../node_modules/core-js/modules/web.clear-immediate.js","../../../../node_modules/core-js/modules/web.immediate.js","../../../../node_modules/core-js/modules/web.set-immediate.js","../../../../node_modules/mustache/mustache.js","../../../../node_modules/regenerator-runtime/runtime.js","Wyanoke/ModuleTracking.ts","util/EventUtil.ts","Wyanoke/WyanokeContext.ts","util/WyanokeUtil.ts","util/UrlUtil.ts","components/BackNextButton.ts","components/healioGlobal/LoginRegistration/GoogleIdentityBottom.ts","components/healioGlobal/LoginRegistration/AppleIdentityBottom.ts","service/PageContext.ts","behaviors/index.ts","behaviors/BindMyCme.ts","util/DomUtil.ts","service/SavedPageService.ts","behaviors/DisplayAuthLinks.ts","behaviors/Leaving.ts","util/UiUtil.ts","util/CookieUtil.ts","behaviors/LineClamp.ts","behaviors/RedirectUnauthenticated.ts","service/ComponentFactory.ts","components/base/Component.ts","components/healioGlobal/HealioHeader.ts","components/SaveIcon.ts","util/LocalStorageUtil.ts","components/clinicalGuidance/ClinicalGuidanceMonographNav.ts","components/eduActivity/ActivityStepNavigation.ts","components/eduActivity/Certificate.ts","components/eduActivity/ClaimCredit.ts","components/eduActivity/CmeActivityContent.ts","components/eduActivity/CmeAttestation.ts","components/eduActivity/CmeRequiresPaymentModal.ts","components/eduActivity/CmeTestFailedModal.ts","components/eduActivity/CmeTestPassedModal.ts","components/eduActivity/CommerceStartActivity.ts","components/eduActivity/LeavingCmeModal.ts","components/eduActivity/PollQuestion.ts","components/healioGlobal/HealioErrorModal.ts","models/QuestionGroup/QuestionGroupModel.ts","models/QuestionGroup/QuestionModel.ts","components/eduActivity/ProgressBar.ts","components/eduActivity/QuestionGroup.ts","components/eduActivity/SingleSignOn.ts","components/eduLanding/ActivityCard.ts","components/eduLanding/ActivityFeatured.ts","components/genericLanding/LandingCardLayout.ts","components/eduLanding/ActivityLayout.ts","components/healioGlobal/SpecialtySelect.ts","components/eduLanding/ActivityLoader.ts","components/topicFilter/TopicFilter.ts","components/edu/GoalChart.ts","components/edu/NotificationBox.ts","components/emailManagement/ManageEmailSubscriptions.ts","components/genericLanding/LandingCardFeatured.ts","components/genericLanding/LandingCardLoader.ts","components/healioGlobal/SubSpecialtySelect.ts","components/topicAndCreditTypeFilter/TopicAndCreditTypeFilter.ts","components/news/ViewBySpecialty.ts","components/genericLanding/LandingNoMasonry.ts","components/news/ViewBySubSpecialty.ts","components/genericLanding/MasonryReflow.ts","components/healioGlobal/AjaxCustomComponentLoader.ts","components/healioGlobal/EmailSignUp.ts","components/healioGlobal/EmailSignUpSuccessModal.ts","util/StringUtil.ts","components/healioGlobal/EmailSignUpEoOnly.ts","components/healioGlobal/HealioFooter.ts","components/healioGlobal/HealioSearchBox.ts","components/healioGlobal/ListUnstyled.ts","components/healioGlobal/LoginSignupSplash.ts","components/healioGlobal/ScrollToTopButton.ts","components/healioMasterClass/MasterClassActivityCard.ts","components/healioMasterClass/MasterClassActivityContent.ts","components/healioMasterClass/MasterClassModals.ts","components/healioMasterClass/MasterClassPointSummary.ts","components/healioMasterClass/MasterClassPointTracker.ts","components/healioMasterClass/MasterClassProgressBar.ts","components/healioMasterClass/MasterClassQuestionGroupNonScoring.ts","components/healioMasterClass/MasterClassQuestionGroupPosttest.ts","models/MasterClassQuestionGroup/QuestionModelMasterClass.ts","components/healioMasterClass/MasterClassQuestionGroupPretest.ts","components/healioMasterClass/MasterClassRelatedContent.ts","components/healioMasterClass/MasterClassTrophyCase.ts","components/healioMasterClass/MasterClassVideo.ts","components/homepage/HomeSpecialtySelect.ts","components/honors/HonoreeListing.ts","components/honors/HonoreeSpecialtyFilter.ts","components/honors/HonorsScrollingBanner.ts","components/hss/CollapseCardSection.ts","components/hss/HssPollCard.ts","models/HssPoll/PollCompleteModel.ts","healio-custom-scripts-newsarea.ts","components/hss/HssQuizCard.ts","components/learningsites/LearningSiteMyQuizzes.ts","components/learningsites/LearningSiteNextArticle.ts","components/learningsites/LearningSiteQuizExitModal.ts","components/lmsLanding/LMSTopicSelect.ts","components/myCme/FilterSelect.ts","components/myCme/MyActivities.ts","components/myCme/UserStatBox.ts","components/myCme/MyCMEInProgress.ts","components/myCme/MyCMESaved.ts","components/myCme/MyCmeRibbon.ts","components/myCme/MyCompleted.ts","components/myCme/TranscriptModal.ts","components/myCme/MyCompletedDisplay.ts","components/mySavedPages/MySavedPages.ts","components/newsArticle/ArticleContent.ts","components/newsArticle/EmailTopicAlert.ts","components/newsArticle/NextArticle.ts","components/newsArticle/ReadNext.ts","components/newsArticle/ReadNextContentDiscoverability.ts","components/newsArticle/RelatedContent.ts","components/newsArticle/WindowLoadEventTracker.ts","components/newsPublication/PublicationDateSelect.ts","components/newsPublication/PublicationSubscription.ts","util/NumberUtil.ts","components/news/NewsHeaderLinks.ts","components/news/NewsLandingRedirect.ts","components/news/SiteMapSpecialtyFilter.ts","components/newslanding/HealioMinuteSignUp.ts","components/newslanding/MeetingCalendarFilter.ts","components/newslanding/PinnedSeries.ts","components/newslanding/SpecialtyLandingFeatured.ts","components/newslanding/YearFilter.ts","components/quikQuiz/QuikQuizProgressBar.ts","components/quikQuiz/QuikQuizQuestionGroup.ts","components/quikQuiz/QuikQuizScoreCard.ts","components/recommendations/CmeActivityRecoCards.ts","extensions/HtmlCollection.prototype.forEach.ts","healio-custom-scripts.ts","models/UserActivity/UserActivityModel.ts","service/ActivityService.ts","util/FetchUtil.ts","service/ArticleService.ts","service/CertificateService.ts","service/EmailSignUpService.ts","service/FindRequirementsService.ts","service/GamificationService.ts","service/HealioStoreService.ts","service/HssPollAnswerService.ts","service/LandingPageService.ts","service/MyCmeService.ts","service/NotificationBoxService.ts","service/RecommendedService.ts","service/TopicAlertService.ts","service/UserProfileService.ts","service/UserGoalsService.ts","service/TopicListService.ts","service/UserLoginService.ts","service/QBankService.ts","service/QuestionAnswerService.ts","service/TranscriptService.ts","service/QuikQuizService.ts","service/UserActivityService.ts"],"names":["f","exports","module","define","amd","window","global","self","this","Wyanoke","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","isCallable","tryToString","$TypeError","TypeError","argument","$String","String","error","isConstructor","noop","isConstructorModern","construct","empty","uncurryThis","fails","classof","getBuiltIn","inspectSource","constructorRegExp","exec","INCORRECT_TO_STRING","isConstructorLegacy","sham","called","Object","wellKnownSymbol","create","defineProperty","UNSCOPABLES","ArrayPrototype","Array","prototype","undefined","configurable","value","key","EmptyConstructor","scriptTag","content","LT","SCRIPT","NullProtoObjectViaActiveX","activeXDocument","write","close","temp","parentWindow","anObject","definePropertiesModule","enumBugKeys","hiddenKeys","html","documentCreateElement","sharedKey","PROTOTYPE","IE_PROTO","NullProtoObject","ActiveXObject","iframe","document","domain","style","display","appendChild","src","iframeDocument","contentWindow","open","F","O","Properties","result","DESCRIPTORS","IE8_DOM_DEFINE","V8_PROTOTYPE_DEFINE_BUG","toPropertyKey","$defineProperty","$getOwnPropertyDescriptor","getOwnPropertyDescriptor","ENUMERABLE","CONFIGURABLE","WRITABLE","P","Attributes","current","enumerable","writable","shared","hasOwn","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","Symbol","symbolFor","createWellKnownSymbol","withoutSetter","name","description","isPrototypeOf","it","Prototype","isObject","buffer","ArrayBuffer","isExtensible","IS_INCLUDES","toIndexedObject","toAbsoluteIndex","lengthOfArrayLike","indexOf","$this","el","fromIndex","index","IndexedObject","requireObjectCoercible","toLength","obj","toIntegerOrInfinity","max","Math","min","integer","bind","toObject","arraySpeciesCreate","push","createMethod","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","callbackfn","that","specificCreate","boundFunction","target","find","findIndex","aCallable","NATIVE_BIND","fn","apply","arguments","$Object","split","propertyIsEnumerable","FunctionPrototype","Function","arraySpeciesConstructor","originalArray","createProperty","$Array","start","end","k","fin","definePropertyModule","createPropertyDescriptor","object","propertyKey","slice","isArray","SPECIES","C","constructor","Map","MapPrototype","mapForEach","forEach","mapHas","has","mapSet","set","resolver","item","map","resolverFunction","namespace","method","ITERATOR","SAFE_CLOSING","iteratorWithReturn","next","done","return","from","SKIP_CLOSING","ITERATION_SUPPORT","toString","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tag","tryGet","callee","test","adder","add","len","wasDeleted","collection","remover","allDeleted","aConstructor","iterate","source","mapping","array","mapFn","nextItem","Result","stopped","isArrayIteratorMethod","getIterator","getIteratorMethod","iteratorClose","ResultPrototype","iterable","unboundFunction","options","stop","condition","iterator","callFn","AS_ENTRIES","INTERRUPTED","step","IS_RECORD","IS_ITERATOR","iterFn","arraySlice","defineBuiltIns","anInstance","defineIterator","setSpecies","fastKey","InternalStateModule","setInternalState","internalStateGetterFor","getterFor","getConstructor","wrapper","CONSTRUCTOR_NAME","ADDER","state","getInternalState","entry","getEntry","last","previous","removed","first","size","Constructor","type","clear","data","delete","prev","get","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","kind","defineBuiltIn","setMetadata","METADATA","objectID","id","weakData","$","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","meta","enable","REQUIRED","getOwnPropertyNames","splice","stat","forced","getWeakData","store","wmget","wmhas","wmset","STATE","NATIVE_WEAK_MAP","createNonEnumerableProperty","OBJECT_ALREADY_INITIALIZED","WeakMap","metadata","facade","enforce","returnThis","IS_PURE","FunctionName","createIteratorConstructor","getPrototypeOf","setPrototypeOf","setToStringTag","Iterators","IteratorsCore","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","IteratorPrototype","BUGGY_SAFARI_ITERATORS","VALUES","ENTRIES","Iterable","NAME","IteratorConstructor","DEFAULT","IS_SET","FORCED","getIterationMethod","KIND","defaultIterator","IterablePrototype","CurrentIteratorPrototype","methods","KEY","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","values","keys","proto","uncaughtFrozenStore","frozen","UncaughtFrozenStore","findUncaughtFrozen","ArrayIterationModule","hasOwnProperty","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","common","fixMethod","uncurriedNativeMethod","NativePrototype","IS_WEAK","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","NativeConstructor","exported","$instance","dummy","check","globalThis","defineGlobalProperty","copyConstructorProperties","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","targetProperty","dontCallGetSet","makeBuiltIn","simple","unsafe","nonConfigurable","nonWritable","replacement","feature","detection","normalize","POLYFILL","NATIVE","string","replace","toLowerCase","TAG","Wrapper","NewTarget","NewTargetPrototype","Node","symbol","primitives","objectsByIndex","initializer","IS_OBJECT","root","active","ownKeys","getOwnPropertyDescriptorModule","exceptions","propertyIsEnumerableModule","getOwnPropertySymbolsModule","concat","getOwnPropertySymbols","ENUMERABLE_NEXT","bitmap","arrayIterator","PrototypeOfArrayIteratorPrototype","toPrimitive","isSymbol","getter","setter","enforceInternalState","CONFIGURABLE_LENGTH","TEMPLATE","arity","join","getDescriptor","EXISTS","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","aPossiblePrototype","CORRECT_SETTER","__proto__","path","wrappedWellKnownSymbolModule","createElement","userAgent","process","match","version","Deno","versions","v8","preventExtensions","Reflect","getMethod","V","func","usingIterator","iteratorMethod","Set","b","console","functionToString","SHARED","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","FAILS_ON_PRIMITIVES","postfix","random","internalObjectKeys","$getOwnPropertyNames","windowNames","getWindowNames","$Symbol","innerResult","innerError","sign","abs","pow","EPSILON","EPSILON32","MAX32","MIN32","fround","x","$abs","$sign","Infinity","scale","inLow","inHigh","outLow","outHigh","nx","nInLow","nInHigh","nOutLow","nOutHigh","NaN","ceil","floor","trunc","V8_VERSION","PromiseCapability","resolve","reject","promise","$$resolve","$$reject","globalIsFinite","isFinite","Number","trim","whitespaces","$parseInt","parseInt","hex","radix","S","whitespace","ltrim","RegExp","rtrim","objectKeys","defineProperties","props","$propertyIsEnumerable","names","$$OBSERVABLE","NativeObservable","Observable","NativeObservablePrototype","of","subscribe","input","pref","val","valueOf","getOrCreateMetadataMap","targetKey","targetMetadata","keyMetadata","getMap","MetadataKey","metadataMap","MetadataValue","_","toKey","mode","copyright","license","hasIndices","ignoreCase","multiline","dotAll","unicode","unicodeSets","sticky","y","defaultConstructor","charAt","charCodeAt","CONVERT_TO_STRING","pos","second","position","codeAt","number","location","defer","validateArgumentsLength","IS_IOS","IS_NODE","setImmediate","clearImmediate","Dispatch","MessageChannel","counter","queue","ONREADYSTATECHANGE","run","runner","listener","event","post","postMessage","protocol","host","handler","args","nextTick","now","port","channel","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","passed","required","ordinaryToPrimitive","TO_PRIMITIVE","exoticToPrim","init","defineBuiltInAccessor","regExpFlags","RegExpPrototype","INDICES_SUPPORT","calls","expected","pairs","chr","addGetter","InternalWeakMap","nativeDelete","nativeHas","nativeGet","nativeSet","collectionWeak","IS_IE11","$WeakMap","WeakMapPrototype","addToUnscopables","freeze","getCompositeKeyNode","compositeKey","compositeSymbol","real","deleteAll","getMapIterator","every","speciesConstructor","filter","newMap","findKey","groupBy","keyDerivative","element","derivedKey","sameValueZero","includes","searchElement","keyBy","keyOf","mapKeys","mapValues","merge","argumentsLength","reduce","noInitial","accumulator","some","update","callback","isPresentInMap","clamp","lower","upper","DEG_PER_RAD","PI","RAD_PER_DEG","degrees","radians","fscale","iaddh","x0","x1","y0","y1","$x0","$y0","imulh","v","$u","$v","u0","v0","u1","v1","isubh","numberIsFinite","SEEDED_RANDOM","SEEDED_RANDOM_GENERATOR","$SeededRandomGenerator","seed","seededPRNG","signbit","umulh","INVALID_NUMBER_REPRESENTATION","$RangeError","RangeError","$SyntaxError","SyntaxError","valid","numberToString","fromString","mathNum","R","SubscriptionState","observer","cleanup","subscriptionObserver","hostReportErrors","OBSERVABLE_FORCED","OBSERVABLE","SUBSCRIPTION","SUBSCRIPTION_OBSERVER","getObservableInternalState","getSubscriptionInternalState","getSubscriptionObserverInternalState","clean","subscription","closed","isClosed","Subscription","subscriber","subscriptionState","SubscriptionObserver","unsubscribe","nextMethod","errorMethod","err","complete","completeMethod","$Observable","ObservablePrototype","observableMethod","observable","items","newPromiseCapabilityModule","perform","try","promiseCapability","ReflectMetadataModule","toMetadataKey","ordinaryDefineOwnMetadata","defineMetadata","metadataKey","metadataValue","deleteMetadata","arrayUniqueBy","ordinaryOwnMetadataKeys","ordinaryMetadataKeys","oKeys","parent","pKeys","getMetadataKeys","ordinaryHasOwnMetadata","ordinaryGetOwnMetadata","ordinaryGetMetadata","getMetadata","getOwnMetadataKeys","getOwnMetadata","ordinaryHasMetadata","hasMetadata","hasOwnMetadata","addAll","difference","newSet","getSetIterator","intersection","hasCheck","isDisjointFrom","isSubsetOf","otherSet","isSupersetOf","arrayJoin","separator","sep","symmetricDifference","union","at","relativeIndex","StringMultibyteModule","STRING_ITERATOR","$StringIterator","point","codePoint","codePoints","defineWellKnownSymbol","factory","objectToString","isFunction","escapeRegExp","hasProperty","propName","regExpTest","nonSpaceRe","isWhitespace","entityMap","&","<",">","\"","'","/","`","=","whiteRe","spaceRe","equalsRe","curlyRe","tagRe","parseTemplate","template","tags","openingTagRe","closingTagRe","closingCurlyRe","lineHasNonSpace","sections","tokens","spaces","hasTag","nonSpace","indentation","tagIndex","stripSpace","pop","compileTags","tagsToCompile","mustache","token","openSection","scanner","Scanner","eos","scanUntil","valueLength","scan","nestedTokens","collector","numTokens","nestTokens","lastToken","squashedTokens","squashTokens","tail","Context","view","parentContext","cache",".","Writer","templateCache","_cache","re","substring","search","lookup","primitive","intermediateValue","context","lookupHit","clearCache","parse","cacheKey","isCacheEnabled","render","partials","config","getConfigTags","renderTokens","originalTemplate","renderSection","renderInverted","renderPartial","unescapedValue","escapedValue","rawValue","j","indentPartial","partial","filteredIndentation","partialByNl","indentedValue","escape","getConfigEscape","defaultWriter","s","Mustache","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","_invoke","GenStateSuspendedStart","arg","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","record","tryCatch","info","resultName","nextLoc","sent","_sent","dispatchException","abrupt","GenStateSuspendedYield","GeneratorFunction","GeneratorFunctionPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","invoke","__await","then","unwrapped","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","isNaN","displayName","isGeneratorFunction","genFun","ctor","mark","awrap","async","Promise","iter","reverse","skipTempReset","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","finish","catch","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","EventUtil_1","ModuleTracking","ModuleTrackingLoadedEvent","eventCategory","eventAction","eventLabel","eventValue","gtag","event_action","event_category","event_label","warn","ga","log","closestCategory","closest","attr","closestAction","closestLabel","not","each","on","ModuleTrackCategory","ModuleTrackAction","ModuleTrackLabel","hasClass","GoogleEvent","modtrkloaded","modTrkLoadedEvent","EventUtil","createCustomEvent","dispatchEvent","selection","ConsoleLabel","cat","act","lab","TrackLinks","moduletracking","AsyncEvent","_listeners","all","detail","cancelable","CustomEvent","bubbles","createEvent","initCustomEvent","listenAsyncEvent","evt","asyncEvent","dispatchAsyncEvent","BackNextButton_1","behaviors_1","PageContext_1","UrlUtil_1","WyanokeUtil_1","ModuleTracking_1","GoogleIdentityBottom_1","AppleIdentityBottom_1","WyanokeContext","_pageContext","BackNextButton","UpdateStepsEvent","updateActivityState","AboutToContinueEvent","pageContext","PageContext","qsMap","UrlUtil","getQueryString","WyanokeUtil","logOut","RedirectUnauthenticated","componentFactory","loadComponents","body","DisplayAuthLinks","AppleIdentityBottom","GoogleIdentityBottom","manageActivityState","pageEditor","Sitecore","PageModes","PageEditor","Boolean","activity","Activity","currentStepId","CurrentStepId","isExperienceEditor","Expires","expires","Date","today","getTime","service","userActivityService","completeActivityStep","expirationDate","specialty","Specialties","Title","segments","getUTCFullYear","getUTCMonth","getUTCDate","expiredUrl","href","pathname","specialtyIndex","LMSName","loginqs","profile","loadUserProfile","currentStepType","_c","_b","_a","Steps","Id","Type","stepType","notloggedin","isLoggedIn","url","setQueryString","redirectUrl","activityStepRedirectTarget","globalsPromise","testForSuccess","UserProfile","legacyJQuery","$j","one","defaultGuid","loggedIn","existing","contactid","GetDateISO8601","date","pad","num","norm","tzo","getTimezoneOffset","dif","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","loadContext","itemid","isMobile","navigator","loggedOut","reload","fail","logIn","append","fragDelimiterIdx","fragment","withoutFrag","qsDelimiterIdx","encodeURIComponent","lcName","qs","kvp","pair","decodeURIComponent","updated","externalUrlCheck","allAElementsInDiv","anchor","hostname","Component_1","ComponentFactory_1","DomUtil_1","HealioHeader_1","Component","super","UserReviewedModal","getElementById","_userDirection","DomUtil","query","_isOpen","_next","ev","handleNext","_hasMasterClassModal","dataset","masterclass","_back","handleBack","_showUserReviewedModal","getAttribute","setModalVars","click","classList","setAttribute","removeEventListener","stopPropagation","_element","NextNavigationEvent","openReviewModal","preventDefault","shouldContinue","openMasterClassModal","HealioHeader","UnauthenticatedActionEvent","modal","closeLinks","queryAll","closeLink","closeReviewModal","_reviewModalOptionYes","handleReviewModalInput","_reviewModalOptionNo","clickOutsideReviewModal","UseGoogleTrack","removeAttribute","composedPath","alert","closeMethodTypeElem","currentTarget","methodType","ComponentFactory","registerComponent","handleDocumentReady","signInCallBack","checkSessionForModal","getUrlParameter","fetch","response","text","insertAdjacentHTML","googleUser","welcomeModal","ssoLoginMethod","select_by","gtagGoogleIdentity","googleid","credential","clientid","headers","Content-Type","JSON","stringify","json","firstname","given_name","lastname","family_name","emailaddress","email","handleGoogleUser","xhr","crmSourceSso","cookieNum","cookie","row","startsWith","maxSso","maxpageviews","viewsSso","itemPath","docinfo","regdata","EmailAddress","FirstName","LastName","IsGoogleUser","SourceName","results","cid","action","showReminder","showRequest","loginEvent","targeturl","regUrl","origin","loadReminderModal","hash","urlParams","URLSearchParams","isGoogle","userProfile","completeuser","getCookie","parts","lastPart","eventparams","non_interaction","contactId","returnUrl","ajax","contentType","ContactId","success","HealioErrorEvent","appleUser","gtagAppleIdentity","handleAppleUser","IsAppleUser","isApple","ActivityService_1","ArticleService_1","CertificateService_1","EmailSignUpService_1","GamificationService_1","HealioStoreService_1","HssPollAnswerService_1","LandingPageService_1","MyCmeService_1","NotificationBoxService_1","QBankService_1","QuestionAnswerService_1","RecommendedService_1","SavedPageService_1","TopicAlertService_1","TopicListService_1","TranscriptService_1","UserActivityService_1","UserProfileService_1","QuikQuizService_1","FindRequirementsService_1","UserGoalsService_1","UserLoginService_1","contextElement","_userLoginService","_userGoalsService","_findRequirementsService","_activityService","_articleService","_certificateService","_emailSignUpService","_gamificationService","_healioStoreService","_hssPollAnswerService","_myCmeService","_notificationBoxService","_qbankService","_questionAnswerService","_quikQuizService","_recommendedService","_savedPageService","_topicAlertService","_topicListService","_transcriptService","_userActivityService","_userProfileService","querySelector","_data","userLogin","parseEndpoint","eduUserGoalsUpdate","load","findRequirementsLoad","activityServiceLoad","articleServiceLoad","schemaDotOrg","articleServiceSchemaDotOrg","save","emailSignUpSave","addProductToCart","healioStoreAddProductToCart","productsByCategoryId","healioStoreProductsByCategoryId","getAnswerCounts","hssGetAnswerCounts","hssPollAnswersLoad","hssPollAnswersSave","saveAnswer","qbankSaveAnswer","completeQuiz","qbankCompleteQuiz","getCurrentTake","quikQuizGetCurrentTake","myCmeLoad","jsonLoad","myCmeJsonLoad","eduNotificationBoxNotifications","deleteNotification","eduNotificationBoxDelete","updateSettings","eduNotificationBoxUpdateSettings","questionAnswerLoad","questionAnswerSave","recommendedServiceLoad","emptyep","savedPageLoad","remove","savedPageRemove","savedPageSave","topicAlertLoad","register","topicAlertRegister","topicAlertSave","topics","topicListApi","topicsAndCreditTypes","topicAndCreditTypeListApi","generate","generateTranscript","emailTranscript","userActivityFilter","userActivityLoad","userActivityRemove","userActivitySave","generateCertificate","userActivityGenerateCertificate","updateCertificate","userActivityUpdateCertificate","updateStep","userActivityUpdateStep","removeNotification","userActivityNotificationRemove","generatecertificate","updatecertificate","updatestep","removenotification","gamificationLoad","gamificationSave","loadall","gamificationLoadAll","getrelatedcontent","gamificationGetRelatedContent","zip","certificateZip","certificatePath","certificateEmail","emailzip","certificateEmailZip","userProfileUpdate","getCustomFields","userProfileGetCustomFields","updateUserSiteSettings","userProfileUpdateSiteSettings","updateSiteSettings","raw","toUpperCase","serviceName","LandingPageService","endpoint","activityServiceEndpoint","ActivityService","findRequirementsServiceEndpoint","FindRequirementsService","userLoginServiceEndpoint","UserLoginService","userGoalsServiceEndpoint","UserGoalsService","articleServiceEndpoint","ArticleService","emailSignUpEndpoint","EmailSignUpService","healioStoreServiceEndpoint","HealioStoreService","hssPollAnswerEndpoint","HssPollAnswerService","qbankServiceEndpoint","QBankService","quikQuizServiceEndpoint","QuikQuizService","myCmeEndpoint","MyCmeService","notificationBoxEndpoint","NotificationBoxService","questionAnswerEndpoint","QuestionAnswerService","recommendedEndpoint","RecommendedService","savedPageEndpoint","SavedPageService","topicAlertEndpoint","TopicAlertService","TopicListService","transcriptServiceEndpoint","TranscriptService","certificateEndpoint","CertificateService","userActivityEndpoint","UserActivityService","gamificationEndpoint","GamificationService","userProfileEndpoint","UserProfileService","__exportStar","mustache_1","__importDefault","BindMyCme","_isBound","MyCmeJson","MyCmeItemTemplate","MyResourceItemTemplate","myCmeService","savedPageService","_creditBreakdownTemplate","innerHTML","SavedPageIncrementEvent","updateSavedCount","SavedPageDecrementEvent","UpdateCreditsEvent","updateCreditsCount","textContent","credits","toFixed","queryString","sectionContains","expandAccordion","scrollToSection","collapseToggleElement","contains","accordionElement","scrollIntoView","behavior","loadMyCmeJson","_d","activitySiteName","siteName","myCmePromise","getMyCme","myHealioCmePromise","getMyCmeJson","savedPagePromise","list","myCmeInfo","savedPages","username","profession","professionAndSpecialty","totalCreditsRaw","totalCredits","completed","inProgress","saved","site","toLocaleLowerCase","totalCreditsElement","decimalPlaces","formatCredits","bindValues","bindMyScrollToTargets","bindCreditBreakdown","targets","creditBreakdown","frag","createDocumentFragment","node","sorted","sort","aType","creditType","bType","firstChild","showCreditBreakdownLabel","labelTarget","parsed","updateCredits","newCredits","activities","renderedItems","renderedTemplate","default","resources","resource","selector","throwError","querySelectorAll","FetchUtil_1","StringUtil_1","_endpoint","_savedPageRequests","ep","savedPage","FetchUtil","sendMessage","unknownres","message","documentid","cachedPromise","encodedContactId","encodedContentType","StringUtil","supplant","serverMsg","parentElement","elementToShow","parentNode","dataAttr","DisplayMode","Anonymous","Known","show","css","All","UiUtil_1","CookieUtil_1","Leaving","leavingParams","currentTargetElement","_ignoreTargets","_ignoreExtensions","_ignoreClasses","_leaveElement","_dontShowElement","_trackingUrl","trackingUrl","_trackingCategory","trackingCategory","_externalLinksFilter","externalLinksFilter","allAElements","filteredAElements","aClass","className","extension","endsWith","aElement","off","handleExternalLinkClick","attachToExternalLinks","handleDontShow","UiUtil","toggleButtonState","handleLeavingConfirmed","cookiename","checked","Cookie","setCookie","deleteCookie","linkClicked","trackClick","animateScroll","padding","animateSlide","offset","duration","nextPos","animate","left","toggleAccordionIcon","toggleClasses","toggleClass","button","originalText","loadingText","disabled","collapseDivOffTargetClick","collapsibleDiv","collapseDiv","elementClicked","collapse","elementInViewport","top","offsetTop","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","pageYOffset","innerHeight","pageXOffset","innerWidth","replaceDataSrcWithSrcInImageTags","currentHtmlString","tempDivElement","removeAttr","scrollToTop","scrollTop","getCookies","setTime","setDate","toUTCString","setSessionCookie","shift","LineClamp","_truncationElements","_ticking","handleResize","readTruncationElements","truncate","lineClamp","lineHeight","getComputedStyle","word","characters","lastCalculationAtHeight","lastCalculationAtWidth","lastKnownScrollHeight","scrollHeight","lastKnownScrollWidth","scrollWidth","requestTick","requestAnimationFrame","high","low","mid","requireAuthElement","redirectForUnauth","lastSlashIndex","lastIndexOf","substr","_loadedComponents","componentName","componentClass","componentClasses","scope","getAllComponents","component","errorsEncountered","warningsEncountered","elements","groupCollapsed","components","htmlElement","groupEnd","warningCount","errorCount","totalCount","componentCount","toLocaleString","CheckEmailEndpoint","removeClass","handleRegistrationNeeded","globalContext","sitename","langroot","languageRoot","suffix","queryStringMap","loginQuery","getElementsByClassName","showRegistrationModal","d","is","hide","LocalStorageUtil_1","SaveIcon","dataStore","dataStoreKey","saveIconStorage","handleSaveHandler","handleSave","handleSaveRemoved","LocalStorageUtil","updateCurrentState","saveAfterLogIn","activityId","label","icon","saveActivityPage","storedSaveIcon","getItem","deleteItem","insertItem","userId","activityUrl","activityTitle","expiresDate","contenttype","title","userid","ct","iconState","completedactivities","storageName","isLocalStorageAvailable","localStorage","setItem","removeItem","localStorageKeys","storageKey","keyarray","retrievedItem","ClinicalGuidanceMonographNav","setActiveCard","handleScroll","navLinks","navLink","handleClick","mobileCollapseButton","handleExpand","targetAnchorName","targetElement","collapseButton","articleSideDiv","activeTargetAnchor","activeNavCardHeader","activeNavItemSet","activeTargetAnchorName","asctiveNavLink","sectionAnchor","parentCardHeaderElement","ItemState","ActivityStepNavigation","_lastKnownPositions","anchorTop","footerTop","scroll","stepperHeight","_stickyAnchor","_stepper","handleNavLinkClick","Active","Completed","Disabled","Default","itemState","regularElement","isCompleted","closestAElement","stepId","applyItemStateClasses","parentGroup","updateGroupState","group","states","children","matches","readItemState","groupState","firstChildId","isExpanded","getStepIndex","getCurrentStepId","anchorOffset","updateLastKnownPositions","updatePosition","statePromise","currentState","steps","idx","stepid","updateItemState","ccLink","toggle","tooltip","knownKeys","unknownKeys","msg","unknownKey","windowTop","addClass","Certificate","creditEarned","creditTypeEarned","currentStep","completedSteps","canComplete","certificate","claimedCredits","minimumFractionDigits","credittype","ClaimCredit","hasBeenCompleted","selectedCreditType","certType","creditAmountSelector","handleNextNavigation","handleCreditTypeChange","nameField","fullName","uaService","up","userProfileService","ids","fieldId","fields","customFields","validationType","getFormattedDate","disableWhenCompleted","emailDataSourceId","selectedElement","serializeArray","claimCreditRow","fadeTo","prop","loadingDiv","activityDiv","certificateService","maxcredits","maxCreditInput","toggleSelectCreditTypeError","validateCreditQuestions","updateProfileInformation","handleLoadingDisplay","saveCredits","certTemplate","creditTypeInfo","allData","savedActivity","spService","accmeSubmissionStatus","creditTypeId","datasourceId","ups","fieldsToUpdate","createonly","updateProfile","clearError","certificateSelectElement","certificateSelectError","radValue","creditAmounts","creditTypes","Types","ca","CreditAmounts","am","opt","Amount","creditQuestions","q","hidden","isValidOverall","creditQuestionContainers","cont","inputType","errorSelector","isQuestionValid","validateDate","validateText","validateCheckbox","validationRegex","regexp","visibility","year","month","day","CmeActivityContent","startActivityStep","CmeAttestation","_profile","_attestationCheckBox","_claimCreditsButton","userActivityState","posttestStep","attestation","initAttestation","claimCreditsButton","attestationCheckBox","posttestidx","posttest","currentstep","stepdata","activityid","timestamp","stepdatastring","request","XMLHttpRequest","btoa","unescape","setRequestHeader","send","onreadystatechange","readyState","DONE","status","Url","CmeRequiresPaymentModal","_shouldInit","Price","_activityPrice","priceSpan","_commerceMode","CommerceMode","hasPurchased","purchased","isComplete","hasjrnlaccess","requireQuery","queryStringAppendCharacter","CmeTestFailedModal","CmeTestPassedModal","_continueElement","_evalUrl","evaluationUrl","handleContinueConfirmed","evaluationStep","backNext","getComponent","CommerceStartActivity","LeavingCmeModal","_leaving","_activityUrl","filterExternalLinks","HealioErrorModal_1","QuestionGroupModel_1","QuestionModel_1","PollQuestion","interspersedCorrectIncorrectFeedback","interspersedRationaleFeedback","minscore","questionGroupType","requireall","scored","taTimer","setQuestionData","submitPoll","questionAnswerService","questionGroupData","getAnswers","questiongroupid","attempt","questions","qe","questionid","qeType","answers","ae","answerid","av","disableAllQuestions","m","_ref","_qg","questionGroup","QuestionGroupModel","toISOString","question","QuestionModel","tagName","confidence","saveQuestionGroup","qgd","collectQuestionGroupData","saveAnswers","HealioErrorModal","triggerHealioErrorModalEvent","showModal","_id","_name","_type","_minscore","_userid","_activityid","_attempt","_attemptdate","_complete","attemptdate","firstanswers","_text","_key","ProgressBar","updateProgressBar","progress","laststep","QuestionGroup","questionGroupName","singletake","correctClass","incorrectClass","incompleteClass","base10","fa","qg","questiongroupId","existingQuestionGroup","existingQuestions","questionId","qafaTest","fqa","existingQuestion","eq","qfa","thisfaTest","getFirstAnswer","qq","clickableAnswers","textAnswers","answer","inputChanged","bufferTextAreaChange","textAreaOnBlur","submit","clearAllQuestionClasses","doValidation","doScoring","questionGroupSaved","showRationale","cmetestpassed","disableNext","cmetestfailed","passmsg","failmsg","tryagain","qr","showMessage","minlength","textarea","textareaval","anslen","regex","incompletearray","firstincomplete","pass","correct","infotext","setQuestionClasses","hideMessage","incorrectarray","firstincorrect","eb","clearQuestionClasses","eba","setAll","_questionGroupId","confidenceGroup","conf","clearTimeout","SingleSignOn","_sso","ActivityCard","images","image","AjaxTrackLinks","LandingCardLayout_1","ActivityFeatured","featuredClasses","featuredCol","LandingCardLayout","LandingCardLayoutLoadedEvent","updateFeatured","featureHtml","featured","landingLayout","featuredClass","initEvent","SpecialtySelect_1","SubSpecialtySelect_1","TopicFilter_1","LandingCardLoader_1","__importStar","TopicAndCreditTypeFilter_1","ViewBySpecialty_1","_articleItemTemplate","_featuredItemTemplate","_lastRequestId","_listItemTemplate","_startPage","_loading","_tempDivElement","_lastKnownScroll","_spinner","featuredContentElement","listItemTemplateElement","listingItemTemplateHtml","featuredItemTemplateElement","page","TopicFilter","TopicFilterChangeEvent","handleFilterChange","SubSpecialtySelect","SubSpecialtySelectInitEvent","handleSubSpecLoad","LandingCardLoader","LoadPageEvent","handleLoadPage","LoadFilteredPageEvent","changeFilter","LoadMoreEvent","handleLoadMore","onerror","stopSpinner","masonry","columnWidth","gutter","itemSelector","percentPosition","LandingCardLayoutLoadedInit","autoload","loadCards","timeout","additionalParameters","cards","renderedCards","card","Articles","article","renderedArticle","unwrap","scrollY","requireUserprofile","getCardService","startSpinner","specialtySelect","SpecialtySelect","topicFilter","creditTypeFilter","TopicAndCreditTypeFilter","viewBySpecialty","subspecialtySelect","templates","templateIds","ViewBySpecialty","topic","topicId","subspecialty","requestId","renderedFeaturedTemplate","pageId","divNode","renderCardsFromTemplate","child","firstElementChild","dereferenceComponents","ele","count","total","scrollTo","ActivityLoader_1","ActivityLayout","_cells","calculateCells","_lastKnownCellWidth","_lastKnownWidth","reflow","ActivityLoader","cell","flexBasis","outerHeight","marginTop","marginBottom","h","activityService","spinner","nextOrder","knownSpecialty","ActivityLayoutLoadedEvent","firstCell","newColumnCount","columns","cells","column","order","lastCell","unfilledHeight","maxHeight","attemptUrlPatternMatch","referrer","attemptUserProfileMatch","handleSpecialtyClick","mobileH1","getCurrentDropDownValue","specialtyHealder","SpecialtySelectInitEvent","specialtyElements","urlPattern","selected","dropdown","ignorePaths","rootPath","ds","lc","specialties","setSelectedItem","newLocation","hasSpecialty","contentspecialty","maps","ActivityLayout_1","_working","_paginationContainer","_loadMoreTemplate","handleLoad","currentPage","totalPages","cursor","hasAttribute","loadMore","loadPage","renderLoadMore","insertAfter","ChangePageEvent","_lastSelectedValue","_selectedTopics","_specialtyId","_topicMenuContainer","_topicMenuTemplate","_topicChipsContainer","_topicChipsTemplate","_clearButton","_applyButton","handleSpecialtyChange","handleMenuApply","handleClearAll","topicListService","getTopicsBySpecialty","cookieValue","selectedTopics","updateTopics","specialtyChangeEvent","newValue","topicName","updateChips","showHideClearFilter","raiseChangeEvent","clearCheckboxes","chip","removeChip","chipMenuItem","selectedTopicIds","filterValue","cname","GoalChart","userSettingsService","collapsed","sitesettings","mygoalcollapsed","accordion","accordionArrow","HideCMENotifications","hidecmenotifications","MyGoalCollapsed","GoalModalsShown","goalmodalsshown","updateUserSettings","NotificationBox","_notificationItemTemplate","_activityCreditItemTemplate","notificationBoxService","notificationBoxStorage","activityCreditItemTemplateElement","notificationItemTemplateElement","notificationsToggleElement","updateUserProfileNotifications","setNotificationBellAlertsOn","setNotificationBellAlertsOff","userProfileSettingHideCme","settingCollapseButton","loadNotifications","getExpiringActivities","countBadgeElement","innerText","notificationTempDivElement","credit","activityNotificationRendered","Credits","activityCreditRendered","engagementStatDiv","insertBefore","listingElement","bindToDeleteNotificationButtons","deleteBtn","bellBadgePill","currentPillValue","newPillValue","listItem","showNotifications","updateNotificationSettings","ManageEmailSubscriptions","_loggedOutElem","_emailConfBox","_specialtyBrowse","_unsubcribeAllBtn","_sendNotification","specOptions","filterOfferings","mySubsUnsubscribeElems","us","myUnsubscribe","subscribeElems","newswireSubscribe","topicAlertSubscribeElems","topicAlertSubscribe","undoElems","undoSubscribe","uSubAll","unsubscribeAllUndoButton","unsubscribeAllUndo","unsubscribeAllCloseElem","handleUnsubscribeAlert","xElems","handleToolTipClose","verboseLog","mEmailSent","emailElem","unEmailTxtElem","GetListsForMember","checkForUserSpecialty","elem","closestTooltip","closestDiv","specName","livecme","pc","sb","ns","onlineCme","cmehealio","cmevme","cg","jData","dataType","GetAllListsForMemberResult","subscribedto","subscribedList","visibleEmailTooltips","associatedListItem","subscriptionListGroup","verticalPosition","currentTooltip","transform","jqXHR","textStatus","errorThrown","userSubCookie","userSubs","checkboxHandlerByListid","UnsubscribeListMemberFromAllResult","newswireSubscribeById","listId","listid","sendnotification","ManageListMemberResult","closestListIdElem","newswireName","manageToolTip","newStatus","originalStatus","sendNotification","closestSection","toolTipUnsubscribe","toolTipSubscribe","targetButton","substatus","subscribeMode","nameElem","verbose","LandingCardFeatured","_lastValue","attemptTagPatternMatch","handleSubSpecialtyClick","subspecialtyElements","subspec","primarysubspecialty","subspecialties","subspecialtyId","_selectedCreditTypes","_creditTypeMenuContainer","_creditTypeMenuTemplate","_chipsContainer","_creditTypeChipsTemplate","_clearTopicsButton","_applyTopicsButton","_applyCreditTypesButton","handleClearAllTopics","getTopicsAndCreditTypesBySpecialty","selectedCreditTypes","creditIds","topicIds","creditTypeName","removeTopicChip","removeCreditTypeChip","selectedCreditTypesIds","ViewBySubSpecialty_1","_selectedSpecialty","selectedSpecialty","specialtyId","ViewBySubSpecialty","LandingNoMasonry","_pageNumber","_loadMoreButton","pageNumber","cardContainer","_cardContainer","LoadNextPageEvent","loadNextPage","loadMoreButton","viewBySubSpecialty","configSettingName","showLoadMore","_selectedSubspecialty","selectedSubspecialty","MasonryReflow","MasonryReflowInitEvent","reflowTimer","forceMasonryReflow","ReflowMasonry","reflowMasonry","interval","setInterval","clearInterval","AjaxCustomComponentLoader","loadComponentEvent","handleEvent","elemId","targetElem","ReloadComponents","EmailSignUpSuccessModal_1","EmailSignUp","invalidClass","_subscribe","handleSubscribe","emailInput","specialtyEmailList","selectedIndex","isValidEmail","signUpRequest","eolist","nwspec","crmSource","emailSignUpService","signUpResponse","responseHtmlOptions","signupResponse","responseHtml","Name","Text","EmailSignUpSuccessModal","SignedUpForEmails","showSignUpModal","modalBody","htmlEncode","ignored","propertyName","EmailSignUpEoOnly","HealioFooter","HealioSearchBox","searchInput","keyboardEvent","doSearch","searchButton","queryterm","getSearchHost","ListUnstyled","LoginSignupSplash","contextid","reqUrl","ScrollToTopButton","scrollFunction","documentElement","MasterClassActivityCard","_service","startButton","progressbar","percent","buttonText","getActivityStatus","setModuleTracking","incompleteStep","stepUrls","setProperty","_e","creditText","incompleteCredits","completeCredits","gameState","_f","gamificationService","getActivityState","acc","maxpoints","earnedpoints","masterBadgeItem","cmeBadgeItem","MasterClassActivityContent","GamificationActivity","claimCreditStepId","awardBadges","gameStatsStepId","_g","_h","_j","nextStep","skipto","nextLink","updatePoints","badges","points","updateBadges","MasterClassModals","_startingPonts","updateModals","valueMax","selfLink","cmeBadgeSrc","alt","cmeBadgeAlt","masterBadgeSrc","masterBadgeAlt","activityState","totalMax","totalEarned","activityComplete","earned","pointsText","updateModalProgress","hideElements","showElements","bar","MasterClassPointSummary","updateBars","pointsType","contentpercenttotal","resourcepercenttotal","testpercenttotal","largest","multiplier","contentpercent","resourcepercent","testpercent","contentearned","round","resourceearned","testearned","updateSingleBar","finalScore","score","percenttotal","earnedstring","zeroLabel","review","MasterClassPointTracker","intializing","changeText","newText","textId","textDefault","textPointsMissing","textPointsMax","textCorrect","textIncorrect","textFailed","textPassed","textNext","badge","textReview","textReviewNext","barid","showTooltip","newPoints","oldPoints","MasterClassProgressBar","setProgress","incrementProgress","completeSteps","newWidth","questionAnswered","questionCount","MasterClassQuestionGroupNonScoring","firstanswer","setRatingScale","showErrorOnSaveFailed","ratingGroupAnswers","QuestionModelMasterClass_1","MasterClassQuestionGroupPosttest","resumemode","reviewmode","retakemode","questionIndex","questionsCorrect","questionsAnswerable","initializeContext","setQuestionVisibility","updateProgress","initializeListeners","determineMode","questionElement","questionElementType","answerElement","confscaleinputs","confidenceInput","answerClick","confidenceAnswers","handleConfidenceClick","btnNextQuestions","btn","handleNextFinishClick","firstVisibleQuestion","resetQuestion","setConfidenceVisibility","inp","showtext","postTestButton","nextButton","rationaletext","QuestionModelMasterClass","updateGamificationPoints","numCorrect","maxPoints","pointArray","ratingElem","correctCountBefore","correctCountAfter","setButtonRationaleVisibility","formCheckInline","confidenceValue","updateText","eventTarget","btnPostTest","currentquestion","selectedAnswer","nextSibling","nextUnansweredSibling","getNextSiblings","nextElementSibling","final","sibs","nodeType","htmlElem","myParam","inprogress","MasterClassQuestionGroupPretest","questionsAnswered","ratingInputChanged","btnRationalDivs","handlePostTestButton","displayQuestion","btnNextQuestion","MasterClassRelatedContent","getRelatedContent","relatedContent","MasterClassTrophyCase","awardedBadges","badgeId","MasterClassVideo","videoStep","pointsEarned","HomeSpecialtySelect","HonoreeSpecialtyFilter_1","HonoreeListing","_honoreeDefaultImageUrl","_honoreeDivTemplate","defaultImageHiddenInput","_honoreeDivTemplateElement","honoreeDivTemplateHtml","HonoreeSpecialtyFilter","HonoreeSpecialtyFilterChangeEvent","handleSpecialtyFilterChange","selectedYear","HonoreeActiveYearSelector","nominees","nominee","PhotoLink","specialtySelected","yearSelected","loadingSpinner","filteredNominees","Specialty","NominationYear","renderedNominees","renderNomineeDivsFromTemplate","eventDetailArray","staticSpecialties","handleYearClick","filterSpecialtyOptions","currentSelectedYear","selectedYearElement","filteredSpecialties","specialtyElement","currentSelectedSpecialty","selectedSpecialtyElement","filteredYears","yearElements","yearElement","selectedSpecialtyValue","selectedYearValue","selectedValue","filterYearOptions","triggerChangeEvent","HonoreeYearFilterChangeEvent","HonorsScrollingBanner","_HonorsScrollingBannerListItemTemplate","_honorsScrollingBannerTemplateElement","honorsScrollingBannerTemplateHtml","slidingUnorderedList","infiniteslide","speed","direction","pauseonhover","responsive","clone","slideWrapContainer","CollapseCardSection","_collapseButton","_collapsedButtonText","collapsedButtonText","_expandedButtonText","expandedButtonText","ensureCollapseButtonIsInView","handleCollapseButtonClick","btnClassToAdd","btnClassToRemove","PollCompleteModel_1","healio_custom_scripts_newsarea_1","HssPollCard","compareToPeersClass","pollClass","hssPollStorage","_anonymousId","_cardBody","_cardFooter","_submitElement","_pollId","pollGroupId","_questionDivs","_pollCard","pollAnswers","pollId","questionDiv","questionText","answerId","answerText","pollAnswer","ContactID","AnonymousID","ActivityID","PollID","QuestionID","QuestionText","AnswerID","AnswerText","TS","PollCompleteModel","continueClicked","submitClicked","currentPollAnswers","getPollAnswers","setCompare2Peers","InitNoAnswers","currentPollQuestion","pollanswer","setPollComplete","currentQuestionIndex","answerInput","carousel","_k","_l","_m","_o","checkForPreviousPollClick","_p","_q","_r","InitAnswers","clickEvent","anonymousId","storedElementId","collapsedDiv","pollElementPreviouslyClicked","totalAnswers","pollAnswerCounts","getPollAnswerCounts","Count","compare2PeersDiv","pvLineItem","pbDiv","answerCount","percentAnswered","progressLineItem","AnswerId","progressBarDiv","savePollAnswers","questionDivs","questionDivArray","currentQuestion","activeCarouselItem","cardFooter","pollCompleteDiv","hssPollAnswerService","loadAnswers","completePoll","pollAnswerData","collectPollAnswerData","_pollAnswers","PollAnswers","WyanokeContext_1","HssQuizCard","_nextElement","_finishElement","_quizId","quizId","_quizComplete","quizComplete","_quizScore","quizScore","setQuizComplete","nextClicked","finishClicked","currentQuestionDiv","correctAnswerId","correctAnswer","saveQuizAnswer","rationale","saveQuizStatus","scrolltop","quizScoreDiv","calculateScore","qbankService","LearningSiteMyQuizzes","learningSiteId","handleSorting","loadResults","sortMode","reA","reN","quizlist","aA","CreatedDate","bA","aN","bN","nameA","CustomName","nameB","IsCompleted","Score","titlecase","renderedText","outarray","wordarray","testscoreformat","LearningSiteNextArticle","_learningSiteNextArticleRequested","Visitor","botCheck","isbot","articleFooter","recommendedUrl","getRecommendedUrl","currentDocId","nextArticleId","nextArticleUrl","myHeaders","Headers","ok","enableTrustBox","tempDiv","articleContainers","lastArticleContainer","articleInnerContentDiv","gradientDiv","continueReadingButton","continueReadingUrl","articleContainer","nextArticleClass","articleContentDiv","outerHTML","emailTopicAlertComponents","topicAlertCopmonent","perspectiveLinks","perspectAElement","mobileTrustBox","leftColumn","loadNextArticleComponents","nextArticleElement","recommendedClass","firstRecommended","recommendedAElement","LearningSiteQuizExitModal","LMSTopicSelect","topicList","topicButton","currentPath","activetopic","FilterSelect","handleItemClick","params","URL","searchParams","decodeURI","selectedItem","FilterSelectChangedEvent","filterSelectName","changeSelectedItem","UserStatBox_1","MyActivities","userStatBox","UserStatBox","setCardBodySize","getCurrentHeight","UserStatBoxLoadEvent","heightDiff","clientHeight","newCbHeight","cb","MyActivitiesResizeEvent","BindMyCme_1","LineClamp_1","_myCmeBinding","InProgressDeletedEvent","handleInProgressDeletedEvent","updateCreditBreakdownWidths","applyTo","childElementCount","inProgressBox","numInProgress","MyCMEInProgress","inProgressActivities","spinnerDiv","myCmeJson","ActiveUserActivities","inProgressActivityItems","renderCmeItemsFromTemplate","activitiesListingDiv","editBtn","slidingElement","removeUserActivity","inProgressDiv","emptyMessageDiv","MyCMESaved","savedActivities","savedResources","SavedUserResources","savedResourceItems","renderResourceItemsFromTemplate","cmeResourcesDiv","SavedUserActivities","mySavedDiv","savedActivityItems","slidingElementMobile","MyCmeRibbon","FilterSelect_1","MyCompletedDisplay_1","TranscriptModal_1","MyCompleted","_alreadyClicked","_generateButton","LoadMoreButton","handleGenerateTranscript","transcriptStart","transcriptEnd","updateTable","startDate","endDate","startDatePicker","selectedDate","endDatePicker","srcFilter","creditFilter","allSelector","getAllSelector","updateFilters","filters","myCme","filterUserActivities","displays","MyCompletedDisplay","updateOptions","disp","transcriptService","TranscriptModal","transcript","createTranscript","_showPromise","_transcript","handlePrintTranscript","handleEmailTranscript","changeState","emailAddress","visibleFor","visibleInState","pdfUrl","form","checkValidity","MyCompleted_1","Container","_activity","_externalActivity","_activityTitle","_lmsname","_container","_creditTypeWithNotice","_creditTypeWithoutNotice","_disabledActivityTitle","_certRemoveModal","attachEvents","setBodySize","mobileExpandCompletedList","resetRemoveModal","maxvis","viewMore","collapsedStyle","viewMoreCollapsedStyle","viewMoreStartLength","dataidx","datum","resolveActivityTitle","lmsname","resolveLMSName","certificateUrl","resolveCreditType","resolveCredits","dateEarned","resolveDateEarned","provider","resolveProviders","isExternal","externalActivityTemplate","appendTo","ActivityListChangedEvent","popover","trigger","handleLineRemoveClick","expandable","expandedStyle","viewMoreExpandedStyle","cl","panel","handleModalRemoveClick","errorcol","removeRow","providers","formatted","creditNotice","parseFloat","currentValue","actUrl","isExpired","statBoxHeight","myCompleted","myCompletedHeight","header","newHeight","table","MySavedPages","itemId","savedItem","ArticleContent","lightboxImages","componentId","crypto","randomUUID","EmailTopicAlert","_listTitle","_listId","_isSubscribed","topicAlertStorage","addButton","alreadyAddedButton","subscribeButton","successDiv","errorDiv","manageEmailLink","TopicAlertAddedEvent","handleTopicAlertAddedEvent","closeAlertButtons","closeAlertButton","collapseEmailTopicAlertBox","manageEmailAlertLinks","alertLink","redirectToManageEmail","topicAlertService","settingItem","primaryspecialtyid","primarysubspecialtyid","currentElement","topicAlertLoadRequest","newswirefilters","Key","Value","sectionfilters","startitemid","topicResponse","getTopicAlertWithStatus","topicTitles","span","ListId","Subscribed","addedTopicIds","showSubscribedButton","showNotSubcribedButton","closeButton","innerAlertBox","topicAlertSaveRequest","savedTopic","handleSuccess","handleError","crmHidden","topicAlertRegisterRequest","registerResponse","storeTopicListsForNonUsers","currentSubDomain","healioSubDomain","isUser","knownLanguage","unknownLanguage","storedIds","NextArticle","_nextArticleRequested","articleTop","newLastArticleContainer","articleTopDiv","ReadNext","cleanArticleId","primarySpecialtyName","primarySpecName","primarySubSpecialtyId","primarySubSpecId","hwsHost","visitedPagesArray","readNextElement","loadReadNext","relatedItems","filterAlreadyRead","visitedPages","recoOneOffsetTop","recoOneTop","recoTwoTop","primaryspecname","primarysubspec","sessionStorage","before","contentBottom","recoTwoOffsetTop","leftColumnTop","filteredResponse","filterResponse","readNextPrimary","readNextOne","readNextTwo","healioUrl","ReadNextContentDiscoverability","readLoaded","articleContentCount","articleContentHeight","nextArticle","cardElem","postedDate","posteddate","formattedPostedDate","engagementtype","engagementtime","video","RelatedContent","relOnePopulated","relTwoPopulated","relThreePopulated","relLoaded","cleanItemId","tMode","readNextThree","populateReadNext","rec","relatedContentHtml","recType","sponsoredContent","mediabody","thumb","thumbnailurl","thumbnailid","mediaidindex","cardBody","sponsorblock","collectionarticleid","collectionarticletitle","WindowLoadEventTracker","category","thisPreserved","PublicationDateSelect","_yearFilter","handleYearChanged","_issueFilter","handleIssueChanged","_viewButton","changeTableOfContents","_issueDates","_issueIds","issue","months","issueStore","yearStore","NumberUtil_1","PublicationSubscription","_bindableEvents","_bigCommerceCategoryId","cartIdKey","healioBigCommStorage","localDataStore","_newsSubscriptionCardTemplate","_newsSubscriptionListItemTemplate","_newsSubscriptionVariantItemTemplate","newsSubsciptionCardTemplate","newsSubsciptionListItemTemplate","newsSubscriptionVariantItemTemplate","_subscriptionCardsElement","_subscriptionUnorderedListElement","categoryId","newspaperHeadingElement","cardHeaderDivElement","slackHeadingElement","loadSubsciptionProducts","publicationSubscriptionComponent","abbreviation","goToAnchorAndToggle","subscribeButtons","subscribeClicked","radioButtonDivElements","divTag","offSet","healioStoreService","productsResponse","products","productsFlattened","product","Abbreviation","sku","CoverImageAlt","CoverImageUrl","url_standard","Variants","variants","variant","ProductId","NumberUtil","formatPrice","calculated_price","UnformattedPrice","VariantId","VariantLabel","option_values","subscriptionListItems","renderListItemsFromTemplate","subscriptionCards","bindToAnchorLinks","bindToSubscriptionRadioButtons","bindToSubscribeButtons","renderedVariantTemplate","renderedCardTemplate","messageId","messageSelector","productAndVariant","cartRequest","cart_id","line_items","quantity","product_id","variant_id","list_price","cartId","cartRedirectResponse","Data","checkoutUrl","checkout_url","priceFormatter","Intl","NumberFormat","currency","format","NewsHeaderLinks","specs","specname","userSpec","specialtyHref","newTarget","atag","NewsLandingRedirect","checkForRedirect","SiteMapSpecialtyFilter","applyButton","allSpec","HealioMinuteSignUp","healioMinuteSubscribedKey","_modalId","_settingsId","modalId","settingsId","subscribeSpans","subscribedSpans","handleEmailChanged","userHasSubscribed","handleAlreadySubscribed","emailInputParent","emailField","Event","MeetingCalendarFilter","_sortElements","handleSortElementClick","sortOrder","toggleActiveState","PinnedSeries","_loadingElement","_loginElement","loginLinks","loginLink","forceLogin","handlePinAdded","handlePinRemoved","hideLoadingElement","loadPinned","elementPinned","pinnedSeriesCard","showOrHideEmptyElement","insureAllPinnedAreActive","existingPinnedSeriesCard","pinnedCards","pinnedCard","pinElement","stateCurrent","pinnedSeriesCards","emptyElement","pinnedSeriesItems","seriesItem","pinnedItem","SpecialtyLandingFeatured","isEmptyObject","YearFilter","_button","QuikQuizProgressBar","_activeClass","_correctClass","_incorrectClass","_dots","updateDot","details","dot","QuikQuizQuestionGroup","_currentQuestion","_resumeQuestion","_questionTemplate","_answerTemplate","_context","takeId","quikQuizService","scrollToNextUnanswered","resume","completeTake","handleQuestionClick","scrollToNext","loadTake","targetQuestion","targetAnswer","ghostCard","showNextQuestion","take","takeid","answeredQuestions","nextQuestion","unansweredQuestions","firstTimeVisit","answerItem","ai","quizContainer","ind","questionLabel","answeredItems","unanswered","firstUnanswered","getBoundingClientRect","scorecard","answerGroup","pointerEvents","submitAnswer","bottom","QuikQuizScoreCard","percentage","CmeActivityRecoCards","loadRecommendedCards","recommendedService","listingViewName","viewDisplay","getReco","HTMLCollection","UserActivityModel","firstviewed","lastviewed","LastViewed","Providers","Topics","collections","Collections","useractivity","providerid","user","address","model","userActivity","rawSteps","sitecoreSteps","rawCertificate","rawCredits","rawType","rawDate","sitecoreStep","rawStep","updateActivity","updateSteps","updateUser","server","sitecoreActivity","serverActivity","existingSteps","serverStep","sitecoreUser","serverUser","npi","subprofession","req","cacheStrategy","encode","credentials","Wy-Encoded","encodeRequestBody","modifiedDate","EmailDataSource","MarketingListRegWithEmailSpecialtyEncResult","Message","ContextItemId","SpecialtyIds","StateIds","_currentStatePromise","_updatePromise","_state","loadCurrentState","stepIndex","saveCurrentState","updateInProgress","ActivityId","lastupdated","gamification","MasterClass","g","endpoint2","SeriesId","url2","activitycard","badgeIndex","cme","GamificationBadges","badgetype","awardMasterBadge","completeActivities","quizearned","quizmax","seriesid","onaroll","perfectscore","superstar","numComplete","risingstar","_t","_s","_u","diamond","_w","_v","_x","encodedActivityId","silver","platinum","bronze","gold","locked","Locked","MaxPoints","localsteps","localstep","serverstep","st","PollId","creditTypeList","_currentMyCmePromise","_currentMyHealioCmePromise","creditbreakdown","totalcredits","_expiringActivityPromise","hideNotifications","_currentMyRecoPromise","viewname","_currentTopicAlertPromise","loadRequest","GetListForTopicEncResult","registerRequest","CheckEmailWithShortRegOpsAddToListEncResult","saveRequest","ManageListMemberEncResult","_api","userSettings","api","fieldIds","startdate","enddate","reminders","TopicId","TopicName","CreditTypeId","CreditTypeName","cacheHit","encodedSpecialtyId","mapTopics","_topicsAndCreditTypesCache","credittypes","mapCreditTypes","anonymousid","quizid","timeremaining","questionItemId","answerItemId","questionitemid","AnswerItemId","Status","questionGroupId","encodedQuestionGroupId","questiongroup","encodedEmail","encodedFilename","filename","DatasourceId","Email","FileName","TranscriptBody","PdfUrl","UserActivityModel_1","_rawStatePromise","lastCompletedStepIdx","activeStepIdx","activeStep","firstStep","_creditType","_year","_startDate","_endDate","nvp","encodedCreditType","encodedYear","resolveCertificateUrl","certUrl","expiredOn","expDate","isexternal","dataArr","saveCertificateUpdate","certpath","credittypeinfo","templateid","stepIdx","currentStepIdx","findActiveStepUrl","previousStep","activeStepId","setComplete","isOverviewStep","saveStepUpdate","saveState","setcomplete","updateFromContext","loadRawState","rawState","certFileName","resetPromises","updateFn","currentActivityStep","transformToViewModel"],"mappings":"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AAexzG,UAAU+I,UACnDyqG,eAAexzG,UAAU+I,QAAUhJ,MAAMC,UAAU+I,U,kyHCKvDvL,EAAA,uBAGAA,EAAA,iDAWA86C,EAAA96C,EAAA,8DAAAhB,GACA87C,EAAA96C,EAAA,mDAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,2CAAAhB,GACA87C,EAAA96C,EAAA,oDAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,kDAAAhB,GACA87C,EAAA96C,EAAA,yCAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,qDAAAhB,GACA87C,EAAA96C,EAAA,8CAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,6CAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,6CAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,gDAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,6CAAAhB,GACA87C,EAAA96C,EAAA,sCAAAhB,GACA87C,EAAA96C,EAAA,8CAAAhB,GACA87C,EAAA96C,EAAA,6CAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GACA87C,EAAA96C,EAAA,gCAAAhB,GACA87C,EAAA96C,EAAA,gCAAAhB,GACA87C,EAAA96C,EAAA,oCAAAhB,GACA87C,EAAA96C,EAAA,8BAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GACA87C,EAAA96C,EAAA,4CAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GAEA87C,EAAA96C,EAAA,iDAAAhB,GACA87C,EAAA96C,EAAA,iDAAAhB,GACA87C,EAAA96C,EAAA,mDAAAhB,GACA87C,EAAA96C,EAAA,gDAAAhB,GACA87C,EAAA96C,EAAA,0DAAAhB,GACA87C,EAAA96C,EAAA,6DAAAhB,GACA87C,EAAA96C,EAAA,0DAAAhB,GACA87C,EAAA96C,EAAA,mDAAAhB,GACA87C,EAAA96C,EAAA,wDAAAhB,GACA87C,EAAA96C,EAAA,oDAAAhB,GACA87C,EAAA96C,EAAA,0DAAAhB,GACA87C,EAAA96C,EAAA,4DAAAhB,GACA87C,EAAA96C,EAAA,sDAAAhB,GACA87C,EAAA96C,EAAA,oDAAAhB,GACA87C,EAAA96C,EAAA,wDAAAhB,GACA87C,EAAA96C,EAAA,4CAAAhB,GACA87C,EAAA96C,EAAA,kCAAAhB,GACA87C,EAAA96C,EAAA,mCAAAhB,GACA87C,EAAA96C,EAAA,mCAAAhB,GACA87C,EAAA96C,EAAA,sCAAAhB,GACA87C,EAAA96C,EAAA,iCAAAhB,GACA87C,EAAA96C,EAAA,kCAAAhB,GACA87C,EAAA96C,EAAA,yCAAAhB,GACA87C,EAAA96C,EAAA,sCAAAhB,GACA87C,EAAA96C,EAAA,kCAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,4CAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GACA87C,EAAA96C,EAAA,2CAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,kDAAAhB,GACA87C,EAAA96C,EAAA,qDAAAhB,GACA87C,EAAA96C,EAAA,uCAAAhB,GACA87C,EAAA96C,EAAA,sDAAAhB,GACA87C,EAAA96C,EAAA,wDAAAhB,GACA87C,EAAA96C,EAAA,+CAAAhB,GACA87C,EAAA96C,EAAA,2CAAAhB,GACA87C,EAAA96C,EAAA,6CAAAhB,GACA87C,EAAA96C,EAAA,wCAAAhB,GAEA87C,EAAA96C,EAAA,yCAAAhB,GACA87C,EAAA96C,EAAA,0CAAAhB,GACA87C,EAAA96C,EAAA,mEAAAhB,GACA87C,EAAA96C,EAAA,kEAAAhB,GACA87C,EAAA96C,EAAA,qEAAAhB,GACA87C,EAAA96C,EAAA,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","file":"healio-custom-scripts.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar NATIVE_BIND = require('../internals/function-bind-native');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $Object = Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return $Object(requireObjectCoercible(argument));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar $Object = Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !$Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : $Object(it);\n} : $Object;\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar uncurryThis = NATIVE_BIND && bind.bind(call, call);\n\nmodule.exports = NATIVE_BIND ? function (fn) {\n return fn && uncurryThis(fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\n\nvar $Array = Array;\nvar max = Math.max;\n\nmodule.exports = function (O, start, end) {\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n var result = $Array(max(fin - k, 0));\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar $Array = Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? $Array : C;\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es-x/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar Map = getBuiltIn('Map');\nvar MapPrototype = Map.prototype;\nvar mapForEach = uncurryThis(MapPrototype.forEach);\nvar mapHas = uncurryThis(MapPrototype.has);\nvar mapSet = uncurryThis(MapPrototype.set);\nvar push = uncurryThis([].push);\n\n// `Array.prototype.uniqueBy` method\n// https://github.com/tc39/proposal-array-unique\nmodule.exports = function uniqueBy(resolver) {\n var that = toObject(this);\n var length = lengthOfArrayLike(that);\n var result = arraySpeciesCreate(that, 0);\n var map = new Map();\n var resolverFunction = resolver != null ? aCallable(resolver) : function (value) {\n return value;\n };\n var index, item, key;\n for (index = 0; index < length; index++) {\n item = that[index];\n key = resolverFunction(item);\n if (!mapHas(map, key)) mapSet(map, key, item);\n }\n mapForEach(map, function (value) {\n push(result, value);\n });\n return result;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es-x/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar $Object = Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\n\n// https://github.com/tc39/collection-methods\nmodule.exports = function addAll(/* ...elements */) {\n var set = anObject(this);\n var adder = aCallable(set.add);\n for (var k = 0, len = arguments.length; k < len; k++) {\n call(adder, set, arguments[k]);\n }\n return set;\n};\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar call = Function.prototype.call;\n\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","'use strict';\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\n\n// https://github.com/tc39/collection-methods\nmodule.exports = function deleteAll(/* ...elements */) {\n var collection = anObject(this);\n var remover = aCallable(collection['delete']);\n var allDeleted = true;\n var wasDeleted;\n for (var k = 0, len = arguments.length; k < len; k++) {\n wasDeleted = call(remover, collection, arguments[k]);\n allDeleted = allDeleted && wasDeleted;\n }\n return !!allDeleted;\n};\n","'use strict';\n// https://tc39.github.io/proposal-setmap-offrom/\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar aConstructor = require('../internals/a-constructor');\nvar iterate = require('../internals/iterate');\n\nvar push = [].push;\n\nmodule.exports = function from(source /* , mapFn, thisArg */) {\n var length = arguments.length;\n var mapFn = length > 1 ? arguments[1] : undefined;\n var mapping, array, n, boundFunction;\n aConstructor(this);\n mapping = mapFn !== undefined;\n if (mapping) aCallable(mapFn);\n if (source == undefined) return new this();\n array = [];\n if (mapping) {\n n = 0;\n boundFunction = bind(mapFn, length > 2 ? arguments[2] : undefined);\n iterate(source, function (nextItem) {\n call(push, array, boundFunction(nextItem, n++));\n });\n } else {\n iterate(source, push, { that: array });\n }\n return new this(array);\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar $TypeError = TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_RECORD = !!(options && options.IS_RECORD);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_RECORD) {\n iterator = iterable.iterator;\n } else if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = IS_RECORD ? iterable.next : iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","'use strict';\nvar arraySlice = require('../internals/array-slice');\n\n// https://tc39.github.io/proposal-setmap-offrom/\nmodule.exports = function of() {\n return new this(arraySlice(arguments));\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n defineBuiltIns(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","var defineBuiltIn = require('../internals/define-built-in');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) defineBuiltIn(target, key, src[key], options);\n return target;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar isExtensible = require('../internals/object-is-extensible');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar getWeakData = require('../internals/internal-metadata').getWeakData;\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar ArrayIterationModule = require('../internals/array-iteration');\nvar hasOwn = require('../internals/has-own-property');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\nvar find = ArrayIterationModule.find;\nvar findIndex = ArrayIterationModule.findIndex;\nvar splice = uncurryThis([].splice);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (store) {\n return store.frozen || (store.frozen = new UncaughtFrozenStore());\n};\n\nvar UncaughtFrozenStore = function () {\n this.entries = [];\n};\n\nvar findUncaughtFrozen = function (store, key) {\n return find(store.entries, function (it) {\n return it[0] === key;\n });\n};\n\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.entries.push([key, value]);\n },\n 'delete': function (key) {\n var index = findIndex(this.entries, function (it) {\n return it[0] === key;\n });\n if (~index) splice(this.entries, index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n id: id++,\n frozen: undefined\n });\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var data = getWeakData(anObject(key), true);\n if (data === true) uncaughtFrozenStore(state).set(key, value);\n else data[state.id] = value;\n return that;\n };\n\n defineBuiltIns(Prototype, {\n // `{ WeakMap, WeakSet }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\n 'delete': function (key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\n return data && hasOwn(data, state.id) && delete data[state.id];\n },\n // `{ WeakMap, WeakSet }.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\n has: function has(key) {\n var state = getInternalState(this);\n if (!isObject(key)) return false;\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).has(key);\n return data && hasOwn(data, state.id);\n }\n });\n\n defineBuiltIns(Prototype, IS_MAP ? {\n // `WeakMap.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\n get: function get(key) {\n var state = getInternalState(this);\n if (isObject(key)) {\n var data = getWeakData(key);\n if (data === true) return uncaughtFrozenStore(state).get(key);\n return data ? data[state.id] : undefined;\n }\n },\n // `WeakMap.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\n set: function set(key, value) {\n return define(this, key, value);\n }\n } : {\n // `WeakSet.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\n add: function add(value) {\n return define(this, value, true);\n }\n });\n\n return Constructor;\n }\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\n// eslint-disable-next-line es-x/no-object-hasown -- safe\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n defineBuiltIn(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es-x/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.dontCallGetSet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.dontCallGetSet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n defineBuiltIn(target, key, sourceProperty, options);\n }\n};\n","var isCallable = require('../internals/is-callable');\nvar definePropertyModule = require('../internals/object-define-property');\nvar makeBuiltIn = require('../internals/make-built-in');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nmodule.exports = function (O, key, value, options) {\n if (!options) options = {};\n var simple = options.enumerable;\n var name = options.name !== undefined ? options.name : key;\n if (isCallable(value)) makeBuiltIn(value, name, options);\n if (options.global) {\n if (simple) O[key] = value;\n else defineGlobalProperty(key, value);\n } else {\n try {\n if (!options.unsafe) delete O[key];\n else if (O[key]) simple = true;\n } catch (error) { /* empty */ }\n if (simple) O[key] = value;\n else definePropertyModule.f(O, key, {\n value: value,\n enumerable: false,\n configurable: !options.nonConfigurable,\n writable: !options.nonWritable\n });\n } return O;\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (target, TAG, STATIC) {\n if (target && !STATIC) target = target.prototype;\n if (target && !hasOwn(target, TO_STRING_TAG)) {\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.map');\nrequire('../modules/es.weak-map');\nvar getBuiltIn = require('../internals/get-built-in');\nvar create = require('../internals/object-create');\nvar isObject = require('../internals/is-object');\n\nvar $Object = Object;\nvar $TypeError = TypeError;\nvar Map = getBuiltIn('Map');\nvar WeakMap = getBuiltIn('WeakMap');\n\nvar Node = function () {\n // keys\n this.object = null;\n this.symbol = null;\n // child nodes\n this.primitives = null;\n this.objectsByIndex = create(null);\n};\n\nNode.prototype.get = function (key, initializer) {\n return this[key] || (this[key] = initializer());\n};\n\nNode.prototype.next = function (i, it, IS_OBJECT) {\n var store = IS_OBJECT\n ? this.objectsByIndex[i] || (this.objectsByIndex[i] = new WeakMap())\n : this.primitives || (this.primitives = new Map());\n var entry = store.get(it);\n if (!entry) store.set(it, entry = new Node());\n return entry;\n};\n\nvar root = new Node();\n\nmodule.exports = function () {\n var active = root;\n var length = arguments.length;\n var i, it;\n // for prevent leaking, start from objects\n for (i = 0; i < length; i++) {\n if (isObject(it = arguments[i])) active = active.next(i, it, true);\n }\n if (this === $Object && active === root) throw $TypeError('Composite keys must contain a non-primitive component');\n for (i = 0; i < length; i++) {\n if (!isObject(it = arguments[i])) active = active.next(i, it, false);\n } return active;\n};\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-map.constructor');\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.map.constructor');\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source, exceptions) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es-x/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es-x/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var makeBuiltIn = require('../internals/make-built-in');\nvar defineProperty = require('../internals/object-define-property');\n\nmodule.exports = function (target, name, descriptor) {\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\n return defineProperty.f(target, name, descriptor);\n};\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar enforceInternalState = InternalStateModule.enforce;\nvar getInternalState = InternalStateModule.get;\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\n});\n\nvar TEMPLATE = String(String).split('String');\n\nvar makeBuiltIn = module.exports = function (value, name, options) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (options && options.getter) name = 'get ' + name;\n if (options && options.setter) name = 'set ' + name;\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\n else value.name = name;\n }\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\n defineProperty(value, 'length', { value: options.arity });\n }\n try {\n if (options && hasOwn(options, 'constructor') && options.constructor) {\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\n // in V8 ~ Chrome 53, prototypes of some methods, like `Array.prototype.values`, are non-writable\n } else if (value.prototype) value.prototype = undefined;\n } catch (error) { /* empty */ }\n var state = enforceInternalState(value);\n if (!hasOwn(state, 'source')) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n } return value;\n};\n\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n// eslint-disable-next-line no-extend-native -- required\nFunction.prototype.toString = makeBuiltIn(function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n}, 'toString');\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es-x/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","module.exports = false;\n","var hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar $Object = Object;\nvar ObjectPrototype = $Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n// eslint-disable-next-line es-x/no-object-getprototypeof -- safe\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof $Object ? ObjectPrototype : null;\n};\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es-x/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-object-isextensible, es-x/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var NATIVE_BIND = require('../internals/function-bind-native');\n\nvar FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es-x/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es-x/no-function-prototype-bind -- safe\n var test = (function () { /* empty */ }).bind();\n // eslint-disable-next-line no-prototype-builtins -- safe\n return typeof test != 'function' || test.hasOwnProperty('prototype');\n});\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar $TypeError = TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw $TypeError(tryToString(argument) + ' is not iterable');\n};\n","var call = require('../internals/function-call');\n\nmodule.exports = function (it) {\n // eslint-disable-next-line es-x/no-map -- safe\n return call(Map.prototype.entries, it);\n};\n","var call = require('../internals/function-call');\n\nmodule.exports = function (it) {\n // eslint-disable-next-line es-x/no-set -- safe\n return call(Set.prototype.values, it);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thanks to IE8 for its funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var global = require('../internals/global');\nvar defineGlobalProperty = require('../internals/define-global-property');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\n\nmodule.exports = store;\n","var fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar ARRAY_BUFFER_NON_EXTENSIBLE = require('../internals/array-buffer-non-extensible');\n\n// eslint-disable-next-line es-x/no-object-isextensible -- safe\nvar $isExtensible = Object.isExtensible;\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\n\n// `Object.isExtensible` method\n// https://tc39.es/ecma262/#sec-object.isextensible\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\n if (!isObject(it)) return false;\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\n return $isExtensible ? $isExtensible(it) : true;\n} : $isExtensible;\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es-x/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","/* eslint-disable es-x/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice-simple');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar $Object = Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\n};\n","/* eslint-disable es-x/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var sign = require('../internals/math-sign');\n\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\n// `Math.fround` method implementation\n// https://tc39.es/ecma262/#sec-math.fround\n// eslint-disable-next-line es-x/no-math-fround -- safe\nmodule.exports = Math.fround || function fround(x) {\n var n = +x;\n var $abs = abs(n);\n var $sign = sign(n);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// `Math.sign` method implementation\n// https://tc39.es/ecma262/#sec-math.sign\n// eslint-disable-next-line es-x/no-math-sign -- safe\nmodule.exports = Math.sign || function sign(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n == 0 || n != n ? n : n < 0 ? -1 : 1;\n};\n","// `Math.scale` method implementation\n// https://rwaldron.github.io/proposal-math-extensions/\nmodule.exports = Math.scale || function scale(x, inLow, inHigh, outLow, outHigh) {\n var nx = +x;\n var nInLow = +inLow;\n var nInHigh = +inHigh;\n var nOutLow = +outLow;\n var nOutHigh = +outHigh;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (nx != nx || nInLow != nInLow || nInHigh != nInHigh || nOutLow != nOutLow || nOutHigh != nOutHigh) return NaN;\n if (nx === Infinity || nx === -Infinity) return nx;\n return (nx - nInLow) * (nOutHigh - nOutLow) / (nInHigh - nInLow) + nOutLow;\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `Math.trunc` method\n// https://tc39.es/ecma262/#sec-math.trunc\n// eslint-disable-next-line es-x/no-math-trunc -- safe\nmodule.exports = Math.trunc || function trunc(x) {\n var n = +x;\n return (n > 0 ? floor : ceil)(n);\n};\n","/* eslint-disable es-x/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es-x/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","var global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar trim = require('../internals/string-trim').trim;\nvar whitespaces = require('../internals/whitespaces');\n\nvar $parseInt = global.parseInt;\nvar Symbol = global.Symbol;\nvar ITERATOR = Symbol && Symbol.iterator;\nvar hex = /^[+-]?0x/i;\nvar exec = uncurryThis(hex.exec);\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\n // MS Edge 18- broken with boxed symbols\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\n\n// `parseInt` method\n// https://tc39.es/ecma262/#sec-parseint-string-radix\nmodule.exports = FORCED ? function parseInt(string, radix) {\n var S = trim(toString(string));\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\n} : $parseInt;\n","var classof = require('../internals/classof');\n\nvar $String = String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return $String(argument);\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar V8_PROTOTYPE_DEFINE_BUG = require('../internals/v8-prototype-define-bug');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es-x/no-object-defineproperties -- safe\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\n\n// V8 ~ Chrome 36-\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\nmodule.exports = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es-x/no-object-defineproperty -- required for testing\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\n value: 42,\n writable: false\n }).prototype != 42;\n});\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es-x/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","// eslint-disable-next-line es-x/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\nvar NativeObservable = global.Observable;\nvar NativeObservablePrototype = NativeObservable && NativeObservable.prototype;\n\nmodule.exports = !isCallable(NativeObservable)\n || !isCallable(NativeObservable.from)\n || !isCallable(NativeObservable.of)\n || !isCallable(NativeObservablePrototype.subscribe)\n || !isCallable(NativeObservablePrototype[$$OBSERVABLE]);\n","var call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar $TypeError = TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw $TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.map');\nrequire('../modules/es.weak-map');\nvar getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar shared = require('../internals/shared');\n\nvar Map = getBuiltIn('Map');\nvar WeakMap = getBuiltIn('WeakMap');\nvar push = uncurryThis([].push);\n\nvar metadata = shared('metadata');\nvar store = metadata.store || (metadata.store = new WeakMap());\n\nvar getOrCreateMetadataMap = function (target, targetKey, create) {\n var targetMetadata = store.get(target);\n if (!targetMetadata) {\n if (!create) return;\n store.set(target, targetMetadata = new Map());\n }\n var keyMetadata = targetMetadata.get(targetKey);\n if (!keyMetadata) {\n if (!create) return;\n targetMetadata.set(targetKey, keyMetadata = new Map());\n } return keyMetadata;\n};\n\nvar ordinaryHasOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? false : metadataMap.has(MetadataKey);\n};\n\nvar ordinaryGetOwnMetadata = function (MetadataKey, O, P) {\n var metadataMap = getOrCreateMetadataMap(O, P, false);\n return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey);\n};\n\nvar ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) {\n getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue);\n};\n\nvar ordinaryOwnMetadataKeys = function (target, targetKey) {\n var metadataMap = getOrCreateMetadataMap(target, targetKey, false);\n var keys = [];\n if (metadataMap) metadataMap.forEach(function (_, key) { push(keys, key); });\n return keys;\n};\n\nvar toMetadataKey = function (it) {\n return it === undefined || typeof it == 'symbol' ? it : String(it);\n};\n\nmodule.exports = {\n store: store,\n getMap: getOrCreateMetadataMap,\n has: ordinaryHasOwnMetadata,\n get: ordinaryGetOwnMetadata,\n set: ordinaryDefineOwnMetadata,\n keys: ordinaryOwnMetadataKeys,\n toKey: toMetadataKey\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.24.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2014-2022 Denis Pushkarev (zloirock.ru)',\n license: 'https://github.com/zloirock/core-js/blob/v3.24.0/LICENSE',\n source: 'https://github.com/zloirock/core-js'\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.hasIndices) result += 'd';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.unicodeSets) result += 'v';\n if (that.sticky) result += 'y';\n return result;\n};\n","var $TypeError = TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw $TypeError(\"Can't call method on \" + it);\n return it;\n};\n","// `SameValueZero` abstract operation\n// https://tc39.es/ecma262/#sec-samevaluezero\nmodule.exports = function (x, y) {\n // eslint-disable-next-line no-self-compare -- NaN check\n return x === y || x != x && y != y;\n};\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var trunc = require('../internals/math-trunc');\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- NaN check\n return number !== number || number === 0 ? 0 : trunc(number);\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar validateArgumentsLength = require('../internals/validate-arguments-length');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(handler) {\n validateArgumentsLength(arguments.length, 1);\n var fn = isCallable(handler) ? handler : Function(handler);\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(fn, undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var $TypeError = TypeError;\n\nmodule.exports = function (passed, required) {\n if (passed < required) throw $TypeError('Not enough arguments');\n return passed;\n};\n","var call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $TypeError = TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw $TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\nvar RegExp = global.RegExp;\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n var INDICES_SUPPORT = true;\n try {\n RegExp('.', 'd');\n } catch (error) {\n INDICES_SUPPORT = false;\n }\n\n var O = {};\n // modern V8 bug\n var calls = '';\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\n\n var addGetter = function (key, chr) {\n // eslint-disable-next-line es-x/no-object-defineproperty -- safe\n Object.defineProperty(O, key, { get: function () {\n calls += chr;\n return true;\n } });\n };\n\n var pairs = {\n dotAll: 's',\n global: 'g',\n ignoreCase: 'i',\n multiline: 'm',\n sticky: 'y'\n };\n\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\n\n for (var key in pairs) addGetter(key, pairs[key]);\n\n // eslint-disable-next-line es-x/no-object-getownpropertydescriptor -- safe\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\n\n return result !== expected || calls !== expected;\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar collection = require('../internals/collection');\nvar collectionWeak = require('../internals/collection-weak');\nvar isObject = require('../internals/is-object');\nvar isExtensible = require('../internals/object-is-extensible');\nvar enforceInternalState = require('../internals/internal-state').enforce;\nvar NATIVE_WEAK_MAP = require('../internals/native-weak-map');\n\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar InternalWeakMap;\n\nvar wrapper = function (init) {\n return function WeakMap() {\n return init(this, arguments.length ? arguments[0] : undefined);\n };\n};\n\n// `WeakMap` constructor\n// https://tc39.es/ecma262/#sec-weakmap-constructor\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\n\n// IE11 WeakMap frozen keys fix\n// We can't use feature detection because it crash some old IE builds\n// https://github.com/zloirock/core-js/issues/485\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\n InternalMetadataModule.enable();\n var WeakMapPrototype = $WeakMap.prototype;\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\n var nativeHas = uncurryThis(WeakMapPrototype.has);\n var nativeGet = uncurryThis(WeakMapPrototype.get);\n var nativeSet = uncurryThis(WeakMapPrototype.set);\n defineBuiltIns(WeakMapPrototype, {\n 'delete': function (key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeDelete(this, key) || state.frozen['delete'](key);\n } return nativeDelete(this, key);\n },\n has: function has(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) || state.frozen.has(key);\n } return nativeHas(this, key);\n },\n get: function get(key) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\n } return nativeGet(this, key);\n },\n set: function set(key, value) {\n if (isObject(key) && !isExtensible(key)) {\n var state = enforceInternalState(this);\n if (!state.frozen) state.frozen = new InternalWeakMap();\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\n } else nativeSet(this, key, value);\n return this;\n }\n });\n}\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar DESCRIPTORS = require('../internals/descriptors');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\n\n// `Array.prototype.lastIndex` getter\n// https://github.com/keithamus/proposal-array-last\nif (DESCRIPTORS) {\n defineBuiltInAccessor(Array.prototype, 'lastIndex', {\n configurable: true,\n get: function lastIndex() {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n return len == 0 ? 0 : len - 1;\n }\n });\n\n addToUnscopables('lastIndex');\n}\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar DESCRIPTORS = require('../internals/descriptors');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\n\n// `Array.prototype.lastIndex` accessor\n// https://github.com/keithamus/proposal-array-last\nif (DESCRIPTORS) {\n defineBuiltInAccessor(Array.prototype, 'lastItem', {\n configurable: true,\n get: function lastItem() {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n return len == 0 ? undefined : O[len - 1];\n },\n set: function lastItem(value) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n return O[len == 0 ? 0 : len - 1] = value;\n }\n });\n\n addToUnscopables('lastItem');\n}\n","var $ = require('../internals/export');\nvar apply = require('../internals/function-apply');\nvar getCompositeKeyNode = require('../internals/composite-key');\nvar getBuiltIn = require('../internals/get-built-in');\nvar create = require('../internals/object-create');\n\nvar $Object = Object;\n\nvar initializer = function () {\n var freeze = getBuiltIn('Object', 'freeze');\n return freeze ? freeze(create(null)) : create(null);\n};\n\n// https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey\n$({ global: true, forced: true }, {\n compositeKey: function compositeKey() {\n return apply(getCompositeKeyNode, $Object, arguments).get('object', initializer);\n }\n});\n","var $ = require('../internals/export');\nvar getCompositeKeyNode = require('../internals/composite-key');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\n\n// https://github.com/tc39/proposal-richer-keys/tree/master/compositeKey\n$({ global: true, forced: true }, {\n compositeSymbol: function compositeSymbol() {\n if (arguments.length == 1 && typeof arguments[0] == 'string') return getBuiltIn('Symbol')['for'](arguments[0]);\n return apply(getCompositeKeyNode, null, arguments).get('symbol', getBuiltIn('Symbol'));\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar deleteAll = require('../internals/collection-delete-all');\n\n// `Map.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n deleteAll: deleteAll\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.every` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n every: function every(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return !iterate(iterator, function (key, value, stop) {\n if (!boundFunction(value, key, map)) return stop();\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.filter` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n filter: function filter(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new (speciesConstructor(map, getBuiltIn('Map')))();\n var setter = aCallable(newMap.set);\n iterate(iterator, function (key, value) {\n if (boundFunction(value, key, map)) call(setter, newMap, key, value);\n }, { AS_ENTRIES: true, IS_ITERATOR: true });\n return newMap;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.findKey` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n findKey: function findKey(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return iterate(iterator, function (key, value, stop) {\n if (boundFunction(value, key, map)) return stop(key);\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.find` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n find: function find(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return iterate(iterator, function (key, value, stop) {\n if (boundFunction(value, key, map)) return stop(value);\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).result;\n }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/collection-from');\n\n// `Map.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.from\n$({ target: 'Map', stat: true, forced: true }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar getIterator = require('../internals/get-iterator');\nvar iterate = require('../internals/iterate');\n\nvar push = uncurryThis([].push);\n\n// `Map.groupBy` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', stat: true, forced: true }, {\n groupBy: function groupBy(iterable, keyDerivative) {\n aCallable(keyDerivative);\n var iterator = getIterator(iterable);\n var newMap = new this();\n var has = aCallable(newMap.has);\n var get = aCallable(newMap.get);\n var set = aCallable(newMap.set);\n iterate(iterator, function (element) {\n var derivedKey = keyDerivative(element);\n if (!call(has, newMap, derivedKey)) call(set, newMap, derivedKey, [element]);\n else push(call(get, newMap, derivedKey), element);\n }, { IS_ITERATOR: true });\n return newMap;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar sameValueZero = require('../internals/same-value-zero');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.includes` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n includes: function includes(searchElement) {\n return iterate(getMapIterator(anObject(this)), function (key, value, stop) {\n if (sameValueZero(value, searchElement)) return stop();\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar iterate = require('../internals/iterate');\nvar aCallable = require('../internals/a-callable');\n\n// `Map.keyBy` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', stat: true, forced: true }, {\n keyBy: function keyBy(iterable, keyDerivative) {\n var newMap = new this();\n aCallable(keyDerivative);\n var setter = aCallable(newMap.set);\n iterate(iterable, function (element) {\n call(setter, newMap, keyDerivative(element), element);\n });\n return newMap;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.keyOf` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n keyOf: function keyOf(searchElement) {\n return iterate(getMapIterator(anObject(this)), function (key, value, stop) {\n if (value === searchElement) return stop(key);\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.mapKeys` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n mapKeys: function mapKeys(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new (speciesConstructor(map, getBuiltIn('Map')))();\n var setter = aCallable(newMap.set);\n iterate(iterator, function (key, value) {\n call(setter, newMap, boundFunction(value, key, map), value);\n }, { AS_ENTRIES: true, IS_ITERATOR: true });\n return newMap;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.mapValues` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n mapValues: function mapValues(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newMap = new (speciesConstructor(map, getBuiltIn('Map')))();\n var setter = aCallable(newMap.set);\n iterate(iterator, function (key, value) {\n call(setter, newMap, key, boundFunction(value, key, map));\n }, { AS_ENTRIES: true, IS_ITERATOR: true });\n return newMap;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar iterate = require('../internals/iterate');\n\n// `Map.prototype.merge` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, arity: 1, forced: true }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n merge: function merge(iterable /* ...iterables */) {\n var map = anObject(this);\n var setter = aCallable(map.set);\n var argumentsLength = arguments.length;\n var i = 0;\n while (i < argumentsLength) {\n iterate(arguments[i++], setter, { that: map, AS_ENTRIES: true });\n }\n return map;\n }\n});\n","var $ = require('../internals/export');\nvar of = require('../internals/collection-of');\n\n// `Map.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-map.of\n$({ target: 'Map', stat: true, forced: true }, {\n of: of\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar aCallable = require('../internals/a-callable');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\nvar $TypeError = TypeError;\n\n// `Map.prototype.reduce` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var noInitial = arguments.length < 2;\n var accumulator = noInitial ? undefined : arguments[1];\n aCallable(callbackfn);\n iterate(iterator, function (key, value) {\n if (noInitial) {\n noInitial = false;\n accumulator = value;\n } else {\n accumulator = callbackfn(accumulator, value, key, map);\n }\n }, { AS_ENTRIES: true, IS_ITERATOR: true });\n if (noInitial) throw $TypeError('Reduce of empty map with no initial value');\n return accumulator;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getMapIterator = require('../internals/get-map-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.some` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n some: function some(callbackfn /* , thisArg */) {\n var map = anObject(this);\n var iterator = getMapIterator(map);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return iterate(iterator, function (key, value, stop) {\n if (boundFunction(value, key, map)) return stop();\n }, { AS_ENTRIES: true, IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar aCallable = require('../internals/a-callable');\n\nvar $TypeError = TypeError;\n\n// `Set.prototype.update` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Map', proto: true, real: true, forced: true }, {\n update: function update(key, callback /* , thunk */) {\n var map = anObject(this);\n var get = aCallable(map.get);\n var has = aCallable(map.has);\n var set = aCallable(map.set);\n var length = arguments.length;\n aCallable(callback);\n var isPresentInMap = call(has, map, key);\n if (!isPresentInMap && length < 3) {\n throw $TypeError('Updating absent value');\n }\n var value = isPresentInMap ? call(get, map, key) : aCallable(length > 2 ? arguments[2] : undefined)(key, map);\n call(set, map, key, callback(value, key, map));\n return map;\n }\n});\n","var $ = require('../internals/export');\n\nvar min = Math.min;\nvar max = Math.max;\n\n// `Math.clamp` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n clamp: function clamp(x, lower, upper) {\n return min(upper, max(lower, x));\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.DEG_PER_RAD` constant\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, nonConfigurable: true, nonWritable: true }, {\n DEG_PER_RAD: Math.PI / 180\n});\n","var $ = require('../internals/export');\n\nvar RAD_PER_DEG = 180 / Math.PI;\n\n// `Math.degrees` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n degrees: function degrees(radians) {\n return radians * RAD_PER_DEG;\n }\n});\n","var $ = require('../internals/export');\n\nvar scale = require('../internals/math-scale');\nvar fround = require('../internals/math-fround');\n\n// `Math.fscale` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n fscale: function fscale(x, inLow, inHigh, outLow, outHigh) {\n return fround(scale(x, inLow, inHigh, outLow, outHigh));\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.iaddh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n iaddh: function iaddh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 + (y1 >>> 0) + (($x0 & $y0 | ($x0 | $y0) & ~($x0 + $y0 >>> 0)) >>> 31) | 0;\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.imulh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n imulh: function imulh(u, v) {\n var UINT16 = 0xFFFF;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >> 16;\n var v1 = $v >> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >> 16);\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.isubh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n isubh: function isubh(x0, x1, y0, y1) {\n var $x0 = x0 >>> 0;\n var $x1 = x1 >>> 0;\n var $y0 = y0 >>> 0;\n return $x1 - (y1 >>> 0) - ((~$x0 & $y0 | ~($x0 ^ $y0) & $x0 - $y0 >>> 0) >>> 31) | 0;\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.RAD_PER_DEG` constant\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, nonConfigurable: true, nonWritable: true }, {\n RAD_PER_DEG: 180 / Math.PI\n});\n","var $ = require('../internals/export');\n\nvar DEG_PER_RAD = Math.PI / 180;\n\n// `Math.radians` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n radians: function radians(degrees) {\n return degrees * DEG_PER_RAD;\n }\n});\n","var $ = require('../internals/export');\nvar scale = require('../internals/math-scale');\n\n// `Math.scale` method\n// https://rwaldron.github.io/proposal-math-extensions/\n$({ target: 'Math', stat: true, forced: true }, {\n scale: scale\n});\n","var $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar numberIsFinite = require('../internals/number-is-finite');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar SEEDED_RANDOM = 'Seeded Random';\nvar SEEDED_RANDOM_GENERATOR = SEEDED_RANDOM + ' Generator';\nvar SEED_TYPE_ERROR = 'Math.seededPRNG() argument should have a \"seed\" field with a finite value.';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SEEDED_RANDOM_GENERATOR);\nvar $TypeError = TypeError;\n\nvar $SeededRandomGenerator = createIteratorConstructor(function SeededRandomGenerator(seed) {\n setInternalState(this, {\n type: SEEDED_RANDOM_GENERATOR,\n seed: seed % 2147483647\n });\n}, SEEDED_RANDOM, function next() {\n var state = getInternalState(this);\n var seed = state.seed = (state.seed * 1103515245 + 12345) % 2147483647;\n return { value: (seed & 1073741823) / 1073741823, done: false };\n});\n\n// `Math.seededPRNG` method\n// https://github.com/tc39/proposal-seeded-random\n// based on https://github.com/tc39/proposal-seeded-random/blob/78b8258835b57fc2100d076151ab506bc3202ae6/demo.html\n$({ target: 'Math', stat: true, forced: true }, {\n seededPRNG: function seededPRNG(it) {\n var seed = anObject(it).seed;\n if (!numberIsFinite(seed)) throw $TypeError(SEED_TYPE_ERROR);\n return new $SeededRandomGenerator(seed);\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.signbit` method\n// https://github.com/tc39/proposal-Math.signbit\n$({ target: 'Math', stat: true, forced: true }, {\n signbit: function signbit(x) {\n var n = +x;\n // eslint-disable-next-line no-self-compare -- NaN check\n return n == n && n == 0 ? 1 / n == -Infinity : n < 0;\n }\n});\n","var $ = require('../internals/export');\n\n// `Math.umulh` method\n// https://gist.github.com/BrendanEich/4294d5c212a6d2254703\n// TODO: Remove from `core-js@4`\n$({ target: 'Math', stat: true, forced: true }, {\n umulh: function umulh(u, v) {\n var UINT16 = 0xFFFF;\n var $u = +u;\n var $v = +v;\n var u0 = $u & UINT16;\n var v0 = $v & UINT16;\n var u1 = $u >>> 16;\n var v1 = $v >>> 16;\n var t = (u1 * v0 >>> 0) + (u0 * v0 >>> 16);\n return u1 * v1 + (t >>> 16) + ((u0 * v1 >>> 0) + (t & UINT16) >>> 16);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar parseInt = require('../internals/number-parse-int');\n\nvar INVALID_NUMBER_REPRESENTATION = 'Invalid number representation';\nvar INVALID_RADIX = 'Invalid radix';\nvar $RangeError = RangeError;\nvar $SyntaxError = SyntaxError;\nvar $TypeError = TypeError;\nvar valid = /^[\\da-z]+$/;\nvar charAt = uncurryThis(''.charAt);\nvar exec = uncurryThis(valid.exec);\nvar numberToString = uncurryThis(1.0.toString);\nvar stringSlice = uncurryThis(''.slice);\n\n// `Number.fromString` method\n// https://github.com/tc39/proposal-number-fromstring\n$({ target: 'Number', stat: true, forced: true }, {\n fromString: function fromString(string, radix) {\n var sign = 1;\n var R, mathNum;\n if (typeof string != 'string') throw $TypeError(INVALID_NUMBER_REPRESENTATION);\n if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n if (charAt(string, 0) == '-') {\n sign = -1;\n string = stringSlice(string, 1);\n if (!string.length) throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n }\n R = radix === undefined ? 10 : toIntegerOrInfinity(radix);\n if (R < 2 || R > 36) throw $RangeError(INVALID_RADIX);\n if (!exec(valid, string) || numberToString(mathNum = parseInt(string, R), R) !== string) {\n throw $SyntaxError(INVALID_NUMBER_REPRESENTATION);\n }\n return sign * mathNum;\n }\n});\n","'use strict';\n// https://github.com/tc39/proposal-observable\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar getMethod = require('../internals/get-method');\nvar defineBuiltIn = require('../internals/define-built-in');\nvar defineBuiltIns = require('../internals/define-built-ins');\nvar defineBuiltInAccessor = require('../internals/define-built-in-accessor');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar InternalStateModule = require('../internals/internal-state');\nvar OBSERVABLE_FORCED = require('../internals/observable-forced');\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\nvar OBSERVABLE = 'Observable';\nvar SUBSCRIPTION = 'Subscription';\nvar SUBSCRIPTION_OBSERVER = 'SubscriptionObserver';\nvar getterFor = InternalStateModule.getterFor;\nvar setInternalState = InternalStateModule.set;\nvar getObservableInternalState = getterFor(OBSERVABLE);\nvar getSubscriptionInternalState = getterFor(SUBSCRIPTION);\nvar getSubscriptionObserverInternalState = getterFor(SUBSCRIPTION_OBSERVER);\n\nvar SubscriptionState = function (observer) {\n this.observer = anObject(observer);\n this.cleanup = undefined;\n this.subscriptionObserver = undefined;\n};\n\nSubscriptionState.prototype = {\n type: SUBSCRIPTION,\n clean: function () {\n var cleanup = this.cleanup;\n if (cleanup) {\n this.cleanup = undefined;\n try {\n cleanup();\n } catch (error) {\n hostReportErrors(error);\n }\n }\n },\n close: function () {\n if (!DESCRIPTORS) {\n var subscription = this.facade;\n var subscriptionObserver = this.subscriptionObserver;\n subscription.closed = true;\n if (subscriptionObserver) subscriptionObserver.closed = true;\n } this.observer = undefined;\n },\n isClosed: function () {\n return this.observer === undefined;\n }\n};\n\nvar Subscription = function (observer, subscriber) {\n var subscriptionState = setInternalState(this, new SubscriptionState(observer));\n var start;\n if (!DESCRIPTORS) this.closed = false;\n try {\n if (start = getMethod(observer, 'start')) call(start, observer, this);\n } catch (error) {\n hostReportErrors(error);\n }\n if (subscriptionState.isClosed()) return;\n var subscriptionObserver = subscriptionState.subscriptionObserver = new SubscriptionObserver(subscriptionState);\n try {\n var cleanup = subscriber(subscriptionObserver);\n var subscription = cleanup;\n if (cleanup != null) subscriptionState.cleanup = isCallable(cleanup.unsubscribe)\n ? function () { subscription.unsubscribe(); }\n : aCallable(cleanup);\n } catch (error) {\n subscriptionObserver.error(error);\n return;\n } if (subscriptionState.isClosed()) subscriptionState.clean();\n};\n\nSubscription.prototype = defineBuiltIns({}, {\n unsubscribe: function unsubscribe() {\n var subscriptionState = getSubscriptionInternalState(this);\n if (!subscriptionState.isClosed()) {\n subscriptionState.close();\n subscriptionState.clean();\n }\n }\n});\n\nif (DESCRIPTORS) defineBuiltInAccessor(Subscription.prototype, 'closed', {\n configurable: true,\n get: function closed() {\n return getSubscriptionInternalState(this).isClosed();\n }\n});\n\nvar SubscriptionObserver = function (subscriptionState) {\n setInternalState(this, {\n type: SUBSCRIPTION_OBSERVER,\n subscriptionState: subscriptionState\n });\n if (!DESCRIPTORS) this.closed = false;\n};\n\nSubscriptionObserver.prototype = defineBuiltIns({}, {\n next: function next(value) {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n try {\n var nextMethod = getMethod(observer, 'next');\n if (nextMethod) call(nextMethod, observer, value);\n } catch (error) {\n hostReportErrors(error);\n }\n }\n },\n error: function error(value) {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n subscriptionState.close();\n try {\n var errorMethod = getMethod(observer, 'error');\n if (errorMethod) call(errorMethod, observer, value);\n else hostReportErrors(value);\n } catch (err) {\n hostReportErrors(err);\n } subscriptionState.clean();\n }\n },\n complete: function complete() {\n var subscriptionState = getSubscriptionObserverInternalState(this).subscriptionState;\n if (!subscriptionState.isClosed()) {\n var observer = subscriptionState.observer;\n subscriptionState.close();\n try {\n var completeMethod = getMethod(observer, 'complete');\n if (completeMethod) call(completeMethod, observer);\n } catch (error) {\n hostReportErrors(error);\n } subscriptionState.clean();\n }\n }\n});\n\nif (DESCRIPTORS) defineBuiltInAccessor(SubscriptionObserver.prototype, 'closed', {\n configurable: true,\n get: function closed() {\n return getSubscriptionObserverInternalState(this).subscriptionState.isClosed();\n }\n});\n\nvar $Observable = function Observable(subscriber) {\n anInstance(this, ObservablePrototype);\n setInternalState(this, {\n type: OBSERVABLE,\n subscriber: aCallable(subscriber)\n });\n};\n\nvar ObservablePrototype = $Observable.prototype;\n\ndefineBuiltIns(ObservablePrototype, {\n subscribe: function subscribe(observer) {\n var length = arguments.length;\n return new Subscription(isCallable(observer) ? {\n next: observer,\n error: length > 1 ? arguments[1] : undefined,\n complete: length > 2 ? arguments[2] : undefined\n } : isObject(observer) ? observer : {}, getObservableInternalState(this).subscriber);\n }\n});\n\ndefineBuiltIn(ObservablePrototype, $$OBSERVABLE, function () { return this; });\n\n$({ global: true, constructor: true, forced: OBSERVABLE_FORCED }, {\n Observable: $Observable\n});\n\nsetSpecies(OBSERVABLE);\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isConstructor = require('../internals/is-constructor');\nvar getIterator = require('../internals/get-iterator');\nvar getMethod = require('../internals/get-method');\nvar iterate = require('../internals/iterate');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar OBSERVABLE_FORCED = require('../internals/observable-forced');\n\nvar $$OBSERVABLE = wellKnownSymbol('observable');\n\n// `Observable.from` method\n// https://github.com/tc39/proposal-observable\n$({ target: 'Observable', stat: true, forced: OBSERVABLE_FORCED }, {\n from: function from(x) {\n var C = isConstructor(this) ? this : getBuiltIn('Observable');\n var observableMethod = getMethod(anObject(x), $$OBSERVABLE);\n if (observableMethod) {\n var observable = anObject(call(observableMethod, x));\n return observable.constructor === C ? observable : new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n var iterator = getIterator(x);\n return new C(function (observer) {\n iterate(iterator, function (it, stop) {\n observer.next(it);\n if (observer.closed) return stop();\n }, { IS_ITERATOR: true, INTERRUPTED: true });\n observer.complete();\n });\n }\n});\n","// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/esnext.observable.constructor');\nrequire('../modules/esnext.observable.from');\nrequire('../modules/esnext.observable.of');\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isConstructor = require('../internals/is-constructor');\nvar OBSERVABLE_FORCED = require('../internals/observable-forced');\n\nvar Array = getBuiltIn('Array');\n\n// `Observable.of` method\n// https://github.com/tc39/proposal-observable\n$({ target: 'Observable', stat: true, forced: OBSERVABLE_FORCED }, {\n of: function of() {\n var C = isConstructor(this) ? this : getBuiltIn('Observable');\n var length = arguments.length;\n var items = Array(length);\n var index = 0;\n while (index < length) items[index] = arguments[index++];\n return new C(function (observer) {\n for (var i = 0; i < length; i++) {\n observer.next(items[i]);\n if (observer.closed) return;\n } observer.complete();\n });\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true, forced: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar toMetadataKey = ReflectMetadataModule.toKey;\nvar ordinaryDefineOwnMetadata = ReflectMetadataModule.set;\n\n// `Reflect.defineMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n defineMetadata: function defineMetadata(metadataKey, metadataValue, target /* , targetKey */) {\n var targetKey = arguments.length < 4 ? undefined : toMetadataKey(arguments[3]);\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), targetKey);\n }\n});\n","var $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar toMetadataKey = ReflectMetadataModule.toKey;\nvar getOrCreateMetadataMap = ReflectMetadataModule.getMap;\nvar store = ReflectMetadataModule.store;\n\n// `Reflect.deleteMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false);\n if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false;\n if (metadataMap.size) return true;\n var targetMetadata = store.get(target);\n targetMetadata['delete'](targetKey);\n return !!targetMetadata.size || store['delete'](target);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar $arrayUniqueBy = require('../internals/array-unique-by');\n\nvar arrayUniqueBy = uncurryThis($arrayUniqueBy);\nvar concat = uncurryThis([].concat);\nvar ordinaryOwnMetadataKeys = ReflectMetadataModule.keys;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\nvar ordinaryMetadataKeys = function (O, P) {\n var oKeys = ordinaryOwnMetadataKeys(O, P);\n var parent = getPrototypeOf(O);\n if (parent === null) return oKeys;\n var pKeys = ordinaryMetadataKeys(parent, P);\n return pKeys.length ? oKeys.length ? arrayUniqueBy(concat(oKeys, pKeys)) : pKeys : oKeys;\n};\n\n// `Reflect.getMetadataKeys` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getMetadataKeys: function getMetadataKeys(target /* , targetKey */) {\n var targetKey = arguments.length < 2 ? undefined : toMetadataKey(arguments[1]);\n return ordinaryMetadataKeys(anObject(target), targetKey);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\nvar ordinaryHasOwnMetadata = ReflectMetadataModule.has;\nvar ordinaryGetOwnMetadata = ReflectMetadataModule.get;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\nvar ordinaryGetMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined;\n};\n\n// `Reflect.getMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getMetadata: function getMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryGetMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar ordinaryOwnMetadataKeys = ReflectMetadataModule.keys;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\n// `Reflect.getOwnMetadataKeys` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) {\n var targetKey = arguments.length < 2 ? undefined : toMetadataKey(arguments[1]);\n return ordinaryOwnMetadataKeys(anObject(target), targetKey);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar ordinaryGetOwnMetadata = ReflectMetadataModule.get;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\n// `Reflect.getOwnMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryGetOwnMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\n\nvar ordinaryHasOwnMetadata = ReflectMetadataModule.has;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\nvar ordinaryHasMetadata = function (MetadataKey, O, P) {\n var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn) return true;\n var parent = getPrototypeOf(O);\n return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false;\n};\n\n// `Reflect.hasMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryHasMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n","// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar ordinaryHasOwnMetadata = ReflectMetadataModule.has;\nvar toMetadataKey = ReflectMetadataModule.toKey;\n\n// `Reflect.hasOwnMetadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) {\n var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]);\n return ordinaryHasOwnMetadata(metadataKey, anObject(target), targetKey);\n }\n});\n","var $ = require('../internals/export');\nvar ReflectMetadataModule = require('../internals/reflect-metadata');\nvar anObject = require('../internals/an-object');\n\nvar toMetadataKey = ReflectMetadataModule.toKey;\nvar ordinaryDefineOwnMetadata = ReflectMetadataModule.set;\n\n// `Reflect.metadata` method\n// https://github.com/rbuckton/reflect-metadata\n$({ target: 'Reflect', stat: true }, {\n metadata: function metadata(metadataKey, metadataValue) {\n return function decorator(target, key) {\n ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetadataKey(key));\n };\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar addAll = require('../internals/collection-add-all');\n\n// `Set.prototype.addAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n addAll: addAll\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar deleteAll = require('../internals/collection-delete-all');\n\n// `Set.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n deleteAll: deleteAll\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.difference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n difference: function difference(iterable) {\n var set = anObject(this);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set);\n var remover = aCallable(newSet['delete']);\n iterate(iterable, function (value) {\n call(remover, newSet, value);\n });\n return newSet;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.every` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n every: function every(callbackfn /* , thisArg */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return !iterate(iterator, function (value, stop) {\n if (!boundFunction(value, value, set)) return stop();\n }, { IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar speciesConstructor = require('../internals/species-constructor');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.filter` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n filter: function filter(callbackfn /* , thisArg */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))();\n var adder = aCallable(newSet.add);\n iterate(iterator, function (value) {\n if (boundFunction(value, value, set)) call(adder, newSet, value);\n }, { IS_ITERATOR: true });\n return newSet;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.find` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n find: function find(callbackfn /* , thisArg */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return iterate(iterator, function (value, stop) {\n if (boundFunction(value, value, set)) return stop(value);\n }, { IS_ITERATOR: true, INTERRUPTED: true }).result;\n }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/collection-from');\n\n// `Set.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.from\n$({ target: 'Set', stat: true, forced: true }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.intersection` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n intersection: function intersection(iterable) {\n var set = anObject(this);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))();\n var hasCheck = aCallable(set.has);\n var adder = aCallable(newSet.add);\n iterate(iterable, function (value) {\n if (call(hasCheck, set, value)) call(adder, newSet, value);\n });\n return newSet;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.isDisjointFrom` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isDisjointFrom\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isDisjointFrom: function isDisjointFrom(iterable) {\n var set = anObject(this);\n var hasCheck = aCallable(set.has);\n return !iterate(iterable, function (value, stop) {\n if (call(hasCheck, set, value) === true) return stop();\n }, { INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar anObject = require('../internals/an-object');\nvar getIterator = require('../internals/get-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.isSubsetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSubsetOf\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isSubsetOf: function isSubsetOf(iterable) {\n var iterator = getIterator(this);\n var otherSet = anObject(iterable);\n var hasCheck = otherSet.has;\n if (!isCallable(hasCheck)) {\n otherSet = new (getBuiltIn('Set'))(iterable);\n hasCheck = aCallable(otherSet.has);\n }\n return !iterate(iterator, function (value, stop) {\n if (call(hasCheck, otherSet, value) === false) return stop();\n }, { IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.isSupersetOf` method\n// https://tc39.github.io/proposal-set-methods/#Set.prototype.isSupersetOf\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n isSupersetOf: function isSupersetOf(iterable) {\n var set = anObject(this);\n var hasCheck = aCallable(set.has);\n return !iterate(iterable, function (value, stop) {\n if (call(hasCheck, set, value) === false) return stop();\n }, { INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar toString = require('../internals/to-string');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\nvar arrayJoin = uncurryThis([].join);\nvar push = [].push;\n\n// `Set.prototype.join` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n join: function join(separator) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var sep = separator === undefined ? ',' : toString(separator);\n var result = [];\n iterate(iterator, push, { that: result, IS_ITERATOR: true });\n return arrayJoin(result, sep);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.map` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n map: function map(callbackfn /* , thisArg */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))();\n var adder = aCallable(newSet.add);\n iterate(iterator, function (value) {\n call(adder, newSet, boundFunction(value, value, set));\n }, { IS_ITERATOR: true });\n return newSet;\n }\n});\n","var $ = require('../internals/export');\nvar of = require('../internals/collection-of');\n\n// `Set.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-set.of\n$({ target: 'Set', stat: true, forced: true }, {\n of: of\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\nvar $TypeError = TypeError;\n\n// `Set.prototype.reduce` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var noInitial = arguments.length < 2;\n var accumulator = noInitial ? undefined : arguments[1];\n aCallable(callbackfn);\n iterate(iterator, function (value) {\n if (noInitial) {\n noInitial = false;\n accumulator = value;\n } else {\n accumulator = callbackfn(accumulator, value, value, set);\n }\n }, { IS_ITERATOR: true });\n if (noInitial) throw $TypeError('Reduce of empty set with no initial value');\n return accumulator;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar anObject = require('../internals/an-object');\nvar bind = require('../internals/function-bind-context');\nvar getSetIterator = require('../internals/get-set-iterator');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.some` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n some: function some(callbackfn /* , thisArg */) {\n var set = anObject(this);\n var iterator = getSetIterator(set);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return iterate(iterator, function (value, stop) {\n if (boundFunction(value, value, set)) return stop();\n }, { IS_ITERATOR: true, INTERRUPTED: true }).stopped;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.symmetricDifference` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n symmetricDifference: function symmetricDifference(iterable) {\n var set = anObject(this);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set);\n var remover = aCallable(newSet['delete']);\n var adder = aCallable(newSet.add);\n iterate(iterable, function (value) {\n call(remover, newSet, value) || call(adder, newSet, value);\n });\n return newSet;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar speciesConstructor = require('../internals/species-constructor');\nvar iterate = require('../internals/iterate');\n\n// `Set.prototype.union` method\n// https://github.com/tc39/proposal-set-methods\n$({ target: 'Set', proto: true, real: true, forced: true }, {\n union: function union(iterable) {\n var set = anObject(this);\n var newSet = new (speciesConstructor(set, getBuiltIn('Set')))(set);\n iterate(iterable, aCallable(newSet.add), { that: newSet });\n return newSet;\n }\n});\n","'use strict';\n// TODO: Remove from `core-js@4`\nvar $ = require('../internals/export');\nvar charAt = require('../internals/string-multibyte').charAt;\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\n\n// `String.prototype.at` method\n// https://github.com/mathiasbynens/String.prototype.at\n$({ target: 'String', proto: true, forced: true }, {\n at: function at(index) {\n var S = toString(requireObjectCoercible(this));\n var len = S.length;\n var relativeIndex = toIntegerOrInfinity(index);\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\n return (k < 0 || k >= len) ? undefined : charAt(S, k);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar StringMultibyteModule = require('../internals/string-multibyte');\n\nvar codeAt = StringMultibyteModule.codeAt;\nvar charAt = StringMultibyteModule.charAt;\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// TODO: unify with String#@@iterator\nvar $StringIterator = createIteratorConstructor(function StringIterator(string) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: string,\n index: 0\n });\n}, 'String', function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: { codePoint: codeAt(point, 0), position: index }, done: false };\n});\n\n// `String.prototype.codePoints` method\n// https://github.com/tc39/proposal-string-prototype-codepoints\n$({ target: 'String', proto: true, forced: true }, {\n codePoints: function codePoints() {\n return new $StringIterator(toString(requireObjectCoercible(this)));\n }\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.dispose` well-known symbol\n// https://github.com/tc39/proposal-using-statement\ndefineWellKnownSymbol('dispose');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.observable` well-known symbol\n// https://github.com/tc39/proposal-observable\ndefineWellKnownSymbol('observable');\n","// TODO: remove from `core-js@4`\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.patternMatch` well-known symbol\n// https://github.com/tc39/proposal-pattern-matching\ndefineWellKnownSymbol('patternMatch');\n","'use strict';\nvar $ = require('../internals/export');\nvar deleteAll = require('../internals/collection-delete-all');\n\n// `WeakMap.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakMap', proto: true, real: true, forced: true }, {\n deleteAll: deleteAll\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/collection-from');\n\n// `WeakMap.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.from\n$({ target: 'WeakMap', stat: true, forced: true }, {\n from: from\n});\n","var $ = require('../internals/export');\nvar of = require('../internals/collection-of');\n\n// `WeakMap.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakmap.of\n$({ target: 'WeakMap', stat: true, forced: true }, {\n of: of\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar addAll = require('../internals/collection-add-all');\n\n// `WeakSet.prototype.addAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakSet', proto: true, real: true, forced: true }, {\n addAll: addAll\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar deleteAll = require('../internals/collection-delete-all');\n\n// `WeakSet.prototype.deleteAll` method\n// https://github.com/tc39/proposal-collection-methods\n$({ target: 'WeakSet', proto: true, real: true, forced: true }, {\n deleteAll: deleteAll\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/collection-from');\n\n// `WeakSet.from` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.from\n$({ target: 'WeakSet', stat: true, forced: true }, {\n from: from\n});\n","var $ = require('../internals/export');\nvar of = require('../internals/collection-of');\n\n// `WeakSet.of` method\n// https://tc39.github.io/proposal-setmap-offrom/#sec-weakset.of\n$({ target: 'WeakSet', stat: true, forced: true }, {\n of: of\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar clearImmediate = require('../internals/task').clear;\n\n// `clearImmediate` method\n// http://w3c.github.io/setImmediate/#si-clearImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.clearImmediate !== clearImmediate }, {\n clearImmediate: clearImmediate\n});\n","// TODO: Remove this module from `core-js@4` since it's split to modules listed below\nrequire('../modules/web.clear-immediate');\nrequire('../modules/web.set-immediate');\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar setImmediate = require('../internals/task').set;\n\n// `setImmediate` method\n// http://w3c.github.io/setImmediate/#si-setImmediate\n$({ global: true, bind: true, enumerable: true, forced: global.setImmediate !== setImmediate }, {\n setImmediate: setImmediate\n});\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.Mustache = factory());\n}(this, (function () { 'use strict';\n\n /*!\n * mustache.js - Logic-less {{mustache}} templates with JavaScript\n * http://github.com/janl/mustache.js\n */\n\n var objectToString = Object.prototype.toString;\n var isArray = Array.isArray || function isArrayPolyfill (object) {\n return objectToString.call(object) === '[object Array]';\n };\n\n function isFunction (object) {\n return typeof object === 'function';\n }\n\n /**\n * More correct typeof string handling array\n * which normally returns typeof 'object'\n */\n function typeStr (obj) {\n return isArray(obj) ? 'array' : typeof obj;\n }\n\n function escapeRegExp (string) {\n return string.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n /**\n * Null safe way of checking whether or not an object,\n * including its prototype, has a given property\n */\n function hasProperty (obj, propName) {\n return obj != null && typeof obj === 'object' && (propName in obj);\n }\n\n /**\n * Safe way of detecting whether or not the given thing is a primitive and\n * whether it has the given property\n */\n function primitiveHasOwnProperty (primitive, propName) {\n return (\n primitive != null\n && typeof primitive !== 'object'\n && primitive.hasOwnProperty\n && primitive.hasOwnProperty(propName)\n );\n }\n\n // Workaround for https://issues.apache.org/jira/browse/COUCHDB-577\n // See https://github.com/janl/mustache.js/issues/189\n var regExpTest = RegExp.prototype.test;\n function testRegExp (re, string) {\n return regExpTest.call(re, string);\n }\n\n var nonSpaceRe = /\\S/;\n function isWhitespace (string) {\n return !testRegExp(nonSpaceRe, string);\n }\n\n var entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n };\n\n function escapeHtml (string) {\n return String(string).replace(/[&<>\"'`=\\/]/g, function fromEntityMap (s) {\n return entityMap[s];\n });\n }\n\n var whiteRe = /\\s*/;\n var spaceRe = /\\s+/;\n var equalsRe = /\\s*=/;\n var curlyRe = /\\s*\\}/;\n var tagRe = /#|\\^|\\/|>|\\{|&|=|!/;\n\n /**\n * Breaks up the given `template` string into a tree of tokens. If the `tags`\n * argument is given here it must be an array with two string values: the\n * opening and closing tags used in the template (e.g. [ \"<%\", \"%>\" ]). Of\n * course, the default is to use mustaches (i.e. mustache.tags).\n *\n * A token is an array with at least 4 elements. The first element is the\n * mustache symbol that was used inside the tag, e.g. \"#\" or \"&\". If the tag\n * did not contain a symbol (i.e. {{myValue}}) this element is \"name\". For\n * all text that appears outside a symbol this element is \"text\".\n *\n * The second element of a token is its \"value\". For mustache tags this is\n * whatever else was inside the tag besides the opening symbol. For text tokens\n * this is the text itself.\n *\n * The third and fourth elements of the token are the start and end indices,\n * respectively, of the token in the original template.\n *\n * Tokens that are the root node of a subtree contain two more elements: 1) an\n * array of tokens in the subtree and 2) the index in the original template at\n * which the closing tag for that section begins.\n *\n * Tokens for partials also contain two more elements: 1) a string value of\n * indendation prior to that tag and 2) the index of that tag on that line -\n * eg a value of 2 indicates the partial is the third tag on this line.\n */\n function parseTemplate (template, tags) {\n if (!template)\n return [];\n var lineHasNonSpace = false;\n var sections = []; // Stack to hold section tokens\n var tokens = []; // Buffer to hold the tokens\n var spaces = []; // Indices of whitespace tokens on the current line\n var hasTag = false; // Is there a {{tag}} on the current line?\n var nonSpace = false; // Is there a non-space char on the current line?\n var indentation = ''; // Tracks indentation for tags that use it\n var tagIndex = 0; // Stores a count of number of tags encountered on a line\n\n // Strips all whitespace tokens array for the current line\n // if there was a {{#tag}} on it and otherwise only space.\n function stripSpace () {\n if (hasTag && !nonSpace) {\n while (spaces.length)\n delete tokens[spaces.pop()];\n } else {\n spaces = [];\n }\n\n hasTag = false;\n nonSpace = false;\n }\n\n var openingTagRe, closingTagRe, closingCurlyRe;\n function compileTags (tagsToCompile) {\n if (typeof tagsToCompile === 'string')\n tagsToCompile = tagsToCompile.split(spaceRe, 2);\n\n if (!isArray(tagsToCompile) || tagsToCompile.length !== 2)\n throw new Error('Invalid tags: ' + tagsToCompile);\n\n openingTagRe = new RegExp(escapeRegExp(tagsToCompile[0]) + '\\\\s*');\n closingTagRe = new RegExp('\\\\s*' + escapeRegExp(tagsToCompile[1]));\n closingCurlyRe = new RegExp('\\\\s*' + escapeRegExp('}' + tagsToCompile[1]));\n }\n\n compileTags(tags || mustache.tags);\n\n var scanner = new Scanner(template);\n\n var start, type, value, chr, token, openSection;\n while (!scanner.eos()) {\n start = scanner.pos;\n\n // Match any text between tags.\n value = scanner.scanUntil(openingTagRe);\n\n if (value) {\n for (var i = 0, valueLength = value.length; i < valueLength; ++i) {\n chr = value.charAt(i);\n\n if (isWhitespace(chr)) {\n spaces.push(tokens.length);\n indentation += chr;\n } else {\n nonSpace = true;\n lineHasNonSpace = true;\n indentation += ' ';\n }\n\n tokens.push([ 'text', chr, start, start + 1 ]);\n start += 1;\n\n // Check for whitespace on the current line.\n if (chr === '\\n') {\n stripSpace();\n indentation = '';\n tagIndex = 0;\n lineHasNonSpace = false;\n }\n }\n }\n\n // Match the opening tag.\n if (!scanner.scan(openingTagRe))\n break;\n\n hasTag = true;\n\n // Get the tag type.\n type = scanner.scan(tagRe) || 'name';\n scanner.scan(whiteRe);\n\n // Get the tag value.\n if (type === '=') {\n value = scanner.scanUntil(equalsRe);\n scanner.scan(equalsRe);\n scanner.scanUntil(closingTagRe);\n } else if (type === '{') {\n value = scanner.scanUntil(closingCurlyRe);\n scanner.scan(curlyRe);\n scanner.scanUntil(closingTagRe);\n type = '&';\n } else {\n value = scanner.scanUntil(closingTagRe);\n }\n\n // Match the closing tag.\n if (!scanner.scan(closingTagRe))\n throw new Error('Unclosed tag at ' + scanner.pos);\n\n if (type == '>') {\n token = [ type, value, start, scanner.pos, indentation, tagIndex, lineHasNonSpace ];\n } else {\n token = [ type, value, start, scanner.pos ];\n }\n tagIndex++;\n tokens.push(token);\n\n if (type === '#' || type === '^') {\n sections.push(token);\n } else if (type === '/') {\n // Check section nesting.\n openSection = sections.pop();\n\n if (!openSection)\n throw new Error('Unopened section \"' + value + '\" at ' + start);\n\n if (openSection[1] !== value)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + start);\n } else if (type === 'name' || type === '{' || type === '&') {\n nonSpace = true;\n } else if (type === '=') {\n // Set the tags for the next time around.\n compileTags(value);\n }\n }\n\n stripSpace();\n\n // Make sure there are no open sections when we're done.\n openSection = sections.pop();\n\n if (openSection)\n throw new Error('Unclosed section \"' + openSection[1] + '\" at ' + scanner.pos);\n\n return nestTokens(squashTokens(tokens));\n }\n\n /**\n * Combines the values of consecutive text tokens in the given `tokens` array\n * to a single token.\n */\n function squashTokens (tokens) {\n var squashedTokens = [];\n\n var token, lastToken;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n if (token) {\n if (token[0] === 'text' && lastToken && lastToken[0] === 'text') {\n lastToken[1] += token[1];\n lastToken[3] = token[3];\n } else {\n squashedTokens.push(token);\n lastToken = token;\n }\n }\n }\n\n return squashedTokens;\n }\n\n /**\n * Forms the given array of `tokens` into a nested tree structure where\n * tokens that represent a section have two additional items: 1) an array of\n * all tokens that appear in that section and 2) the index in the original\n * template that represents the end of that section.\n */\n function nestTokens (tokens) {\n var nestedTokens = [];\n var collector = nestedTokens;\n var sections = [];\n\n var token, section;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n token = tokens[i];\n\n switch (token[0]) {\n case '#':\n case '^':\n collector.push(token);\n sections.push(token);\n collector = token[4] = [];\n break;\n case '/':\n section = sections.pop();\n section[5] = token[2];\n collector = sections.length > 0 ? sections[sections.length - 1][4] : nestedTokens;\n break;\n default:\n collector.push(token);\n }\n }\n\n return nestedTokens;\n }\n\n /**\n * A simple string scanner that is used by the template parser to find\n * tokens in template strings.\n */\n function Scanner (string) {\n this.string = string;\n this.tail = string;\n this.pos = 0;\n }\n\n /**\n * Returns `true` if the tail is empty (end of string).\n */\n Scanner.prototype.eos = function eos () {\n return this.tail === '';\n };\n\n /**\n * Tries to match the given regular expression at the current position.\n * Returns the matched text if it can match, the empty string otherwise.\n */\n Scanner.prototype.scan = function scan (re) {\n var match = this.tail.match(re);\n\n if (!match || match.index !== 0)\n return '';\n\n var string = match[0];\n\n this.tail = this.tail.substring(string.length);\n this.pos += string.length;\n\n return string;\n };\n\n /**\n * Skips all text until the given regular expression can be matched. Returns\n * the skipped string, which is the entire tail if no match can be made.\n */\n Scanner.prototype.scanUntil = function scanUntil (re) {\n var index = this.tail.search(re), match;\n\n switch (index) {\n case -1:\n match = this.tail;\n this.tail = '';\n break;\n case 0:\n match = '';\n break;\n default:\n match = this.tail.substring(0, index);\n this.tail = this.tail.substring(index);\n }\n\n this.pos += match.length;\n\n return match;\n };\n\n /**\n * Represents a rendering context by wrapping a view object and\n * maintaining a reference to the parent context.\n */\n function Context (view, parentContext) {\n this.view = view;\n this.cache = { '.': this.view };\n this.parent = parentContext;\n }\n\n /**\n * Creates a new context using the given view with this context\n * as the parent.\n */\n Context.prototype.push = function push (view) {\n return new Context(view, this);\n };\n\n /**\n * Returns the value of the given name in this context, traversing\n * up the context hierarchy if the value is absent in this context's view.\n */\n Context.prototype.lookup = function lookup (name) {\n var cache = this.cache;\n\n var value;\n if (cache.hasOwnProperty(name)) {\n value = cache[name];\n } else {\n var context = this, intermediateValue, names, index, lookupHit = false;\n\n while (context) {\n if (name.indexOf('.') > 0) {\n intermediateValue = context.view;\n names = name.split('.');\n index = 0;\n\n /**\n * Using the dot notion path in `name`, we descend through the\n * nested objects.\n *\n * To be certain that the lookup has been successful, we have to\n * check if the last object in the path actually has the property\n * we are looking for. We store the result in `lookupHit`.\n *\n * This is specially necessary for when the value has been set to\n * `undefined` and we want to avoid looking up parent contexts.\n *\n * In the case where dot notation is used, we consider the lookup\n * to be successful even if the last \"object\" in the path is\n * not actually an object but a primitive (e.g., a string, or an\n * integer), because it is sometimes useful to access a property\n * of an autoboxed primitive, such as the length of a string.\n **/\n while (intermediateValue != null && index < names.length) {\n if (index === names.length - 1)\n lookupHit = (\n hasProperty(intermediateValue, names[index])\n || primitiveHasOwnProperty(intermediateValue, names[index])\n );\n\n intermediateValue = intermediateValue[names[index++]];\n }\n } else {\n intermediateValue = context.view[name];\n\n /**\n * Only checking against `hasProperty`, which always returns `false` if\n * `context.view` is not an object. Deliberately omitting the check\n * against `primitiveHasOwnProperty` if dot notation is not used.\n *\n * Consider this example:\n * ```\n * Mustache.render(\"The length of a football field is {{#length}}{{length}}{{/length}}.\", {length: \"100 yards\"})\n * ```\n *\n * If we were to check also against `primitiveHasOwnProperty`, as we do\n * in the dot notation case, then render call would return:\n *\n * \"The length of a football field is 9.\"\n *\n * rather than the expected:\n *\n * \"The length of a football field is 100 yards.\"\n **/\n lookupHit = hasProperty(context.view, name);\n }\n\n if (lookupHit) {\n value = intermediateValue;\n break;\n }\n\n context = context.parent;\n }\n\n cache[name] = value;\n }\n\n if (isFunction(value))\n value = value.call(this.view);\n\n return value;\n };\n\n /**\n * A Writer knows how to take a stream of tokens and render them to a\n * string, given a context. It also maintains a cache of templates to\n * avoid the need to parse the same template twice.\n */\n function Writer () {\n this.templateCache = {\n _cache: {},\n set: function set (key, value) {\n this._cache[key] = value;\n },\n get: function get (key) {\n return this._cache[key];\n },\n clear: function clear () {\n this._cache = {};\n }\n };\n }\n\n /**\n * Clears all cached templates in this writer.\n */\n Writer.prototype.clearCache = function clearCache () {\n if (typeof this.templateCache !== 'undefined') {\n this.templateCache.clear();\n }\n };\n\n /**\n * Parses and caches the given `template` according to the given `tags` or\n * `mustache.tags` if `tags` is omitted, and returns the array of tokens\n * that is generated from the parse.\n */\n Writer.prototype.parse = function parse (template, tags) {\n var cache = this.templateCache;\n var cacheKey = template + ':' + (tags || mustache.tags).join(':');\n var isCacheEnabled = typeof cache !== 'undefined';\n var tokens = isCacheEnabled ? cache.get(cacheKey) : undefined;\n\n if (tokens == undefined) {\n tokens = parseTemplate(template, tags);\n isCacheEnabled && cache.set(cacheKey, tokens);\n }\n return tokens;\n };\n\n /**\n * High-level method that is used to render the given `template` with\n * the given `view`.\n *\n * The optional `partials` argument may be an object that contains the\n * names and templates of partials that are used in the template. It may\n * also be a function that is used to load partial templates on the fly\n * that takes a single argument: the name of the partial.\n *\n * If the optional `config` argument is given here, then it should be an\n * object with a `tags` attribute or an `escape` attribute or both.\n * If an array is passed, then it will be interpreted the same way as\n * a `tags` attribute on a `config` object.\n *\n * The `tags` attribute of a `config` object must be an array with two\n * string values: the opening and closing tags used in the template (e.g.\n * [ \"<%\", \"%>\" ]). The default is to mustache.tags.\n *\n * The `escape` attribute of a `config` object must be a function which\n * accepts a string as input and outputs a safely escaped string.\n * If an `escape` function is not provided, then an HTML-safe string\n * escaping function is used as the default.\n */\n Writer.prototype.render = function render (template, view, partials, config) {\n var tags = this.getConfigTags(config);\n var tokens = this.parse(template, tags);\n var context = (view instanceof Context) ? view : new Context(view, undefined);\n return this.renderTokens(tokens, context, partials, template, config);\n };\n\n /**\n * Low-level method that renders the given array of `tokens` using\n * the given `context` and `partials`.\n *\n * Note: The `originalTemplate` is only ever used to extract the portion\n * of the original template that was contained in a higher-order section.\n * If the template doesn't use higher-order sections, this argument may\n * be omitted.\n */\n Writer.prototype.renderTokens = function renderTokens (tokens, context, partials, originalTemplate, config) {\n var buffer = '';\n\n var token, symbol, value;\n for (var i = 0, numTokens = tokens.length; i < numTokens; ++i) {\n value = undefined;\n token = tokens[i];\n symbol = token[0];\n\n if (symbol === '#') value = this.renderSection(token, context, partials, originalTemplate, config);\n else if (symbol === '^') value = this.renderInverted(token, context, partials, originalTemplate, config);\n else if (symbol === '>') value = this.renderPartial(token, context, partials, config);\n else if (symbol === '&') value = this.unescapedValue(token, context);\n else if (symbol === 'name') value = this.escapedValue(token, context, config);\n else if (symbol === 'text') value = this.rawValue(token);\n\n if (value !== undefined)\n buffer += value;\n }\n\n return buffer;\n };\n\n Writer.prototype.renderSection = function renderSection (token, context, partials, originalTemplate, config) {\n var self = this;\n var buffer = '';\n var value = context.lookup(token[1]);\n\n // This function is used to render an arbitrary template\n // in the current context by higher-order sections.\n function subRender (template) {\n return self.render(template, context, partials, config);\n }\n\n if (!value) return;\n\n if (isArray(value)) {\n for (var j = 0, valueLength = value.length; j < valueLength; ++j) {\n buffer += this.renderTokens(token[4], context.push(value[j]), partials, originalTemplate, config);\n }\n } else if (typeof value === 'object' || typeof value === 'string' || typeof value === 'number') {\n buffer += this.renderTokens(token[4], context.push(value), partials, originalTemplate, config);\n } else if (isFunction(value)) {\n if (typeof originalTemplate !== 'string')\n throw new Error('Cannot use higher-order sections without the original template');\n\n // Extract the portion of the original template that the section contains.\n value = value.call(context.view, originalTemplate.slice(token[3], token[5]), subRender);\n\n if (value != null)\n buffer += value;\n } else {\n buffer += this.renderTokens(token[4], context, partials, originalTemplate, config);\n }\n return buffer;\n };\n\n Writer.prototype.renderInverted = function renderInverted (token, context, partials, originalTemplate, config) {\n var value = context.lookup(token[1]);\n\n // Use JavaScript's definition of falsy. Include empty arrays.\n // See https://github.com/janl/mustache.js/issues/186\n if (!value || (isArray(value) && value.length === 0))\n return this.renderTokens(token[4], context, partials, originalTemplate, config);\n };\n\n Writer.prototype.indentPartial = function indentPartial (partial, indentation, lineHasNonSpace) {\n var filteredIndentation = indentation.replace(/[^ \\t]/g, '');\n var partialByNl = partial.split('\\n');\n for (var i = 0; i < partialByNl.length; i++) {\n if (partialByNl[i].length && (i > 0 || !lineHasNonSpace)) {\n partialByNl[i] = filteredIndentation + partialByNl[i];\n }\n }\n return partialByNl.join('\\n');\n };\n\n Writer.prototype.renderPartial = function renderPartial (token, context, partials, config) {\n if (!partials) return;\n var tags = this.getConfigTags(config);\n\n var value = isFunction(partials) ? partials(token[1]) : partials[token[1]];\n if (value != null) {\n var lineHasNonSpace = token[6];\n var tagIndex = token[5];\n var indentation = token[4];\n var indentedValue = value;\n if (tagIndex == 0 && indentation) {\n indentedValue = this.indentPartial(value, indentation, lineHasNonSpace);\n }\n var tokens = this.parse(indentedValue, tags);\n return this.renderTokens(tokens, context, partials, indentedValue, config);\n }\n };\n\n Writer.prototype.unescapedValue = function unescapedValue (token, context) {\n var value = context.lookup(token[1]);\n if (value != null)\n return value;\n };\n\n Writer.prototype.escapedValue = function escapedValue (token, context, config) {\n var escape = this.getConfigEscape(config) || mustache.escape;\n var value = context.lookup(token[1]);\n if (value != null)\n return (typeof value === 'number' && escape === mustache.escape) ? String(value) : escape(value);\n };\n\n Writer.prototype.rawValue = function rawValue (token) {\n return token[1];\n };\n\n Writer.prototype.getConfigTags = function getConfigTags (config) {\n if (isArray(config)) {\n return config;\n }\n else if (config && typeof config === 'object') {\n return config.tags;\n }\n else {\n return undefined;\n }\n };\n\n Writer.prototype.getConfigEscape = function getConfigEscape (config) {\n if (config && typeof config === 'object' && !isArray(config)) {\n return config.escape;\n }\n else {\n return undefined;\n }\n };\n\n var mustache = {\n name: 'mustache.js',\n version: '4.2.0',\n tags: [ '{{', '}}' ],\n clearCache: undefined,\n escape: undefined,\n parse: undefined,\n render: undefined,\n Scanner: undefined,\n Context: undefined,\n Writer: undefined,\n /**\n * Allows a user to override the default caching strategy, by providing an\n * object with set, get and clear methods. This can also be used to disable\n * the cache by setting it to the literal `undefined`.\n */\n set templateCache (cache) {\n defaultWriter.templateCache = cache;\n },\n /**\n * Gets the default or overridden caching object from the default writer.\n */\n get templateCache () {\n return defaultWriter.templateCache;\n }\n };\n\n // All high-level mustache.* functions use this writer.\n var defaultWriter = new Writer();\n\n /**\n * Clears all cached templates in the default writer.\n */\n mustache.clearCache = function clearCache () {\n return defaultWriter.clearCache();\n };\n\n /**\n * Parses and caches the given template in the default writer and returns the\n * array of tokens it contains. Doing this ahead of time avoids the need to\n * parse templates on the fly as they are rendered.\n */\n mustache.parse = function parse (template, tags) {\n return defaultWriter.parse(template, tags);\n };\n\n /**\n * Renders the `template` with the given `view`, `partials`, and `config`\n * using the default writer.\n */\n mustache.render = function render (template, view, partials, config) {\n if (typeof template !== 'string') {\n throw new TypeError('Invalid template! Template should be a \"string\" ' +\n 'but \"' + typeStr(template) + '\" was given as the first ' +\n 'argument for mustache#render(template, view, partials)');\n }\n\n return defaultWriter.render(template, view, partials, config);\n };\n\n // Export the escaping function so that the user may override it.\n // See https://github.com/janl/mustache.js/issues/244\n mustache.escape = escapeHtml;\n\n // Export these mainly for testing, but also for advanced usage.\n mustache.Scanner = Scanner;\n mustache.Context = Context;\n mustache.Writer = Writer;\n\n return mustache;\n\n})));\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","import { EventUtil } from \"../util/EventUtil\";\r\n\r\nclass ModuleTracking {\r\n public readonly ModuleTrackingLoadedEvent:\r\n string = \"ModuleTrackingLoadedEvent\";\r\n\r\n public static GoogleEvent(\r\n eventCategory: string,\r\n eventAction: string,\r\n eventLabel: string,\r\n eventValue: number | null\r\n ): void {\r\n if (typeof(gtag) === \"function\") {\r\n gtag('event', eventAction, {\r\n 'event_action': eventAction,\r\n 'event_category': eventCategory,\r\n 'event_label': eventLabel,\r\n 'value': eventValue\r\n } );\r\n } else {\r\n console.warn(\"GTAG has not been loaded/initialized, trying GA...\");\r\n if (typeof(ga) === \"function\") {\r\n ga(\"send\", \"event\", eventCategory, {\r\n eventAction,\r\n eventCategory,\r\n eventLabel,\r\n eventValue\r\n });\r\n } else {\r\n console.warn(\"GA has not been loaded/initialized\");\r\n\r\n return;\r\n }\r\n console.log(\"Event Category: \" + eventCategory);\r\n console.log(\"Event Action: \" + eventAction);\r\n console.log(\"Event Label: \" + eventLabel);\r\n }\r\n }\r\n\r\n public static ModuleTrackCategory(t: HTMLElement): string {\r\n const closestCategory = $(t).closest(\"[data-module-track-category]\");\r\n if (closestCategory.length === 0) {\r\n return \"\";\r\n }\r\n const val = closestCategory.attr(\"data-module-track-category\");\r\n if (!val) {\r\n return \"\";\r\n }\r\n\r\n return val;\r\n }\r\n\r\n public static ModuleTrackAction(t: HTMLElement): string {\r\n const closestAction = $(t).closest(\"[data-module-track-action]\");\r\n if (closestAction.length === 0) {\r\n return \"\";\r\n }\r\n const val = closestAction.attr(\"data-module-track-action\");\r\n if (!val) {\r\n return \"\";\r\n }\r\n\r\n return val;\r\n }\r\n\r\n public static ModuleTrackLabel(t: HTMLElement): string {\r\n const closestLabel = $(t).closest(\"[data-module-track-label]\");\r\n if (closestLabel.length === 0) {\r\n return \"\";\r\n }\r\n const val = closestLabel.attr(\"data-module-track-label\");\r\n if (!val) {\r\n return \"\";\r\n }\r\n\r\n return val;\r\n }\r\n\r\n public TrackLinks(): void {\r\n console.log(\"Module tracking loaded.\");\r\n $(\"a, button, span, input, div[data-track]\")\r\n .not(\"[data-notrack]\")\r\n .each(function (): void {\r\n $(this).on(\"click\", function (): void {\r\n const eventCategory = ModuleTracking.ModuleTrackCategory(this);\r\n const eventAction = ModuleTracking.ModuleTrackAction(this);\r\n const eventLabel = ModuleTracking.ModuleTrackLabel(this);\r\n if (eventCategory === \"\" || eventAction === \"\" || eventLabel === \"\") {\r\n return;\r\n }\r\n // console.log($(this).attr(\"class\"));\r\n if ($(this).hasClass(\"trendmd-widget-list-item__link\")) {\r\n return;\r\n }\r\n ModuleTracking.GoogleEvent(\r\n eventCategory,\r\n eventAction,\r\n eventLabel,\r\n null\r\n );\r\n });\r\n });\r\n window.modtrkloaded = true;\r\n const modTrkLoadedEvent =\r\n EventUtil.createCustomEvent(this.ModuleTrackingLoadedEvent, null);\r\n window.dispatchEvent(modTrkLoadedEvent);\r\n }\r\n\r\n public AjaxTrackLinks(selection: HTMLElement,\r\n ConsoleLabel: string|null): void {\r\n // tslint:disable-next-line: restrict-plus-operands\r\n console.log(\"Ajax Track Click: \" + ConsoleLabel);\r\n $(selection)\r\n .find(\"a, button, span, i\")\r\n .not(\"[data-notrack]\")\r\n .each(function (): void {\r\n $(this).on(\"click\", function (): void {\r\n const eventCategory = ModuleTracking.ModuleTrackCategory(this);\r\n const eventAction = ModuleTracking.ModuleTrackAction(this);\r\n const eventLabel = ModuleTracking.ModuleTrackLabel(this);\r\n if (eventCategory === \"\" || eventAction === \"\" || eventLabel === \"\") {\r\n return;\r\n }\r\n ModuleTracking.GoogleEvent(\r\n eventCategory,\r\n eventAction,\r\n eventLabel,\r\n null\r\n );\r\n });\r\n });\r\n }\r\n\r\n public UseGoogleTrack(cat: string, act: string, lab: string) {\r\n ModuleTracking.GoogleEvent(cat, act, lab, 0)\r\n }\r\n\r\n public async init(): Promise {\r\n this.TrackLinks();\r\n }\r\n}\r\n\r\nexport const moduletracking = new ModuleTracking();\r\n","class AsyncEvent {\r\n\r\n private readonly _listeners: (() => Promise)[] = [];\r\n\r\n public get hasListeners(): boolean {\r\n return this._listeners.length > 0;\r\n }\r\n\r\n public join(listener: () => Promise): void {\r\n this._listeners.push(listener);\r\n }\r\n\r\n public async complete(): Promise {\r\n const result = await Promise\r\n .all(this._listeners.map(listener => listener()));\r\n\r\n return result.every(r => r);\r\n }\r\n}\r\n\r\nexport const EventUtil = {\r\n createCustomEvent(\r\n type: string,\r\n detail: TDetail,\r\n // Justification: Conflicting ts-lint rules.\r\n // tslint:disable-next-line: typedef\r\n cancelable = false\r\n ): CustomEvent {\r\n // Justification: CustomEvent constructor not supported in IE11.\r\n // tslint:disable-next-line:strict-type-predicates\r\n if (typeof CustomEvent === \"function\") {\r\n return new CustomEvent(type, {\r\n bubbles: true,\r\n cancelable,\r\n detail\r\n });\r\n }\r\n\r\n const event: CustomEvent = document.createEvent(\"CustomEvent\");\r\n event.initCustomEvent(type, true, cancelable, detail);\r\n\r\n return event;\r\n },\r\n\r\n listenAsyncEvent(\r\n type: string,\r\n handler: () => Promise,\r\n context: EventTarget = window\r\n ): void {\r\n context.addEventListener(type, (evt: Event) => {\r\n const customEvent = evt as CustomEvent;\r\n const asyncEvent = customEvent.detail;\r\n if (asyncEvent instanceof AsyncEvent) {\r\n asyncEvent.join(handler);\r\n }\r\n });\r\n },\r\n\r\n dispatchAsyncEvent(element: Element, type: string): Promise | null {\r\n const detail = new AsyncEvent();\r\n const event = EventUtil.createCustomEvent(type, detail);\r\n element.dispatchEvent(event);\r\n\r\n // return detail.hasListeners\r\n // ? detail.complete()\r\n // : new Promise(() => true);\r\n return detail.complete();\r\n }\r\n};\r\n","import { BackNextButton } from \"../components/BackNextButton\";\r\nimport { DisplayAuthLinks, RedirectUnauthenticated } from \"../behaviors\";\r\nimport { EventUtil } from \"../util/EventUtil\";\r\nimport { PageContext } from \"../service/PageContext\";\r\nimport { UrlUtil } from \"../util/UrlUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { moduletracking } from \"./ModuleTracking\";\r\nimport { GoogleIdentityBottom } from \"../components/healioGlobal/LoginRegistration/GoogleIdentityBottom\";\r\nimport { AppleIdentityBottom } from \"../components/healioGlobal/LoginRegistration/AppleIdentityBottom\";\r\n\r\nclass WyanokeContext {\r\n private _pageContext: PageContext | null = null;\r\n\r\n constructor() {\r\n EventUtil.listenAsyncEvent(BackNextButton.UpdateStepsEvent, () =>\r\n this.updateActivityState()\r\n );\r\n EventUtil.listenAsyncEvent(BackNextButton.AboutToContinueEvent, () =>\r\n this.updateActivityState()\r\n );\r\n }\r\n\r\n public async init(): Promise {\r\n const pageContext = (this._pageContext = new PageContext());\r\n\r\n const qsMap = UrlUtil.getQueryString();\r\n if (qsMap.get(\"logout\") !== undefined) {\r\n WyanokeUtil.logOut();\r\n }\r\n\r\n $(\".logout-user\").on(\"click\", () => {\r\n WyanokeUtil.logOut();\r\n });\r\n\r\n await new RedirectUnauthenticated().init();\r\n\r\n await pageContext.componentFactory.loadComponents(document.body);\r\n await new DisplayAuthLinks().init();\r\n\r\n moduletracking.TrackLinks();\r\n\r\n AppleIdentityBottom.init(pageContext);\r\n GoogleIdentityBottom.init(pageContext);\r\n\r\n return this.manageActivityState(pageContext);\r\n }\r\n\r\n public get pageContext(): PageContext | null {\r\n return this._pageContext;\r\n }\r\n\r\n private static get isExperienceEditor(): boolean {\r\n const pageEditor =\r\n window.Sitecore &&\r\n window.Sitecore.PageModes &&\r\n window.Sitecore.PageModes.PageEditor;\r\n\r\n return Boolean(pageEditor);\r\n }\r\n\r\n private async updateActivityState(): Promise {\r\n const activity = window.Activity;\r\n const currentStepId = activity ? activity.CurrentStepId : null;\r\n if (!currentStepId) {\r\n console.log(\"Not on current step\");\r\n\r\n return true;\r\n }\r\n\r\n if (WyanokeContext.isExperienceEditor) {\r\n const msg =\r\n \"Skipping activity state update because the experience \" +\r\n \"editor is active.\";\r\n\r\n console.log(msg);\r\n\r\n return true;\r\n }\r\n\r\n if(activity?.Expires !== null ) {\r\n let expires = new Date(activity.Expires);\r\n let today = new Date()\r\n if((today.getTime() - expires.getTime()) > 86400000 ) {\r\n // if(new Date(activity.Expires) <= new Date()) {\r\n console.log(\"Activity expired. Step will not be saved\");\r\n\r\n return true;\r\n }\r\n }\r\n\r\n const pageContext = this._pageContext;\r\n const service = pageContext ? pageContext.userActivityService : null;\r\n if (!service) {\r\n console.log(\"User activity service is not available.\");\r\n\r\n return true;\r\n }\r\n\r\n console.log(\"Completing step...\");\r\n await service.completeActivityStep(currentStepId);\r\n console.log(\"Step complete\");\r\n\r\n return true;\r\n }\r\n\r\n private async manageActivityState(pageContext: PageContext): Promise {\r\n if (WyanokeContext.isExperienceEditor) {\r\n const msg =\r\n \"Skipping activity state management because the experience \" +\r\n \"editor is active.\";\r\n\r\n console.log(msg);\r\n\r\n return;\r\n }\r\n\r\n const service = pageContext.userActivityService;\r\n const activity = window.Activity;\r\n const expirationDate = activity?.Expires ? new Date(activity.Expires) : null ;\r\n const specialty = activity?.Specialties ? activity.Specialties[0].Title : null;\r\n\r\n if (expirationDate) {\r\n let now = new Date(new Date().getUTCFullYear(), new Date().getUTCMonth(), new Date().getUTCDate());\r\n let expDate = new Date(expirationDate.getUTCFullYear(), expirationDate.getUTCMonth(), expirationDate.getUTCDate());\r\n if (expDate < now) {\r\n let expiredUrl =\r\n window.location.href.replace(window.location.pathname, \"\");\r\n if (activity && specialty) {\r\n const specialtyIndex = window.location.pathname.indexOf(\r\n specialty.replace(\"/\", \"-\").split(\" \").join(\"-\").toLowerCase())\r\n + specialty.length;\r\n if (specialtyIndex > -1) {\r\n expiredUrl = window.location.pathname.substring(0, specialtyIndex);\r\n }\r\n }\r\n\r\n if((activity?.LMSName || \"\").length > 0){\r\n var segments = window.location.pathname.split('/');\r\n expiredUrl = '/' + (segments.length < 1 ? \"\" : segments[1]);\r\n }\r\n\r\n console.warn(\"Redirecting due to activity expiration date:\", expiredUrl);\r\n window.location.replace(expiredUrl);\r\n return;\r\n }\r\n }\r\n\r\n const loginqs = UrlUtil.getQueryString().get(\"login\");\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (activity) {\r\n const currentStepType = window.Activity?.Steps?.find((s:any) => window.Activity.CurrentStepId === s.Id)?.Type;\r\n if (currentStepType) {\r\n console.log({\r\n loginqs: (loginqs === undefined),\r\n stepType: (currentStepType.toLowerCase().indexOf(\"outcome survey\") > -1),\r\n notloggedin: (profile?.isLoggedIn === \"False\" || profile?.isLoggedIn === undefined)\r\n });\r\n if (loginqs === undefined && currentStepType.toLowerCase().indexOf(\"outcome survey\") > -1 && (profile?.isLoggedIn === \"False\" || profile?.isLoggedIn === undefined)) {\r\n let url = UrlUtil.setQueryString(window.location.pathname, \"login\", \"1\");\r\n\r\n console.log(\"User _must_ be logged in to interact with an outcome survey\");\r\n window.location.replace(url);\r\n return;\r\n }\r\n }\r\n\r\n if(currentStepType.toLowerCase() == \"healio master class print preview\"){\r\n console.log(\"Do not redirect on these templates\")\r\n return;\r\n }\r\n }\r\n\r\n const currentStepId = activity ? activity.CurrentStepId : null;\r\n if (currentStepId) {\r\n if (service) {\r\n const redirectUrl = await service.activityStepRedirectTarget(\r\n currentStepId\r\n );\r\n\r\n if (redirectUrl) {\r\n const url = profile\r\n ? redirectUrl\r\n : UrlUtil.setQueryString(redirectUrl, \"login\", \"1\");\r\n\r\n console.warn(\"Redirecting due to activty state:\", url);\r\n\r\n window.location.replace(url);\r\n }\r\n } else {\r\n console.warn(\"User activity service not available.\");\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport const context = new WyanokeContext();\r\n$(() => context.init());\r\n","import { IUserProfile } from \"../@types/Wyanoke/UserProfile\";\r\nconst globalsPromise = new Promise((resolve, reject) => {\r\n let complete = false;\r\n\r\n const testForSuccess = () => {\r\n if (complete) {\r\n return;\r\n }\r\n\r\n complete = true;\r\n\r\n if (window.UserProfile) {\r\n console.log(\"Globals loaded.\");\r\n } else {\r\n console.warn(\"Globals not loaded.\");\r\n }\r\n\r\n resolve();\r\n };\r\n\r\n const legacyJQuery = window.$j;\r\n if (!legacyJQuery) {\r\n console.warn(\"Could not find legacy jQuery.\");\r\n testForSuccess();\r\n\r\n return;\r\n }\r\n\r\n // LATENCY: check one last time for window.UserProfile before waiting\r\n if (window.UserProfile) {\r\n testForSuccess();\r\n } else {\r\n window.setTimeout(\r\n () => {\r\n if (!complete) {\r\n console.warn(\"Timeout waiting for global load event.\");\r\n testForSuccess();\r\n }\r\n },\r\n // Justification: 10000 = 10 second timeout waiting for globals to load.\r\n // LATENCY: timeout has been reduced to 5 seconds\r\n // tslint:disable-next-line:no-magic-numbers\r\n 5000\r\n );\r\n\r\n legacyJQuery(window).one(\"globalsloaded\", testForSuccess);\r\n }\r\n});\r\n\r\nconst defaultGuid = \"00000000-0000-0000-0000-000000000000\";\r\n\r\nexport const WyanokeUtil = {\r\n async loadUserProfile(\r\n loggedIn: boolean,\r\n complete: boolean\r\n ): Promise {\r\n // The UserProfile global object is loaded asynchronously. It may already\r\n // be on the page, and it may not.\r\n const existing = window.UserProfile;\r\n if (existing) {\r\n if (loggedIn && complete) {\r\n if (\r\n existing.complete &&\r\n existing.contactid &&\r\n existing.contactid !== defaultGuid\r\n ) {\r\n return existing;\r\n }\r\n } else if (loggedIn) {\r\n if (existing.contactid && existing.contactid !== defaultGuid) {\r\n return existing;\r\n }\r\n } else {\r\n return existing;\r\n }\r\n }\r\n\r\n await globalsPromise;\r\n const profile = window.UserProfile;\r\n\r\n if (loggedIn) {\r\n if (!profile || !profile.contactid) {\r\n console.warn(\"No global user context.\");\r\n\r\n return null;\r\n }\r\n\r\n if (profile.contactid === defaultGuid) {\r\n console.log(\"User is not known to Sitecore.\");\r\n\r\n return null;\r\n }\r\n }\r\n\r\n return profile || null;\r\n },\r\n GetDateISO8601() : string {\r\n const date = new Date();\r\n const tzo = date.getTimezoneOffset();\r\n\r\n // the timezoneoffset returns what needs to be ADDED to the time, so the signs are flipped. GMT-5:00 (eastern) returns \"300\"\r\n const dif = tzo >= 0 ? \"-\" : \"+\";\r\n const pad = function (num : number) : string {\r\n const norm = Math.floor(Math.abs(num));\r\n\r\n // tslint:disable-next-line: no-magic-numbers\r\n return (norm < 10 ? \"0\" : \"\") + norm;\r\n };\r\n return date.getFullYear() +\r\n \"-\" + pad(date.getMonth() + 1) +\r\n \"-\" + pad(date.getDate()) +\r\n \"T\" + pad(date.getHours()) +\r\n \":\" + pad(date.getMinutes()) +\r\n \":\" + pad(date.getSeconds()) +\r\n dif + pad(tzo / 60) +\r\n \":\" + pad(tzo % 60);\r\n },\r\n async loadContext(required: boolean): Promise {\r\n // The window.Context global object is loaded asynchronously.\r\n // It may already be on the page, and it may not.\r\n const existing = window.Context;\r\n if (existing) {\r\n if (required) {\r\n if (existing.itemid) {\r\n return existing;\r\n }\r\n } else {\r\n return existing;\r\n }\r\n }\r\n\r\n await globalsPromise;\r\n const context = window.Context;\r\n\r\n if (required) {\r\n if (!context) {\r\n console.warn(\"No global window.Context.\");\r\n\r\n return null;\r\n }\r\n }\r\n\r\n return context || null;\r\n },\r\n isMobile() :boolean {\r\n const lower = navigator.userAgent.toLowerCase();\r\n\r\n // tslint:disable-next-line:max-line-length\r\n return !lower.includes(\"xoom\") &&\r\n !lower.includes(\"sch-i800\") &&\r\n (\r\n lower.includes(\"mobile\") &&\r\n !lower.includes(\"ipad\") ||\r\n lower.includes(\"android\") &&\r\n lower.includes(\"mobile\") ||\r\n (\r\n lower.includes(\"phone\") ||\r\n lower.includes(\"blackberry\") ||\r\n (\r\n lower.includes(\"windows ce\") ||\r\n lower.includes(\"opera mini\")\r\n )\r\n ) ||\r\n lower.includes(\"nokia\") ||\r\n lower.includes(\"palm\")\r\n );\r\n },\r\n logOut() : boolean {\r\n let loggedOut = false;\r\n $.post(\"/~/user/logout\", () => {\r\n console.log(\"logged out and reloading\");\r\n window.location.href =\r\n window.location.href.replace(window.location.search,\"\");\r\n if (window.location.href.indexOf(\"#\") > -1) {\r\n window.location.reload();\r\n }\r\n\r\n loggedOut = true;\r\n }).fail((): void => {\r\n console.log(\"failed to logout user\");\r\n });\r\n\r\n return loggedOut;\r\n },\r\n logIn() : void {\r\n // TODO: get this URL from a global var or something set in sc\r\n $.get('/utilityapp/json/na/li/healiotwo/{ACC50322-FB7D-42FC-940E-84BDDAD3B84D}',function (data){$('body').append(data);})\r\n }\r\n};\r\n","export const UrlUtil = {\r\n setQueryString(url: string, name: string, value: string): string {\r\n const fragDelimiterIdx = url.indexOf(\"#\");\r\n\r\n const fragment = fragDelimiterIdx === -1 ?\r\n \"\" :\r\n url.substring(fragDelimiterIdx);\r\n\r\n const withoutFrag = fragDelimiterIdx === -1 ?\r\n url :\r\n url.substring(0, fragDelimiterIdx);\r\n\r\n const qsDelimiterIdx = withoutFrag.indexOf(\"?\");\r\n\r\n if (qsDelimiterIdx === -1) {\r\n return withoutFrag + \"?\" +\r\n encodeURIComponent(name) + \"=\" +\r\n encodeURIComponent(value) +\r\n fragment;\r\n }\r\n\r\n const lcName = name.toLowerCase();\r\n const qs = withoutFrag.substring(qsDelimiterIdx + 1).split(\"&\").map(kvp => {\r\n const pair = kvp.split(\"=\");\r\n\r\n return {\r\n name: decodeURIComponent(pair[0] || \"\"),\r\n value: decodeURIComponent(pair[1] || \"\")\r\n };\r\n }).filter(kvp => kvp.name.toLowerCase() !== lcName);\r\n\r\n qs.push({ name, value });\r\n\r\n const updated = qs\r\n .map(kvp =>\r\n encodeURIComponent(kvp.name) + \"=\" +\r\n encodeURIComponent(kvp.value))\r\n .join(\"&\");\r\n\r\n return withoutFrag.substring(0, qsDelimiterIdx) + \"?\" + updated + fragment;\r\n },\r\n\r\n getQueryString(): Map {\r\n return window.location.search\r\n .substring(1)\r\n .split(\"&\")\r\n .map(kvp => {\r\n const split = kvp.split(\"=\");\r\n const name = decodeURIComponent(split[0]);\r\n const value = decodeURIComponent(split[1]);\r\n\r\n return { name, value };\r\n })\r\n .reduce(\r\n (map, pair) => {\r\n const value = map.get(pair.name) || [];\r\n value.push(pair.value);\r\n map.set(pair.name, value);\r\n\r\n return map;\r\n },\r\n new Map());\r\n },\r\n externalUrlCheck(): void {\r\n const allAElementsInDiv = $(\"div\").find(\"a\");\r\n if(typeof(allAElementsInDiv) === \"undefined\") return;\r\n allAElementsInDiv.filter(index => {\r\n // wrapping this in a try catch to handle bad hrefs (e.g. href=\"this is a title\")\r\n try {\r\n const anchor = allAElementsInDiv[index] as HTMLAnchorElement;\r\n if (anchor.href.indexOf(\"javascript\") >= 0) { return false; }\r\n if (anchor.href === \"#\") { return false; }\r\n\r\n return anchor.hostname.indexOf(\"healio.com\") < 0;\r\n }\r\n catch(error){\r\n console.error(error)\r\n return false;\r\n }\r\n })\r\n .attr(\"target\", \"_blank\");\r\n }\r\n};\r\n","import { Component } from \"./base/Component\";\r\nimport { ComponentFactory } from \"../service/ComponentFactory\";\r\nimport { DomUtil } from \"../util/DomUtil\";\r\nimport { EventUtil } from \"../util/EventUtil\";\r\nimport { HealioHeader } from \"./healioGlobal/HealioHeader\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { moduletracking } from \"../Wyanoke/ModuleTracking\";\r\nimport { ModalEventHandler } from \"bootstrap\";\r\n\r\nexport class BackNextButton extends Component {\r\n public static readonly NextNavigationEvent: string = \"NextNavigationEvent\";\r\n public static readonly AboutToContinueEvent: string = \"AboutToContinueEvent\";\r\n public static readonly UpdateStepsEvent: string = \"UpdateStepsEvent\";\r\n\r\n private readonly _next: HTMLButtonElement;\r\n private readonly _back: HTMLButtonElement;\r\n\r\n private _showUserReviewedModal: boolean;\r\n private _userDirection: HTMLButtonElement;\r\n private _reviewModalOptionYes!: HTMLInputElement;\r\n private _reviewModalOptionNo!: HTMLInputElement;\r\n private _isOpen: boolean;\r\n private _hasMasterClassModal: boolean;\r\n\r\n private UserReviewedModal = (document.getElementById(\"userReviewedModal\") ||\r\n null) as HTMLElement;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n // set default as next\r\n this._userDirection = DomUtil.query(element, \"button[data-action='next']\");\r\n this._isOpen = false;\r\n // handle next button\r\n this._next = DomUtil.query(element, \"button[data-action='next']\");\r\n this._next.addEventListener(\"click\", (ev) => this.handleNext(ev));\r\n window.addEventListener(\"activity.backnextbutton.next\", (ev) =>\r\n this.handleNext(ev)\r\n );\r\n\r\n this._hasMasterClassModal = this._next.dataset.masterclass == \"true\";\r\n\r\n // handle back button\r\n this._back = DomUtil.query(element, \"button[data-action='back']\", false);\r\n if (this._back) {\r\n this._back.addEventListener(\"click\", (ev) => this.handleBack(ev));\r\n }\r\n\r\n // set up the \"did you review the step content\" modal if needed.\r\n this._showUserReviewedModal =\r\n element.getAttribute(\"data-user-reviewed-modal\") === \"1\";\r\n if (\r\n this._showUserReviewedModal &&\r\n this.UserReviewedModal !== null &&\r\n this.UserReviewedModal !== undefined\r\n ) {\r\n this.setModalVars(element);\r\n\r\n $(this.UserReviewedModal).on(\"show.bs.modal\", () => {\r\n this._isOpen = true;\r\n });\r\n\r\n $(this.UserReviewedModal).on(\"hidden.bs.modal\", () => {\r\n this._isOpen = false;\r\n });\r\n }\r\n\r\n }\r\n\r\n\r\n\r\n public next(): void {\r\n const click = EventUtil.createCustomEvent(\"click\", null);\r\n this._next.dispatchEvent(click);\r\n }\r\n\r\n public disableNext(): void {\r\n this._next.classList.add(\"disabled\");\r\n this._next.setAttribute(\"disabled\", \"disabled\");\r\n this._next.removeEventListener(\"click\", (ev) => this.handleNext(ev));\r\n window.removeEventListener(\"activity.backnextbutton.next\", (ev) =>\r\n this.handleNext(ev)\r\n );\r\n }\r\n\r\n private async handleNext(ev: Event): Promise {\r\n this._userDirection = this._next;\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile || profile.isLoggedIn?.toLowerCase() === \"false\") {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null\r\n )\r\n );\r\n\r\n return;\r\n }\r\n\r\n ev.stopPropagation();\r\n\r\n console.log(\"[Next Button] - About to fire navigation event\");\r\n\r\n const promise = await EventUtil.dispatchAsyncEvent(\r\n this._element,\r\n BackNextButton.NextNavigationEvent\r\n );\r\n\r\n console.log(\"[Next Button] - Event fired\");\r\n\r\n console.log(promise);\r\n\r\n if (this.openReviewModal()) {\r\n return;\r\n }\r\n\r\n if (promise) {\r\n ev.preventDefault();\r\n const shouldContinue = promise;\r\n\r\n console.log(shouldContinue);\r\n if (shouldContinue) {\r\n\r\n if(this.openMasterClassModal()) {\r\n return;\r\n }\r\n\r\n const aboutToContinuePromise = EventUtil.dispatchAsyncEvent(\r\n this._element,\r\n BackNextButton.AboutToContinueEvent\r\n );\r\n\r\n await aboutToContinuePromise;\r\n\r\n console.log(shouldContinue);\r\n const href = this._next.dataset.href;\r\n if (href) {\r\n console.log(\"[Next Button] - found href\");\r\n if (this._next.dataset.target === \"_blank\") {\r\n window.open(href, \"_blank\");\r\n console.log(\"[Next Button] - targetting _blank\");\r\n } else {\r\n window.location.href = href;\r\n console.log(\"[Next Button] - navigating\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n console.log(\"[Next Button] - handleNext complete\");\r\n }\r\n\r\n private async handleBack(ev: Event): Promise {\r\n this._userDirection = this._back;\r\n console.log(\"[Back Button] - Clicked\");\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n\r\n // console.log(\"Show modal: \" + this._showUserReviewedModal);\r\n\r\n if (this.openReviewModal()) {\r\n return;\r\n }\r\n\r\n const href = this._back.dataset.href;\r\n if (href) {\r\n console.log(\"[Back Button] - found href\");\r\n window.location.href = href;\r\n console.log(\"[Back Button] - navigating\");\r\n }\r\n console.log(\"[Back Button] - handleBack complete\");\r\n }\r\n\r\n private openReviewModal(): boolean {\r\n\r\n if (this._showUserReviewedModal) {\r\n $(\"#userReviewedModal\").modal();\r\n this._isOpen = true;\r\n // this._showUserReviewedModal = false;\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private openMasterClassModal(): boolean {\r\n if(this._hasMasterClassModal) {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.showmodal\",\r\n null\r\n )\r\n );\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private setModalVars(element: HTMLElement): void {\r\n // close buttons\r\n let closeLinks = DomUtil.queryAll(\r\n this.UserReviewedModal,\r\n \".click-and-close\"\r\n );\r\n closeLinks.forEach((closeLink) =>\r\n closeLink.addEventListener(\"click\", (closeLink) =>\r\n this.closeReviewModal(closeLink)\r\n )\r\n );\r\n\r\n this._reviewModalOptionYes = DomUtil.query(\r\n this.UserReviewedModal,\r\n \"input[value='optionYes']\"\r\n );\r\n $(this._reviewModalOptionYes).on(\"click\", (ev) =>\r\n this.handleReviewModalInput(ev)\r\n );\r\n\r\n this._reviewModalOptionNo = DomUtil.query(\r\n this.UserReviewedModal,\r\n \"input[value='optionNo']\"\r\n );\r\n $(this._reviewModalOptionNo).on(\"click\", (ev) =>\r\n this.handleReviewModalInput(ev)\r\n );\r\n\r\n // click outside of the modal\r\n document.addEventListener(\"click\", this.clickOutsideReviewModal);\r\n\r\n\r\n }\r\n\r\n private handleReviewModalInput(\r\n ev: JQuery.ClickEvent<\r\n HTMLInputElement,\r\n undefined,\r\n HTMLInputElement,\r\n HTMLInputElement\r\n >\r\n ): any {\r\n ev.target.setAttribute(\"checked\", \"true\");\r\n\r\n if (ev.target.value === \"optionNo\") {\r\n moduletracking.UseGoogleTrack(\r\n \"VME Completion Modal\",\r\n \"Selects they did not complete content_Click_VME Completion Modal\",\r\n \"Selects they did not complete content_VME Completion Modal\"\r\n );\r\n\r\n window.setTimeout(() => {\r\n $(\"#userReviewedModal\").modal(\"hide\");\r\n ev.target.removeAttribute(\"checked\");\r\n }, 1000);\r\n } else {\r\n moduletracking.UseGoogleTrack(\r\n \"VME Completion Modal\",\r\n \"Selects they completed content_Click_VME Completion Modal\",\r\n \"Selects they completed content_VME Completion Modal\"\r\n );\r\n\r\n window.setTimeout(() => {\r\n $(\"#userReviewedModal\").modal(\"hide\");\r\n ev.target.removeAttribute(\"checked\");\r\n this._showUserReviewedModal = false;\r\n this._userDirection.click();\r\n }, 1000);\r\n }\r\n }\r\n\r\n public clickOutsideReviewModal(ev: Event) {\r\n if (this._isOpen) {\r\n const path = ev.composedPath();\r\n if (!path.some(el => (el as HTMLElement).id === 'userReviewedModal')) {\r\n // Close the modal\r\n alert(\"Click outside modal detected!\");\r\n }\r\n }\r\n\r\n\r\n\r\n\r\n // if (\r\n // this.UserReviewedModal &&\r\n // !this.UserReviewedModal.contains(ev.target as Node)\r\n // ) {\r\n // moduletracking.UseGoogleTrack(\r\n // \"VME Completion Modal\",\r\n // \"Does not interact with modal_Click_VME Completion Modal\",\r\n // \"Does not interact with modal_VME Completion Modal\"\r\n // );\r\n // //$(\"#userReviewedModal\").modal(\"hide\");\r\n // }\r\n // if (this._isOpen) {\r\n\r\n // moduletracking.UseGoogleTrack(\r\n // \"VME Completion Modal\",\r\n // \"Does not interact with modal_Click_VME Completion Modal\",\r\n // \"Does not interact with modal_VME Completion Modal\"\r\n // );\r\n // $(\"#userReviewedModal\").modal(\"hide\");\r\n // this._isOpen = false;\r\n // this._userDirection.click();\r\n\r\n // }\r\n }\r\n\r\n private closeReviewModal(ev: Event): void {\r\n let closeMethodTypeElem = ev.currentTarget as HTMLElement;\r\n if (closeMethodTypeElem) {\r\n let methodType = closeMethodTypeElem.getAttribute(\"data-close-method\");\r\n if (methodType) {\r\n switch (methodType) {\r\n case \"x\":\r\n moduletracking.UseGoogleTrack(\r\n \"VME Completion Modal\",\r\n \"Closes modal_Click_VME Completion Modal\",\r\n \"Closes modal_VME Completion Modal\"\r\n );\r\n window.setTimeout(() => {\r\n $(\"#userReviewedModal\").modal(\"hide\");\r\n this._showUserReviewedModal = false;\r\n //this._isOpen = false;\r\n this._userDirection.click();\r\n }, 1000);\r\n\r\n break;\r\n case \"skip\":\r\n moduletracking.UseGoogleTrack(\r\n \"VME Completion Modal\",\r\n \"Skips modal_Click_VME Completion Modal\",\r\n \"Skips modal_VME Completion Modal\"\r\n );\r\n window.setTimeout(() => {\r\n $(\"#userReviewedModal\").modal(\"hide\");\r\n this._showUserReviewedModal = false;\r\n //this._isOpen = false;\r\n this._userDirection.click();\r\n }, 1000);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"BackNextButton\", BackNextButton);\r\n","import { Component } from \"../../base/Component\";\r\nimport { ComponentFactory } from \"../../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../../service/PageContext\";\r\n\r\ninterface GoogleUser {\r\n credential: string;\r\n select_by: string;\r\n}\r\n\r\nexport class GoogleIdentityBottom extends Component {\r\n public static readonly HealioErrorEvent = \"HealioErrorEvent\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n // Call the function when the document is ready\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n this.handleDocumentReady();\r\n });\r\n\r\n document.addEventListener(\"Healio.GoogleSSO.Callback\", (event) => {\r\n this.signInCallBack((event as CustomEvent).detail);\r\n });\r\n }\r\n\r\n public static init(pageContext: PageContext): void {\r\n const element = document.createElement(\"div\"); // Create a new element or use an existing one\r\n new GoogleIdentityBottom(element, pageContext);\r\n }\r\n\r\n private handleDocumentReady(): void {\r\n window.addEventListener(\"globalsloaded\", () => {\r\n this.checkSessionForModal();\r\n });\r\n\r\n const loginParam = this.getUrlParameter(\"login\");\r\n if (loginParam === \"1\") {\r\n fetch(\"/loginregistration/modals/loadloginmodal?islocked=false\")\r\n .then((response) => response.text())\r\n .then((data) => {\r\n document.body.insertAdjacentHTML(\"beforeend\", data);\r\n });\r\n }\r\n }\r\n\r\n private signInCallBack(googleUser: GoogleUser) {\r\n const welcomeModal = document.getElementById(\"welcomeModal\");\r\n welcomeModal?.classList.add(\"d-none\");\r\n //console.log(googleUser.select_by);\r\n var ssoLoginMethod = googleUser.select_by;\r\n\r\n if (ssoLoginMethod === \"user\") {\r\n this.gtagGoogleIdentity(\r\n \"SSO Continue button_Click_Registration One-Tap Google Sign In\",\r\n \"SSO Continue button_Registration One-Tap Google Sign In\"\r\n );\r\n } else {\r\n this.gtagGoogleIdentity(\r\n \"SSO button_Click_Registration Welcome to Healio Modal\",\r\n \"SSO button_Registration Welcome to Healio Modal\"\r\n );\r\n }\r\n\r\n var data = {\r\n googleid: googleUser.credential,\r\n clientid:\r\n \"1041508696886-udsoi9agtkimc2kfujs31gjes9tdgoqa.apps.googleusercontent.com\",\r\n };\r\n\r\n //console.log(JSON.stringify(data));\r\n fetch(\"/~/user/sso\", {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(data),\r\n })\r\n .then((response) => response.json())\r\n .then((r) => {\r\n var firstname = r.response.data.given_name;\r\n var lastname = r.response.data.family_name;\r\n var emailaddress = r.response.data.email;\r\n\r\n this.handleGoogleUser(\r\n firstname,\r\n lastname,\r\n emailaddress,\r\n ssoLoginMethod\r\n );\r\n })\r\n .catch((xhr) => {\r\n console.log(xhr);\r\n });\r\n }\r\n\r\n private handleGoogleUser(\r\n firstname: string,\r\n lastname: string,\r\n emailaddress: string,\r\n ssoLoginMethod: string\r\n ): void {\r\n let crmSourceSso = \"Google SSO\";\r\n const cookieNum = document.cookie.includes(\"page_view_count\")\r\n ? document.cookie\r\n .split(\"; \")\r\n .find((row) => row.startsWith(\"page_view_count\"))\r\n ?.split(\"=\")[1]\r\n : undefined;\r\n const maxSso = parseInt((window.Context as any).maxpageviews || \"0\");\r\n const viewsSso = parseInt(cookieNum || \"0\") + 1;\r\n const itemPath = (window.Context as any).docinfo?.path?.toLowerCase() || \"\";\r\n if (\r\n window.UserProfile.isLoggedIn !== \"True\" &&\r\n viewsSso >= maxSso &&\r\n ssoLoginMethod === \"btn\"\r\n ) {\r\n if (itemPath.indexOf(\"/hss/\") > 0) {\r\n crmSourceSso = `Google SSO ${\r\n cookieNum ? parseInt(cookieNum) + 1 : \"X\"\r\n } Clicks Deep Engagement`;\r\n } else {\r\n crmSourceSso = `Google SSO ${\r\n cookieNum ? parseInt(cookieNum) + 1 : \"X\"\r\n } Clicks`;\r\n }\r\n } else if (\r\n itemPath.indexOf(\"/product repositories/master/edu\") > 0 ||\r\n itemPath.indexOf(\"/web pages/cme\") > 0\r\n ) {\r\n crmSourceSso = \"Google SSO CME\";\r\n } else if (itemPath.indexOf(\"/hss/\") > 0) {\r\n crmSourceSso = \"Google SSO Deep Engagement\";\r\n } else {\r\n crmSourceSso = \"Google SSO\";\r\n }\r\n\r\n const regdata = {\r\n EmailAddress: emailaddress,\r\n FirstName: firstname,\r\n LastName: lastname,\r\n IsGoogleUser: true,\r\n SourceName: crmSourceSso,\r\n };\r\n fetch(\r\n \"/loginregistration/healioregistration/checkemailgoogleregistration\",\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(regdata),\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((results) => {\r\n document.cookie =\r\n \"requestmodal=1; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=.healio.com;\";\r\n const cid = results.contactid;\r\n const action = results.action;\r\n const showReminder = results.showRequest;\r\n\r\n document.cookie =\r\n \"googleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n document.cookie = \"disableonetap=1; domain=.healio.com; path=/\";\r\n\r\n const loginEvent = new CustomEvent(\"Healio.GoogleSSO.Login\", {\r\n detail: { cid: cid, action: action },\r\n });\r\n let shouldContinue = window.document.dispatchEvent(loginEvent);\r\n\r\n console.log(shouldContinue);\r\n if (shouldContinue) {\r\n const regUrl =\r\n window.location.origin +\r\n \"/register?cid=\" +\r\n cid +\r\n \"&ret=\" +\r\n window.location.href +\r\n \"®type=google&dil=1\";\r\n switch (action) {\r\n case \"registration\":\r\n document\r\n .getElementById(\"tempModalContent\")\r\n ?.classList.add(\"d-none\");\r\n document.cookie =\r\n \"googleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n document.cookie = \"disableonetap=1; domain=.healio.com; path=/\";\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n window.location.href = regUrl;\r\n break;\r\n case \"login\":\r\n if (showReminder) {\r\n this.loadReminderModal(cid, true);\r\n } else {\r\n document.cookie =\r\n \"googleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n document.cookie = \"disableonetap=1; domain=.healio.com; path=/\";\r\n const targeturl = window.location.href\r\n .replace(window.location.hash, \"\")\r\n .split(\"?\")[0];\r\n window.location.href = targeturl;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n private getUrlParameter(name: string): string | null {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(name);\r\n }\r\n\r\n private checkSessionForModal(): void {\r\n const userProfile = (window as any).UserProfile; // Type assertion for UserProfile\r\n\r\n if (\r\n userProfile !== undefined &&\r\n userProfile.isLoggedIn === \"True\" &&\r\n userProfile.completeuser === \"False\"\r\n ) {\r\n if (!this.getCookie(\"requestmodal\")) {\r\n const isGoogle = this.getCookie(\"googleauth\") !== undefined;\r\n this.loadReminderModal(userProfile.contactid, isGoogle);\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n }\r\n }\r\n }\r\n\r\n private getCookie(name: string): string | undefined {\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${name}=`);\r\n if (parts.length === 2) {\r\n const lastPart = parts.pop();\r\n return lastPart?.split(\";\")[0];\r\n }\r\n return undefined;\r\n }\r\n\r\n private gtagGoogleIdentity(act: string, lab: string) {\r\n var eventparams = {\r\n event_category: \"Registration\",\r\n event_action: act,\r\n event_label: lab,\r\n non_interaction: true,\r\n value: 0,\r\n };\r\n if (typeof gtag !== \"undefined\") {\r\n gtag(\"event\", eventparams.event_action, eventparams);\r\n }\r\n }\r\n\r\n private loadReminderModal(contactId: string, isGoogle: boolean): void {\r\n const checkRequest = this.getCookie(\"requestmodal\");\r\n if (checkRequest !== undefined) {\r\n return;\r\n }\r\n const returnUrl = window.location.href;\r\n if (\r\n returnUrl.includes(\"healio.com/community/\") ||\r\n returnUrl.includes(\"healio.com/mathematica/\")\r\n ) {\r\n return;\r\n }\r\n const regdata = {\r\n ContactId: contactId,\r\n IsGoogleUser: isGoogle,\r\n };\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json\",\r\n url: \"/loginregistration/modals/loadrequestmoremodal\",\r\n data: JSON.stringify(regdata),\r\n success: function (results) {\r\n $(\"#welcomeModal\").modal(\"hide\");\r\n $(\"#loginModal\").modal(\"hide\");\r\n $(\"body\").append(results);\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n },\r\n error: function (err) {\r\n console.log(err);\r\n },\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"GoogleIdentityBottom\",\r\n GoogleIdentityBottom\r\n);\r\n","import { Component } from \"../../base/Component\";\r\nimport { ComponentFactory } from \"../../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../../service/PageContext\";\r\n\r\ninterface AppleUser {\r\n firstname: string;\r\n lastname: string;\r\n email: string;\r\n}\r\n\r\nexport class AppleIdentityBottom extends Component {\r\n public static readonly HealioErrorEvent = \"HealioErrorEvent\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n // Call the function when the document is ready\r\n document.addEventListener(\"DOMContentLoaded\", () => {\r\n this.handleDocumentReady();\r\n });\r\n\r\n document.addEventListener(\"Healio.AppleSSO.Callback\", (event) => {\r\n this.signInCallBack((event as CustomEvent).detail);\r\n });\r\n }\r\n\r\n public static init(pageContext: PageContext): void {\r\n const element = document.createElement(\"div\"); // Create a new element or use an existing one\r\n new AppleIdentityBottom(element, pageContext);\r\n }\r\n\r\n private handleDocumentReady(): void {\r\n window.addEventListener(\"globalsloaded\", () => {\r\n this.checkSessionForModal();\r\n });\r\n\r\n const loginParam = this.getUrlParameter(\"login\");\r\n if (loginParam === \"1\") {\r\n fetch(\"/loginregistration/modals/loadloginmodal?islocked=false\")\r\n .then((response) => response.text())\r\n .then((data) => {\r\n document.body.insertAdjacentHTML(\"beforeend\", data);\r\n });\r\n }\r\n }\r\n\r\n private signInCallBack(appleUser: AppleUser) {\r\n const welcomeModal = document.getElementById(\"welcomeModal\");\r\n welcomeModal?.classList.add(\"d-none\");\r\n //console.log(appleUser.select_by);\r\n this.gtagAppleIdentity(\r\n \"SSO button_Click_Registration Welcome to Healio Modal\",\r\n \"SSO button_Registration Welcome to Healio Modal\"\r\n );\r\n\r\n this.handleAppleUser(\r\n appleUser.firstname,\r\n appleUser.lastname,\r\n appleUser.email\r\n );\r\n }\r\n\r\n private handleAppleUser(\r\n firstname: string,\r\n lastname: string,\r\n emailaddress: string\r\n ): void {\r\n let crmSourceSso = \"Apple SSO\";\r\n const cookieNum = document.cookie.includes(\"page_view_count\")\r\n ? document.cookie\r\n .split(\"; \")\r\n .find((row) => row.startsWith(\"page_view_count\"))\r\n ?.split(\"=\")[1]\r\n : undefined;\r\n const maxSso = parseInt((window.Context as any).maxpageviews || \"0\");\r\n const viewsSso = parseInt(cookieNum || \"0\") + 1;\r\n const itemPath = (window.Context as any).docinfo?.path?.toLowerCase() || \"\";\r\n if (\r\n window.UserProfile.isLoggedIn !== \"True\" &&\r\n viewsSso >= maxSso\r\n ) {\r\n if (itemPath.indexOf(\"/hss/\") > 0) {\r\n crmSourceSso = `Apple SSO ${\r\n cookieNum ? parseInt(cookieNum) + 1 : \"X\"\r\n } Clicks Deep Engagement`;\r\n } else {\r\n crmSourceSso = `Apple SSO ${\r\n cookieNum ? parseInt(cookieNum) + 1 : \"X\"\r\n } Clicks`;\r\n }\r\n } else if (\r\n itemPath.indexOf(\"/product repositories/master/edu\") > 0 ||\r\n itemPath.indexOf(\"/web pages/cme\") > 0\r\n ) {\r\n crmSourceSso = \"Apple SSO CME\";\r\n } else if (itemPath.indexOf(\"/hss/\") > 0) {\r\n crmSourceSso = \"Apple SSO Deep Engagement\";\r\n } else {\r\n crmSourceSso = \"Apple SSO\";\r\n }\r\n\r\n const regdata = {\r\n EmailAddress: emailaddress,\r\n FirstName: firstname,\r\n LastName: lastname,\r\n IsAppleUser: true,\r\n SourceName: crmSourceSso,\r\n };\r\n fetch(\r\n \"/loginregistration/healioregistration/checkemailappleregistration\",\r\n {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n body: JSON.stringify(regdata),\r\n }\r\n )\r\n .then((response) => response.json())\r\n .then((results) => {\r\n document.cookie = \"requestmodal=1; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT; domain=.healio.com;\";\r\n const cid = results.contactid;\r\n const action = results.action;\r\n const showReminder = results.showRequest;\r\n\r\n document.cookie = \"appleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n\r\n const loginEvent = new CustomEvent(\"Healio.AppleSSO.Login\", {\r\n detail: { cid: cid, action: action },\r\n });\r\n let shouldContinue = window.document.dispatchEvent(loginEvent);\r\n\r\n console.log(shouldContinue);\r\n if (shouldContinue) {\r\n const regUrl =\r\n window.location.origin +\r\n \"/register?cid=\" +\r\n cid +\r\n \"&ret=\" +\r\n window.location.href +\r\n \"®type=apple&dil=1\";\r\n switch (action) {\r\n case \"registration\":\r\n document\r\n .getElementById(\"tempModalContent\")\r\n ?.classList.add(\"d-none\");\r\n document.cookie = \"appleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n window.location.href = regUrl;\r\n break;\r\n case \"login\":\r\n if (showReminder) {\r\n this.loadReminderModal(cid, true);\r\n } else {\r\n document.cookie = \"appleauth=1; domain=.healio.com; path=/; max-age=315360000;\";\r\n const targeturl = window.location.href\r\n .replace(window.location.hash, \"\")\r\n .split(\"?\")[0];\r\n window.location.href = targeturl;\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n })\r\n .catch((err) => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n private getUrlParameter(name: string): string | null {\r\n const urlParams = new URLSearchParams(window.location.search);\r\n return urlParams.get(name);\r\n }\r\n\r\n private checkSessionForModal(): void {\r\n const userProfile = (window as any).UserProfile; // Type assertion for UserProfile\r\n\r\n if (\r\n userProfile !== undefined &&\r\n userProfile.isLoggedIn === \"True\" &&\r\n userProfile.completeuser === \"False\"\r\n ) {\r\n if (!this.getCookie(\"requestmodal\")) {\r\n const isApple = this.getCookie(\"appleauth\") !== undefined;\r\n this.loadReminderModal(userProfile.contactid, isApple);\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n }\r\n }\r\n }\r\n\r\n private getCookie(name: string): string | undefined {\r\n const value = `; ${document.cookie}`;\r\n const parts = value.split(`; ${name}=`);\r\n if (parts.length === 2) {\r\n const lastPart = parts.pop();\r\n return lastPart?.split(\";\")[0];\r\n }\r\n return undefined;\r\n }\r\n\r\n private gtagAppleIdentity(act: string, lab: string) {\r\n var eventparams = {\r\n event_category: \"Registration\",\r\n event_action: act,\r\n event_label: lab,\r\n non_interaction: true,\r\n value: 0,\r\n };\r\n if (typeof gtag !== \"undefined\") {\r\n gtag(\"event\", eventparams.event_action, eventparams);\r\n }\r\n }\r\n\r\n private loadReminderModal(contactId: string, isApple: boolean): void {\r\n const checkRequest = this.getCookie(\"requestmodal\");\r\n if (checkRequest !== undefined) {\r\n return;\r\n }\r\n const returnUrl = window.location.href;\r\n if (\r\n returnUrl.includes(\"healio.com/community/\") ||\r\n returnUrl.includes(\"healio.com/mathematica/\")\r\n ) {\r\n return;\r\n }\r\n const regdata = {\r\n ContactId: contactId,\r\n IsAppleUser: isApple,\r\n };\r\n $.ajax({\r\n type: \"POST\",\r\n contentType: \"application/json\",\r\n url: \"/loginregistration/modals/loadrequestmoremodal\",\r\n data: JSON.stringify(regdata),\r\n success: function (results) {\r\n $(\"#welcomeModal\").modal(\"hide\");\r\n $(\"#loginModal\").modal(\"hide\");\r\n $(\"body\").append(results);\r\n document.cookie = \"requestmodal=1; domain=.healio.com; path=/\";\r\n },\r\n error: function (err) {\r\n console.log(err);\r\n },\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"AppleIdentityBottom\",\r\n AppleIdentityBottom\r\n);\r\n","import { ActivityService } from \"./ActivityService\";\r\nimport { ArticleService } from \"./ArticleService\";\r\nimport { CertificateService } from \"./CertificateService\";\r\nimport { ICertificateServiceEndpoint } from \"../models/Certificate/ICertificateServiceEndpoint\"\r\nimport { ComponentFactory } from \"./ComponentFactory\";\r\nimport { EmailSignUpService } from \"./EmailSignUpService\";\r\nimport { GamificationService } from \"./GamificationService\";\r\nimport { HealioStoreService } from \"./HealioStoreService\";\r\nimport { HssPollAnswerService } from \"./HssPollAnswerService\";\r\nimport { IActivityServiceEndpoint } from \"../models/IActivityServiceEndpoint\";\r\nimport { IArticleServiceEndpoint } from \"../models/IArticleServiceEndpoint\";\r\nimport { IGamificationServiceEndpoint } from \"../models/Gamification/IGamificationServiceEndpoint\";\r\nimport { IHealioStoreEndpoint } from \"../models/HealioBigComm/IHealioStoreEndpoint\";\r\nimport { IEndpoint } from \"../models/IEndpoint\";\r\nimport { ITranscriptEndpoint } from \"../models/Transcript/ITranscriptEndpoint\";\r\nimport { LandingPageService } from \"./LandingPageService\";\r\nimport { MyCmeService } from \"./MyCmeService\";\r\nimport { NotificationBoxService } from \"./NotificationBoxService\"\r\nimport { QBankService } from \"./QBankService\";\r\nimport { QuestionAnswerService } from \"./QuestionAnswerService\";\r\nimport { RecommendedService } from \"./RecommendedService\";\r\nimport { SavedPageService } from \"./SavedPageService\";\r\nimport { TopicAlertService } from \"./TopicAlertService\";\r\nimport { TopicListService } from \"./TopicListService\";\r\nimport { TranscriptService } from \"./TranscriptService\";\r\nimport { UserActivityService } from \"./UserActivityService\";\r\nimport { UserProfileService } from \"./UserProfileService\";\r\nimport { QuikQuizService } from \"./QuikQuizService\";\r\nimport { FindRequirementsService } from \"./FindRequirementsService\";\r\nimport { UserGoalsService } from \"./UserGoalsService\"\r\nimport { UserLoginService } from \"./UserLoginService\"\r\n\r\nimport { IUserLoginServiceEndpoint } from \"../models/UserProfile/IUserLoginServiceEndpoint\"\r\nimport { IUserGoalsServiceEndpoint } from \"../models/UserGoals/IUserGoalsServiceEndpoint\"\r\nimport { IFindRequirementsServiceEndpoint } from \"../models/CMERequirements/IFindRequirementsServiceEndpoint\";\r\nimport { IPollAnswerServiceEndpoint } from \"../models/HssPoll/IPollAnswerServiceEndpoint\";\r\nimport { IQBankServiceEndpoint } from \"../models/QBank/IQBankServiceEndpoint\";\r\nimport { IQuestionAnswerServiceEndpoint } from \"../models/QuestionGroup/IQuestionAnswerServiceEndpoint\";\r\nimport { ISavedPageServiceEndpoint } from \"../models/SavedPage/ISavedPageServiceEndpoint\";\r\nimport { ITopicAlertServiceEndpoint } from \"../models/TopicAlert/ITopicAlertServiceEndpoint\";\r\nimport { ITopicListServiceEndpoint } from \"../models/TopicList/ITopicListServiceEndpoint\";\r\nimport { IUserActivityServiceEndpoint } from \"../models/UserActivity/IUserActivityServiceEndpoint\";\r\nimport { IQuikQuizServiceEndpoint } from \"../models/QuikQuiz/IQuikQuizServiceEndpoint\"\r\nimport { IUserProfileServiceEndpoint } from \"../models/UserProfile/IUserProfileServiceEndpoint\";\r\nimport { INotificationBoxServiceEndpoint } from \"../models/NotificationBox/INotificationBoxServiceEndpoint\";\r\nimport { IMyHealioCmeEndpoint } from \"../models/MyCme/IMyHealioCmeEndpoint\";\r\n\r\nexport class PageContext {\r\n\r\n public readonly componentFactory: ComponentFactory =\r\n new ComponentFactory(this);\r\n\r\n private readonly _data: DOMStringMap | null;\r\n\r\n private _userLoginService: UserLoginService | null = null;\r\n private _userGoalsService: UserGoalsService | null = null;\r\n private _findRequirementsService: FindRequirementsService | null = null;\r\n private _activityService: ActivityService | null = null;\r\n private _articleService: ArticleService | null = null;\r\n private _certificateService: CertificateService | null = null;\r\n private _emailSignUpService: EmailSignUpService | null = null;\r\n private _gamificationService: GamificationService | null = null;\r\n private _healioStoreService: HealioStoreService | null = null;\r\n private _hssPollAnswerService: HssPollAnswerService | null = null;\r\n private _myCmeService: MyCmeService | null = null;\r\n private _notificationBoxService: NotificationBoxService | null = null;\r\n private _qbankService: QBankService | null = null;\r\n private _questionAnswerService: QuestionAnswerService | null = null;\r\n private _quikQuizService: QuikQuizService | null = null;\r\n private _recommendedService: RecommendedService | null = null;\r\n private _savedPageService: SavedPageService | null = null;\r\n private _topicAlertService: TopicAlertService | null = null;\r\n private _topicListService: TopicListService | null = null;\r\n private _transcriptService: TranscriptService | null = null;\r\n private _userActivityService: UserActivityService | null = null;\r\n private _userProfileService: UserProfileService | null = null;\r\n\r\n constructor(contextElement?: HTMLElement) {\r\n const element =\r\n contextElement ||\r\n document.querySelector(\"[data-wyanoke-page-context]\") as HTMLElement;\r\n\r\n if (!element) {\r\n console.warn(\"Could not locate context element.\");\r\n }\r\n\r\n this._data = element ? element.dataset : null;\r\n }\r\n\r\n private get userLoginServiceEndpoint(): IUserLoginServiceEndpoint {\r\n const data = this._data;\r\n const get = data ? data.userLogin || null : null;\r\n\r\n return {\r\n get: PageContext.parseEndpoint(get)\r\n }\r\n }\r\n\r\n private get userGoalsServiceEndpoint(): IUserGoalsServiceEndpoint {\r\n const data = this._data;\r\n const update = data? data.eduUserGoalsUpdate || null : null;\r\n\r\n return {\r\n update: PageContext.parseEndpoint(update)\r\n };\r\n }\r\n\r\n private get findRequirementsServiceEndpoint(): IFindRequirementsServiceEndpoint {\r\n const data = this._data;\r\n const load = data? data.findRequirementsLoad || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load)\r\n };\r\n }\r\n\r\n private get activityServiceEndpoint(): IActivityServiceEndpoint {\r\n const data = this._data;\r\n const load = data ? data.activityServiceLoad || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load)\r\n };\r\n }\r\n\r\n private get articleServiceEndpoint(): IArticleServiceEndpoint {\r\n const data = this._data;\r\n const load = data ? data.articleServiceLoad || null : null;\r\n const schemaDotOrg = data ? data.articleServiceSchemaDotOrg || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load),\r\n schemaDotOrg: PageContext.parseEndpoint(schemaDotOrg)\r\n };\r\n }\r\n\r\n private get emailSignUpEndpoint(): IEndpoint | null {\r\n const data = this._data;\r\n const save = data ? data.emailSignUpSave || null : null;\r\n\r\n return PageContext.parseEndpoint(save);\r\n }\r\n\r\n private get healioStoreServiceEndpoint(): IHealioStoreEndpoint | null {\r\n const data = this._data;\r\n const addProductToCart = data ? data.healioStoreAddProductToCart || null : null;\r\n const productsByCategoryId = data ? data.healioStoreProductsByCategoryId || null : null;\r\n\r\n return {\r\n addProductToCart: PageContext.parseEndpoint(addProductToCart),\r\n productsByCategoryId: PageContext.parseEndpoint(productsByCategoryId),\r\n };\r\n }\r\n\r\n private get hssPollAnswerEndpoint(): IPollAnswerServiceEndpoint | null {\r\n const data = this._data;\r\n const getAnswerCounts = data ? data.hssGetAnswerCounts || null : null;\r\n const load = data ? data.hssPollAnswersLoad || null : null;\r\n const save = data ? data.hssPollAnswersSave || null : null;\r\n\r\n return {\r\n getAnswerCounts: PageContext.parseEndpoint(getAnswerCounts),\r\n load: PageContext.parseEndpoint(load),\r\n save: PageContext.parseEndpoint(save)\r\n };\r\n }\r\n\r\n private get qbankServiceEndpoint(): IQBankServiceEndpoint | null {\r\n const data = this._data;\r\n const saveAnswer = data ? data.qbankSaveAnswer || null : null;\r\n const completeQuiz = data ? data.qbankCompleteQuiz || null : null;\r\n\r\n return {\r\n completeQuiz: PageContext.parseEndpoint(completeQuiz),\r\n saveAnswer: PageContext.parseEndpoint(saveAnswer)\r\n };\r\n }\r\n\r\n private get quikQuizServiceEndpoint(): IQuikQuizServiceEndpoint | null {\r\n const data = this._data;\r\n const getCurrentTake = data ? data.quikQuizGetCurrentTake || null : null;\r\n\r\n return {\r\n getCurrentTake: PageContext.parseEndpoint(getCurrentTake)\r\n }\r\n }\r\n\r\n private get myCmeEndpoint(): IMyHealioCmeEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.myCmeLoad || null : null;\r\n const jsonLoad = data ? data.myCmeJsonLoad || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load),\r\n jsonLoad: PageContext.parseEndpoint(jsonLoad)\r\n }\r\n }\r\n\r\n private get notificationBoxEndpoint(): INotificationBoxServiceEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.eduNotificationBoxNotifications || null : null;\r\n const deleteNotification = data ? data.eduNotificationBoxDelete || null : null;\r\n const updateSettings = data ? data.eduNotificationBoxUpdateSettings || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load),\r\n deleteNotification: PageContext.parseEndpoint(deleteNotification),\r\n updateSettings: PageContext.parseEndpoint(updateSettings)\r\n };\r\n }\r\n\r\n private get questionAnswerEndpoint(): IQuestionAnswerServiceEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.questionAnswerLoad || null : null;\r\n const save = data ? data.questionAnswerSave || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load),\r\n save: PageContext.parseEndpoint(save)\r\n };\r\n }\r\n\r\n private get recommendedEndpoint(): IEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.recommendedServiceLoad || null : null;\r\n\r\n return PageContext.parseEndpoint(load);\r\n }\r\n\r\n private get savedPageEndpoint(): ISavedPageServiceEndpoint | null {\r\n const emptyepurl = \"/\";\r\n const emptyep = { method: \"POST\", url: emptyepurl } as IEndpoint;\r\n const data = this._data;\r\n const load = data ? data.savedPageLoad || emptyepurl : emptyepurl;\r\n const remove = data ? data.savedPageRemove || emptyepurl : emptyepurl;\r\n const save = data ? data.savedPageSave || emptyepurl : emptyepurl;\r\n\r\n return {\r\n load: (PageContext.parseEndpoint(load) || emptyep),\r\n remove: (PageContext.parseEndpoint(remove) || emptyep),\r\n save: (PageContext.parseEndpoint(save) || emptyep)\r\n };\r\n }\r\n\r\n private get topicAlertEndpoint(): ITopicAlertServiceEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.topicAlertLoad || null : null;\r\n const register = data ? data.topicAlertRegister || null : null;\r\n const save = data ? data.topicAlertSave || null : null;\r\n\r\n return {\r\n load: PageContext.parseEndpoint(load),\r\n register: PageContext.parseEndpoint(register),\r\n save: PageContext.parseEndpoint(save)\r\n };\r\n }\r\n\r\n private get topicListApi(): ITopicListServiceEndpoint | null {\r\n const data = this._data;\r\n const topics = data ? data.topicListApi || null : null;\r\n const topicsAndCreditTypes = data ? data.topicAndCreditTypeListApi || null : null;\r\n\r\n return {\r\n topics: PageContext.parseEndpoint(topics),\r\n topicsAndCreditTypes: PageContext.parseEndpoint(topicsAndCreditTypes),\r\n }\r\n }\r\n\r\n private get transcriptServiceEndpoint(): ITranscriptEndpoint | null {\r\n const data = this._data;\r\n const generate = data ? data.generateTranscript || null : null;\r\n const email = data ? data.emailTranscript || null : null;\r\n\r\n return {\r\n email: PageContext.parseEndpoint(email),\r\n generate: PageContext.parseEndpoint(generate)\r\n };\r\n }\r\n\r\n private get userActivityEndpoint(): IUserActivityServiceEndpoint | null {\r\n const data = this._data;\r\n const filter = data ? data.userActivityFilter || null : null;\r\n const load = data ? data.userActivityLoad || null : null;\r\n const remove = data ? data.userActivityRemove || null : null;\r\n const save = data ? data.userActivitySave || null : null;\r\n const generateCertificate = data ? data.userActivityGenerateCertificate ||\r\n null : null;\r\n const updateCertificate = data ? data.userActivityUpdateCertificate ||\r\n null : null;\r\n const updateStep = data ? data.userActivityUpdateStep || null : null;\r\n const removeNotification = data ? data.userActivityNotificationRemove || null : null;\r\n\r\n return {\r\n filter: PageContext.parseEndpoint(filter),\r\n generatecertificate: PageContext.parseEndpoint(generateCertificate),\r\n load: PageContext.parseEndpoint(load),\r\n remove: PageContext.parseEndpoint(remove),\r\n save: PageContext.parseEndpoint(save),\r\n updatecertificate: PageContext.parseEndpoint(updateCertificate),\r\n updatestep: PageContext.parseEndpoint(updateStep),\r\n removenotification: PageContext.parseEndpoint(removeNotification)\r\n };\r\n }\r\n\r\n private get gamificationEndpoint(): IGamificationServiceEndpoint | null {\r\n const data = this._data;\r\n const load = data ? data.gamificationLoad || null : null;\r\n const save = data ? data.gamificationSave || null : null;\r\n const loadall = data ? data.gamificationLoadAll || null : null;\r\n const getrelatedcontent = data ? data.gamificationGetRelatedContent || null : null;\r\n\r\n return {\r\n getrelatedcontent: PageContext.parseEndpoint(getrelatedcontent),\r\n load: PageContext.parseEndpoint(load),\r\n loadall: PageContext.parseEndpoint(loadall),\r\n save: PageContext.parseEndpoint(save)\r\n };\r\n }\r\n\r\n private get certificateEndpoint(): ICertificateServiceEndpoint | null {\r\n const data = this._data;\r\n const zip = data ? data.certificateZip || null : null;\r\n const path = data ? data.certificatePath || null : null;\r\n const email = data ? data.certificateEmail || null : null;\r\n const emailzip = data ? data.certificateEmailZip || null : null;\r\n\r\n return {\r\n zip: PageContext.parseEndpoint(zip),\r\n path: PageContext.parseEndpoint(path),\r\n email: PageContext.parseEndpoint(email),\r\n emailzip: PageContext.parseEndpoint(emailzip)\r\n };\r\n }\r\n\r\n private get userProfileEndpoint(): IUserProfileServiceEndpoint | null {\r\n const data = this._data;\r\n const update = data ? data.userProfileUpdate || null : null;\r\n const getCustomFields = data ? data.userProfileGetCustomFields || null : null;\r\n const updateUserSiteSettings = data ? data.userProfileUpdateSiteSettings || null : null;\r\n\r\n return {\r\n getCustomFields: PageContext.parseEndpoint(getCustomFields),\r\n update: PageContext.parseEndpoint(update),\r\n updateSiteSettings: PageContext.parseEndpoint(updateUserSiteSettings)\r\n };\r\n }\r\n\r\n private static parseEndpoint(raw?: string | null): IEndpoint | null {\r\n const parts = raw ? raw.split(\":\") : null;\r\n if (!parts) {\r\n return null;\r\n }\r\n\r\n const method = parts[0].toUpperCase() === \"POST\" ? \"POST\" :\r\n parts[0].toUpperCase() === \"DELETE\" ? \"DELETE\" :\r\n parts[0].toUpperCase() === \"PUT\" ? \"PUT\" : \"GET\";\r\n\r\n return parts ? {\r\n method,\r\n url: parts[1]\r\n } : null;\r\n }\r\n\r\n // see nyc (not-you-chris)\r\n // tslint:disable-next-line: no-any\r\n public getCardService(serviceName: string | null): any {\r\n if (serviceName === null || serviceName === \"\") {\r\n return null;\r\n }\r\n\r\n const data = this._data;\r\n const load = data ? data[serviceName] || null : null;\r\n\r\n return new LandingPageService({\r\n load: PageContext.parseEndpoint(load)\r\n });\r\n }\r\n\r\n public get activityService(): ActivityService | null {\r\n if (this._activityService === null) {\r\n const endpoint = this.activityServiceEndpoint;\r\n this._activityService = new ActivityService(endpoint);\r\n }\r\n\r\n return this._activityService;\r\n }\r\n\r\n public get findRequirementsService(): FindRequirementsService | null {\r\n if (this._findRequirementsService === null) {\r\n const endpoint = this.findRequirementsServiceEndpoint;\r\n this._findRequirementsService = new FindRequirementsService(endpoint);\r\n }\r\n\r\n return this._findRequirementsService;\r\n }\r\n\r\n public get userLoginService(): UserLoginService | null {\r\n if(this._userLoginService === null) {\r\n const endpoint = this.userLoginServiceEndpoint;\r\n this._userLoginService = new UserLoginService(endpoint);\r\n }\r\n\r\n return this._userLoginService;\r\n }\r\n\r\n public get userGoalsService(): UserGoalsService | null {\r\n if (this._userGoalsService === null) {\r\n const endpoint = this.userGoalsServiceEndpoint;\r\n this._userGoalsService = new UserGoalsService(endpoint);\r\n }\r\n\r\n return this._userGoalsService;\r\n }\r\n\r\n public get articleService(): ArticleService | null {\r\n if (this._activityService === null) {\r\n const endpoint = this.articleServiceEndpoint;\r\n this._articleService = new ArticleService(endpoint);\r\n }\r\n\r\n return this._articleService;\r\n }\r\n\r\n public get emailSignUpService(): EmailSignUpService | null {\r\n if (this._emailSignUpService === null) {\r\n const endpoint = this.emailSignUpEndpoint;\r\n if (endpoint !== null) {\r\n this._emailSignUpService = new EmailSignUpService(endpoint);\r\n }\r\n }\r\n\r\n return this._emailSignUpService;\r\n }\r\n\r\n public get healioStoreService(): HealioStoreService | null {\r\n if (this._healioStoreService === null) {\r\n const endpoint = this.healioStoreServiceEndpoint;\r\n if (endpoint !== null) {\r\n this._healioStoreService = new HealioStoreService(endpoint);\r\n }\r\n }\r\n\r\n return this._healioStoreService;\r\n }\r\n\r\n public get hssPollAnswerService(): HssPollAnswerService | null {\r\n if (this._hssPollAnswerService === null) {\r\n const endpoint = this.hssPollAnswerEndpoint;\r\n if (endpoint !== null) {\r\n this._hssPollAnswerService = new HssPollAnswerService(endpoint);\r\n }\r\n }\r\n\r\n return this._hssPollAnswerService;\r\n }\r\n\r\n public get qbankService(): QBankService | null {\r\n if (this._qbankService === null) {\r\n const endpoint = this.qbankServiceEndpoint;\r\n if (endpoint !== null) {\r\n this._qbankService = new QBankService(endpoint);\r\n }\r\n }\r\n\r\n return this._qbankService;\r\n }\r\n\r\n public get quikQuizService(): QuikQuizService | null {\r\n if (this._quikQuizService === null) {\r\n const endpoint = this.quikQuizServiceEndpoint;\r\n if (endpoint !== null) {\r\n this._quikQuizService = new QuikQuizService(endpoint);\r\n }\r\n }\r\n\r\n return this._quikQuizService;\r\n }\r\n\r\n public get myCmeService(): MyCmeService | null {\r\n if (this._myCmeService === null) {\r\n const endpoint = this.myCmeEndpoint;\r\n if (endpoint !== null) {\r\n this._myCmeService = new MyCmeService(endpoint);\r\n }\r\n }\r\n\r\n return this._myCmeService;\r\n }\r\n\r\n public get notificationBoxService(): NotificationBoxService | null {\r\n if (this._notificationBoxService === null) {\r\n const endpoint = this.notificationBoxEndpoint;\r\n if (endpoint !== null) {\r\n this._notificationBoxService = new NotificationBoxService(endpoint);\r\n }\r\n }\r\n\r\n return this._notificationBoxService;\r\n }\r\n\r\n public get questionAnswerService(): QuestionAnswerService | null {\r\n if (this._questionAnswerService === null) {\r\n const endpoint = this.questionAnswerEndpoint;\r\n if (endpoint !== null) {\r\n this._questionAnswerService = new QuestionAnswerService(endpoint);\r\n }\r\n }\r\n\r\n return this._questionAnswerService;\r\n }\r\n\r\n public get recommendedService(): RecommendedService | null {\r\n if (this._recommendedService === null) {\r\n const endpoint = this.recommendedEndpoint;\r\n if (endpoint !== null) {\r\n this._recommendedService = new RecommendedService(endpoint);\r\n }\r\n }\r\n\r\n return this._recommendedService;\r\n }\r\n\r\n public get savedPageService(): SavedPageService | null {\r\n if (this._savedPageService === null) {\r\n const endpoint = this.savedPageEndpoint;\r\n if (endpoint !== null) {\r\n this._savedPageService = new SavedPageService(endpoint);\r\n }\r\n }\r\n\r\n return this._savedPageService;\r\n }\r\n\r\n public get topicAlertService(): TopicAlertService | null {\r\n if (this._topicAlertService === null) {\r\n const endpoint = this.topicAlertEndpoint;\r\n if (endpoint !== null) {\r\n this._topicAlertService = new TopicAlertService(endpoint);\r\n }\r\n }\r\n\r\n return this._topicAlertService;\r\n }\r\n\r\n public get topicListService(): TopicListService | null {\r\n if (this._topicListService === null) {\r\n const endpoint = this.topicListApi;\r\n if (endpoint !== null) {\r\n this._topicListService = new TopicListService(endpoint);\r\n }\r\n }\r\n\r\n return this._topicListService;\r\n }\r\n\r\n public get transcriptService(): TranscriptService | null {\r\n if (this._transcriptService === null) {\r\n const endpoint = this.transcriptServiceEndpoint;\r\n if (endpoint) {\r\n this._transcriptService = new TranscriptService(endpoint);\r\n }\r\n }\r\n\r\n return this._transcriptService;\r\n }\r\n\r\n public get certificateService(): CertificateService | null {\r\n if (this._certificateService === null) {\r\n /* const data = this._data;\r\n const raw = data ? data.certificateEmail : null; */\r\n const endpoint = this.certificateEndpoint;\r\n if (!endpoint) {\r\n return null;\r\n }\r\n\r\n this._certificateService = new CertificateService(endpoint);\r\n }\r\n\r\n return this._certificateService;\r\n }\r\n\r\n public get userActivityService(): UserActivityService | null {\r\n if (this._userActivityService === null) {\r\n const endpoint = this.userActivityEndpoint;\r\n if (endpoint !== null) {\r\n this._userActivityService = new UserActivityService(endpoint);\r\n }\r\n }\r\n\r\n return this._userActivityService;\r\n }\r\n\r\n public get gamificationService(): GamificationService | null {\r\n if (this._gamificationService === null) {\r\n const endpoint = this.gamificationEndpoint;\r\n if (endpoint !== null) {\r\n this._gamificationService = new GamificationService(endpoint);\r\n }\r\n }\r\n\r\n return this._gamificationService;\r\n }\r\n\r\n public get userProfileService(): UserProfileService | null {\r\n if (this._userProfileService === null) {\r\n const endpoint = this.userProfileEndpoint;\r\n if (endpoint !== null) {\r\n this._userProfileService = new UserProfileService(endpoint);\r\n }\r\n }\r\n\r\n return this._userProfileService;\r\n }\r\n}\r\n","export * from \"./Leaving\";\r\nexport * from \"./BindMyCme\";\r\nexport * from \"./DisplayAuthLinks\";\r\nexport * from \"./LineClamp\";\r\nexport * from \"./RedirectUnauthenticated\";\r\n","import { PageContext } from \"../service/PageContext\";\r\nimport { DomUtil } from \"../util/DomUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { MyCmeService } from \"../service/MyCmeService\";\r\nimport { SavedPageService } from \"../service/SavedPageService\";\r\nimport { IMyCmeModel } from \"../models/MyCme/IMyCmeModel\";\r\nimport { ISavedPageGetResponse } from \"../models/SavedPage/ISavedPageGetResponse\";\r\nimport { UrlUtil } from \"../util/UrlUtil\";\r\nimport { IMyHealioCmeModel } from \"../models/MyCme/IMyHealioCmeModel\";\r\nimport Mustache from \"mustache\";\r\n\r\nexport class BindMyCme {\r\n private readonly _myCmeService: MyCmeService | null;\r\n private readonly _savedPageService: SavedPageService | null;\r\n private readonly _creditBreakdownTemplate: string;\r\n private _isBound = false;\r\n\r\n public static UpdateCreditsEvent = \"BindMyCme.UpdateCreditsEvent\"\r\n public MyCmeJson: IMyHealioCmeModel | null = null;\r\n public MyCmeItemTemplate: string | null = null;\r\n public MyResourceItemTemplate: string | null = null;\r\n\r\n constructor(\r\n private readonly _element: HTMLElement,\r\n context: PageContext | null\r\n ) {\r\n this._myCmeService = context ? context.myCmeService : null;\r\n this._savedPageService = context ? context.savedPageService : null;\r\n const template =\r\n _element.querySelector(\"[data-mycme-template='creditBreakdown']\");\r\n\r\n this._creditBreakdownTemplate = template ? template.innerHTML : \"\";\r\n\r\n if (template) {\r\n template.remove();\r\n }\r\n\r\n if (!this._myCmeService) {\r\n console.warn(\"No MyCME service available.\");\r\n }\r\n\r\n if (this._savedPageService) {\r\n window.addEventListener(\r\n SavedPageService.SavedPageIncrementEvent,\r\n () => this.updateSavedCount(1));\r\n\r\n window.addEventListener(\r\n SavedPageService.SavedPageDecrementEvent,\r\n () => this.updateSavedCount(-1));\r\n\r\n window.addEventListener(\r\n BindMyCme.UpdateCreditsEvent,\r\n e => this.updateCreditsCount(e as CustomEvent)\r\n )\r\n } else {\r\n console.warn(\"No Saved Page service available\");\r\n }\r\n }\r\n\r\n private static bindValues(root: HTMLElement, data: object): void {\r\n const query = DomUtil.queryAll.bind(null, root);\r\n for (const [key, value] of Object.entries(data)) {\r\n query(`[data-mycme='${key}']`)\r\n .forEach(el => el.textContent = String(value));\r\n }\r\n }\r\n\r\n private static formatCredits(credits: number, fixedDecimalPlaces = 2): string {\r\n // Justification: Need to have 2 decimal places for CME credits\r\n // tslint:disable-next-line: no-magic-numbers\r\n return credits.toFixed(fixedDecimalPlaces);\r\n }\r\n\r\n private static bindMyScrollToTargets() {\r\n const queryString = UrlUtil.getQueryString()\r\n const sectionContains = queryString.get(\"sectioncontains\")\r\n const expandAccordion = queryString.get(\"expand\")\r\n\r\n if (sectionContains === undefined || sectionContains[0]?.length < 1) {\r\n return;\r\n }\r\n\r\n const scrollToSection = $(`[id*=\"${sectionContains}\"]:visible`)\r\n if (scrollToSection.length) {\r\n if (expandAccordion) {\r\n let collapseToggleElement = $(`#${expandAccordion} [data-toggle]`)\r\n if (collapseToggleElement.length && collapseToggleElement[0]?.classList?.contains(\"collapsed\")) {\r\n collapseToggleElement[0].click()\r\n }\r\n setTimeout(function () {\r\n let accordionElement = $(`#${expandAccordion}:visible`)\r\n if (accordionElement.length) {\r\n accordionElement[0].scrollIntoView({ behavior: \"smooth\" });\r\n } else {\r\n scrollToSection[0].scrollIntoView({ behavior: \"smooth\" });\r\n }\r\n }, 1000);\r\n }\r\n }\r\n }\r\n\r\n public async bind(loadMyCmeJson = false): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn === \"False\") {\r\n return false;\r\n }\r\n\r\n const contactId = profile.contactid || null;\r\n if (contactId === null || contactId === \"\") {\r\n return false;\r\n }\r\n\r\n this.MyCmeItemTemplate = document.querySelector('#MyCMEItemTemplate')?.innerHTML ?? null;\r\n this.MyResourceItemTemplate = document.querySelector('#MyCMEResourceItemTemplate')?.innerHTML ?? null;\r\n const activitySiteName = (this._element.dataset.siteName || \"\").toLowerCase();\r\n const myCmeService = this._myCmeService;\r\n const savedPageService = this._savedPageService;\r\n const myCmePromise = myCmeService ? myCmeService.getMyCme() : null;\r\n const myHealioCmePromise = myCmeService && loadMyCmeJson ? myCmeService.getMyCmeJson() : null;\r\n\r\n const savedPagePromise =\r\n savedPageService ? savedPageService.list(\"cme\") : null;\r\n\r\n const results = await Promise.all([myCmePromise, savedPagePromise, myHealioCmePromise]);\r\n const myCmeInfo = results[0];\r\n const savedPages = results[1];\r\n this.MyCmeJson = results[2];\r\n\r\n const firstName = profile.firstname || \"\";\r\n const lastName = profile.lastname || \"\";\r\n const username = firstName + \" \" + lastName;\r\n const profession = (profile.profession || \"\").trim();\r\n const specialty = (profile.specialty || \"\").trim();\r\n const professionAndSpecialty =\r\n [profession, specialty].filter(Boolean).join(\", \");\r\n\r\n const totalCreditsRaw = myCmeInfo ? myCmeInfo.totalCredits : 0;\r\n const completed = myCmeInfo ? myCmeInfo.completed : 0;\r\n const inProgress = myCmeInfo ? myCmeInfo.inProgress : 0;\r\n const saved = savedPages ? savedPages.filter(function (i: ISavedPageGetResponse): boolean {\r\n return i.site?.toLocaleLowerCase() === activitySiteName && new Date(i.expires) > new Date();\r\n }).length : 0;\r\n\r\n\r\n const totalCreditsElement = this._element.querySelector(\"[data-mycme='totalCredits']\")\r\n const decimalPlaces = totalCreditsElement && totalCreditsElement.dataset.decimalPlaces ? Number(totalCreditsElement.dataset.decimalPlaces) : 2\r\n const totalCredits = BindMyCme.formatCredits(totalCreditsRaw, decimalPlaces);\r\n\r\n BindMyCme.bindValues(\r\n this._element,\r\n {\r\n completed,\r\n inProgress,\r\n profession,\r\n professionAndSpecialty,\r\n saved,\r\n specialty,\r\n totalCredits,\r\n username\r\n });\r\n\r\n BindMyCme.bindMyScrollToTargets()\r\n\r\n if (myCmeInfo) {\r\n this.bindCreditBreakdown(myCmeInfo);\r\n }\r\n\r\n this._isBound = true;\r\n\r\n return true;\r\n }\r\n\r\n private bindCreditBreakdown(myCmeInfo: IMyCmeModel): void {\r\n const targets = DomUtil.queryAll(\r\n this._element,\r\n \"[data-mycme='creditBreakdown']\");\r\n\r\n if (!targets.length) {\r\n return;\r\n }\r\n\r\n const template = this._creditBreakdownTemplate;\r\n if (!template || myCmeInfo.creditBreakdown.length === 0) {\r\n targets.forEach(target => target.innerHTML = \"\");\r\n\r\n return;\r\n }\r\n\r\n const frag = document.createDocumentFragment();\r\n const node = frag.appendChild(document.createElement(\"div\"));\r\n\r\n const sorted = myCmeInfo.creditBreakdown.slice(0).sort((a, b) => {\r\n if (!a) {\r\n return !b ? 0 : 1;\r\n }\r\n\r\n if (!b) {\r\n return -1;\r\n }\r\n\r\n const aType = (a.creditType || \"\").toLowerCase();\r\n const bType = (b.creditType || \"\").toLowerCase();\r\n\r\n if (aType < bType) {\r\n return -1;\r\n }\r\n\r\n if (aType > bType) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n });\r\n\r\n targets.forEach(target => {\r\n sorted.forEach(c => {\r\n const credits = BindMyCme.formatCredits(c.credits);\r\n node.innerHTML = this._creditBreakdownTemplate;\r\n BindMyCme.bindValues(node, { credits, creditType: c.creditType });\r\n while (node.firstChild) {\r\n target.appendChild(node.firstChild);\r\n }\r\n });\r\n });\r\n\r\n this.showCreditBreakdownLabel(myCmeInfo);\r\n }\r\n\r\n private showCreditBreakdownLabel(myCmeInfo: IMyCmeModel): void {\r\n const labelTarget = DomUtil.queryAll(\r\n this._element,\r\n \"[data-mycme='creditBreakdownLabel']\");\r\n\r\n if (labelTarget.length) {\r\n if (myCmeInfo.completed > 0) {\r\n labelTarget.forEach(\r\n target => {\r\n target.classList.add(\"d-xl-block\");\r\n });\r\n }\r\n }\r\n }\r\n\r\n private updateSavedCount(update: number): void {\r\n console.log(\"Update saved\", update);\r\n if (!this._isBound) {\r\n return;\r\n }\r\n\r\n DomUtil.queryAll(this._element, \"[data-mycme='saved']\").forEach(el => {\r\n const raw = (el.textContent || \"\").trim();\r\n const parsed = parseInt(raw, 10);\r\n if (isNaN(parsed)) {\r\n return;\r\n }\r\n\r\n const updated = Math.max(0, parsed + update);\r\n el.textContent = updated.toString();\r\n });\r\n }\r\n\r\n private updateCreditsCount(update: CustomEvent): void {\r\n const totalCreditsElement = this._element.querySelector(\"[data-mycme='totalCredits']\")\r\n if (!totalCreditsElement) {\r\n return;\r\n }\r\n\r\n if (!update.detail) {\r\n return;\r\n }\r\n\r\n let updateCredits = Number(update.detail);\r\n if (!updateCredits) {\r\n return;\r\n }\r\n\r\n let currentCredits = Number(totalCreditsElement.textContent);\r\n let newCredits = currentCredits + updateCredits;\r\n\r\n const decimalPlaces = totalCreditsElement && totalCreditsElement.dataset.decimalPlaces ? Number(totalCreditsElement.dataset.decimalPlaces) : 2\r\n const totalCredits = BindMyCme.formatCredits(newCredits, decimalPlaces);\r\n\r\n totalCreditsElement.textContent = totalCredits;\r\n }\r\n\r\n public renderCmeItemsFromTemplate(activities: any): string {\r\n let renderedItems = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this.MyCmeItemTemplate) {\r\n for (let activity of activities) {\r\n const renderedTemplate = Mustache.render(this.MyCmeItemTemplate, activity);\r\n renderedItems += renderedTemplate\r\n };\r\n }\r\n\r\n return renderedItems;\r\n }\r\n\r\n public renderResourceItemsFromTemplate(resources: any): string {\r\n let renderedItems = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this.MyResourceItemTemplate) {\r\n for (let resource of resources) {\r\n const renderedTemplate = Mustache.render(this.MyResourceItemTemplate, resource);\r\n renderedItems += renderedTemplate\r\n };\r\n }\r\n\r\n return renderedItems;\r\n }\r\n}","export const DomUtil = {\r\n query(\r\n element: HTMLElement,\r\n selector: string,\r\n // tslint:disable-next-line: typedef\r\n throwError = true\r\n ): T {\r\n const result = element.querySelector(selector) as T;\r\n if (!result && throwError) {\r\n throw new Error(\"Unable to locate required element: \" + selector);\r\n }\r\n\r\n return result;\r\n },\r\n\r\n queryAll(\r\n element: HTMLElement,\r\n selector: string\r\n ): T[] {\r\n return Array.from(element.querySelectorAll(selector));\r\n }\r\n};\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IEndpoint } from \"../models/IEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\n\r\nimport { ISavedPageAddRequest } from \"../models/SavedPage/ISavedPageAddRequest\";\r\n\r\nimport { ISavedPageGetResponse } from \"../models/SavedPage/ISavedPageGetResponse\";\r\n\r\nimport { ISavedPageLoadResponse } from \"../models/SavedPage/ISavedPageLoadResponse\";\r\n\r\nimport { ISavedPageRequest } from \"../models/SavedPage/ISavedPageRequest\";\r\n\r\nimport { ISavedPageServiceEndpoint } from \"../models/SavedPage/ISavedPageServiceEndpoint\";\r\nimport { EventUtil } from \"../util/EventUtil\";\r\n\r\nexport class SavedPageService {\r\n public static readonly SavedPageIncrementEvent: string =\r\n \"SavedPageIncrementEvent\";\r\n\r\n public static readonly SavedPageDecrementEvent: string =\r\n \"SavedPageDecrementEvent\";\r\n\r\n private readonly _savedPageRequests: Map<\r\n string,\r\n Promise | null>\r\n > = new Map();\r\n\r\n constructor(private readonly _endpoint: ISavedPageServiceEndpoint) {\r\n console.info({ep:_endpoint});\r\n }\r\n\r\n private static sendMessage(\r\n endpoint: IEndpoint,\r\n savedPage: ISavedPageAddRequest | ISavedPageRequest\r\n ) {\r\n\r\n if (!endpoint) {\r\n console.error(\"[sendMessage] No endpoint available.\");\r\n return false;\r\n }\r\n\r\n (async() => {\r\n await FetchUtil.sendMessage(endpoint, savedPage)\r\n .then((unknownres)=>{\r\n const result = unknownres as ISavedPageLoadResponse;\r\n const expected = endpoint.method.toLowerCase() + \" ok\";\r\n if (result?.response?.message.toLowerCase() !== expected) {\r\n console.error(\"[sendMessage] Unexpected response from server when saving/removing page for user.\");\r\n\r\n return false;\r\n }\r\n } );\r\n })();\r\n\r\n return true;\r\n }\r\n\r\n public save(savedPage: ISavedPageAddRequest) {\r\n const pageSaved = SavedPageService.sendMessage(this._endpoint.save, savedPage);\r\n\r\n if(!pageSaved) {\r\n return;\r\n }\r\n this._savedPageRequests.clear();\r\n\r\n const event = EventUtil.createCustomEvent(\r\n SavedPageService.SavedPageIncrementEvent,\r\n savedPage.documentid,\r\n false\r\n );\r\n window.dispatchEvent(event)\r\n }\r\n\r\n public async list(\r\n contentType: string\r\n ): Promise | null> {\r\n const cachedPromise = this._savedPageRequests.get(contentType);\r\n\r\n if (cachedPromise) {\r\n return cachedPromise;\r\n }\r\n\r\n const promise = this.load(contentType);\r\n this._savedPageRequests.set(contentType, promise);\r\n\r\n return promise;\r\n }\r\n\r\n public remove(savedPage: ISavedPageRequest){\r\n const pageSaved = SavedPageService.sendMessage(this._endpoint.remove, savedPage);\r\n\r\n if(!pageSaved) {\r\n return;\r\n }\r\n this._savedPageRequests.clear();\r\n\r\n const event = EventUtil.createCustomEvent(\r\n SavedPageService.SavedPageDecrementEvent,\r\n savedPage.documentid,\r\n false\r\n );\r\n window.dispatchEvent(event);\r\n\r\n\r\n }\r\n\r\n private async load(\r\n contentType: string\r\n ): Promise | null> {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return null;\r\n }\r\n const contactId = profile.contactid || \"\";\r\n\r\n const values = {\r\n contactId,\r\n contentType,\r\n encodedContactId: encodeURIComponent(contactId),\r\n encodedContentType: encodeURIComponent(contentType),\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n let raw;\r\n\r\n try {\r\n raw = await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url,\r\n });\r\n } catch {\r\n return [];\r\n }\r\n\r\n if (Array.isArray(raw)) {\r\n if (raw.length < 1) {\r\n console.log(\"No saved pages found for user\");\r\n }\r\n\r\n return raw;\r\n }\r\n\r\n const response = raw as { message: string };\r\n if (response && response.message) {\r\n if (response.message === \"Not Found\") {\r\n console.log(\"User's saved page data not found.\");\r\n\r\n return [];\r\n }\r\n\r\n const serverMsg = \"Unexpected response from server: \" + response.message;\r\n throw new Error(serverMsg);\r\n }\r\n\r\n const msg = \"Unexpected response from server\";\r\n console.warn(msg, raw);\r\n throw new Error();\r\n }\r\n}\r\n","import { WyanokeUtil } from \"../util/WyanokeUtil\";\r\n\r\nexport class DisplayAuthLinks {\r\n\r\n public static readonly DisplayMode = {\r\n All: 1,\r\n Anonymous: 2,\r\n Known: 3\r\n };\r\n public static show(element: HTMLElement): void {\r\n const parentElement =\r\n $(element).parent() as unknown as HTMLElement[];\r\n // if(the parent element is a card-header)\r\n // show the entire element\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (parentElement &&\r\n parentElement[0].classList.contains(\"card-header\")) {\r\n const elementToShow =\r\n parentElement[0].parentNode as HTMLElement;\r\n elementToShow.classList.remove(\"d-none\");\r\n } else {\r\n parentElement[0].classList.remove(\"d-none\");\r\n }\r\n }\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(false, false);\r\n $(\"[data-display-item]\").each(function (): void {\r\n const dataAttr = $(this).data(\"display-item\");\r\n if (!dataAttr) { return; }\r\n // Show link if user is logged in and link requires auth\r\n // Show link if user is not logged in and link is for anonymous\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (((!profile || profile.isLoggedIn === \"False\") &&\r\n DisplayAuthLinks.DisplayMode.Anonymous === dataAttr) ||\r\n // tslint:disable-next-line: no-unsafe-any\r\n (profile && profile.isLoggedIn === \"True\" &&\r\n DisplayAuthLinks.DisplayMode.Known === dataAttr)) {\r\n DisplayAuthLinks.show(this);\r\n }\r\n });\r\n // hack for edit profile link\r\n $(\".global-nav__navbar--mobile-nav .navbar-nav li.nav-item:not(.d-none):last a\").css(\"width\", \"46px\")\r\n .parent().css(\"max-width\", \"46px\");\r\n }\r\n}\r\n","import { ILeavingParams } from \"../models/Behavior/ILeavingParams\";\r\nimport { PageContext } from \"../service/PageContext\";\r\nimport { DomUtil } from \"../util/DomUtil\";\r\nimport { moduletracking } from \"../Wyanoke/ModuleTracking\";\r\nimport { UiUtil } from \"../util/UiUtil\";\r\nimport { Cookie } from \"../util/CookieUtil\";\r\n\r\nexport class Leaving {\r\n\r\n private _isBound = false;\r\n private currentTargetElement: HTMLAnchorElement | undefined = undefined;\r\n private readonly _ignoreTargets = [\"_blank\", \"_new\", \"media\"];\r\n private readonly _ignoreExtensions = [\".png\", \".gif\", \".jpg\", \".ashx\"];\r\n private readonly _ignoreClasses = [\"pds-vote-button\",\r\n \"pds-vote-button\", \"pds-view-results\", \"btn\", \"print\"];\r\n private readonly _leaveElement: HTMLElement | null;\r\n private readonly _dontShowElement: HTMLInputElement | null;\r\n private readonly _trackingCategory: string;\r\n private readonly _trackingUrl: string;\r\n private readonly _externalLinksFilter: ((element: HTMLAnchorElement, index: number, array: HTMLAnchorElement[]) => boolean) | null;\r\n\r\n constructor(\r\n private readonly _element: HTMLElement,\r\n context: PageContext | null,\r\n leavingParams: ILeavingParams\r\n ) {\r\n this._leaveElement = this._element.querySelector(\"[data-modal-action='leave']\");\r\n this._dontShowElement = this._element.querySelector(\"[data-modal-action='dontshow']\");\r\n this._trackingUrl = leavingParams?.trackingUrl ?? \"\";\r\n this._trackingCategory = leavingParams?.trackingCategory ?? \"\";\r\n this._externalLinksFilter = leavingParams.externalLinksFilter;\r\n }\r\n\r\n // This was our original selector here for reference:\r\n // $(\"a:not([href*=javascript],[href^='#'],[data-serieslink],\" +\r\n // \".pds-vote-button, .pds-view-results, .btn,.print,\" +\r\n // \"[target=_blank],[target=_new],[target=media],\" +\r\n // \"[href*='\" + this._activityUrl + \"'],\" +\r\n // \"[href$='.png'],[href$='.gif'],[href$='.jpg'],\" +\r\n // \"[href$='.ashx'])\")\r\n\r\n public attachToExternalLinks(): void {\r\n let allAElements = DomUtil.queryAll(document.body, \"a\");\r\n if (this._externalLinksFilter) {\r\n allAElements = allAElements.filter(this._externalLinksFilter);\r\n }\r\n\r\n const filteredAElements =\r\n allAElements\r\n .filter(anchor => !this._element.contains(anchor))\r\n .filter(anchor => anchor.getAttribute(\"href\") && !anchor.getAttribute(\"href\")?.startsWith(\"#\"))\r\n .filter(anchor => anchor.getAttribute(\"href\") && anchor.getAttribute(\"href\")?.indexOf(\"javascript\") === -1)\r\n .filter(anchor => anchor.getAttribute(\"data-serieslink\") === null)\r\n .filter(anchor => this._ignoreTargets.indexOf(anchor.target) === -1)\r\n .filter(anchor => !this._ignoreClasses.some(aClass =>\r\n anchor.className.indexOf(aClass) !== -1))\r\n .filter(anchor => !this._ignoreExtensions.some(extension =>\r\n anchor.href.endsWith(extension)));\r\n\r\n filteredAElements\r\n .forEach(aElement => {\r\n if (window.$j) {\r\n window.$j(aElement).off(\"click\");\r\n }\r\n $(aElement).off(\"click\");\r\n aElement.addEventListener(\"click\", ev =>\r\n this.handleExternalLinkClick(ev), true);\r\n });\r\n }\r\n\r\n public async bind(): Promise {\r\n\r\n if (window.modtrkloaded !== undefined) {\r\n this.attachToExternalLinks();\r\n } else {\r\n window.addEventListener(moduletracking.ModuleTrackingLoadedEvent,\r\n () => this.attachToExternalLinks());\r\n }\r\n\r\n if (this._dontShowElement) {\r\n this._dontShowElement.addEventListener(\"click\", ev => {\r\n this.handleDontShow(ev);\r\n });\r\n }\r\n\r\n if (this._leaveElement) {\r\n this._leaveElement.addEventListener(\"click\", ev => {\r\n UiUtil.toggleButtonState(this._leaveElement as HTMLButtonElement);\r\n this.handleLeavingConfirmed(ev);\r\n });\r\n } else {\r\n console.warn(\"Unable to find leave element and navigate away from page.\");\r\n\r\n return false;\r\n }\r\n\r\n this._isBound = true;\r\n\r\n return true;\r\n }\r\n\r\n private handleDontShow(ev: Event):void {\r\n const cookiename = this._element.getAttribute(\"data-modal\");\r\n const cookielifetime = 315360000;\r\n const mincookielength = 1;\r\n if(cookiename === undefined || cookiename === null || cookiename.length < mincookielength) {\r\n\r\n return;\r\n }\r\n\r\n if(this._dontShowElement?.checked) {\r\n Cookie.setCookie(cookiename, \"1\", cookielifetime);\r\n } else {\r\n Cookie.deleteCookie(cookiename);\r\n }\r\n }\r\n\r\n private handleExternalLinkClick(ev: Event): void {\r\n if (!this._isBound) {\r\n\r\n return;\r\n }\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n const linkClicked = ev.currentTarget as HTMLAnchorElement;\r\n this.currentTargetElement = linkClicked;\r\n $(this._element).modal(\"show\");\r\n }\r\n\r\n private handleLeavingConfirmed(ev: Event): void {\r\n ev.preventDefault();\r\n // if we do need to call something to save we need to do that here\r\n if (this.currentTargetElement === undefined) {\r\n console.error(\"No target element for leaving. Unable to find redirect href.\");\r\n\r\n return;\r\n }\r\n\r\n const url = this.currentTargetElement.href;\r\n // Justification: a type defintion was added for the \"trackClick\" function\r\n // just in case it is not on the page (currently in combodeferred js)\r\n // tslint:disable-next-line: strict-type-predicates\r\n if (typeof (trackClick) === \"function\" && this._trackingCategory && this._trackingUrl) {\r\n trackClick(url, this._trackingCategory, url, this._trackingUrl, 0);\r\n } else {\r\n console.warn(\"Link click not tracked: trackClick function not defined\");\r\n window.location.href = url;\r\n }\r\n }\r\n\r\n}\r\n","export const UiUtil = {\r\n animateScroll(el: Element, padding?: number | null): void {\r\n const anchor = el.querySelector(\"div.question-scroll-anchor\");\r\n if (anchor) {\r\n anchor.scrollIntoView();\r\n }\r\n },\r\n animateSlide(\r\n el: Element,\r\n offset: number,\r\n duration: number,\r\n callback?: Function\r\n ): void {\r\n console.log(\"slide...\");\r\n const active = (el.getAttribute(\"data-slide-active\") === \"1\");\r\n const nextPos = (active ? 0 : (offset));\r\n $(el).animate(\r\n {\r\n left: nextPos\r\n },\r\n duration,\r\n () => {\r\n el.setAttribute(\"data-slide-active\", (active ? \"0\" : \"1\"));\r\n if (callback) { callback(); }\r\n }\r\n );\r\n },\r\n toggleAccordionIcon(\r\n el: Element,\r\n toggleClasses: string\r\n ): void {\r\n $(el)\r\n .parent()\r\n .find(\"[data-toggle=collapse] i\")\r\n .toggleClass(toggleClasses);\r\n },\r\n toggleButtonState(\r\n button: HTMLButtonElement\r\n ): void {\r\n const loadingText = button.dataset.loadingText || \"\";\r\n if (loadingText.length === 0) {\r\n return;\r\n }\r\n if (!button.disabled) {\r\n button.dataset.originalText = button.innerHTML;\r\n button.disabled = true;\r\n button.innerHTML = loadingText;\r\n } else {\r\n const originalText = button.dataset.originalText || \"\";\r\n button.disabled = false;\r\n button.innerHTML = originalText;\r\n }\r\n },\r\n collapseDivOffTargetClick(\r\n collapsibleDiv: HTMLElement\r\n ): void {\r\n $(document).on(\"click\", (ev: JQuery.ClickEvent) => {\r\n const collapseDiv = $(collapsibleDiv).find(\".collapse.show\");\r\n const isExpanded = collapseDiv.length;\r\n if (!isExpanded) {\r\n return;\r\n }\r\n const elementClicked = $(ev.target);\r\n const isInnerTarget = $(collapsibleDiv).find(elementClicked).length;\r\n if (!(isInnerTarget)) {\r\n collapseDiv.collapse(\"hide\");\r\n }\r\n });\r\n },\r\n elementInViewport(element: HTMLElement): boolean {\r\n if (!element || element === undefined) {\r\n return false\r\n }\r\n var top = element.offsetTop;\r\n var left = element.offsetLeft;\r\n var width = element.offsetWidth;\r\n var height = element.offsetHeight;\r\n\r\n while (element.offsetParent) {\r\n element = element.offsetParent as HTMLElement;\r\n top += element.offsetTop;\r\n left += element.offsetLeft;\r\n }\r\n\r\n return (\r\n top < (window.pageYOffset + window.innerHeight) &&\r\n left < (window.pageXOffset + window.innerWidth) &&\r\n (top + height) > window.pageYOffset &&\r\n (left + width) > window.pageXOffset\r\n );\r\n },\r\n replaceDataSrcWithSrcInImageTags(currentHtmlString: string): string {\r\n let tempDivElement: JQuery = $(\"
\");\r\n tempDivElement.html(currentHtmlString);\r\n\r\n tempDivElement.find(\"img[data-src]\").each(function () {\r\n // tslint:disable-next-line: no-unsafe-any\r\n $(this).attr(\"src\", $(this).data(\"src\"));\r\n $(this).removeAttr(\"data-src\");\r\n });\r\n\r\n tempDivElement.find(\"source[data-srcset]\").each(function () {\r\n // tslint:disable-next-line: no-unsafe-any\r\n $(this).attr(\"srcset\", $(this).data(\"srcset\"));\r\n $(this).removeAttr(\"data-srcset\");\r\n });\r\n\r\n return tempDivElement.html();\r\n },\r\n scrollToTop(): void {\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop: 0\r\n },\r\n \"slow\"\r\n );\r\n }\r\n};\r\n","/*\r\n * General utils for managing cookies in Typescript.\r\n */\r\nexport const Cookie = {\r\n\r\n getCookies(): string[] {\r\n return (document.cookie.split(\"; \").map(s => {\r\n const kv = s.split(\"=\");\r\n return kv[0];\r\n }) || []);\r\n },\r\n\r\n setCookie(name: string | null, val: string | null, expires: number | Date | null): void{\r\n if(name === null) return;\r\n if(val === null) return;\r\n\r\n\r\n const date = new Date();\r\n const value = val;\r\n\r\n if(expires === null) {\r\n // Set it expire in 7 days\r\n date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000));\r\n } else if (typeof(expires) === \"number\") {\r\n date.setTime(date.getTime() + ((Math.floor(expires)) * 1000));\r\n } else {\r\n date.setDate(expires.valueOf());\r\n }\r\n\r\n // Set it\r\n document.cookie = name+\"=\"+value+\"; expires=\"+date.toUTCString()+\"; path=/\";\r\n },\r\n\r\n setSessionCookie(name: string | null, val: string | null): void{\r\n if(name === null) return;\r\n if(val === null) return;\r\n\r\n const value = val;\r\n\r\n // Set it\r\n document.cookie = name+\"=\"+value+\"; path=/\";\r\n },\r\n\r\n getCookie(name: string | null): string | null {\r\n if(name === null) return null;\r\n\r\n const value = \"; \" + document.cookie;\r\n const parts = (value.split(\"; \" + name + \"=\") || []);\r\n\r\n if (parts.length == 2) {\r\n return ((parts.pop() || \"\").split(\";\").shift() || null);\r\n }\r\n\r\n return null;\r\n },\r\n\r\n deleteCookie(name: string | null): void {\r\n if(name === null) return;\r\n\r\n const date = new Date();\r\n\r\n // Set it expire in -1 days\r\n date.setTime(date.getTime() + (-1 * 24 * 60 * 60 * 1000));\r\n\r\n // Set it\r\n document.cookie = name+\"=; expires=\"+date.toUTCString()+\"; path=/\";\r\n }\r\n}","interface ITruncationData {\r\n lastCalculationAtHeight: number;\r\n lastCalculationAtWidth: number;\r\n lastKnownScrollHeight: number;\r\n lastKnownScrollWidth: number;\r\n clamp: number;\r\n element: HTMLElement;\r\n lineHeight: number;\r\n originalText: string;\r\n segments: string[];\r\n}\r\n\r\nexport class LineClamp {\r\n private readonly _truncationElements: ITruncationData[] = [];\r\n private _ticking = false;\r\n\r\n constructor(private readonly _element: HTMLElement) {\r\n window.addEventListener(\"resize\", () => this.handleResize());\r\n this._truncationElements = this.readTruncationElements();\r\n this.truncate();\r\n }\r\n\r\n public static applyTo(element: HTMLElement): LineClamp {\r\n return new LineClamp(element);\r\n }\r\n\r\n private readTruncationElements(): ITruncationData[] {\r\n return Array\r\n .from(this._element.querySelectorAll(\"[data-line-clamp]\"))\r\n .map(el => {\r\n const element = el as HTMLElement;\r\n\r\n const clamp = parseInt(element.dataset.lineClamp || \"\", 10);\r\n if (isNaN(clamp) || clamp < 1) {\r\n console.warn(\"Invalid line clamp count.\", element);\r\n\r\n return null;\r\n }\r\n\r\n const lineHeight =\r\n parseInt(window.getComputedStyle(el).lineHeight || \"\", 10);\r\n\r\n if (isNaN(lineHeight) || lineHeight < 1) {\r\n console.warn(\"Could not measure line height.\", element);\r\n\r\n return null;\r\n }\r\n\r\n // Break the original text into bits that we can add back in.\r\n // We are currently breaking on characters are not words.\r\n const segments = (el.textContent || \"\")\r\n .split(\" \")\r\n .map(word => word.trim())\r\n .filter(Boolean)\r\n .map(word => word.split(\"\"))\r\n .reduce((prev, next) => {\r\n const characters = prev.concat(next);\r\n characters[characters.length - 1] += \" \";\r\n\r\n return characters;\r\n }, []);\r\n\r\n const originalText = segments.join(\"\");\r\n\r\n const data: ITruncationData = {\r\n clamp,\r\n element,\r\n lastCalculationAtHeight: -1,\r\n lastCalculationAtWidth: -1,\r\n lastKnownScrollHeight: element.scrollHeight,\r\n lastKnownScrollWidth: element.scrollWidth,\r\n lineHeight,\r\n originalText,\r\n segments\r\n };\r\n\r\n return data;\r\n }).filter(Boolean) as ITruncationData[];\r\n }\r\n\r\n private handleResize(): void {\r\n this._truncationElements.forEach(t => {\r\n t.lastKnownScrollHeight = t.element.scrollHeight;\r\n t.lastKnownScrollWidth = t.element.scrollWidth;\r\n });\r\n\r\n this.requestTick();\r\n }\r\n\r\n private requestTick(): void {\r\n if (!this._ticking) {\r\n this._ticking = true;\r\n requestAnimationFrame(() => {\r\n this._ticking = false;\r\n this.truncate();\r\n });\r\n }\r\n }\r\n\r\n private truncate(): void {\r\n this._truncationElements.forEach(t => {\r\n\r\n const dimensionsHaveChanged =\r\n t.lastCalculationAtHeight !== t.lastKnownScrollHeight ||\r\n t.lastCalculationAtWidth !== t.lastKnownScrollWidth;\r\n\r\n if (!dimensionsHaveChanged) {\r\n return;\r\n }\r\n\r\n t.lastCalculationAtHeight = t.lastKnownScrollHeight;\r\n t.lastCalculationAtWidth = t.lastKnownScrollWidth;\r\n\r\n // Modified binary search until we find the exact point at which the line\r\n // count exceeds the clamp. Usual binary search algorithm modified so we\r\n // can make two measurements instead of one, since we are looking for a\r\n // boundary and not a specific segment.\r\n const last = t.segments.length - 1;\r\n let high = last;\r\n let low = 0;\r\n while (high > low) {\r\n\r\n // Justification: Finding the average between two items.\r\n // tslint:disable-next-line:no-magic-numbers\r\n const mid = Math.floor((high - low) / 2) + low;\r\n const next = mid + 1;\r\n\r\n // Check to see if the next segment will break the clamp.\r\n t.element.textContent = next === last ?\r\n t.originalText :\r\n t.segments.slice(0, next).join(\"\") + \"…\";\r\n\r\n const nextLineCount = Math.floor(t.element.scrollHeight / t.lineHeight);\r\n if (nextLineCount <= t.clamp) {\r\n low = next;\r\n continue; // Clamp intact, the boundary must be above us.\r\n }\r\n\r\n // We know the clamp is broken on the next segment. Is it broken\r\n // on this segment? If not, we've found the boundary.\r\n t.element.textContent = t.segments.slice(0, mid).join(\"\") + \"…\";\r\n\r\n const currentLineCount =\r\n Math.floor(t.element.scrollHeight / t.lineHeight);\r\n\r\n if (currentLineCount > t.clamp) {\r\n high = mid;\r\n continue; // Clamp broken, the boundary must be below us.\r\n }\r\n\r\n break; // We found the boundary.\r\n }\r\n\r\n if (t.element.textContent === t.originalText) {\r\n t.element.removeAttribute(\"title\");\r\n } else {\r\n t.element.setAttribute(\"title\", t.originalText);\r\n }\r\n });\r\n }\r\n}\r\n","import { DomUtil } from \"../util/DomUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\n\r\nexport class RedirectUnauthenticated {\r\n\r\n public async init(): Promise {\r\n const requireAuthElement = DomUtil.query(document.body, '[data-requires-auth=\"true\"]', false);\r\n if (!requireAuthElement) { return; }\r\n let redirectUrl = requireAuthElement.dataset.redirectForUnauth;\r\n if (!redirectUrl) { return; }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n\r\n if (redirectUrl.toLowerCase() === \"parent\") {\r\n const lastSlashIndex =\r\n window.location.pathname.lastIndexOf(\"/\");\r\n redirectUrl =\r\n window.location.pathname.substr(0, lastSlashIndex);\r\n }\r\n console.log(\"Anonymous on Auth page. Redirecting to: \"\r\n + redirectUrl);\r\n window.location.replace(redirectUrl.length === 0 ?\r\n \"/\" :\r\n redirectUrl);\r\n }\r\n\r\n }\r\n}\r\n","import { Component } from \"../components/base/Component\";\r\nimport { PageContext } from \"./PageContext\";\r\nimport { UrlUtil } from \"../util/UrlUtil\";\r\n\r\n// Justification: Interface declarations define the properties available on an\r\n// instance of an object, but we are interested in ensuring that a particular\r\n// constructor exists, and since instances do not have constructors, no\r\n// instance could satisfy the interface requirements.\r\n// tslint:disable-next-line: interface-over-type-literal, no-any\r\ntype ComponentClass =\r\n new(element: HTMLElement, context: PageContext) => Component;\r\n\r\n// Factory for auto-loading components. If the component class name is\r\n// \"MyComponent\", place HTML into the page with attribute\r\n// data-component=\"MyComponent\" and this will auto load the component.\r\nexport class ComponentFactory {\r\n\r\n private static readonly componentClasses = new Map();\r\n\r\n // The components that have been loaded by ComponentFactory\r\n private readonly _loadedComponents: Map =\r\n new Map();\r\n\r\n constructor(private readonly _pageContext: PageContext) {\r\n }\r\n\r\n // Registers a components class for auto-loading. A component can exist zero\r\n // or many times on a page.\r\n public static registerComponent(\r\n componentName: string,\r\n componentClass: ComponentClass\r\n ): void {\r\n if (!componentName) {\r\n const message =\r\n \"ComponentFactory.registerComponent: componentName cannot be empty\";\r\n\r\n throw new Error(message);\r\n }\r\n\r\n if (ComponentFactory.componentClasses.has(componentName)) {\r\n const message =\r\n `ComponentFactory.registerComponent: componentName ${componentName} ` +\r\n \"is already defined\";\r\n\r\n console.warn(message);\r\n\r\n return;\r\n }\r\n const message = `ComponentFactory.registerComponent: componentName ${componentName} registered.`;\r\n console.info(message);\r\n ComponentFactory.componentClasses.set(componentName, componentClass);\r\n }\r\n\r\n public getComponent(\r\n type: typeof Component,\r\n scope?: HTMLElement\r\n ): T | null {\r\n // tslint:disable-next-line: no-unsafe-any\r\n return this.getAllComponents(type, scope).next().value || null;\r\n }\r\n\r\n public* getAllComponents(\r\n type: typeof Component,\r\n scope?: HTMLElement\r\n ): IterableIterator {\r\n if (scope) {\r\n for (const [ element, component ] of this._loadedComponents) {\r\n const isMatch =\r\n component instanceof type &&\r\n (scope === element || scope.contains(element));\r\n\r\n if (isMatch) {\r\n yield component as T;\r\n }\r\n }\r\n\r\n return;\r\n }\r\n\r\n for (const component of this._loadedComponents.values()) {\r\n if (component instanceof type) {\r\n yield component as T;\r\n }\r\n }\r\n }\r\n\r\n // This removes components from the factory's list of loaded components.\r\n // This is useful if you are about to remove those components from the DOM,\r\n // and you wish to remove any potential references to those same components,\r\n // so the browser's garbage collection can pick them up.\r\n public dereferenceComponents(scope: HTMLElement): void {\r\n [ scope, ...scope.querySelectorAll(\"*\") ].forEach(node =>\r\n this._loadedComponents.delete(node as HTMLElement));\r\n }\r\n\r\n // Loads components that have been registered with registerComponent within\r\n // the specified scope. If the scope is undefined, then loads components for\r\n // the entire page. This function can be used when additional components have\r\n // been added to the DOM after initial load.\r\n public async loadComponents(scope?: HTMLElement): Promise {\r\n let errorsEncountered = 0;\r\n let warningsEncountered = 0;\r\n const root = scope || document;\r\n const elements = Array\r\n .from(root.querySelectorAll(\"[data-component]\"))\r\n .filter(el => !this._loadedComponents.has(el as HTMLElement));\r\n\r\n console.groupCollapsed(\"Loading components\");\r\n const components = elements.map(element => {\r\n const htmlElement = element as HTMLElement;\r\n const name = htmlElement.getAttribute(\"data-component\");\r\n const fn = name ? ComponentFactory.componentClasses.get(name) : null;\r\n\r\n if (fn) {\r\n try {\r\n const component = new fn(htmlElement, this._pageContext);\r\n this._loadedComponents.set(htmlElement, component);\r\n console.log(name, component, htmlElement);\r\n\r\n return component;\r\n } catch (err) {\r\n errorsEncountered += 1;\r\n console.error(err);\r\n }\r\n } else {\r\n warningsEncountered += 1;\r\n console.warn(\"Unrecognized component\", element);\r\n }\r\n }).filter(Boolean) as Component[];\r\n console.groupEnd();\r\n\r\n await Promise.all(components.map(component => {\r\n if (component.init) {\r\n try {\r\n return component.init();\r\n } catch (err) {\r\n errorsEncountered += 1;\r\n console.error(err);\r\n }\r\n }\r\n }));\r\n\r\n const warningCount =\r\n warningsEncountered === 0 ? \"\" :\r\n warningsEncountered === 1 ? \"1 warning\" :\r\n `${warningsEncountered} warnings`;\r\n\r\n const errorCount =\r\n errorsEncountered === 0 ? \"\" :\r\n errorsEncountered === 1 ? \"1 error\" :\r\n `${errorsEncountered} errors`;\r\n\r\n const totalCount = [ errorCount, warningCount ]\r\n .filter(Boolean)\r\n .join(\" and \");\r\n\r\n if (errorsEncountered) {\r\n throw new Error(totalCount + \" during component load\");\r\n }\r\n\r\n if (warningsEncountered) {\r\n console.warn(totalCount + \" during component load\");\r\n } else {\r\n const len = components.length;\r\n const componentCount =\r\n len === 0 ? \"0 components\" :\r\n len === 1 ? \"1 component\" :\r\n len.toLocaleString() + \" components\";\r\n\r\n console.info(componentCount + \" loaded\");\r\n }\r\n\r\n // check for external links in components\r\n UrlUtil.externalUrlCheck();\r\n\r\n return components;\r\n }\r\n}\r\n","import { PageContext } from \"../../service/PageContext\";\r\n\r\nexport abstract class Component {\r\n protected constructor(\r\n protected readonly _element: HTMLElement,\r\n protected readonly _pageContext?: PageContext\r\n ) {}\r\n\r\n public async init?(): Promise {\r\n return;\r\n }\r\n}\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UrlUtil } from \"../../util/UrlUtil\";\r\n\r\nexport class HealioHeader extends Component {\r\n // tslint:disable-next-line:max-line-length\r\n public static readonly UnauthenticatedActionEvent = \"UnauthenticatedActionEvent\";\r\n\r\n private CheckEmailEndpoint = \"\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n $(\"#offcanvasToggle\", element).on(\"click\", () => {\r\n $(\"#navbarOffcanvas\", element).toggleClass(\"open\");\r\n $(\"body\").toggleClass(\"mobile-nav-open\");\r\n $(\".navbar-toggler-icon\", element).toggleClass(\"d-none\");\r\n $(\".navbar-toggler-text\", element).toggleClass(\"d-none\");\r\n $(\".global-nav__overlay\", element).toggleClass(\"d-none\");\r\n $(\".closebtn\", element).toggleClass(\"d-none\");\r\n });\r\n\r\n $(\"#searchToggle\", element).on(\"click\", () => {\r\n $(\"#mobileSearchBar\", element).toggleClass(\"open\");\r\n });\r\n\r\n $(\".search-close-btn\", element).on(\"click\", () => {\r\n $(\"#mobileSearchBar\", element).removeClass(\"open\");\r\n });\r\n\r\n window.addEventListener(HealioHeader.UnauthenticatedActionEvent,\r\n ev => this.handleRegistrationNeeded(ev));\r\n }\r\n\r\n public async init(): Promise {\r\n const globalContext = await WyanokeUtil.loadContext(true);\r\n\r\n if (globalContext && globalContext.sitename && globalContext.itemid) {\r\n let langroot = this._element.dataset.languageRoot;\r\n if (!langroot) {\r\n langroot = globalContext.itemid;\r\n }\r\n const suffix = globalContext.sitename + \"/\" + langroot;\r\n this.CheckEmailEndpoint = \"/utilityapp/json/na/ce/\" + suffix;\r\n }\r\n const queryStringMap = UrlUtil.getQueryString();\r\n const loginQuery = queryStringMap.get(\"login\");\r\n if(loginQuery !== undefined && loginQuery[0] === \"1\") {\r\n const loginLink = this._element.getElementsByClassName(\"link-login\")[0].firstChild as HTMLElement;\r\n if (loginLink){\r\n const profile = await WyanokeUtil.loadUserProfile(false, false);\r\n if(!profile || profile.isLoggedIn !== \"True\"){\r\n //There was no easy way to get to the login button as it is loaded dynamically, but ideally this should just call the click function on it\r\n WyanokeUtil.logIn();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleRegistrationNeeded(ev: Event): Promise {\r\n this.showRegistrationModal(ev, this.CheckEmailEndpoint);\r\n }\r\n\r\n private showRegistrationModal(ev: Event, endpoint: string ):\r\n void {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n $.ajax({\r\n type: \"GET\",\r\n url: endpoint,\r\n success(d: string): void {\r\n if ($(\".register-modal\").is(\":visible\")) { return; }\r\n $(\"body\").append(d);\r\n if (window.Context && window.Context.sitename &&\r\n window.Context.sitename?.indexOf(\"cme\") > -1) {\r\n $(\"*[data-betaVisible='false']\").hide();\r\n $(\"*[data-betaVisible='true']\").show();\r\n }\r\n },\r\n error(d: Object): void {\r\n console.log(\"error returning login modal.\");\r\n }\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"HealioHeader\", HealioHeader);\r\n","import { Component } from \"./base/Component\";\r\nimport { ComponentFactory } from \"../service/ComponentFactory\";\r\nimport { EventUtil } from \"../util/EventUtil\";\r\nimport { HealioHeader } from \"./healioGlobal/HealioHeader\";\r\nimport { ISavedPageAddRequest } from \"../models/SavedPage/ISavedPageAddRequest\";\r\nimport { LocalStorageUtil } from \"../util/LocalStorageUtil\";\r\nimport { PageContext } from \"../service/PageContext\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { SavedPageService } from \"../service/SavedPageService\";\r\n\r\nexport class SaveIcon extends Component {\r\n private readonly dataStore = \"SaveIcon\";\r\n private readonly dataStoreKey = \"AttemptedToSaveItem\";\r\n private saveIconStorage : LocalStorageUtil | null = null;\r\n private readonly _savedPageService: SavedPageService | null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n element.addEventListener(\"click\", this.handleSaveHandler);\r\n\r\n this._savedPageService = pageContext ? pageContext.savedPageService : null;\r\n if (this._savedPageService) {\r\n\r\n window.addEventListener(\r\n SavedPageService.SavedPageDecrementEvent,\r\n ev => this.handleSaveRemoved(ev as CustomEvent));\r\n }\r\n }\r\n\r\n public async init(): Promise {\r\n this.saveIconStorage = new LocalStorageUtil(this.dataStore);\r\n await this.updateCurrentState();\r\n await this.saveAfterLogIn();\r\n }\r\n\r\n private async handleSaveRemoved(ev: CustomEvent): Promise {\r\n if(ev.detail && ev.detail === this._element.dataset.activityId && this.state !== \"save\"){\r\n this.state = \"save\"\r\n }\r\n return\r\n }\r\n\r\n private readonly handleSaveHandler = (ev: MouseEvent) => this.handleSave(ev);\r\n\r\n private get label(): HTMLElement | null {\r\n const selector = \"[data-save-icon='label']\";\r\n\r\n return this._element.querySelector(selector) as HTMLElement;\r\n }\r\n\r\n private get icon(): HTMLElement | null {\r\n const selector = \"[data-save-icon='icon']\";\r\n\r\n return this._element.querySelector(selector) as HTMLElement;\r\n }\r\n\r\n public get state(): \"save\" | \"saved\" | \"complete\" | null {\r\n const current = this._element.getAttribute(\"data-state-current\");\r\n\r\n this._element.classList.add(\"complete\");\r\n\r\n return current === \"save\" || current === \"saved\" || current === \"complete\"\r\n ? current\r\n : null;\r\n }\r\n\r\n public set state(value: \"save\" | \"saved\" | \"complete\" | null) {\r\n if (value) {\r\n this._element.setAttribute(\"data-state-current\", value);\r\n } else {\r\n this._element.removeAttribute(\"data-state-current\");\r\n }\r\n\r\n if (value && value === \"complete\") {\r\n this._element.removeEventListener(\"click\", this.handleSaveHandler);\r\n this._element.classList.add(\"completed\");\r\n }\r\n\r\n const label = this.label;\r\n if (label) {\r\n const text = value ? label.getAttribute(\"data-label-\" + value) || \"\" : \"\";\r\n label.textContent = text;\r\n label.classList.remove(\"d-none\");\r\n }\r\n\r\n const icon = this.icon;\r\n if (icon) {\r\n if (value === \"saved\") {\r\n icon.classList.add(\"fas\");\r\n icon.classList.remove(\"fal\");\r\n } else if (value === \"complete\") {\r\n icon.className = \"\";\r\n icon.className = \"fas fa-check-circle\";\r\n } else {\r\n icon.classList.add(\"fal\");\r\n icon.classList.remove(\"fas\");\r\n }\r\n icon.parentElement?.classList.remove(\"d-none\");\r\n }\r\n\r\n if(this._element.classList.contains(\"pin\")){\r\n if(value === \"saved\"){\r\n this._element.classList.add(\"active\");\r\n } else {\r\n this._element.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n private async handleSave(ev: MouseEvent): Promise {\r\n if(ev && ev !== null) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n\r\n const method = this.state !== \"saved\" ? \"save\" : \"remove\";\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n const saveActivityPage = await this.savedPage();\r\n\r\n if (saveActivityPage !== null && service) {\r\n service[method](saveActivityPage);\r\n this.state = method === \"save\" ? \"saved\" : \"save\";\r\n } else {\r\n const error =\r\n saveActivityPage === null\r\n ? \"[testing SAP && service] Unable to create Save Page.\"\r\n : \"[testing SAP && service] Could not resolve Saved Page Service\";\r\n\r\n console.error(error);\r\n }\r\n }\r\n\r\n private async saveAfterLogIn(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n const storedSaveIcon = (this.saveIconStorage?.getItem(this.dataStore, [\r\n this.dataStoreKey\r\n ])) as { activityId: string };\r\n if (\r\n !storedSaveIcon ||\r\n storedSaveIcon.activityId !== this._element.dataset.activityId\r\n ) {\r\n return;\r\n }\r\n this.saveIconStorage?.deleteItem(this.dataStore, [this.dataStoreKey]);\r\n if (this.state === \"saved\") {\r\n return;\r\n }\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(\"click\", null));\r\n }\r\n\r\n private async savedPage(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n this.saveIconStorage?.insertItem(\r\n this.dataStore,\r\n [this.dataStoreKey],\r\n this._element.dataset\r\n );\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null\r\n )\r\n );\r\n\r\n return null;\r\n }\r\n\r\n const userId = profile.contactid || null;\r\n const activityId = this._element.dataset.activityId || null;\r\n const activityUrl = this._element.dataset.activityUrl || null;\r\n const activityTitle = this._element.dataset.activityTitle || null;\r\n const contentType = this._element.dataset.contentType || \"cme\";\r\n const siteName = this._element.dataset.siteName || \"cme-healio\";\r\n const expiresDate = this._element.dataset.expires || null;\r\n if (!userId || !activityId || !activityUrl || !activityTitle) {\r\n return null;\r\n }\r\n\r\n return {\r\n contenttype: contentType.split(\",\"),\r\n documentid: activityId,\r\n expires: expiresDate,\r\n site: siteName,\r\n title: activityTitle,\r\n url: activityUrl,\r\n userid: userId\r\n };\r\n }\r\n\r\n private async updateCurrentState(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n\r\n let contentType = \"cme\";\r\n\r\n if (this._element.dataset.activityId === undefined) {\r\n console.warn(\"No Item Id found on Card\");\r\n\r\n return;\r\n }\r\n\r\n if (this._element.dataset.siteName === undefined) {\r\n console.warn(\"No siteName Card\");\r\n\r\n return;\r\n }\r\n\r\n if (this._element.dataset.contentType !== undefined) {\r\n const ct = this._element.dataset.contentType;\r\n contentType = ct !== null && ct !== \"\" ? ct : contentType;\r\n }\r\n\r\n if (!service) {\r\n console.warn(\"No Saved Page Service available.\");\r\n\r\n return;\r\n }\r\n\r\n const savedPages = await service.list(contentType);\r\n\r\n const activityId = this._element.dataset.activityId.toLowerCase();\r\n const activitySiteName = this._element.dataset.siteName.toLowerCase();\r\n const isSaved =\r\n savedPages === null || savedPages.length < 1\r\n ? false\r\n : savedPages.some(\r\n s => s.documentid && s.documentid.toLowerCase() === activityId && s.site && s.site.toLowerCase() === activitySiteName\r\n );\r\n\r\n let iconState: \"save\" | \"saved\" | \"complete\" | null = isSaved\r\n ? \"saved\"\r\n : \"save\";\r\n // we have an additional state when this is a cme activity\r\n if (contentType === \"cme\") {\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile && profile.completedactivities) {\r\n iconState = profile.completedactivities.some(\r\n act => act.toLowerCase() === activityId\r\n )\r\n ? \"complete\"\r\n : iconState;\r\n }\r\n }\r\n\r\n this.state = iconState;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"SaveIcon\", SaveIcon);\r\n","export class LocalStorageUtil {\r\n private readonly storageName = \"healioLocalStorage\";\r\n private dataStore = \"\";\r\n\r\n constructor(dataStore: string) {\r\n if (!this.isLocalStorageAvailable()) {\r\n return;\r\n }\r\n this.dataStore = dataStore;\r\n }\r\n\r\n private isLocalStorageAvailable() : boolean{\r\n if (window === undefined || typeof(window.localStorage) !== 'object') {\r\n return false;\r\n }\r\n var test = 'test';\r\n try {\r\n localStorage.setItem(test, test);\r\n localStorage.removeItem(test);\r\n return true;\r\n } catch(e) {\r\n return false;\r\n }\r\n }\r\n\r\n // I think we might want to call this on logout... maybe?\r\n public clearLocalStorage() : boolean {\r\n const localStorageKeys = Object.keys(window.localStorage)\r\n for (let index = 0; index < localStorageKeys.length; ++index) {\r\n var storageKey = localStorageKeys[index];\r\n if (storageKey.startsWith(this.storageName)){\r\n localStorage.removeItem(storageKey);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public deleteItem(dataStore: string, keyarray: string[]):\r\n // JUSTIFICATION : ANYthing can be in datastore. Might be a bit tedious\r\n // to create type specific local storage functions\r\n // tslint:disable-next-line: no-any\r\n boolean {\r\n let key = keyarray.join(\"|\").toLowerCase();\r\n if(!this.isLocalStorageAvailable()) {\r\n return false;\r\n }\r\n key = `${this.storageName}/${this.dataStore}/${key}`\r\n localStorage.removeItem(key);\r\n return true;\r\n }\r\n // JUSTIFICATION : ANYthing can be stored. Might be a bit tedious\r\n // to create type specific local storage functions\r\n // tslint:disable-next-line: no-any\r\n public insertItem(dataStore: string, keyarray: string[], value: any):\r\n boolean {\r\n let key = keyarray.join(\"|\").toLowerCase();\r\n key = `${this.storageName}/${this.dataStore}/${key}`\r\n if(!this.isLocalStorageAvailable()) {\r\n\r\n return false;\r\n }\r\n localStorage.setItem(key,JSON.stringify(value));\r\n return true;\r\n }\r\n\r\n public getItem(dataStore: string, keyarray: string[]):\r\n // JUSTIFICATION : ANYthing can be in datastore. Might be a bit tedious\r\n // to create type specific local storage functions\r\n // tslint:disable-next-line: no-any\r\n any | null {\r\n let key = keyarray.join(\"|\").toLowerCase();\r\n key = `${this.storageName}/${this.dataStore}/${key}`\r\n if(!this.isLocalStorageAvailable()) {\r\n\r\n return null;\r\n }\r\n let retrievedItem = localStorage.getItem(key);\r\n\r\n return retrievedItem ? JSON.parse(retrievedItem) : null;\r\n }\r\n\r\n public getItemSimple(key: string):\r\n any | null {\r\n if(!this.isLocalStorageAvailable())\r\n {\r\n return null;\r\n }\r\n return localStorage.getItem(key);\r\n }\r\n\r\n};\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class ClinicalGuidanceMonographNav extends Component {\r\n private setActiveCard: boolean;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.setActiveCard = this._element.dataset?.setActiveCard === \"1\" ? true : false;\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n if (this.setActiveCard) {\r\n this.handleScroll()\r\n window.addEventListener(\"scroll\", () => this.handleScroll());\r\n }\r\n\r\n const navLinks = this._element.querySelectorAll(\"a.btn-link\")\r\n navLinks.forEach(navLink => {\r\n navLink.addEventListener(\"click\", ev => this.handleClick(ev));\r\n })\r\n\r\n const mobileCollapseButton = this._element.querySelector(\".collapse-btn\")\r\n mobileCollapseButton?.addEventListener(\"click\", ev => this.handleExpand(ev));\r\n }\r\n\r\n private handleClick(ev: Event): void {\r\n let linkClicked = ev.target as HTMLAnchorElement;\r\n let targetAnchorName = linkClicked?.dataset?.target ?? null\r\n if (!targetAnchorName) {\r\n return\r\n }\r\n let targetElement = document.querySelector(`.article-content a[name='${targetAnchorName}']`)\r\n if (!targetElement) {\r\n return\r\n }\r\n targetElement.scrollIntoView()\r\n }\r\n\r\n private handleExpand(ev: Event): void {\r\n let collapseButton = ev.target as HTMLElement;\r\n const articleSideDiv = this._element.querySelector(\".article-side-navigation\")\r\n if(articleSideDiv && articleSideDiv.classList.contains(\"expanded\")){\r\n articleSideDiv.classList.remove(\"expanded\")\r\n collapseButton.innerHTML = 'View more topics'\r\n } else if(articleSideDiv) {\r\n articleSideDiv.classList.add(\"expanded\")\r\n collapseButton.innerHTML = 'View less topics'\r\n }\r\n\r\n }\r\n\r\n\r\n public handleScroll(): void {\r\n const activeNavCardHeader = this._element.querySelector(\".card-header.active\")\r\n let activeNavItemSet = false;\r\n if (activeNavCardHeader) {\r\n const asctiveNavLink = activeNavCardHeader.querySelector(\"a.btn-link\")\r\n const activeTargetAnchorName = asctiveNavLink?.dataset?.target ?? null\r\n if (activeTargetAnchorName) {\r\n const activeTargetAnchor = document.querySelector(`.article-content a[name='${activeTargetAnchorName}']`)\r\n if (activeTargetAnchor && UiUtil.elementInViewport(activeTargetAnchor)) {\r\n activeNavItemSet = true\r\n } else {\r\n activeNavCardHeader.classList.remove(\"active\")\r\n }\r\n }\r\n }\r\n if (activeNavItemSet) {\r\n return\r\n }\r\n\r\n const navLinks = this._element.querySelectorAll(\"a.btn-link\")\r\n navLinks.forEach(navLink => {\r\n const targetAnchorName = navLink.dataset?.target ?? null\r\n if (!targetAnchorName || activeNavItemSet) {\r\n return\r\n }\r\n const sectionAnchor = document.querySelector(`.article-content a[name='${targetAnchorName}']`)\r\n if (sectionAnchor && UiUtil.elementInViewport(sectionAnchor)) {\r\n const parentCardHeaderElement = navLink.closest(\".card-header\")\r\n parentCardHeaderElement?.classList.add(\"active\")\r\n activeNavItemSet = true\r\n }\r\n\r\n })\r\n\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ClinicalGuidanceMonographNav\", ClinicalGuidanceMonographNav);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nenum ItemState {\r\n Active,\r\n Completed,\r\n Default,\r\n Disabled\r\n}\r\n\r\nexport class ActivityStepNavigation extends Component {\r\n\r\n private readonly _lastKnownPositions: {\r\n anchorTop: number;\r\n footerTop: number;\r\n scroll: number;\r\n stepperHeight: number;\r\n } = {\r\n anchorTop: 0,\r\n footerTop: 0,\r\n scroll: 0,\r\n stepperHeight: 0\r\n };\r\n\r\n private _ticking = false;\r\n private readonly _stickyAnchor: JQuery;\r\n private readonly _stepper: JQuery;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._stickyAnchor = $(\"[data-for='sticky anchor']\", this._element);\r\n this._stepper = $(\"[data-for='nav stepper']\", this._element);\r\n\r\n window.addEventListener(\"scroll\", () => this.handleScroll());\r\n\r\n // Any click on a nav-link whose direct parent is disabled is a no-go.\r\n element.querySelectorAll(\"a.nav-link\").forEach(a =>\r\n a.addEventListener(\"click\", ev => this.handleNavLinkClick(ev)));\r\n }\r\n\r\n private static readItemState(item: Element): ItemState {\r\n const list = item.classList;\r\n if (list.contains(\"nav-item--active\")) {\r\n return ItemState.Active;\r\n }\r\n\r\n if (list.contains(\"nav-item--completed\")) {\r\n return ItemState.Completed;\r\n }\r\n\r\n if (list.contains(\"nav-item--disabled\")) {\r\n return ItemState.Disabled;\r\n }\r\n\r\n return ItemState.Default;\r\n }\r\n\r\n private static applyItemStateClasses(\r\n item: Element,\r\n itemState: ItemState,\r\n // tslint:disable-next-line: typedef\r\n isCompleted = false\r\n ): void {\r\n const list = item.classList;\r\n const closestAElement = item.querySelector(\"a\");\r\n\r\n switch (itemState) {\r\n case ItemState.Completed:\r\n list.remove(\"nav-item--active\");\r\n list.remove(\"nav-item--disabled\");\r\n list.add(\"nav-item--completed\");\r\n break;\r\n\r\n case ItemState.Active:\r\n list.remove(\"nav-item--completed\");\r\n list.remove(\"nav-item--disabled\");\r\n if (isCompleted) {\r\n list.add(\"nav-item--completed\");\r\n }\r\n list.add(\"nav-item--active\");\r\n // adding href back to active element\r\n // material design js has a dependency on\r\n // href for active state\r\n // ** mobile drawer breaks without it\r\n if(closestAElement) {\r\n const regularElement = closestAElement as HTMLElement;\r\n closestAElement.href =\r\n regularElement.dataset.href\r\n ? regularElement.dataset.href\r\n : \"#\";\r\n }\r\n break;\r\n\r\n case ItemState.Disabled:\r\n list.remove(\"nav-item--completed\");\r\n list.remove(\"nav-item--active\");\r\n list.add(\"nav-item--disabled\");\r\n if (closestAElement) {\r\n closestAElement.setAttribute(\"data-notrack\", \"1\");\r\n }\r\n break;\r\n\r\n default:\r\n list.remove(\"nav-item--completed\");\r\n list.remove(\"nav-item--active\");\r\n list.remove(\"nav-item--disabled\");\r\n }\r\n }\r\n\r\n private static getCurrentStepId() : string {\r\n const activity = window.Activity;\r\n\r\n return activity ? activity.CurrentStepId\r\n ? activity.CurrentStepId : \"\" : \"\";\r\n }\r\n\r\n private static getStepIndex(stepId :string | null) : number {\r\n const activity = window.Activity;\r\n if(stepId && activity && activity.Steps) {\r\n return activity.Steps.map((step : any) => step.Id).indexOf(stepId);\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n private static updateItemState(\r\n item: Element | undefined,\r\n itemState: ItemState,\r\n // tslint:disable-next-line: typedef\r\n isCompleted = false\r\n ): boolean {\r\n if (!item) {\r\n return false;\r\n }\r\n\r\n ActivityStepNavigation.applyItemStateClasses(item, itemState, isCompleted);\r\n\r\n const parentGroup = item.closest(\"[data-for='step group']\");\r\n ActivityStepNavigation.updateGroupState(parentGroup);\r\n\r\n return true;\r\n }\r\n\r\n private static updateGroupState(group: Element | null): void {\r\n if (!group) {\r\n return;\r\n }\r\n\r\n const list = group.querySelector(\"[data-for='step group items']\");\r\n if (!list) {\r\n return;\r\n }\r\n\r\n const states = Array\r\n .from(list.children)\r\n .filter(node => node.matches(\"[data-step-id], [data-for='step group']\"))\r\n .map(item => ActivityStepNavigation.readItemState(item));\r\n\r\n const groupState =\r\n states.some(s => s === ItemState.Active) ? ItemState.Active :\r\n states.some(s => s === ItemState.Default) ? ItemState.Default :\r\n states.every(s => s === ItemState.Completed) ? ItemState.Completed :\r\n ItemState.Disabled;\r\n\r\n const firstChild = Array.from(list.children).find(\r\n node => node.matches(\"[data-step-id], [data-for='step group']\"));\r\n\r\n const firstChildId = firstChild ?\r\n firstChild.getAttribute(\"data-step-id\") : null;\r\n const firstChildIndex = ActivityStepNavigation.getStepIndex(firstChildId);\r\n const currentStepIndex = ActivityStepNavigation\r\n .getStepIndex(ActivityStepNavigation.getCurrentStepId());\r\n const isExpanded =\r\n currentStepIndex >= firstChildIndex ;\r\n\r\n ActivityStepNavigation.applyItemStateClasses(group, groupState);\r\n\r\n group.setAttribute(\"aria-expanded\", isExpanded.toString());\r\n\r\n Array\r\n .from(group.querySelectorAll(\"[data-for='step group title']\"))\r\n .filter(el => !list.contains(el))\r\n .forEach(el =>\r\n el.setAttribute(\"aria-selected\", isExpanded.toString()));\r\n\r\n list.classList[isExpanded ? \"add\" : \"remove\"](\"show\");\r\n\r\n const parent = group.parentElement;\r\n const parentGroup =\r\n parent ? parent.closest(\"[data-for='step group']\") : null;\r\n\r\n ActivityStepNavigation.updateGroupState(parentGroup);\r\n }\r\n\r\n public async init(): Promise {\r\n await this.updateCurrentState();\r\n this.handleScroll();\r\n }\r\n\r\n private updateLastKnownPositions(): void {\r\n const anchorOffset = this._stickyAnchor.offset();\r\n\r\n this._lastKnownPositions.anchorTop = anchorOffset ? anchorOffset.top : 0;\r\n this._lastKnownPositions.scroll = $(window).scrollTop() || 0;\r\n this._lastKnownPositions.stepperHeight = this._stepper.height() || 0;\r\n }\r\n\r\n private handleNavLinkClick(ev: Event): void {\r\n const anchor = ev.target as Element;\r\n const item = anchor.closest(\"li.nav-item\");\r\n const state = item ? ActivityStepNavigation.readItemState(item) : null;\r\n if (state === ItemState.Disabled) {\r\n ev.stopPropagation();\r\n ev.preventDefault();\r\n } else {\r\n ev.preventDefault();\r\n const href = anchor.getAttribute(\"data-href\") || \"#\";\r\n window.location.href = href;\r\n }\r\n }\r\n\r\n private handleScroll(): void {\r\n this.updateLastKnownPositions();\r\n this.requestTick();\r\n }\r\n\r\n private requestTick(): void {\r\n if (!this._ticking) {\r\n this._ticking = true;\r\n\r\n requestAnimationFrame(() => {\r\n this._ticking = false;\r\n this.updatePosition();\r\n });\r\n }\r\n }\r\n\r\n private async updateCurrentState(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.userActivityService : null;\r\n if (!service) {\r\n console.warn(\"No user activity service available.\");\r\n\r\n return;\r\n }\r\n\r\n const statePromise = service.currentState();\r\n\r\n const items = DomUtil\r\n .queryAll(this._element, \"[data-step-id]\")\r\n .reduce((map, el) => {\r\n map.set(el.dataset.stepId || \"\", el);\r\n\r\n return map;\r\n }, new Map());\r\n\r\n const state = await statePromise;\r\n\r\n const currentStepId = ActivityStepNavigation.getCurrentStepId();\r\n\r\n state.steps.forEach((step, idx) => {\r\n const itemState =\r\n step.stepid === currentStepId ? ItemState.Active :\r\n step.complete ? ItemState.Completed :\r\n idx === 0 || state.steps[idx - 1].complete ? ItemState.Default :\r\n ItemState.Disabled;\r\n\r\n let isCompleted = step.complete;\r\n const item = items.get(step.stepid);\r\n if (step.type.endsWith(\"Certificate\") && itemState === ItemState.Active) {\r\n isCompleted = true;\r\n ActivityStepNavigation.updateItemState(item, ItemState.Completed, true);\r\n }\r\n\r\n if (!ActivityStepNavigation\r\n .updateItemState(item, itemState, isCompleted)) {\r\n console.warn(\"Could not update step: \" + step.stepid);\r\n }\r\n\r\n if (step.type.endsWith(\"Claim Credit\") && step.complete) {\r\n const ccLink =\r\n DomUtil.query(item as HTMLElement, \"[data-original-title]\", false);\r\n if (ccLink) {\r\n ccLink.dataset.toggle = \"tooltip\";\r\n $(ccLink).tooltip();\r\n }\r\n }\r\n });\r\n\r\n const knownKeys = state.steps.map(step => step.stepid);\r\n const unknownKeys = Array\r\n .from(items.keys())\r\n .filter(key => knownKeys.indexOf(key) === -1);\r\n\r\n if (unknownKeys.length) {\r\n const msg =\r\n \"Could not match menu items to steps: \" +\r\n unknownKeys.join(\", \");\r\n\r\n console.warn(msg);\r\n }\r\n\r\n unknownKeys.forEach(unknownKey => {\r\n const item = items.get(unknownKey);\r\n ActivityStepNavigation.updateItemState(item, ItemState.Disabled);\r\n });\r\n }\r\n\r\n private updatePosition(): void {\r\n const windowTop = this._lastKnownPositions.scroll;\r\n const footerTop = this._lastKnownPositions.footerTop;\r\n const anchorTop = this._lastKnownPositions.anchorTop;\r\n const stepperHeight = this._lastKnownPositions.stepperHeight;\r\n const padding = 50;\r\n\r\n if (windowTop + stepperHeight > footerTop + padding) {\r\n this._stepper.css({\r\n top: (windowTop + stepperHeight - footerTop + padding) * -1\r\n });\r\n } else if (windowTop > anchorTop) {\r\n this._stepper.addClass(\"fixed\");\r\n this._stepper.css({ top: 0 });\r\n } else {\r\n this._stepper.removeClass(\"fixed\");\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"ActivityStepNavigation\",\r\n ActivityStepNavigation);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class Certificate extends Component {\r\n\r\n private readonly creditEarned: HTMLSpanElement;\r\n private readonly creditTypeEarned: HTMLSpanElement;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this.creditEarned = DomUtil.query(\r\n this._element,\r\n \"[data-populate-with='creditamount']\");\r\n\r\n this.creditTypeEarned = DomUtil.query(\r\n this._element,\r\n \"[data-populate-with='credittype']\");\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.userActivityService : null;\r\n\r\n if (!service) {\r\n console.warn(\"Certificate service not available.\");\r\n\r\n return;\r\n }\r\n\r\n const state = await service.currentState();\r\n const activity = window.Activity;\r\n if(activity) {\r\n const currentStepId = activity.CurrentStepId;\r\n if(currentStepId && state.steps) {\r\n const currentStep =\r\n state.steps.find(step => step.stepid === currentStepId);\r\n const completedSteps = state.steps.filter(step => step.complete);\r\n const canComplete = (state.steps.length === completedSteps.length + 1);\r\n if(currentStep && !currentStep.complete && canComplete){\r\n await service.completeActivityStep(currentStepId);\r\n }\r\n }\r\n }\r\n\r\n if (!state.certificate) {\r\n console.warn(\"User has not stored certificate data.\");\r\n\r\n return;\r\n }\r\n\r\n this.creditEarned.textContent = state.certificate.claimedCredits\r\n ? state.certificate.claimedCredits.toLocaleString(\"en-US\", {\r\n minimumFractionDigits: 2\r\n })\r\n : \"0\";\r\n\r\n this.creditTypeEarned.textContent = state.certificate.credittype;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"Certificate\", Certificate);\r\n","import { BackNextButton } from \"../BackNextButton\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { ISavedPageAddRequest } from \"../../models/SavedPage/ISavedPageAddRequest\";\r\nimport { IUserProfileCustomField } from \"../../models/UserProfile/IUserProfileCustomField\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\n\r\ninterface ICreditTypes {\r\n Types: {\r\n Type: string;\r\n SitecoreId: string;\r\n CreditAmounts: {\r\n Amount: string;\r\n SitecoreId: string;\r\n }[];\r\n }[];\r\n}\r\n\r\nexport class ClaimCredit extends Component {\r\n private readonly creditAmountSelector: HTMLSelectElement;\r\n private hasBeenCompleted = false;\r\n private selectedCreditType = \"\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n const query = DomUtil.queryAll.bind(null, element);\r\n const certType = query(\"input[name=certificatecredittype]\");\r\n\r\n this.creditAmountSelector = DomUtil.query(\r\n this._element,\r\n \"[data-initialize-as='credit select']\"\r\n );\r\n\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n\r\n certType.forEach(ct =>\r\n ct.addEventListener(\"change\", () => this.handleCreditTypeChange(ct))\r\n );\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (profile) {\r\n const nameField = DomUtil.query(\r\n this._element,\r\n \"[data-populate-with='fullname']\"\r\n );\r\n\r\n const firstName = profile.firstname || \"\";\r\n const lastName = profile.lastname || \"\";\r\n const fullName = (firstName + \" \" + lastName).trim();\r\n nameField.value = fullName;\r\n }\r\n\r\n const context = this._pageContext;\r\n const uaService = context ? context.userActivityService : null;\r\n if (uaService) {\r\n const currentState = await uaService.currentState();\r\n\r\n currentState.steps.some(step => {\r\n if ((step.type.toLowerCase() === \"claim credit\" || step.type.toLowerCase() === \"healio master class claim credit\") && step.complete) {\r\n this.hasBeenCompleted = true;\r\n\r\n return true;\r\n }\r\n });\r\n }\r\n\r\n const up = context ? context.userProfileService : null;\r\n if (up) {\r\n const ids: string[] = [];\r\n\r\n this._element\r\n .querySelectorAll(\"[data-attribute-crm-fieldid]\")\r\n .forEach(element => {\r\n const fieldIdAttributeName = \"attributeCrmFieldid\";\r\n const fieldId = element.dataset[fieldIdAttributeName];\r\n if (fieldId) {\r\n ids.push(fieldId);\r\n }\r\n });\r\n\r\n if (ids && ids.length > 0) {\r\n let fields;\r\n try{\r\n fields = await up.getCustomFields(ids);\r\n }catch(e){\r\n console.log('Error fetching Custom Fields', e);\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile || profile.isLoggedIn?.toLowerCase() === \"false\") {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null));\r\n\r\n return;\r\n }\r\n }\r\n\r\n if (fields && fields.customFields) {\r\n fields.customFields.map(f => {\r\n const s = `input[data-attribute-crm-fieldid='${f.fieldId}']`;\r\n this._element.querySelectorAll(s).forEach(e => {\r\n const v =\r\n e.dataset.validationType === \"date\" && f.value\r\n ? this.getFormattedDate(new Date(f.value))\r\n : f.value;\r\n console.log(v);\r\n e.value = v;\r\n });\r\n });\r\n }\r\n }\r\n }\r\n\r\n //const firstCreditRad = DomUtil.query(\r\n // this._element,\r\n // \"input[name=certificatecredittype]\"\r\n //);\r\n\r\n //firstCreditRad.checked = true;\r\n //this.handleCreditTypeChange(firstCreditRad);\r\n\r\n this.disableWhenCompleted();\r\n }\r\n\r\n private get datasourceId(): string {\r\n return this._element.dataset.emailDataSourceId || \"\";\r\n }\r\n\r\n private get credits(): number {\r\n const raw = $(\"#CertificateCredit option:selected\").text();\r\n\r\n return Number(raw);\r\n }\r\n\r\n private get maxcredits(): number {\r\n const raw = this.creditAmountSelector.options[0].value;\r\n\r\n return Number(raw);\r\n }\r\n\r\n private get creditType(): string {\r\n const raw = $(\"input[name='certificatecredittype']:checked\").val();\r\n\r\n return String(raw);\r\n }\r\n\r\n private get certTemplate(): string | null {\r\n const selectedElement = this._element.querySelector(\r\n \"input[name='certificatecredittype']:checked\"\r\n );\r\n\r\n const template = selectedElement\r\n ? selectedElement.getAttribute(\"data-credit-type-cert-template\")\r\n : \"\";\r\n\r\n return template;\r\n }\r\n\r\n private get creditTypeInfo(): string | null {\r\n const selectedElement = this._element.querySelector(\r\n \"input[name='certificatecredittype']:checked\"\r\n );\r\n\r\n const info = selectedElement\r\n ? selectedElement.getAttribute(\"data-credit-type-info\")\r\n : \"\";\r\n\r\n return info;\r\n }\r\n\r\n private get accmeSubmissionStatus(): boolean | false {\r\n const selectedElement = this._element.querySelector(\r\n \"input[name='certificatecredittype']:checked\"\r\n );\r\n\r\n const status = selectedElement\r\n ? selectedElement.getAttribute(\"data-accme-submit\")\r\n : \"\";\r\n\r\n if (status === \"enabled\") {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private get creditTypeId(): string | null {\r\n const selectedElement = this._element.querySelector(\r\n \"input[name='certificatecredittype']:checked\"\r\n );\r\n\r\n const creditType = selectedElement\r\n ? selectedElement.getAttribute(\"data-credit-type-id\")\r\n : \"\";\r\n\r\n return creditType;\r\n }\r\n\r\n private get allData(): ReadonlyArray<{ name: string; value: string }> {\r\n return $(\r\n \"[data-component='ClaimCredit'] input,select,textarea:enabled\"\r\n ).serializeArray();\r\n }\r\n\r\n private disableWhenCompleted(): void {\r\n if (!this.hasBeenCompleted) {\r\n return;\r\n }\r\n\r\n const claimCreditRow = DomUtil.query(\r\n this._element,\r\n \"[data-disable-when-completed]\"\r\n );\r\n\r\n if (claimCreditRow) {\r\n // justification? Do we have a class for disabled div\r\n // opacity?\r\n // tslint:disable-next-line: no-magic-numbers\r\n $(claimCreditRow).fadeTo(\"fast\", 0.4);\r\n $(claimCreditRow).find(\":input\").prop(\"disabled\", true);\r\n }\r\n }\r\n\r\n private handleLoadingDisplay(): void {\r\n const loadingDiv = document.querySelector(\"div[data-content='loading']\");\r\n const activityDiv = document.querySelector(\"div[data-content='activity']\");\r\n if (loadingDiv && activityDiv) {\r\n const showLoading = !loadingDiv.classList.contains(\"active\");\r\n if (showLoading) {\r\n loadingDiv.classList.add(\"active\");\r\n activityDiv.classList.add(\"d-none\");\r\n } else {\r\n loadingDiv.classList.remove(\"active\");\r\n activityDiv.classList.remove(\"d-none\");\r\n }\r\n }\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n console.log(\"[Next Button] - ClaimCredit found next event\");\r\n if (this.hasBeenCompleted) {\r\n console.log(\"[Next Button] - ClaimCredit - already complete\");\r\n\r\n return true;\r\n }\r\n\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const userActivityService = context.userActivityService;\r\n if (!userActivityService) {\r\n throw new Error(\"No user activity service\");\r\n }\r\n\r\n const certificateService = context.certificateService;\r\n if (!certificateService) {\r\n throw new Error(\"No certificate service\");\r\n }\r\n\r\n const credits = this.credits;\r\n if (isNaN(credits)) {\r\n // TODO: Show validation to user?\r\n throw new Error(\"Invalid credits\");\r\n }\r\n\r\n const maxcredits = this.maxcredits;\r\n const maxCreditInput = DomUtil.query(\r\n this._element,\r\n \"input[name=certificatemaxcredits]\"\r\n );\r\n if (maxCreditInput && !isNaN(maxcredits)) {\r\n maxCreditInput.value = this.maxcredits.toFixed(2);\r\n }\r\n\r\n const creditType = this.creditType;\r\n if (!creditType || creditType === \"undefined\") {\r\n this.toggleSelectCreditTypeError();\r\n this._element.scrollIntoView({ behavior: \"smooth\"});\r\n return false;\r\n }\r\n\r\n const valid = this.validateCreditQuestions();\r\n if (!valid) {\r\n // TODO: show validation\r\n return false;\r\n }\r\n\r\n console.log(\"[Next Button] - ClaimCredit - passed all validation methods\");\r\n\r\n await this.updateProfileInformation();\r\n\r\n this.handleLoadingDisplay();\r\n await userActivityService.saveCredits(\r\n this.credits,\r\n this.creditType,\r\n this.certTemplate || \"\",\r\n this.creditTypeInfo || \"\",\r\n this.allData\r\n );\r\n\r\n console.log(\"[Next Button] - ClaimCredit - credits saved\");\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (\r\n profile &&\r\n profile.contactid &&\r\n window &&\r\n window.Activity &&\r\n window.Activity.Id\r\n ) {\r\n console.log(\"[Next Button] - ClaimCredit - found profile and activity\");\r\n const activitySiteName = (this._element.dataset.siteName || \"cme-healio\").toLowerCase();\r\n const savedActivity: ISavedPageAddRequest = {\r\n contenttype: [\"cme\"],\r\n documentid: window.Activity.Id,\r\n expires: window.Activity ? window.Activity.Expires || \"\" : \"\",\r\n site: activitySiteName,\r\n title: \"\",\r\n url: \"\",\r\n userid: profile.contactid\r\n };\r\n\r\n const spService = context ? context.savedPageService : null;\r\n if (spService) {\r\n if (savedActivity) {\r\n await spService.remove(savedActivity);\r\n console.log(\"[Next Button] - ClaimCredit = activity saved\");\r\n }\r\n }\r\n\r\n if (this.accmeSubmissionStatus) {\r\n console.log(\"[ACCME] - starting submission process\");\r\n $.ajax({\r\n type: \"GET\",\r\n url: `/edu/accme/send?activityid=${window.Activity.Id}&contactid=${profile.contactid}&certifyingboard=${this.creditType}&credittypeid=${this.creditTypeId}`,\r\n success(d: string): void {\r\n console.log(\"[ACCME] - submitting MOC credits to ACCME\");\r\n },\r\n error(d: Object): void {\r\n console.log(\"[ACCME] - error submitting MOC credits to ACCME\");\r\n },\r\n });\r\n }\r\n }\r\n\r\n await certificateService.email(this.datasourceId);\r\n console.log(\"[Next Button] - ClaimCredit - email sent\");\r\n\r\n return true;\r\n }\r\n\r\n private async updateProfileInformation(): Promise {\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n const ups = context.userProfileService;\r\n\r\n // update profile info\r\n if (ups) {\r\n const fieldsToUpdate: IUserProfileCustomField[] = [];\r\n const s = \"input[data-attribute-crm-readonly='false']\";\r\n this._element.querySelectorAll(s).forEach(element => {\r\n const fieldIdAttributeName = \"attributeCrmFieldid\";\r\n const id = element.dataset[fieldIdAttributeName];\r\n\r\n const createOnlyAttributeName = \"attributeCrmCreateonly\";\r\n const create = element.dataset[createOnlyAttributeName];\r\n\r\n const val = element.value;\r\n\r\n if (id && val) {\r\n fieldsToUpdate.push({\r\n createonly: create === \"true\" ? true : false,\r\n fieldId: id,\r\n value: val\r\n });\r\n }\r\n });\r\n\r\n console.log(fieldsToUpdate);\r\n if (fieldsToUpdate && fieldsToUpdate.length > 0) {\r\n return ups.updateProfile(fieldsToUpdate);\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private toggleSelectCreditTypeError(clearError = false):void{\r\n const certificateSelectElement = this._element.querySelector(\".certificate-select\")\r\n const certificateSelectError = this._element.querySelector(\".certificate-select--error\")\r\n if(clearError) {\r\n certificateSelectElement?.classList.remove(\"incomplete\")\r\n certificateSelectError?.classList.add(\"d-none\")\r\n } else {\r\n certificateSelectElement?.classList.add(\"incomplete\")\r\n certificateSelectError?.classList.remove(\"d-none\")\r\n }\r\n }\r\n\r\n private handleCreditTypeChange(ct: HTMLElement | HTMLInputElement): void {\r\n if (!ct.matches(\"input[type=radio]\")) {\r\n return;\r\n }\r\n\r\n this.toggleSelectCreditTypeError(true)\r\n const rad = ct as HTMLInputElement;\r\n const radValue = rad.value;\r\n this.creditAmountSelector.options.length = 0;\r\n\r\n const creditAmounts = this.creditAmountSelector.getAttribute(\"data-json\");\r\n if (!creditAmounts) {\r\n return;\r\n }\r\n\r\n this.selectedCreditType = radValue;\r\n\r\n const creditTypes = JSON.parse(creditAmounts) as ICreditTypes;\r\n creditTypes.Types.filter(c => c.Type === radValue).map(ca =>\r\n ca.CreditAmounts.map(am => {\r\n const opt = document.createElement(\"option\");\r\n opt.text = am.Amount;\r\n opt.value = am.Amount;\r\n this.creditAmountSelector.options.add(opt);\r\n })\r\n );\r\n\r\n const creditQuestions = document.querySelectorAll(\r\n \"div[data-attribute-credit-question-type]\"\r\n );\r\n if (creditQuestions) {\r\n creditQuestions.forEach(q => {\r\n const attr = \"attributeCreditQuestionType\";\r\n const enable = String(q.dataset[attr]) === radValue;\r\n q.hidden = !enable;\r\n q.querySelectorAll(\"input\").forEach(el => {\r\n if (!enable) {\r\n el.setAttribute(\"disabled\", \"disabled\");\r\n } else {\r\n el.removeAttribute(\"disabled\");\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n private validateCreditQuestions(): boolean {\r\n let isValidOverall = true;\r\n\r\n // tslint:disable-next-line:max-line-length\r\n const selector = `div[data-attribute-credit-question-type='${this.selectedCreditType}']>form>div`;\r\n const creditQuestionContainers = (document.querySelectorAll(\r\n selector\r\n ) as unknown) as HTMLElement[];\r\n if (creditQuestionContainers) {\r\n creditQuestionContainers.forEach(cont => {\r\n const q = cont.querySelector(\"input\");\r\n if (!q) {\r\n isValidOverall = false;\r\n\r\n return;\r\n }\r\n\r\n const inputType = q.dataset.validationType;\r\n const errorSelector = `div[data-attribute-message-for=\"${q.name}\"]`;\r\n const error = cont.querySelector(errorSelector);\r\n\r\n let isQuestionValid;\r\n switch (inputType) {\r\n case \"date\":\r\n isQuestionValid = this.validateDate(q);\r\n break;\r\n case \"text\":\r\n isQuestionValid = this.validateText(q);\r\n break;\r\n case \"checkbox\":\r\n isQuestionValid = this.validateCheckbox(q);\r\n break;\r\n }\r\n\r\n const validationRegex = q.dataset.validationRegex;\r\n if (validationRegex && isQuestionValid){\r\n console.log(\"***** VALIDATION REGEX FOUND: \", validationRegex);\r\n console.log(\"***** VALUE: \", q.value);\r\n const regexp = new RegExp(validationRegex);\r\n isQuestionValid = regexp.test(q.value);\r\n console.log(\"***** RESULT: \", isQuestionValid);\r\n }\r\n\r\n if (isQuestionValid) {\r\n if (error) {\r\n q.classList.remove(\"is-invalid\");\r\n error.style.visibility = \"hidden\";\r\n }\r\n } else {\r\n isValidOverall = false;\r\n if (error) {\r\n q.classList.add(\"is-invalid\");\r\n error.style.visibility = \"visible\";\r\n }\r\n }\r\n });\r\n }\r\n\r\n return isValidOverall;\r\n }\r\n\r\n private validateText(element: HTMLInputElement): boolean {\r\n if (element.value) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private validateDate(element: HTMLInputElement): boolean {\r\n const dateRegex = /(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\\d\\d/i;\r\n\r\n if (element.value && dateRegex.test(element.value)) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private validateCheckbox(element: HTMLInputElement): boolean {\r\n return element.checked;\r\n }\r\n\r\n private getFormattedDate(date: Date): string {\r\n const year = date.getFullYear();\r\n\r\n let month = (date.getMonth() + 1).toString();\r\n month = month.length > 1 ? month : \"0\" + month;\r\n\r\n let day = date.getDate().toString();\r\n day = day.length > 1 ? day : \"0\" + day;\r\n\r\n return `${month}/${day}/${year}`;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ClaimCredit\", ClaimCredit);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class CmeActivityContent extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n const service = context.userActivityService;\r\n if (!service) {\r\n throw new Error(\"No activity service!\");\r\n }\r\n const activity = window.Activity;\r\n if(activity === undefined) { return; }\r\n\r\n const profile = WyanokeUtil.loadUserProfile(true, true);\r\n if (profile !== null) {\r\n // logged in\r\n // lets try to start the current step\r\n const currentStepId = activity.CurrentStepId;\r\n if (currentStepId !== undefined && currentStepId !== null) {\r\n await service.startActivityStep(currentStepId);\r\n }\r\n } else {\r\n // not logged in\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeActivityContent\", CmeActivityContent);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class CmeAttestation extends Component {\r\n\r\n private _profile: IUserProfile | null;\r\n private _attestationCheckBox: HTMLInputElement | null;\r\n private _claimCreditsButton: HTMLButtonElement | null;\r\n\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._profile = null;\r\n this._attestationCheckBox = this._element.querySelector(\"#chkAttest\");\r\n this._claimCreditsButton = this._element.querySelector(\"#btnClaimCredit\");\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n this._profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!this._profile?.contactid) {\r\n this._attestationCheckBox?.addEventListener('change', function () {\r\n window.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null\r\n )\r\n );\r\n this.checked = false;\r\n })\r\n return;\r\n }\r\n const service = context ? context.userActivityService : null;\r\n if (!service) {\r\n console.warn(\"No user activity service available.\");\r\n return;\r\n }\r\n\r\n const statePromise = service.currentState();\r\n const userActivityState = await statePromise;\r\n const posttestStep = userActivityState.steps.find(step => step.type.toLocaleLowerCase().indexOf(\"posttest\") > -1)\r\n if (posttestStep?.complete) {\r\n $(this._element).fadeTo(\"fast\", 0, () => { this._element.remove() });\r\n return;\r\n } else {\r\n if(userActivityState.attestation && this._attestationCheckBox){\r\n this._attestationCheckBox.checked = true;\r\n this._claimCreditsButton?.classList.remove(\"disabled\");\r\n }\r\n this.initAttestation();\r\n }\r\n }\r\n\r\n private initAttestation(): void {\r\n if(!this._profile ||this._profile?.isLoggedIn === \"False\") {\r\n return\r\n }\r\n\r\n const contactId = this._profile?.contactid\r\n const activityId = window.Activity.Id\r\n const claimCreditsButton = this._claimCreditsButton\r\n const attestationCheckBox = this._attestationCheckBox\r\n \r\n claimCreditsButton?.addEventListener('click', function (o) {\r\n var posttestidx = window.Activity.Steps.findIndex((step: any) => step.Type.toLocaleLowerCase().indexOf('posttest') > -1);\r\n var posttest = window.Activity.Steps[posttestidx];\r\n for (var idx = 0; idx < posttestidx; idx++) {\r\n var currentstep = window.Activity.Steps[idx];\r\n var stepdata = {\r\n \"activityid\": activityId,\r\n \"contactid\": contactId,\r\n \"step\": {\r\n \"stepid\": currentstep.Id,\r\n \"title\": currentstep.Title,\r\n \"type\": currentstep.Type,\r\n \"complete\": true,\r\n \"timestamp\": new Date()\r\n }\r\n };\r\n\r\n var stepdatastring = JSON.stringify(stepdata);\r\n\r\n var url = \"/~/edu/updatestep\";\r\n var request = new XMLHttpRequest();\r\n var data = {\r\n data: btoa(\r\n unescape(\r\n encodeURIComponent(stepdatastring)\r\n )\r\n )\r\n };\r\n\r\n request.open(\"POST\", url);\r\n request.setRequestHeader(\"wy-encoded\", \"1\");\r\n request.send(JSON.stringify(data));\r\n request.onreadystatechange = function () {\r\n if (request.readyState == XMLHttpRequest.DONE) {\r\n if (request.status == 200) {\r\n document.location.href = posttest.Url;\r\n } else {\r\n\r\n }\r\n }\r\n };\r\n }\r\n });\r\n\r\n attestationCheckBox?.addEventListener('change', function (this: HTMLInputElement, o: Event) {\r\n if (this.checked) {\r\n claimCreditsButton?.classList.remove(\"disabled\");\r\n var url = \"/~/edu/setattestation/\" + contactId + \"/\" + activityId;\r\n var request = new XMLHttpRequest();\r\n request.open(\"GET\", url);\r\n request.send();\r\n } else {\r\n claimCreditsButton?.classList.add(\"disabled\");\r\n }\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeAttestation\", CmeAttestation);\r\n","import { BackNextButton } from \"../BackNextButton\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UrlUtil } from \"../../util/UrlUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class CmeRequiresPaymentModal extends Component {\r\n private readonly _activityPrice: string | undefined;\r\n private readonly _commerceMode: string | undefined;\r\n private readonly _shouldInit: boolean = true;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n if (\r\n !window.Activity ||\r\n !window.Activity.Price ||\r\n window.Activity.Price === 0\r\n ) {\r\n this._shouldInit = false;\r\n\r\n return;\r\n }\r\n\r\n this._activityPrice = window.Activity.Price.toString();\r\n const priceSpan = this._element.querySelector(\"[data-product='price']\");\r\n if (priceSpan && this._activityPrice) {\r\n priceSpan.textContent = this._activityPrice;\r\n }\r\n\r\n this._commerceMode = window.Activity.CommerceMode;\r\n }\r\n\r\n public async init(): Promise {\r\n if (!this._shouldInit) {\r\n $(\".btn-start-activity\").show();\r\n $(\"#main-content\").show();\r\n\r\n return;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (!profile) {\r\n $(\".btn-start-activity\").show();\r\n\r\n return;\r\n }\r\n\r\n const activityId =\r\n window.Activity && window.Activity.Id ? window.Activity.Id : \"\";\r\n let hasPurchased = false;\r\n\r\n if (profile.purchased && activityId) {\r\n hasPurchased = profile.purchased.some(\r\n p => p.toLowerCase() === activityId.toLowerCase()\r\n );\r\n }\r\n\r\n let isComplete = false;\r\n if (profile.completedactivities && activityId) {\r\n isComplete = profile.completedactivities.some(\r\n p => p.toLowerCase() === activityId.toLowerCase()\r\n );\r\n }\r\n\r\n // if the user is not logged in or has already purchased => exit\r\n if (\r\n hasPurchased ||\r\n isComplete ||\r\n (profile.hasjrnlaccess && profile.hasjrnlaccess.toLowerCase() === \"true\")\r\n ) {\r\n $(\".btn-start-activity\").text(\"Start Activity\");\r\n $(\".btn-start-activity\").show();\r\n\r\n return;\r\n }\r\n\r\n $(\".btn-start-activity\").show();\r\n\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n\r\n const queryStringMap = UrlUtil.getQueryString();\r\n const requireQuery = queryStringMap.get(\"require\");\r\n if (requireQuery !== undefined && requireQuery.indexOf(\"payment\") > -1) {\r\n $(this._element).modal(\"show\");\r\n }\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n if (this._commerceMode === \"bc\" && window.location.href.indexOf(\"cart=1\") === -1) {\r\n console.log(\r\n \"[Next Button] - [Big Commerce] CmeRequiresPayment - flipping views.\"\r\n );\r\n const queryStringAppendCharacter = window.location.href.indexOf(\"?\") > -1 ? \"&\" : \"?\";\r\n window.location.href = window.location.href + queryStringAppendCharacter +\"cart=1\";\r\n\r\n return false;\r\n }\r\n\r\n console.log(\"[Next Button] - CmeRequiresPayment - showing modal\");\r\n $(this._element).modal(\"show\");\r\n\r\n return false;\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"CmeRequiresPaymentModal\",\r\n CmeRequiresPaymentModal\r\n);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class CmeTestFailedModal extends Component {\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n // we'll need to get the event from where the test validation takes place\r\n window.addEventListener(\"cmetestfailed\", () =>\r\n $(this._element).modal(\"show\")\r\n );\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeTestFailedModal\", CmeTestFailedModal);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { BackNextButton } from \"../../components/BackNextButton\";\r\n\r\nexport class CmeTestPassedModal extends Component {\r\n private readonly _continueElement: HTMLElement | null;\r\n private readonly _evalUrl: string | undefined;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this._continueElement = this._element.querySelector(\r\n \"[data-modal-action='continue']\"\r\n );\r\n\r\n this._evalUrl = this.evaluationUrl;\r\n if (!this._evalUrl || this._evalUrl.length <= 0) {\r\n console.warn(\"Unable to get Evaluation Url for Cme Passed Test Modal\");\r\n\r\n return;\r\n }\r\n if (this._continueElement) {\r\n this._continueElement.addEventListener(\"click\", ev =>\r\n this.handleContinueConfirmed(ev)\r\n );\r\n } else {\r\n console.warn(\"Unable to find continue action in Cme Passed Test Modal\");\r\n }\r\n // we'll need to get the event from where the test validation takes place\r\n window.addEventListener(\"cmetestpassed\", () =>\r\n $(this._element).modal(\"show\")\r\n );\r\n }\r\n\r\n private get evaluationUrl(): string | undefined {\r\n if (\r\n !window.Activity ||\r\n !window.Activity.Steps ||\r\n window.Activity.Steps.length < 1\r\n ) {\r\n return undefined;\r\n }\r\n const evaluationStep = window.Activity.Steps.find((step : any) => {\r\n if (step && step.Type && step.Type.toLowerCase().endsWith(\"evaluation\")) {\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n if (evaluationStep) {\r\n return evaluationStep.Url;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n private handleContinueConfirmed(ev: Event): void {\r\n ev.preventDefault();\r\n // Try hooking up to the \"BackNextButton\" component first\r\n // -- the \"Next\" button may have functionality\r\n // listening for a click event.\r\n const context = this._pageContext;\r\n const backNext = context\r\n ? context.componentFactory.getComponent(BackNextButton)\r\n : null;\r\n if (backNext) {\r\n console.log(\"clicking the next button\");\r\n backNext.next();\r\n } else {\r\n console.log(`changing location to ${this._evalUrl}`);\r\n // Then default to jumping to eval\r\n if (this._evalUrl) {\r\n window.location.href = this._evalUrl;\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeTestPassedModal\", CmeTestPassedModal);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { BackNextButton } from \"../BackNextButton\";\r\n\r\nexport class CommerceStartActivity extends Component {\r\n public static readonly NextNavigationEvent: string = \"NextNavigationEvent\";\r\n public static readonly AboutToContinueEvent: string = \"AboutToContinueEvent\";\r\n public static readonly UpdateStepsEvent: string = \"UpdateStepsEvent\";\r\n\r\n private readonly _next: HTMLButtonElement;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this._next = DomUtil.query(element, \"button[data-action='next']\");\r\n this._next.addEventListener(\"click\", ev => this.handleNext(ev));\r\n window.addEventListener(\"activity.commercestartactivity.next\", ev =>\r\n this.handleNext(ev)\r\n );\r\n }\r\n\r\n public next(): void {\r\n const click = EventUtil.createCustomEvent(\"click\", null);\r\n this._next.dispatchEvent(click);\r\n }\r\n\r\n private async handleNext(ev: Event): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null\r\n )\r\n );\r\n\r\n return;\r\n }\r\n\r\n ev.stopPropagation();\r\n\r\n const aboutToContinuePromise = EventUtil.dispatchAsyncEvent(\r\n this._element,\r\n BackNextButton.UpdateStepsEvent\r\n );\r\n\r\n await aboutToContinuePromise;\r\n\r\n const href = this._next.dataset.href;\r\n if (href) {\r\n window.location.href = href;\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"CommerceStartActivity\",\r\n CommerceStartActivity\r\n);\r\n","import { Leaving } from \"../../behaviors\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { ILeavingParams } from \"../../models/Behavior/ILeavingParams\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class LeavingCmeModal extends Component {\r\n private readonly _activityUrl: string;\r\n private readonly _leaving: Leaving | null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._leaving = null;\r\n this._activityUrl = window.Activity ? window.Activity.Url || \"\" : \"\";\r\n if (this._activityUrl.length <= 0) {\r\n console.warn(\"Unable to get Activity Url for LeavingCmeModal\");\r\n\r\n return;\r\n }\r\n const leavingParams : ILeavingParams = {\r\n externalLinksFilter: this.filterExternalLinks,\r\n trackingCategory : \"CME Center Outbound Links\",\r\n trackingUrl: this._activityUrl,\r\n };\r\n\r\n this._leaving = new Leaving(element, pageContext, leavingParams);\r\n }\r\n\r\n public async init(): Promise {\r\n if(!this._leaving){\r\n return;\r\n }\r\n const leavingBound = await this._leaving.bind();\r\n if(!leavingBound) {\r\n console.warn(\"LeavingCmeModal was not bound\");\r\n\r\n return;\r\n }\r\n }\r\n\r\n private filterExternalLinks(element: HTMLAnchorElement, index: number, array: HTMLAnchorElement[]): boolean {\r\n return(element.href.indexOf(window.location.pathname.split('/')[1]) === -1 && element.href.indexOf(\"://\") !== -1);\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LeavingCmeModal\", LeavingCmeModal);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QuestionGroupModel } from \"../../models/QuestionGroup/QuestionGroupModel\";\r\nimport { QuestionModel } from \"../../models/QuestionGroup/QuestionModel\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class PollQuestion extends Component {\r\n context = {\r\n complete: false,\r\n id: \"00000000-0000-0000-0000-false\",\r\n interspersedCorrectIncorrectFeedback: true,\r\n interspersedRationaleFeedback: false,\r\n minscore: 0,\r\n questionGroupType: \"poll\",\r\n requireall: false,\r\n scored: false,\r\n taTimer: -1,\r\n };\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n\r\n // load context id\r\n this.context.id =\r\n this._element.getAttribute(\"data-questiongroup-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\";\r\n\r\n // load type\r\n const t = this._element.getAttribute(\"data-questiongroup-type\");\r\n this.context.questionGroupType = t ? t : \"poll\";\r\n\r\n await this.setQuestionData();\r\n\r\n this._element\r\n .querySelector(\"#submitPollButton\")\r\n ?.addEventListener(\"click\", ev => this.submitPoll());\r\n }\r\n\r\n private async setQuestionData(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No QuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n const questionGroupData = await service.getAnswers(this.context.id);\r\n if (questionGroupData && questionGroupData.questiongroupid) {\r\n this._element.setAttribute(\r\n \"data-questiongroup-complete\",\r\n (questionGroupData.complete || 0).toString()\r\n );\r\n this.context.complete = (questionGroupData.complete || 0) === 1;\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (questionGroupData.complete === 1\r\n ? questionGroupData.attempt\r\n : questionGroupData.attempt + 1\r\n ).toString()\r\n );\r\n questionGroupData.questions.forEach(q => {\r\n const qe = this._element.querySelector(\r\n '[data-question-id=\"' + q.questionid + '\"]'\r\n );\r\n if (qe) {\r\n const qeType = qe.getAttribute(\"data-question-type\") || \"\";\r\n if (qeType.toLowerCase() !== \"open ended\") {\r\n q.answers.forEach(a => {\r\n const ae = qe.querySelector(\r\n '[data-answer-id=\"' + a.answerid + '\"]'\r\n );\r\n if (ae) {\r\n (ae as HTMLInputElement).checked = true;\r\n }\r\n });\r\n } else {\r\n const ae = qe.querySelector(\"textarea\");\r\n const av = q.answers.length > 0 ? q.answers[0].text : \"\";\r\n if (ae) {\r\n ae.value = av;\r\n }\r\n }\r\n }\r\n });\r\n if (questionGroupData.complete === 1) {\r\n console.log(\"disabling questions\");\r\n this.disableAllQuestions();\r\n }\r\n }\r\n }\r\n\r\n private disableAllQuestions(): void {\r\n this._element.querySelectorAll(\"input, textarea\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(e => {\r\n if (e) {\r\n e.querySelectorAll(\r\n \"[data-message=incomplete],[data-message=incorrect]\"\r\n ).forEach(m => {\r\n if (!m.classList.contains(\"d-none\")) {\r\n m.classList.add(\"d-none\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private collectQuestionGroupData({\r\n _profile,\r\n _qg,\r\n }: {\r\n _qg: Element;\r\n _profile: IUserProfile;\r\n }): QuestionGroupModel {\r\n const activity = window.Activity || {};\r\n const questionGroup = new QuestionGroupModel(\r\n _qg.getAttribute(\"data-questiongroup-id\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-title\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-type\") || \"\",\r\n Number(_qg.getAttribute(\"data-questiongroup-minscore\")),\r\n _profile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n activity.Id || \"00000000-0000-0000-0000-000000000000\",\r\n Number(_qg.getAttribute(\"data-questiongroup-attempt\") || 1),\r\n _qg.getAttribute(\"data-questiongroup-attemptdate\") ||\r\n new Date().toISOString(),\r\n Number(_qg.getAttribute(\"data-questiongroup-complete\"))\r\n );\r\n const questions = _qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(q => {\r\n const question = new QuestionModel(\r\n q.getAttribute(\"data-question-id\") || \"\",\r\n q.getAttribute(\"data-question-text\") || \"\",\r\n q.getAttribute(\"data-question-type\") || \"\",\r\n q.getAttribute(\"data-question-key\") || \"\"\r\n );\r\n const answers = this._element.querySelectorAll(\"[data-answer-id]\");\r\n if (answers.length > 0) {\r\n this.context.complete = true;\r\n questionGroup.complete = Number(1);\r\n }\r\n answers.forEach(a => {\r\n if (a.tagName === \"TEXTAREA\") {\r\n question.answers.push({\r\n answerid: \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: \"\"\r\n });\r\n } else {\r\n if ((a as HTMLInputElement).checked) {\r\n question.answers.push({\r\n answerid:\r\n a.getAttribute(\"data-answer-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: \"\"\r\n });\r\n }\r\n }\r\n });\r\n questionGroup.questions.push(question);\r\n });\r\n\r\n return questionGroup;\r\n }\r\n\r\n private async submitPoll(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n // todo show login modal\r\n return;\r\n }\r\n\r\n await this.saveQuestionGroup(profile);\r\n\r\n return;\r\n }\r\n\r\n private async saveQuestionGroup(\r\n profile: IUserProfile\r\n ): Promise {\r\n const qgd = this.collectQuestionGroupData({\r\n _profile: profile,\r\n _qg: this._element,\r\n });\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No QuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n console.log(qgd);\r\n const saved = await service.saveAnswers(qgd);\r\n if (!saved) {\r\n console.warn(\"QuestionGroup was not saved\");\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"PollQuestion\", PollQuestion);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class HealioErrorModal extends Component {\r\n public static readonly HealioErrorEvent = \"HealioErrorEvent\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n window.addEventListener(HealioErrorModal.HealioErrorEvent, ev =>\r\n this.showModal());\r\n }\r\n public static triggerHealioErrorModalEvent() : void {\r\n window.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioErrorModal.HealioErrorEvent, null\r\n ));\r\n }\r\n\r\n private showModal(): void {\r\n $(this._element).modal(\"show\");\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\nComponentFactory.registerComponent(\"HealioErrorModal\",\r\nHealioErrorModal);\r\n","import { IQuestionGroupModel } from \"./IQuestionGroupModel\";\r\nimport { IQuestionModel } from \"./IQuestionModel\";\r\n\r\nexport class QuestionGroupModel implements IQuestionGroupModel {\r\n public questiongroupid: string;\r\n public name: string;\r\n public type: string;\r\n public minscore: number;\r\n public userid: string;\r\n public activityid: string;\r\n public attempt: number;\r\n public attemptdate: string;\r\n public complete: number;\r\n public questions: IQuestionModel[];\r\n public firstanswers: IQuestionModel[];\r\n\r\n constructor(\r\n _id?: string,\r\n _name?: string,\r\n _type?: string,\r\n _minscore?: number,\r\n _userid?: string,\r\n _activityid?: string,\r\n _attempt?: number,\r\n _attemptdate?: string,\r\n _complete?: number\r\n ) {\r\n this.questiongroupid = _id || \"\";\r\n this.name = _name || \"\";\r\n this.type = _type || \"\";\r\n this.minscore = _minscore || 0;\r\n this.userid = _userid || \"\";\r\n this.activityid = _activityid || \"\";\r\n this.attempt = _attempt || 0;\r\n this.attemptdate = _attemptdate || \"\";\r\n this.complete = _complete || 0;\r\n this.questions = [];\r\n this.firstanswers = [];\r\n }\r\n}\r\n","import { IQuestionModel } from \"./IQuestionModel\";\r\nimport { IAnswerModel } from \"./IAnswerModel\";\r\n\r\nexport class QuestionModel implements IQuestionModel {\r\n public questionid: string;\r\n public text: string;\r\n public type: string;\r\n public key: string;\r\n public answers: IAnswerModel[];\r\n\r\n constructor(_id: string, _text: string, _type: string, _key: string) {\r\n this.questionid = _id;\r\n this.text = _text;\r\n this.type = _type;\r\n this.key = _key;\r\n this.answers = [];\r\n }\r\n}\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ProgressBar extends Component {\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n return this.updateProgressBar();\r\n }\r\n\r\n public set progress(value: number) {\r\n this._element.setAttribute(\r\n \"style\",\r\n \"transform: scaleX(\" + value.toString() + \");\");\r\n }\r\n\r\n private async updateProgressBar(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.userActivityService : null;\r\n\r\n if (!service) {\r\n return;\r\n }\r\n\r\n const currentState = await service.currentState();\r\n\r\n if (currentState) {\r\n if (currentState.certificate && currentState.certificate.date){\r\n this.progress = 1;\r\n } else{\r\n let laststep = 0;\r\n currentState.steps.forEach((step, idx) => {\r\n if (step.complete) {\r\n laststep = idx + 1;\r\n }\r\n });\r\n\r\n this.progress = laststep / currentState.steps.length;\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ProgressBar\", ProgressBar);\r\n","import { BackNextButton } from \"../BackNextButton\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioErrorModal } from \"../../components/healioGlobal/HealioErrorModal\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QuestionGroupModel } from \"../../models/QuestionGroup/QuestionGroupModel\";\r\nimport { QuestionModel } from \"../../models/QuestionGroup/QuestionModel\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class QuestionGroup extends Component {\r\n context = {\r\n complete: false,\r\n id: \"00000000-0000-0000-0000-000000000000\",\r\n interspersedCorrectIncorrectFeedback: true,\r\n interspersedRationaleFeedback: true,\r\n minscore: 0,\r\n questionGroupName: \"\",\r\n questionGroupType: \"\",\r\n requireall: false,\r\n scored: false,\r\n taTimer: -1,\r\n singletake: false,\r\n };\r\n\r\n firstanswers: Array = [];\r\n\r\n readonly correctClass = \"correct\";\r\n readonly incorrectClass = \"incorrect\";\r\n readonly incompleteClass = \"incomplete\";\r\n readonly base10 = 10;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n private static getFirstAnswer(id: string, fa: Array): QuestionModel {\r\n return fa.filter(qg => qg.questionid === id)[0];\r\n }\r\n\r\n private async collectQuestionGroupData(_profile: IUserProfile, _qg: HTMLElement): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No QuestionGroup Service available. Previous question group data could be overwritten.\");\r\n }\r\n const activity = window.Activity || {};\r\n const questiongroupId = _qg.getAttribute(\"data-questiongroup-id\") || \"\";\r\n if (questiongroupId.length < 36) {\r\n return new QuestionGroupModel();\r\n }\r\n const existingQuestionGroup = await service?.getAnswers(questiongroupId) || null;\r\n const existingQuestions = existingQuestionGroup?.questions || null;\r\n\r\n const questionGroup = new QuestionGroupModel(\r\n questiongroupId,\r\n _qg.getAttribute(\"data-questiongroup-title\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-type\") || \"\",\r\n Number(_qg.getAttribute(\"data-questiongroup-minscore\")),\r\n _profile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n activity.Id || \"00000000-0000-0000-0000-000000000000\",\r\n Number(_qg.getAttribute(\"data-questiongroup-attempt\") || 1),\r\n _qg.getAttribute(\"data-questiongroup-attemptdate\") ||\r\n new Date().toISOString(),\r\n Number(_qg.getAttribute(\"data-questiongroup-complete\"))\r\n );\r\n\r\n questionGroup.firstanswers = existingQuestionGroup?.firstanswers || [];\r\n\r\n const questions = _qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(q => {\r\n const questionId = q.getAttribute(\"data-question-id\") || \"\";\r\n if (questionId.length < 36) {\r\n return false;\r\n }\r\n let question = new QuestionModel(\r\n questionId,\r\n q.getAttribute(\"data-question-text\") || \"\",\r\n q.getAttribute(\"data-question-type\") || \"\",\r\n q.getAttribute(\"data-question-key\") || \"\"\r\n );\r\n const existingQuestion = existingQuestions?.find(eq => { eq.questionid === questionId });\r\n if (existingQuestion !== undefined) {\r\n question = existingQuestion;\r\n question.answers = []; // clear the existing answers, we have new ones.\r\n }\r\n const answers = q.querySelectorAll(\"[data-answer-id]\");\r\n answers.forEach(a => {\r\n if (a.tagName === \"TEXTAREA\") {\r\n question.answers.push({\r\n answerid: \"00000000-0000-0000-0000-000000000000\",\r\n confidence: (q.querySelector(\"[data-rate-question-id]:checked\") as HTMLInputElement)?.value || \"\",\r\n text: (a as HTMLInputElement).value || \"\"\r\n });\r\n } else {\r\n if ((a as HTMLInputElement).checked) {\r\n question.answers.push({\r\n answerid:\r\n a.getAttribute(\"data-answer-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\",\r\n confidence: (q.querySelector(\"[data-rate-question-id]:checked\") as HTMLInputElement)?.value || \"\",\r\n text: (a as HTMLInputElement).value || \"\"\r\n });\r\n }\r\n }\r\n });\r\n questionGroup.questions.push(question);\r\n\r\n // if there are no answers selected, skip this part.\r\n if (question.answers.length > 0) {\r\n const firstanswer = (q.getAttribute(\"data-first-answer\") || \"1\") === \"1\";\r\n if (firstanswer === true) {\r\n const qafaTest = questionGroup.firstanswers.filter(qfa => qfa.questionid === question.questionid);\r\n const thisfaTest = this.firstanswers.filter(fa => fa.questionid === question.questionid);\r\n\r\n if (qafaTest.length === 0) {\r\n questionGroup.firstanswers.push(question);\r\n }\r\n\r\n if (thisfaTest.length === 0) {\r\n this.firstanswers.push(question);\r\n }\r\n\r\n q.setAttribute(\"data-first-answer\", \"0\");\r\n } else {\r\n var fqa = QuestionGroup.getFirstAnswer(question.questionid, questionGroup.firstanswers);\r\n if (fqa !== undefined && fqa !== null) {\r\n if ((fqa.answers.length === 0 && question.answers.length > 0) ||\r\n question.answers.some(q => q.confidence) && !fqa.answers.some(q => q.confidence)) {\r\n fqa.answers = question.answers;\r\n }\r\n\r\n const qafaTest = questionGroup.firstanswers.filter(qfa => qfa.questionid === fqa.questionid);\r\n if (qafaTest.length === 0) {\r\n questionGroup.firstanswers.push(fqa);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n //make sure we're including existing questions in the data so we don't remove them on update.\r\n existingQuestions?.forEach(q => {\r\n const foundQuestion = questionGroup.questions.find(qq => {\r\n return qq.questionid === q.questionid\r\n });\r\n\r\n if (foundQuestion === undefined) {\r\n questionGroup.questions.push(q);\r\n }\r\n });\r\n\r\n return questionGroup;\r\n }\r\n\r\n public async init(): Promise {\r\n this.context.id =\r\n this._element.getAttribute(\"data-questiongroup-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\";\r\n this.context.complete =\r\n this._element.getAttribute(\"data-questiongroup-complete\") === \"1\";\r\n this.context.minscore = Number.parseInt(\r\n this._element.getAttribute(\"data-questiongroup-minscore\") || \"0\",\r\n this.base10\r\n );\r\n this.context.requireall =\r\n (this._element.getAttribute(\"data-questiongroup-require-all\") || \"0\") ===\r\n \"1\";\r\n this.context.scored =\r\n (this._element.getAttribute(\"data-questiongroup-scored\") || \"0\") === \"1\";\r\n\r\n this.context.interspersedCorrectIncorrectFeedback =\r\n (this._element.getAttribute(\r\n \"data-interspersed-show-correct-incorrect-feedback\"\r\n ) || \"0\") === \"True\";\r\n this.context.interspersedRationaleFeedback =\r\n (this._element.getAttribute(\"data-interspersed-rationale-feedback\") ||\r\n \"0\") === \"True\";\r\n this.context.singletake =\r\n (this._element.getAttribute(\"data-questiongroup-singletake\") ||\r\n \"0\") === \"1\";\r\n\r\n const t = this._element.getAttribute(\"data-questiongroup-type\");\r\n this.context.questionGroupType = t ? t : \"\";\r\n\r\n const n = this._element.getAttribute(\"data-questiongroup-title\");\r\n this.context.questionGroupName = n ? n : \"\";\r\n\r\n if (!this.context.complete) {\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n if(this.context.questionGroupType === \"outcome survey\"){\r\n $(\"#questionForm\").hide();\r\n $(\"#loginRequired\").show();\r\n $(\"#surveyComplete\").hide();\r\n $(\"#navButtons\").hide();\r\n }\r\n return;\r\n }\r\n await this.setQuestionData(this.context.id);\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \"input[type=radio],input[type=checkbox]\"\r\n );\r\n const textAnswers = this._element.querySelectorAll(\"textarea\");\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.inputChanged(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"keyup\", ev => this.bufferTextAreaChange(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"blur\", ev => this.textAreaOnBlur(ev));\r\n });\r\n this._element.querySelectorAll(\"#submit-button\")?.forEach(element => {\r\n element.addEventListener(\"click\", ev => this.submit());\r\n });\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n if (this.context.complete) {\r\n console.log(\"[Next Button] - QuestionGroup - already complete\");\r\n\r\n return true;\r\n }\r\n\r\n if (!this.context.questionGroupName.startsWith(\"interspersed\")) {\r\n this.clearAllQuestionClasses();\r\n }\r\n if (this.context.requireall || this.context.scored) {\r\n const valid = this.doValidation();\r\n if (!valid) {\r\n return false;\r\n }\r\n }\r\n\r\n if (this.context.questionGroupType === \"outcome survey\") {\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n await this.saveQuestionGroup();\r\n $(\"#questionForm\").hide();\r\n $(\"#loginRequired\").hide();\r\n $(\"#surveyComplete\").show();\r\n $(\".button-nav__button--next\").hide();\r\n return false;\r\n }\r\n\r\n if (\r\n this.context.scored &&\r\n !this.context.questionGroupName.startsWith(\"interspersed\")\r\n ) {\r\n console.log(\"[Next Button] - QuestionGroup - scoring...\");\r\n const pass = this.doScoring();\r\n if (!pass) {\r\n if (!this.context.singletake) {\r\n await this.saveQuestionGroup();\r\n const attempt = Number.parseInt(\r\n this._element.getAttribute(\"data-questiongroup-attempt\") || \"1\",\r\n this.base10\r\n );\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (attempt + 1).toString()\r\n );\r\n } else {\r\n console.log(\"[Next Button] - QuestionGroup - not scoring [failed]...\");\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n await this.saveQuestionGroup();\r\n this.disableAllQuestions();\r\n this.showRationale();\r\n const context = this._pageContext;\r\n const backNext = context\r\n ? context.componentFactory.getComponent(BackNextButton)\r\n : null;\r\n if (backNext) {\r\n console.log(\"disabling the next button\");\r\n backNext.disableNext();\r\n }\r\n const cmetestfailed = EventUtil.createCustomEvent(\r\n \"cmetestfailed\",\r\n null\r\n );\r\n window.dispatchEvent(cmetestfailed);\r\n }\r\n } else {\r\n console.log(\"[Next Button] - QuestionGroup - not scoring [passed]...\");\r\n const questionGroupSaved = await this.saveQuestionGroup();\r\n if (!questionGroupSaved) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return false;\r\n }\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n this.disableAllQuestions();\r\n this.showRationale();\r\n const cmetestpassed = EventUtil.createCustomEvent(\r\n \"cmetestpassed\",\r\n null\r\n );\r\n window.dispatchEvent(cmetestpassed);\r\n }\r\n\r\n console.log(\"[Next Button] - QuestionGroup - returning false\");\r\n\r\n return false;\r\n }\r\n\r\n const questionGroupSaved = await this.saveQuestionGroup();\r\n if (!questionGroupSaved) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return false;\r\n }\r\n\r\n if (!this.context.scored) {\r\n console.log(\"[Next Button] - Not scored, setting complete\");\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n }\r\n console.log(\r\n \"[Next Button] - QuestionGroup -questions saved returning true\"\r\n );\r\n\r\n return true;\r\n }\r\n\r\n private showRationale(): void {\r\n const passmsg = this._element.querySelector(\"[data-message=passed]\");\r\n const failmsg = this._element.querySelector(\"[data-message=fail]\");\r\n const tryagain = this._element.querySelector(\"[data-message=incorrect]\");\r\n if (passmsg && !passmsg.classList.contains(\"d-none\")) {\r\n passmsg.classList.add(\"d-none\");\r\n }\r\n if (failmsg && !failmsg.classList.contains(\"d-none\")) {\r\n failmsg.classList.add(\"d-none\");\r\n }\r\n if (tryagain && !tryagain.classList.contains(\"d-none\")) {\r\n tryagain.classList.add(\"d-none\");\r\n }\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(question => {\r\n const qr = question.querySelector(\"[data-message=rationale]\");\r\n if (qr && (question.querySelectorAll(\"input:checked\").length > 0)) {\r\n qr.classList.remove(\"d-none\");\r\n }\r\n });\r\n }\r\n\r\n private doValidation(): boolean {\r\n let valid = true;\r\n const qg = this._element;\r\n const questions = qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(question => {\r\n if (question.getAttribute(\"data-question-type\") !== \"open ended\") {\r\n const answers = question.querySelectorAll(\"[data-answer-id]:checked\");\r\n if (answers.length < 1) {\r\n valid = false;\r\n question.classList.add(this.incompleteClass);\r\n this.showMessage(question, \"incomplete\");\r\n }\r\n\r\n const confidenceGroup = question.querySelector(\".confidence-rating-group\");\r\n if (confidenceGroup) {\r\n const confidenceAnswers = question.querySelectorAll(\"[data-rate-question-id]:checked\");\r\n if (confidenceAnswers.length < 1) {\r\n valid = false;\r\n question.classList.add(this.incompleteClass);\r\n this.showMessage(question, \"incomplete\");\r\n }\r\n }\r\n } else if(question.getAttribute(\"data-question-type\") === \"open ended\" && question.getAttribute(\"data-question-required\") === \"1\") {\r\n let minlength = parseInt(question.getAttribute(\"data-required-length\") || \"1\");\r\n let textarea = question.querySelector(\"textarea\");\r\n let textareaval = textarea?.value?.trim() || \"\";\r\n let anslen = (textareaval.length || 0);\r\n let pattern = /^[a-z0-9]+/img;\r\n let regex = new RegExp(pattern);\r\n if(anslen < minlength && regex.test(textareaval)) {\r\n valid = false;\r\n question.classList.add(this.incompleteClass);\r\n this.showMessage(question, \"incomplete\");\r\n }\r\n }\r\n });\r\n const incompletearray = this._element.querySelectorAll(\r\n `.${this.incompleteClass}`\r\n );\r\n\r\n const firstincomplete = incompletearray ? incompletearray[0] : null;\r\n if (firstincomplete) {\r\n UiUtil.animateScroll(firstincomplete);\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n private submit(): void {\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n void this.saveQuestionGroup();\r\n this.doScoring();\r\n this.showRationale();\r\n this._element\r\n .querySelectorAll(\"#submit-button\")\r\n ?.forEach(element => {\r\n element.classList.add(\"disabled\");\r\n element.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n }\r\n\r\n // no-inferrable-types conflicts with must have typedef...\r\n // tslint:disable-next-line:no-inferrable-types\r\n private doScoring(scroll: boolean = true): boolean {\r\n const minscore = this.context.minscore;\r\n // if (minscore < 1 && this.context.scored) {\r\n // return true;\r\n // }\r\n let pass = true;\r\n let correct = 0;\r\n const qg = this._element;\r\n const questions = qg.querySelectorAll(\"[data-question-id]\");\r\n const passmsg = this._element.querySelector(\"[data-message=passed]\");\r\n const failmsg = this._element.querySelector(\"[data-message=fail]\");\r\n const infotext = this._element.querySelector(\"#interspersed-info-text\");\r\n\r\n if (passmsg && !passmsg.classList.contains(\"d-none\")) {\r\n passmsg.classList.add(\"d-none\");\r\n }\r\n if (failmsg && !failmsg.classList.contains(\"d-none\")) {\r\n failmsg.classList.add(\"d-none\");\r\n }\r\n if (infotext && !infotext.classList.contains(\"d-none\")) {\r\n infotext.classList.add(\"d-none\");\r\n }\r\n\r\n questions.forEach(question => {\r\n const type = question.getAttribute(\"data-question-type\");\r\n const key = (question.getAttribute(\"data-question-key\") || \"\").split(\",\");\r\n const answers = Array.from(\r\n question.querySelectorAll(\"[data-answer-id]:checked\")\r\n ).map(answer => answer.getAttribute(\"data-answer-id\"));\r\n if (key.length < 1) {\r\n correct += 1;\r\n\r\n return false;\r\n }\r\n if (answers.length < 1) {\r\n return false;\r\n }\r\n switch (type) {\r\n case \"multiple answer\":\r\n if (this.context.questionGroupName.startsWith(\"interspersed\")) {\r\n question\r\n .querySelectorAll(\"[data-answer-id]:checked\")\r\n .forEach(a => {\r\n if (\r\n key.some(k => {\r\n return k === a.getAttribute(\"data-answer-id\");\r\n })\r\n ) {\r\n console.log(a);\r\n a.parentElement?.classList.add(\"correct\");\r\n } else {\r\n a.parentElement?.classList.add(\"incorrect\");\r\n }\r\n });\r\n }\r\n if (\r\n answers.every(a => key.some(k => k === a)) &&\r\n key.every(k => answers.some(a => a === k))\r\n ) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n this.hideMessage(question, \"incorrect\");\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n this.showMessage(question, \"incorrect\");\r\n }\r\n break;\r\n case \"multiple choice\":\r\n if (key.some(k => (answers.length > 0 ? answers[0] : \"\") === k)) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n this.hideMessage(question, \"incorrect\");\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n this.showMessage(question, \"incorrect\");\r\n }\r\n break;\r\n case \"non scored\":\r\n break;\r\n default:\r\n correct += 1;\r\n break;\r\n }\r\n });\r\n\r\n pass =\r\n this.context.questionGroupName.startsWith(\"interspersed\") &&\r\n !this.context.requireall\r\n ? correct === questions.length\r\n : correct >= minscore;\r\n if (pass) {\r\n if (passmsg) {\r\n passmsg.classList.remove(\"d-none\");\r\n }\r\n } else {\r\n if (failmsg) {\r\n failmsg.classList.remove(\"d-none\");\r\n }\r\n }\r\n if (pass && scroll) {\r\n UiUtil.animateScroll(this._element);\r\n\r\n return pass;\r\n }\r\n const incorrectarray = this._element.querySelectorAll(\r\n `.${this.incorrectClass}`\r\n );\r\n const firstincorrect = incorrectarray ? incorrectarray[0] : null;\r\n if (scroll) {\r\n if (firstincorrect) {\r\n UiUtil.animateScroll(firstincorrect);\r\n } else {\r\n UiUtil.animateScroll(this._element);\r\n }\r\n }\r\n\r\n return pass;\r\n }\r\n\r\n private showMessage(question: Element, message: string): void {\r\n const eb = question.querySelector(`[data-message=${message}]`);\r\n if (eb) {\r\n eb.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n private hideMessage(question: Element, message: string): void {\r\n const eb = question.querySelector(`[data-message=${message}]`);\r\n if (eb) {\r\n if (!eb.classList.contains(\"d-none\")) {\r\n eb.classList.add(\"d-none\");\r\n }\r\n }\r\n }\r\n\r\n private clearAllQuestionClasses(): void {\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(question => {\r\n this.clearQuestionClasses(question);\r\n });\r\n }\r\n\r\n private clearQuestionClasses(question: Element): void {\r\n question.classList.remove(this.correctClass);\r\n question.classList.remove(this.incorrectClass);\r\n question.classList.remove(this.incompleteClass);\r\n question.querySelectorAll(\"[data-answer-id]\").forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.remove(this.correctClass);\r\n wrapper.classList.remove(this.incorrectClass);\r\n }\r\n });\r\n const eba = question.querySelectorAll(\"[data-message]\");\r\n eba.forEach(eb => {\r\n if (eb) {\r\n if (!eb.classList.contains(\"d-none\")) {\r\n eb.classList.add(\"d-none\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private disableAllQuestions(): void {\r\n this._element.querySelectorAll(\"input, textarea\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"#submit-button\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n e.classList.add(\"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(e => {\r\n if (e) {\r\n this.setQuestionClasses(e, \"disabled\", true);\r\n e.querySelectorAll(\r\n \"[data-message=incomplete],[data-message=incorrect]\"\r\n ).forEach(m => {\r\n if (!m.classList.contains(\"d-none\")) {\r\n m.classList.add(\"d-none\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private setQuestionClasses(\r\n question: Element,\r\n className: string,\r\n setAll: Boolean = false\r\n ): void {\r\n question.classList.add(className);\r\n question\r\n .querySelectorAll(\"[data-answer-id]\" + (setAll ? \"\" : \":checked\"))\r\n .forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.add(className);\r\n }\r\n });\r\n }\r\n\r\n private async setQuestionData(_questionGroupId: string): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No QuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n const questionGroupData = await service.getAnswers(_questionGroupId);\r\n if (questionGroupData && questionGroupData.questiongroupid) {\r\n this._element.setAttribute(\r\n \"data-questiongroup-complete\",\r\n (questionGroupData.complete || 0).toString()\r\n );\r\n this.context.complete = (questionGroupData.complete || 0) === 1;\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (questionGroupData.complete === 1\r\n ? questionGroupData.attempt\r\n : questionGroupData.attempt + 1\r\n ).toString()\r\n );\r\n questionGroupData.questions.forEach(q => {\r\n const qe = this._element.querySelector(\r\n '[data-question-id=\"' + q.questionid + '\"]'\r\n );\r\n if (qe) {\r\n const qeType = qe.getAttribute(\"data-question-type\") || \"\";\r\n if (qeType.toLowerCase() !== \"open ended\") {\r\n q.answers.forEach(a => {\r\n const ae = qe.querySelector(\r\n '[data-answer-id=\"' + a.answerid + '\"]'\r\n );\r\n if (ae) {\r\n (ae as HTMLInputElement).checked = true;\r\n }\r\n });\r\n } else {\r\n const ae = qe.querySelector(\"textarea\");\r\n const av = q.answers.length > 0 ? q.answers[0].text : \"\";\r\n if (ae) {\r\n ae.value = av;\r\n }\r\n }\r\n\r\n const confidenceGroup = qe.querySelector(\".confidence-rating-group\");\r\n if (confidenceGroup) {\r\n q.answers.forEach(a => {\r\n if (a.confidence) {\r\n const conf = confidenceGroup?.querySelector('[value=\"' + a.confidence + '\"]') as HTMLInputElement;\r\n if (conf) {\r\n conf.checked = true;\r\n }\r\n }\r\n });\r\n }\r\n }\r\n });\r\n if (\r\n this.context.complete &&\r\n this._element.getAttribute(\"data-questiongroup-scored\") === \"1\"\r\n ) {\r\n this.doScoring();\r\n if (questionGroupData.complete === 1) {\r\n this.showRationale();\r\n }\r\n }\r\n\r\n if (this.context.complete && this.context.singletake) {\r\n const context = this._pageContext;\r\n const backNext = context\r\n ? context.componentFactory.getComponent(BackNextButton)\r\n : null;\r\n if (backNext) {\r\n console.log(\"disabling the next button\");\r\n backNext.disableNext();\r\n }\r\n }\r\n if (questionGroupData.complete === 1) {\r\n console.log(\"disabling questions\");\r\n this.disableAllQuestions();\r\n }\r\n if (\r\n this.context.questionGroupName.startsWith(\"interspersed\") &&\r\n this.context.interspersedCorrectIncorrectFeedback\r\n ) {\r\n this.doScoring(false);\r\n\r\n if (this.context.interspersedRationaleFeedback) {\r\n this.showRationale();\r\n }\r\n }\r\n if (questionGroupData.type === \"outcome survey\") {\r\n\r\n if (questionGroupData.complete === 1) {\r\n $(\"#questionForm\").hide();\r\n $(\"#loginRequired\").hide();\r\n $(\"#surveyComplete\").show();\r\n $(\".button-nav__button--next\").hide();\r\n } else {\r\n $(\"#questionForm\").show();\r\n $(\"#surveyComplete\").hide();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private textAreaOnBlur(event: Event): void {\r\n if (!(event.target as HTMLElement).getAttribute(\"data-changed\")) {\r\n return;\r\n }\r\n void this.inputChanged(event);\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n }\r\n\r\n private bufferTextAreaChange(event: Event): void {\r\n (event.target as HTMLElement).setAttribute(\"data-changed\", \"1\");\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n const timeout = 1000; // ms\r\n this.context.taTimer = setTimeout(() => {\r\n void this.inputChanged(event);\r\n }, timeout);\r\n }\r\n\r\n private inputChanged(event: Event): void {\r\n const input = event.target as HTMLElement;\r\n input.removeAttribute(\"data-changed\");\r\n const question = input.closest(\"[data-question-id]\");\r\n if (question) {\r\n this.clearQuestionClasses(question);\r\n }\r\n void this.saveQuestionGroup();\r\n if (\r\n this.context.questionGroupName.startsWith(\"interspersed\") &&\r\n this.context.interspersedCorrectIncorrectFeedback &&\r\n !this._element.querySelector(\"#submit-button\")\r\n ) {\r\n this.doScoring(false);\r\n if (this.context.interspersedRationaleFeedback) {\r\n this.showRationale();\r\n }\r\n }\r\n }\r\n\r\n // JUSTIFICATION: type is inferred\r\n // tslint:disable-next-line: typedef\r\n private async saveQuestionGroup(): Promise {\r\n try {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return false;\r\n }\r\n const qgd = await this.collectQuestionGroupData(profile, this._element);\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No QuestionGroup Service available.\");\r\n\r\n return false;\r\n }\r\n const saved = await service.saveAnswers(qgd);\r\n if (!saved) {\r\n console.warn(\"QuestionGroup was not saved\");\r\n }\r\n return saved;\r\n } catch (error) {\r\n console.error(\"Error saving QuestionGroup\");\r\n return false;\r\n }\r\n }\r\n}\r\nComponentFactory.registerComponent(\"QuestionGroup\", QuestionGroup);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class SingleSignOn extends Component {\r\n public static readonly NextNavigationEvent: string = \"NextNavigationEvent\";\r\n public static readonly AboutToContinueEvent: string = \"AboutToContinueEvent\";\r\n public static readonly UpdateStepsEvent: string = \"UpdateStepsEvent\";\r\n\r\n private readonly _sso: HTMLLinkElement;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n this._sso = DomUtil.query(element, \"a[data-action='sso']\");\r\n this._sso.addEventListener(\"click\", ev => this.handleNext(ev));\r\n }\r\n\r\n private async handleNext(ev: Event): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null\r\n )\r\n );\r\n\r\n return;\r\n }\r\n\r\n ev.stopPropagation();\r\n\r\n console.log(\"[SSO Button] - About to fire navigation event\");\r\n\r\n const promise = await EventUtil.dispatchAsyncEvent(\r\n this._element,\r\n SingleSignOn.NextNavigationEvent\r\n );\r\n\r\n console.log(\"[SSO Button] - Event fired\");\r\n\r\n console.log(promise);\r\n\r\n if (promise) {\r\n ev.preventDefault();\r\n const shouldContinue = promise;\r\n\r\n console.log(shouldContinue);\r\n if (shouldContinue) {\r\n const aboutToContinuePromise = EventUtil.dispatchAsyncEvent(\r\n this._element,\r\n SingleSignOn.AboutToContinueEvent\r\n );\r\n\r\n await aboutToContinuePromise;\r\n\r\n console.log(shouldContinue);\r\n const href = this._sso.href;\r\n if (href) {\r\n console.log(\"[Next Button] - found href\");\r\n window.location.href = href;\r\n console.log(\"[Next Button] - navigating\");\r\n }\r\n }\r\n }\r\n\r\n console.log(\"[Next Button] - handleNext complete\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"SingleSignOn\", SingleSignOn);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\n\r\nexport class ActivityCard extends Component {\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n // The layout needs to know when a card is fully loaded, because the image\r\n // is responsive, and we cannot calculate the card's height until we\r\n // know how big the image is supposed to be. So, we delay the init promise\r\n // until the card's image is loaded, so we know when the component is ready\r\n // to be interacted with.\r\n\r\n const images = this._element.querySelectorAll(\"img.img-fluid\");\r\n if (images.length === 0) {\r\n return;\r\n }\r\n\r\n await Promise.all(Array.from(images).map(async el => {\r\n const image = el as HTMLImageElement;\r\n\r\n return new Promise(resolve => {\r\n if (image.complete) {\r\n resolve(); // this is magic, don't question it.;\r\n return;\r\n } else {\r\n image.addEventListener(\"error\", ()=>{console.log('img tag: error'); resolve();});\r\n image.addEventListener(\"load\", ()=>{console.log('img tag: loaded'); resolve();});\r\n }\r\n });\r\n }));\r\n\r\n moduletracking.AjaxTrackLinks(this._element,\"Cards\");\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"ActivityCard\", ActivityCard);\r\n","import {\r\n ILandingCardLayoutLoadedDetail,\r\n LandingCardLayout\r\n} from \"../genericLanding/LandingCardLayout\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\n\r\nexport class ActivityFeatured extends Component {\r\n private readonly featuredClasses: string[]\r\n = [\"featured-content\", \"col-12\", \"col-xl-3\"];\r\n private readonly featuredCol: string = \"featured-col\";\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n window.addEventListener(LandingCardLayout.LandingCardLayoutLoadedEvent, ev =>\r\n this.updateFeatured(ev as CustomEvent));\r\n }\r\n private updateFeatured(ev :CustomEvent): void {\r\n const featureHtml = ev.detail.featured;\r\n if(featureHtml?.trim().length > 0) {\r\n this.featuredClasses.map(featuredClass =>\r\n this._element.classList.add(featuredClass));\r\n this._element.innerHTML = featureHtml;\r\n\r\n var landingLayout = document.getElementsByClassName(\"card--layout\");\r\n if (landingLayout.length > 0){\r\n landingLayout[0].classList.add(this.featuredCol);\r\n }\r\n } else {\r\n this._element.innerHTML = \"\";\r\n this.featuredClasses.map(featuredClass =>\r\n this._element.classList.remove(featuredClass));\r\n\r\n var landingLayout = document.getElementsByClassName(\"card--layout\");\r\n if (landingLayout.length > 0){\r\n landingLayout[0].classList.remove(this.featuredCol);\r\n }\r\n }\r\n const event = document.createEvent(\"Event\");\r\n event.initEvent(\"resize\", true, false);\r\n window.dispatchEvent(event);\r\n moduletracking.AjaxTrackLinks(this._element,\"Featured\");\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"ActivityFeatured\", ActivityFeatured);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { ILandingPageLoadRequest } from \"../../models/LandingPage/ILandingPageLoadRequest\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { SubSpecialtySelect } from \"../healioGlobal/SubSpecialtySelect\";\r\nimport { TopicFilter } from \"../topicFilter/TopicFilter\";\r\nimport { LandingCardLoader } from \"./LandingCardLoader\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport * as Mustache from \"mustache\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { TopicAndCreditTypeFilter } from \"../topicAndCreditTypeFilter/TopicAndCreditTypeFilter\";\r\nimport { ViewBySpecialty } from \"../news/ViewBySpecialty\";\r\n\r\nexport interface ILandingCardLayoutLoadedDetail {\r\n readonly current: number;\r\n readonly total: number;\r\n readonly featured: string;\r\n}\r\n\r\nexport class LandingCardLayout extends Component {\r\n public static readonly LandingCardLayoutLoadedEvent =\r\n \"LandingCardLayoutLoaded\";\r\n public static readonly LandingCardLayoutLoadedInit =\r\n \"LandingCardLayoutInit\";\r\n\r\n private readonly _articleItemTemplate:\r\n string | null = null;\r\n private readonly _featuredItemTemplate:\r\n string | null = null;\r\n private _lastKnownScroll: number | null;\r\n private _lastRequestId: string | null = null;\r\n private readonly _listItemTemplate:\r\n string | null = null;\r\n private _startPage: number = 1;\r\n private _loading: boolean = false;\r\n private _spinner: Element | null;\r\n private _tempDivElement: JQuery = $(\"
\");\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._lastKnownScroll = 0;\r\n this._spinner = document.querySelector(\".cme-spinner\");\r\n\r\n const featuredContentElement = element.closest(\".row\")?.querySelector(\".featured-content\");\r\n if(featuredContentElement !== undefined && featuredContentElement !== null){\r\n element.classList.add(\"featured-col\");\r\n }\r\n\r\n const listItemTemplateElement = $(\"#ListingItemTemplate\");\r\n if (listItemTemplateElement.length) {\r\n const listingItemTemplateHtml = listItemTemplateElement.html().trim();\r\n this._tempDivElement.html(listingItemTemplateHtml);\r\n // tslint:disable-next-line: max-line-length\r\n if (this._tempDivElement.find('[data-card-element=\"article-template\"]').length) {\r\n this._articleItemTemplate = this._tempDivElement.find('[data-card-element=\"article-template\"]').html();\r\n // tslint:disable-next-line: max-line-length\r\n this._tempDivElement.find('[data-card-element=\"article-template\"]').html(\"\");\r\n }\r\n this._listItemTemplate = this._tempDivElement.html();\r\n }\r\n\r\n const featuredItemTemplateElement = $(\"#FeaturedItemTemplate\");\r\n if (featuredItemTemplateElement.length) {\r\n this._featuredItemTemplate = featuredItemTemplateElement.html().trim()\r\n }\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const page = urlParams.get(\"page\");\r\n if (page !== undefined && page !== null) {\r\n this._startPage = Number.parseInt(page);\r\n }\r\n\r\n document.addEventListener(TopicFilter.TopicFilterChangeEvent, () =>\r\n this.handleFilterChange()\r\n );\r\n\r\n document.addEventListener(\r\n SubSpecialtySelect.SubSpecialtySelectInitEvent, () =>\r\n this.handleSubSpecLoad()\r\n );\r\n\r\n document.addEventListener(LandingCardLoader.LoadPageEvent, ev =>\r\n this.handleLoadPage(ev as CustomEvent)\r\n );\r\n\r\n document.addEventListener(LandingCardLoader.LoadFilteredPageEvent, ev =>\r\n this.changeFilter(ev as CustomEvent)\r\n );\r\n\r\n document.addEventListener(LandingCardLoader.LoadMoreEvent, ev =>\r\n this.handleLoadMore(ev as CustomEvent)\r\n );\r\n\r\n window.onerror = () => {\r\n this.stopSpinner(0);\r\n }\r\n\r\n document.onerror = () => {\r\n this.stopSpinner(0);\r\n }\r\n $(\".card--layout\").masonry({\r\n columnWidth: \".card-masonry\",\r\n gutter: \".card-gutter\",\r\n itemSelector: \".card-masonry\",\r\n percentPosition: true\r\n });\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n LandingCardLayout.LandingCardLayoutLoadedInit,\r\n \"\"\r\n )\r\n );\r\n }\r\n\r\n public async init(): Promise {\r\n if (this._element.dataset.autoload === \"True\") {\r\n await this.loadCards(this._startPage, true);\r\n }\r\n }\r\n\r\n private scrollTop(): void {\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop: 0\r\n },\r\n \"slow\"\r\n );\r\n }\r\n\r\n private stopSpinner(timeout: number): void {\r\n setTimeout(() => {\r\n if (this._spinner) {\r\n this._spinner.classList.remove(\"active\");\r\n }\r\n }, timeout);\r\n }\r\n\r\n private startSpinner(): void {\r\n if (this._spinner) {\r\n this._spinner.classList.add(\"active\");\r\n }\r\n }\r\n private async changeFilter(ev: CustomEvent): Promise {\r\n this._element.dataset.additionalParameters = ev.detail;\r\n await this.handleFilterChange();\r\n }\r\n\r\n private async handleFilterChange(): Promise {\r\n return this.loadCards(this._startPage, true);\r\n }\r\n private async handleSubSpecLoad(): Promise {\r\n return this.loadCards(this._startPage, true);\r\n }\r\n\r\n private async handleLoadMore(ev: CustomEvent): Promise {\r\n return this.loadCards(ev.detail, false);\r\n }\r\n\r\n private async handleLoadPage(ev: CustomEvent): Promise {\r\n await this.loadCards(ev.detail, true);\r\n\r\n return this.scrollTop();\r\n }\r\n\r\n private renderCardsFromTemplate(cards: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._listItemTemplate) {\r\n for(let card of cards) {\r\n const renderedTemplate = Mustache.render(this._listItemTemplate,card);\r\n this._tempDivElement.html(renderedTemplate);\r\n if (card.Id === \"\") {\r\n this._tempDivElement.find('[data-card-element=\"content\"]').remove();\r\n } else {\r\n this._tempDivElement.find('[data-card-element=\"ad\"]').remove();\r\n if (this._articleItemTemplate && card.Articles) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n for(let article of card.Articles){\r\n const renderedArticle = Mustache.render(this._articleItemTemplate,article);\r\n this._tempDivElement.find('[data-card-element=\"article-template\"]').append(renderedArticle);\r\n }\r\n\r\n }\r\n }\r\n this._tempDivElement.find('[data-card-element=\"content\"]')\r\n .children().unwrap();\r\n renderedCards += UiUtil.replaceDataSrcWithSrcInImageTags(this._tempDivElement.html());\r\n };\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n // tslint:disable-next-line: cyclomatic-complexity\r\n private async loadCards(page: number, replace: boolean): Promise {\r\n if (this._loading) {\r\n return;\r\n }\r\n try {\r\n this._loading = true;\r\n this._lastKnownScroll = window.scrollY;\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n // Do we use userid in this component or in the service calls?\r\n let userId = \"00000000-0000-0000-0000-000000000000\";\r\n if (this._element.dataset.requireUserprofile === \"True\") {\r\n // we await user profile\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n console.error(\"Profile is not loaded\");\r\n\r\n return;\r\n }\r\n userId = (profile.contactid || userId);\r\n }\r\n\r\n const serviceName = this._element.dataset.serviceName\r\n ? this._element.dataset.serviceName\r\n : \"\";\r\n\r\n const service = context.getCardService(serviceName);\r\n if (!service) {\r\n throw new Error(\"No service found for key: \" + serviceName);\r\n }\r\n this.startSpinner();\r\n console.log(\"loaded service: \" + serviceName);\r\n\r\n const specialtySelect: SpecialtySelect | null =\r\n context.componentFactory.getComponent(SpecialtySelect);\r\n\r\n const topicFilter: TopicFilter | null =\r\n context.componentFactory.getComponent(TopicFilter);\r\n\r\n const creditTypeFilter: TopicAndCreditTypeFilter | null =\r\n context.componentFactory.getComponent(TopicAndCreditTypeFilter);\r\n\r\n const subspecialtySelect: SubSpecialtySelect | null =\r\n context.componentFactory.getComponent(SubSpecialtySelect);\r\n\r\n const templates = this._element.dataset.templateIds\r\n ? this._element.dataset.templateIds\r\n : \"\";\r\n\r\n let specialty = specialtySelect\r\n ? specialtySelect.specialty\r\n : null;\r\n\r\n // sometimes we will use a 'view by specialty' component instead of the regular specialty select control\r\n if(!specialty) {\r\n const viewBySpecialty: ViewBySpecialty | null = context.componentFactory.getComponent(ViewBySpecialty);\r\n specialty = viewBySpecialty ? viewBySpecialty.specialty : null;\r\n }\r\n\r\n let topics;\r\n\r\n if(topicFilter){\r\n topics = topicFilter\r\n ? topicFilter.topics.map(topic => topic.topicId)\r\n : null;\r\n } else if(creditTypeFilter){\r\n topics = creditTypeFilter\r\n ? creditTypeFilter.topics.map(topic => topic.topicId)\r\n : null;\r\n } else {\r\n topics = null;\r\n }\r\n\r\n const creditTypes = creditTypeFilter\r\n ? creditTypeFilter.creditTypes.map(creditType => creditType.creditTypeId)\r\n : null;\r\n\r\n const subspecialty = subspecialtySelect\r\n ? subspecialtySelect.subspecialty\r\n : null;\r\n\r\n const requestId =\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15) +\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15);\r\n this._lastRequestId = requestId;\r\n\r\n const additionalParameters = this._element.dataset.additionalParameters\r\n ? this._element.dataset.additionalParameters\r\n : null;\r\n\r\n const pageId = this._element.dataset.pageId\r\n ? this._element.dataset.pageId\r\n : null;\r\n\r\n const request: ILandingPageLoadRequest = {\r\n additionalParameters,\r\n page,\r\n pageId,\r\n requestId,\r\n templates,\r\n specialty,\r\n subspecialty,\r\n topics,\r\n userId,\r\n creditTypes\r\n };\r\n\r\n const loadPromise = service.load(request);\r\n\r\n const response = await loadPromise;\r\n\r\n if (!this._lastRequestId ||\r\n !response.requestId ||\r\n response.requestId !== this._lastRequestId) {\r\n return;\r\n }\r\n\r\n const divNode = document.createElement(\"div\")\r\n divNode.classList.add(\"card-gutter\");\r\n\r\n // tslint:disable-next-line: no-unsafe-any\r\n let cards = response.cards;\r\n // tslint:disable-next-line: no-unsafe-any\r\n let featured = response.featured;\r\n\r\n if (this._listItemTemplate && typeof (response.cards) === \"object\") {\r\n // tslint:disable-next-line: no-unsafe-any\r\n cards = this.renderCardsFromTemplate(response.cards);\r\n\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (featured !== undefined && featured.Id !== undefined) {\r\n const renderedFeaturedTemplate = this._featuredItemTemplate ?\r\n Mustache.render(this._featuredItemTemplate,featured) : \"\";\r\n this._tempDivElement.html(renderedFeaturedTemplate);\r\n this._tempDivElement.find('[data-card-element=\"ad\"]').remove();\r\n featured = UiUtil.replaceDataSrcWithSrcInImageTags(this._tempDivElement.html());\r\n }\r\n }\r\n\r\n if (replace) {\r\n let child = this._element.firstElementChild;\r\n while (child) {\r\n context.componentFactory.dereferenceComponents(child as HTMLElement);\r\n child.remove();\r\n child = this._element.firstElementChild;\r\n }\r\n\r\n this._element.innerHTML = cards;\r\n this._element.appendChild(divNode);\r\n const elements = this._element.querySelectorAll(\r\n \".card-masonry\"\r\n );\r\n\r\n if (elements) {\r\n elements.forEach(ele => $(ele).hide());\r\n }\r\n } else {\r\n if (page === this._startPage) {\r\n this._element.appendChild(divNode);\r\n }\r\n const frag = document.createDocumentFragment();\r\n const node = frag.appendChild(document.createElement(\"div\"));\r\n node.innerHTML = cards;\r\n while (node.firstChild) {\r\n $(node.firstChild).hide();\r\n var id = String($(node.firstChild).data(\"itemId\"));\r\n var count = $(\"[data-item-id='\" + id + \"']\").length;\r\n console.log(id + \": \" + count);\r\n if (id.length === 0 || count === 0) {\r\n this._element.appendChild(node.firstChild);\r\n } else {\r\n node.firstChild.remove();\r\n console.log(\"Skipped: \" + id);\r\n console.log(id.length);\r\n }\r\n }\r\n }\r\n\r\n await context.componentFactory.loadComponents(this._element);\r\n\r\n const knownSpecialty = Boolean(specialty);\r\n const action = knownSpecialty ? \"add\" : \"remove\";\r\n this._element.classList[action](\"known-specialty\");\r\n\r\n const timeout = 10;\r\n const spinnerWait = 60;\r\n // tslint:disable-next-line: typedef\r\n $(\".card-masonry:hidden\").each(function () {\r\n const item = $(this);\r\n setTimeout(() => {\r\n item.show();\r\n $(\".card--layout\").masonry(\"appended\", item);\r\n $(\".card--layout\").masonry(\"layout\");\r\n }, timeout);\r\n });\r\n\r\n this.stopSpinner(spinnerWait);\r\n\r\n const detail: ILandingCardLayoutLoadedDetail = {\r\n current: response.current,\r\n featured,\r\n total: response.total\r\n };\r\n\r\n if (this._lastKnownScroll && !WyanokeUtil.isMobile()) {\r\n window.scrollTo(0, this._lastKnownScroll);\r\n }\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n LandingCardLayout.LandingCardLayoutLoadedEvent,\r\n detail\r\n )\r\n );\r\n\r\n moduletracking.AjaxTrackLinks(this._element, \"Cards\");\r\n this._loading = false;\r\n }\r\n catch(error) {\r\n console.error(error)\r\n this.stopSpinner(0);\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LandingCardLayout\", LandingCardLayout);\r\n","import { ActivityLoader } from \"./ActivityLoader\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { IActivityLoadRequest } from \"../../models/IActivityLoadRequest\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { TopicFilter } from \"../topicFilter/TopicFilter\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\ninterface IMasonryCell {\r\n readonly element: HTMLElement;\r\n readonly outerHeight: number;\r\n}\r\n\r\ninterface IMasonryColumn {\r\n readonly cells: IMasonryCell[];\r\n outerHeight: number;\r\n}\r\n\r\nexport interface IActivityLayoutLoadedDetail {\r\n readonly current: number;\r\n readonly total: number;\r\n readonly featured: string;\r\n}\r\n\r\nexport class ActivityLayout extends Component {\r\n public static readonly ActivityLayoutLoadedEvent = \"ActivityLayoutLoaded\";\r\n\r\n private _lastKnownWidth: number;\r\n private _lastKnownCellWidth: number | null;\r\n private _lastKnownScroll: number | null;\r\n private _ticking = false;\r\n private _cells: IMasonryCell[] = [];\r\n private _lastRequestId: string | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._lastKnownScroll = 0;\r\n this._cells = this.calculateCells();\r\n\r\n this._lastKnownCellWidth = this._cells.length\r\n ? this._cells[0].element.offsetWidth\r\n : null;\r\n\r\n this._lastKnownWidth = this._element.offsetWidth;\r\n\r\n this.reflow();\r\n window.addEventListener(\"resize\", () => this.handleResize());\r\n\r\n document.addEventListener(TopicFilter.TopicFilterChangeEvent, () =>\r\n this.handleFilterChange()\r\n );\r\n\r\n document.addEventListener(ActivityLoader.LoadPageEvent, ev =>\r\n this.handleLoadPage(ev as CustomEvent)\r\n );\r\n\r\n document.addEventListener(ActivityLoader.LoadMoreEvent, ev =>\r\n this.handleLoadMore(ev as CustomEvent)\r\n );\r\n }\r\n\r\n private calculateCells(): IMasonryCell[] {\r\n return Array.from(this._element.children).map(el => {\r\n const cell = el as HTMLElement;\r\n\r\n cell.style.flexBasis = \"0\";\r\n cell.style.display = \"block\";\r\n\r\n const style = window.getComputedStyle(cell);\r\n\r\n const outerHeight =\r\n parseInt(style.marginTop || \"0\", 10) +\r\n Math.ceil(cell.scrollHeight) +\r\n parseInt(style.marginBottom || \"0\", 10);\r\n\r\n const h = `${Math.ceil(cell.scrollHeight)}px`;\r\n cell.style.flexBasis = h;\r\n\r\n return { element: cell, outerHeight };\r\n });\r\n }\r\n\r\n private async handleFilterChange(): Promise {\r\n return this.loadCards(1, true);\r\n }\r\n\r\n private async handleLoadMore(ev: CustomEvent): Promise {\r\n return this.loadCards(ev.detail, false);\r\n }\r\n\r\n private async handleLoadPage(ev: CustomEvent): Promise {\r\n await this.loadCards(ev.detail, true);\r\n\r\n return UiUtil.scrollToTop();\r\n }\r\n\r\n private handleResize(): void {\r\n this._lastKnownCellWidth = this._cells.length\r\n ? this._cells[0].element.offsetWidth\r\n : null;\r\n\r\n this._lastKnownWidth = this._element.offsetWidth;\r\n\r\n this.requestTick();\r\n }\r\n\r\n private requestTick(): void {\r\n if (!this._ticking) {\r\n this._ticking = true;\r\n\r\n requestAnimationFrame(() => {\r\n this._ticking = false;\r\n this.reflow();\r\n });\r\n }\r\n }\r\n\r\n private async loadCards(page: number, replace: boolean): Promise {\r\n this._lastKnownScroll = window.scrollY;\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const service = context.activityService;\r\n if (!service) {\r\n throw new Error(\"No activity service\");\r\n }\r\n\r\n const spinner = document.querySelector(\".cme-spinner\");\r\n if (spinner) {\r\n spinner.classList.add(\"active\");\r\n }\r\n\r\n const specialtySelect: SpecialtySelect | null = context.componentFactory.getComponent(\r\n SpecialtySelect\r\n );\r\n\r\n const topicFilter: TopicFilter | null = context.componentFactory.getComponent(\r\n TopicFilter\r\n );\r\n\r\n const specialty = specialtySelect ? specialtySelect.specialty : null;\r\n const topics = topicFilter\r\n ? topicFilter.topics.map(topic => topic.topicId)\r\n : null;\r\n\r\n const requestId =\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15) +\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15);\r\n this._lastRequestId = requestId;\r\n const request: IActivityLoadRequest = {\r\n page,\r\n specialty,\r\n topics,\r\n requestId\r\n };\r\n\r\n const loadPromise = service.load(request);\r\n\r\n const response = await loadPromise;\r\n\r\n if (\r\n !this._lastRequestId ||\r\n !response.requestId ||\r\n response.requestId !== this._lastRequestId\r\n ) {\r\n return;\r\n }\r\n\r\n if (replace) {\r\n let child = this._element.firstElementChild;\r\n while (child) {\r\n context.componentFactory.dereferenceComponents(child as HTMLElement);\r\n child.remove();\r\n child = this._element.firstElementChild;\r\n }\r\n\r\n this._element.innerHTML = response.cards;\r\n const elements = this._element.querySelectorAll(\r\n \".activity-step__landing--card\"\r\n );\r\n\r\n if (elements) {\r\n elements.forEach(ele => $(ele).hide());\r\n }\r\n } else {\r\n const frag = document.createDocumentFragment();\r\n const node = frag.appendChild(document.createElement(\"div\"));\r\n node.innerHTML = response.cards;\r\n const nextOrder = this._cells.length;\r\n while (node.firstChild) {\r\n $(node.firstChild).css(\"flexBasis\", \"0\");\r\n $(node.firstChild).css(\"order\", `${nextOrder}`);\r\n $(node.firstChild).hide();\r\n this._element.appendChild(node.firstChild);\r\n }\r\n }\r\n\r\n await context.componentFactory.loadComponents(this._element);\r\n\r\n const knownSpecialty = Boolean(specialty);\r\n const action = knownSpecialty ? \"add\" : \"remove\";\r\n this._element.classList[action](\"known-specialty\");\r\n\r\n this._cells = this.calculateCells();\r\n\r\n this._lastKnownCellWidth = this._cells.length\r\n ? this._cells[0].element.offsetWidth\r\n : null;\r\n\r\n this.reflow();\r\n\r\n const detail: IActivityLayoutLoadedDetail = {\r\n current: response.current,\r\n featured: response.featured,\r\n total: response.total\r\n };\r\n\r\n if (spinner) {\r\n spinner.classList.remove(\"active\");\r\n }\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n ActivityLayout.ActivityLayoutLoadedEvent,\r\n detail\r\n )\r\n );\r\n }\r\n\r\n private reflow(): void {\r\n const firstCell = this._element.firstElementChild as HTMLElement | null;\r\n if (!firstCell) {\r\n return;\r\n }\r\n\r\n if (this._lastKnownCellWidth === null) {\r\n return;\r\n }\r\n\r\n const newColumnCount = Math.floor(\r\n this._lastKnownWidth / this._lastKnownCellWidth\r\n );\r\n\r\n this._cells = this.calculateCells();\r\n\r\n const columns: IMasonryColumn[] = Array.from(new Array(newColumnCount)).map(\r\n () => ({\r\n cells: [] as IMasonryCell[],\r\n outerHeight: 0\r\n })\r\n );\r\n\r\n for (const cell of this._cells) {\r\n const column: IMasonryColumn = columns.reduce(\r\n (prev, next) => (next.outerHeight < prev.outerHeight ? next : prev),\r\n { outerHeight: Infinity, cells: [] }\r\n );\r\n\r\n column.cells.push(cell);\r\n column.outerHeight += cell.outerHeight;\r\n }\r\n\r\n const height = Math.max(...columns.map(c => c.outerHeight));\r\n\r\n columns\r\n .map(c => c.cells)\r\n .reduce((prev, next) => prev.concat(next), [])\r\n .forEach((cell, idx) => {\r\n cell.element.style.order = idx.toString();\r\n });\r\n\r\n columns.forEach(column => {\r\n const lastCell = column.cells[column.cells.length - 1];\r\n\r\n if (lastCell) {\r\n const unfilledHeight = height - column.outerHeight;\r\n const flexBasis = lastCell.element.scrollHeight + unfilledHeight;\r\n lastCell.element.style.flexBasis = `${flexBasis}px`;\r\n }\r\n });\r\n\r\n if (this._lastKnownScroll && !WyanokeUtil.isMobile()) {\r\n window.scrollTo(0, this._lastKnownScroll);\r\n }\r\n // tslint:disable-next-line: no-magic-numbers\r\n this._element.style.maxHeight = `${height + 20}px`;\r\n // tslint:disable-next-line: no-magic-numbers\r\n this._element.style.height = `${height + 20}px`;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ActivityLayout\", ActivityLayout);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { LandingCardLoader } from \"../genericLanding/LandingCardLoader\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UrlUtil } from \"../../util/UrlUtil\";\r\n\r\ninterface ISpecialtyListItem {\r\n element: HTMLAnchorElement;\r\n text: string;\r\n url: string | null;\r\n value: string | null;\r\n}\r\n\r\nexport class SpecialtySelect extends Component {\r\n\r\n public static readonly SpecialtySelectInitEvent: string =\r\n \"SpecialtySelect::InitEvent\";\r\n\r\n public static readonly LoadPageEvent = \"LandingCardLoaderLoadPageEvent\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const matchedUrlPattern = this.attemptUrlPatternMatch();\r\n\r\n if (!matchedUrlPattern) {\r\n\r\n // tslint:disable-next-line: comment-type\r\n /* showall query string doesn't exist\r\n referrer is not current host\r\n path is either / or /news */\r\n if (new URLSearchParams(window.location.search).get(\"showall\") !== \"1\" &&\r\n document.referrer.indexOf(window.location.hostname) === -1 &&\r\n [\"/\"].indexOf(window.location.pathname) !== -1) {\r\n await this.attemptUserProfileMatch();\r\n }\r\n }\r\n\r\n this._element\r\n .querySelectorAll(\"[data-action='select specialty']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleSpecialtyClick(ev)));\r\n\r\n const mobileH1 =\r\n document.querySelector(\"h1[data-specialty-title='mobile']\");\r\n\r\n if (mobileH1) {\r\n mobileH1.textContent = this.selectedElement ?\r\n this.selectedElement.textContent : this.getCurrentDropDownValue() ?\r\n this.getCurrentDropDownValue() : \"\";\r\n }\r\n\r\n // this lies outside the component\r\n const specialtyHealder = document.querySelector(\".specialty-toggler-text\")\r\n if(specialtyHealder && this.selectedElement){\r\n specialtyHealder.textContent = this.selectedElement.textContent ? this.getCurrentDropDownValue() + \" CME\" : \"\";\r\n }\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(SpecialtySelect.SpecialtySelectInitEvent,\r\n this.specialty));\r\n }\r\n\r\n public get specialty(): string {\r\n const active = this.selectedElement;\r\n\r\n return active ? active.dataset.value || \"\" : \"\";\r\n }\r\n\r\n public get specialtyName(): string {\r\n const active = this.selectedElement;\r\n\r\n return active ? active.textContent || \"\" : \"\";\r\n }\r\n\r\n private get specialties(): ReadonlyArray {\r\n return this.specialtyElements\r\n .map(element => {\r\n const text = (element.textContent || \"\").trim();\r\n const url = element.dataset.urlPattern || null;\r\n const value = element.dataset.value || null;\r\n\r\n return {\r\n element,\r\n text,\r\n url: url ? url.toLowerCase() : null,\r\n value\r\n };\r\n });\r\n }\r\n\r\n private get selectedElement(): HTMLAnchorElement | null {\r\n const selector = \"[data-contains='specialties'] .active\";\r\n\r\n return this._element.querySelector(selector);\r\n }\r\n\r\n private get specialtyElements(): ReadonlyArray {\r\n const selector = \"[data-contains='specialties'] > a\";\r\n const items = this._element.querySelectorAll(selector);\r\n\r\n return Array.from(items);\r\n }\r\n\r\n private handleSpecialtyClick(ev: Event): void {\r\n this.specialtyElements.forEach(item =>\r\n item.classList[item === ev.target ? \"add\" : \"remove\"](\"active\"));\r\n\r\n const selected = this.selectedElement;\r\n\r\n $(\"[data-toggle='dropdown']\", this._element)\r\n .dropdown(\"toggle\")\r\n .text(selected ? selected.textContent || \"\" : \"\");\r\n\r\n if (window.location.href === selected?.href) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n return;\r\n }\r\n\r\n if (selected) {\r\n console.log(\"Navigating Specialty Selected: \" + selected.href);\r\n window.location.href = selected.href;\r\n }\r\n }\r\n\r\n private attemptUrlPatternMatch(): boolean {\r\n const ignorePaths = [\"myhealiocme\", \"news\", \"search\", \"new-search\", \"cme\"];\r\n const gtfoohPaths = [\"footer\",\"subscribe\",\"cart\",\"subscription-management\",\"unsubscribe\",\"my-account\"];\r\n const match = window.location.pathname.split(\"/\");\r\n const rootPath = this._element.dataset.rootPath||\"\";\r\n\r\n console.log({ds:this._element.dataset});\r\n\r\n if(rootPath.length > 0) {\r\n console.log(\"adding \" + rootPath + \" to the ignorePaths list\");\r\n ignorePaths.push(rootPath);\r\n }\r\n\r\n let value: string = \"\";\r\n\r\n match.forEach(s => {\r\n if(!value && s && ignorePaths.indexOf(s.toLowerCase()) === -1){\r\n console.log(\"found \" + value.toLowerCase() + \" for specialty\");\r\n value = s;\r\n return;\r\n }\r\n })\r\n \r\n const lc = value?.toLowerCase()??\"\";\r\n\r\n if (lc && (\r\n lc === \"cme\" ||\r\n lc === \"topics\" ||\r\n lc=== \"authors\" ||\r\n lc === \"podcasts\" ||\r\n lc === \"meeting-news\"\r\n )) {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(LandingCardLoader.LoadPageEvent, 1));\r\n\r\n return true;\r\n }\r\n\r\n\r\n\r\n if (!lc || gtfoohPaths.indexOf(lc) !== -1) {\r\n console.warn(\r\n \"No specialty in URL\");\r\n\r\n return false;\r\n }\r\n\r\n const items = this.specialties;\r\n const item = items.find(s => s.url?.endsWith(lc));\r\n\r\n if (!item && isNaN(Number(lc))) {\r\n const newLocation = window.location.origin + window.location.pathname.replace(value, \"\").replace(\"//\", \"\");\r\n // this is adding an additional slash before the path. window.location.pathname includes the preceeding slash already.\r\n // const newLocation = window.location.origin + \"/\" + window.location.pathname.replace(value, \"\").replace(\"//\", \"\");\r\n console.warn(\r\n `Redirecting to ${newLocation}` +\r\n `URL value not found in specialty list: ${value}`,\r\n value);\r\n\r\n window.location.href = newLocation;\r\n\r\n return false;\r\n }\r\n\r\n this.setSelectedItem(item);\r\n\r\n return true;\r\n }\r\n\r\n private async attemptUserProfileMatch(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (profile) {\r\n const hasSpecialty =\r\n profile.isLoggedIn === \"True\" &&\r\n profile.contentspecialty;\r\n const queryStringMap = UrlUtil.getQueryString();\r\n\r\n if (hasSpecialty && queryStringMap.get(\"userspecialty\") === undefined) {\r\n const specialty = (profile.contentspecialty || \"\").toLowerCase();\r\n //first check custom mappings\r\n if(this._element.dataset[\"customMappings\"]){\r\n let maps : { [key: string]: string } = {};\r\n this._element.dataset[\"customMappings\"].split(',').forEach(s => {\r\n let parts = s.split(':') as string[];\r\n maps[parts[0]] = parts[1];\r\n });\r\n\r\n if(maps[specialty]){\r\n console.log(\"Redirecting to Users Specialty Page: \" + maps[specialty]);\r\n window.location.href = maps[specialty];\r\n return;\r\n }\r\n }\r\n\r\n //then check default mappings\r\n const items = this.specialties;\r\n const item = items.find(s => s.text.toLowerCase() === specialty);\r\n if (item && item.element) {\r\n console.log(\"Redirecting to Users Specialty Page: \" + item.element.href);\r\n window.location.href = item.element.href;\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private setSelectedItem(item: ISpecialtyListItem | undefined): void {\r\n if(item === undefined) {\r\n\r\n return;\r\n }\r\n\r\n const items = this.specialties;\r\n items.forEach(i => {\r\n const action = i.element === item.element ? \"add\" : \"remove\";\r\n i.element.classList[action](\"active\");\r\n });\r\n\r\n const toggle = this._element.querySelector(\"[data-toggle='dropdown']\");\r\n if (toggle) {\r\n toggle.textContent = item.text;\r\n }\r\n }\r\n\r\n private getCurrentDropDownValue(): string | null {\r\n const toggle = this._element.querySelector(\"[data-toggle='dropdown']\");\r\n\r\n return toggle ? toggle.textContent : \"\";\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"SpecialtySelect\", SpecialtySelect);\r\n","import { ActivityLayout, IActivityLayoutLoadedDetail } from \"./ActivityLayout\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\n\r\nexport class ActivityLoader extends Component {\r\n\r\n public static readonly LoadPageEvent = \"ActivityLoaderLoadPageEvent\";\r\n public static readonly LoadMoreEvent = \"ActivityLoaderLoadMoreEvent\";\r\n public static readonly ChangePageEvent = \"ActivityLoaderChangePageEvent\";\r\n\r\n private readonly _paginationContainer: HTMLElement;\r\n private readonly _loadMoreTemplate: string;\r\n private readonly _working: HTMLElement;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n const fragment = document.createDocumentFragment();\r\n this._working = fragment.appendChild(document.createElement(\"div\"));\r\n\r\n const query = DomUtil.query.bind(null, element);\r\n const template =\r\n (name: string) => query(`[data-template='${name}']`).innerHTML;\r\n\r\n this._paginationContainer = query(\"[data-container='pagination']\");\r\n this._loadMoreTemplate = template(\"load more\");\r\n\r\n this._element.addEventListener(\"click\", ev => this.handleClick(ev));\r\n\r\n document.addEventListener(\r\n ActivityLayout.ActivityLayoutLoadedEvent,\r\n ev => this.handleLoad(ev as CustomEvent));\r\n\r\n this.render();\r\n }\r\n\r\n private get currentPage(): number | null {\r\n const raw = this._element.dataset.currentPage || \"\";\r\n const parsed = parseInt(raw, 10);\r\n\r\n return isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private get totalPages(): number | null {\r\n const raw = this._element.dataset.totalPages || \"\";\r\n const parsed = parseInt(raw, 10);\r\n\r\n return isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private handleLoad(ev: CustomEvent): void {\r\n this._element.dataset.currentPage = ev.detail.current.toString();\r\n this._element.dataset.totalPages = ev.detail.total.toString();\r\n this.render();\r\n }\r\n\r\n private handleClick(ev: MouseEvent): void {\r\n let cursor = ev.target as HTMLElement;\r\n while (cursor !== this._element && !cursor.hasAttribute(\"data-action\")) {\r\n cursor = cursor.parentElement as HTMLElement;\r\n }\r\n\r\n switch (cursor.dataset.action) {\r\n case \"load more\":\r\n this.loadMore(this.currentPage === null ? 1 : this.currentPage + 1);\r\n break;\r\n\r\n case \"first-page\":\r\n this.loadPage(this.currentPage === null ? 1 :\r\n this.currentPage - this.currentPage);\r\n break;\r\n\r\n case \"last-page\":\r\n this.loadPage(this.totalPages === null ? 1 : this.totalPages);\r\n break;\r\n\r\n case \"previous\":\r\n this.loadPage(this.currentPage === null ? 1 : this.currentPage - 1);\r\n break;\r\n\r\n case \"next\":\r\n this.loadPage(this.currentPage === null ? 1 : this.currentPage + 1);\r\n break;\r\n\r\n case \"load page\":\r\n this.loadPage(parseInt(cursor.dataset.page || \"\", 10));\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n\r\n private loadMore(page: number): void {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(ActivityLoader.LoadMoreEvent, page));\r\n }\r\n\r\n private loadPage(page: number): void {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(ActivityLoader.LoadPageEvent, page));\r\n }\r\n\r\n private render(): void {\r\n while (this._paginationContainer.firstChild) {\r\n this._paginationContainer.firstChild.remove();\r\n }\r\n\r\n this.renderLoadMore();\r\n $(function ():void {\r\n if (WyanokeUtil.isMobile()){\r\n $(\"div[data-component='ActivityFeatured']\")\r\n .insertAfter(\"nav[data-component='ActivityLoader']\");\r\n }\r\n });\r\n\r\n moduletracking.AjaxTrackLinks(this._element,\"ActivityLoader\");\r\n }\r\n\r\n private renderLoadMore(): void {\r\n const shouldDisplay =\r\n this.currentPage !== null &&\r\n this.totalPages !== null &&\r\n this.currentPage < this.totalPages;\r\n\r\n if (!shouldDisplay) {\r\n return;\r\n }\r\n\r\n this.add(this._loadMoreTemplate);\r\n }\r\n\r\n private add(html: string | null): void {\r\n if (html) {\r\n this._working.innerHTML = html;\r\n const element = this._working.firstElementChild;\r\n if (element) {\r\n this._paginationContainer.appendChild(element);\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ActivityLoader\", ActivityLoader);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { ITopic } from \"../../models/ITopic\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class TopicFilter extends Component {\r\n public static readonly TopicFilterChangeEvent: string =\r\n \"TopicFilterChangeEvent\";\r\n\r\n private readonly _topicMenuContainer: HTMLElement | null;\r\n private readonly _topicMenuTemplate: HTMLElement | null;\r\n private readonly _topicChipsContainer: HTMLElement | null;\r\n private readonly _topicChipsTemplate: HTMLElement | null;\r\n private readonly _clearButton: HTMLElement | null;\r\n private readonly _applyButton: HTMLElement | null;\r\n\r\n private _lastSelectedValue: ReadonlyArray = [];\r\n private _selectedTopics: ITopic[] = [];\r\n private _specialtyId: string = \"\";\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._topicMenuContainer = this._element.querySelector(\"[data-initialize-as='topic menu']\");\r\n this._topicMenuTemplate = this._element.querySelector(\"[data-initialize-as='topic menu template']\");\r\n this._topicChipsContainer = this._element.querySelector(\"[data-initialize-as='topic chips']\");\r\n this._topicChipsTemplate = this._element.querySelector(\"[data-initialize-as='topic chips template']\");\r\n this._clearButton = this._element.querySelector(\"[data-initialize-as='clear topics']\");\r\n this._applyButton = this._element.querySelector(\"[data-initialize-as='apply topics']\");\r\n\r\n document.addEventListener(SpecialtySelect.SpecialtySelectInitEvent, e => this.handleSpecialtyChange(e as CustomEvent));\r\n\r\n if(this._applyButton){\r\n this._applyButton.addEventListener(\"click\", ev => this.handleMenuApply(ev));\r\n }\r\n\r\n if(this._clearButton){\r\n this._clearButton.addEventListener(\"click\", ev => this.handleClearAll(ev));\r\n }\r\n\r\n $(this._element).find(\".dropdown-menu\").on(\"click.bs.dropdown\", function (e) {\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n public get topics(): ReadonlyArray {\r\n return this._selectedTopics;\r\n }\r\n\r\n private async handleSpecialtyChange(\r\n event: CustomEvent\r\n ): Promise {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n this._specialtyId = event.detail;\r\n const context = this._pageContext;\r\n const service = context ? context.topicListService : null;\r\n\r\n if (service === null) {\r\n throw new Error(\"No topic service available.\");\r\n }\r\n\r\n const topics = await service.getTopicsBySpecialty(this._specialtyId);\r\n\r\n const cookieValue = this.getCookie(\"healio.topicfilter\" + this._specialtyId);\r\n let selectedTopics: ITopic[] = [];\r\n if (cookieValue){\r\n selectedTopics = JSON.parse(decodeURIComponent(cookieValue)) as ITopic[];\r\n }\r\n\r\n if (topics.length > 0){\r\n this._element.hidden = false;\r\n }\r\n\r\n this.updateTopics(topics, selectedTopics);\r\n }\r\n\r\n private raiseChangeEvent(specialtyChangeEvent?: CustomEvent): void {\r\n // The \"Topic Change\" event fires when the filter has detected a change in\r\n // internal state, such as due to the user clicking on chips or hitting\r\n // the apply button. However, it can also fire if a specialty change\r\n // event is being chained in, even if this event does not result in a\r\n // change in internal state. This is because items listening for this\r\n // event are generally concerned about the combined state of the two\r\n // filters, and if the specialty filter has changed, then the context of\r\n // the topic filter has changed, even if the internal state has not.\r\n // In other words, there is a contextual change between\r\n // \"specialty 1, no topics selected\" and \"specialty 2, no topics selected\",\r\n // and we need to signal that context shift, even though nothing internal\r\n // has actually changed.\r\n\r\n const newValue = this._selectedTopics;\r\n const ids = newValue.map(t => t.topicId);\r\n\r\n if (!specialtyChangeEvent) {\r\n const sameAsLastTime =\r\n ids.length != 0 &&\r\n this._lastSelectedValue.length != 0 &&\r\n ids.length === this._lastSelectedValue.length &&\r\n ids.every(id => this._lastSelectedValue.indexOf(id) !== -1);\r\n\r\n if (sameAsLastTime) {\r\n return;\r\n }\r\n }\r\n\r\n this._lastSelectedValue = ids;\r\n\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(TopicFilter.TopicFilterChangeEvent, newValue));\r\n }\r\n\r\n private showHideClearFilter(): void {\r\n if (this._clearButton) {\r\n this._clearButton.hidden = this._selectedTopics.length > 0\r\n ? false\r\n : true;\r\n }\r\n }\r\n\r\n public handleMenuApply(ev: Event | null): void {\r\n\r\n if(!this._topicMenuContainer){\r\n return;\r\n }\r\n\r\n this._selectedTopics = [];\r\n this._topicMenuContainer.querySelectorAll(\"input[type='checkbox']:checked\").forEach(topic => {\r\n if(topic.dataset.topicName && topic.dataset.topicId){\r\n this._selectedTopics.push({topicId: topic.dataset.topicId, topicName: topic.dataset.topicName});\r\n }\r\n });\r\n\r\n this.setCookie();\r\n\r\n this.updateChips();\r\n\r\n this.showHideClearFilter();\r\n\r\n this.raiseChangeEvent();\r\n }\r\n\r\n private handleClearAll(ev: Event | null) : void {\r\n if (ev?.cancelable) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n this._selectedTopics = [];\r\n\r\n this.setCookie();\r\n\r\n this.updateChips();\r\n\r\n this.clearCheckboxes();\r\n\r\n this.showHideClearFilter();\r\n\r\n this.raiseChangeEvent();\r\n }\r\n\r\n private updateChips(): void {\r\n if(this._topicChipsTemplate && this._topicChipsContainer){\r\n\r\n this._topicChipsContainer.innerHTML = \"\";\r\n\r\n for(var topic of this._selectedTopics){\r\n let html = this._topicChipsTemplate.innerHTML\r\n .replace(\"{{topicId}}\", topic.topicId)\r\n .replace(\"{{topicName}}\", topic.topicName)\r\n .replace(\"{{topicLabel}}\", topic.topicName);\r\n this._topicChipsContainer.innerHTML += html;\r\n }\r\n\r\n this._topicChipsContainer.querySelectorAll(\"button\").forEach(chip => {\r\n chip.addEventListener(\"click\", e => this.removeChip(chip.dataset.topicId ?? \"\"));\r\n });\r\n }\r\n }\r\n\r\n private clearCheckboxes(): void {\r\n this._topicMenuContainer?.querySelectorAll('input[data-topic-id]').forEach(el => {\r\n (el as HTMLInputElement).checked = false;\r\n });\r\n }\r\n\r\n private removeChip(topicId: string): void {\r\n if(!this._topicMenuContainer){\r\n return;\r\n }\r\n\r\n let chipMenuItem = this._topicMenuContainer.querySelector(\"input[data-topic-id='\" + topicId + \"']\") as HTMLInputElement;\r\n if(chipMenuItem){\r\n chipMenuItem.checked = false;\r\n\r\n this.handleMenuApply(null);\r\n }\r\n }\r\n\r\n private updateTopics(topics: ITopic[], selectedTopics: ITopic[]){\r\n let selectedTopicIds = selectedTopics.map(t => t.topicId);\r\n if(this._topicMenuContainer && this._topicMenuTemplate){\r\n for (var topic of topics){\r\n let html = this._topicMenuTemplate.innerHTML\r\n .replace(\"{{topicId}}\", topic.topicId)\r\n .replace(\"{{topicName}}\", topic.topicName)\r\n .replace(\"{{topicLabel}}\", topic.topicName);\r\n html.replace(\"{{checked}}\", selectedTopicIds.includes(topic.topicId) ? \"checked\" : \"\");\r\n\r\n this._topicMenuContainer.innerHTML += html;\r\n }\r\n }\r\n\r\n this.handleMenuApply(null);\r\n }\r\n\r\n private setCookie() : void {\r\n if (window.location.pathname){\r\n const filterValue = JSON.stringify(this._selectedTopics);\r\n document.cookie = \"healio.topicfilter.\" + this._specialtyId + \"=\" + encodeURIComponent(filterValue);\r\n }\r\n }\r\n\r\n private getCookie(cname: string): string {\r\n const name = cname + \"=\";\r\n const ca = document.cookie.split(\";\");\r\n\r\n for(let c of ca) {\r\n while (c.charAt(0) === \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"TopicFilter\", TopicFilter);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UserProfileService } from \"../../service/UserProfileService\";\r\n\r\nexport class GoalChart extends Component {\r\n private userSettingsService: UserProfileService | null = null;\r\n private collapsed: boolean = false;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n if(profile.sitesettings?.mygoalcollapsed){\r\n this.collapsed = profile.sitesettings.mygoalcollapsed\r\n }\r\n const context = this._pageContext;\r\n this.userSettingsService = context ? context.userProfileService : null;\r\n\r\n let accordion = this._element.querySelector('#GoalAccordionButton');\r\n if(accordion != null)\r\n {\r\n accordion.addEventListener(\"click\", () => {\r\n this.collapsed = !this.collapsed;\r\n this.updateSettings(this.collapsed);\r\n })\r\n }\r\n\r\n let accordionArrow = this._element.querySelector('#GoalAccordionArrow');\r\n if(accordionArrow != null)\r\n {\r\n accordionArrow.addEventListener(\"click\", () => {\r\n this.collapsed = !this.collapsed;\r\n this.updateSettings(this.collapsed);\r\n })\r\n }\r\n }\r\n\r\n private async updateSettings(mygoalcollapsed: boolean): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return false;\r\n }\r\n\r\n if(!this.userSettingsService){\r\n return false;\r\n }\r\n\r\n if(profile.sitesettings){\r\n let request = {\r\n HideCMENotifications: profile.sitesettings.hidecmenotifications,\r\n MyGoalCollapsed : mygoalcollapsed,\r\n GoalModalsShown: profile.sitesettings.goalmodalsshown\r\n }\r\n\r\n await this.userSettingsService.updateUserSettings(request);\r\n return true\r\n } else {\r\n let request = {\r\n HideCMENotifications: null,\r\n MyGoalCollapsed : mygoalcollapsed,\r\n GoalModalsShown: null\r\n }\r\n\r\n await this.userSettingsService.updateUserSettings(request);\r\n return true\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"GoalChart\", GoalChart);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { LocalStorageUtil } from \"../../util/LocalStorageUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { NotificationBoxService } from \"../../service/NotificationBoxService\";\r\nimport Mustache from \"mustache\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\n\r\nexport class NotificationBox extends Component {\r\n private readonly dataStore = \"NotificationBox\";\r\n private readonly dataStoreKey = \"HideNotifications\";\r\n private readonly _notificationItemTemplate: string | null = null;\r\n private readonly _activityCreditItemTemplate: string | null = null;\r\n private notificationBoxService: NotificationBoxService | null = null;\r\n private notificationBoxStorage: LocalStorageUtil | null = null;\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const activityCreditItemTemplateElement = $(\"#ActivityCreditItemTemplate\")\r\n this._activityCreditItemTemplate = activityCreditItemTemplateElement.html().trim();\r\n\r\n const notificationItemTemplateElement = $(\"#NotificationItemTemplate\")\r\n this._notificationItemTemplate = notificationItemTemplateElement.html().trim();\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n this.notificationBoxStorage = new LocalStorageUtil(this.dataStore);\r\n\r\n const context = this._pageContext;\r\n this.notificationBoxService = context ? context.notificationBoxService : null;\r\n\r\n const notificationsToggleElement = this._element.querySelector(\".custom-alert-toggle\")\r\n notificationsToggleElement?.addEventListener(\"click\", async (ev) => {\r\n ev.stopPropagation();\r\n const checkBoxElement = ev.target as HTMLInputElement\r\n if (checkBoxElement.checked) {\r\n await this.updateUserProfileNotifications(true)\r\n this.setNotificationBellAlertsOn()\r\n } else {\r\n await this.updateUserProfileNotifications(false)\r\n this.setNotificationBellAlertsOff()\r\n }\r\n })\r\n\r\n const userProfileSettingHideCme = profile?.sitesettings?.hidecmenotifications || 0;\r\n\r\n const hideNotifications = (this.notificationBoxStorage?.getItem(this.dataStore, [\r\n this.dataStoreKey\r\n ])) as string;\r\n\r\n if (hideNotifications || userProfileSettingHideCme) {\r\n const settingCollapseButton = this._element.querySelector(\"[data-target='#settingsCollapse']\")\r\n settingCollapseButton?.click()\r\n this.setNotificationBellAlertsOff()\r\n } else {\r\n this.setNotificationBellAlertsOn()\r\n }\r\n\r\n await this.loadNotifications();\r\n }\r\n\r\n private async loadNotifications(): Promise {\r\n if (this.notificationBoxService) {\r\n const loadPromise = this.notificationBoxService.getExpiringActivities();\r\n const activities = await loadPromise;\r\n\r\n if(activities && activities.length > 0){\r\n const countBadgeElement = this._element.querySelector(\"[data-notification-box=count]\")\r\n if(countBadgeElement){\r\n countBadgeElement.innerText = activities.length.toLocaleString()\r\n }\r\n if(!this._activityCreditItemTemplate || !this._notificationItemTemplate){\r\n return\r\n }\r\n for(let activity of activities){\r\n let notificationTempDivElement: JQuery = $(\"
\");\r\n const activityNotificationRendered = Mustache.render(this._notificationItemTemplate, activity)\r\n notificationTempDivElement.html(activityNotificationRendered)\r\n for(let credit of activity.Credits){\r\n const activityCreditRendered = Mustache.render(this._activityCreditItemTemplate,credit);\r\n const engagementStatDiv = notificationTempDivElement.find('[class=\"engagement-stat\"]')\r\n $(activityCreditRendered).insertBefore(engagementStatDiv)\r\n }\r\n let listingElement = $(this._element).find(\"[data-notification-box=listing]\")\r\n if(listingElement){\r\n listingElement.append(notificationTempDivElement.html())\r\n }\r\n }\r\n this.bindToDeleteNotificationButtons();\r\n moduletracking.AjaxTrackLinks(this._element,\"CME Notifications\");\r\n } else {\r\n $(\"[data-notification-box=empty]\").removeClass(\"d-none\")\r\n }\r\n }\r\n }\r\n\r\n private bindToDeleteNotificationButtons(): void {\r\n this._element\r\n .querySelectorAll(\"[data-button=remove]\")\r\n .forEach(deleteBtn => {\r\n const activityId = deleteBtn.getAttribute(\"data-activity-id\") || \"\";\r\n if (activityId === \"\") {\r\n return false;\r\n }\r\n deleteBtn.addEventListener(\"click\", async (ev) => {\r\n ev.stopPropagation();\r\n UiUtil.toggleButtonState(deleteBtn as HTMLButtonElement)\r\n if (!this.notificationBoxService) {\r\n return;\r\n }\r\n await this.notificationBoxService.deleteNotification(\r\n activityId\r\n );\r\n\r\n const bellBadgePill = this._element.querySelector(\".badge-pill\")\r\n if (bellBadgePill) {\r\n const currentPillValue = bellBadgePill.innerText;\r\n if (currentPillValue && currentPillValue.length !== 0) {\r\n const newPillValue = Number(currentPillValue) - 1\r\n bellBadgePill.innerText = newPillValue === 0 ? \"\" : newPillValue.toLocaleString()\r\n if(newPillValue === 0) {\r\n $(\"[data-notification-box=empty]\").removeClass(\"d-none\")\r\n }\r\n }\r\n }\r\n const listItem = deleteBtn.closest(\".activity-listing\");\r\n if (listItem) {\r\n listItem.remove();\r\n }\r\n });\r\n });\r\n }\r\n\r\n private setNotificationBellAlertsOff(): void {\r\n const hideNotifications = (this.notificationBoxStorage?.getItem(this.dataStore, [\r\n this.dataStoreKey\r\n ])) as string;\r\n\r\n if (!hideNotifications) {\r\n this.notificationBoxStorage?.insertItem(\r\n this.dataStore,\r\n [this.dataStoreKey],\r\n \"1\"\r\n );\r\n }\r\n $('.custom-alert-toggle').attr('aria-checked', 'false');\r\n $('.custom-alert-toggle').prop('checked', false);\r\n $('.custom-alert-label span').text('OFF');\r\n $('.alert-bell i.far').addClass('fa-bell-slash').removeClass('fa-bell');\r\n $('.alert-bell i.far').removeClass('d-none');\r\n $('.alert-bell span.badge').addClass('d-none');\r\n $('.activity-list-group.collapse').collapse('hide');\r\n }\r\n\r\n private setNotificationBellAlertsOn(): void {\r\n this.notificationBoxStorage?.deleteItem(this.dataStore, [this.dataStoreKey]);\r\n $('.custom-alert-toggle').attr('aria-checked', 'true');\r\n $('.custom-alert-toggle').prop('checked', true);\r\n $('.custom-alert-label span').text('ON');\r\n $('.alert-bell i.far').addClass('fa-bell').removeClass('fa-bell-slash');\r\n $('.alert-bell i.far').removeClass('d-none');\r\n $('.alert-bell span.badge').removeClass('d-none');\r\n $('.activity-list-group.collapse').collapse('show');\r\n }\r\n\r\n private async updateUserProfileNotifications(showNotifications: boolean): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return false;\r\n }\r\n if (this.notificationBoxService) {\r\n return this.notificationBoxService.updateNotificationSettings(!showNotifications);\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"NotificationBox\", NotificationBox);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { Cookie } from \"../../util/CookieUtil\"\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class ManageEmailSubscriptions extends Component {\r\n\r\n private _loggedOutElem: HTMLElement;\r\n private _emailConfBox: HTMLElement;\r\n private _specialtyBrowse: HTMLElement;\r\n private _unsubcribeAllBtn: HTMLButtonElement;\r\n private _sendNotification: boolean;\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._loggedOutElem = DomUtil.query(element, \"section[id='emailSubAlertLoggedOut']\");\r\n this._emailConfBox = DomUtil.query(element, \"div[id='emailConfirmationBox']\");\r\n this._specialtyBrowse = DomUtil.query(element, \"section[id='specialtyBrowse']\");\r\n this._unsubcribeAllBtn = DomUtil.query(element, \"button[id='unsubscribeAllButton']\");\r\n this._sendNotification = false;\r\n\r\n\r\n // specialty filter events\r\n const specOptions = this._element.querySelectorAll(\r\n \"button[class='chip-select']\");\r\n specOptions.forEach(chip => {\r\n chip.addEventListener(\"click\", ev => this.filterOfferings(ev));\r\n });\r\n\r\n // newswire my subscription unsubscribes\r\n const mySubsUnsubscribeElems = this._element.querySelectorAll(\".my-subscriptions-unsubscribe button\");\r\n mySubsUnsubscribeElems.forEach(us => {\r\n us.addEventListener(\"click\", async ev => await this.myUnsubscribe(ev));\r\n });\r\n\r\n // newswire subscription events\r\n const subscribeElems = this._element.querySelectorAll(\".news-subscription div.checkbox-wrapper, .cme-subscription div.checkbox-wrapper\");\r\n subscribeElems.forEach(us => {\r\n us.addEventListener(\"click\", async ev => await this.newswireSubscribe(ev));\r\n });\r\n\r\n // topic alerts subscription events\r\n const topicAlertSubscribeElems = this._element.querySelectorAll(\"#alertsSubscriptions .checkbox-wrapper\");\r\n topicAlertSubscribeElems.forEach(us => {\r\n us.addEventListener(\"click\", async ev => await this.topicAlertSubscribe(ev));\r\n });\r\n\r\n // undo subscription events\r\n const undoElems = this._element.querySelectorAll(\".subscribe-text a, .unsubscribe-text a\");\r\n undoElems.forEach(us => {\r\n us.addEventListener(\"click\", async ev => await this.undoSubscribe(ev));\r\n });\r\n\r\n // unsubscribe all events\r\n this._unsubcribeAllBtn.addEventListener(\"click\", ev => this.uSubAll());\r\n\r\n const unsubscribeAllUndoButton = this._element.querySelector(\"#unsubscribeAllUndoButton\");\r\n unsubscribeAllUndoButton?.addEventListener(\"click\", ev => this.unsubscribeAllUndo());\r\n\r\n const unsubscribeAllCloseElem = this._element.querySelector(\"#closeUnsubescribeAllAlert button, #closeUnsubescribeAllAlert span, #closeUnsubescribeAllAlert i\");\r\n unsubscribeAllCloseElem?.addEventListener(\"click\", ev => this.handleUnsubscribeAlert(ev));\r\n\r\n // alerts tool tip x click\r\n const xElems = this._element.querySelectorAll(\".email-tooltip button.close\");\r\n xElems.forEach(us => {\r\n us.addEventListener(\"click\", ev => this.handleToolTipClose(ev));\r\n });\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n this.verboseLog(\"Initiating Email Subscription Management\");\r\n\r\n let mEmailSent = Cookie.getCookie(\"mEmailSent\");\r\n if (mEmailSent === null) {\r\n this._sendNotification = true;\r\n } else {\r\n this._sendNotification = false;\r\n }\r\n\r\n if (profile?.isLoggedIn !== \"True\" || profile.email === undefined) {\r\n this._loggedOutElem.classList.remove(\"d-none\");\r\n } else {\r\n var emailElem = this._emailConfBox.querySelector(\"strong\");\r\n if (emailElem !== null && emailElem !== undefined) emailElem.innerText = profile.email;\r\n this._emailConfBox.classList.remove(\"d-none\");\r\n\r\n\r\n //unEmailTxt\r\n var unEmailTxtElem = this._element.querySelector(\"#unEmailTxt\") as HTMLElement;\r\n if (unEmailTxtElem !== null && unEmailTxtElem !== undefined) unEmailTxtElem.innerText = profile.email;\r\n\r\n // check user's current subscriptions\r\n await this.GetListsForMember();\r\n\r\n // user specialty check\r\n this.checkForUserSpecialty();\r\n this._specialtyBrowse.classList.remove(\"d-none\");\r\n\r\n $(\"#mySubscriptions\").removeClass(\"d-none\");\r\n }\r\n\r\n const spinner = document.querySelector(\".cme-spinner\");\r\n if (spinner) {\r\n spinner.classList.remove(\"active\");\r\n }\r\n }\r\n\r\n private handleToolTipClose(ev: Event): void {\r\n this.verboseLog(\"Tooltip Close\");\r\n\r\n let elem = ev.target as HTMLButtonElement;\r\n\r\n let closestTooltip = elem.closest(\".email-tooltip\") as HTMLElement;\r\n closestTooltip.style.display = 'none';\r\n closestTooltip.classList.remove('open');\r\n this.GetListsForMember();\r\n }\r\n\r\n private handleUnsubscribeAlert(ev: Event): void {\r\n this.verboseLog(\"Closing unsubscribe from all alert.\");\r\n let elem = ev.target as HTMLButtonElement;\r\n let closestDiv = elem.closest(\".unsubscribe-all-alert\") as HTMLElement;\r\n closestDiv.classList.add(\"d-none\");\r\n //UiUtil.toggleButtonState(this._unsubcribeAllBtn as HTMLButtonElement);\r\n $(\".subscription-inner-container\").removeClass(\"d-none\");\r\n this.GetListsForMember();\r\n }\r\n\r\n private async filterOfferings(ev: Event): Promise {\r\n let elem = ev.target as HTMLElement;\r\n let specName = elem.getAttribute(\"data-spec-name\");\r\n if (specName === \"\" || specName === undefined) {\r\n return;\r\n }\r\n\r\n // reset all offerings to d-none\r\n\r\n // reset button active state\r\n $(\"div.chip button\").each(function () {\r\n $(this).removeClass(\"active\");\r\n });\r\n elem.classList.add(\"active\");\r\n\r\n $(\"div.subscription-box\").not(\"[data-spec-name='\" + specName + \"']\").each(function () {\r\n $(this).addClass(\"d-none\");\r\n });\r\n\r\n $(\".subscription-list-group div[data-spec-name='\" + specName + \"']\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n });\r\n\r\n // reset section visibility\r\n $(\"section.subscription\").each(function () {\r\n $(this).addClass(\"d-none\");\r\n });\r\n\r\n // topic alerts\r\n $(\"#alertsSubscriptions[data-spec-name='\" + specName + \"']\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n $(this).find(\"div.subscription-box\").each(function (sb) {\r\n $(this).removeClass(\"d-none\");\r\n });\r\n });\r\n\r\n // always show shared\r\n $(\".subscription-box[data-spec-name='shared']\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n });\r\n\r\n let ns = $(\"#newsSubscriptions .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (ns !== null && ns !== undefined && ns.length > 0) {\r\n $(\"#newsSubscriptions\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#newsSubscriptions\").addClass(\"d-none\");\r\n }\r\n\r\n let onlineCme = $(\"#cmeSubscriptions .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (onlineCme !== null && onlineCme !== undefined && onlineCme.length > 0) {\r\n $(\"#cmeSubscriptions\").removeClass(\"d-none\");\r\n\r\n let cmehealio = $(\"#onlineCME .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (cmehealio !== null && cmehealio !== undefined && cmehealio.length > 0) {\r\n $(\"#onlineCME\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#onlineCME\").addClass(\"d-none\");\r\n }\r\n\r\n let cmevme = $(\"#onlineVME .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (cmevme !== null && cmevme !== undefined && cmevme.length > 0) {\r\n $(\"#onlineVME\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#onlineVME\").addClass(\"d-none\");\r\n }\r\n } else {\r\n $(\"#cmeSubscriptions\").addClass(\"d-none\");\r\n $(\"#onlineCME\").addClass(\"d-none\");\r\n $(\"#onlineVME\").addClass(\"d-none\");\r\n }\r\n\r\n let livecme = $(\"#liveCmeSubscriptions .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (livecme !== null && livecme !== undefined && livecme.length > 0) {\r\n $(\"#liveCmeSubscriptions\").removeClass(\"d-none\");\r\n\r\n let cmehealio = $(\"#liveCme .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (cmehealio !== null && cmehealio !== undefined && cmehealio.length > 0) {\r\n $(\"#liveCme\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#liveCme\").addClass(\"d-none\");\r\n }\r\n\r\n let cmevme = $(\"#liveVme .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (cmevme !== null && cmevme !== undefined && cmevme.length > 0) {\r\n $(\"#liveVme\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#liveVme\").addClass(\"d-none\");\r\n }\r\n } else {\r\n $(\"#liveCmeSubscriptions\").addClass(\"d-none\");\r\n $(\"#liveCme\").addClass(\"d-none\");\r\n $(\"#liveVme\").addClass(\"d-none\");\r\n }\r\n\r\n let cg = $(\"#cgSubscriptions .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (cg !== null && cg !== undefined && cg.length > 0) {\r\n $(\"#cgSubscriptions\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#cgSubscriptions\").addClass(\"d-none\");\r\n }\r\n\r\n let pc = $(\"#podcastSubscriptions .subscription-list-group .subscription-box:not(.d-none)\");\r\n if (pc && pc !== null && pc !== undefined && pc.length > 0) {\r\n $(\"#podcastSubscriptions\").removeClass(\"d-none\");\r\n } else {\r\n $(\"#podcastSubscriptions\").addClass(\"d-none\");\r\n }\r\n\r\n // always show more from healio newswires\r\n $(\"#defaultSubscriptions\").removeClass(\"d-none\");\r\n $(\"#defaultSubscriptions .subscription-box\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n\r\n });\r\n\r\n if (specName?.toLowerCase() === 'hepatology' || specName?.toLowerCase() === 'gastroenterology') {\r\n $(\"#alertsSubscriptions[data-spec-name='gastroenterology']\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n $(this).find(\"div.subscription-box\").each(function (sb) {\r\n $(this).removeClass(\"d-none\");\r\n });\r\n });\r\n\r\n $(\"#alertsSubscriptions[data-spec-name='hepatology']\").each(function () {\r\n $(this).removeClass(\"d-none\");\r\n $(this).find(\"div.subscription-box\").each(function (sb) {\r\n $(this).removeClass(\"d-none\");\r\n });\r\n });\r\n }\r\n\r\n }\r\n\r\n // gets user's subscriptions and handles data attribute \"data-status\", list visibility, and session cookie \"wynwsubs\"\r\n // called from other methods after subscribing/unsubscribing methods\r\n public async GetListsForMember(): Promise {\r\n this.verboseLog(\"Getting users subscriptions\");\r\n var jData = { \"contactid\": window.UserProfile.contactid };\r\n jData.contactid = window.UserProfile.contactid;\r\n\r\n let response = \"\";\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/getalllistsformember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n response = msg.GetAllListsForMemberResult;\r\n\r\n let subscribedto = JSON.parse(response);\r\n let subscribedList: string[] = [];\r\n\r\n if (response.length > 2) {\r\n Cookie.deleteCookie(\"wynwsubs\");\r\n $.each(subscribedto, function (index, value) {\r\n // show user's subscriptions\r\n if (value === 2) {\r\n $(\"#mySubscriptions li[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"2\");\r\n $(\"#mySubscriptions li[data-list='\" + index.toString() + \"']\").removeClass(\"d-none\");\r\n $(\".news-subscription div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"2\");\r\n $(\".cme-subscription div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"2\");\r\n $(\"#alertsSubscriptions div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"2\");\r\n subscribedList.push(index.toString());\r\n } else if (value === 4) {\r\n $(\"#mySubscriptions li[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"4\");\r\n $(\"#mySubscriptions li[data-list='\" + index.toString() + \"']\").addClass(\"d-none\");\r\n $(\".news-subscription div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"4\");\r\n $(\".cme-subscription div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"4\");\r\n $(\"#alertsSubscriptions div[data-list='\" + index.toString() + \"']\").attr(\"data-status\", \"4\");\r\n\r\n }\r\n });\r\n\r\n let visibleEmailTooltips = document.querySelectorAll('.my-subscriptions .subscription-list-group .subscription-listing-item:not(.d-none) .email-tooltip.unsubscribe');\r\n\r\n for(let i=0;i 0) {\r\n $(\"#headerTextSubscribed\").removeClass(\"d-none\");\r\n $(\"#unsubscribeAllButton\").removeClass(\"d-none\");\r\n $(\"#unsubscribeDisclaimer\").removeClass(\"d-none\");\r\n $(\"#headerTextUnsubscribed\").addClass(\"d-none\");\r\n $(\"#specHasSubsText\").removeClass(\"d-none\");\r\n $(\"#specNoSubsText\").addClass(\"d-none\");\r\n Cookie.setSessionCookie(\"wynwsubs\", subscribedList.join(',').toString());\r\n\r\n } else {\r\n $(\"#headerTextSubscribed\").removeClass(\"d-none\");\r\n $(\"#headerTextUnsubscribed\").removeClass(\"d-none\");\r\n $(\"#unsubscribeAllButton\").addClass(\"d-none\");\r\n $(\"#unsubscribeDisclaimer\").addClass(\"d-none\");\r\n $(\"#specHasSubsText\").addClass(\"d-none\");\r\n $(\"#specNoSubsText\").removeClass(\"d-none\");\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(jqXHR);\r\n },\r\n complete: (async () => {\r\n let userSubCookie = Cookie.getCookie(\"wynwsubs\");\r\n if (userSubCookie !== undefined && userSubCookie !== null) {\r\n let userSubs = userSubCookie.split(\",\");\r\n userSubs.forEach(element => {\r\n this.checkboxHandlerByListid(element, \"2\");\r\n });\r\n }\r\n this.verboseLog(response);\r\n })\r\n });\r\n }\r\n\r\n public uSubAll(): void {\r\n var jData = { \"contactid\": window.UserProfile.contactid };\r\n\r\n UiUtil.toggleButtonState(this._unsubcribeAllBtn as HTMLButtonElement);\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/ulmfa\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.UnsubscribeListMemberFromAllResult;\r\n\r\n if (result == \"True\") {\r\n\r\n let userSubCookie = Cookie.getCookie(\"wynwsubs\");\r\n if (userSubCookie !== undefined && userSubCookie !== null) {\r\n let userSubs = userSubCookie.split(\",\");\r\n\r\n userSubs.forEach(element => {\r\n $(\"#mySubscriptions [data-list='\" + element + \"']\").each(function () {\r\n $(this).attr(\"data-status\", \"4\");\r\n $(this).addClass(\"d-none\");\r\n })\r\n });\r\n }\r\n\r\n $(\".subscription-inner-container\").addClass(\"d-none\");\r\n $(\".unsubscribe-all-alert\").removeClass(\"d-none\");\r\n }\r\n else {\r\n console.log(\"Unsubscribed from all unsuccessfull.\")\r\n\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"Unsubscribed from all error.\")\r\n },\r\n complete: (async () => {\r\n let userSubCookie = Cookie.getCookie(\"wynwsubs\");\r\n if (userSubCookie !== undefined && userSubCookie !== null) {\r\n let userSubs = userSubCookie.split(\",\");\r\n userSubs.forEach(element => {\r\n this.checkboxHandlerByListid(element, \"4\");\r\n });\r\n }\r\n UiUtil.toggleButtonState(this._unsubcribeAllBtn as HTMLButtonElement);\r\n window.setTimeout(() => {\r\n $(\".unsubscribe-all-alert\").addClass(\"d-none\");\r\n $(\".subscription-inner-container\").removeClass(\"d-none\");\r\n\r\n this.GetListsForMember();\r\n }, 9500)\r\n\r\n })\r\n });\r\n }\r\n\r\n public unsubscribeAllUndo(): void {\r\n this.verboseLog(\"Undo unsubscribe all\");\r\n\r\n let userSubCookie = Cookie.getCookie(\"wynwsubs\");\r\n if (userSubCookie === undefined || userSubCookie === null) {\r\n return;\r\n }\r\n\r\n let userSubs = userSubCookie.split(\",\");\r\n userSubs.forEach(element => {\r\n //show hidden my subs again\r\n this.checkboxHandlerByListid(element, \"2\");\r\n $(\"#mySubscriptions li[data-list='\" + element + \"']\").attr(\"data-status\", \"2\");\r\n $(\"#mySubscriptions li[data-list='\" + element + \"']\").removeClass(\"d-none\");\r\n\r\n });\r\n\r\n\r\n // resubscribe user to lists\r\n userSubs.forEach(async element => {\r\n //subscribe\r\n await this.newswireSubscribeById(element);\r\n });\r\n\r\n $(\".unsubscribe-all-alert\").addClass(\"d-none\");\r\n $(\".subscription-inner-container\").removeClass(\"d-none\");\r\n\r\n }\r\n\r\n private async newswireSubscribeById(listId: string): Promise {\r\n if (listId === \"\" || listId === undefined) {\r\n return;\r\n }\r\n\r\n var jData = { \"contactid\": window.UserProfile.contactid, \"listid\": listId, \"status\": \"2\", \"sendnotification\": \"0\" };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/managelistmember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.ManageListMemberResult;\r\n if (result == \"True\") {\r\n $(\"#mySubscriptions li[data-list='\" + listId + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.subscription-box[data-list='\" + listId + \"']\").attr(\"data-status\", \"2\");\r\n }\r\n else {\r\n //AlertUnsuccessfulSubscriptionUpdate();\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n //AlertUnsuccessfulSubscriptionUpdate();\r\n }\r\n });\r\n }\r\n\r\n // handles unsubscribe links in my subscription area\r\n private async myUnsubscribe(ev: Event): Promise {\r\n let elem = ev.target as HTMLElement;\r\n\r\n var closestListIdElem = elem.closest('[data-list]') as HTMLElement;\r\n if (closestListIdElem === undefined || closestListIdElem === null) {\r\n return;\r\n }\r\n let listid = closestListIdElem.getAttribute(\"data-list\");\r\n if (listid === \"\" || listid === undefined || listid === null) {\r\n return;\r\n }\r\n\r\n let newStatus = \"4\";\r\n\r\n this.checkboxHandlerByListid(listid, \"newStatus\");\r\n\r\n let newswireName = closestListIdElem.getAttribute(\"data-list-name\");\r\n this.manageToolTip(closestListIdElem, newStatus, newswireName, listid);\r\n\r\n this.verboseLog(\"Processing: \" + listid + \" as \" + newStatus);\r\n\r\n var jData = { \"contactid\": window.UserProfile.contactid, \"listid\": listid, \"status\": newStatus, \"sendnotification\": \"0\" };\r\n //$j(button).button('loading');\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/managelistmember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.ManageListMemberResult;\r\n if (result == \"True\") {\r\n if (newStatus == \"2\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n Cookie.setSessionCookie('mEmailSent', \"1\");\r\n }\r\n\r\n if (newStatus == \"4\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n }\r\n }\r\n else {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n },\r\n complete: ((jqXHR) => {\r\n console.log(jqXHR);\r\n window.setTimeout(() => {\r\n this.GetListsForMember();\r\n }, 10000)\r\n })\r\n });\r\n }\r\n\r\n\r\n // handles both newswire subscribe and unsubscribe\r\n private async newswireSubscribe(ev: Event): Promise {\r\n this.verboseLog(\"Newswire Subscribe Init\");\r\n let elem = ev.target as HTMLElement;\r\n console.log(elem);\r\n\r\n if (elem.classList.contains(\"email-subscribe-checkbox\")) {\r\n return;\r\n }\r\n\r\n var closestListIdElem = elem.closest('[data-list]') as HTMLElement;\r\n if (closestListIdElem === undefined || closestListIdElem === null) {\r\n return;\r\n }\r\n let listid = closestListIdElem.getAttribute(\"data-list\");\r\n if (listid === \"\" || listid === undefined || listid === null) {\r\n return;\r\n }\r\n\r\n let newStatus = \"4\";\r\n let originalStatus = closestListIdElem.getAttribute(\"data-status\");\r\n if (originalStatus === null || originalStatus === undefined) {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"2\") {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"4\" || originalStatus === \"0\") {\r\n newStatus = \"2\";\r\n }\r\n\r\n let sendNotification = this._sendNotification;\r\n if (originalStatus === \"4\" || originalStatus === \"2\") {\r\n sendNotification = false;\r\n }\r\n\r\n this.checkboxHandlerByListid(listid, newStatus);\r\n\r\n let newswireName = closestListIdElem.getAttribute(\"data-list-name\");\r\n this.manageToolTip(closestListIdElem, newStatus, newswireName, listid);\r\n\r\n this.verboseLog(\"Processing: \" + listid + \" as \" + newStatus);\r\n this.verboseLog(\"Send notice: \" + sendNotification);\r\n\r\n let jData = { \"contactid\": window.UserProfile.contactid, \"listid\": listid, \"status\": newStatus, \"sendnotification\": (sendNotification ? \"1\" : \"0\") };\r\n\r\n if (sendNotification) {\r\n this._sendNotification = false;\r\n Cookie.setSessionCookie('mEmailSent', \"1\");\r\n }\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/managelistmember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.ManageListMemberResult;\r\n if (result == \"True\") {\r\n if (newStatus == \"2\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n }\r\n\r\n if (newStatus == \"4\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n }\r\n }\r\n else {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n },\r\n complete: ((jqXHR) => {\r\n console.log(jqXHR);\r\n this.GetListsForMember();\r\n })\r\n });\r\n }\r\n\r\n // handles both newswire subscribe and unsubscribe\r\n private async topicAlertSubscribe(ev: Event): Promise {\r\n this.verboseLog(\"Topic Alert Init\");\r\n let elem = ev.target as HTMLElement;\r\n\r\n if (elem.classList.contains(\"email-subscribe-checkbox\")) {\r\n return;\r\n }\r\n\r\n var closestSection = elem.closest('section') as HTMLElement;\r\n if (closestSection === undefined || closestSection === null) {\r\n return;\r\n }\r\n var closestListIdElem = elem.closest('[data-list]') as HTMLElement;\r\n if (closestListIdElem === undefined || closestListIdElem === null) {\r\n return;\r\n }\r\n let listid = closestListIdElem.getAttribute(\"data-list\");\r\n if (listid === \"\" || listid === undefined || listid === null) {\r\n return;\r\n }\r\n\r\n let newStatus = \"4\";\r\n let originalStatus = closestListIdElem.getAttribute(\"data-status\");\r\n if (originalStatus === null || originalStatus === undefined) {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"2\") {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"4\" || originalStatus === \"0\") {\r\n newStatus = \"2\";\r\n }\r\n\r\n this.checkboxHandlerByListid(listid, newStatus);\r\n\r\n let newswireName = closestListIdElem.getAttribute(\"data-list-name\");\r\n this.manageToolTip(closestSection, newStatus, newswireName, listid);\r\n\r\n let sendNotification = this._sendNotification;\r\n if (originalStatus === \"4\" || originalStatus === \"2\") {\r\n sendNotification = false;\r\n }\r\n\r\n this.verboseLog(\"Processing: \" + listid + \" as \" + newStatus);\r\n\r\n var jData = { \"contactid\": window.UserProfile.contactid, \"listid\": listid, \"status\": newStatus, \"sendnotification\": (sendNotification ? \"1\" : \"0\") };\r\n\r\n if (sendNotification) {\r\n this._sendNotification = false;\r\n Cookie.setSessionCookie('mEmailSent', \"1\");\r\n }\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/managelistmember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.ManageListMemberResult;\r\n if (result == \"True\") {\r\n if (newStatus == \"2\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n }\r\n\r\n if (newStatus == \"4\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n }\r\n }\r\n else {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n },\r\n complete: ((jqXHR) => {\r\n console.log(jqXHR);\r\n this.GetListsForMember();\r\n })\r\n });\r\n }\r\n\r\n // handles undo functionality\r\n private async undoSubscribe(ev: Event): Promise {\r\n this.verboseLog(\"Undo click\");\r\n let elem = ev.target as HTMLElement;\r\n\r\n var closestListIdElem = elem.closest('[data-list]') as HTMLElement;\r\n if (closestListIdElem === undefined || closestListIdElem === null) {\r\n this.verboseLog(\"closestListIdElem is null\");\r\n return;\r\n }\r\n let listid = closestListIdElem.getAttribute(\"data-list\");\r\n if (listid === \"\" || listid === undefined || listid === null) {\r\n this.verboseLog(\"listid is null\");\r\n return;\r\n }\r\n\r\n // tool tip define\r\n let toolTipUnsubscribe = closestListIdElem.querySelector(\".email-tooltip.unsubscribe\") as HTMLElement;\r\n let toolTipSubscribe = closestListIdElem.querySelector(\".email-tooltip.subscribe\") as HTMLElement;\r\n if (toolTipUnsubscribe === null) {\r\n toolTipUnsubscribe = closestListIdElem.closest(\".email-tooltip.unsubscribe\") as HTMLElement;\r\n }\r\n if (toolTipSubscribe === null) {\r\n toolTipSubscribe = closestListIdElem.closest(\".email-tooltip.subscribe\") as HTMLElement;\r\n }\r\n\r\n\r\n if (toolTipUnsubscribe !== null) {\r\n toolTipUnsubscribe.style.display = 'none';\r\n }\r\n if (toolTipSubscribe !== null) {\r\n toolTipSubscribe.style.display = 'none';\r\n }\r\n\r\n let newStatus = \"4\";\r\n let originalStatus = closestListIdElem.getAttribute(\"data-status\");\r\n if (originalStatus === null || originalStatus === undefined) {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"2\") {\r\n newStatus = \"4\";\r\n } else if (originalStatus === \"4\" || originalStatus === \"0\") {\r\n newStatus = \"2\";\r\n }\r\n\r\n this.checkboxHandlerByListid(listid, newStatus);\r\n\r\n this.verboseLog(\"Processing: \" + listid + \" as \" + newStatus);\r\n var jData = { \"contactid\": window.UserProfile.contactid, \"listid\": listid, \"status\": newStatus, \"sendnotification\": \"0\" };\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/registration/json/managelistmember\",\r\n data: JSON.stringify(jData),\r\n contentType: \"application/json; charset=utf-8\",\r\n dataType: \"json\",\r\n success: function (msg) {\r\n var result = msg.ManageListMemberResult;\r\n if (result == \"True\") {\r\n if (newStatus == \"2\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"2\");\r\n }\r\n\r\n if (newStatus == \"4\") {\r\n // set data status\r\n $(\"#mySubscriptions li[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.subscription-box[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n $(\"div.specialty-checkboxes[data-list='\" + listid + \"']\").attr(\"data-status\", \"4\");\r\n }\r\n }\r\n else {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n }\r\n },\r\n error: function (jqXHR, textStatus, errorThrown) {\r\n console.log(\"ERROR Processing: \" + listid + \" as \" + newStatus);\r\n },\r\n complete: ((jqXHR) => {\r\n console.log(jqXHR);\r\n this.GetListsForMember();\r\n })\r\n });\r\n }\r\n\r\n\r\n private async checkForUserSpecialty(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (profile) {\r\n let contentspecialty = profile.contentspecialty || '';\r\n if (contentspecialty === '' && profile.profession === 'Optometrist') {\r\n contentspecialty = 'optometry';\r\n }\r\n\r\n contentspecialty = contentspecialty.toLowerCase();\r\n if (contentspecialty === '' || contentspecialty == null) {\r\n return;\r\n }\r\n\r\n if (contentspecialty === 'women\\'s health & ob/gyn') {\r\n contentspecialty = 'womens health and ob gyn';\r\n }\r\n\r\n if (contentspecialty === 'allergy/immunology') {\r\n contentspecialty = 'allergy asthma';\r\n }\r\n\r\n if (contentspecialty === 'hepatology') {\r\n contentspecialty = 'gastroenterology';\r\n }\r\n\r\n contentspecialty = contentspecialty.replace(\"/\", \" \");\r\n\r\n var targetButton = document.querySelector(\".specialty-chips-group .chip button[data-spec-name='\" + contentspecialty + \"']\") as HTMLButtonElement;\r\n if (targetButton !== null && targetButton !== undefined) {\r\n targetButton.click();\r\n }\r\n }\r\n }\r\n\r\n private checkboxHandlerByListid(listid: string, substatus: string): void {\r\n this.verboseLog(\"Checkbox handler: \" + substatus);\r\n if (substatus === \"2\") {\r\n $(\".news-subscription div[data-list='\" + listid + \"'], .cme-subscription div[data-list='\" + listid + \"']\").find(\".checkbox-text\").text(\"Unsubscribe\");\r\n $(\"div[data-list='\" + listid + \"']\").find(\".checkbox-wrapper\").addClass(\"force-check\");\r\n } else {\r\n $(\".news-subscription div[data-list='\" + listid + \"'], .cme-subscription div[data-list='\" + listid + \"']\").find(\".checkbox-text\").text(\"Subscribe\");\r\n $(\"div[data-list='\" + listid + \"']\").find(\".checkbox-wrapper\").removeClass(\"force-check\");\r\n\r\n }\r\n }\r\n\r\n private manageToolTip(elem: HTMLElement, subscribeMode: string, newswireName: string | null, listId: string | null): void {\r\n let toolTipUnsubscribe = elem.querySelector(\".email-tooltip.unsubscribe\") as HTMLElement;\r\n let toolTipSubscribe = elem.querySelector(\".email-tooltip.subscribe\") as HTMLElement;\r\n\r\n if (listId !== null) {\r\n toolTipUnsubscribe.setAttribute(\"data-list\", listId);\r\n toolTipUnsubscribe.setAttribute(\"data-status\", subscribeMode);\r\n\r\n\r\n toolTipSubscribe.setAttribute(\"data-list\", listId);\r\n toolTipSubscribe.setAttribute(\"data-status\", subscribeMode);\r\n }\r\n\r\n if (subscribeMode === \"2\") {\r\n this.verboseLog(\"Opening Subscribe Tooltip\");\r\n let nameElem = toolTipSubscribe.querySelector(\"strong\");\r\n if (nameElem !== null && newswireName !== null) {\r\n nameElem.innerHTML = newswireName;\r\n }\r\n toolTipSubscribe.style.display = 'flex';\r\n window.setTimeout(() => {\r\n toolTipSubscribe.style.display = 'none';\r\n this.verboseLog(\"Closing Subscribe Tooltip\");\r\n }, 9500);\r\n } else {\r\n this.verboseLog(\"Opening Unsubscribe Tooltip\");\r\n let nameElem = toolTipUnsubscribe.querySelector(\"strong\");\r\n if (nameElem !== null && newswireName !== null) {\r\n nameElem.innerHTML = newswireName;\r\n }\r\n toolTipUnsubscribe.style.display = 'flex';\r\n window.setTimeout(() => {\r\n toolTipUnsubscribe.style.display = 'none';\r\n this.verboseLog(\"Closing Unsubscribe Tooltip\");\r\n }, 9500)\r\n\r\n }\r\n }\r\n\r\n private verboseLog(msg: string) : void {\r\n if (window.queryString.verbose === '1') {\r\n console.log(\"[WyManageEmailSubscriptions] \" + msg);\r\n }\r\n }\r\n}\r\n\r\n\r\nComponentFactory.registerComponent(\r\n \"ManageEmailSubscriptions\",\r\n ManageEmailSubscriptions);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class LandingCardFeatured extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {}\r\n}\r\n\r\nComponentFactory.registerComponent(\"LandingCardFeatured\", LandingCardFeatured);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { ILandingCardLayoutLoadedDetail, LandingCardLayout } from \"./LandingCardLayout\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class LandingCardLoader extends Component {\r\n\r\n public static readonly LoadPageEvent = \"LandingCardLoaderLoadPageEvent\";\r\n public static readonly LoadMoreEvent = \"LandingCardLoaderLoadMoreEvent\";\r\n public static readonly ChangePageEvent = \"LandingCardLoaderChangePageEvent\";\r\n public static readonly LoadFilteredPageEvent = \"LandingCardLoaderFilteredPageEvent\";\r\n\r\n private readonly _paginationContainer: HTMLElement;\r\n private readonly _loadMoreTemplate: string;\r\n private readonly _working: HTMLElement;\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n const fragment = document.createDocumentFragment();\r\n this._working = fragment.appendChild(document.createElement(\"div\"));\r\n\r\n const query = DomUtil.query.bind(null, element);\r\n const template =\r\n (name: string) => query(`[data-template='${name}']`).innerHTML;\r\n\r\n this._paginationContainer = query(\"[data-container='pagination']\");\r\n this._loadMoreTemplate = template(\"load more\");\r\n\r\n this._element.addEventListener(\"click\", ev => this.handleClick(ev));\r\n\r\n document.addEventListener(\r\n LandingCardLayout.LandingCardLayoutLoadedEvent,\r\n ev => this.handleLoad(ev as CustomEvent));\r\n\r\n this.render();\r\n }\r\n\r\n private get currentPage(): number | null {\r\n const raw = this._element.dataset.currentPage || \"\";\r\n const parsed = parseInt(raw, 10);\r\n\r\n return isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private get totalPages(): number | null {\r\n const raw = this._element.dataset.totalPages || \"\";\r\n const parsed = parseInt(raw, 10);\r\n\r\n return isNaN(parsed) ? null : parsed;\r\n }\r\n\r\n private handleLoad(ev: CustomEvent): void {\r\n if(ev?.detail?.current === undefined || ev?.detail?.total === undefined) {\r\n return;\r\n }\r\n this._element.dataset.currentPage = ev.detail.current.toString();\r\n this._element.dataset.totalPages = ev.detail.total.toString();\r\n this.render();\r\n }\r\n\r\n private handleClick(ev: MouseEvent): void {\r\n let cursor = ev.target as HTMLElement;\r\n while (cursor !== this._element && !cursor.hasAttribute(\"data-action\")) {\r\n cursor = cursor.parentElement as HTMLElement;\r\n }\r\n\r\n switch (cursor.dataset.action) {\r\n case \"load more\":\r\n this.loadMore(this.currentPage === null ? 1 :\r\n this.currentPage + 1);\r\n break;\r\n\r\n case \"first-page\":\r\n this.loadPage(this.currentPage === null ? 1 :\r\n this.currentPage - this.currentPage);\r\n break;\r\n\r\n case \"last-page\":\r\n this.loadPage(this.totalPages === null ? 1 :\r\n this.totalPages);\r\n break;\r\n\r\n case \"previous\":\r\n this.loadPage(this.currentPage === null ? 1 :\r\n this.currentPage - 1);\r\n break;\r\n\r\n case \"next\":\r\n this.loadPage(this.currentPage === null ? 1 :\r\n this.currentPage + 1);\r\n break;\r\n\r\n case \"load page\":\r\n this.loadPage(parseInt(cursor.dataset.page || \"\", 10));\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n\r\n private loadMore(page: number): void {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(LandingCardLoader.LoadMoreEvent, page));\r\n }\r\n\r\n private loadPage(page: number): void {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(LandingCardLoader.LoadPageEvent, page));\r\n }\r\n\r\n private render(): void {\r\n while (this._paginationContainer.firstChild) {\r\n this._paginationContainer.firstChild.remove();\r\n }\r\n\r\n this.renderLoadMore();\r\n $(function ():void {\r\n if (WyanokeUtil.isMobile()){\r\n $(\"div[data-component='LandingCardFeatured']\")\r\n .insertAfter(\"nav[data-component='LandingCardLoader']\");\r\n }\r\n });\r\n\r\n moduletracking.AjaxTrackLinks(this._element,\"LandingCardLoader\");\r\n }\r\n\r\n private renderLoadMore(): void {\r\n const shouldDisplay =\r\n this.currentPage !== null &&\r\n this.totalPages !== null &&\r\n this.currentPage < this.totalPages;\r\n\r\n if (!shouldDisplay) {\r\n return;\r\n }\r\n\r\n this.add(this._loadMoreTemplate);\r\n }\r\n\r\n private add(html: string | null): void {\r\n if (html) {\r\n this._working.innerHTML = html;\r\n const element = this._working.firstElementChild;\r\n if (element) {\r\n this._paginationContainer.appendChild(element);\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LandingCardLoader\", LandingCardLoader);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\ninterface ISubSpecialtyListItem {\r\n element: HTMLAnchorElement;\r\n text: string;\r\n url: string | null;\r\n value: string | null;\r\n }\r\n\r\nexport class SubSpecialtySelect extends Component {\r\n\r\n public static readonly SubSpecialtySelectInitEvent: string =\r\n \"SubSpecialtySelect::InitEvent\";\r\n\r\n private _lastValue: string | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n\r\n if (!(await this.attemptTagPatternMatch())){\r\n this.attemptUrlPatternMatch();\r\n }\r\n\r\n this._lastValue = this.subspecialty;\r\n\r\n this._element\r\n .querySelectorAll(\"[data-action='select subspecialty']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleSubSpecialtyClick(ev)));\r\n\r\n const mobileH1 =\r\n document.querySelector(\"h1[data-subspecialty-title='mobile']\");\r\n\r\n if (mobileH1) {\r\n mobileH1.textContent = this.selectedElement ?\r\n this.selectedElement.textContent : this.getCurrentDropDownValue() ?\r\n this.getCurrentDropDownValue() : \"\";\r\n }\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n SubSpecialtySelect.SubSpecialtySelectInitEvent,\r\n this.subspecialty));\r\n }\r\n\r\n public get subspecialty(): string {\r\n const active = this.selectedElement;\r\n\r\n return active ? active.dataset.value || \"\" : \"\";\r\n }\r\n\r\n public get subspecialtyName(): string {\r\n const active = this.selectedElement;\r\n\r\n return active ? active.textContent || \"\" : \"\";\r\n }\r\n\r\n private get subspecialties(): ReadonlyArray {\r\n return this.subspecialtyElements\r\n .map(element => {\r\n const text = (element.textContent || \"\").trim();\r\n const url = element.dataset.urlPattern || null;\r\n const value = element.dataset.value || null;\r\n\r\n return {\r\n element,\r\n text,\r\n url: url ? url.toLowerCase() : null,\r\n value\r\n };\r\n });\r\n }\r\n\r\n private async attemptTagPatternMatch(): Promise {\r\n\r\n const context = await WyanokeUtil.loadContext(true);\r\n\r\n if (!context) {\r\n return false;\r\n }\r\n const docinfo = context.docinfo;\r\n\r\n if (!docinfo){\r\n return false;\r\n }\r\n\r\n const subspec = docinfo.primarysubspecialty;\r\n\r\n if (subspec) {\r\n const items = this.subspecialties;\r\n const item = items.find(\r\n s => s.text.toLowerCase().trim().replace(\" \", \"\") ===\r\n subspec.toLocaleLowerCase().trim().replace(\" \", \"\")\r\n );\r\n\r\n if (!item) {\r\n console.warn(\r\n \"URL value not found in SubSpecialty list\",\r\n subspec);\r\n\r\n return false;\r\n }\r\n\r\n this.setSelectedItem(item);\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private attemptUrlPatternMatch(): boolean {\r\n const match = window.location.pathname.split(\"/\");\r\n\r\n // tslint:disable-next-line: no-magic-numbers\r\n if (match.length < 3) {\r\n console.warn(\"No SubSpecialty in URL\");\r\n\r\n return false;\r\n }\r\n\r\n // tslint:disable-next-line: no-magic-numbers\r\n const value = match[2];\r\n\r\n if (!value) {\r\n console.warn(\"No SubSpecialty in URL\");\r\n\r\n return false;\r\n }\r\n\r\n const items = this.subspecialties;\r\n const item = items.find(s => s.text === value);\r\n\r\n if (!item) {\r\n console.warn(\r\n \"URL value not found in SubSpecialty list\",\r\n value);\r\n\r\n return false;\r\n }\r\n\r\n this.setSelectedItem(item);\r\n\r\n return true;\r\n }\r\n\r\n private get selectedElement(): HTMLAnchorElement | null {\r\n const selector = \"[data-contains='subspecialties'] .active\";\r\n\r\n return this._element.querySelector(selector);\r\n }\r\n\r\n private get subspecialtyElements(): ReadonlyArray {\r\n const selector = \"[data-contains='subspecialties'] > a\";\r\n const items = this._element.querySelectorAll(selector);\r\n\r\n return Array.from(items);\r\n }\r\n\r\n private handleSubSpecialtyClick(ev: Event): void {\r\n this.subspecialtyElements.forEach(item =>\r\n item.classList[item === ev.target ? \"add\" : \"remove\"](\"active\"));\r\n\r\n const selected = this.selectedElement;\r\n const subspecialtyId = this.subspecialty;\r\n\r\n $(\"[data-toggle='dropdown']\", this._element)\r\n .dropdown(\"toggle\")\r\n .text(selected ? selected.textContent || \"\" : \"\");\r\n\r\n if (subspecialtyId === this._lastValue) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n return;\r\n }\r\n\r\n this._lastValue = subspecialtyId;\r\n\r\n if (selected) {\r\n console.log(\"Navigating SubSpecialty Selected: \" + selected.href);\r\n window.location.href = selected.href;\r\n }\r\n }\r\n\r\n private setSelectedItem(item: ISubSpecialtyListItem): void {\r\n const items = this.subspecialties;\r\n items.forEach(i => {\r\n const action = i.element === item.element ? \"add\" : \"remove\";\r\n i.element.classList[action](\"active\");\r\n });\r\n\r\n const toggle = this._element.querySelector(\"[data-toggle='dropdown']\");\r\n if (toggle) {\r\n toggle.textContent = item.text;\r\n }\r\n }\r\n\r\n private getCurrentDropDownValue(): string | null {\r\n const toggle = this._element.querySelector(\"[data-toggle='dropdown']\");\r\n\r\n return toggle ? toggle.textContent : \"\";\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"SubSpecialtySelect\", SubSpecialtySelect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { ITopic } from \"../../models/ITopic\";\r\nimport { ICreditType } from \"../../models/ICreditType\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class TopicAndCreditTypeFilter extends Component {\r\n public static readonly TopicFilterChangeEvent: string =\r\n \"TopicFilterChangeEvent\";\r\n\r\n private readonly _topicMenuContainer: HTMLElement | null;\r\n private readonly _topicMenuTemplate: HTMLElement | null;\r\n private readonly _creditTypeMenuContainer: HTMLElement | null;\r\n private readonly _creditTypeMenuTemplate: HTMLElement | null;\r\n private readonly _chipsContainer: HTMLElement | null;\r\n private readonly _topicChipsTemplate: HTMLElement | null;\r\n private readonly _creditTypeChipsTemplate: HTMLElement | null;\r\n private readonly _clearTopicsButton: HTMLElement | null;\r\n private readonly _applyTopicsButton: HTMLElement | null;\r\n private readonly _applyCreditTypesButton: HTMLElement | null;\r\n\r\n private _lastSelectedValue: ReadonlyArray = [];\r\n private _selectedTopics: ITopic[] = [];\r\n private _selectedCreditTypes: ICreditType[] = [];\r\n private _specialtyId: string = \"\";\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n this._topicMenuContainer = this._element.querySelector(\"[data-initialize-as='topic menu']\");\r\n this._topicMenuTemplate = this._element.querySelector(\"[data-initialize-as='topic menu template']\");\r\n this._creditTypeMenuContainer = this._element.querySelector(\"[data-initialize-as='credit type menu']\");\r\n this._creditTypeMenuTemplate = this._element.querySelector(\"[data-initialize-as='credit type menu template']\");\r\n this._chipsContainer = this._element.querySelector(\"[data-initialize-as='topic chips']\");\r\n this._creditTypeChipsTemplate = this._element.querySelector(\"[data-initialize-as='credit type chips template']\");\r\n this._topicChipsTemplate = this._element.querySelector(\"[data-initialize-as='topic chips template']\");\r\n this._clearTopicsButton = this._element.querySelector(\"[data-initialize-as='clear topics']\");\r\n this._applyTopicsButton = this._element.querySelector(\"[data-initialize-as='apply topics']\");\r\n this._applyCreditTypesButton = this._element.querySelector(\"[data-initialize-as='apply credit types']\");\r\n\r\n document.addEventListener(SpecialtySelect.SpecialtySelectInitEvent, e => this.handleSpecialtyChange(e as CustomEvent));\r\n\r\n if(this._applyTopicsButton){\r\n this._applyTopicsButton.addEventListener(\"click\", ev => this.handleMenuApply(ev));\r\n }\r\n if(this._applyCreditTypesButton){\r\n this._applyCreditTypesButton.addEventListener(\"click\", ev => this.handleMenuApply(ev));\r\n }\r\n\r\n if(this._clearTopicsButton){\r\n this._clearTopicsButton.addEventListener(\"click\", ev => this.handleClearAllTopics(ev));\r\n }\r\n\r\n if(this._applyCreditTypesButton){\r\n this._applyCreditTypesButton.addEventListener(\"click\", ev => this.handleMenuApply(ev));\r\n }\r\n\r\n $(this._element).find(\".dropdown-menu\").on(\"click.bs.dropdown\", function (e) {\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n // public get topics(): ReadonlyArray {\r\n // return this._selectedTopics;\r\n // }\r\n\r\n public get topics(): ReadonlyArray {\r\n return this._selectedTopics;\r\n }\r\n\r\n public get creditTypes(): ReadonlyArray {\r\n return this._selectedCreditTypes;\r\n }\r\n\r\n private async handleSpecialtyChange(\r\n event: CustomEvent\r\n ): Promise {\r\n if (event.cancelable) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n }\r\n\r\n this._specialtyId = event.detail;\r\n const context = this._pageContext;\r\n const service = context ? context.topicListService : null;\r\n\r\n if (service === null) {\r\n throw new Error(\"No topic service available.\");\r\n }\r\n\r\n let topicsAndCreditTypes = await service.getTopicsAndCreditTypesBySpecialty(this._specialtyId);\r\n\r\n const topics = topicsAndCreditTypes.topics;\r\n const creditTypes = topicsAndCreditTypes.creditTypes;\r\n\r\n let cookieValue = this.getCookie(\"healio.topicfilter\" + this._specialtyId);\r\n let selectedTopics: ITopic[] = [];\r\n if (cookieValue){\r\n selectedTopics = JSON.parse(decodeURIComponent(cookieValue)) as ITopic[];\r\n }\r\n\r\n cookieValue = this.getCookie(\"healio.credittypefilter\" + this._specialtyId);\r\n let selectedCreditTypes: ICreditType[] = [];\r\n if (cookieValue){\r\n selectedCreditTypes = JSON.parse(decodeURIComponent(cookieValue)) as ICreditType[];\r\n }\r\n\r\n if (topics.length > 0){\r\n this._element.hidden = false;\r\n }\r\n\r\n if (this.creditTypes.length > 0){\r\n this._element.hidden = false;\r\n }\r\n\r\n this.updateTopics(topics, selectedTopics, creditTypes, selectedCreditTypes);\r\n }\r\n\r\n private raiseChangeEvent(specialtyChangeEvent?: CustomEvent): void {\r\n // The \"Topic Change\" event fires when the filter has detected a change in\r\n // internal state, such as due to the user clicking on chips or hitting\r\n // the apply button. However, it can also fire if a specialty change\r\n // event is being chained in, even if this event does not result in a\r\n // change in internal state. This is because items listening for this\r\n // event are generally concerned about the combined state of the two\r\n // filters, and if the specialty filter has changed, then the context of\r\n // the topic filter has changed, even if the internal state has not.\r\n // In other words, there is a contextual change between\r\n // \"specialty 1, no topics selected\" and \"specialty 2, no topics selected\",\r\n // and we need to signal that context shift, even though nothing internal\r\n // has actually changed.\r\n\r\n const newValue = {\r\n topics: this._selectedTopics,\r\n creditTypes : this._selectedCreditTypes\r\n };\r\n const creditIds = this._selectedCreditTypes.map(c => c.creditTypeId);\r\n const topicIds = this._selectedTopics.map(t => t.topicId);\r\n const ids = creditIds.concat(topicIds);\r\n\r\n if (!specialtyChangeEvent) {\r\n const sameAsLastTime =\r\n ids.length != 0 &&\r\n this._lastSelectedValue.length != 0 &&\r\n ids.length === this._lastSelectedValue.length &&\r\n ids.every(id => this._lastSelectedValue.indexOf(id) !== -1);\r\n\r\n if (sameAsLastTime) {\r\n return;\r\n }\r\n }\r\n\r\n this._lastSelectedValue = ids;\r\n\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(TopicAndCreditTypeFilter.TopicFilterChangeEvent, newValue));\r\n }\r\n\r\n private showHideClearFilter(): void {\r\n if (this._clearTopicsButton) {\r\n this._clearTopicsButton.hidden = this._selectedTopics.length > 0 || this._selectedCreditTypes.length > 0\r\n ? false\r\n : true;\r\n }\r\n }\r\n\r\n public handleMenuApply(ev: Event | null): void {\r\n\r\n if(!this._topicMenuContainer){\r\n return;\r\n }\r\n\r\n if(!this._creditTypeMenuContainer){\r\n return;\r\n }\r\n\r\n this._selectedTopics = [];\r\n this._topicMenuContainer.querySelectorAll(\"input[type='checkbox']:checked\").forEach(topic => {\r\n if(topic.dataset.topicName && topic.dataset.topicId){\r\n this._selectedTopics.push({topicId: topic.dataset.topicId, topicName: topic.dataset.topicName});\r\n }\r\n });\r\n\r\n this._selectedCreditTypes = [];\r\n this._creditTypeMenuContainer.querySelectorAll(\"input[type='checkbox']:checked\").forEach(creditType => {\r\n if(creditType.dataset.creditTypeName && creditType.dataset.creditTypeId){\r\n this._selectedCreditTypes.push({creditTypeId: creditType.dataset.creditTypeId, creditTypeName: creditType.dataset.creditTypeName});\r\n }\r\n });\r\n\r\n this.setCookie();\r\n\r\n this.updateChips();\r\n\r\n this.showHideClearFilter();\r\n\r\n this.raiseChangeEvent();\r\n }\r\n\r\n private handleClearAllTopics(ev: Event | null) : void {\r\n if (ev?.cancelable) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n }\r\n this._selectedTopics = [];\r\n\r\n this._selectedCreditTypes = [];\r\n\r\n this.setCookie();\r\n\r\n this.updateChips();\r\n\r\n this.clearCheckboxes();\r\n\r\n this.showHideClearFilter();\r\n\r\n this.raiseChangeEvent();\r\n }\r\n\r\n private updateChips(): void {\r\n if(this._topicChipsTemplate && this._chipsContainer && this._creditTypeChipsTemplate){\r\n\r\n this._chipsContainer.innerHTML = \"\";\r\n\r\n for(var topic of this._selectedTopics){\r\n let html = this._topicChipsTemplate.innerHTML\r\n .replace(\"{{topicId}}\", topic.topicId)\r\n .replace(\"{{topicName}}\", topic.topicName)\r\n .replace(\"{{topicLabel}}\", topic.topicName);\r\n this._chipsContainer.innerHTML += html;\r\n }\r\n\r\n for(var creditType of this._selectedCreditTypes){\r\n let html = this._creditTypeChipsTemplate.innerHTML\r\n .replace(\"{{creditTypeId}}\", creditType.creditTypeId)\r\n .replace(\"{{creditTypeName}}\", creditType.creditTypeName)\r\n .replace(\"{{creditTypeLabel}}\", creditType.creditTypeName);\r\n this._chipsContainer.innerHTML += html;\r\n }\r\n\r\n\r\n\r\n this._chipsContainer.querySelectorAll(\".topic-chip\").forEach(chip => {\r\n chip.addEventListener(\"click\", e => this.removeTopicChip(chip.dataset.topicId ?? \"\"));\r\n });\r\n\r\n this._chipsContainer.querySelectorAll(\".credit-type-chip\").forEach(chip => {\r\n chip.addEventListener(\"click\", e => this.removeCreditTypeChip(chip.dataset.creditTypeId ?? \"\"));\r\n });\r\n }\r\n }\r\n\r\n private clearCheckboxes(): void {\r\n this._topicMenuContainer?.querySelectorAll('input[data-topic-id]').forEach(el => {\r\n (el as HTMLInputElement).checked = false;\r\n el.parentElement?.classList.remove(\"checked\");\r\n });\r\n\r\n this._creditTypeMenuContainer?.querySelectorAll('input[data-credit-type-id]').forEach(el => {\r\n (el as HTMLInputElement).checked = false;\r\n el.parentElement?.classList.remove(\"checked\");\r\n });\r\n }\r\n\r\n private removeTopicChip(topicId: string): void {\r\n if(!this._topicMenuContainer){\r\n return;\r\n }\r\n\r\n let chipMenuItem = this._topicMenuContainer.querySelector(\"input[data-topic-id='\" + topicId + \"']\") as HTMLInputElement;\r\n if(chipMenuItem){\r\n chipMenuItem.checked = false;\r\n chipMenuItem.parentElement?.classList.remove(\"checked\");\r\n\r\n this.handleMenuApply(null);\r\n }\r\n }\r\n\r\n private removeCreditTypeChip(creditTypeId: string): void {\r\n if(!this._creditTypeMenuContainer){\r\n return;\r\n }\r\n\r\n let chipMenuItem = this._creditTypeMenuContainer.querySelector(\"input[data-credit-type-id='\" + creditTypeId + \"']\") as HTMLInputElement;\r\n if(chipMenuItem){\r\n chipMenuItem.checked = false;\r\n chipMenuItem.parentElement?.classList.remove(\"checked\");\r\n\r\n this.handleMenuApply(null);\r\n }\r\n }\r\n\r\n\r\n private updateTopics(topics: ITopic[], selectedTopics: ITopic[], creditTypes: ICreditType[], selectedCreditTypes: ICreditType[]){\r\n let selectedTopicIds = selectedTopics.map(t => t.topicId);\r\n if(this._topicMenuContainer && this._topicMenuTemplate){\r\n for (var topic of topics){\r\n let html = this._topicMenuTemplate.innerHTML\r\n .replace(\"{{topicId}}\", topic.topicId)\r\n .replace(\"{{topicName}}\", topic.topicName)\r\n .replace(\"{{topicLabel}}\", topic.topicName);\r\n html.replace(\"{{checked}}\", selectedTopicIds.includes(topic.topicId) ? \"checked\" : \"\");\r\n\r\n this._topicMenuContainer.innerHTML += html;\r\n }\r\n }\r\n\r\n let selectedCreditTypesIds = selectedCreditTypes.map(ct => ct.creditTypeId);\r\n if(this._creditTypeMenuContainer && this._creditTypeMenuTemplate){\r\n for (var creditType of creditTypes){\r\n let html = this._creditTypeMenuTemplate.innerHTML\r\n .replace(\"{{creditTypeId}}\", creditType.creditTypeId)\r\n .replace(\"{{creditTypeName}}\", creditType.creditTypeName)\r\n .replace(\"{{creditTypeLabel}}\", creditType.creditTypeName);\r\n html.replace(\"{{checked}}\", selectedCreditTypesIds.includes(creditType.creditTypeId) ? \"checked\" : \"\");\r\n\r\n this._creditTypeMenuContainer.innerHTML += html;\r\n }\r\n }\r\n\r\n $('input[data-credit-type-id=\"{93E5D784-C936-42CE-ADA0-B7D30DB3E3A9}\"]')[0]?.parentElement?.classList.add(\"cme\")\r\n\r\n $(this._element).find('input.form-check-input').on('change', function(){\r\n if($(this).is(\":checked\")) {\r\n $(this).parent().addClass('checked');\r\n } else {\r\n $(this).parent().removeClass('checked');\r\n }\r\n });\r\n\r\n this.handleMenuApply(null);\r\n }\r\n\r\n private setCookie() : void {\r\n if (window.location.pathname){\r\n let filterValue = JSON.stringify(this._selectedTopics);\r\n document.cookie = \"healio.topicfilter.\" + this._specialtyId + \"=\" + encodeURIComponent(filterValue);\r\n\r\n filterValue = JSON.stringify(this._selectedCreditTypes);\r\n document.cookie = \"healio.credittypefilter.\" + this._specialtyId + \"=\" + encodeURIComponent(filterValue);\r\n }\r\n }\r\n\r\n private getCookie(cname: string): string {\r\n const name = cname + \"=\";\r\n const ca = document.cookie.split(\";\");\r\n\r\n for(let c of ca) {\r\n while (c.charAt(0) === \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n\r\n return \"\";\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"TopicAndCreditTypeFilter\", TopicAndCreditTypeFilter);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { SubSpecialtySelect } from \"../healioGlobal/SubSpecialtySelect\";\r\nimport { ViewBySubSpecialty } from \"./ViewBySubSpecialty\";\r\n\r\nexport class ViewBySpecialty extends Component {\r\n\r\n private _selectedSpecialty = \"\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n let context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n let selectedSpecialty = this._element.dataset.specialtyId;\r\n if(selectedSpecialty){\r\n this._selectedSpecialty = selectedSpecialty;\r\n }\r\n\r\n // re-using this event since the landing card layout is already listening for it\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(SpecialtySelect.SpecialtySelectInitEvent, null));\r\n\r\n // check for subspecialty component, if it's not added then just emit the subspecialty select too. In the old selects we\r\n // would just add it to the page and leave it hidden\r\n const subspecialtySelect: ViewBySubSpecialty | null = context.componentFactory.getComponent(ViewBySubSpecialty);\r\n if(subspecialtySelect){\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(SubSpecialtySelect.SubSpecialtySelectInitEvent, null));\r\n }\r\n }\r\n\r\n public get specialty(): string {\r\n return this._selectedSpecialty;\r\n }\r\n\r\n public get element() : HTMLElement {\r\n return this._element;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ViewBySpecialty\", ViewBySpecialty);\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { SpecialtySelect } from \"../healioGlobal/SpecialtySelect\";\r\nimport { TopicFilter } from \"../topicFilter/TopicFilter\";\r\nimport { TopicAndCreditTypeFilter } from \"../topicAndCreditTypeFilter/TopicAndCreditTypeFilter\";\r\nimport { SubSpecialtySelect } from \"../healioGlobal/SubSpecialtySelect\";\r\nimport { ViewBySpecialty } from \"../news/ViewBySpecialty\";\r\nimport { ILandingPageLoadRequest } from \"../../models/LandingPage/ILandingPageLoadRequest\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport Mustache from \"mustache\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { ViewBySubSpecialty } from \"../news/ViewBySubSpecialty\";\r\n\r\nexport class LandingNoMasonry extends Component {\r\n\r\n public static readonly LoadNextPageEvent = \"LandingNoMasonry.LoadNextPage\";\r\n\r\n // default is page 2 since we are preloading page 1 server-side\r\n private readonly _articleItemTemplate: string | null = null;\r\n private _pageNumber: number = 2;\r\n private _loading: boolean = false;\r\n private _spinner: Element | null;\r\n private _listItemTemplate: string | null = null;\r\n private _lastKnownScroll: number | null = 0;\r\n private _lastRequestId: string | null = null;\r\n private _tempDivElement: JQuery = $(\"
\");\r\n private _cardContainer: HTMLElement | null;\r\n private _loadMoreButton: Element | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n let pageNumber = this._element.dataset.pageNumber;\r\n if (pageNumber) {\r\n this._pageNumber = Number(pageNumber);\r\n }\r\n\r\n this._spinner = document.querySelector(\".cme-spinner\");\r\n\r\n let listItemTemplateElement = document.querySelector(\"#ListingItemTemplate\");\r\n if (listItemTemplateElement) {\r\n const listingItemTemplateHtml = listItemTemplateElement.innerHTML.trim();\r\n this._tempDivElement.html(listingItemTemplateHtml);\r\n // tslint:disable-next-line: max-line-length\r\n if (this._tempDivElement.find('[data-card-element=\"article-template\"]').length) {\r\n this._articleItemTemplate = this._tempDivElement.find('[data-card-element=\"article-template\"]').html();\r\n // tslint:disable-next-line: max-line-length\r\n this._tempDivElement.find('[data-card-element=\"article-template\"]').html(\"\");\r\n }\r\n this._listItemTemplate = this._tempDivElement.html();\r\n }\r\n\r\n let cardContainer = this._element.querySelector(\".card-container\");\r\n this._cardContainer = cardContainer;\r\n\r\n document.addEventListener(LandingNoMasonry.LoadNextPageEvent, this.loadNextPage);\r\n\r\n let loadMoreButton = this._element.querySelector(\"[data-action='load more']\");\r\n if (loadMoreButton) {\r\n this._loadMoreButton = loadMoreButton;\r\n loadMoreButton.addEventListener(\"click\", () => this.loadNextPage());\r\n }\r\n }\r\n\r\n public async init(): Promise {\r\n // todo: load card servince\r\n }\r\n\r\n public async loadNextPage(): Promise {\r\n if (this._loading) {\r\n return;\r\n }\r\n try {\r\n this._loading = true;\r\n this.startSpinner();\r\n\r\n this._lastKnownScroll = window.scrollY;\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const serviceName = this._element.dataset.serviceName\r\n ? this._element.dataset.serviceName\r\n : \"\";\r\n\r\n const service = context.getCardService(serviceName);\r\n if (!service) {\r\n throw new Error(\"No service found for key: \" + serviceName);\r\n }\r\n\r\n if (!this._cardContainer) {\r\n throw new Error(\"No card container!\");\r\n }\r\n\r\n let userId = \"00000000-0000-0000-0000-000000000000\";\r\n if (this._element.dataset.requireUserprofile === \"True\") {\r\n // we await user profile\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n console.error(\"Profile is not loaded\");\r\n\r\n return;\r\n }\r\n userId = (profile.contactid || userId);\r\n }\r\n\r\n const specialtySelect: SpecialtySelect | null =\r\n context.componentFactory.getComponent(SpecialtySelect);\r\n\r\n const topicFilter: TopicFilter | null =\r\n context.componentFactory.getComponent(TopicFilter);\r\n\r\n const creditTypeFilter: TopicAndCreditTypeFilter | null =\r\n context.componentFactory.getComponent(TopicAndCreditTypeFilter);\r\n\r\n const subspecialtySelect: SubSpecialtySelect | null =\r\n context.componentFactory.getComponent(SubSpecialtySelect);\r\n\r\n const templates = this._element.dataset.templateIds\r\n ? this._element.dataset.templateIds\r\n : \"\";\r\n\r\n let specialty = specialtySelect\r\n ? specialtySelect.specialty\r\n : null;\r\n\r\n // sometimes we will use a 'view by specialty' component instead of the regular specialty select control\r\n if (!specialty) {\r\n const viewBySpecialty: ViewBySpecialty | null = context.componentFactory.getComponent(ViewBySpecialty);\r\n specialty = viewBySpecialty ? viewBySpecialty.specialty : null;\r\n }\r\n\r\n let topics;\r\n\r\n if (topicFilter) {\r\n topics = topicFilter\r\n ? topicFilter.topics.map(topic => topic.topicId)\r\n : null;\r\n } else if (creditTypeFilter) {\r\n topics = creditTypeFilter\r\n ? creditTypeFilter.topics.map(topic => topic.topicId)\r\n : null;\r\n } else {\r\n topics = null;\r\n }\r\n\r\n const creditTypes = creditTypeFilter\r\n ? creditTypeFilter.creditTypes.map(creditType => creditType.creditTypeId)\r\n : null;\r\n\r\n let subspecialty = subspecialtySelect\r\n ? subspecialtySelect.subspecialty\r\n : null;\r\n\r\n // sometimes we will use a 'view by subspecialty' component instead of the regular sub specialty select control\r\n if (!subspecialty) {\r\n const viewBySubSpecialty: ViewBySubSpecialty | null = context.componentFactory.getComponent(ViewBySubSpecialty);\r\n subspecialty = viewBySubSpecialty ? viewBySubSpecialty.subspecialty : null;\r\n }\r\n\r\n const requestId =\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15) +\r\n Math.random()\r\n .toString(36)\r\n // tslint:disable-next-line: no-magic-numbers\r\n .substring(2, 15);\r\n this._lastRequestId = requestId;\r\n\r\n const additionalParameters = this._element.dataset.additionalParameters\r\n ? this._element.dataset.additionalParameters\r\n : null;\r\n\r\n const pageId = this._element.dataset.pageId\r\n ? this._element.dataset.pageId\r\n : null;\r\n\r\n const configSettingName = this._element.dataset.configSettingName\r\n ? this._element.dataset.configSettingName\r\n : null;\r\n\r\n const page = this._pageNumber;\r\n const request: ILandingPageLoadRequest = {\r\n additionalParameters,\r\n page,\r\n pageId,\r\n requestId,\r\n templates,\r\n specialty,\r\n subspecialty,\r\n topics,\r\n userId,\r\n creditTypes,\r\n configSettingName\r\n };\r\n\r\n const loadPromise = service.load(request);\r\n\r\n const response = await loadPromise;\r\n\r\n if (!this._lastRequestId ||\r\n !response.requestId ||\r\n response.requestId !== this._lastRequestId) {\r\n return;\r\n }\r\n\r\n // tslint:disable-next-line: no-unsafe-any\r\n let cards = response.cards;\r\n\r\n if (this._listItemTemplate && typeof (response.cards) === \"object\") {\r\n // tslint:disable-next-line: no-unsafe-any\r\n cards = this.renderCardsFromTemplate(response.cards);\r\n }\r\n\r\n const frag = document.createDocumentFragment();\r\n const node = frag.appendChild(document.createElement(\"div\"));\r\n node.innerHTML = cards;\r\n while (node.firstChild) {\r\n var id = String($(node.firstChild).data(\"itemId\"));\r\n var count = $(\"[data-item-id='\" + id + \"']\").length;\r\n console.log(id + \": \" + count);\r\n if (id.length === 0 || count === 0) {\r\n this._cardContainer.appendChild(node.firstChild);\r\n } else {\r\n node.firstChild.remove();\r\n console.log(\"Skipped: \" + id);\r\n console.log(id.length);\r\n }\r\n }\r\n\r\n await context.componentFactory.loadComponents(this._element);\r\n\r\n const knownSpecialty = Boolean(specialty);\r\n const action = knownSpecialty ? \"add\" : \"remove\";\r\n this._element.classList[action](\"known-specialty\");\r\n\r\n const spinnerWait = 60;\r\n\r\n this._pageNumber++;\r\n this.stopSpinner(spinnerWait, this._pageNumber <= response.total);\r\n\r\n\r\n if (this._lastKnownScroll && !WyanokeUtil.isMobile()) {\r\n window.scrollTo(0, this._lastKnownScroll);\r\n }\r\n\r\n\r\n moduletracking.AjaxTrackLinks(this._element, \"Cards\");\r\n\r\n this._loading = false;\r\n } catch (error) {\r\n console.error(error)\r\n this.stopSpinner(0);\r\n this._loading = false;\r\n }\r\n }\r\n\r\n private renderCardsFromTemplate(cards: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._listItemTemplate) {\r\n for (let card of cards) {\r\n const renderedTemplate = Mustache.render(this._listItemTemplate, card);\r\n this._tempDivElement.html(renderedTemplate);\r\n if (card.Id === \"\") {\r\n this._tempDivElement.find('[data-card-element=\"content\"]').remove();\r\n } else {\r\n this._tempDivElement.find('[data-card-element=\"ad\"]').remove();\r\n if (this._articleItemTemplate && card.Articles) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n for (let article of card.Articles) {\r\n const renderedArticle = Mustache.render(this._articleItemTemplate, article);\r\n this._tempDivElement.find('[data-card-element=\"article-template\"]').append(renderedArticle);\r\n }\r\n }\r\n }\r\n this._tempDivElement.find('[data-card-element=\"content\"]')\r\n .children().unwrap();\r\n renderedCards += UiUtil.replaceDataSrcWithSrcInImageTags(this._tempDivElement.html());\r\n };\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n private stopSpinner(timeout: number, showLoadMore: boolean = true): void {\r\n setTimeout(() => {\r\n if (this._spinner) {\r\n this._spinner.classList.remove(\"active\");\r\n }\r\n\r\n if (this._loadMoreButton && showLoadMore) {\r\n this._loadMoreButton.classList.remove(\"d-none\");\r\n }\r\n }, timeout);\r\n }\r\n\r\n private startSpinner(): void {\r\n if (this._spinner) {\r\n this._spinner.classList.add(\"active\");\r\n }\r\n\r\n if (this._loadMoreButton) {\r\n this._loadMoreButton.classList.add(\"d-none\");\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LandingNoMasonry\", LandingNoMasonry);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { SubSpecialtySelect } from \"../healioGlobal/SubSpecialtySelect\";\r\n\r\nexport class ViewBySubSpecialty extends Component {\r\n\r\n private _selectedSubspecialty = \"\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n let context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n let selectedSubspecialty = this._element.dataset.subspecialtyId;\r\n if (selectedSubspecialty) {\r\n this._selectedSubspecialty = selectedSubspecialty;\r\n }\r\n\r\n // re-using this event since the landing card layout is already listening for it\r\n this._element.dispatchEvent(EventUtil.createCustomEvent(SubSpecialtySelect.SubSpecialtySelectInitEvent, null));\r\n }\r\n\r\n public get subspecialty(): string {\r\n return this._selectedSubspecialty;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ViewBySubSpecialty\", ViewBySubSpecialty);\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class MasonryReflow extends Component {\r\n\r\n public readonly MasonryReflowInitEvent:\r\n string = \"MasonryReflowInitEvent\";\r\n\r\n private reflowTimer : any\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.reflowTimer = undefined\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n $(() => {\r\n this.forceMasonryReflow(10000, 1000);\r\n });\r\n\r\n if(typeof(window.ReflowMasonry) !== 'function'){\r\n window.ReflowMasonry = this.reflowMasonry\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(this.MasonryReflowInitEvent, \"\")\r\n );\r\n }\r\n }\r\n\r\n private reflowMasonry() : void {\r\n console.log(\"Masonry: Reflow requested.\");\r\n if (!$('.card--layout').data('masonry')) {\r\n console.log(\"Masonry: Masonry not initialized.\");\r\n return;\r\n }\r\n if(this.reflowTimer){\r\n clearTimeout(this.reflowTimer);\r\n }\r\n\r\n this.reflowTimer = setTimeout(function () {\r\n console.log(\"Masonry: Reflow executed!\");\r\n try {\r\n $('.card--layout').masonry('layout');\r\n } catch (err) {\r\n //ignore error, likely masonry is not done loading\r\n };\r\n\r\n }, 50);\r\n }\r\n\r\n private forceMasonryReflow(duration :any, interval :any) : void {\r\n var counter = 0;\r\n var reflow = setInterval(function () {\r\n console.log(\"Masonry: Forcing reflow...\");\r\n\r\n try {\r\n if ($('.card--layout').data('masonry')) {\r\n $('.card--layout').masonry('layout');\r\n }\r\n } catch (err) {\r\n //ignore error, likely masonry is not done loading\r\n };\r\n\r\n counter += interval;\r\n if (counter === duration) {\r\n clearInterval(reflow);\r\n }\r\n }, interval);\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"MasonryReflow\", MasonryReflow);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class AjaxCustomComponentLoader extends Component {\r\n private readonly loadComponentEvent = \"AjaxCustomComponentLoaderEvent\";\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n element.addEventListener(this.loadComponentEvent,\r\n ev => this.handleEvent(ev, context));\r\n\r\n }\r\n\r\n\r\n private handleEvent(ev: Event, pc: PageContext): void {\r\n\r\n ReloadComponents(\"read-more-wrapper\", pc);\r\n\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"AjaxCustomComponentLoader\", AjaxCustomComponentLoader);\r\n\r\nasync function ReloadComponents(elemId: string, _pageContext: PageContext) {\r\n let targetElem = document.getElementById(elemId);\r\n if (targetElem === null || targetElem === undefined)\r\n return;\r\n await _pageContext?.componentFactory.loadComponents(targetElem)\r\n}\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EmailSignUpSuccessModal } from \"./EmailSignUpSuccessModal\"\r\nimport {\r\n IEmailSignUpRequest\r\n} from \"../../models/EmailSignUp/IEmailSignUpRequest\";\r\nimport {\r\n IEmailSignUpResponseHtml\r\n} from \"../../models/EmailSignUp/IEmailSignUpResponseHtml\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { StringUtil } from \"../../util/StringUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class EmailSignUp extends Component {\r\n private readonly invalidClass = \"is-invalid\";\r\n private readonly _subscribe: HTMLButtonElement;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this._subscribe =\r\n DomUtil.query(element, \"button[data-action='emailregister']\");\r\n\r\n if (!this._subscribe) {\r\n return;\r\n }\r\n this._subscribe\r\n .addEventListener(\"click\", ev => this.handleSubscribe(ev));\r\n\r\n }\r\n private async handleSubscribe(ev: Event): Promise {\r\n const specialty: HTMLSelectElement =\r\n DomUtil.query(this._element, \"select[data-email-list='specialty']\");\r\n const emailInput: HTMLInputElement =\r\n DomUtil.query(this._element, \"input[type='email']\");\r\n\r\n const specialtyEmailList =\r\n specialty.options[specialty.selectedIndex].value;\r\n\r\n if (specialtyEmailList.length === 0 ||\r\n !StringUtil.isValidEmail(emailInput.value)) {\r\n if (specialtyEmailList.length === 0) {\r\n specialty.classList.add(this.invalidClass);\r\n } else {\r\n specialty.classList.remove(this.invalidClass);\r\n }\r\n if (!StringUtil.isValidEmail(emailInput.value)) {\r\n emailInput.classList.add(this.invalidClass);\r\n } else {\r\n emailInput.classList.remove(this.invalidClass);\r\n }\r\n\r\n return;\r\n }\r\n\r\n UiUtil.toggleButtonState(this._subscribe);\r\n const signUpRequest: IEmailSignUpRequest = {\r\n email: emailInput.value,\r\n eolist: this._subscribe.dataset.eolist || \"\",\r\n nwspec: specialtyEmailList,\r\n sendnotification: this._subscribe.dataset.sendnotification || \"\",\r\n source: this._subscribe.dataset.crmSource || \"\"\r\n };\r\n\r\n const context = this._pageContext;\r\n const service = context ? context.emailSignUpService : null;\r\n if (service) {\r\n const signUpResponse = await service.subscribe(signUpRequest);\r\n if (!signUpResponse) {\r\n return\r\n }\r\n const responseHtmlOptions =\r\n JSON.parse(this._subscribe.dataset.signupResponse\r\n || \"[]\") as IEmailSignUpResponseHtml[];\r\n const responseHtml =\r\n responseHtmlOptions.find(\r\n opt => opt.Name.indexOf(signUpResponse) > 0);\r\n\r\n if (responseHtml) {\r\n const detail = responseHtml.Text;\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n EmailSignUpSuccessModal.SignedUpForEmails,\r\n detail));\r\n }\r\n\r\n this._element.hidden = true;\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"EmailSignUp\", EmailSignUp);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class EmailSignUpSuccessModal extends Component {\r\n public static readonly SignedUpForEmails = \"SignedUpForEmails\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n window.addEventListener(EmailSignUpSuccessModal.SignedUpForEmails, ev =>\r\n this.showSignUpModal(ev as CustomEvent));\r\n }\r\n private showSignUpModal(ev: CustomEvent): void {\r\n const modalBody = DomUtil.query(this._element, \"div.modal-body\");\r\n if (modalBody) {\r\n modalBody.innerHTML = ev.detail;\r\n $(this._element).modal(\"show\");\r\n }\r\n\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"EmailSignUpSuccessModal\",\r\n EmailSignUpSuccessModal);\r\n","export const StringUtil = {\r\n\r\n htmlEncode(raw: string | null): string | null {\r\n if (raw === null) {\r\n return null;\r\n }\r\n\r\n return raw\r\n .replace(/&/g, \"&\")\r\n .replace(/\"/g, \""\")\r\n .replace(/'/g, \"'\")\r\n .replace(//g, \">\");\r\n },\r\n\r\n isValidEmail(email: string | null) : boolean {\r\n if(!email){\r\n return false;\r\n }\r\n\r\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\r\n },\r\n\r\n supplant(\r\n template: string | null,\r\n values: { [ key: string ]: string | null }\r\n ): string | null {\r\n if (template === null) {\r\n return null;\r\n }\r\n\r\n return template.replace(\r\n /{([^{}]*)}/g,\r\n\r\n (ignored, propertyName: string) => {\r\n return values[propertyName] || \"\";\r\n }\r\n );\r\n },\r\n};\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EmailSignUpSuccessModal } from \"./EmailSignUpSuccessModal\"\r\nimport {\r\n IEmailSignUpRequest\r\n} from \"../../models/EmailSignUp/IEmailSignUpRequest\";\r\nimport {\r\n IEmailSignUpResponseHtml\r\n} from \"../../models/EmailSignUp/IEmailSignUpResponseHtml\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n// import { StringUtil } from \"../../util/StringUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class EmailSignUpEoOnly extends Component {\r\n // private readonly invalidClass = \"is-invalid\";\r\n private readonly _subscribe: HTMLButtonElement;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this._subscribe =\r\n DomUtil.query(element, \"button[data-action='emailregister']\");\r\n\r\n if (!this._subscribe) {\r\n return;\r\n }\r\n this._subscribe\r\n .addEventListener(\"click\", ev => this.handleSubscribe(ev));\r\n\r\n }\r\n private async handleSubscribe(ev: Event): Promise {\r\n // const specialty: HTMLSelectElement =\r\n // DomUtil.query(this._element, \"select[data-email-list='specialty']\");\r\n const emailInput: HTMLInputElement =\r\n DomUtil.query(this._element, \"input[type='email']\");\r\n\r\n // const specialtyEmailList =\r\n // specialty.options[specialty.selectedIndex].value;\r\n\r\n // if (specialtyEmailList.length === 0 ||\r\n // !StringUtil.isValidEmail(emailInput.value)) {\r\n // if (specialtyEmailList.length === 0) {\r\n // specialty.classList.add(this.invalidClass);\r\n // } else {\r\n // specialty.classList.remove(this.invalidClass);\r\n // }\r\n // if (!StringUtil.isValidEmail(emailInput.value)) {\r\n // emailInput.classList.add(this.invalidClass);\r\n // } else {\r\n // emailInput.classList.remove(this.invalidClass);\r\n // }\r\n\r\n // return;\r\n // }\r\n\r\n UiUtil.toggleButtonState(this._subscribe);\r\n const signUpRequest: IEmailSignUpRequest = {\r\n email: emailInput.value,\r\n eolist: this._subscribe.dataset.eolist || \"\",\r\n nwspec: \"eoonly\",\r\n sendnotification: this._subscribe.dataset.sendnotification || \"\",\r\n source: this._subscribe.dataset.crmSource || \"\"\r\n };\r\n\r\n const context = this._pageContext;\r\n const service = context ? context.emailSignUpService : null;\r\n if (service) {\r\n const signUpResponse = await service.subscribe(signUpRequest);\r\n if (!signUpResponse) {\r\n return\r\n }\r\n const responseHtmlOptions =\r\n JSON.parse(this._subscribe.dataset.signupResponse\r\n || \"[]\") as IEmailSignUpResponseHtml[];\r\n const responseHtml =\r\n responseHtmlOptions.find(\r\n opt => opt.Name.indexOf(signUpResponse) > 0);\r\n\r\n if (responseHtml) {\r\n const detail = responseHtml.Text;\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n EmailSignUpSuccessModal.SignedUpForEmails,\r\n detail));\r\n }\r\n\r\n this._element.hidden = true;\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"EmailSignUpEoOnly\", EmailSignUpEoOnly);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class HealioFooter extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {}\r\n}\r\n\r\nComponentFactory.registerComponent(\"HealioFooter\", HealioFooter);","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class HealioSearchBox extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n if (!$) {\r\n return;\r\n }\r\n let self = this;\r\n const inputBoxBindingEvent = ['keypress', 'keydown', 'keyup'];\r\n\r\n let searchInput = this._element.querySelector('#coveodesktopsearchinput,#coveomobilesearchinput')\r\n\r\n inputBoxBindingEvent.forEach(evt => {\r\n searchInput?.addEventListener(evt,\r\n (event) => {\r\n let keyboardEvent = event as KeyboardEvent;\r\n if (keyboardEvent.code.toLocaleLowerCase() === \"enter\" && ($('#coveodesktopsearchinput').val() || $('#coveomobilesearchinput').val())) {\r\n event.preventDefault();\r\n self.doSearch();\r\n }\r\n }, false);\r\n });\r\n\r\n let searchButton = this._element.querySelector('.CoveoSearchButton')\r\n\r\n searchButton?.addEventListener('click', (event) => {\r\n event.preventDefault();\r\n self.doSearch();\r\n })\r\n }\r\n\r\n private getSearchHost(): string {\r\n let host = window.location.host\r\n if (host.indexOf('cmepreview') > -1) {\r\n if (host.indexOf('qa') > -1) {\r\n host = 'previewqa.healio.com'\r\n } else {\r\n host = 'preview.healio.com'\r\n }\r\n }\r\n\r\n if (host.indexOf('cme') > -1) {\r\n if (host.indexOf('qa') > -1) {\r\n host = 'qa.healio.com'\r\n } else if (host.indexOf('ws') > -1) {\r\n host = 'ws.healio.com'\r\n } else {\r\n host = 'www.healio.com'\r\n }\r\n }\r\n\r\n if (host.indexOf('h6') > -1) {\r\n if (host.indexOf('qa') > -1) {\r\n host = 'previewqa.healio.com'\r\n } else if (host.indexOf('ws') > -1) {\r\n host = 'ws.healio.com'\r\n } else {\r\n host = 'preview.healio.com'\r\n }\r\n }\r\n\r\n return host;\r\n }\r\n\r\n private doSearch(): void {\r\n console.log('doing search box search')\r\n if ($) {\r\n let queryterm = $(\"input#coveodesktopsearchinput\").val();\r\n if (queryterm === \"\")\r\n queryterm = $(\"input#coveomobilesearchinput\").val();\r\n if (typeof(queryterm) !== 'string' || queryterm === \"\") return;\r\n const host = this.getSearchHost()\r\n let u = '/search#q=' + encodeURIComponent(queryterm) + '&sort=relevancy';\r\n if (window.location.href.indexOf(\"/cme\") > -1)\r\n u += \"&f:contenttype=[CME]\";\r\n if (window.location.pathname.indexOf(\"clinical-guidance\") > -1)\r\n u += \"&area=clinicalguidance&f:contenttype=[Clinical Guidance]\";\r\n window.location.href = 'https://' + host + u;\r\n }\r\n }\r\n}\r\n\r\n\r\nComponentFactory.registerComponent(\"HealioSearchBox\", HealioSearchBox);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ListUnstyled extends Component {\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n }\r\n\r\n public async init(): Promise {}\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"ListUnstyled\", ListUnstyled);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { StringUtil } from \"../../util/StringUtil\";\r\n\r\nexport class LoginSignupSplash extends Component {\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if((profile?.isLoggedIn||\"False\") === \"False\") {\r\n this._element.querySelector(\".trending-article\")?.classList.add(\"d-none\");\r\n this._element.querySelector(\".login-signup\")?.classList.remove(\"d-none\");\r\n this._element.querySelectorAll(\".btn\").forEach(ele=>{\r\n const button = ele as HTMLButtonElement;\r\n button.addEventListener(\"click\", ev => this.handleClick(ev));\r\n });\r\n } else {\r\n this._element.querySelector(\".trending-article\")?.classList.remove(\"d-none\");\r\n this._element.querySelector(\".login-signup\")?.classList.add(\"d-none\");\r\n }\r\n }\r\n\r\n public handleClick(evt:Event): void {\r\n const button = evt.target as HTMLButtonElement;\r\n console.log(`${button.innerHTML} clicked`);\r\n const sitename = this._element.dataset.sitename||\"healiotwo\";\r\n const contextid = this._element.dataset.contextid||\"11111111-1111-1111-1111-111111111111\";\r\n\r\n const values = {\r\n sitename,\r\n contextid\r\n };\r\n const reqUrl = StringUtil.supplant(\"/utilityapp/json/na/li/{sitename}/{contextid}\", values) || \"\";\r\n\r\n // hate this, figure it out and fix it later..\r\n $.get(reqUrl,function (data){$('body').append(data);})\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LoginSignupSplash\",LoginSignupSplash);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ScrollToTopButton extends Component {\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n window.addEventListener(\"scroll\", () => this.scrollFunction())\r\n this._element.addEventListener(\"click\", () => UiUtil.scrollToTop())\r\n }\r\n\r\n private scrollFunction(): void {\r\n if (document.body.scrollTop > 300 || document.documentElement.scrollTop > 300) {\r\n this._element.style.display = \"block\";\r\n } else {\r\n this._element.style.display = \"none\";\r\n }\r\n }\r\n}\r\n\r\n\r\n\r\nComponentFactory.registerComponent(\"ScrollToTopButton\",\r\n ScrollToTopButton);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UserActivityService } from \"../../service/UserActivityService\";\r\n\r\nexport class MasterClassActivityCard extends Component {\r\n private _service: UserActivityService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n this._service = context.userActivityService;\r\n if (!this._service) {\r\n throw new Error(\"No activity service service!\");\r\n }\r\n let activityId = this._element.dataset.activityId;\r\n if(!activityId){\r\n throw new Error(\"ActivityId not found!\");\r\n }\r\n\r\n let startButton = this._element.querySelector(`#start-button-${activityId}`) as HTMLAnchorElement;\r\n let progressbar = this._element.querySelector(`#progress-bar-${activityId}`) as HTMLElement;\r\n\r\n let percent = 0;\r\n let buttonText = \"\";\r\n let url = \"\";\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if(!profile){\r\n return;\r\n }\r\n let status = await this._service.getActivityStatus(activityId);\r\n\r\n let complete = status?.steps.filter(s => s.complete === true).length ?? 0;\r\n\r\n //subtract 1 for the claim credit step\r\n let total = (status?.steps.length ?? 0) - 1;\r\n\r\n if(startButton){\r\n this.setModuleTracking(startButton, complete, total);\r\n }\r\n\r\n if(complete === 0){\r\n return;\r\n }\r\n percent = 100.0 * complete / total;\r\n\r\n\r\n if (complete == total){\r\n buttonText = \"Review Activity\";\r\n\r\n\r\n } else if (complete != 0){\r\n buttonText = \"Resume Activity\";\r\n let incompleteStep = status?.steps.find(s => !s.complete);\r\n if(incompleteStep && incompleteStep.stepid && this._element.dataset.steps){\r\n let stepUrls = JSON.parse(this._element.dataset.steps) as any;\r\n if(stepUrls){\r\n url = stepUrls.find((s: { stepid: string | undefined; }) => s.stepid == incompleteStep?.stepid)?.url ?? \"\";\r\n if (url !== \"\") {\r\n url += \"?mode=resume\"\r\n }\r\n }\r\n }\r\n }\r\n\r\n //set percentage\r\n if(progressbar && percent !== 0){\r\n progressbar.style.setProperty(\"width\", `${percent}%`)\r\n progressbar.setAttribute(\"aria-value-now\", percent.toString());\r\n progressbar.setAttribute(\"aria-valuenow\", percent.toString());\r\n progressbar.textContent = `${percent.toFixed()}%`\r\n }\r\n\r\n //set button text\r\n if (startButton && buttonText){\r\n startButton.textContent = buttonText;\r\n startButton.classList.remove(\"btn-primary\");\r\n startButton.classList.add(\"btn-secondary\");\r\n }\r\n\r\n //set button URL\r\n if(startButton && url){\r\n startButton.href = url;\r\n }\r\n\r\n //set badge image and credits\r\n if (complete == total){\r\n let credits = status?.certificate?.credits\r\n let creditText = this._element.querySelector(\"#credits-earned-text\");\r\n if(credits && creditText){\r\n creditText.textContent = credits.toFixed(2);\r\n\r\n let incompleteCredits = this._element.querySelector(\"#activity-statbar-incomplete\") as HTMLElement;\r\n if(incompleteCredits){\r\n incompleteCredits.classList.add(\"d-none\");\r\n }\r\n\r\n let completeCredits = this._element.querySelector(\"#activity-statbar-complete\") as HTMLElement;\r\n if(completeCredits){\r\n completeCredits.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n let gameState = await context.gamificationService?.getActivityState(activityId);\r\n let max = gameState?.steps.reduce((acc : number, step) => {\r\n acc += (step?.maxpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n let earned = gameState?.steps.reduce((acc : number, step) => {\r\n acc += (step?.earnedpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n if (earned != max){\r\n let masterBadgeItem = this._element.querySelector(\"#master-badge-image\") as HTMLElement;\r\n if(masterBadgeItem){\r\n masterBadgeItem.classList.add(\"d-none\");\r\n }\r\n let cmeBadgeItem = this._element.querySelector(\"#cme-badge-image\") as HTMLElement;\r\n if(cmeBadgeItem){\r\n cmeBadgeItem.classList.remove(\"d-none\");\r\n }\r\n }\r\n }\r\n\r\n //set earned credits\r\n }\r\n\r\n public setModuleTracking(startButton: HTMLElement, complete: number, total: number){\r\n let step = window.Activity?.Steps?.filter((s : any) => s.Id == window.Activity?.CurrentStepId);\r\n\r\n if(complete === total){\r\n startButton.setAttribute(\"data-module-track-action\", \"Review_Click_Healio CME MC Content\");\r\n startButton.setAttribute(\"data-module-track-label\", \"Review_Healio CME MC Content\")\r\n } else if(step && step[0] && step[0].Type?.toLowerCase().endsWith(\"game stats\")){\r\n startButton.setAttribute(\"data-module-track-action\", \"Reco Start Activity_Click_Healio CME MC Content\");\r\n startButton.setAttribute(\"data-module-track-label\", \"Reco Start Activity_Healio CME MC Content\")\r\n }\r\n }\r\n }\r\n ComponentFactory.registerComponent(\"MasterClassActivityCard\", MasterClassActivityCard);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { GamificationService } from \"../../service/GamificationService\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { BackNextButton } from \"../BackNextButton\";\r\nimport { UserActivityService } from \"../../service/UserActivityService\";\r\n\r\nexport class MasterClassActivityContent extends Component {\r\n private _service: GamificationService | null = null;\r\n private _activityService: UserActivityService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n //init variables\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n\r\n this._activityService = context.userActivityService;\r\n const activity = window.GamificationActivity;\r\n if(activity === undefined) { return; }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile?.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n\r\n await this._service.currentState();\r\n\r\n //award badges on claim credit step\r\n const claimCreditStepId = window.Activity?.Steps?.find((s : any) => s.Type?.toLowerCase() === \"healio master class claim credit\")?.Id;\r\n if (window.Activity?.CurrentStepId == claimCreditStepId){\r\n console.log(\"Found claim credit step, awarding badges...\");\r\n\r\n await this.awardBadges();\r\n }\r\n\r\n // complete activity if game stats\r\n const gameStatsStepId = window.Activity?.Steps?.find((s : any) => s.Type?.toLowerCase() === \"healio master class game stats\")?.Id;\r\n if (window.Activity?.CurrentStepId == gameStatsStepId){\r\n console.log(\"Found game stats, completing...\");\r\n\r\n const service = context.userActivityService;\r\n if (!service) {\r\n throw new Error(\"No activity service!\");\r\n }\r\n if (gameStatsStepId){\r\n await service.completeActivityStep(gameStatsStepId);\r\n }\r\n }\r\n\r\n // check if next step should be skipped\r\n if(this._activityService && window.Activity?.CurrentStepId){\r\n let state = await this._activityService.currentState();\r\n\r\n let index = state.steps.findIndex(s => s.stepid == window.Activity?.CurrentStepId);\r\n let nextStep = state.steps[index + 1];\r\n if (nextStep.complete){\r\n let url: string | null;\r\n let target = index + 1;\r\n if(nextStep.type.toLowerCase().endsWith(\"overview\")){\r\n let skipto = state.steps[target + 1];\r\n url = skipto.url;\r\n } else if(nextStep.type.toLowerCase().endsWith(\"evaluation\")) {\r\n let skipto = state.steps[target + 2];\r\n url = skipto.url;\r\n }\r\n document.querySelectorAll(\"[data-component='BackNextButton'] > button\").forEach(el => {\r\n if(el.dataset.href && url){\r\n el.dataset.href = url;\r\n }\r\n });\r\n\r\n document.querySelectorAll(\"[data-component='MasterClassModals']\").forEach(el => {\r\n if(el.dataset.nextLink && url){\r\n el.dataset.nextLink = url;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // add event listeners\r\n window.addEventListener(\"gamification.updatepoints\", event => this.updatePoints(event as CustomEvent));\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n }\r\n\r\n public async awardBadges(){\r\n let state = await this._service?.currentState();\r\n if(!state || state.badges?.length > 0 || !this._service){\r\n console.log(\"Cannot award badges\");\r\n return;\r\n }\r\n\r\n console.log(\"Can award badges...\");\r\n await this._service.awardBadges();\r\n }\r\n\r\n public async updatePoints(event: CustomEvent): Promise{\r\n console.log(event);\r\n const e = event.detail as { stepid: string, points: number };\r\n console.log(e);\r\n await this._service?.updatePoints(e.stepid, e.points);\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.pointsupdated\",\r\n null\r\n )\r\n );\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n await this._service?.updateBadges();\r\n return true;\r\n }\r\n }\r\n ComponentFactory.registerComponent(\"MasterClassActivityContent\", MasterClassActivityContent);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { GamificationService } from \"../../service/GamificationService\";\r\nimport { UserActivityService } from \"../../service/UserActivityService\";\r\n\r\nexport class MasterClassModals extends Component {\r\n private _gamificationService: GamificationService | null = null;\r\n private _activityService: UserActivityService | null = null;\r\n private _startingPonts: number = 0;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n // check for valid user\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile?.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n\r\n // add event listeners\r\n window.addEventListener(\"gamification.pointsupdated\", () => this.updateModals());\r\n window.addEventListener(\"gamification.showmodal\", () => this.showModal(null));\r\n window.addEventListener(\"gamification.showpassmodal\", () => this.showModal(true));\r\n window.addEventListener(\"gamification.showfailmodal\", () => this.showModal(false));\r\n\r\n // init\r\n const context = this._pageContext;\r\n if (context === undefined) {\r\n throw new Error(\"No context!\");\r\n }\r\n\r\n if (!context.gamificationService) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n\r\n if (!context.userActivityService) {\r\n throw new Error(\"No activity service!\");\r\n }\r\n\r\n this._gamificationService = context.gamificationService;\r\n this._activityService = context.userActivityService;\r\n\r\n // set next links\r\n this._element.querySelectorAll(\"[data-href]\").forEach(el => {\r\n el.dataset.href = this._element.dataset.nextLink;\r\n });\r\n\r\n // set value max\r\n this._element.querySelectorAll(\"[aria-valuemax]\").forEach(el => {\r\n el.setAttribute(\"aria-valuemax\", this._element.dataset.valueMax ?? \"0\");\r\n });\r\n\r\n // set try again link\r\n this._element.querySelectorAll(\"#try-again-link\").forEach(el => {\r\n el.href = this._element.dataset.selfLink ?? \"\";\r\n });\r\n\r\n // set badge image\r\n this._element.querySelectorAll(\"#cme-badge-image\").forEach(el => {\r\n el.src = this._element.dataset.cmeBadgeSrc ?? \"\";\r\n el.alt = this._element.dataset.cmeBadgeAlt ?? \"\";\r\n });\r\n this._element.querySelectorAll(\"#master-badge-image\").forEach(el => {\r\n el.src = this._element.dataset.masterBadgeSrc ?? \"\";\r\n el.alt = this._element.dataset.masterBadgeAlt ?? \"\";\r\n });\r\n\r\n // set name\r\n this._element.querySelectorAll(\".modal-first-name\").forEach(el => {\r\n el.innerHTML = window.UserProfile?.firstname ?? \"\";\r\n });\r\n\r\n let state = await this._gamificationService.currentState();\r\n if (!state) {\r\n return;\r\n }\r\n let currentStep = state.steps.find(s => s.id == window.Activity?.CurrentStepId);\r\n if (!currentStep) {\r\n return;\r\n }\r\n\r\n this._startingPonts = currentStep.earnedpoints ?? 0;\r\n\r\n // set initial modal state\r\n await this.updateModals();\r\n }\r\n\r\n private async showModal(passed: boolean | null) {\r\n if (!this._gamificationService) {\r\n return;\r\n }\r\n\r\n let state = await this._gamificationService.currentState();\r\n if (!state) {\r\n return;\r\n }\r\n\r\n let currentStep = state.steps.find(s => s.id == window.Activity?.CurrentStepId);\r\n if (!currentStep) {\r\n return;\r\n }\r\n\r\n if (!this._activityService) {\r\n return false;\r\n }\r\n\r\n let activityState = await this._activityService.currentState();\r\n if (!activityState) {\r\n return false;\r\n }\r\n\r\n let activityComplete = activityState.steps.every(s => s.complete || s.type.toLowerCase().endsWith(\"certificate\")) ;\r\n\r\n if (this._startingPonts === currentStep.earnedpoints && activityComplete) {\r\n window.location.href = this._element.dataset.nextLink ?? \"\";\r\n return;\r\n }\r\n\r\n // sum points\r\n let totalMax = state?.steps.reduce((acc: number, step) => {\r\n acc += (step?.maxpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n let totalEarned = state?.steps.reduce((acc: number, step) => {\r\n acc += (step?.earnedpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n // show badge modal\r\n if (passed || totalEarned === totalMax) {\r\n if(activityComplete){\r\n $(\"#reviewBadgeModal\").modal(\"show\");\r\n } else {\r\n $(\"#badgeModal\").modal(\"show\");\r\n }\r\n }\r\n // show complete modal\r\n else if (passed == null && currentStep.earnedpoints === currentStep.maxpoints) {\r\n if(activityComplete){\r\n $(\"#reviewCompleteModal\").modal(\"show\");\r\n } else {\r\n $(\"#completeModal\").modal(\"show\");\r\n }\r\n }\r\n // show incomplete modal\r\n else if (passed == null || passed == false) {\r\n $(\"#incompleteModal\").modal(\"show\");\r\n }\r\n\r\n }\r\n\r\n private async updateModals() {\r\n if (!this._gamificationService) {\r\n return;\r\n }\r\n\r\n let state = await this._gamificationService.currentState();\r\n if (!state) {\r\n return;\r\n }\r\n\r\n let currentStep = state?.steps.find(s => s.id == window.Activity?.CurrentStepId);\r\n if (!currentStep) {\r\n return;\r\n }\r\n\r\n // calculate totals and labels\r\n let totalMax = state?.steps.reduce((acc: number, step) => {\r\n acc += (step?.maxpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n let totalEarned = state?.steps.reduce((acc: number, step) => {\r\n acc += (step?.earnedpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n let earned = currentStep.earnedpoints ?? 0;\r\n let max = currentStep.maxpoints ?? 0;\r\n\r\n let pointsText = `${currentStep.earnedpoints}/${currentStep.maxpoints}`\r\n let percent = 100.0 * earned / max;\r\n\r\n // update points\r\n this.updateModalProgress(pointsText, earned, max, percent);\r\n\r\n // update badges\r\n if (totalEarned == totalMax) {\r\n this.hideElements(\".modal-incomplete-badge\");\r\n this.showElements(\".modal-complete-badge\");\r\n } else {\r\n this.hideElements(\".modal-complete-badge\");\r\n this.showElements(\".modal-incomplete-badge\");\r\n }\r\n }\r\n\r\n private updateModalProgress(pointsText: string, earned: number, max: number, percent: number) {\r\n // change text\r\n document.querySelectorAll(\"#modal-points-text\").forEach(el => {\r\n el.textContent = `${pointsText} points`;\r\n });\r\n\r\n // update percentages\r\n document.querySelectorAll(\".modal-points-tracker\").forEach(bar => {\r\n bar.style.setProperty(\"width\", `${percent}%`);\r\n bar.setAttribute(\"aria-value-max\", max.toString());\r\n bar.setAttribute(\"aria-value-now\", earned.toString());\r\n\r\n bar.setAttribute(\"aria-valuemax\", max.toString());\r\n bar.setAttribute(\"aria-valuenow\", earned.toString());\r\n bar.textContent = earned.toString();\r\n });\r\n }\r\n\r\n private hideElements(selector: string) {\r\n document.querySelectorAll(selector).forEach(el => {\r\n el.classList.add(\"d-none\");\r\n });\r\n }\r\n\r\n private showElements(selector: string) {\r\n document.querySelectorAll(selector).forEach(el => {\r\n el.classList.remove(\"d-none\");\r\n });\r\n }\r\n}\r\nComponentFactory.registerComponent(\"MasterClassModals\", MasterClassModals);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { GamificationService } from \"../../service/GamificationService\"\r\nimport { IGamificationViewModel } from \"../../models/Gamification/IGamificationViewModel\";\r\n\r\nexport class MasterClassPointSummary extends Component {\r\n\r\n private earned: {content: number, resource: number, test: number} = {content: 0, resource: 0, test: 0};\r\n private max: {content: number, resource: number, test: number} = {content: 0, resource: 0, test: 0};\r\n private _service: GamificationService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n const activity = window.GamificationActivity;\r\n if(activity === undefined) { return; }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile) {\r\n\r\n\r\n this.updateBars();\r\n }\r\n }\r\n\r\n private async updateBars(){\r\n if (!this._service){\r\n return;\r\n }\r\n\r\n let state = await this._service.currentState()\r\n\r\n if(state === null){\r\n console.log(\"Could not get state...\")\r\n }\r\n\r\n let pointsType = [\"content\", \"resource\", \"test\"]\r\n\r\n //sum earned points\r\n this.earned = state?.steps.reduce((accumulator: any, step) => {\r\n let type = step.type ? step.type : 0;\r\n accumulator[pointsType[type]] += step.earnedpoints\r\n return accumulator;\r\n }, { content: 0, resource: 0, test: 0 });\r\n\r\n //sum max points\r\n this.max= state?.steps.reduce((accumulator: any, step) => {\r\n let type = step.type ? step.type : 0;\r\n accumulator[pointsType[type]] += step.maxpoints\r\n return accumulator;\r\n }, { content: 0, resource: 0, test: 0 });\r\n\r\n let total = this.max.content + this.max.resource + this.max.test;\r\n\r\n //get total percent\r\n let contentpercenttotal = (this.max.content / total) * 100.0 ;\r\n let resourcepercenttotal = (this.max.resource / total) * 100.0;\r\n let testpercenttotal = (this.max.test / total) * 100.0;\r\n\r\n let largest = contentpercenttotal;\r\n if (resourcepercenttotal > largest){\r\n largest = resourcepercenttotal;\r\n } else if (testpercenttotal > largest) {\r\n largest = testpercenttotal;\r\n }\r\n\r\n let multiplier = (100.0 / largest);\r\n\r\n contentpercenttotal = contentpercenttotal * multiplier;\r\n resourcepercenttotal = resourcepercenttotal * multiplier;\r\n testpercenttotal = testpercenttotal * multiplier;\r\n\r\n //get individual percent\r\n let contentpercent = (this.earned.content / this.max.content) * 100.0;\r\n let resourcepercent = (this.earned.resource / this.max.resource) * 100.0;\r\n let testpercent = (this.earned.test / this.max.test) * 100.0;\r\n\r\n //get string for label\r\n let contentearned = Math.round(this.earned.content) + \"/\" + this.max.content;\r\n let resourceearned = Math.round(this.earned.resource) + \"/\" + this.max.resource;\r\n let testearned = Math.round(this.earned.test) + \"/\" + this.max.test;\r\n\r\n //update bars\r\n this.updateSingleBar(\"content\",\r\n contentpercenttotal,\r\n contentpercent,\r\n Math.round(this.earned.content),\r\n this.max.content,\r\n contentearned,\r\n 0,\r\n state,\r\n \"?mode=retake\");\r\n\r\n this.updateSingleBar(\"resources\",\r\n resourcepercenttotal,\r\n resourcepercent,\r\n Math.round(this.earned.resource),\r\n this.max.resource,\r\n resourceearned,\r\n 1,\r\n state,\r\n \"?mode=retake\");\r\n\r\n this.updateSingleBar(\"test\",\r\n testpercenttotal,\r\n testpercent,\r\n Math.round(this.earned.test),\r\n this.max.test,\r\n testearned,\r\n 2,\r\n state,\r\n \"?mode=retake\");\r\n\r\n let finalScore = this.earned.content + this.earned.resource + this.earned.test;\r\n let score = window.document.querySelector(\"#game-stats-scored\");\r\n if(score){\r\n score.textContent = `${Math.round(finalScore)} points`;\r\n }\r\n\r\n if(finalScore === total){\r\n window.document.querySelector(\"#point-summary-incomplete\")?.classList.add(\"d-none\");\r\n window.document.querySelector(\"#point-summary-complete\")?.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n public updateSingleBar(selector: string,\r\n percenttotal: Number,\r\n percent: Number,\r\n earned: Number,\r\n max: Number,\r\n earnedstring: string,\r\n type: Number,\r\n state: IGamificationViewModel | null,\r\n queryString: string | null = null){\r\n\r\n let bar = this._element.querySelector(`#progress-bar-${selector}-bar`) as HTMLElement;\r\n if(bar){\r\n\r\n //set progress bar styles\r\n bar.style.setProperty(\"width\", `${percenttotal}%`)\r\n let progress = bar.querySelector(\".progress-bar\") as HTMLElement\r\n if(progress){\r\n progress.style.setProperty(\"width\", `${percent}%`)\r\n progress.setAttribute(\"aria-value-max\", max.toString());\r\n progress.setAttribute(\"aria-value-now\", earned.toString());\r\n progress.setAttribute(\"aria-valuenow\", earned.toString());\r\n progress.textContent = earnedstring;\r\n }\r\n\r\n //set the zero label for when there are no points\r\n let zeroLabel = bar.querySelector(\".zero-label\")\r\n if(zeroLabel){\r\n zeroLabel.textContent = earnedstring;\r\n }\r\n\r\n //either show the complete check or the review link\r\n if(earned === max){\r\n let complete = this._element.querySelector(`.status-complete-${selector}`) as HTMLElement;\r\n if (complete){\r\n complete.style.display = \"flex\";\r\n }\r\n } else {\r\n let review = this._element.querySelector(`.status-review-${selector}`) as HTMLElement;\r\n if (review){\r\n review.style.display = \"flex\";\r\n\r\n //get the link for the first step of that type that is not complete\r\n let id = state?.steps.find(s => s.type == type && s.earnedpoints !== s.maxpoints)?.id;\r\n let step = window.Activity?.Steps?.find((s : any) => s.Id == id);\r\n if (step?.Url){\r\n let url = step?.Url;\r\n if (queryString){\r\n url = url + queryString;\r\n }\r\n (review.firstChild as HTMLAnchorElement).href = url;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ComponentFactory.registerComponent(\"MasterClassPointSummary\", MasterClassPointSummary);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { GamificationService } from \"../../service/GamificationService\"\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class MasterClassPointTracker extends Component {\r\n\r\n private earned: {content: number, resource: number, test: number} = {content: 0, resource: 0, test: 0};\r\n private max: {content: number, resource: number, test: number} = {content: 0, resource: 0, test: 0};\r\n private _service: GamificationService | null = null;\r\n private intializing: boolean = true;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n const activity = window.GamificationActivity;\r\n if(activity === undefined) { return; }\r\n await this.update();\r\n\r\n window.addEventListener(\"gamification.pointsupdated\", () => this.update());\r\n window.addEventListener(\"gamification.changetext\", event => this.changeText(event as CustomEvent));\r\n this.intializing = false;\r\n }\r\n\r\n private async changeText(event: CustomEvent){\r\n const e = event.detail as { textId: string };\r\n let newText : string | undefined;\r\n switch(e.textId){\r\n default:\r\n return;\r\n case \"default\":\r\n newText = this._element.dataset.textDefault;\r\n break;\r\n case \"points-missing\":\r\n newText = this._element.dataset.textPointsMissing;\r\n break;\r\n case \"points-max\":\r\n newText = this._element.dataset.textPointsMax;\r\n break;\r\n case \"correct\":\r\n newText = this._element.dataset.textCorrect;\r\n break;\r\n case \"incorrect\":\r\n newText = this._element.dataset.textIncorrect;\r\n break;\r\n case \"failed\":\r\n newText = this._element.dataset.textFailed;\r\n break;\r\n case \"passed\":\r\n newText = this._element.dataset.textPassed;\r\n break;\r\n case \"next\":\r\n newText = this._element.dataset.textNext;\r\n break;\r\n case \"review\":\r\n let badge = \"Master Badge\";\r\n if (this.earned.content != this.max.content\r\n || this.earned.resource != this.max.resource\r\n || this.earned.test != this.max.test){\r\n badge = \"CME Badge\"\r\n }\r\n newText = this._element.dataset.textReview?.replace(\"{badge}\", badge);\r\n break;\r\n case \"review-next\":\r\n newText = this._element.dataset.textReviewNext;\r\n break;\r\n }\r\n\r\n if(newText){\r\n let label = this._element.querySelector(\"#progress-bar-description\");\r\n if(label){\r\n label.textContent = newText;\r\n }\r\n }\r\n }\r\n\r\n private async update(){\r\n if (!this._service){\r\n return;\r\n }\r\n console.log(\"Calculating points...\");\r\n\r\n let state = await this._service.currentState()\r\n const pointsType = [\"content\", \"resource\", \"test\"]\r\n\r\n //parse earned\r\n this.earned = state?.steps.reduce((accumulator: any, step) => {\r\n let type = step.type ? step.type : 0;\r\n accumulator[pointsType[type]] += step.earnedpoints\r\n return accumulator;\r\n }, { content: 0, resource: 0, test: 0 });\r\n\r\n //parse max\r\n this.max= state?.steps.reduce((accumulator: any, step) => {\r\n let type = step.type ? step.type : 0;\r\n accumulator[pointsType[type]] += step.maxpoints\r\n return accumulator;\r\n }, { content: 0, resource: 0, test: 0 });\r\n\r\n //calculate max points\r\n let total = this.max.content + this.max.resource + this.max.test;\r\n let contentpercent = (this.max.content / total) * 100.0;\r\n let resourcepercent = (this.max.resource / total) * 100.0;\r\n let testpercent = (this.max.test / total) * 100.0;\r\n\r\n let contentearned = this.earned.content;\r\n let resourceearned = this.earned.resource;\r\n let testearned = this.earned.test;\r\n\r\n //if not the overview, show actual points (overview always shows max)\r\n if (window.Activity?.Steps?.find((s : any) => s.Type === \"Healio Master Class Overview\")?.Id !== window.Activity?.CurrentStepId){\r\n contentpercent = contentpercent * (this.earned.content / this.max.content);\r\n resourcepercent = resourcepercent * (this.earned.resource / this.max.resource);\r\n testpercent = testpercent * (this.earned.test / this.max.test);\r\n } else {\r\n contentearned = this.max.content;\r\n resourceearned = this.max.resource;\r\n testearned = this.max.test;\r\n }\r\n\r\n //min percent is 4 to show the '0' points earned\r\n contentpercent = contentpercent ? contentpercent : 4;\r\n resourcepercent = resourcepercent ? resourcepercent : 4;\r\n testpercent = testpercent ? testpercent : 4;\r\n\r\n //update bars\r\n this.updateSingleBar(\"#progress-bar-content\", contentpercent, contentearned, this.max.content, true);\r\n this.updateSingleBar(\"#progress-bar-resources\", resourcepercent, resourceearned, this.max.resource, true);\r\n this.updateSingleBar(\"#progress-bar-test\", testpercent, testearned, this.max.test, true);\r\n let currentStep = state?.steps.find(s => s.id == window.Activity?.CurrentStepId);\r\n if(currentStep){\r\n if(currentStep.earnedpoints === 0){\r\n return;\r\n\r\n } else if (currentStep.earnedpoints === currentStep.maxpoints){\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"points-max\"});\r\n this.changeText(ev);\r\n } else{\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"points-missing\"});\r\n this.changeText(ev);\r\n }\r\n }\r\n\r\n }\r\n\r\n private async updateSingleBar(barid: string, percent: number, earned: number, max: number, showTooltip: boolean){\r\n let bar = this._element.querySelector(barid) as HTMLElement;\r\n if(bar){\r\n let oldPoints = Number(bar.getAttribute(\"aria-value-now\"));\r\n let newPoints = Number(earned);\r\n\r\n //if points changed, display difference\r\n if (showTooltip && oldPoints !== newPoints && !this.intializing){\r\n let difference = newPoints - oldPoints;\r\n if (difference > 0){\r\n bar.setAttribute(\"data-original-title\", `+${Math.round(difference).toString()}`);\r\n\r\n $(barid).tooltip();\r\n\r\n //show after bar expands\r\n setTimeout(function(){\r\n $(barid).tooltip(\"show\");\r\n }, 350);\r\n\r\n //hide after a few seconds\r\n setTimeout(function(){\r\n $(barid).tooltip(\"hide\");\r\n $(barid).tooltip(\"dispose\");\r\n }, 2000);\r\n }\r\n }\r\n\r\n //update bar\r\n bar.style.setProperty(\"width\", `calc(${percent}% - 28px)`)\r\n bar.setAttribute(\"aria-value-max\", max.toString());\r\n bar.setAttribute(\"aria-value-now\", earned.toString());\r\n\r\n bar.setAttribute(\"aria-valuemax\", max.toString());\r\n bar.setAttribute(\"aria-valuenow\", earned.toString());\r\n bar.textContent = Math.round(earned).toString();\r\n }\r\n }\r\n }\r\n\r\n ComponentFactory.registerComponent(\"MasterClassPointTracker\", MasterClassPointTracker);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UserActivityService } from \"../../service/UserActivityService\";\r\n\r\nexport class MasterClassProgressBar extends Component {\r\n private _service: UserActivityService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if (context === undefined) { return; }\r\n this._service = context.userActivityService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n\r\n this.setProgress()\r\n\r\n window.addEventListener(\"gamification.updateprogress\", event => this.incrementProgress(event as CustomEvent));\r\n }\r\n\r\n private async setProgress(){\r\n let status = await this._service?.currentState();\r\n if (!status){\r\n return;\r\n }\r\n\r\n let steps = status.steps.filter(s => {\r\n return s.type.toLowerCase() !== \"healio master class overview\"\r\n && s.type.toLowerCase() !== \"healio master class certificate\"\r\n });\r\n\r\n let completeSteps = steps.filter(s => s.complete || s.stepid === window.Activity?.CurrentStepId);\r\n\r\n let percent = (completeSteps.length - 1) / (steps.length - 1.0) * 100.0;\r\n\r\n let progress = this._element.querySelector(\"#progress-bar\") as HTMLProgressElement;\r\n if (progress) {\r\n progress.style.width = `${percent}%`;\r\n progress.setAttribute(\"aria-valuenow\", percent.toString());\r\n progress.setAttribute(\"data-starting-percent\", percent.toString());\r\n }\r\n\r\n completeSteps.forEach(s => {\r\n let el = this._element.querySelector(`#dot-${s.stepid}`);\r\n if(el){\r\n el.classList.add(\"complete\");\r\n let check = el.querySelector(\".fa-check-circle\")\r\n if(check){\r\n check.classList.remove(\"hidden\");\r\n }\r\n }\r\n });\r\n\r\n if(completeSteps.length >= steps.length){\r\n\r\n //show the navigation on review only\r\n let el = document.querySelector(\".review-navigation-container\");\r\n if(el){\r\n el.classList.remove(\"hidden\");\r\n }\r\n\r\n //hide dot\r\n el = document.querySelector(\"#activity-progress-current-step-incomplete\");\r\n if(el){\r\n el.remove();\r\n }\r\n\r\n //show checkmark\r\n el = document.querySelector(\"#activity-progress-current-step-complete\");\r\n if(el){\r\n el.classList.remove(\"hidden\");\r\n }\r\n } else {\r\n //hide checkmark\r\n let el = document.querySelector(\"#activity-progress-current-step-complete\");\r\n if(el){\r\n el.remove()\r\n }\r\n }\r\n }\r\n\r\n public async incrementProgress(event: CustomEvent): Promise {\r\n let status = await this._service?.currentState();\r\n if (status?.steps.find(s => s.stepid == window.Activity?.CurrentStepId)?.complete){\r\n return;\r\n }\r\n\r\n let e = event.detail as {questionCount: number, questionAnswered: number}\r\n let progress = this._element.querySelector(\"#progress-bar\") as HTMLProgressElement;\r\n if (progress) {\r\n let currentPercent = Number(progress.getAttribute(\"data-starting-percent\"))\r\n let stepPercent = Number(progress.dataset[\"stepPercentage\"]) * e.questionAnswered / e.questionCount ;\r\n let newWidth = currentPercent + stepPercent;\r\n progress.style.width = `${newWidth}%`;\r\n progress.setAttribute(\"aria-valuenow\", newWidth.toString());\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MasterClassProgressBar\", MasterClassProgressBar);\r\n","import { BackNextButton } from \"../BackNextButton\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QuestionGroupModel } from \"../../models/QuestionGroup/QuestionGroupModel\";\r\nimport { QuestionModel } from \"../../models/QuestionGroup/QuestionModel\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UrlUtil } from \"../../util/UrlUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class MasterClassQuestionGroupNonScoring extends Component {\r\n context = {\r\n complete: false,\r\n id: \"00000000-0000-0000-0000-000000000000\",\r\n interspersedCorrectIncorrectFeedback: true,\r\n interspersedRationaleFeedback: true,\r\n minscore: 0,\r\n questionGroupName: \"\",\r\n questionGroupType: \"\",\r\n requireall: false,\r\n scored: false,\r\n taTimer: -1,\r\n singletake: false\r\n };\r\n questionCount = 0;\r\n firstanswers: Array = [];\r\n\r\n readonly correctClass = \"correct\";\r\n readonly incorrectClass = \"incorrect\";\r\n readonly incompleteClass = \"incomplete\";\r\n readonly base10 = 10;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n this.context.id =\r\n this._element.getAttribute(\"data-questiongroup-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\";\r\n this.context.complete =\r\n this._element.getAttribute(\"data-questiongroup-complete\") === \"1\";\r\n this.context.minscore = Number.parseInt(\r\n this._element.getAttribute(\"data-questiongroup-minscore\") || \"0\",\r\n this.base10\r\n );\r\n this.context.requireall =\r\n (this._element.getAttribute(\"data-questiongroup-require-all\") || \"0\") ===\r\n \"1\";\r\n this.context.scored =\r\n (this._element.getAttribute(\"data-questiongroup-scored\") || \"0\") === \"1\";\r\n\r\n const t = this._element.getAttribute(\"data-questiongroup-type\");\r\n this.context.questionGroupType = t ? t : \"\";\r\n\r\n const n = this._element.getAttribute(\"data-questiongroup-title\");\r\n this.context.questionGroupName = n ? n : \"\";\r\n\r\n if (!this.context.complete) {\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn?.toLowerCase() !== \"true\") {\r\n const queryStringMap = UrlUtil.getQueryString();\r\n const loginQuery = queryStringMap.get(\"login\");\r\n if (loginQuery !== undefined && loginQuery[0] === \"1\") {\r\n // the login modal should be visible\r\n return;\r\n }\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null));\r\n return;\r\n }\r\n\r\n await this.setQuestionData(this.context.id);\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \"[data-answer-id]\"\r\n );\r\n const textAnswers = this._element.querySelectorAll(\".answer-group textarea\");\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.inputChanged(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"keyup\", ev => this.bufferTextAreaChange(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"blur\", ev => this.textAreaOnBlur(ev));\r\n });\r\n this._element.querySelectorAll(\"#submit-button\")?.forEach(element => {\r\n element.addEventListener(\"click\", ev => this.submit());\r\n });\r\n }\r\n\r\n private static getFirstAnswer(id: string, fa: Array): QuestionModel {\r\n return fa.filter(qg => qg.questionid === id)[0];\r\n }\r\n\r\n private async collectQuestionGroupData({\r\n _profile,\r\n _qg,\r\n }: {\r\n _qg: Element;\r\n _profile: IUserProfile;\r\n }): Promise {\r\n const activity = window.Activity || {};\r\n const questionGroup = new QuestionGroupModel(\r\n _qg.getAttribute(\"data-questiongroup-id\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-title\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-type\") || \"\",\r\n Number(_qg.getAttribute(\"data-questiongroup-minscore\")),\r\n _profile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n activity.Id || \"00000000-0000-0000-0000-000000000000\",\r\n Number(_qg.getAttribute(\"data-questiongroup-attempt\") || 1),\r\n _qg.getAttribute(\"data-questiongroup-attemptdate\") ||\r\n new Date().toISOString(),\r\n Number(_qg.getAttribute(\"data-questiongroup-complete\"))\r\n );\r\n const questions = _qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(q => {\r\n const firstanswer = (q.getAttribute(\"data-first-answer\") || \"1\") === \"1\";\r\n const question = new QuestionModel(\r\n q.getAttribute(\"data-question-id\") || \"\",\r\n q.getAttribute(\"data-question-text\") || \"\",\r\n q.getAttribute(\"data-question-type\") || \"\",\r\n q.getAttribute(\"data-question-key\") || \"\",\r\n\r\n );\r\n const answers = q.querySelectorAll(\"[data-answer-id]\");\r\n answers.forEach(a => {\r\n if (a.tagName === \"TEXTAREA\") {\r\n question.answers.push({\r\n answerid: \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: \"\"\r\n\r\n });\r\n } else {\r\n if ((a as HTMLInputElement).checked) {\r\n question.answers.push({\r\n answerid:\r\n a.getAttribute(\"data-answer-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: \"\"\r\n });\r\n }\r\n }\r\n });\r\n questionGroup.questions.push(question);\r\n if (firstanswer === true && this.firstanswers.filter(fa => fa.questionid === question.questionid).length === 0) {\r\n questionGroup.firstanswers.push(question);\r\n this.firstanswers.push(question);\r\n q.setAttribute(\"data-first-answer\", \"0\");\r\n } else {\r\n var fqa = MasterClassQuestionGroupNonScoring.getFirstAnswer(question.questionid, this.firstanswers);\r\n if (fqa !== undefined && fqa !== null) {\r\n questionGroup.firstanswers.push(fqa);\r\n }\r\n }\r\n });\r\n this.questionCount = questionGroup.questions.length;\r\n return questionGroup;\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n if (this.context.complete) {\r\n console.log(\"[Next Button] - QuestionGroup - already complete\");\r\n\r\n return true;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return false;\r\n }\r\n\r\n if(this.context.requireall){\r\n const valid = this.doValidation();\r\n if (!valid) {\r\n return false;\r\n }\r\n }\r\n\r\n this.clearAllQuestionClasses();\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n this.saveQuestionGroup();\r\n\r\n return true;\r\n }\r\n\r\n\r\n private showRationale(): void {\r\n const passmsg = this._element.querySelector(\"[data-message=passed]\");\r\n const failmsg = this._element.querySelector(\"[data-message=fail]\");\r\n const tryagain = this._element.querySelector(\"[data-message=incorrect]\");\r\n if (passmsg && !passmsg.classList.contains(\"d-none\")) {\r\n passmsg.classList.add(\"d-none\");\r\n }\r\n if (failmsg && !failmsg.classList.contains(\"d-none\")) {\r\n failmsg.classList.add(\"d-none\");\r\n }\r\n if (tryagain && !tryagain.classList.contains(\"d-none\")) {\r\n tryagain.classList.add(\"d-none\");\r\n }\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(question => {\r\n const qr = question.querySelector(\"[data-message=rationale]\");\r\n if (qr) {\r\n qr.classList.remove(\"d-none\");\r\n }\r\n });\r\n }\r\n\r\n private async submit(): Promise {\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n void this.saveQuestionGroup(false);\r\n // await this.doScoring();\r\n this.showRationale();\r\n this._element\r\n .querySelectorAll(\"#submit-button\")\r\n ?.forEach(element => {\r\n element.classList.add(\"disabled\");\r\n element.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n }\r\n\r\n private clearAllQuestionClasses(): void {\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(question => {\r\n this.clearQuestionClasses(question);\r\n });\r\n }\r\n\r\n private clearQuestionClasses(question: Element): void {\r\n question.classList.remove(this.correctClass);\r\n question.classList.remove(this.incorrectClass);\r\n question.classList.remove(this.incompleteClass);\r\n question.querySelectorAll(\"[data-answer-id]\").forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.remove(this.correctClass);\r\n wrapper.classList.remove(this.incorrectClass);\r\n }\r\n });\r\n const eba = question.querySelectorAll(\"[data-message]\");\r\n eba.forEach(eb => {\r\n if (eb) {\r\n if (!eb.classList.contains(\"d-none\")) {\r\n eb.classList.add(\"d-none\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private disableAllQuestions(): void {\r\n this._element.querySelectorAll(\"input, textarea\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"#submit-button\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n e.classList.add(\"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(e => {\r\n if (e) {\r\n this.setQuestionClasses(e, \"disabled\", true);\r\n e.querySelectorAll(\r\n \"[data-message=incomplete],[data-message=incorrect]\"\r\n ).forEach(m => {\r\n if (!m.classList.contains(\"d-none\")) {\r\n m.classList.add(\"d-none\");\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n private setQuestionClasses(\r\n question: Element,\r\n className: string,\r\n setAll: Boolean = false\r\n ): void {\r\n question.classList.add(className);\r\n question\r\n .querySelectorAll(\"[data-answer-id]\" + (setAll ? \"\" : \":checked\"))\r\n .forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.add(className);\r\n }\r\n });\r\n }\r\n\r\n private async setQuestionData(_questionGroupId: string): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n\r\n const questionGroupData = await service.getAnswers(_questionGroupId);\r\n\r\n if (questionGroupData && questionGroupData.questiongroupid) {\r\n this._element.setAttribute(\r\n \"data-questiongroup-complete\",\r\n (questionGroupData.complete || 0).toString()\r\n );\r\n this.context.complete = (questionGroupData.complete || 0) === 1;\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (questionGroupData.complete === 1\r\n ? questionGroupData.attempt\r\n : questionGroupData.attempt + 1\r\n ).toString()\r\n );\r\n questionGroupData.questions.forEach((q, i) => {\r\n const qe = this._element.querySelector(\r\n '[data-question-id=\"' + q.questionid + '\"]'\r\n );\r\n\r\n if (qe) {\r\n const qeType = qe.getAttribute(\"data-question-type\") || \"\";\r\n if (qeType.toLowerCase() !== \"open ended\") {\r\n q.answers.forEach(a => {\r\n const ae = qe.querySelector(\r\n '[data-answer-id=\"' + a.answerid + '\"]'\r\n );\r\n if (ae) {\r\n (ae as HTMLInputElement).checked = true;\r\n }\r\n });\r\n } else {\r\n const ae = qe.querySelector(\"textarea\");\r\n const av = q.answers.length > 0 ? q.answers[0].text : \"\";\r\n if (ae) {\r\n ae.value = av;\r\n }\r\n }\r\n\r\n this.setRatingScale(true, qe as HTMLElement);\r\n }\r\n });\r\n if (\r\n this.context.complete &&\r\n this._element.getAttribute(\"data-questiongroup-scored\") === \"1\"\r\n ) {\r\n // await this.doScoring();\r\n if (questionGroupData.complete === 1) {\r\n this.showRationale();\r\n }\r\n }\r\n\r\n if (this.context.complete && this.context.singletake) {\r\n const context = this._pageContext;\r\n const backNext = context\r\n ? context.componentFactory.getComponent(BackNextButton)\r\n : null;\r\n if (backNext) {\r\n console.log(\"disabling the next button\");\r\n backNext.disableNext();\r\n }\r\n }\r\n if (questionGroupData.complete === 1) {\r\n console.log(\"disabling questions\");\r\n this.disableAllQuestions();\r\n }\r\n }\r\n }\r\n\r\n private textAreaOnBlur(event: Event): void {\r\n if (!(event.target as HTMLElement).getAttribute(\"data-changed\")) {\r\n return;\r\n }\r\n void this.inputChanged(event);\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n }\r\n\r\n private bufferTextAreaChange(event: Event): void {\r\n (event.target as HTMLElement).setAttribute(\"data-changed\", \"1\");\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n const timeout = 1000; // ms\r\n this.context.taTimer = setTimeout(() => {\r\n void this.inputChanged(event);\r\n }, timeout);\r\n }\r\n\r\n private inputChanged(event: Event): void {\r\n const input = event.target as HTMLElement;\r\n input.removeAttribute(\"data-changed\");\r\n const question = input.closest(\"[data-question-id]\");\r\n if (question) {\r\n this.clearQuestionClasses(question);\r\n }\r\n\r\n this.setRatingScale(true, question as HTMLElement);\r\n\r\n void this.saveQuestionGroup(false);\r\n }\r\n\r\n // JUSTIFICATION: type is inferred\r\n // tslint:disable-next-line: typedef\r\n private async saveQuestionGroup(showErrorOnSaveFailed = true): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n const qgd = await this.collectQuestionGroupData({\r\n _profile: profile,\r\n _qg: this._element,\r\n });\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n const saved = await service.saveAnswers(qgd);\r\n if (!saved) {\r\n console.warn(\"MasterClassQuestionGroup was not saved\");\r\n if (showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n }\r\n\r\n private doValidation(): boolean {\r\n let valid = true;\r\n const qg = this._element;\r\n const questions = qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(question => {\r\n if (question.getAttribute(\"data-question-type\") !== \"open ended\") {\r\n const answers = question.querySelectorAll(\"[data-answer-id]:checked\");\r\n if (answers.length < 1) {\r\n valid = false;\r\n question.classList.add(this.incompleteClass);\r\n this.showMessage(question, \"incomplete\");\r\n }\r\n }\r\n });\r\n const incompletearray = this._element.querySelectorAll(\r\n `.${this.incompleteClass}`\r\n );\r\n\r\n const firstincomplete = incompletearray ? incompletearray[0] : null;\r\n if (firstincomplete) {\r\n UiUtil.animateScroll(firstincomplete);\r\n }\r\n\r\n return valid;\r\n }\r\n\r\n private showMessage(question: Element, message: string): void {\r\n const eb = question.querySelector(`[data-message=${message}]`);\r\n if (eb) {\r\n eb.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n private setRatingScale(enable: boolean, question: HTMLElement) {\r\n const ratingGroupAnswers = question.querySelectorAll(\r\n \".rating-group input[type=radio]\"\r\n );\r\n\r\n if (enable) {\r\n ratingGroupAnswers.forEach(answer => {\r\n answer.classList.remove(\"disabled\");\r\n answer.removeAttribute(\"disabled\");\r\n });\r\n } else {\r\n ratingGroupAnswers.forEach(answer => {\r\n answer.classList.add(\"disabled\");\r\n answer.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n }\r\n\r\n\r\n }\r\n}\r\nComponentFactory.registerComponent(\"MasterClassQuestionGroupNonScoring\", MasterClassQuestionGroupNonScoring);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QuestionGroupModel } from \"../../models/QuestionGroup/QuestionGroupModel\";\r\nimport { QuestionModelMasterClass } from \"../../models/MasterClassQuestionGroup/QuestionModelMasterClass\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { IQuestionGroupModel } from \"../../models/QuestionGroup/IQuestionGroupModel\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class MasterClassQuestionGroupPosttest extends Component {\r\n context = {\r\n complete: false,\r\n id: \"00000000-0000-0000-0000-000000000000\",\r\n minscore: 0,\r\n questionGroupName: \"\",\r\n questionGroupType: \"\",\r\n resumemode: false,\r\n reviewmode: false,\r\n retakemode: false,\r\n attempt: \"1\"\r\n };\r\n firstanswers: Array = [];\r\n\r\n readonly correctClass = \"correct\";\r\n readonly incorrectClass = \"incorrect\";\r\n readonly incompleteClass = \"incomplete\";\r\n readonly base10 = 10;\r\n\r\n questionCount = 0;\r\n questionIndex = 0;\r\n questionsCorrect = 0;\r\n questionsAnswerable = 0;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n // check user is logged in\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n\r\n //initialize context\r\n await this.initializeContext();\r\n\r\n // get and set questions and data\r\n await this.setQuestionData(this.context.id);\r\n\r\n // set question visibility based on mode\r\n await this.setQuestionVisibility();\r\n\r\n // set initial progress bar status\r\n await this.updateProgress();\r\n\r\n // set event listeners\r\n await this.initializeListeners();\r\n }\r\n\r\n private async initializeContext() {\r\n this.context.id =\r\n this._element.getAttribute(\"data-questiongroup-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\";\r\n\r\n this.context.minscore = Number.parseInt(\r\n this._element.getAttribute(\"data-questiongroup-minscore\") || \"0\",\r\n this.base10\r\n );\r\n\r\n this.context.complete = this._element.getAttribute(\"data-questiongroup-complete\") === \"1\";\r\n\r\n const t = this._element.getAttribute(\"data-questiongroup-type\");\r\n this.context.questionGroupType = t ? t : \"\";\r\n\r\n const n = this._element.getAttribute(\"data-questiongroup-title\");\r\n this.context.questionGroupName = n ? n : \"\";\r\n }\r\n\r\n private async setQuestionData(_questionGroupId: string): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n\r\n const questionGroupData = await service.getAnswers(_questionGroupId);\r\n\r\n this.determineMode(questionGroupData);\r\n if (questionGroupData && questionGroupData.questiongroupid) {\r\n\r\n this._element.setAttribute(\r\n \"data-questiongroup-complete\",\r\n (questionGroupData.complete || 0).toString()\r\n );\r\n\r\n this.context.complete = (questionGroupData.complete || 0) === 1;\r\n\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (this.context.retakemode || questionGroupData.attempt == 0\r\n ? questionGroupData.attempt + 1\r\n : questionGroupData.attempt\r\n ).toString()\r\n );\r\n\r\n questionGroupData.questions.forEach(question => {\r\n const questionElement = this._element.querySelector(\r\n '[data-question-id=\"' + question.questionid + '\"]'\r\n );\r\n\r\n if (questionElement) {\r\n const questionElementType = questionElement.getAttribute(\"data-question-type\") || \"\";\r\n if (questionElementType.toLowerCase() !== \"open ended\") {\r\n\r\n question.answers.forEach(answer => {\r\n const answerElement = questionElement.querySelector(`[data-answer-id=\"${answer.answerid}\"]`);\r\n\r\n if (!answerElement) return;\r\n\r\n // only mark incorrect answers as 'responded' if we are in review or resume, this will let us know what questions still need to be answered\r\n if (answer.answerid === question.key || this.context.reviewmode || this.context.resumemode) {\r\n (answerElement as HTMLInputElement).checked = true;\r\n questionElement.classList.add(\"responded\");\r\n\r\n let confscaleinputs = questionElement.querySelectorAll(`input[data-rate-question-id=\"${question.questionid}\"]`);\r\n\r\n confscaleinputs.forEach(confidenceInput => {\r\n let input = confidenceInput as HTMLInputElement;\r\n console.log(input);\r\n if (input.value === answer.confidence) {\r\n questionElement.setAttribute(\"data-selected-confidence-value\", answer.confidence)\r\n input.checked = true;\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n if (this.context.complete && !this.context.retakemode && !this.context.resumemode) {\r\n questionElement.classList.add(\"answered\");\r\n }\r\n }\r\n });\r\n\r\n const at = this._element.getAttribute(\"data-questiongroup-attempt\");\r\n this.context.attempt = at ? at : \"\";\r\n\r\n await this.doScoring();\r\n // score\r\n // if (this.context.reviewmode) {\r\n // await this.doScoring();\r\n // }\r\n\r\n }\r\n }\r\n\r\n private async initializeListeners() {\r\n // event listener: answers\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \".answer-group input[type=radio],.answer-group input[type=checkbox]\"\r\n );\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.answerClick(ev));\r\n });\r\n\r\n // event listener: confidence answers\r\n const confidenceAnswers = this._element.querySelectorAll(\r\n \".rating-group .form-check-inline label\"\r\n );\r\n confidenceAnswers.forEach(r => {\r\n r.addEventListener(\"click\", ev => this.handleConfidenceClick(ev));\r\n });\r\n\r\n // event listener: next button\r\n const btnNextQuestions = this._element.querySelectorAll(\".posttest-button-rational .next-question-posttest\");\r\n btnNextQuestions.forEach(btn => {\r\n if (this.context.reviewmode) {\r\n btn.classList.remove(\"d-none\");\r\n btn.parentElement?.parentElement?.classList.remove(\"d-none\");\r\n }\r\n btn.addEventListener(\"click\", (ev) => this.handleNextFinishClick(ev.target));\r\n });\r\n }\r\n\r\n private async setQuestionVisibility() {\r\n if (this.context.resumemode || this.context.retakemode) {\r\n // user is resuming, show only unanswered questions\r\n const questions = this._element.querySelectorAll('[data-question-id]:not(.responded)');\r\n\r\n if (questions.length > 0) {\r\n let firstVisibleQuestion = questions[0] as HTMLElement;\r\n this.resetQuestion(firstVisibleQuestion);\r\n firstVisibleQuestion.classList.remove(\"d-none\");\r\n }\r\n\r\n // set initial question number\r\n this.questionsAnswerable = questions.length;\r\n // this._element.querySelectorAll(\".question-number\").forEach(el => {\r\n // el.textContent = `QUESTION 1 of ${questions.length}`;\r\n // });\r\n\r\n } else {\r\n // user is reviewing or on a first take, show all questions\r\n let questions = this._element.querySelectorAll('[data-question-id]');\r\n questions[0].classList.remove(\"d-none\");\r\n this.setConfidenceVisibility(questions[0] as HTMLElement);\r\n\r\n this.questionsAnswerable = questions.length;\r\n }\r\n\r\n //hide confidence on review\r\n if (this.context.reviewmode) {\r\n this._element.querySelectorAll(\".rating-group\").forEach(el => {\r\n el.classList.add(\"d-none\")\r\n });\r\n }\r\n }\r\n\r\n private resetQuestion(question: HTMLElement) {\r\n question.classList.remove(\"incorrect\");\r\n question.classList.remove(\"disabled\");\r\n question.classList.remove(\"answered\");\r\n\r\n // clear answers\r\n let answers = question.querySelectorAll(\"input\");\r\n answers.forEach(a => {\r\n let inp = a as HTMLInputElement;\r\n inp.checked = false;\r\n })\r\n\r\n // clear confidence\r\n this.setConfidenceVisibility(question);\r\n question.querySelector(\".posttest-button-rational button\")?.classList.add(\"d-none\");\r\n }\r\n\r\n private setConfidenceVisibility(question: HTMLElement): void {\r\n const ratingGroupAnswers = question.querySelectorAll(\".rating-group input[type=radio]\");\r\n\r\n ratingGroupAnswers.forEach(answer => {\r\n answer.classList.remove(\"disabled\");\r\n answer.removeAttribute(\"disabled\");\r\n });\r\n }\r\n\r\n //show/hide posttest-button-rational section\r\n private setButtonRationaleVisibility(question: HTMLElement, show: boolean, showtext: boolean = true): void {\r\n let postTestButton = question.querySelector(\".posttest-button-rational\") as HTMLElement;\r\n\r\n if (show) {\r\n postTestButton.classList.remove(\"d-none\");\r\n let last = true;\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(el => {\r\n if (!el.classList.contains(\"responded\") && !el.classList.contains(\"answered\")) {\r\n last = false;\r\n }\r\n });\r\n if (last) {\r\n let nextButton = postTestButton.querySelector(\".next-question-posttest\")\r\n\r\n if (nextButton) {\r\n nextButton.innerHTML = 'Finish';\r\n }\r\n }\r\n }\r\n\r\n if(showtext){\r\n let rationaletext = question.querySelector(\".rationale\") as HTMLElement;\r\n if(rationaletext){\r\n rationaletext.classList.remove(\"d-none\");\r\n }\r\n }\r\n }\r\n\r\n\r\n // JUSTIFICATION: type is inferred\r\n // tslint:disable-next-line: typedef\r\n private async saveQuestionGroup(showErrorOnSaveFailed = true): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n const qgd = await this.collectQuestionGroupData({\r\n _profile: profile,\r\n _qg: this._element,\r\n });\r\n\r\n // console.log(qgd);\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n const saved = await service.saveAnswers(qgd);\r\n if (!saved) {\r\n console.warn(\"MasterClassQuestionGroup was not saved\");\r\n if (showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n }\r\n\r\n private async updateProgress() {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n let ev = EventUtil.createCustomEvent(\"gamification.updateprogress\", { questionCount: this.questionsAnswerable, questionAnswered: (this.questionIndex) });\r\n this._element.dispatchEvent(ev);\r\n if (this.context.reviewmode){\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"review\" });\r\n window.document.dispatchEvent(ev);\r\n }\r\n }\r\n\r\n private static getFirstAnswer(id: string, fa: Array): QuestionModelMasterClass {\r\n return fa.filter(qg => qg.questionid === id)[0];\r\n }\r\n\r\n private async collectQuestionGroupData({\r\n _profile,\r\n _qg,\r\n }: {\r\n _qg: Element;\r\n _profile: IUserProfile;\r\n }): Promise {\r\n const activity = window.Activity || {};\r\n const questionGroup = new QuestionGroupModel(\r\n _qg.getAttribute(\"data-questiongroup-id\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-title\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-type\") || \"\",\r\n Number(_qg.getAttribute(\"data-questiongroup-minscore\")),\r\n _profile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n activity.Id || \"00000000-0000-0000-0000-000000000000\",\r\n Number(_qg.getAttribute(\"data-questiongroup-attempt\") || 1),\r\n _qg.getAttribute(\"data-questiongroup-attemptdate\") ||\r\n new Date().toISOString(),\r\n Number(_qg.getAttribute(\"data-questiongroup-complete\"))\r\n );\r\n const questions = _qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(q => {\r\n // console.log(q as HTMLElement);\r\n const firstanswer = (q.getAttribute(\"data-first-answer\") || \"1\") === \"1\";\r\n const question = new QuestionModelMasterClass(\r\n q.getAttribute(\"data-question-id\") || \"\",\r\n q.getAttribute(\"data-question-text\") || \"\",\r\n q.getAttribute(\"data-question-type\") || \"\",\r\n q.getAttribute(\"data-question-key\") || \"\"\r\n );\r\n const answers = q.querySelectorAll(\"[data-answer-id]\");\r\n\r\n answers.forEach(a => {\r\n if (a.tagName === \"TEXTAREA\") {\r\n question.answers.push({\r\n answerid: \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: q.getAttribute(\"data-selected-confidence-value\") || \"\"\r\n });\r\n } else {\r\n if ((a as HTMLInputElement).checked) {\r\n question.answers.push({\r\n answerid:\r\n a.getAttribute(\"data-answer-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: q.getAttribute(\"data-selected-confidence-value\") || \"\"\r\n });\r\n }\r\n }\r\n });\r\n\r\n\r\n questionGroup.questions.push(question);\r\n if (firstanswer === true && this.firstanswers.filter(fa => fa.questionid === question.questionid).length === 0) {\r\n questionGroup.firstanswers.push(question);\r\n this.firstanswers.push(question);\r\n q.setAttribute(\"data-first-answer\", \"0\");\r\n } else {\r\n let fqa = MasterClassQuestionGroupPosttest.getFirstAnswer(question.questionid, this.firstanswers);\r\n if (fqa !== undefined && fqa !== null) {\r\n questionGroup.firstanswers.push(fqa);\r\n }\r\n }\r\n });\r\n this.questionCount = questionGroup.questions.filter(q => q.answers.length > 0).length;\r\n return questionGroup;\r\n }\r\n\r\n // no-inferrable-types conflicts with must have typedef...\r\n // tslint:disable-next-line:no-inferrable-types\r\n private async doScoring(): Promise {\r\n const minscore = this.context.minscore;\r\n if (minscore < 1) {\r\n return true;\r\n }\r\n\r\n let pass = true;\r\n let correct = 0;\r\n\r\n const questionGroup = this._element;\r\n const questions = questionGroup.querySelectorAll(\"[data-question-id]\");\r\n\r\n // todo: I think we can delete all of this\r\n // const passmsg = this._element.querySelector(\"[data-message=passed]\");\r\n // const failmsg = this._element.querySelector(\"[data-message=fail]\");\r\n // const infotext = this._element.querySelector(\"#interspersed-info-text\");\r\n\r\n // if (passmsg && !passmsg.classList.contains(\"d-none\")) {\r\n // passmsg.classList.add(\"d-none\");\r\n // }\r\n // if (failmsg && !failmsg.classList.contains(\"d-none\")) {\r\n // failmsg.classList.add(\"d-none\");\r\n // }\r\n // if (infotext && !infotext.classList.contains(\"d-none\")) {\r\n // infotext.classList.add(\"d-none\");\r\n // }\r\n\r\n questions.forEach(question => {\r\n const type = question.getAttribute(\"data-question-type\");\r\n const key = (question.getAttribute(\"data-question-key\") || \"\").split(\",\");\r\n const answers = Array.from(question.querySelectorAll(\"[data-answer-id]:checked\"))\r\n .map(answer => answer.getAttribute(\"data-answer-id\"));\r\n if (key.length < 1) {\r\n correct += 1;\r\n return;\r\n }\r\n\r\n if (answers.length < 1) {\r\n return;\r\n }\r\n\r\n switch (type) {\r\n case \"multiple answer\":\r\n if (\r\n answers.every(a => key.some(k => k === a)) &&\r\n key.every(k => answers.some(a => a === k))\r\n ) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n }\r\n break;\r\n case \"multiple choice\":\r\n if (key.some(k => (answers.length > 0 ? answers[0] : \"\") === k)) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n }\r\n break;\r\n default:\r\n correct += 1;\r\n break;\r\n }\r\n });\r\n\r\n this.questionsCorrect = correct;\r\n pass = correct >= minscore;\r\n\r\n await this.updateGamificationPoints(correct, questions.length);\r\n\r\n if (pass) {\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n }\r\n return pass;\r\n }\r\n\r\n private setQuestionClasses(\r\n question: Element,\r\n className: string,\r\n setAll: Boolean = false\r\n ): void {\r\n question.classList.add(className);\r\n question\r\n .querySelectorAll(\"[data-answer-id]\" + (setAll ? \"\" : \":checked\"))\r\n .forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.add(className);\r\n }\r\n });\r\n }\r\n\r\n private async updateGamificationPoints(numCorrect: number, total: number): Promise {\r\n let stepid = window.Activity?.CurrentStepId;\r\n if (!stepid) {\r\n console.log(\"Current step not found!\");\r\n return;\r\n }\r\n let state = await this._pageContext?.gamificationService?.currentState();\r\n if (!state) {\r\n console.log(\"Could not get state!\");\r\n return;\r\n }\r\n let steps = state?.steps.filter(s => s.type === 2);\r\n let pointArray = steps.map(s => s.maxpoints);\r\n if (pointArray.length === 0) {\r\n console.log(\"No pointArray.\");\r\n return;\r\n }\r\n\r\n let maxPoints = pointArray.reduce((a: number | undefined, b: number | undefined) => { return (a ?? 0) + (b ?? 0) });\r\n if (!maxPoints) {\r\n console.log(\"No test steps found!\");\r\n return;\r\n }\r\n let earnedPoints = (numCorrect / total) * maxPoints;\r\n await this._pageContext?.gamificationService?.updatePoints(stepid, earnedPoints);\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.pointsupdated\",\r\n null\r\n )\r\n );\r\n }\r\n\r\n\r\n // event listeners\r\n private answerClick(event: Event): void {\r\n const input = event.target as HTMLElement;\r\n\r\n input.removeAttribute(\"data-changed\");\r\n const question = input.closest(\"[data-question-id]\") as HTMLElement;\r\n\r\n //check if confidence is answered\r\n let ratingElem = question.querySelector(\".rating-group input:checked\") as HTMLInputElement;\r\n if (ratingElem) {\r\n console.log(ratingElem);\r\n this.saveQuestionGroup(false).then(result => {\r\n let correctCountBefore = this.questionsCorrect;\r\n this.doScoring().then(() => {\r\n let correctCountAfter = this.questionsCorrect;\r\n this.setButtonRationaleVisibility(question, true, correctCountAfter > correctCountBefore);\r\n question.querySelector(\".posttest-button-rational button\")?.classList.remove(\"d-none\");\r\n });\r\n });\r\n\r\n }\r\n }\r\n\r\n private async handleConfidenceClick(event: Event): Promise {\r\n const label = event.target as HTMLElement;\r\n const question = label.closest(\"[data-question-id]\") as HTMLElement;\r\n\r\n const formCheckInline = label.closest(\".form-check-inline\");\r\n if (formCheckInline === null || formCheckInline === undefined) {\r\n\r\n return false;\r\n }\r\n\r\n // get input element for value\r\n const input = formCheckInline.querySelector(\"input\") as HTMLInputElement;\r\n if (input === null || input === undefined) {\r\n\r\n return false;\r\n }\r\n\r\n\r\n //check if question is answered\r\n const selectedAnswer = question.querySelector(\".answer-item input:checked\");\r\n if (selectedAnswer) {\r\n\r\n // update and save\r\n const confidenceValue = input.value;\r\n question.setAttribute(\"data-selected-confidence-value\", confidenceValue)\r\n question.classList.add(\"answered\");\r\n\r\n await this.saveQuestionGroup(false);\r\n\r\n // score\r\n let correctCountBefore = this.questionsCorrect;\r\n let pass = await this.doScoring();\r\n let correctCountAfter = this.questionsCorrect;\r\n\r\n //update visuals\r\n if (!this.context.reviewmode) {\r\n this.questionIndex += 1;\r\n }\r\n await this.updateText(pass, correctCountAfter !== correctCountBefore);\r\n await this.updateProgress();\r\n this.setButtonRationaleVisibility(question, true, correctCountAfter > correctCountBefore);\r\n question.querySelector(\".posttest-button-rational button\")?.classList.remove(\"d-none\");\r\n\r\n return true;\r\n }\r\n else {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n return false;\r\n }\r\n }\r\n\r\n private handleNextFinishClick(eventTarget: EventTarget | null): void {\r\n if (!eventTarget) {\r\n return;\r\n }\r\n let btnPostTest = eventTarget as HTMLElement;\r\n let currentquestion = btnPostTest.closest(\"[data-question-id]\") as HTMLElement;\r\n\r\n //check if question is answered\r\n const selectedAnswer = currentquestion.querySelector(\".answer-item input:checked\");\r\n if (!selectedAnswer) {\r\n\r\n return;\r\n }\r\n\r\n //check if confidence is answered\r\n let ratingElem = currentquestion.querySelector(\".rating-group input:checked\") as HTMLInputElement;\r\n if (!ratingElem) {\r\n\r\n return;\r\n }\r\n //what is the next question to display\r\n let nextSibling: HTMLElement | null;\r\n let nextUnansweredSibling = this.getNextSiblings(currentquestion as ChildNode);\r\n\r\n if (nextUnansweredSibling !== undefined && nextUnansweredSibling.length > 0) {\r\n console.log(\"[Post Test] Found unanswered sibling\");\r\n nextSibling = nextUnansweredSibling[0] as HTMLElement;\r\n } else if (this.context.reviewmode) {\r\n console.log(\"[Post Test] Review mode, go to next sibling\");\r\n nextSibling = currentquestion?.nextElementSibling as HTMLElement | null;\r\n } else {\r\n console.log(\"[Post Text] No questions left to answer\");\r\n nextSibling = null;\r\n }\r\n\r\n $(\".content-header\")[0].scrollIntoView({ behavior: 'smooth' })\r\n if (nextSibling !== undefined && nextSibling !== null && nextSibling.classList.contains(\"question-card\")) {\r\n if (!this.context.reviewmode) {\r\n this.resetQuestion(nextSibling);\r\n }\r\n currentquestion?.classList.add(\"d-none\");\r\n nextSibling.classList.remove(\"d-none\");\r\n\r\n if (this.context.reviewmode) {\r\n this.questionIndex += 1;\r\n }\r\n // this._element.querySelectorAll(\".question-number\").forEach(el => {\r\n // el.textContent = `QUESTION ${(this.questionIndex + 1).toString()} of ${this.questionsAnswerable.toString()}`;\r\n // });\r\n if(!this.context.reviewmode)\r\n {\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"next\" });\r\n window.document.dispatchEvent(ev);\r\n }\r\n } else {\r\n // last question\r\n this.doScoring().then(pass => {\r\n if (!this.context.reviewmode) {\r\n this.saveQuestionGroup(false).then(() =>\r\n console.log(\"QG Saved\"))\r\n }\r\n\r\n this.updateText(pass, false, true).then(() => {\r\n console.log(\"Text updated\")\r\n }\r\n )\r\n if (pass) {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.showpassmodal\",\r\n null\r\n )\r\n );\r\n } else {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.showfailmodal\",\r\n null\r\n )\r\n );\r\n }\r\n\r\n $(\"#nexPrevArea\").removeClass(\"d-none\");\r\n }\r\n )\r\n\r\n\r\n }\r\n }\r\n\r\n private async updateText(pass: boolean, correct: boolean, final: boolean = false) {\r\n\r\n console.log(`[Post Test] ${this.questionIndex}-${this.questionCount}-${pass}-${correct}-${this.questionsCorrect}`)\r\n if (this.context.reviewmode) {\r\n return;\r\n }\r\n let ev: any;\r\n if (final) {\r\n if (this.questionCount == this.questionsCorrect) {\r\n // pass 100%\r\n ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"points-max\" });\r\n } else if (pass) {\r\n // pass\r\n ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"passed\" });\r\n } else {\r\n // fail\r\n ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"failed\" });\r\n }\r\n } else {\r\n if (correct) {\r\n // correct question\r\n ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"correct\" });\r\n } else {\r\n // incorrect question\r\n ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"incorrect\" });\r\n }\r\n }\r\n\r\n window.document.dispatchEvent(ev);\r\n }\r\n\r\n // helpers\r\n private getNextSiblings(elem: ChildNode | null) {\r\n if (elem === null) {\r\n return;\r\n }\r\n let sibs = [];\r\n while (elem = elem.nextSibling) {\r\n if (elem === null) continue;\r\n if (elem.nodeType === 3) continue;\r\n const htmlElem = elem as HTMLElement;\r\n console.log(htmlElem);\r\n if (!htmlElem.classList.contains(\"responded\") && htmlElem.classList.contains(\"question-card\")) {\r\n sibs.push(elem);\r\n }\r\n }\r\n return sibs;\r\n }\r\n\r\n private determineMode(questionGroup: IQuestionGroupModel | null) {\r\n if (!questionGroup || !questionGroup.questiongroupid) {\r\n console.log(\"[Post Test Mode] First Take\")\r\n return;\r\n }\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const myParam = urlParams.get('mode');\r\n if (myParam === \"retake\") {\r\n console.log(\"[Post Test Mode] Retake (from query string)\");\r\n this.context.retakemode = true;\r\n return;\r\n }\r\n\r\n\r\n let inprogress = !questionGroup.questions.every(q => q.answers.length != 0);\r\n if (inprogress) {\r\n console.log(\"[Post Test Mode] Resume\");\r\n this.context.resumemode = true;\r\n return;\r\n }\r\n\r\n if (!inprogress && !questionGroup.complete) {\r\n console.log(\"[Post Test Mode] Retake (previously failed)\");\r\n this.context.retakemode = true;\r\n\r\n // if resuming a previously failed exam, show the modal\r\n if(myParam == \"resume\"){\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.showfailmodal\",\r\n null\r\n )\r\n );\r\n $(\"#nexPrevArea\").removeClass(\"d-none\");\r\n }\r\n return;\r\n }\r\n\r\n console.log(\"[Post Test Mode] Review\")\r\n this.context.reviewmode = true;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MasterClassQuestionGroupPosttest\", MasterClassQuestionGroupPosttest);\r\n","import { IQuestionModelMasterClass } from \"./IQuestionModelMasterClass\";\r\nimport { IAnswerModelMasterClass } from \"./IAnswerModelMasterClass\";\r\n\r\nexport class QuestionModelMasterClass implements IQuestionModelMasterClass {\r\n public questionid: string;\r\n public text: string;\r\n public type: string;\r\n public key: string;\r\n public answers: IAnswerModelMasterClass[];\r\n\r\n constructor(_id: string, _text: string, _type: string, _key: string) {\r\n this.questionid = _id;\r\n this.text = _text;\r\n this.type = _type;\r\n this.key = _key;\r\n this.answers = [];\r\n }\r\n}\r\n","import { BackNextButton } from \"../BackNextButton\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QuestionGroupModel } from \"../../models/QuestionGroup/QuestionGroupModel\";\r\nimport { QuestionModelMasterClass } from \"../../models/MasterClassQuestionGroup/QuestionModelMasterClass\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { IQuestionGroupModel } from \"../../models/QuestionGroup/IQuestionGroupModel\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class MasterClassQuestionGroupPretest extends Component {\r\n context = {\r\n complete: false,\r\n id: \"00000000-0000-0000-0000-000000000000\",\r\n interspersedCorrectIncorrectFeedback: true,\r\n interspersedRationaleFeedback: true,\r\n minscore: 0,\r\n questionGroupName: \"\",\r\n questionGroupType: \"\",\r\n requireall: false,\r\n scored: false,\r\n taTimer: -1,\r\n singletake: false,\r\n resumemode: false\r\n };\r\n questionCount = 0;\r\n questionsAnswered = 0;\r\n firstanswers: Array = [];\r\n\r\n readonly correctClass = \"correct\";\r\n readonly incorrectClass = \"incorrect\";\r\n readonly incompleteClass = \"incomplete\";\r\n readonly base10 = 10;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n this.context.id =\r\n this._element.getAttribute(\"data-questiongroup-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\";\r\n this.context.complete =\r\n this._element.getAttribute(\"data-questiongroup-complete\") === \"1\";\r\n this.context.minscore = Number.parseInt(\r\n this._element.getAttribute(\"data-questiongroup-minscore\") || \"0\",\r\n this.base10\r\n );\r\n this.context.requireall =\r\n (this._element.getAttribute(\"data-questiongroup-require-all\") || \"0\") ===\r\n \"1\";\r\n this.context.scored =\r\n (this._element.getAttribute(\"data-questiongroup-scored\") || \"0\") === \"1\";\r\n\r\n const t = this._element.getAttribute(\"data-questiongroup-type\");\r\n this.context.questionGroupType = t ? t : \"\";\r\n\r\n const n = this._element.getAttribute(\"data-questiongroup-title\");\r\n this.context.questionGroupName = n ? n : \"\";\r\n\r\n if (!this.context.complete) {\r\n EventUtil.listenAsyncEvent(BackNextButton.NextNavigationEvent, () =>\r\n this.handleNextNavigation()\r\n );\r\n }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n\r\n await this.setQuestionData(this.context.id);\r\n\r\n await this.updateProgress();\r\n\r\n\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \".answer-group input[type=radio],.answer-group input[type=checkbox]\"\r\n );\r\n const textAnswers = this._element.querySelectorAll(\".answer-group textarea\");\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.inputChanged(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"keyup\", ev => this.bufferTextAreaChange(ev));\r\n });\r\n textAnswers.forEach(answer => {\r\n answer.addEventListener(\"blur\", ev => this.textAreaOnBlur(ev));\r\n });\r\n this._element.querySelectorAll(\"#submit-button\")?.forEach(element => {\r\n element.addEventListener(\"click\", ev => this.submit());\r\n });\r\n\r\n const ratingGroupAnswers = this._element.querySelectorAll(\r\n \".rating-group .form-check-inline label\"\r\n );\r\n if (!this.context.complete) {\r\n ratingGroupAnswers.forEach(r => {\r\n r.addEventListener(\"click\", ev => this.ratingInputChanged(ev.target));\r\n });\r\n }\r\n\r\n if (this.context.complete) {\r\n const btnRationalDivs = this._element.querySelectorAll(\".pretest-button-rational\");\r\n btnRationalDivs.forEach(btn => {\r\n btn.classList.remove(\"d-none\");\r\n });\r\n\r\n const btnNextQuestions = this._element.querySelectorAll(\".next-question-posttest\");\r\n btnNextQuestions.forEach(btn => {\r\n btn.classList.remove(\"d-none\");\r\n btn.addEventListener(\"click\", (ev) => this.handlePostTestButton(ev.target, true));\r\n });\r\n }\r\n }\r\n\r\n private static getFirstAnswer(id: string, fa: Array): QuestionModelMasterClass {\r\n return fa.filter(qg => qg.questionid === id)[0];\r\n }\r\n\r\n private async collectQuestionGroupData({\r\n _profile,\r\n _qg,\r\n }: {\r\n _qg: Element;\r\n _profile: IUserProfile;\r\n }): Promise {\r\n const activity = window.Activity || {};\r\n const questionGroup = new QuestionGroupModel(\r\n _qg.getAttribute(\"data-questiongroup-id\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-title\") || \"\",\r\n _qg.getAttribute(\"data-questiongroup-type\") || \"\",\r\n Number(_qg.getAttribute(\"data-questiongroup-minscore\")),\r\n _profile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n activity.Id || \"00000000-0000-0000-0000-000000000000\",\r\n Number(_qg.getAttribute(\"data-questiongroup-attempt\") || 1),\r\n _qg.getAttribute(\"data-questiongroup-attemptdate\") ||\r\n new Date().toISOString(),\r\n Number(_qg.getAttribute(\"data-questiongroup-complete\"))\r\n );\r\n const questions = _qg.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(q => {\r\n const firstanswer = (q.getAttribute(\"data-first-answer\") || \"1\") === \"1\";\r\n const question = new QuestionModelMasterClass(\r\n q.getAttribute(\"data-question-id\") || \"\",\r\n q.getAttribute(\"data-question-text\") || \"\",\r\n q.getAttribute(\"data-question-type\") || \"\",\r\n q.getAttribute(\"data-question-key\") || \"\"\r\n );\r\n const answers = q.querySelectorAll(\"[data-answer-id]\");\r\n answers.forEach(a => {\r\n if (a.tagName === \"TEXTAREA\") {\r\n question.answers.push({\r\n answerid: \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: q.getAttribute(\"data-selected-confidence-value\") || \"\"\r\n });\r\n } else {\r\n if ((a as HTMLInputElement).checked) {\r\n\r\n\r\n question.answers.push({\r\n answerid:\r\n a.getAttribute(\"data-answer-id\") ||\r\n \"00000000-0000-0000-0000-000000000000\",\r\n text: (a as HTMLInputElement).value || \"\",\r\n confidence: q.getAttribute(\"data-selected-confidence-value\") || \"\"\r\n });\r\n }\r\n }\r\n });\r\n\r\n\r\n questionGroup.questions.push(question);\r\n if (firstanswer === true && this.firstanswers.filter(fa => fa.questionid === question.questionid).length === 0) {\r\n questionGroup.firstanswers.push(question);\r\n this.firstanswers.push(question);\r\n q.setAttribute(\"data-first-answer\", \"0\");\r\n } else {\r\n var fqa = MasterClassQuestionGroupPretest.getFirstAnswer(question.questionid, this.firstanswers);\r\n if (fqa !== undefined && fqa !== null) {\r\n questionGroup.firstanswers.push(fqa);\r\n }\r\n }\r\n });\r\n this.questionCount = questionGroup.questions.length;\r\n return questionGroup;\r\n }\r\n\r\n private async handleNextNavigation(): Promise {\r\n if (this.context.complete) {\r\n console.log(\"[Next Button] - QuestionGroup - already complete\");\r\n\r\n return true;\r\n }\r\n\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n this.context.complete = true;\r\n this.saveQuestionGroup();\r\n return true;\r\n }\r\n\r\n private async submit(): Promise {\r\n this._element.setAttribute(\"data-questiongroup-complete\", \"1\");\r\n void this.saveQuestionGroup(false);\r\n await this.doScoring();\r\n //this.showRationale();\r\n this._element\r\n .querySelectorAll(\"#submit-button\")\r\n ?.forEach(element => {\r\n element.classList.add(\"disabled\");\r\n element.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n }\r\n\r\n // no-inferrable-types conflicts with must have typedef...\r\n // tslint:disable-next-line:no-inferrable-types\r\n private async doScoring(): Promise {\r\n const minscore = this.context.minscore;\r\n if (minscore < 1 && this.context.scored) {\r\n return true;\r\n }\r\n let pass = true;\r\n let correct = 0;\r\n const qg = this._element;\r\n const questions = qg.querySelectorAll(\"[data-question-id]\");\r\n const passmsg = this._element.querySelector(\"[data-message=passed]\");\r\n const failmsg = this._element.querySelector(\"[data-message=fail]\");\r\n const infotext = this._element.querySelector(\"#interspersed-info-text\");\r\n\r\n if (passmsg && !passmsg.classList.contains(\"d-none\")) {\r\n passmsg.classList.add(\"d-none\");\r\n }\r\n if (failmsg && !failmsg.classList.contains(\"d-none\")) {\r\n failmsg.classList.add(\"d-none\");\r\n }\r\n if (infotext && !infotext.classList.contains(\"d-none\")) {\r\n infotext.classList.add(\"d-none\");\r\n }\r\n\r\n questions.forEach(question => {\r\n const type = question.getAttribute(\"data-question-type\");\r\n const key = (question.getAttribute(\"data-question-key\") || \"\").split(\",\");\r\n const answers = Array.from(\r\n question.querySelectorAll(\"[data-answer-id]:checked\")\r\n ).map(answer => answer.getAttribute(\"data-answer-id\"));\r\n if (key.length < 1) {\r\n correct += 1;\r\n\r\n return false;\r\n }\r\n if (answers.length < 1) {\r\n return false;\r\n }\r\n switch (type) {\r\n case \"multiple answer\":\r\n if (\r\n answers.every(a => key.some(k => k === a)) &&\r\n key.every(k => answers.some(a => a === k))\r\n ) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n this.hideMessage(question, \"incorrect\");\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n this.showMessage(question, \"incorrect\");\r\n }\r\n break;\r\n case \"multiple choice\":\r\n if (key.some(k => (answers.length > 0 ? answers[0] : \"\") === k)) {\r\n correct += 1;\r\n this.setQuestionClasses(question, this.correctClass);\r\n this.hideMessage(question, \"incorrect\");\r\n } else {\r\n this.setQuestionClasses(question, this.incorrectClass);\r\n this.showMessage(question, \"incorrect\");\r\n }\r\n break;\r\n default:\r\n correct += 1;\r\n break;\r\n }\r\n });\r\n\r\n pass =\r\n !this.context.requireall\r\n ? correct === questions.length\r\n : correct >= minscore;\r\n\r\n await this.updateGamificationPoints(correct, questions.length);\r\n\r\n if (pass) {\r\n if (passmsg) {\r\n passmsg.classList.remove(\"d-none\");\r\n }\r\n } else {\r\n if (failmsg) {\r\n failmsg.classList.remove(\"d-none\");\r\n }\r\n }\r\n return pass;\r\n }\r\n\r\n private showMessage(question: Element, message: string): void {\r\n const eb = question.querySelector(`[data-message=${message}]`);\r\n if (eb) {\r\n eb.classList.remove(\"d-none\");\r\n }\r\n }\r\n\r\n private hideMessage(question: Element, message: string): void {\r\n const eb = question.querySelector(`[data-message=${message}]`);\r\n if (eb) {\r\n if (!eb.classList.contains(\"d-none\")) {\r\n eb.classList.add(\"d-none\");\r\n }\r\n }\r\n }\r\n\r\n private clearQuestionClasses(question: Element): void {\r\n question.classList.remove(this.correctClass);\r\n question.classList.remove(this.incorrectClass);\r\n question.classList.remove(this.incompleteClass);\r\n question.querySelectorAll(\"[data-answer-id]\").forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.remove(this.correctClass);\r\n wrapper.classList.remove(this.incorrectClass);\r\n }\r\n });\r\n const eba = question.querySelectorAll(\"[data-message]\");\r\n eba.forEach(eb => {\r\n if (eb) {\r\n if (!eb.classList.contains(\"d-none\")) {\r\n eb.classList.add(\"d-none\");\r\n }\r\n }\r\n });\r\n }\r\n\r\n private async updateGamificationPoints(numCorrect: number, total: number): Promise {\r\n let stepid = window.Activity?.CurrentStepId;\r\n if (!stepid) {\r\n console.log(\"Current step not found!\");\r\n return;\r\n }\r\n let state = await this._pageContext?.gamificationService?.currentState();\r\n if (!state) {\r\n console.log(\"Could not get state!\");\r\n return;\r\n }\r\n let steps = state?.steps.filter(s => s.type === 2);\r\n let pointArray = steps.map(s => s.maxpoints);\r\n if (pointArray.length === 0) {\r\n console.log(\"No pointArray.\");\r\n return;\r\n }\r\n\r\n let maxPoints = pointArray.reduce((a: number | undefined, b: number | undefined) => { return (a ?? 0) + (b ?? 0) });\r\n if (!maxPoints) {\r\n console.log(\"No test steps found!\");\r\n return;\r\n }\r\n let earnedPoints = (numCorrect / total) * maxPoints;\r\n await this._pageContext?.gamificationService?.updatePoints(stepid, earnedPoints);\r\n }\r\n\r\n private disableAllQuestions(): void {\r\n this._element.querySelectorAll(\"input, textarea\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"#submit-button\").forEach(e => {\r\n e.setAttribute(\"disabled\", \"disabled\");\r\n e.classList.add(\"disabled\");\r\n });\r\n\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(e => {\r\n if (e) {\r\n this.setQuestionClasses(e, \"disabled\", true);\r\n e.querySelectorAll(\r\n \"[data-message=incomplete],[data-message=incorrect]\"\r\n ).forEach(m => {\r\n if (!m.classList.contains(\"d-none\")) {\r\n m.classList.add(\"d-none\");\r\n }\r\n });\r\n }\r\n });\r\n\r\n // TODO: Temp for testing\r\n this.setRatingScale(true, this._element as HTMLElement);\r\n }\r\n\r\n private setQuestionClasses(\r\n question: Element,\r\n className: string,\r\n setAll: Boolean = false\r\n ): void {\r\n question.classList.add(className);\r\n question\r\n .querySelectorAll(\"[data-answer-id]\" + (setAll ? \"\" : \":checked\"))\r\n .forEach(answer => {\r\n const wrapper = answer.closest(\".list-group-item\");\r\n if (wrapper) {\r\n wrapper.classList.add(className);\r\n }\r\n });\r\n }\r\n\r\n private async setQuestionData(_questionGroupId: string): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n\r\n const questionGroupData = await service.getAnswers(_questionGroupId);\r\n\r\n this.determineMode(questionGroupData);\r\n\r\n if (questionGroupData && questionGroupData.questiongroupid) {\r\n this._element.setAttribute(\r\n \"data-questiongroup-complete\",\r\n (questionGroupData.complete || 0).toString()\r\n );\r\n this.context.complete = (questionGroupData.complete || 0) === 1;\r\n this._element.setAttribute(\r\n \"data-questiongroup-attempt\",\r\n (questionGroupData.complete === 1\r\n ? questionGroupData.attempt\r\n : questionGroupData.attempt + 1\r\n ).toString()\r\n );\r\n\r\n this.questionCount = questionGroupData.questions.length;\r\n questionGroupData.questions.forEach((q, i) => {\r\n const qe = this._element.querySelector(\r\n '[data-question-id=\"' + q.questionid + '\"]'\r\n );\r\n\r\n if (qe) {\r\n const qeType = qe.getAttribute(\"data-question-type\") || \"\";\r\n if (qeType.toLowerCase() !== \"open ended\") {\r\n if (q.answers.length > 0) {\r\n this.questionsAnswered += 1;\r\n }\r\n q.answers.forEach(a => {\r\n const ae = qe.querySelector(\r\n '[data-answer-id=\"' + a.answerid + '\"]'\r\n );\r\n if (ae) {\r\n (ae as HTMLInputElement).checked = true;\r\n qe.classList.add(\"answered\");\r\n }\r\n\r\n var confscaleinputs = qe.querySelectorAll(\r\n 'input[data-rate-question-id=\"' + q.questionid + '\"]'\r\n );\r\n confscaleinputs.forEach(c => {\r\n var inp = c as HTMLInputElement;\r\n if (inp.value === a.confidence) {\r\n inp.checked = true;\r\n }\r\n });\r\n\r\n });\r\n } else {\r\n const ae = qe.querySelector(\"textarea\");\r\n const av = q.answers.length > 0 ? q.answers[0].text : \"\";\r\n if (ae) {\r\n ae.value = av;\r\n }\r\n }\r\n\r\n // qe.classList.add(\"answered\");\r\n this.setRatingScale(true, qe as HTMLElement);\r\n }\r\n });\r\n if (\r\n this.context.complete &&\r\n this._element.getAttribute(\"data-questiongroup-scored\") === \"1\"\r\n ) {\r\n await this.doScoring();\r\n if (questionGroupData.complete === 1) {\r\n //this.showRationale();\r\n }\r\n }\r\n\r\n if (this.context.complete && this.context.singletake) {\r\n const context = this._pageContext;\r\n const backNext = context\r\n ? context.componentFactory.getComponent(BackNextButton)\r\n : null;\r\n if (backNext) {\r\n console.log(\"disabling the next button\");\r\n backNext.disableNext();\r\n }\r\n }\r\n if (questionGroupData.complete === 1) {\r\n console.log(\"disabling questions\");\r\n this.disableAllQuestions();\r\n }\r\n }\r\n\r\n\r\n var displayQuestion = this._element.querySelectorAll('[data-question-query=\"1\"]')[0] as HTMLElement;\r\n if (displayQuestion !== undefined) {\r\n displayQuestion.classList.remove(\"d-none\");\r\n } else if (this.context.resumemode) {\r\n const questions = this._element.querySelectorAll(\r\n '[data-question-id]:not(.answered)'\r\n );\r\n\r\n if (questions.length > 0) {\r\n (questions[0] as HTMLElement).classList.remove(\"d-none\");\r\n }\r\n\r\n } else {\r\n\r\n const questions = this._element.querySelectorAll(\r\n '[data-question-id]'\r\n );\r\n questions.forEach((q, i) => {\r\n if (i === 0) {\r\n q.classList.remove(\"d-none\");\r\n }\r\n });\r\n }\r\n }\r\n\r\n private textAreaOnBlur(event: Event): void {\r\n if (!(event.target as HTMLElement).getAttribute(\"data-changed\")) {\r\n return;\r\n }\r\n void this.inputChanged(event);\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n }\r\n\r\n private bufferTextAreaChange(event: Event): void {\r\n (event.target as HTMLElement).setAttribute(\"data-changed\", \"1\");\r\n if (this.context.taTimer) {\r\n clearTimeout(this.context.taTimer);\r\n }\r\n const timeout = 1000; // ms\r\n this.context.taTimer = setTimeout(() => {\r\n void this.inputChanged(event);\r\n }, timeout);\r\n }\r\n\r\n private inputChanged(event: Event): void {\r\n const input = event.target as HTMLElement;\r\n input.removeAttribute(\"data-changed\");\r\n const question = input.closest(\"[data-question-id]\");\r\n if (question) {\r\n this.clearQuestionClasses(question);\r\n }\r\n\r\n this.setRatingScale(true, question as HTMLElement);\r\n\r\n // void this.saveQuestionGroup(false);\r\n }\r\n\r\n private async ratingInputChanged(eventTarget: EventTarget | null): Promise {\r\n if (!eventTarget) {\r\n return\r\n }\r\n const label = eventTarget as HTMLElement;\r\n const question = label.closest(\"[data-question-id]\");\r\n if (question === null || question === undefined) {\r\n\r\n return;\r\n }\r\n\r\n //check if question is answered\r\n const selectedAnswer = question.querySelector(\".answer-item input:checked\");\r\n if (!selectedAnswer) {\r\n\r\n return;\r\n }\r\n\r\n const formCheckInline = label.closest(\".form-check-inline\");\r\n if (formCheckInline === null || formCheckInline === undefined) {\r\n\r\n return;\r\n }\r\n\r\n // get input element for value\r\n const input = formCheckInline.querySelector(\"input\") as HTMLInputElement;\r\n if (input === null || input === undefined) {\r\n\r\n return;\r\n }\r\n\r\n const confidenceValue = input.value;\r\n question.setAttribute(\"data-selected-confidence-value\", confidenceValue)\r\n\r\n\r\n // let's save the question/answer/rating at this point\r\n await this.saveQuestionGroup(false);\r\n\r\n const nextSibling = question?.nextElementSibling as HTMLElement;\r\n\r\n this.questionsAnswered = this.questionsAnswered + 1;\r\n await this.updateProgress()\r\n\r\n // if there is a next question\r\n if (nextSibling !== undefined && nextSibling !== null && nextSibling.classList.contains(\"question-card\")) {\r\n\r\n\r\n question?.classList.add(\"d-none\");\r\n nextSibling.classList.remove(\"d-none\");\r\n } else {\r\n $(\".button-nav\").hide();\r\n $(\"#nexPrevArea\").removeClass(\"d-none\");\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n \"gamification.showmodal\",\r\n null\r\n )\r\n );\r\n }\r\n $(\".content-header\")[0].scrollIntoView({ behavior: 'smooth' })\r\n }\r\n\r\n private handlePostTestButton(eventTarget: EventTarget | null, complete: Boolean): void {\r\n if(!eventTarget) {\r\n return\r\n }\r\n const btnNextQuestion = eventTarget as HTMLElement;\r\n var currentquestion = btnNextQuestion.closest(\"[data-question-id]\") as HTMLElement;\r\n\r\n //check if question is answered\r\n const selectedAnswer = currentquestion.querySelector(\".answer-item input:checked\");\r\n if (!selectedAnswer) {\r\n\r\n return;\r\n }\r\n\r\n // get next question\r\n const nextSibling = currentquestion?.nextElementSibling as HTMLElement\r\n if (nextSibling !== undefined && nextSibling !== null && nextSibling.classList.contains(\"question-card\")) {\r\n $(\".rating-group\").removeClass(\"d-none\");\r\n $(\".next-question-posttest\").each(function () {\r\n if (!complete) {\r\n $(this).addClass(\"d-none\");\r\n }\r\n });\r\n currentquestion?.classList.add(\"d-none\");\r\n nextSibling.classList.remove(\"d-none\");\r\n } else {\r\n $(\"#nexPrevArea\").removeClass(\"d-none\");\r\n const href = btnNextQuestion.getAttribute(\"data-href\") || \"#\";\r\n window.location.href = href;\r\n }\r\n\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop: 0\r\n },\r\n \"slow\"\r\n );\r\n }\r\n\r\n // JUSTIFICATION: type is inferred\r\n // tslint:disable-next-line: typedef\r\n private async saveQuestionGroup(showErrorOnSaveFailed = true): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n return;\r\n }\r\n const qgd = await this.collectQuestionGroupData({\r\n _profile: profile,\r\n _qg: this._element,\r\n });\r\n\r\n // console.log(qgd);\r\n const context = this._pageContext;\r\n const service = context ? context.questionAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No MasterClassQuestionGroup Service available.\");\r\n\r\n return;\r\n }\r\n const saved = await service.saveAnswers(qgd);\r\n if (!saved) {\r\n console.warn(\"MasterClassQuestionGroup was not saved\");\r\n if (showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n }\r\n\r\n private async updateProgress() {\r\n let ev = EventUtil.createCustomEvent(\"gamification.updateprogress\", { questionCount: this.questionCount, questionAnswered: this.questionsAnswered });\r\n this._element.dispatchEvent(ev);\r\n }\r\n\r\n private setRatingScale(enable: boolean, question: HTMLElement) {\r\n const ratingGroupAnswers = question.querySelectorAll(\r\n \".rating-group input[type=radio]\"\r\n );\r\n\r\n if (enable) {\r\n ratingGroupAnswers.forEach(answer => {\r\n answer.classList.remove(\"disabled\");\r\n answer.removeAttribute(\"disabled\");\r\n });\r\n } else {\r\n ratingGroupAnswers.forEach(answer => {\r\n answer.classList.add(\"disabled\");\r\n answer.setAttribute(\"disabled\", \"disabled\");\r\n });\r\n }\r\n\r\n\r\n }\r\n\r\n private determineMode(questionGroup: IQuestionGroupModel | null){\r\n if (!questionGroup || !questionGroup.questiongroupid) {\r\n console.log(\"[Pre Test Mode] First Take\")\r\n return;\r\n }\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const myParam = urlParams.get('mode');\r\n\r\n let inprogress = !questionGroup.questions.every(q => q.answers.length != 0);\r\n\r\n if (myParam === \"resume\" || inprogress) {\r\n console.log(\"[Pre Test Mode] Resume\")\r\n this.context.resumemode = true;\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MasterClassQuestionGroupPretest\", MasterClassQuestionGroupPretest);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { GamificationService } from \"../../service/GamificationService\";\r\n\r\nexport class MasterClassRelatedContent extends Component {\r\n private _service: GamificationService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if (context === undefined) { return; }\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n\r\n let card = await this._service.getRelatedContent();\r\n if (card){\r\n console.log(\"Found related content...\");\r\n\r\n this._element.style.display = \"block\"; \r\n let relatedContent = this._element.querySelector(\"#related-content\");\r\n if(relatedContent){\r\n relatedContent.innerHTML = card;\r\n await context.componentFactory.loadComponents(relatedContent);\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MasterClassRelatedContent\", MasterClassRelatedContent);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { GamificationService } from \"../../service/GamificationService\";\r\n\r\nexport class MasterClassTrophyCase extends Component {\r\n private _service: GamificationService | null = null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n \r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n const activity = window.GamificationActivity;\r\n if(activity === undefined) { return; }\r\n \r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile) {\r\n let state = await this._service.currentState();\r\n let awardedBadges = state?.badges.map(b => b.id);\r\n this._element.querySelectorAll(\".badge-item\").forEach(el => {\r\n if(awardedBadges?.includes(el?.dataset?.badgeId ?? \"\")){\r\n el.classList.remove(\"d-none\");\r\n } else {\r\n if(el?.dataset?.badgeId){\r\n el.remove();\r\n }\r\n }\r\n });\r\n state?.badges.forEach(badge => {\r\n \r\n this._element.querySelectorAll(\"#badge-\" + badge.id.toLowerCase()).forEach(element => {\r\n element.classList.remove(\"d-none\");\r\n });\r\n });\r\n\r\n let badges = ((state?.badges.length ?? 0) % 3.0);\r\n console.log(state?.badges.length);\r\n if(badges !== 1 && badges !== 2){\r\n this._element.querySelectorAll(\"#blank-badge-1\").forEach(el => {\r\n el.remove();\r\n });\r\n }\r\n\r\n if(badges !== 1){\r\n this._element.querySelectorAll(\"#blank-badge-2\").forEach(el => {\r\n el.remove();\r\n });\r\n }\r\n }\r\n }\r\n }\r\n \r\n ComponentFactory.registerComponent(\"MasterClassTrophyCase\", MasterClassTrophyCase);\r\n ","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { GamificationService } from \"../../service/GamificationService\"\r\n\r\nexport class MasterClassVideo extends Component {\r\n\r\n private _service: GamificationService | null = null;\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if(context === undefined) { return; }\r\n console.log(context.gamificationService);\r\n this._service = context.gamificationService;\r\n if (!this._service) {\r\n throw new Error(\"No gamification service!\");\r\n }\r\n const activity = window.GamificationActivity;\r\n if(activity === undefined) { return; }\r\n\r\n let state = await this._service.currentState()\r\n var currentStepId = window.Activity?.CurrentStepId;\r\n const videoStep = state?.steps?.find(s => s.id === currentStepId);\r\n\r\n if (videoStep?.earnedpoints === undefined) {\r\n\r\n return;\r\n }\r\n\r\n\r\n var pointsEarned = (videoStep.earnedpoints).toString();\r\n this._element.setAttribute(\"data-video-earned\", pointsEarned);\r\n window.dispatchEvent(new CustomEvent(\"gamification.resumevideo\"));\r\n }\r\n\r\n }\r\n\r\n ComponentFactory.registerComponent(\"MasterClassVideo\", MasterClassVideo);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { UrlUtil } from \"../../util/UrlUtil\";\r\n\r\ninterface ISpecialtyListItem {\r\n element: HTMLAnchorElement;\r\n text: string;\r\n url: string | null;\r\n value: string | null;\r\n}\r\n\r\nexport class HomeSpecialtySelect extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if(document.referrer.indexOf(window.location.hostname) !== -1 ||\r\n new URLSearchParams(window.location.search).get(\"showall\") === \"1\") {\r\n return;\r\n }\r\n\r\n if (profile) {\r\n const hasSpecialty =\r\n profile.isLoggedIn === \"True\" &&\r\n profile.contentspecialty;\r\n const queryStringMap = UrlUtil.getQueryString();\r\n\r\n if (hasSpecialty && queryStringMap.get(\"userspecialty\") === undefined) {\r\n const specialty = (profile.contentspecialty || \"\").toLowerCase();\r\n const items = this.specialties;\r\n const item = items.find(s => s.text.toLowerCase() === specialty);\r\n if (item && item.element) {\r\n console.log(\"Redirecting to Users Specialty Page: \"\r\n + item.element.href);\r\n window.location.href = item.element.href;\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n private get specialties(): ReadonlyArray {\r\n const selector = \".dropdown-item\";\r\n const items = this._element.querySelectorAll(selector);\r\n const specialtyElements = Array.from(items);\r\n\r\n return specialtyElements\r\n .map(element => {\r\n const text = (element.textContent || \"\").trim();\r\n const url = element.dataset.urlPattern || null;\r\n const value = element.dataset.value || null;\r\n\r\n return {\r\n element,\r\n text,\r\n url: url ? url.toLowerCase() : null,\r\n value\r\n };\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"HomeSpecialtySelect\", HomeSpecialtySelect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport * as Mustache from \"mustache\";\r\nimport { HonoreeSpecialtyFilter } from \"./HonoreeSpecialtyFilter\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\n\r\nexport class HonoreeListing extends Component {\r\n private readonly _honoreeDefaultImageUrl: string = \"\";\r\n private readonly _honoreeDivTemplate:\r\n string | null = null;\r\n private _tempDivElement: JQuery = $(\"
\");\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const defaultImageHiddenInput = document.querySelector('input[name=\"HonorsDefaultImageUrl\"')\r\n this._honoreeDefaultImageUrl = defaultImageHiddenInput?.value ?? \"\";\r\n\r\n const _honoreeDivTemplateElement = $(\"#HonoreeTemplate\");\r\n if (_honoreeDivTemplateElement.length) {\r\n const honoreeDivTemplateHtml = _honoreeDivTemplateElement.html().trim();\r\n this._tempDivElement.html(honoreeDivTemplateHtml);\r\n this._honoreeDivTemplate = this._tempDivElement.html();\r\n }\r\n document.addEventListener(HonoreeSpecialtyFilter.HonoreeSpecialtyFilterChangeEvent, ev =>\r\n this.handleSpecialtyFilterChange(ev as CustomEvent)\r\n );\r\n }\r\n\r\n public async init(): Promise {\r\n const selectedYear = DomUtil.query(document.body, HonoreeSpecialtyFilter.HonoreeActiveYearSelector)\r\n this.loadCards(\"\",selectedYear.innerText.trim());\r\n }\r\n\r\n private renderNomineeDivsFromTemplate(nominees: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._honoreeDivTemplate) {\r\n for (let nominee of nominees) {\r\n if (!nominee.PhotoLink || nominee.PhotoLink.length === 0) {\r\n nominee.PhotoLink = this._honoreeDefaultImageUrl;\r\n }\r\n const renderedTemplate = Mustache.render(this._honoreeDivTemplate,nominee);\r\n renderedCards += UiUtil.replaceDataSrcWithSrcInImageTags(renderedTemplate)\r\n }\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n private async loadCards(specialtySelected: string | null, yearSelected: string): Promise {\r\n this._element.classList.add(\"hidden\");\r\n if (!window.nominees || window.nominees.length === 0) {\r\n\r\n return\r\n }\r\n const loadingSpinner = this._element.closest(\".container\")?.querySelector(\".loading-spinner\")\r\n if (loadingSpinner) {\r\n loadingSpinner.classList.add(\"active\");\r\n }\r\n\r\n const filteredNominees = specialtySelected === null || specialtySelected.trim().length > 0 ?\r\n window.nominees.filter((nominee: { Specialty: string; NominationYear: string; }) => nominee.Specialty === specialtySelected && nominee.NominationYear === yearSelected) :\r\n window.nominees.filter((nominee: { NominationYear: string; }) => nominee.NominationYear === yearSelected);\r\n const renderedNominees = this.renderNomineeDivsFromTemplate(filteredNominees)\r\n this._element.innerHTML = renderedNominees;\r\n setTimeout(() => {\r\n loadingSpinner?.classList.remove(\"active\");\r\n this._element.classList.remove(\"hidden\");\r\n }, 1000);\r\n }\r\n\r\n\r\n private async handleSpecialtyFilterChange(ev: CustomEvent): Promise {\r\n const eventDetailArray = ev.detail.trim().split('|')\r\n const selectedSpecialty = eventDetailArray[0];\r\n const selectedYear = eventDetailArray[1];\r\n\r\n if (selectedSpecialty.toLowerCase() === \"other specialties\") {\r\n return this.loadCards(null,selectedYear);\r\n }\r\n return this.loadCards(selectedSpecialty.toLowerCase() === \"all specialties\" ? \"\" : selectedSpecialty, selectedYear);\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"HonoreeListing\", HonoreeListing);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class HonoreeSpecialtyFilter extends Component {\r\n public static readonly HonoreeSpecialtyFilterChangeEvent: string =\r\n \"HonoreeSpecialtyFilterChangeEvent\";\r\n public static readonly HonoreeYearFilterChangeEvent: string =\r\n \"HonoreeYearFilterChangeEvent\";\r\n\r\n public static readonly HonoreeActiveYearSelector: string =\r\n \"[data-contains='years'] .active\";\r\n\r\n private readonly staticSpecialties: string[] = [\"all specialties\",\"other specialties\"]\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n this._element\r\n .querySelectorAll(\"[data-action='select specialty']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleSpecialtyClick(ev)));\r\n\r\n this._element\r\n .querySelectorAll(\"[data-action='select year']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleYearClick(ev)));\r\n this.filterSpecialtyOptions();\r\n }\r\n\r\n private get selectedSpecialtyElement(): HTMLAnchorElement | null {\r\n const selector = \"[data-contains='specialties'] .active\";\r\n\r\n return this._element.querySelector(selector);\r\n }\r\n\r\n private get selectedYearElement(): HTMLAnchorElement | null {\r\n return this._element.querySelector(HonoreeSpecialtyFilter.HonoreeActiveYearSelector);\r\n }\r\n\r\n private get specialtyElements(): ReadonlyArray {\r\n const selector = \"[data-contains='specialties'] > a\";\r\n const items = this._element.querySelectorAll(selector);\r\n\r\n return Array.from(items);\r\n }\r\n\r\n private get yearElements(): Array {\r\n const selector = \"[data-contains='years'] > a\";\r\n const items = this._element.querySelectorAll(selector);\r\n\r\n return Array.from(items);\r\n }\r\n\r\n private filterSpecialtyOptions(): void {\r\n if (!window.nominees || window.nominees.length === 0) {\r\n\r\n return\r\n }\r\n\r\n const currentSelectedYear = this.selectedYearElement?.innerText.trim()\r\n const filteredNominees = window.nominees.filter((nominee :any) => nominee.NominationYear === currentSelectedYear)\r\n const filteredSpecialties = [...new Set(filteredNominees.map((nominee :any) => nominee.Specialty))];\r\n this.specialtyElements.forEach(specialtyElement => {\r\n if(this.staticSpecialties.indexOf(specialtyElement.innerText.trim().toLowerCase()) > -1) {\r\n return;\r\n }\r\n if(filteredSpecialties.indexOf(specialtyElement.innerText.trim()) === -1){\r\n specialtyElement.classList.add(\"d-none\")\r\n } else {\r\n specialtyElement.classList.remove(\"d-none\")\r\n }\r\n })\r\n\r\n }\r\n\r\n private filterYearOptions(): void {\r\n if (!window.nominees || window.nominees.length === 0) {\r\n\r\n return\r\n }\r\n\r\n const currentSelectedSpecialty = this.selectedSpecialtyElement?.innerText.trim() ?? \"\"\r\n const filteredNominees = window.nominees.filter((nominee :any) => nominee.Specialty === currentSelectedSpecialty)\r\n const filteredYears = [...new Set(filteredNominees.map((nominee :any) => nominee.NominationYear))];\r\n this.yearElements.forEach(yearElement => {\r\n if(filteredYears.indexOf(yearElement.innerText.trim()) === -1 && this.staticSpecialties.indexOf(currentSelectedSpecialty.toLowerCase()) === -1){\r\n yearElement.classList.add(\"d-none\")\r\n } else {\r\n yearElement.classList.remove(\"d-none\")\r\n }\r\n })\r\n\r\n }\r\n\r\n private triggerChangeEvent(): void {\r\n\r\n const selectedSpecialty = this.selectedSpecialtyElement;\r\n const selectedSpecialtyValue = selectedSpecialty ? selectedSpecialty.textContent || \"\" : \"\";\r\n\r\n const selectedYear = this.selectedYearElement;\r\n const selectedYearValue = selectedYear ? selectedYear.textContent || \"\" : \"\";\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HonoreeSpecialtyFilter.HonoreeSpecialtyFilterChangeEvent,\r\n `${selectedSpecialtyValue}|${selectedYearValue}`));\r\n }\r\n\r\n private handleSpecialtyClick(ev: Event): void {\r\n this.specialtyElements.forEach(item =>\r\n item.classList[item === ev.target ? \"add\" : \"remove\"](\"active\"));\r\n\r\n const selected = this.selectedSpecialtyElement;\r\n const selectedValue = selected ? selected.textContent || \"\" : \"\";\r\n\r\n $(\".specialty-toggle\", this._element)\r\n .dropdown(\"toggle\")\r\n .text(selectedValue);\r\n this.filterYearOptions();\r\n this.triggerChangeEvent();\r\n }\r\n\r\n private handleYearClick(ev: Event): void {\r\n this.yearElements.forEach(item =>\r\n item.classList[item === ev.target ? \"add\" : \"remove\"](\"active\"));\r\n\r\n const selectedYear = this.selectedYearElement;\r\n const selectedYearValue = selectedYear ? selectedYear.textContent || \"\" : \"\";\r\n\r\n $(\".year-toggle\", this._element)\r\n .dropdown(\"toggle\")\r\n .text(selectedYearValue);\r\n this.filterSpecialtyOptions();\r\n this.triggerChangeEvent();\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"HonoreeSpecialtyFilter\", HonoreeSpecialtyFilter);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport * as Mustache from \"mustache\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class HonorsScrollingBanner extends Component {\r\n private readonly _HonorsScrollingBannerListItemTemplate:\r\n string | null = null;\r\n private _tempDivElement: JQuery = $(\"
\");\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const _honorsScrollingBannerTemplateElement = $(\"#HonorsScrollingBannerTemplate\");\r\n if (_honorsScrollingBannerTemplateElement.length) {\r\n const honorsScrollingBannerTemplateHtml = _honorsScrollingBannerTemplateElement.html().trim();\r\n this._tempDivElement.html(honorsScrollingBannerTemplateHtml);\r\n this._HonorsScrollingBannerListItemTemplate = this._tempDivElement.html();\r\n }\r\n }\r\n\r\n public async init(): Promise {\r\n if(!window.nominees || window.nominees.length === 0){\r\n\r\n return\r\n }\r\n\r\n const loadingSpinner = this._element.querySelector(\".loading-spinner\")\r\n if (loadingSpinner){\r\n loadingSpinner.classList.add(\"active\");\r\n }\r\n else{\r\n console.warn(\"No spinner found\")\r\n }\r\n const renderedNominees = this.renderNomineeDivsFromTemplate(window.nominees)\r\n const slidingUnorderedList = this._element.querySelector(\".infiniteslide\")\r\n if (slidingUnorderedList) {\r\n slidingUnorderedList.innerHTML = renderedNominees;\r\n }\r\n $('.infiniteslide').infiniteslide({\r\n 'speed': 19.5, //speed this is px/min\r\n 'direction': \"left\", //choose up/down/left/right\r\n 'pauseonhover': false, //if true,stop onmouseover\r\n 'responsive': true, //width/height recalculation on window resize. child element's width/height define %/vw/vh,this set true.\r\n 'clone': 3 //if child elements are too few (elements can't \"infinite\"), set 2 or over.\r\n });\r\n setTimeout(()=> {\r\n const slideWrapContainer = this._element.querySelector(\".slide-wrap-container\")\r\n if(slideWrapContainer){\r\n slideWrapContainer.classList.remove(\"hidden\")\r\n if (loadingSpinner){\r\n loadingSpinner.classList.remove(\"active\");\r\n }\r\n }\r\n },2000)\r\n }\r\n\r\n private renderNomineeDivsFromTemplate(nominees: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._HonorsScrollingBannerListItemTemplate) {\r\n for (let nominee of nominees) {\r\n if(!nominee?.PhotoLink) {\r\n continue;\r\n }\r\n const renderedTemplate = Mustache.render(this._HonorsScrollingBannerListItemTemplate,nominee);\r\n renderedCards += UiUtil.replaceDataSrcWithSrcInImageTags(renderedTemplate)\r\n };\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"HonorsScrollingBanner\", HonorsScrollingBanner);","import { Component } from \"./../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class CollapseCardSection extends Component {\r\n private readonly _collapseButton: HTMLElement | null;\r\n private readonly _collapsedButtonText: string;\r\n private readonly _expandedButtonText: string;\r\n\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._collapseButton = DomUtil.query(document.body, \"#button_\" + this._element.id, false);\r\n this._collapsedButtonText = this._element.dataset.collapsedButtonText ?? \"\";\r\n this._expandedButtonText = this._element.dataset.expandedButtonText ?? \"\";\r\n\r\n $(this._element).on(\"hidden.bs.collapse\", () => this.ensureCollapseButtonIsInView())\r\n }\r\n\r\n public async init(): Promise {\r\n if(this._collapseButton){\r\n this._collapseButton.addEventListener('click', ev => this.handleCollapseButtonClick(ev));\r\n }\r\n }\r\n\r\n private handleCollapseButtonClick(event: Event): void {\r\n if(!this._collapseButton){\r\n return;\r\n }\r\n this._collapseButton.innerText = (this._collapseButton.innerText.trim().toLowerCase() === this._collapsedButtonText.trim().toLowerCase() ?\r\n this._expandedButtonText :\r\n this._collapsedButtonText);\r\n var btnClassToAdd = this._collapseButton.classList.contains(\"btn-primary\") ? \"btn-secondary\" : \"btn-primary\";\r\n var btnClassToRemove = this._collapseButton.classList.contains(\"btn-primary\") ? \"btn-primary\" : \"btn-secondary\";\r\n this._collapseButton.classList.add(btnClassToAdd);\r\n this._collapseButton.classList.remove(btnClassToRemove);\r\n }\r\n\r\n private ensureCollapseButtonIsInView(): void {\r\n if(!this._collapseButton){\r\n return;\r\n }\r\n if(!UiUtil.elementInViewport(this._collapseButton)){\r\n this._collapseButton.scrollIntoView({behavior: \"smooth\"});\r\n }\r\n\r\n }\r\n}\r\nComponentFactory.registerComponent(\"CollapseCardSection\", CollapseCardSection);\r\n","import { Component } from \"./../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\n// import { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioErrorModal } from \"../../components/healioGlobal/HealioErrorModal\";\r\nimport { LocalStorageUtil } from \"../../util/LocalStorageUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { PollCompleteModel } from \"../../models/HssPoll/PollCompleteModel\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { IPollAnswerModel } from \"../../models/HssPoll/IPollAnswerModel\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { IPollAnswerCountModel } from \"../../models/HssPoll/IPollAnswerCountModel\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { EventUtil } from \"../../healio-custom-scripts-newsarea\";\r\nimport { Cookie } from \"../../util/CookieUtil\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class HssPollCard extends Component {\r\n private readonly _cardBody: HTMLElement | null;\r\n private readonly _cardFooter: HTMLElement | null;\r\n private readonly _continueElement: HTMLElement | null;\r\n private readonly _spinner: HTMLElement | null;\r\n private readonly _submitElement: HTMLElement | null;\r\n private readonly _pollId: string | null;\r\n private readonly _questionDivs: NodeListOf | null;\r\n private readonly compareToPeersClass = \"compare-to-peers\";\r\n private readonly dataStore = \"HssPoll\";\r\n private readonly dataStoreKey = \"AttemptedToAnswer\";\r\n private readonly pollClass = \"poll\";\r\n private hssPollStorage: LocalStorageUtil | null = null;\r\n private _anonymousId: string | null = null;\r\n private _profile: IUserProfile | null;\r\n\r\n public static InitNoAnswers = \"HssPollCard.InitNoAnswers\";\r\n public static InitAnswers = \"HssPollCard.InitAnswers\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._cardBody = this._element.querySelector(\".card-body\")\r\n this._cardFooter = this._element.querySelector(\".card-footer\")\r\n this._continueElement = this._element.querySelector(\"[data-action='continue']\")\r\n this._spinner = this._element.querySelector(\".cme-spinner\")\r\n this._submitElement = this._element.querySelector(\"[data-action='submit']\")\r\n this._pollId = this._element.dataset.pollGroupId || \"00000000-0000-0000-0000-000000000000\"\r\n this._questionDivs = this._element.querySelectorAll(\".carousel-inner > div[data-question-id]\")\r\n this._profile = null\r\n }\r\n\r\n private async collectPollAnswerData({\r\n _profile,\r\n _pollCard,\r\n }: {\r\n _pollCard: HTMLElement;\r\n _profile: IUserProfile | null;\r\n }): Promise {\r\n var pollAnswers = [] as IPollAnswerModel[];\r\n const contactid = _profile?.contactid || null\r\n const activityDiv = document.querySelector(\"[data-activity-id]\") as HTMLElement\r\n const activityId = activityDiv.dataset.activityId || \"00000000-0000-0000-0000-000000000000\"\r\n\r\n const pollId = _pollCard.dataset.pollGroupId || \"00000000-0000-0000-0000-000000000000\"\r\n const _questionDivs = _pollCard.querySelectorAll(\".carousel-inner > div[data-question-id]\")\r\n\r\n _questionDivs?.forEach(questionDiv => {\r\n const questionId = questionDiv?.dataset.questionId || \"00000000-0000-0000-0000-000000000000\"\r\n const questionText = questionDiv?.dataset.questionText || \"00000000-0000-0000-0000-000000000000\"\r\n const answers = Array.from(questionDiv.querySelectorAll(\"[data-answer-id]\"))\r\n const selectedAnswer = answers.find(a => (a as HTMLInputElement).checked) as HTMLElement\r\n const answerId = selectedAnswer?.dataset.answerId || \"00000000-0000-0000-0000-000000000000\"\r\n const answerText = (selectedAnswer as HTMLInputElement)?.value || \"\"\r\n const pollAnswer = {\r\n ContactID: contactid,\r\n AnonymousID: this._anonymousId,\r\n ActivityID: activityId,\r\n PollID: pollId,\r\n QuestionID: questionId,\r\n QuestionText: questionText,\r\n AnswerID: answerId,\r\n AnswerText: answerText,\r\n TS: \"\"\r\n }\r\n pollAnswers.push(pollAnswer)\r\n })\r\n const pollComplete = new PollCompleteModel(pollAnswers)\r\n return pollComplete;\r\n }\r\n\r\n public async init(): Promise {\r\n this._profile = await WyanokeUtil.loadUserProfile(true, false);\r\n this.hssPollStorage = new LocalStorageUtil(this.dataStore);\r\n\r\n this._anonymousId = Cookie.getCookie(\"anonid\");\r\n\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \"input[type=radio],input[type=checkbox]\"\r\n );\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.inputChanged(ev));\r\n });\r\n\r\n this._continueElement?.addEventListener(\"click\", ev => this.continueClicked(ev));\r\n\r\n this._submitElement?.addEventListener(\"click\", ev => this.submitClicked());\r\n\r\n const currentPollAnswers = await this.getPollAnswers();\r\n\r\n if (this._questionDivs?.length === 1) {\r\n await this.setCompare2Peers();\r\n }\r\n\r\n if (!currentPollAnswers || currentPollAnswers.length == 0) {\r\n if (this._questionDivs?.length == 1) {\r\n this._continueElement?.classList.add(\"hidden\");\r\n this._submitElement?.classList.remove(\"hidden\");\r\n }\r\n this._spinner?.classList.remove(\"active\");\r\n this._cardBody?.classList.remove(\"hidden\");\r\n this._cardFooter?.classList.remove(\"hidden\");\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HssPollCard.InitNoAnswers,\r\n null));\r\n\r\n return;\r\n }\r\n\r\n const currentPollQuestion = currentPollAnswers.find(pollanswer => {\r\n return pollanswer.AnswerID === \"00000000-0000-0000-0000-000000000000\"\r\n });\r\n\r\n if (currentPollAnswers && currentPollAnswers.length > 0 && !currentPollQuestion) {\r\n this.setPollComplete();\r\n }\r\n\r\n let currentQuestionIndex = 0;\r\n if (currentPollQuestion) {\r\n for (const pollAnswer of currentPollAnswers) {\r\n if (pollAnswer.AnswerID === \"00000000-0000-0000-0000-000000000000\") {\r\n continue;\r\n }\r\n const questionDiv = this._element.querySelector(\"[data-question-id='\" + pollAnswer.QuestionID + \"']\");\r\n if (questionDiv) {\r\n const answerInput = questionDiv.querySelector(\"[data-answer-id='\" + pollAnswer.AnswerID + \"']\") as HTMLInputElement;\r\n answerInput.checked = true;\r\n }\r\n }\r\n currentQuestionIndex = currentPollAnswers.indexOf(currentPollQuestion)\r\n $(\"#\" + this._element.id).carousel(currentQuestionIndex)\r\n }\r\n\r\n if (this._questionDivs?.length === 1 || this._questionDivs?.length === (currentQuestionIndex + 1)) {\r\n this._continueElement?.classList.add(\"hidden\");\r\n this._submitElement?.classList.remove(\"hidden\");\r\n }\r\n\r\n\r\n await this.checkForPreviousPollClick();\r\n\r\n this._spinner?.classList.remove(\"active\");\r\n this._cardBody?.classList.remove(\"hidden\");\r\n this._cardFooter?.classList.remove(\"hidden\");\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HssPollCard.InitAnswers,\r\n null));\r\n }\r\n\r\n private inputChanged(clickEvent: Event): void {\r\n const input = clickEvent.target as HTMLElement;\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n if ((!this._profile || this._profile.isLoggedIn !== \"True\") && !anonymousId) {\r\n this.hssPollStorage?.insertItem(this.dataStore, [this.dataStoreKey], input.id);\r\n WyanokeUtil.logIn();\r\n return;\r\n }\r\n\r\n input.removeAttribute(\"data-changed\");\r\n\r\n if (!this._continueElement?.classList.contains(\"hidden\")) {\r\n this._continueElement?.classList.remove(\"disabled\");\r\n this._continueElement?.removeAttribute(\"disabled\")\r\n }\r\n\r\n if (!this._submitElement?.classList.contains(\"hidden\")) {\r\n this._submitElement?.classList.remove(\"disabled\");\r\n this._submitElement?.removeAttribute(\"disabled\")\r\n }\r\n }\r\n\r\n private async checkForPreviousPollClick(): Promise {\r\n const storedElementId = (this.hssPollStorage?.getItem(this.dataStore, [\r\n this.dataStoreKey\r\n ])) as string;\r\n\r\n if (storedElementId && storedElementId.length > 0) {\r\n const collapsedDiv = this._element.closest(\".collapse\");\r\n if (collapsedDiv && !collapsedDiv.classList.contains(\"show\")) {\r\n const collapseButton = DomUtil.query(document.body, \"[data-target='#\" + collapsedDiv?.id + \"']\") as HTMLButtonElement;\r\n if (collapseButton) {\r\n collapseButton.click();\r\n }\r\n }\r\n const pollElementPreviouslyClicked = DomUtil.query(this._element, \"#\" + storedElementId)\r\n if (pollElementPreviouslyClicked) {\r\n pollElementPreviouslyClicked.click()\r\n }\r\n this._element.scrollIntoView()\r\n await this.hssPollStorage?.deleteItem(this.dataStore, [this.dataStoreKey]);\r\n }\r\n }\r\n\r\n private async setCompare2Peers(): Promise {\r\n let totalAnswers = 0\r\n if (!this._questionDivs) {\r\n return;\r\n }\r\n var questionId = this._questionDivs[0].dataset.questionId;\r\n if (questionId) {\r\n const pollAnswerCounts: IPollAnswerCountModel[] | null = await this.getPollAnswerCounts(questionId);\r\n if (pollAnswerCounts) {\r\n totalAnswers = pollAnswerCounts.reduce((a: Number, b: IPollAnswerCountModel) => {\r\n return Number(a) + Number(b.Count)\r\n }, 0);\r\n }\r\n if (totalAnswers === 0) {\r\n return;\r\n }\r\n const compare2PeersDiv = this._element.querySelector(\".poll-complete-c2p\");\r\n compare2PeersDiv?.querySelectorAll(\".progress-value\").forEach(pvLineItem => pvLineItem.innerText = \"0%\")\r\n compare2PeersDiv?.querySelectorAll(\".progress-bar\").forEach(pbDiv => {\r\n pbDiv.setAttribute(\"valuenow\", \"0\");\r\n pbDiv.style.width = `${0}%`\r\n })\r\n pollAnswerCounts?.forEach(answerCount => {\r\n var percentAnswered = ((Number(answerCount.Count) / totalAnswers) * 100).toFixed()\r\n\r\n const progressLineItem = compare2PeersDiv?.querySelector(\"li[data-answer-id='\" + answerCount.AnswerId + \"']\") as HTMLElement;\r\n if(progressLineItem) {\r\n progressLineItem.innerText = `${percentAnswered}%`\r\n }\r\n const progressBarDiv = compare2PeersDiv?.querySelector(\"div[data-answer-id='\" + answerCount.AnswerId + \"']\") as HTMLElement;\r\n if(progressBarDiv){\r\n progressBarDiv.setAttribute(\"valuenow\", percentAnswered);\r\n progressBarDiv.style.width = `${percentAnswered}%`\r\n }\r\n })\r\n\r\n\r\n }\r\n }\r\n\r\n\r\n private continueClicked(event: Event): void {\r\n this._continueElement?.classList.add(\"disabled\");\r\n this._continueElement?.setAttribute(\"disabled\", \"disabled\");\r\n this.savePollAnswers();\r\n $(\"#\" + this._element.id).carousel(\"next\")\r\n const questionDivs = this._element.querySelectorAll(\"div[data-question-id]\")\r\n const questionDivArray = Array.from(questionDivs)\r\n\r\n const currentQuestion = questionDivArray.find(questionDiv => questionDiv.classList.contains(\"active\"))\r\n\r\n if (questionDivArray[questionDivArray.length - 2] === currentQuestion) {\r\n this._continueElement?.classList.add(\"hidden\");\r\n this._submitElement?.classList.remove(\"hidden\");\r\n }\r\n }\r\n\r\n private setPollComplete(): void {\r\n const activeCarouselItem = this._element.querySelector(\".carousel-inner > .active\")\r\n activeCarouselItem?.classList.remove(\"active\");\r\n const cardFooter = this._element.querySelector(\".card-footer\")\r\n if (cardFooter) {\r\n cardFooter.innerHTML = \"\"\r\n }\r\n let pollCompleteDiv = null;\r\n const compare2PeersDiv = this._element.querySelector(\".poll-complete-c2p\");\r\n if (this._questionDivs?.length === 1 && compare2PeersDiv) {\r\n pollCompleteDiv = compare2PeersDiv;\r\n this._element.classList.remove(this.pollClass)\r\n this._element.classList.add(this.compareToPeersClass)\r\n } else {\r\n pollCompleteDiv = this._element.querySelector(\".poll-complete\");\r\n }\r\n pollCompleteDiv?.classList.remove(\"hidden\");\r\n }\r\n\r\n\r\n private submitClicked(): void {\r\n UiUtil.toggleButtonState(this._submitElement as HTMLButtonElement)\r\n void this.savePollAnswers(true, true)\r\n }\r\n\r\n private async getPollAnswers(): Promise {\r\n let pollAnswers: IPollAnswerModel[] | null = []\r\n if (!this._pollId) {\r\n return pollAnswers;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.hssPollAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No Poll Answer Service available to load previous answers.\");\r\n\r\n return pollAnswers;\r\n }\r\n pollAnswers = await service.loadAnswers(this._pollId, this._anonymousId);\r\n\r\n return pollAnswers;\r\n }\r\n\r\n private async getPollAnswerCounts(questionId: string): Promise {\r\n let pollAnswers: IPollAnswerCountModel[] | null = null\r\n if (!this._pollId) {\r\n return pollAnswers;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.hssPollAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No Poll Answer Service available to load previous answers.\");\r\n\r\n return pollAnswers;\r\n }\r\n pollAnswers = await service.getAnswerCounts(this._pollId, questionId);\r\n\r\n return pollAnswers;\r\n }\r\n\r\n // JUSTIFICATION: type is inferred\r\n // tslint:disable-next-line: typedef\r\n private async savePollAnswers(showErrorOnSaveFailed = false, completePoll = false): Promise {\r\n\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if ((!profile || profile.isLoggedIn !== \"True\") && !anonymousId) {\r\n WyanokeUtil.logIn();\r\n return;\r\n }\r\n\r\n const pollAnswerData = await this.collectPollAnswerData({\r\n _profile: profile,\r\n _pollCard: this._element,\r\n });\r\n const context = this._pageContext;\r\n const service = context ? context.hssPollAnswerService : null;\r\n if (!service) {\r\n console.warn(\"No Poll Answer Service available to save.\");\r\n\r\n return;\r\n }\r\n const saved = await service.saveAnswers(pollAnswerData);\r\n if (!saved) {\r\n console.warn(\"Poll was not saved\");\r\n if (showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n UiUtil.toggleButtonState(this._submitElement as HTMLButtonElement)\r\n }\r\n return;\r\n } else {\r\n if (completePoll) {\r\n this.setPollComplete();\r\n }\r\n\r\n if (this._questionDivs?.length === 1) {\r\n await this.setCompare2Peers();\r\n }\r\n return;\r\n }\r\n\r\n }\r\n}\r\nComponentFactory.registerComponent(\"HssPollCard\", HssPollCard);\r\n","import { IPollAnswerModel } from \"./IPollAnswerModel\";\r\nimport { IPollCompleteModel } from \"./IPollCompleteModel\";\r\n\r\nexport class PollCompleteModel implements IPollCompleteModel {\r\n public PollAnswers: IPollAnswerModel[];\r\n\r\n constructor(\r\n _pollAnswers: IPollAnswerModel[]\r\n ) {\r\n this.PollAnswers = _pollAnswers;\r\n }\r\n}\r\n","// tslint:disable:file-name-casing\r\n// Justification: File is used only as an entry point, and the compiled file\r\n// should match the existing naming scheme.\r\n\r\n// Polyfills for targeted browsers. Babel will read this import and examine\r\n// the .browserslistrc file to determine what browsers we are supporting, then\r\n// include only the polyfills that are needed.\r\nimport \"core-js\";\r\n\r\n// Async/await support for IE11. : Leaving this in as it seems something(?) is requiring it.\r\nimport \"regenerator-runtime\";\r\n\r\n// we need to polyfill until we have all script usage compiled?\r\nimport \"./extensions/HtmlCollection.prototype.forEach\";\r\n\r\n// Element.prototype.remove support for IE11.\r\n// import \"./extensions/Element.prototype.remove\";\r\n\r\n// import \"./extensions/Element.prototype.closest\";\r\n\r\n// Fetch support for IE11\r\n// Depends on Promise support for IE11, currently provided by core-js.\r\n// import \"whatwg-fetch\";\r\n\r\n// export * from \"./components/newsArticle/NewsArticleAds\";\r\nexport * from \"./components/genericLanding/LandingCardLayout\";\r\nexport * from \"./components/genericLanding/LandingCardLoader\";\r\nexport * from \"./components/genericLanding/MasonryReflow\";\r\nexport * from \"./components/genericLanding/LandingNoMasonry\";\r\nexport * from \"./components/healioGlobal/HealioSearchBox\";\r\nexport * from \"./components/healioGlobal/EmailSignUp\";\r\nexport * from \"./components/healioGlobal/EmailSignUpSuccessModal\";\r\nexport * from \"./components/healioGlobal/HealioErrorModal\";\r\nexport * from \"./components/healioGlobal/HealioHeader\";\r\nexport * from \"./components/healioGlobal/ScrollToTopButton\";\r\nexport * from \"./components/healioGlobal/SpecialtySelect\";\r\nexport * from \"./components/healioGlobal/SubSpecialtySelect\";\r\nexport * from \"./components/healioGlobal/ListUnstyled\";\r\nexport * from \"./components/healioGlobal/LoginSignupSplash\";\r\nexport * from \"./components/homepage/HomeSpecialtySelect\";\r\nexport * from \"./components/mySavedPages/MySavedPages\";\r\nexport * from \"./components/news/SiteMapSpecialtyFilter\";\r\nexport * from \"./components/news/NewsHeaderLinks\";\r\nexport * from \"./components/news/NewsLandingRedirect\";\r\nexport * from \"./components/news/ViewBySpecialty\";\r\nexport * from \"./components/news/ViewBySubSpecialty\";\r\nexport * from \"./components/newsArticle/EmailTopicAlert\";\r\nexport * from \"./components/newsArticle/ReadNext\";\r\nexport * from \"./components/newsArticle/ReadNextContentDiscoverability\";\r\nexport * from \"./components/newsArticle/RelatedContent\";\r\nexport * from \"./components/newsArticle/WindowLoadEventTracker\";\r\nexport * from \"./components/newsArticle/NextArticle\";\r\nexport * from \"./components/newsArticle/ArticleContent\";\r\nexport * from \"./components/newslanding/HealioMinuteSignUp\";\r\nexport * from \"./components/newslanding/MeetingCalendarFilter\";\r\nexport * from \"./components/newslanding/SpecialtyLandingFeatured\";\r\nexport * from \"./components/newslanding/YearFilter\";\r\nexport * from \"./components/newslanding/PinnedSeries\";\r\nexport * from \"./components/newsPublication/PublicationDateSelect\";\r\nexport * from \"./components/newsPublication/PublicationSubscription\";\r\nexport * from \"./components/recommendations/CmeActivityRecoCards\";\r\nexport * from \"./components/SaveIcon\";\r\nexport * from \"./components/healioGlobal/AjaxCustomComponentLoader\"\r\nexport * from \"./util/EventUtil\";\r\nexport * from \"./util/LocalStorageUtil\";\r\n\r\nexport { context } from \"./Wyanoke/WyanokeContext\";\r\n","import { Component } from \"./../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\n// import { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\n// tslint:disable:max-file-line-count\r\nexport class HssQuizCard extends Component {\r\n private readonly _cardBody: HTMLElement | null;\r\n private readonly _cardFooter: HTMLElement | null;\r\n private readonly _nextElement: HTMLElement | null;\r\n private readonly _spinner: HTMLElement | null;\r\n private readonly _finishElement: HTMLElement | null;\r\n private readonly _quizId: string | null;\r\n private readonly _quizComplete: boolean;\r\n private readonly _quizScore: Number;\r\n\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._cardBody = this._element.querySelector(\".card-body\")\r\n this._cardFooter = this._element.querySelector(\".card-footer\")\r\n this._nextElement = this._element.querySelector(\"[data-action='continue']\")\r\n this._spinner = this._element.querySelector(\".cme-spinner\")\r\n this._finishElement = this._element.querySelector(\"[data-action='finish']\")\r\n this._quizId = this._element.dataset.quizId || \"00000000-0000-0000-0000-000000000000\"\r\n this._quizComplete = this._element.dataset.quizComplete === \"true\";\r\n this._quizScore = Number(this._element.dataset.quizScore) || 0;\r\n }\r\n\r\n public async init(): Promise {\r\n\r\n if(this._quizComplete){\r\n this.setQuizComplete();\r\n }\r\n else {\r\n const clickableAnswers = this._element.querySelectorAll(\r\n \"input[type=radio],input[type=checkbox]\"\r\n );\r\n\r\n //event listeners\r\n clickableAnswers.forEach(answer => {\r\n answer.addEventListener(\"click\", ev => this.inputChanged(ev));\r\n });\r\n this._nextElement?.addEventListener(\"click\", ev => this.nextClicked(ev));\r\n this._finishElement?.addEventListener(\"click\", ev => this.finishClicked(ev));\r\n }\r\n\r\n this._spinner?.classList.remove(\"active\");\r\n this._cardBody?.classList.remove(\"hidden\");\r\n this._cardFooter?.classList.remove(\"hidden\");\r\n }\r\n\r\n private async inputChanged(event: Event): Promise {\r\n const questionDivs = this._element.querySelectorAll(\".carousel-question\")\r\n const questionDivArray = Array.from(questionDivs)\r\n const currentQuestionDiv = questionDivArray.find(questionDiv => questionDiv.classList.contains(\"active\"));\r\n const currentQuestion = currentQuestionDiv?.querySelector(\"div[data-question-id\") as HTMLElement;\r\n const input = event.target as HTMLElement;\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn !== \"True\") {\r\n WyanokeUtil.logIn();\r\n return;\r\n }\r\n\r\n input.removeAttribute(\"data-changed\");\r\n\r\n if(currentQuestion){\r\n const correctAnswerId = currentQuestion.dataset.correctAnswer;\r\n const questionId = currentQuestion.dataset.questionId || \"00000000-0000-0000-0000-000000000000\";\r\n const selectedAnswer = currentQuestion?.querySelector(\"input:checked\") as HTMLInputElement;\r\n const correctAnswer = selectedAnswer.value === correctAnswerId\r\n const status = correctAnswer ? 1 : 0;\r\n const savedAnswers = await this.saveQuizAnswer(true, selectedAnswer.value, questionId, status)\r\n if(!savedAnswers) {\r\n return;\r\n }\r\n\r\n if(correctAnswer){\r\n currentQuestionDiv?.querySelector(\".quiz__question\")?.classList.add(\"correct\");\r\n selectedAnswer.parentElement?.classList.add(\"correct\")\r\n } else {\r\n currentQuestionDiv?.querySelector(\".quiz__question\")?.classList.add(\"incorrect\");\r\n selectedAnswer.parentElement?.classList.add(\"incorrect\")\r\n }\r\n\r\n const rationale = currentQuestionDiv?.querySelector(\".learn-test__question--rationale\");\r\n rationale?.classList.remove(\"hidden\");\r\n }\r\n\r\n if(questionDivArray[questionDivArray.length - 1] === currentQuestionDiv) {\r\n this._nextElement?.classList.add(\"hidden\");\r\n this._finishElement?.classList.remove(\"hidden\");\r\n this._finishElement?.classList.remove(\"disabled\");\r\n this._finishElement?.removeAttribute(\"disabled\");\r\n\r\n this.saveQuizStatus();\r\n } else {\r\n this._nextElement?.classList.remove(\"disabled\");\r\n this._nextElement?.removeAttribute(\"disabled\");\r\n }\r\n\r\n }\r\n\r\n private nextClicked(event: Event): void {\r\n this._nextElement?.classList.add(\"disabled\");\r\n this._nextElement?.setAttribute(\"disabled\", \"disabled\");\r\n\r\n $(\"#\" + this._element.id).carousel(\"next\")\r\n }\r\n\r\n private async finishClicked(event: Event): Promise {\r\n UiUtil.toggleButtonState(this._finishElement as HTMLButtonElement)\r\n\r\n this.scroll();\r\n this.setQuizComplete()\r\n }\r\n\r\n private scroll(){\r\n var element = $('#' + this._element.id);\r\n if (element){\r\n const scrolltop = element.offset()?.top\r\n $(\"html, body\").animate(\r\n {\r\n scrollTop: scrolltop\r\n },\r\n \"slow\"\r\n );\r\n }\r\n }\r\n\r\n private setQuizComplete(showErrorOnSaveFailed = false): void {\r\n const activeCarouselItem = this._element.querySelector(\".carousel-inner > .active\")\r\n activeCarouselItem?.classList.remove(\"active\");\r\n const cardFooter = this._element.querySelector(\".card-footer\")\r\n if(cardFooter){\r\n cardFooter.innerHTML = \"\"\r\n }\r\n const pollCompleteDiv = this._element.querySelector(\".quiz-complete\")\r\n const quizScoreDiv = this._element.querySelector(\".quiz-score\")\r\n\r\n if(quizScoreDiv){\r\n quizScoreDiv.innerHTML = this.calculateScore() + \"%\";\r\n }\r\n\r\n pollCompleteDiv?.classList.remove(\"hidden\");\r\n }\r\n\r\n private async saveQuizAnswer(showErrorOnSaveFailed = false, selectedAnswer: string, questionId: string, status: Number): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.qbankService : null;\r\n if (!service) {\r\n console.warn(\"No QBank Service available to save.\");\r\n\r\n return false;\r\n }\r\n\r\n var saved = await service.saveAnswer(this._quizId || \"\", questionId, selectedAnswer, status)\r\n if (!saved) {\r\n console.warn(\"QuestionGroup was not saved\");\r\n if(showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n return saved;\r\n }\r\n\r\n private async saveQuizStatus(showErrorOnSaveFailed = true) : Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.qbankService : null;\r\n if (!service) {\r\n console.warn(\"No QBank Service available to save.\");\r\n\r\n return false;\r\n }\r\n\r\n var saved = await service.completeQuiz(this._quizId || \"\")\r\n if (!saved) {\r\n console.warn(\"QuestionGroup was not saved\");\r\n if(showErrorOnSaveFailed) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n }\r\n }\r\n return saved;\r\n }\r\n\r\n private calculateScore(): Number{\r\n if(this._quizComplete){\r\n return this._quizScore;\r\n } else {\r\n var correct = $(\".activity-test__question--answer.correct\").length;\r\n var total = this._element.querySelectorAll(\".learn-test__question--radio\").length;\r\n return Math.round((correct / total) * 100.0);\r\n }\r\n }\r\n}\r\nComponentFactory.registerComponent(\"HssQuizCard\", HssQuizCard);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport * as Mustache from \"mustache\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class LearningSiteMyQuizzes extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n const learningSiteId =\r\n element.getAttribute(\"data-learning-site-id\");\r\n\r\n if (learningSiteId === null) {\r\n\r\n return;\r\n }\r\n\r\n this._element\r\n .querySelectorAll(\".quiz-listing-header .dropdown-menu a\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleSorting(ev, el, learningSiteId)));\r\n\r\n\r\n this.loadResults(learningSiteId, null);\r\n }\r\n\r\n private handleSorting(ev: Event, el: Element, learningSiteId: string): void {\r\n let sortMode = el.getAttribute('id');\r\n this.loadResults(learningSiteId, sortMode);\r\n\r\n $(el).parent().children().each(function () {\r\n $(this).removeClass(\"active\");\r\n });\r\n el.classList.add(\"active\");\r\n }\r\n\r\n private async loadResults(learningSiteId: string, sortMode: string | null): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n console.error(\"Profile is not loaded\");\r\n\r\n return;\r\n }\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n url: `/h5learningsites/qbank/getquizlist?contactid=${profile.contactid}&learningsiteid=${learningSiteId}&includequestions=true`,\r\n success(d: string): void {\r\n let reA = /[^a-zA-Z]/g;\r\n let reN = /[^0-9]/g;\r\n let n = JSON.parse(JSON.stringify(d))\r\n // default\r\n if (sortMode === null || sortMode === 'ddNewest') {\r\n n.quizlist.sort(function (a: { CreatedDate: string | number; }, b: { CreatedDate: string | number; }) {\r\n var aA = a.CreatedDate.toString().replace(reA, \"\");\r\n var bA = b.CreatedDate.toString().replace(reA, \"\");\r\n if (aA === bA) {\r\n var aN = parseInt(a.CreatedDate.toString().replace(reN, \"\"), 10);\r\n var bN = parseInt(b.CreatedDate.toString().replace(reN, \"\"), 10);\r\n return aN === bN ? 0 : aN < bN ? 1 : -1;\r\n } else {\r\n return aA < bA ? 1 : -1;\r\n }\r\n });\r\n }\r\n\r\n if (sortMode === 'ddAlpha') {\r\n n.quizlist.sort(function (a: { CustomName: string; }, b: { CustomName: string; }) {\r\n var nameA = a.CustomName.toUpperCase(); // ignore upper and lowercase\r\n var nameB = b.CustomName.toUpperCase(); // ignore upper and lowercase\r\n if (nameA < nameB) {\r\n return -1;\r\n }\r\n if (nameA > nameB) {\r\n return 1;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n if (sortMode === 'ddOldest') {\r\n n.quizlist.sort(function (a: { CreatedDate: string | number; }, b: { CreatedDate: string | number; }) {\r\n var aA = a.CreatedDate.toString().replace(reA, \"\");\r\n var bA = b.CreatedDate.toString().replace(reA, \"\");\r\n if (aA === bA) {\r\n var aN = parseInt(a.CreatedDate.toString().replace(reN, \"\"), 10);\r\n var bN = parseInt(b.CreatedDate.toString().replace(reN, \"\"), 10);\r\n return aN === bN ? 0 : aN > bN ? 1 : -1;\r\n } else {\r\n return aA > bA ? 1 : -1;\r\n }\r\n });\r\n }\r\n\r\n if (sortMode === 'ddScoreHl') {\r\n $.each(n.quizlist, function(key,value) {\r\n if(n.quizlist[key].IsCompleted===false && n.quizlist[key].Score==0) {\r\n n.quizlist[key].Score=-1;\r\n }\r\n });\r\n n.quizlist.sort(function (a: { Score: string | number; CreatedDate: string | number; }, b: { Score: string | number; CreatedDate: string | number; }) {\r\n return a.Score == b.Score ? (a.CreatedDate < b.CreatedDate ? 1 : -1) : a.Score < b.Score ? 1 : -1;\r\n });\r\n }\r\n\r\n if (sortMode === 'ddScoreLh') {\r\n $.each(n.quizlist, function(key,value) {\r\n if(n.quizlist[key].IsCompleted===false && n.quizlist[key].Score==0) {\r\n n.quizlist[key].Score=1000;\r\n }\r\n });\r\n n.quizlist.sort(function (a: { Score: string | number; CreatedDate: string | number; }, b: { Score: string | number; CreatedDate: string | number; }) {\r\n return a.Score == b.Score ? (a.CreatedDate < b.CreatedDate ? 1 : -1) : a.Score > b.Score ? 1 : -1;\r\n });\r\n }\r\n\r\n var template = $(\"#quizResultTemplate\").html();\r\n n.titlecase = function () {\r\n return function (text:string, render:any) {\r\n var renderedText = render(text);\r\n let outarray:string[] = [];\r\n let wordarray:string[] = renderedText.split(\" \");\r\n wordarray.forEach(word => {\r\n outarray.push( word[0].toUpperCase() + word.substring(1));\r\n });\r\n return outarray.join(\" \");\r\n }\r\n }\r\n n.testscoreformat = function () {\r\n return function (token:any, render:any) {\r\n var score = render(token)\r\n return (score === 0 ? \"0\" : score%1 === 0 ? Number(score).toFixed(0) : (Math.round(Number(score) * 10) / 10).toFixed(1));\r\n }\r\n }\r\n\r\n var html = Mustache.render(template,n)\r\n if(n.quizlist && n.quizlist.length > 0){\r\n $(\"#loggedInDisplay\").html(html);\r\n $(\"#loggedInDisplay\").show();\r\n $(\"#loggedOutDisplay\").hide();\r\n $(\"#noDataDisplay\").hide();\r\n } else if(n.quizlist.length < 1) {\r\n $(\"#loggedInDisplay\").hide();\r\n $(\"#loggedOutDisplay\").hide();\r\n $(\"#noDataDisplay\").show();\r\n } else {\r\n $(\"#loggedInDisplay\").hide();\r\n $(\"#noDataDisplay\").hide();\r\n $(\"#loggedOutDisplay\").show();\r\n }\r\n document.dispatchEvent(EventUtil.createCustomEvent(\"LearningSiteMyQuizzesLoaded\",null));\r\n },\r\n error(d: Object): void {\r\n console.log(\"[getquizlist] - error retrieving quiz list.\");\r\n },\r\n });\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"LearningSiteMyQuizzes\", LearningSiteMyQuizzes);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class LearningSiteNextArticle extends Component {\r\n private _learningSiteNextArticleRequested: Boolean = false;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n if (window.Visitor !== undefined && window.Visitor !== \"\" && window.Visitor !== null) {\r\n this.botCheck();\r\n } else {\r\n $(window).on(\"globalsloaded\", () => this.botCheck());\r\n }\r\n }\r\n\r\n public botCheck(): void {\r\n if (window.Visitor.isbot || window.Visitor.type === \"DC\" || this._learningSiteNextArticleRequested) {\r\n return;\r\n }\r\n window.addEventListener(\"scroll\", () => this.handleScroll());\r\n }\r\n\r\n public handleScroll(): void {\r\n const articleFooter = (> document.getElementsByClassName(\"related__container\"));\r\n if(UiUtil.elementInViewport(articleFooter[0])) {\r\n if(!this._learningSiteNextArticleRequested) {\r\n let recommendedUrl = this.getRecommendedUrl(\".recommended-primary\");\r\n\r\n if(!recommendedUrl) {\r\n\r\n return;\r\n }\r\n\r\n const currentDocId = window.Context && window.Context.documentid ? window.Context.documentid.replace(\"{\",\"\").replace(\"}\",\"\").toLowerCase() : null;\r\n\r\n // the next recommended is the current article; try the 2nd recommended\r\n if(recommendedUrl.split(\"/find/\")[1] === currentDocId) {\r\n recommendedUrl = this.getRecommendedUrl(\".recommended-one\");\r\n }\r\n\r\n if (!recommendedUrl){\r\n\r\n return;\r\n }\r\n\r\n let nextArticleId = recommendedUrl.split('/find/')[1];\r\n let nextArticleUrl = recommendedUrl + \"?nextarticle=1\";\r\n\r\n if(this._learningSiteNextArticleRequested)\r\n {\r\n\r\n return;\r\n }\r\n\r\n this._learningSiteNextArticleRequested = true;\r\n this.handleLoadingDisplay();\r\n\r\n var myHeaders = new Headers();\r\n myHeaders.append('pragma', 'no-cache');\r\n myHeaders.append('cache-control', 'no-cache');\r\n\r\n var requestInit = {\r\n method: 'GET',\r\n headers: myHeaders,\r\n };\r\n\r\n fetch(nextArticleUrl, requestInit).then( response => {\r\n if(response.ok)\r\n {\r\n recommendedUrl = response.url && response.url.length > 0 ?\r\n response.url.replace(\"?nextarticle=1\", \"\") :\r\n nextArticleUrl.replace(\"?nextarticle=1\", \"\")\r\n return response.text();\r\n }\r\n throw new Error('Invalid response while getting next article at: ' + nextArticleUrl);\r\n }).then(html => {\r\n const enableTrustBoxElem = document.querySelector(\"[data-enable-trustbox='true']\");\r\n const enableTrustBox = enableTrustBoxElem == null ? false : true;\r\n\r\n\r\n let tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n\r\n if (!enableTrustBox) {\r\n let articleContainers = DomUtil.queryAll(document.body, '.learn__article');\r\n const lastArticleContainer = articleContainers[articleContainers.length - 1];\r\n const articleInnerContentDiv = DomUtil.query(this._element, \"[data-next-article='article_content_wrap']\");\r\n const gradientDiv = DomUtil.query(this._element, \"[data-next-article='gradient_overlay']\");\r\n const continueReadingButton = DomUtil.query(this._element, \"[data-next-article='continue_reading_button']\");\r\n const continueReadingUrl = recommendedUrl ?? \"#\";\r\n continueReadingButton.href = continueReadingUrl;\r\n\r\n const articleContainer = DomUtil.query(tempDiv, \".learn__article\");\r\n const nextArticleClass = \"article_\" + nextArticleId;\r\n articleContainer.classList.add(nextArticleClass);\r\n\r\n const articleContentDiv = DomUtil.query(tempDiv, \".article__body\");\r\n articleInnerContentDiv.innerHTML = articleContentDiv.innerHTML;\r\n articleContentDiv.innerHTML = articleInnerContentDiv.outerHTML;\r\n\r\n articleContainer.insertAdjacentHTML('beforeend', continueReadingButton.outerHTML);\r\n\r\n const leftColumn = DomUtil.query(articleContainer, \".article__inner__content\");\r\n leftColumn.setAttribute(\"style\", \"margin-top: 5px;\");\r\n leftColumn.insertAdjacentHTML('beforeend', gradientDiv.outerHTML);\r\n\r\n lastArticleContainer.insertAdjacentHTML('afterend', articleContainer.outerHTML);\r\n\r\n this.loadNextArticleComponents(nextArticleClass);\r\n const nextArticleElement = DomUtil.query(document.body, \".\" + nextArticleClass);\r\n moduletracking.AjaxTrackLinks(nextArticleElement, \"NextArticle\");\r\n this.handleLoadingDisplay();\r\n this._element.remove();\r\n } else {\r\n let articleContainers = DomUtil.queryAll(document.body, '.article__container');\r\n const lastArticleContainer = articleContainers[articleContainers.length - 1];\r\n const articleInnerContentDiv = DomUtil.query(this._element, \"[data-next-article='article_content_wrap']\");\r\n const gradientDiv = DomUtil.query(this._element, \"[data-next-article='gradient_overlay']\");\r\n const continueReadingButton = DomUtil.query(this._element, \"[data-next-article='continue_reading_button']\");\r\n const continueReadingUrl = recommendedUrl ?? \"#\";\r\n continueReadingButton.href = continueReadingUrl;\r\n\r\n\r\n let tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n\r\n const articleContainer = DomUtil.query(tempDiv, \".article__container\");\r\n const nextArticleClass = \"article_\" + nextArticleId;\r\n articleContainer.classList.add(nextArticleClass);\r\n\r\n const articleContentDiv = DomUtil.query(tempDiv, \".article__content\");\r\n articleInnerContentDiv.innerHTML = articleContentDiv.innerHTML;\r\n articleContentDiv.innerHTML = articleInnerContentDiv.outerHTML;\r\n\r\n const emailTopicAlertComponents = DomUtil.queryAll(articleContainer, \"[data-component='EmailTopicAlert']\");\r\n emailTopicAlertComponents.forEach(topicAlertCopmonent => topicAlertCopmonent.remove());\r\n\r\n const perspectiveLinks = DomUtil.queryAll(articleContainer, \".perspective > a\");\r\n perspectiveLinks.forEach(perspectAElement => perspectAElement.setAttribute(\"href\", continueReadingUrl));\r\n\r\n const mobileTrustBox = DomUtil.query(articleContainer, \".mobile-trust-box\");\r\n mobileTrustBox.insertAdjacentHTML('afterend', gradientDiv.outerHTML);\r\n\r\n articleContentDiv.insertAdjacentHTML('beforeend', continueReadingButton.outerHTML);\r\n\r\n const leftColumn = DomUtil.query(articleContainer, \".article__left-col\");\r\n leftColumn.setAttribute(\"style\", \"margin-top: 5px;\");\r\n leftColumn.insertAdjacentHTML('beforeend', gradientDiv.outerHTML);\r\n\r\n lastArticleContainer.insertAdjacentHTML('afterend', articleContainer.outerHTML);\r\n\r\n this.loadNextArticleComponents(nextArticleClass);\r\n const nextArticleElement = DomUtil.query(document.body, \".\" + nextArticleClass);\r\n moduletracking.AjaxTrackLinks(nextArticleElement, \"NextArticle\");\r\n this.handleLoadingDisplay();\r\n this._element.remove();\r\n }\r\n\r\n\r\n\r\n }).catch(error =>{\r\n this.handleLoadingDisplay();\r\n console.error(error);\r\n })\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n private async loadNextArticleComponents(nextArticleClass:string) :Promise {\r\n const nextArticleElement = DomUtil.query(document.body,(\".\" + nextArticleClass))\r\n await this._pageContext?.componentFactory.loadComponents(nextArticleElement)\r\n }\r\n\r\n private getRecommendedUrl(recommendedClass: string) : string | null {\r\n const firstRecommended = DomUtil.query(document.body, recommendedClass);\r\n if(!firstRecommended) {\r\n return null\r\n }\r\n\r\n const recommendedAElement = DomUtil.query(firstRecommended, 'a');\r\n if(!recommendedAElement) {\r\n return null\r\n }\r\n\r\n // recommended hasn't loaded yet\r\n if(recommendedAElement.href.indexOf(window.location.toString()) > -1) {\r\n return null\r\n }\r\n\r\n return recommendedAElement.href\r\n }\r\n\r\n private handleLoadingDisplay(): void {\r\n const loadingDiv = DomUtil.query(document.body, \"[data-next-article='spinner']\")\r\n if (loadingDiv) {\r\n const showLoading = !loadingDiv.classList.contains(\"active\");\r\n if (showLoading) {\r\n loadingDiv.classList.add(\"active\");\r\n } else {\r\n loadingDiv.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n}\r\nComponentFactory.registerComponent(\"LearningSiteNextArticle\", LearningSiteNextArticle);\r\n","import { Leaving } from \"../../behaviors\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { ILeavingParams } from \"../../models/Behavior/ILeavingParams\";\r\nimport { Cookie } from \"../../util/CookieUtil\";\r\n\r\nexport class LearningSiteQuizExitModal extends Component {\r\n private readonly _leaving: Leaving;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const leavingParams : ILeavingParams = {\r\n trackingCategory : \"Learning Site Quiz Outbound Links\",\r\n trackingUrl: window.location.pathname,\r\n externalLinksFilter: null\r\n }\r\n\r\n this._leaving = new Leaving(element, pageContext, leavingParams)\r\n }\r\n\r\n public async init(): Promise {\r\n const cookiename = (this._element.getAttribute(\"data-modal\"));\r\n if(cookiename === undefined) return;\r\n\r\n const cookieval = Cookie.getCookie(cookiename);\r\n if(cookieval !== null) {\r\n return;\r\n }\r\n\r\n const leavingBound = await this._leaving.bind();\r\n if(!leavingBound) {\r\n console.warn(\"LearningSiteQuizExitModal was not bound\");\r\n return;\r\n }\r\n\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"LearningSiteQuizExitModal\", LearningSiteQuizExitModal);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nexport class LMSTopicSelect extends Component {\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n const topicList = element.querySelector(\"[data-topiclist]\");\r\n const topicButton = element.querySelector(\"[data-topicbutton]\");\r\n const currentPath = window.location.pathname;\r\n\r\n var activetopic = topicList?.querySelector(\"a[data-ignore]\"); // set to unset position\r\n topicList?.querySelectorAll(\"a[href]:not([data-ignore])\").forEach(function(o,i){\r\n if(currentPath.startsWith((o?.getAttribute(\"href\")??\"\"))) activetopic = o;\r\n });\r\n\r\n if(activetopic && topicList){\r\n topicList.querySelectorAll(\"a\").forEach(function(o,i){\r\n o.classList.remove(\"active\");\r\n });\r\n activetopic.classList.add(\"active\");\r\n // making topic button optional. Set the\r\n // data-topicbutton attribute on the\r\n // element you want to display the current\r\n // topic.\r\n if(topicButton) {\r\n topicButton.innerHTML = activetopic.innerHTML;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"LMSTopicSelect\", LMSTopicSelect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\n\r\nexport class FilterSelect extends Component {\r\n\r\n public static readonly FilterSelectChangedEvent: string =\r\n \"FilterSelectChangedEvent\";\r\n\r\n constructor(element: HTMLElement) {\r\n super(element);\r\n\r\n element\r\n .querySelectorAll(\"[data-contains='menu items']\")\r\n .forEach(el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleItemClick(ev)));\r\n\r\n const params = (new URL(document.location.href)).searchParams;\r\n if(this.name !== null && params.has(this.name)){\r\n const name = this.name;\r\n element\r\n .querySelectorAll(\"[data-contains='menu items']>button\")\r\n .forEach(el => {\r\n const btn = el as HTMLButtonElement;\r\n if(btn.textContent?.toLowerCase() === decodeURI((params.get(name) || \"\")).toLowerCase()){\r\n btn.click();\r\n }\r\n });\r\n }\r\n }\r\n\r\n public getAllSelector(): HTMLElement | null {\r\n const query = \"button.dropdown-item\";\r\n const filters =\r\n Array.from(this._element.querySelectorAll(query))\r\n .filter(el => el.textContent === \"All\");\r\n\r\n return filters[0];\r\n }\r\n\r\n public changeSelectedItem(selectedItem: HTMLElement): void {\r\n Array\r\n .from(this._element.querySelectorAll(\".active\"))\r\n .filter(el => el !== selectedItem)\r\n .forEach(el => el.classList.remove(\"active\"));\r\n\r\n selectedItem.classList.add(\"active\");\r\n\r\n this._element\r\n .querySelectorAll(\"[data-populate-with='selected value']\")\r\n .forEach(el => el.textContent = selectedItem.textContent);\r\n\r\n const event = new CustomEvent(FilterSelect.FilterSelectChangedEvent,{bubbles: true, cancelable:false});\r\n this._element.dispatchEvent(event);\r\n }\r\n\r\n public updateOptions(options: string[]) : void {\r\n const dropdown = this._element.querySelector(\".dropdown-menu\");\r\n if (dropdown){\r\n dropdown.innerHTML = \"\";\r\n\r\n dropdown.innerHTML += '';\r\n options.forEach(o => {\r\n dropdown.innerHTML +=\r\n '\";\r\n });\r\n }\r\n }\r\n\r\n public get name(): string | null {\r\n return this._element.dataset.filterSelectName || null;\r\n }\r\n\r\n public get value(): string | null {\r\n const active = this._element.querySelector(\".active\");\r\n if (!active) {\r\n return null;\r\n }\r\n\r\n if (active.hasAttribute(\"data-value\")) {\r\n return active.dataset.value || \"\";\r\n }\r\n\r\n return (active.textContent || \"\").trim();\r\n }\r\n\r\n private handleItemClick(ev: Event): void {\r\n const target = ev.target as HTMLElement;\r\n\r\n this.changeSelectedItem(target);\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"FilterSelect\", FilterSelect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UserStatBox } from \"./UserStatBox\";\r\n\r\nexport class MyActivities extends Component {\r\n public static readonly MyActivitiesResizeEvent = \"MyActivitiesResizeEvent\";\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const context = this._pageContext;\r\n\r\n if (context) {\r\n const userStatBox: UserStatBox | null =\r\n context.componentFactory.getComponent(UserStatBox);\r\n if (userStatBox) {\r\n this.setCardBodySize(\r\n new CustomEvent(userStatBox.getCurrentHeight().toString()));\r\n }\r\n }\r\n document.addEventListener(\r\n UserStatBox.UserStatBoxLoadEvent,\r\n e => this.setCardBodySize(e as CustomEvent));\r\n }\r\n\r\n private setCardBodySize(\r\n event: CustomEvent\r\n ): void {\r\n const statBoxHeight = Number(event.detail);\r\n const myActivitiesHeight = this._element.clientHeight;\r\n const heightDiff = statBoxHeight - myActivitiesHeight;\r\n let newCbHeight = 0;\r\n this._element.querySelectorAll(\".card-body\")\r\n .forEach(cb => {\r\n if(newCbHeight === 0){\r\n newCbHeight = cb.clientHeight + heightDiff;\r\n }\r\n cb.setAttribute(\"style\", \"height: \" +\r\n newCbHeight.toString() + \"px\");\r\n }\r\n );\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyActivities\", MyActivities);\r\n","import { BindMyCme } from \"../../behaviors/BindMyCme\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { LineClamp } from \"../../behaviors/LineClamp\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class UserStatBox extends Component {\r\n public static readonly UserStatBoxLoadEvent = \"UserStatBoxLoadEvent\";\r\n public static readonly InProgressDeletedEvent\r\n = \"UserStatBoxInProgressDeletedEvent\";\r\n private readonly _myCmeBinding: BindMyCme;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._myCmeBinding = new BindMyCme(element, pageContext);\r\n\r\n window.addEventListener(UserStatBox.InProgressDeletedEvent,\r\n ev => this.handleInProgressDeletedEvent(ev));\r\n }\r\n public getCurrentHeight(): number {\r\n return this._element.clientHeight;\r\n }\r\n\r\n public async init(): Promise {\r\n await this._myCmeBinding.bind();\r\n this.updateCreditBreakdownWidths();\r\n LineClamp.applyTo(this._element);\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n UserStatBox.UserStatBoxLoadEvent,\r\n this.getCurrentHeight()));\r\n }\r\n\r\n private updateCreditBreakdownWidths(): void {\r\n this._element\r\n .querySelectorAll(\"[data-mycme='creditBreakdown']\")\r\n .forEach(target => {\r\n // Justification: UXPin specifies three columns maximum.\r\n // tslint:disable-next-line: no-magic-numbers\r\n const columns = Math.max(Math.min(target.childElementCount, 3), 1);\r\n\r\n // Justification: Calculating a percentage.\r\n // tslint:disable-next-line: no-magic-numbers\r\n const width = (100 / columns).toFixed(0) + \"%\";\r\n\r\n target\r\n .querySelectorAll(\"[data-after-bind='set width']\")\r\n .forEach(column => {\r\n const html = column as HTMLElement;\r\n html.style.width = width;\r\n });\r\n });\r\n }\r\n\r\n private handleInProgressDeletedEvent(ev: Event): void{\r\n const inProgressBox = this._element\r\n .querySelector(\"[data-mycme='inProgress']\");\r\n\r\n if (inProgressBox){\r\n let numInProgress = Number(inProgressBox.textContent);\r\n numInProgress -= 1;\r\n inProgressBox.textContent = String(numInProgress);\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"UserStatBox\", UserStatBox);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { UserStatBox } from \"./UserStatBox\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { ActiveUserActivity } from \"../../models/MyCme/IMyHealioCmeModel\";\r\nimport { BindMyCme } from \"../../behaviors\";\r\n\r\nexport class MyCMEInProgress extends Component {\r\n private readonly _myCmeBinding: BindMyCme;\r\n private inProgressActivities : ActiveUserActivity [] | null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this._myCmeBinding = new BindMyCme(element, pageContext);\r\n this.inProgressActivities = null;\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n const spinnerDiv = this._element.querySelector(\".loading-spinner\");\r\n spinnerDiv?.classList.add(\"active\");\r\n\r\n const myCmeBound = await this._myCmeBinding.bind(true);\r\n if(!myCmeBound) {\r\n return;\r\n }\r\n\r\n\r\n const myCmeJson = this._myCmeBinding.MyCmeJson\r\n this.inProgressActivities = myCmeJson?.ActiveUserActivities ?? null;\r\n\r\n if(!this.inProgressActivities || this.inProgressActivities.length == 0) {\r\n const inProgressDiv = this._element.querySelector(\"[data-in-progress-row]\");\r\n inProgressDiv?.classList.add(\"d-none\");\r\n const emptyMessageDiv = this._element.querySelector(\"[data-empty-message]\")\r\n emptyMessageDiv?.classList.remove(\"d-none\");\r\n return;\r\n }\r\n\r\n\r\n const inProgressActivityItems = this._myCmeBinding.renderCmeItemsFromTemplate(this.inProgressActivities);\r\n\r\n const activitiesListingDiv = this._element.querySelector('.my-activities--listing')\r\n if(!activitiesListingDiv?.firstElementChild?.innerHTML) {\r\n return\r\n }\r\n\r\n activitiesListingDiv.firstElementChild.innerHTML = inProgressActivityItems\r\n\r\n spinnerDiv?.classList.remove(\"active\");\r\n const editBtn = this._element.querySelector(\"[data-button=edit]\");\r\n editBtn?.classList.remove(\"d-none\");\r\n if (editBtn) {\r\n const slidingElement = this._element.querySelector(\r\n \"[data-slide-offset]\"\r\n );\r\n if (!slidingElement) {\r\n return;\r\n }\r\n\r\n const offset = Number(\r\n slidingElement.getAttribute(\"data-slide-offset\")\r\n ).valueOf();\r\n const duration = 500;\r\n\r\n editBtn.addEventListener(\"click\", () => {\r\n console.log(\"edit clicked\");\r\n editBtn.innerHTML = editBtn.innerHTML === \"Edit\" ? \"Done\" : \"Edit\";\r\n UiUtil.animateSlide(\r\n slidingElement,\r\n offset,\r\n duration\r\n );\r\n });\r\n\r\n slidingElement\r\n .querySelectorAll(\"[data-button=remove]\")\r\n .forEach(deleteBtn => {\r\n const activityId = deleteBtn.getAttribute(\"data-activity-id\") || \"\";\r\n if (activityId === \"\") {\r\n return false;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.userActivityService : null;\r\n if (!service) {\r\n return;\r\n }\r\n\r\n deleteBtn.addEventListener(\"click\", async () => {\r\n await service.removeUserActivity(\r\n profile.contactid || \"\",\r\n activityId\r\n );\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n UserStatBox.InProgressDeletedEvent,\r\n null));\r\n\r\n const listItem = deleteBtn.closest(\"[data-list-item]\");\r\n if (listItem) {\r\n listItem.remove();\r\n }\r\n });\r\n });\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyCMEInProgress\", MyCMEInProgress);\r\nComponentFactory.registerComponent(\"MyCMEInProgressMobile\", MyCMEInProgress);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { ISavedPageAddRequest } from \"../../models/SavedPage/ISavedPageAddRequest\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { BindMyCme } from \"../../behaviors/BindMyCme\";\r\nimport { SavedUserActivity, SavedUserResource } from \"../../models/MyCme/IMyHealioCmeModel\";\r\n\r\nexport class MyCMESaved extends Component {\r\n private readonly _myCmeBinding: BindMyCme;\r\n private savedActivities: SavedUserActivity[] | null = null;\r\n private savedResources: SavedUserResource[] | null = null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this._myCmeBinding = new BindMyCme(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n\r\n const spinnerDiv = this._element.querySelector(\".loading-spinner\");\r\n spinnerDiv?.classList.add(\"active\");\r\n\r\n const myCmeBound = await this._myCmeBinding.bind(true);\r\n if (!myCmeBound) {\r\n return;\r\n }\r\n\r\n const activitiesListingDiv = this._element.querySelector('.my-activities--listing')\r\n if (!activitiesListingDiv?.firstElementChild?.innerHTML) {\r\n return\r\n }\r\n\r\n const myCmeJson = this._myCmeBinding.MyCmeJson\r\n\r\n\r\n if (this._element.dataset.component?.startsWith('MyCMEResources')) {\r\n this.savedResources = myCmeJson?.SavedUserResources ?? null;\r\n if (!this.savedResources || this.savedResources.length == 0) {\r\n return;\r\n }\r\n const savedResourceItems = this._myCmeBinding.renderResourceItemsFromTemplate(this.savedResources);\r\n activitiesListingDiv.firstElementChild.innerHTML = savedResourceItems\r\n const cmeResourcesDiv = document.querySelector('[data-section=\"MyHealioCmeResources\"]')\r\n cmeResourcesDiv?.classList.remove(\"d-none\");\r\n\r\n } else {\r\n this.savedActivities = myCmeJson?.SavedUserActivities ?? null;\r\n\r\n if (!this.savedActivities || this.savedActivities.length == 0) {\r\n const mySavedDiv = this._element.querySelector(\"[data-saved-activities-row]\");\r\n mySavedDiv?.classList.add(\"d-none\");\r\n const emptyMessageDiv = this._element.querySelector(\"[data-empty-message]\")\r\n emptyMessageDiv?.classList.remove(\"d-none\");\r\n return;\r\n }\r\n const savedActivityItems = this._myCmeBinding.renderCmeItemsFromTemplate(this.savedActivities);\r\n activitiesListingDiv.firstElementChild.innerHTML = savedActivityItems\r\n\r\n }\r\n spinnerDiv?.classList.remove(\"active\");\r\n const editBtn = this._element.querySelector(\"[data-button=edit]\");\r\n editBtn?.classList.remove(\"d-none\");\r\n if (!editBtn) {\r\n return;\r\n }\r\n\r\n const slidingElement = this._element.querySelector(\r\n \"[data-slide-offset]\"\r\n );\r\n if (!slidingElement) {\r\n return;\r\n }\r\n\r\n const slidingElementMobile = this._element.querySelector(\r\n \"[data-slide-offset-mobile]\"\r\n );\r\n\r\n const duration = 500;\r\n\r\n const offset = Number(\r\n slidingElement.getAttribute(\"data-slide-offset\")\r\n ).valueOf();\r\n\r\n editBtn.addEventListener(\"click\", () => {\r\n console.log(\"edit clicked\");\r\n editBtn.innerHTML = editBtn.innerHTML === \"Edit\" ? \"Done\" : \"Edit\";\r\n UiUtil.animateSlide(\r\n slidingElement,\r\n offset,\r\n duration\r\n );\r\n\r\n if (slidingElementMobile) {\r\n UiUtil.animateSlide(\r\n slidingElementMobile,\r\n offset,\r\n duration\r\n );\r\n }\r\n });\r\n\r\n slidingElement\r\n .querySelectorAll(\"[data-button=remove]\")\r\n .forEach(async deleteBtn => {\r\n const activityId = deleteBtn.getAttribute(\"data-activity-id\") || \"\";\r\n if (activityId === \"\") {\r\n return false;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n if (!service) {\r\n return;\r\n }\r\n\r\n deleteBtn.addEventListener(\"click\", async () => {\r\n const savedActivity = await this.savedPage(profile, activityId);\r\n if (savedActivity !== null && service) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n await service.remove(savedActivity);\r\n const listItem = deleteBtn.closest(\"[data-list-item]\");\r\n if (listItem) {\r\n listItem.remove();\r\n }\r\n }\r\n });\r\n });\r\n\r\n if (!slidingElementMobile) {\r\n return;\r\n }\r\n\r\n slidingElementMobile\r\n .querySelectorAll(\"[data-button=remove]\")\r\n .forEach(async deleteBtn => {\r\n const activityId = deleteBtn.getAttribute(\"data-activity-id\") || \"\";\r\n if (activityId === \"\") {\r\n return false;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n if (!service) {\r\n return;\r\n }\r\n\r\n deleteBtn.addEventListener(\"click\", async () => {\r\n const savedActivity = await this.savedPage(profile, activityId);\r\n if (savedActivity !== null && service) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n await service.remove(savedActivity);\r\n const listItem = deleteBtn.closest(\"[data-list-item]\");\r\n if (listItem) {\r\n listItem.remove();\r\n\r\n let nextItem = slidingElement.querySelector(\".my-resources-list-item\");\r\n if (nextItem) {\r\n slidingElementMobile.append(nextItem);\r\n }\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n private async savedPage(\r\n profile: IUserProfile,\r\n activityId: string\r\n ): Promise {\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const userId = profile.contactid || null;\r\n if (!userId || !activityId) {\r\n return null;\r\n }\r\n\r\n const activitySiteName = (this._element.dataset.siteName || \"cme-healio\").toLowerCase();\r\n\r\n let contentType = this._element.dataset.contentType || \"cme\";\r\n return {\r\n contenttype: [contentType],\r\n documentid: activityId,\r\n expires: \"\",\r\n site: activitySiteName,\r\n title: \"\",\r\n url: \"\",\r\n userid: userId\r\n };\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyCMESaved\", MyCMESaved);\r\nComponentFactory.registerComponent(\"MyCMESavedMobile\", MyCMESaved);\r\nComponentFactory.registerComponent(\"MyCMEResources\", MyCMESaved);\r\nComponentFactory.registerComponent(\"MyCMEResourcesMobile\", MyCMESaved);\r\n","import { BindMyCme } from \"../../behaviors/BindMyCme\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { LineClamp } from \"../../behaviors/LineClamp\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class MyCmeRibbon extends Component {\r\n private readonly _myCmeBinding: BindMyCme;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n this._myCmeBinding = new BindMyCme(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n const myCmeBound = await this._myCmeBinding.bind();\r\n if(!myCmeBound) {\r\n return;\r\n }\r\n\r\n this._element.querySelectorAll('[hidden]').forEach(function(o, i) {\r\n o.removeAttribute('hidden')\r\n });\r\n this._element.hidden = false;\r\n\r\n LineClamp.applyTo(this._element);\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyCmeRibbon\", MyCmeRibbon);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { FilterSelect } from \"./FilterSelect\";\r\nimport { MyCompletedDisplay } from \"./MyCompletedDisplay\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { TranscriptModal } from \"./TranscriptModal\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\ninterface IFilters {\r\n year: string | null;\r\n creditType: string | null;\r\n startDate: string | null;\r\n endDate: string | null;\r\n}\r\n\r\nexport class MyCompleted extends Component {\r\n\r\n public static LoadMoreButton: HTMLButtonElement | null = null;\r\n private _alreadyClicked: boolean = true;\r\n private _generateButton: HTMLButtonElement | null = null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n MyCompleted.LoadMoreButton = element.querySelector(\"[data-action='load more']\");\r\n\r\n element\r\n .querySelectorAll(\"[data-action='generate transcript']\")\r\n .forEach(\r\n\r\n el => {\r\n this._generateButton = el;\r\n el.addEventListener(\r\n \"click\",\r\n async ev => {\r\n UiUtil.toggleButtonState(el as HTMLButtonElement)\r\n await this.handleGenerateTranscript(ev)\r\n UiUtil.toggleButtonState(el as HTMLButtonElement)\r\n })\r\n });\r\n\r\n\r\n element.addEventListener(\r\n FilterSelect.FilterSelectChangedEvent,\r\n ev => this.handleFilterChange(ev));\r\n\r\n window.addEventListener(\"FilterSelectChangedEvent\", ev => this.handleFilterChange(ev));\r\n\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const transcriptStart = urlParams.get(\"tstart\");\r\n const transcriptEnd = urlParams.get(\"tend\");\r\n if (transcriptEnd !== undefined\r\n && transcriptEnd !== null\r\n && transcriptStart !== undefined\r\n && transcriptStart !== null) {\r\n this._alreadyClicked = false;\r\n }\r\n }\r\n\r\n public getCurrentHeight(): number {\r\n return this._element.clientHeight;\r\n }\r\n\r\n public async init(): Promise {\r\n return this.updateTable(true);\r\n }\r\n\r\n private get filters(): IFilters | null {\r\n const context = this._pageContext;\r\n if (!context) {\r\n return null;\r\n }\r\n\r\n const components = context.componentFactory\r\n .getAllComponents(FilterSelect, this._element);\r\n\r\n const filter: IFilters = { year: null, creditType: null, startDate: null, endDate: null };\r\n\r\n for (const component of components) {\r\n switch (component.name) {\r\n case \"year\":\r\n filter.year = component.value;\r\n break;\r\n\r\n case \"credit type\":\r\n filter.creditType = component.value;\r\n break;\r\n\r\n default:\r\n throw new Error(`Unrecognized filter ${component.name}`);\r\n }\r\n }\r\n\r\n let startDatePicker = this._element.querySelector('#start-date-picker');\r\n if (startDatePicker) {\r\n filter.startDate = startDatePicker.dataset.selectedDate || \"\";\r\n }\r\n\r\n let endDatePicker = this._element.querySelector('#end-date-picker');\r\n if (endDatePicker) {\r\n filter.endDate = endDatePicker.dataset.selectedDate || \"\";\r\n }\r\n\r\n return filter;\r\n }\r\n\r\n private async handleFilterChange(ev: Event): Promise {\r\n ev.stopPropagation();\r\n\r\n if (!this._pageContext) {\r\n return Promise.reject();\r\n }\r\n\r\n if (ev.target) {\r\n const el = ev.target as HTMLElement;\r\n const srcFilter = el.dataset.filterSelectName;\r\n\r\n const creditFilter = Array.from(\r\n this._pageContext\r\n .componentFactory\r\n .getAllComponents(FilterSelect, this._element)\r\n ).reduce((a, b) => b && b.name === \"credit type\" ? b : a, null);\r\n\r\n if (srcFilter === \"year\" && this._pageContext) {\r\n\r\n if (creditFilter) {\r\n const allSelector = creditFilter.getAllSelector();\r\n if (allSelector) {\r\n creditFilter.changeSelectedItem(allSelector);\r\n }\r\n }\r\n\r\n // supress this event, the other filter will raise one\r\n return Promise.resolve();\r\n }\r\n\r\n if (creditFilter && creditFilter.value === \"\") {\r\n return this.updateTable(true);\r\n }\r\n\r\n return this.updateTable(false);\r\n }\r\n }\r\n\r\n private async handleGenerateTranscript(ev: Event): Promise {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n return this.generateTranscript();\r\n }\r\n\r\n private async updateTable(updateFilters: boolean): Promise {\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context.\");\r\n }\r\n\r\n const service = context.userActivityService;\r\n if (!service) {\r\n throw new Error(\"Service not available.\");\r\n }\r\n\r\n this._element.querySelectorAll(\"[data-download-link]\").forEach(el => {\r\n const anchor = el as HTMLAnchorElement;\r\n const url = `${anchor.getAttribute(\"data-download-link\")}?credit type=${this.filters?.creditType}&year=${this.filters?.year}`;\r\n\r\n anchor.href = url;\r\n });\r\n\r\n const myCme = await service.filterUserActivities(this.filters?.creditType, this.filters?.year, this.filters?.startDate, this.filters?.endDate);\r\n\r\n const displays = context.componentFactory\r\n .getAllComponents(MyCompletedDisplay, this._element);\r\n\r\n const filters = context.componentFactory\r\n .getAllComponents(FilterSelect, this._element);\r\n\r\n if (updateFilters) {\r\n const creditType: string[] = [];\r\n myCme.forEach(c => {\r\n if (c.creditType && !creditType.includes(c.creditType)) {\r\n creditType.push(c.creditType);\r\n }\r\n });\r\n\r\n Array.from(filters)\r\n .forEach(f => {\r\n if (f.name === \"credit type\") {\r\n f.updateOptions(creditType);\r\n }\r\n });\r\n }\r\n\r\n await Promise.all(Array.from(displays).map(disp => disp.update(myCme)));\r\n\r\n if (!this._alreadyClicked && this._generateButton != null) {\r\n this._generateButton.click();\r\n }\r\n }\r\n\r\n private async generateTranscript(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.transcriptService : null;\r\n const factory = context ? context.componentFactory : null;\r\n\r\n if (!service) {\r\n throw new Error(\"Service not available.\");\r\n }\r\n\r\n if (!factory) {\r\n throw new Error(\"No component factory\");\r\n }\r\n\r\n const modal = factory.getComponent(TranscriptModal);\r\n if (!modal) {\r\n throw new Error(\"Transcript modal not available\");\r\n }\r\n\r\n const el = this._element.querySelector(\"[data-use-for-transcript='true']\");\r\n if (!el) {\r\n throw new Error(\"Could not locate transcript table\");\r\n }\r\n\r\n const html = el.outerHTML;\r\n const transcript = await service.createTranscript(html);\r\n\r\n if (!transcript) {\r\n return;\r\n }\r\n\r\n return modal.show(transcript);\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyCompleted\", MyCompleted);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { ICreateTranscript } from \"../../models/Transcript/ICreateTranscript\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class TranscriptModal extends Component {\r\n private _showPromise: Promise | null = null;\r\n private _transcript: ICreateTranscript | null = null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n if (!element.dataset.datasourceId) {\r\n throw new Error(\"Transcript modal requires datasource id\");\r\n }\r\n\r\n element\r\n .querySelectorAll(\"[data-action='print transcript']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"click\",\r\n ev => this.handlePrintTranscript(ev)));\r\n\r\n element\r\n .querySelectorAll(\"form[data-action='email transcript']\")\r\n .forEach(\r\n el => el.addEventListener(\r\n \"submit\",\r\n ev => this.handleEmailTranscript(ev)));\r\n\r\n this.changeState(\"form\");\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (profile && profile.email) {\r\n this.emailAddress = profile.email;\r\n }\r\n }\r\n\r\n public async show(transcript: ICreateTranscript): Promise {\r\n const existing = this._showPromise;\r\n if (existing) {\r\n await existing;\r\n\r\n return this.show(transcript);\r\n }\r\n\r\n const promise = this._showPromise = new Promise(resolve => {\r\n this.changeState(\"form\");\r\n\r\n this._element\r\n .querySelectorAll(\".was-validated\")\r\n .forEach(el => el.classList.remove(\"was-validated\"));\r\n\r\n $(this._element)\r\n .modal(\"show\")\r\n // Justification: Two conflicting lint rules.\r\n // tslint:disable-next-line:no-unnecessary-callback-wrapper\r\n .one(\"hidden.bs.modal\", () => resolve());\r\n\r\n this._transcript = transcript;\r\n }).then(() => { this._showPromise = null; });\r\n\r\n return promise;\r\n }\r\n\r\n private changeState(state: \"form\" | \"success\"): void {\r\n this._element\r\n .querySelectorAll(\"[data-visible-in-state]\")\r\n .forEach(el => {\r\n const visibleFor = el.dataset.visibleInState || \"\";\r\n el.hidden = visibleFor !== state;\r\n });\r\n }\r\n\r\n private get datasourceId(): string | null {\r\n return this._element.dataset.datasourceId || null;\r\n }\r\n\r\n private get emailAddress(): string {\r\n const el = this._element\r\n .querySelector(\"input[data-bind='email']\");\r\n\r\n return el ? (el.value || \"\").trim() : \"\";\r\n }\r\n\r\n private set emailAddress(value: string) {\r\n const email = (value || \"\").trim();\r\n this._element\r\n .querySelectorAll(\"input[data-bind='email']\")\r\n .forEach(el => el.value = email);\r\n }\r\n\r\n private handlePrintTranscript(ev: Event): void {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n const transcript = this._transcript;\r\n const url = transcript ? transcript.pdfUrl : null;\r\n if (!url) {\r\n throw new Error(\"Could not locate PDF url.\");\r\n }\r\n\r\n window.open(url);\r\n }\r\n\r\n private async handleEmailTranscript(ev: Event): Promise {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n\r\n const form = ev.target as HTMLFormElement;\r\n if (!form.checkValidity()) {\r\n form.classList.add(\"was-validated\");\r\n\r\n return;\r\n }\r\n\r\n const datasourceId = this.datasourceId;\r\n if (!datasourceId) {\r\n throw new Error(\"No datasource for email\");\r\n }\r\n\r\n const transcript = this._transcript;\r\n if (!transcript) {\r\n throw new Error(\"No transcript found\");\r\n }\r\n\r\n const context = this._pageContext;\r\n const service = context ? context.transcriptService : null;\r\n if (!service) {\r\n throw new Error(\"No transcript service\");\r\n }\r\n\r\n await service.emailTranscript(datasourceId, transcript, this.emailAddress);\r\n this.changeState(\"success\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"TranscriptModal\", TranscriptModal);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { StringUtil } from \"../../util/StringUtil\";\r\nimport { Cookie } from \"../../util/CookieUtil\";\r\nimport { UserStatBox } from \"./UserStatBox\";\r\n\r\nimport { IUserActivityFilterResponse } from \"../../models/UserActivity/IUserActivityFilterResponse\";\r\nimport { MyCompleted } from \"./MyCompleted\";\r\nimport { ModalEventHandler } from \"bootstrap\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { BindMyCme } from \"../../behaviors\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\n\r\nexport class MyCompletedDisplay extends Component {\r\n private readonly _activity: string | null;\r\n private readonly _externalActivity: string | null;\r\n private readonly _activityTitle: string | null;\r\n private readonly _lmsname: string | null;\r\n private readonly _container: HTMLElement;\r\n private readonly _creditTypeWithNotice: string | null;\r\n private readonly _creditTypeWithoutNotice: string | null;\r\n private readonly _disabledActivityTitle: string | null;\r\n private readonly _certRemoveModal: HTMLElement;\r\n private readonly _loadMoreButton: HTMLButtonElement | null = MyCompleted.LoadMoreButton;\r\n\r\n public readonly Container: HTMLElement | null = null;\r\n\r\n public static readonly ActivityListChangedEvent: string =\r\n \"activityListChangedEvent\";\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const query = DomUtil.query.bind(null, element);\r\n\r\n const template = (name: string) =>\r\n (query(`[data-template='${name}']`, false)?.innerHTML?.trim() || null);\r\n\r\n this._activity = template(\"activity\");\r\n this._externalActivity = template(\"externalactivity\");\r\n this._activityTitle = template(\"activity title\");\r\n this._lmsname = template(\"lms flag\");\r\n this._container = query(\"[data-contains='activities']\");\r\n this._creditTypeWithNotice = template(\"credit type with notice\");\r\n this._creditTypeWithoutNotice = template(\"credit type without notice\");\r\n this._disabledActivityTitle = template(\"disabled activity title\");\r\n this._certRemoveModal = document.querySelector(\"#CMERemoveCertModal\") as HTMLElement;\r\n\r\n this.Container = this._container;\r\n\r\n this.attachEvents();\r\n\r\n if (this._pageContext) {\r\n const userStatBox: UserStatBox | null = this\r\n ._pageContext.componentFactory\r\n .getComponent(\r\n UserStatBox\r\n );\r\n if (userStatBox) {\r\n this.setBodySize(\r\n new CustomEvent(userStatBox.getCurrentHeight().toString())\r\n );\r\n }\r\n }\r\n\r\n if (this._loadMoreButton !== null) {\r\n this._loadMoreButton.addEventListener(\"click\", ev => this.mobileExpandCompletedList(ev));\r\n }\r\n\r\n document.addEventListener(UserStatBox.UserStatBoxLoadEvent, e =>\r\n this.setBodySize(e as CustomEvent)\r\n );\r\n\r\n $(this._certRemoveModal).on(\"hide.bs.modal\", ev => this.resetRemoveModal(ev));\r\n }\r\n\r\n public async update(\r\n data: ReadonlyArray\r\n ): Promise {\r\n const context = this._pageContext;\r\n const factory = context ? context.componentFactory : null;\r\n if (factory) {\r\n factory.dereferenceComponents(this._container);\r\n }\r\n\r\n this._element\r\n .querySelectorAll(\"[data-display-when]\")\r\n .forEach(el => (el.hidden = true));\r\n\r\n // Using JQuery to clear this element because we expect child nodes to\r\n // have bootstrap events on them, which JQuery will clear out.\r\n $(this._container).empty();\r\n\r\n // Make sure the view is collapsed if needed. Containers that support\r\n // collapse / expand must have data-view-more, data-view-more-collapsed-style\r\n // and data-view-more-expanded-style attributes. Button handler lives\r\n // in MyCompleted component.\r\n let maxvis = -1;\r\n if (this._container.dataset.viewMore) {\r\n const collapsedStyle = (this._container.dataset.viewMoreCollapsedStyle || \"\");\r\n\r\n if(this._container.hasAttribute(\"data-view-more-start-length\")) {\r\n maxvis = parseInt(this._container.dataset.viewMoreStartLength || \"-1\");\r\n }\r\n\r\n if (maxvis > 0) {\r\n this._container.setAttribute(\"style\", collapsedStyle);\r\n this._container.dataset.viewMore = \"collapsed\";\r\n }\r\n }\r\n\r\n let dataidx = 1;\r\n data.forEach(datum => {\r\n const values = {\r\n activityId: (datum.activityId || \"\"),\r\n activityTitle: this.resolveActivityTitle(datum),\r\n lmsname: this.resolveLMSName(datum),\r\n source: (this.resolveLMSName(datum)===\"HEALIO\"?\"HealioCME\":this.resolveLMSName(datum)),\r\n certificateUrl: StringUtil.htmlEncode(datum.certificateUrl || \"#\"),\r\n creditType: this.resolveCreditType(datum),\r\n credits: this.resolveCredits(datum),\r\n dateEarned: this.resolveDateEarned(datum),\r\n provider: this.resolveProviders(datum),\r\n isExternal: (datum.isExternal ? \"external\" : \"healiocme\"),\r\n hidden: ((maxvis > 0 && dataidx > maxvis) ? \"hidden\" : \"\")\r\n };\r\n\r\n const externalActivityTemplate = (this._externalActivity !== null ? this._externalActivity : this._activity);\r\n const html = StringUtil.supplant((datum.isExternal ? externalActivityTemplate : this._activity), values) || \"\";\r\n\r\n // Note: If moving away from JQuery for this, test the case in which\r\n // html is something like \"...\". JQuery handles this\r\n // well, but many other techniques (fragments, innerHTML, DOMParser, etc)\r\n // do not.\r\n $(html).appendTo(this._container);\r\n dataidx += 1;\r\n });\r\n\r\n const event = new CustomEvent(MyCompletedDisplay.ActivityListChangedEvent, { bubbles: true, cancelable: false });\r\n this._element.dispatchEvent(event);\r\n\r\n const display = data.length ? \"not empty\" : \"empty\";\r\n this._element\r\n .querySelectorAll(`[data-display-when='${display}']`)\r\n .forEach(el => (el.hidden = false));\r\n\r\n if (factory) {\r\n await factory.loadComponents(this._container);\r\n }\r\n\r\n if(data.length > maxvis){\r\n this._loadMoreButton?.classList.remove(\"hidden\");\r\n } else {\r\n this._loadMoreButton?.classList.add(\"hidden\");\r\n }\r\n\r\n this.attachEvents();\r\n }\r\n\r\n private attachEvents(): void {\r\n $(\"[data-toggle='tooltip']\", this._container).tooltip();\r\n $(\"[data-toggle='popover']\", this._container).popover();\r\n $(\".popover-dismiss\", this._container).popover({ trigger: \"hover\" });\r\n $(\".disabled-link\", this._container).on(\"click\", ev => ev.preventDefault());\r\n $(\"[data-btn-remove]\", this._container).on(\"click\", ev => this.handleLineRemoveClick(ev));\r\n }\r\n\r\n public mobileExpandCompletedList(ev: Event): void {\r\n // Containers that support collapse / expand\r\n // must have data-view-more, data-view-more-collapsed-style\r\n // and data-view-more-expanded-style attributes.\r\n const expandable = this._element.querySelector(\"[data-view-more]\") as HTMLElement;\r\n if (!expandable) return;\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context.\");\r\n }\r\n const button = ev.target as HTMLButtonElement;\r\n const expandedStyle = (expandable.dataset.viewMoreExpandedStyle || \"\");\r\n const state = expandable.dataset.viewMore;\r\n /*\r\n const collapsedStyle = (expandable.dataset.viewMoreCollapsedStyle || \"\");\r\n */ // <-- future use?\r\n\r\n if (state === \"collapsed\") {\r\n expandable.setAttribute(\"style\", expandedStyle);\r\n this._container.querySelectorAll(\".cert-listing\").forEach(cl=>{\r\n cl.classList.remove(\"hidden\");\r\n });\r\n expandable.dataset.viewMore = \"expanded\";\r\n } /* else {\r\n expandable.setAttribute(\"style\", collapsedStyle);\r\n expandable.dataset.viewMore = \"collapsed\";\r\n } */ // <-- future use?\r\n\r\n button.classList.add(\"hidden\");\r\n }\r\n\r\n private handleLineRemoveClick(ev: JQuery.ClickEvent): void {\r\n const button = ev.target as HTMLElement;\r\n const panel = button.closest(\"[data-activity-id]\") as HTMLElement;\r\n $(this._certRemoveModal).find(\".btn-remove\").attr(\"data-activity-id\", (panel?.dataset?.activityId || \"\"));\r\n $(this._certRemoveModal).find(\".btn-remove\").attr(\"data-credits\", (panel?.dataset?.credits || \"\"));\r\n $(this._certRemoveModal).find(\".btn-remove\").on(\"click\", ev => this.handleModalRemoveClick(ev, panel));\r\n $(this._certRemoveModal).modal(\"show\");\r\n }\r\n\r\n private async handleModalRemoveClick(ev: JQuery.ClickEvent, panel: HTMLElement | null): Promise {\r\n const button = ev.target as HTMLElement;\r\n const errorcol = panel?.querySelector(\".error\") as HTMLElement;\r\n if (errorcol) { errorcol.innerHTML = \"\"; }\r\n\r\n const activityId = (button?.dataset?.activityId || null);\r\n if (activityId === null) {\r\n return;\r\n }\r\n\r\n const context = this._pageContext;\r\n if (!context) {\r\n return;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile?.contactid) {\r\n return;\r\n }\r\n\r\n let credits = button?.dataset?.credits || 0;\r\n if(credits){\r\n credits = Number(credits) * -1.0\r\n }\r\n\r\n // call remove service\r\n console.log(\"call activity remove service then remove the row on success\");\r\n\r\n const userActivityService = context.userActivityService;\r\n if (!userActivityService) {\r\n return;\r\n }\r\n\r\n userActivityService.removeUserActivity(profile.contactid, activityId).then(result => {\r\n if (result) {\r\n this.removeRow(activityId);\r\n\r\n //reset goal modals since tally changed\r\n Cookie.getCookies().forEach(o => {\r\n if(o.indexOf(\"goal_\") === 0) {\r\n console.log(`Removing Cookie ${o}`);\r\n Cookie.deleteCookie(o);\r\n }\r\n });\r\n\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n BindMyCme.UpdateCreditsEvent,\r\n credits));\r\n } else {\r\n if (errorcol) { errorcol.innerHTML = `An error occurred while processing your request, please try again later.`; }\r\n }\r\n });\r\n }\r\n\r\n private resetRemoveModal(ev: ModalEventHandler): void {\r\n $(this._certRemoveModal).find(\".btn-remove\").off(\"click\", ev => this.handleModalRemoveClick(ev, null));\r\n $(this._certRemoveModal).find(\".btn-remove\").removeAttr(\"data-activity-id\");\r\n $(this._certRemoveModal).find(\".btn-remove\").removeAttr(\"data-credits\");\r\n }\r\n\r\n private removeRow(activityId: string): void {\r\n this._element.querySelectorAll(`[data-activity-id=\"${activityId}\"]`).forEach(el => {\r\n el.remove();\r\n });\r\n }\r\n\r\n private resolveProviders(activity: IUserActivityFilterResponse): string {\r\n const value = activity.providers || [];\r\n const text = value\r\n .filter(Boolean)\r\n .map(v => (v.Title ? v.Title : \"\").trim())\r\n .filter(Boolean)\r\n .join(\", \");\r\n\r\n return StringUtil.htmlEncode(text) || \"\";\r\n }\r\n\r\n private resolveDateEarned(activity: IUserActivityFilterResponse): string {\r\n const value = activity.dateEarned;\r\n if (!value) {\r\n return \"\";\r\n }\r\n\r\n const formatted = value.toLocaleString(\"en-US\", {\r\n day: \"numeric\",\r\n month: \"numeric\",\r\n year: \"2-digit\"\r\n });\r\n\r\n return StringUtil.htmlEncode(formatted) || \"\";\r\n }\r\n\r\n private resolveCreditType(activity: IUserActivityFilterResponse): string {\r\n const values = {\r\n creditNotice: StringUtil.htmlEncode(activity.creditNotice || \"\"),\r\n creditType: StringUtil.htmlEncode(activity.creditType || \"\")\r\n };\r\n\r\n const template = activity.creditNotice\r\n ? this._creditTypeWithNotice\r\n : this._creditTypeWithoutNotice;\r\n\r\n return StringUtil.supplant(template, values) || \"\";\r\n }\r\n\r\n private resolveCredits(activity: IUserActivityFilterResponse): string {\r\n if (!activity) {\r\n return \"\";\r\n }\r\n\r\n let claimedCredits: number | undefined = activity.credits;\r\n\r\n\r\n if (!claimedCredits || isNaN(claimedCredits)) {\r\n if (!activity.data) {\r\n return \"\";\r\n }\r\n\r\n function reducer(\r\n accumulator: string,\r\n currentValue: { name?: string; value?: string }\r\n ): string {\r\n if (\r\n currentValue &&\r\n currentValue.name &&\r\n currentValue.value &&\r\n currentValue.name === \"certificatecreditamount\"\r\n ) {\r\n return accumulator + currentValue.value;\r\n }\r\n\r\n return accumulator;\r\n }\r\n\r\n claimedCredits = parseFloat(\r\n activity.data.reduce(reducer, \"\")\r\n );\r\n }\r\n\r\n if (!claimedCredits || isNaN(claimedCredits)) {\r\n return \"\";\r\n }\r\n\r\n // Justification: Credits are formatted to two decimal places.\r\n // tslint:disable-next-line: no-magic-numbers\r\n return StringUtil.htmlEncode(claimedCredits.toFixed(2)) || \"\";\r\n }\r\n\r\n private resolveActivityTitle(activity: IUserActivityFilterResponse): string {\r\n let actUrl = activity.activityUrl;\r\n\r\n const values = {\r\n activityTitle: activity.activityTitle || \"\",\r\n activityUrl: StringUtil.htmlEncode(actUrl || \"#\")\r\n };\r\n\r\n const template = activity.isExpired\r\n ? this._disabledActivityTitle\r\n : this._activityTitle;\r\n\r\n return StringUtil.supplant(template, values) || \"\";\r\n }\r\n\r\n private resolveLMSName(activity: IUserActivityFilterResponse): string {\r\n const values = {\r\n lmsname: (((activity.lmsname === null || (activity?.lmsname?.length ?? 0) < 1) && !(activity.isExternal || false)) ? \"HEALIO\" : activity.lmsname) || \"\"\r\n };\r\n\r\n const template = this._lmsname;\r\n\r\n return StringUtil.supplant(template, values) || \"\";\r\n }\r\n\r\n private setBodySize(event: CustomEvent): void {\r\n const statBoxHeight = Number(event.detail);\r\n\r\n const context = this._pageContext;\r\n if (!context) {\r\n return;\r\n }\r\n\r\n const myCompleted = context.componentFactory.getComponent(\r\n MyCompleted\r\n );\r\n\r\n if (!myCompleted) {\r\n return;\r\n }\r\n const myCompletedHeight =\r\n myCompleted.getCurrentHeight() - this._element.clientHeight;\r\n\r\n const header = this._element.querySelector(\"table > thead\");\r\n if (!header) {\r\n return;\r\n }\r\n const headerHeight = header.clientHeight;\r\n\r\n const newHeight = statBoxHeight - myCompletedHeight - headerHeight;\r\n\r\n const table = this._element.querySelector(\".my-completed--tbody\");\r\n if (table) {\r\n table.setAttribute(\"style\", `max-height:${newHeight}px;`);\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MyCompletedDisplay\", MyCompletedDisplay);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { ISavedPageAddRequest } from \"../../models/SavedPage/ISavedPageAddRequest\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class MySavedPages extends Component {\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n // console.log(`MySavedPages Initializing: ${this._element.className}`);\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n console.error(\"Profile is not loaded\");\r\n\r\n return;\r\n }\r\n\r\n const siteName = this._element.getAttribute(\"data-site\") || \"\";\r\n if(siteName.length < 1) {\r\n console.error(\"data-site attribute is required.\");\r\n\r\n return;\r\n }\r\n\r\n const editBtn = this._element.querySelector(\"[data-button=edit]\");\r\n if (!editBtn) {\r\n console.error(\"Edit Button not found\");\r\n\r\n return;\r\n }\r\n\r\n const slidingElement = this._element.querySelector(\"[data-slide-offset]\");\r\n if (!slidingElement) {\r\n console.error(\"Sliding Element not found\");\r\n\r\n return;\r\n }\r\n\r\n const offset = Number(\r\n slidingElement.getAttribute(\"data-slide-offset\")\r\n ).valueOf();\r\n const duration = 500;\r\n\r\n editBtn.addEventListener(\"click\", () => {\r\n editBtn.innerHTML = editBtn.innerHTML === \"Edit\" ? \"Done\" : \"Edit\";\r\n UiUtil.animateSlide(slidingElement, offset, duration, () => {\r\n $(\".card--layout\").masonry(\"layout\");\r\n });\r\n });\r\n\r\n $(\".card--layout\").on(\"layoutComplete\", (evt, items) => {\r\n slidingElement\r\n .querySelectorAll(\"[data-button=remove]\")\r\n .forEach(async deleteBtn => {\r\n const databound = deleteBtn.getAttribute(\"data-bound\") || \"\";\r\n if(databound.length > 0) {\r\n return false;\r\n }\r\n\r\n const itemId = deleteBtn.getAttribute(\"data-item-id\") || \"\";\r\n console.log(`Binding 'Remove Button' for ${itemId}`);\r\n if (itemId === \"\") {\r\n console.error(\"data-item-id missing or empty\");\r\n\r\n return false;\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n if (!service) {\r\n return false;\r\n }\r\n\r\n deleteBtn.setAttribute(\"data-bound\", \"1\");\r\n\r\n deleteBtn.addEventListener(\"click\", async () => {\r\n console.log(`Removing${itemId}`);\r\n const savedItem = await this.savedPage(profile, itemId, siteName);\r\n if (savedItem !== null && service) {\r\n // tslint:disable-next-line: no-unsafe-any\r\n await service.remove(savedItem);\r\n console.log(`${savedItem.documentid} Removed`);\r\n const listItem = deleteBtn.closest(\"[data-list-item]\");\r\n if (listItem) {\r\n $(\".card--layout\")\r\n .masonry(\"remove\", listItem)\r\n .masonry(\"layout\");\r\n // listItem.remove();\r\n }\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n private async savedPage(\r\n profile: IUserProfile,\r\n activityId: string,\r\n siteName: string\r\n ): Promise {\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const userId = profile.contactid || null;\r\n if (!userId || !activityId) {\r\n return null;\r\n }\r\n\r\n return {\r\n contenttype: [\"news\"],\r\n documentid: activityId,\r\n expires: \"\",\r\n site: siteName,\r\n title: \"\",\r\n url: \"\",\r\n userid: userId,\r\n };\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MySavedPages\", MySavedPages);\r\nComponentFactory.registerComponent(\"MySavedPagesMobile\", MySavedPages);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ArticleContent extends Component {\r\n // A new instance of this class is created for every element\r\n // that has the attribute data-component=\"LightBox\".\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n // This method is called after the constructor.\r\n public async init(): Promise {\r\n let lightboxImages = this._element.querySelectorAll('.image-enlarge')\r\n\r\n for(let i=0;icrypto).randomUUID().replace(/-/g, \"\").toString();\r\n // element is an HTMLElement that has the attribute data-component=\"LightBox\"\r\n\r\n lightboxImages[i]?.querySelector('.enlarge-link')?.setAttribute('data-fancybox-trigger', componentId)\r\n lightboxImages[i]?.querySelector('a:nth-child(2)')?.setAttribute('data-fancybox', componentId)\r\n }\r\n }\r\n}\r\n// A component must be registered before it can be applied.\r\n// The component must also be exported in one of the\r\n// healio-custom-scripts ts files for it to be included in compilation.\r\n// healio-custom-scripts-newsarea.ts was chosen for this one\r\n// because it seems the most likely script to target all of\r\n// the pages where this component might be in use.\r\nComponentFactory.registerComponent(\"ArticleContent\", ArticleContent);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EmailSignUpSuccessModal } from \"../healioGlobal/EmailSignUpSuccessModal\";\r\nimport {\r\n ITopicAlertLoadRequest\r\n} from \"../../models/TopicAlert/ITopicAlertLoadRequest\";\r\nimport {\r\n ITopicAlertRegisterRequest\r\n} from \"../../models/TopicAlert/ITopicAlertRegisterRequest\";\r\nimport {\r\n ITopicAlertSaveRequest\r\n} from \"../../models/TopicAlert/ITopicAlertSaveRequest\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { LocalStorageUtil } from \"../../util/LocalStorageUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { StringUtil } from \"../../util/StringUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class EmailTopicAlert extends Component {\r\n public static readonly TopicAlertAddedEvent: string =\r\n \"TopicAlertAddedEvent\";\r\n private readonly addButton: HTMLElement;\r\n private readonly alreadyAddedButton: HTMLElement;\r\n private readonly dataStore = \"TopicAlerts\";\r\n private readonly dataStoreKey = \"ListIds\";\r\n private readonly errorDiv: HTMLElement;\r\n private readonly invalidClass = \"is-invalid\";\r\n private readonly subscribeButton: HTMLButtonElement;\r\n private readonly successDiv: HTMLElement;\r\n private _listTitle: string | null = null;\r\n private _listId: string | null = null;\r\n private _isSubscribed = false;\r\n private topicAlertStorage: LocalStorageUtil | null = null;\r\n private manageEmailLink: string | undefined;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.addButton = DomUtil.query(this._element, '[data-topic-button=\"not-subscribed\"]');\r\n this.alreadyAddedButton = DomUtil.query(this._element, '[data-topic-button=\"subscribed\"]');\r\n this.subscribeButton = DomUtil.query(this._element, '[data-action=\"subscribe\"]');\r\n this.successDiv = DomUtil.query(this._element, '[data-topic-modal=\"success\"]');\r\n this.errorDiv = DomUtil.query(this._element, '[data-topic-modal=\"failed\"]');\r\n this.manageEmailLink = this._element.dataset.manageEmailLink;\r\n\r\n window.addEventListener(EmailTopicAlert.TopicAlertAddedEvent,\r\n () => this.handleTopicAlertAddedEvent());\r\n\r\n this.subscribeButton\r\n .addEventListener(\"click\", ev => this.handleSubscribe(ev));\r\n\r\n const closeAlertButtons = DomUtil.queryAll(this._element, '[data-button=\"close-alert-box\"]')\r\n closeAlertButtons.forEach(closeAlertButton => {\r\n if (closeAlertButton != undefined && closeAlertButton != null) {\r\n closeAlertButton.addEventListener(\"click\", ev => this.collapseEmailTopicAlertBox(ev));\r\n }\r\n })\r\n\r\n const manageEmailAlertLinks = document.querySelectorAll(\"a.manage-email-alert\");\r\n manageEmailAlertLinks.forEach(alertLink => {\r\n if (alertLink) {\r\n alertLink.addEventListener(\"click\", ev => this.redirectToManageEmail(ev))\r\n }\r\n })\r\n\r\n UiUtil.collapseDivOffTargetClick(this._element);\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.topicAlertService : null;\r\n await WyanokeUtil.loadUserProfile(true, true);\r\n const settingItem = DomUtil.query(this._element, \"[data-setting-item]\", false);\r\n\r\n if (!window.UserProfile || !settingItem || !service\r\n || !window.Context || !window.Context.docinfo\r\n || !window.Context.docinfo.primaryspecialtyid\r\n || !window.Context.docinfo.primarysubspecialtyid) {\r\n\r\n return;\r\n }\r\n\r\n const currentElement = this;\r\n $(\"div[data-modal='emailSignUpSuccess']\").on('shown.bs.modal', function () {\r\n const manageEmailAlertLinks = $(this)[0].querySelectorAll(\"a.manage-email-alert\");\r\n manageEmailAlertLinks.forEach(alertLink => {\r\n if (alertLink) {\r\n alertLink.addEventListener(\"click\", ev => currentElement.redirectToManageEmail(ev))\r\n }\r\n })\r\n });\r\n\r\n this.topicAlertStorage = new LocalStorageUtil(this.dataStore);\r\n\r\n const topicAlertLoadRequest: ITopicAlertLoadRequest = {\r\n contactid: window.UserProfile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n newswirefilters: [\r\n {\r\n Key: \"Specialty\",\r\n Value: window.Context.docinfo.primarysubspecialtyid\r\n }\r\n ],\r\n sectionfilters: [\r\n {\r\n Key: \"Show on Alert Page\",\r\n Value: \"1\"\r\n },\r\n {\r\n Key: \"Specialty\",\r\n Value: window.Context.docinfo.primaryspecialtyid\r\n }\r\n ],\r\n startitemid: settingItem.dataset.settingItem || \"\"\r\n };\r\n\r\n const topicResponse =\r\n await service?.getTopicAlertWithStatus(topicAlertLoadRequest);\r\n\r\n if (!topicResponse) {\r\n return;\r\n }\r\n this._listTitle = topicResponse.Title;\r\n const topicTitles = DomUtil.queryAll(this._element, '[data-content=\"topic-title\"]');\r\n topicTitles.forEach(span => span.innerText = this._listTitle || \"00000000-0000-0000-0000-000000000000\");\r\n this._listId = topicResponse.ListId;\r\n this._isSubscribed =\r\n topicResponse.Subscribed === \"1\";\r\n\r\n if (!this._isSubscribed && window.UserProfile.isLoggedIn !== \"True\") {\r\n // check local storage for the listid for anonymous\r\n const addedTopicIds =\r\n this.topicAlertStorage?.getItem(this.dataStore,\r\n [this.dataStoreKey]) as string;\r\n\r\n if (addedTopicIds && addedTopicIds.indexOf(this._listId) !== -1) {\r\n this._isSubscribed = true;\r\n }\r\n }\r\n // delete stored listids if loggedin\r\n if (window.UserProfile.isLoggedIn === \"True\") {\r\n this.topicAlertStorage?.deleteItem(this.dataStore,\r\n [this.dataStoreKey]);\r\n }\r\n\r\n if (this._isSubscribed) {\r\n this.showSubscribedButton();\r\n\r\n return;\r\n }\r\n this.showNotSubcribedButton(window.UserProfile.isLoggedIn === \"True\");\r\n }\r\n\r\n private collapseEmailTopicAlertBox(event: MouseEvent): void {\r\n const closeButton = event.target as Element;\r\n const innerAlertBox = closeButton.closest(\".email-alert-inner\");\r\n if (innerAlertBox && innerAlertBox.classList.contains(\"show\")) {\r\n innerAlertBox.classList.remove(\"show\");\r\n }\r\n }\r\n\r\n private async handleSubscribe(ev: Event): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.topicAlertService : null;\r\n if (!window.UserProfile || !service || !this._listId) {\r\n console.warn(\"Unable to subscribe to Topic Alert. ListId, Service, or UserProfile not found\");\r\n\r\n return;\r\n }\r\n\r\n // Known Users\r\n if (window.UserProfile.isLoggedIn === \"True\"\r\n && window.UserProfile.contactid) {\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n const topicAlertSaveRequest: ITopicAlertSaveRequest = {\r\n contactid: window.UserProfile.contactid,\r\n listid: this._listId,\r\n status: \"2\",\r\n };\r\n const savedTopic = await service.save(topicAlertSaveRequest);\r\n if (savedTopic && savedTopic === \"True\") {\r\n this.handleSuccess();\r\n\r\n return;\r\n }\r\n this.handleError();\r\n\r\n return;\r\n\r\n }\r\n // Non users that need to provide email\r\n const emailInput: HTMLInputElement =\r\n DomUtil.query(this._element, \"input[type='email']\", false);\r\n if (!emailInput) {\r\n console.warn(\"MISSING EMAIL INPUT FOR TOPIC ALERT SIGN UP\");\r\n\r\n return;\r\n }\r\n\r\n emailInput.classList.remove(this.invalidClass);\r\n if (!StringUtil.isValidEmail(emailInput.value)) {\r\n emailInput.classList.add(this.invalidClass);\r\n\r\n return;\r\n }\r\n\r\n const crmHidden = DomUtil.query(this._element, \"[data-crm-source]\", false);\r\n if (!crmHidden || !crmHidden.dataset.crmSource) {\r\n console.warn(\"MISSING CRM SOURCE FOR TOPIC ALERT REGISTRATION\");\r\n\r\n return;\r\n }\r\n\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n const topicAlertRegisterRequest: ITopicAlertRegisterRequest = {\r\n email: emailInput.value,\r\n listid: this._listId,\r\n source: crmHidden.dataset.crmSource,\r\n };\r\n\r\n const registerResponse =\r\n await service.register(topicAlertRegisterRequest);\r\n if (registerResponse && registerResponse !== undefined &&\r\n (registerResponse?.toLowerCase().indexOf(\"true\") > -1 ||\r\n registerResponse?.toLowerCase().indexOf(\"existing\") > -1)) {\r\n this.handleSuccess();\r\n await this.storeTopicListsForNonUsers(this._listId);\r\n\r\n return;\r\n }\r\n\r\n this.handleError();\r\n\r\n }\r\n\r\n private handleError(): void {\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n EmailSignUpSuccessModal.SignedUpForEmails,\r\n this.errorDiv.innerHTML.replace(\"d-none\", \"\")));\r\n }\r\n\r\n private handleSuccess(): void {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n EmailTopicAlert.TopicAlertAddedEvent,\r\n null\r\n ));\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n EmailSignUpSuccessModal.SignedUpForEmails,\r\n this.successDiv.innerHTML.replace(\"d-none\", \"\")));\r\n }\r\n\r\n private handleTopicAlertAddedEvent(): void {\r\n this.addButton.remove();\r\n this.showSubscribedButton();\r\n }\r\n\r\n private redirectToManageEmail(ev: MouseEvent): void {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (!this.manageEmailLink) {\r\n console.warn(\"Manage email link not passed to EmailTopicAlert Component\")\r\n return;\r\n }\r\n var currentSubDomain = window.location.hostname.substr(0, window.location.hostname.indexOf(\".\"))\r\n var healioSubDomain = currentSubDomain === \"cme\" ? \"www\" : currentSubDomain.replace(\"cme\", \"\");\r\n window.location.href = window.location.origin.replace(currentSubDomain, healioSubDomain) + this.manageEmailLink;\r\n\r\n }\r\n\r\n private showSubscribedButton(): void {\r\n this.alreadyAddedButton.classList.remove(\"d-none\");\r\n this._element.classList.remove(\"d-none\");\r\n }\r\n\r\n private showNotSubcribedButton(isUser: boolean): void {\r\n const knownLanguage = DomUtil.query(this._element, '[data-sign-up-type=\"known\"]', false);\r\n const unknownLanguage = DomUtil.query(this._element, '[data-sign-up-type=\"unknown\"]', false);\r\n\r\n if (!knownLanguage || !unknownLanguage) {\r\n return\r\n }\r\n\r\n if (isUser) {\r\n unknownLanguage.remove();\r\n knownLanguage.classList.remove(\"d-none\");\r\n } else {\r\n knownLanguage.remove();\r\n unknownLanguage.classList.remove(\"d-none\");\r\n }\r\n this.addButton.classList.remove(\"d-none\");\r\n this._element.classList.remove(\"d-none\");\r\n }\r\n\r\n private async storeTopicListsForNonUsers(listid: string): Promise {\r\n let storedIds = this.topicAlertStorage?.getItem(this.dataStore,\r\n [this.dataStoreKey]) as string;\r\n if (storedIds && typeof (storedIds) === \"string\") {\r\n storedIds += \"|\" + listid;\r\n } else {\r\n storedIds = listid;\r\n }\r\n this.topicAlertStorage?.insertItem(this.dataStore,\r\n [this.dataStoreKey], storedIds);\r\n }\r\n}\r\nComponentFactory.registerComponent(\"EmailTopicAlert\", EmailTopicAlert);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\n\r\nexport class NextArticle extends Component {\r\n private _nextArticleRequested: Boolean = false;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n if (window.Visitor !== undefined && window.Visitor !== \"\") {\r\n this.botCheck();\r\n } else {\r\n $(window).on(\"globalsloaded\", () => this.botCheck());\r\n }\r\n }\r\n\r\n public botCheck(): void {\r\n if (window.Visitor.isbot || window.Visitor.type === \"DC\") {\r\n return;\r\n }\r\n window.addEventListener(\"scroll\", () => this.handleScroll());\r\n }\r\n\r\n public handleScroll(): void {\r\n const articleFooter = (>document.getElementsByClassName(\"article__content--footer\"));\r\n if (UiUtil.elementInViewport(articleFooter[0])) {\r\n if (!this._nextArticleRequested) {\r\n let recommendedUrl = this.getRecommendedUrl(\".recommended-primary\");\r\n\r\n if (!recommendedUrl) {\r\n\r\n return;\r\n }\r\n\r\n const currentDocId = window.Context && window.Context.documentid ? window.Context.documentid.replace(\"{\", \"\").replace(\"}\", \"\").toLowerCase() : null;\r\n\r\n // the next recommended is the current article; try the 2nd recommended\r\n if (recommendedUrl.split(\"/find/\")[1] === currentDocId) {\r\n recommendedUrl = this.getRecommendedUrl(\".recommended-one\");\r\n }\r\n\r\n if (!recommendedUrl) {\r\n return;\r\n }\r\n\r\n let nextArticleId = recommendedUrl.split('/find/')[1];\r\n let nextArticleUrl = recommendedUrl + \"?nextarticle=1\";\r\n\r\n if (this._nextArticleRequested) {\r\n\r\n return;\r\n }\r\n\r\n this._nextArticleRequested = true;\r\n this.handleLoadingDisplay();\r\n\r\n var myHeaders = new Headers();\r\n myHeaders.append('pragma', 'no-cache');\r\n myHeaders.append('cache-control', 'no-cache');\r\n\r\n var requestInit = {\r\n method: 'GET',\r\n headers: myHeaders,\r\n };\r\n\r\n fetch(nextArticleUrl, requestInit).then(response => {\r\n if (response.ok) {\r\n recommendedUrl = response.url && response.url.length > 0 ?\r\n response.url.replace(\"?nextarticle=1\", \"\") :\r\n nextArticleUrl.replace(\"?nextarticle=1\", \"\")\r\n return response.text();\r\n }\r\n throw new Error('Invalid response while getting next article at: ' + nextArticleUrl);\r\n }).then(html => {\r\n let articleContainers = DomUtil.queryAll(document.body, '.article__container');\r\n const lastArticleContainer = articleContainers[articleContainers.length - 1];\r\n const articleInnerContentDiv = DomUtil.query(this._element, \"[data-next-article='article_content_wrap']\");\r\n const gradientDiv = DomUtil.query(this._element, \"[data-next-article='gradient_overlay']\");\r\n const continueReadingButton = DomUtil.query(this._element, \"[data-next-article='continue_reading_button']\");\r\n const continueReadingUrl = recommendedUrl ?? \"#\";\r\n continueReadingButton.href = continueReadingUrl;\r\n\r\n\r\n let tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = html;\r\n\r\n const articleContainer = DomUtil.query(tempDiv, \".article__container\");\r\n const nextArticleClass = \"article_\" + nextArticleId;\r\n articleContainer.classList.add(nextArticleClass);\r\n\r\n const articleContentDiv = DomUtil.query(tempDiv, \".article__content\");\r\n articleInnerContentDiv.innerHTML = articleContentDiv.innerHTML;\r\n articleContentDiv.innerHTML = articleInnerContentDiv.outerHTML;\r\n\r\n const emailTopicAlertComponents = DomUtil.queryAll(articleContainer, \"[data-component='EmailTopicAlert']\");\r\n emailTopicAlertComponents.forEach(topicAlertCopmonent => topicAlertCopmonent.remove());\r\n\r\n const perspectiveLinks = DomUtil.queryAll(articleContainer, \".perspective > a\");\r\n perspectiveLinks.forEach(perspectAElement => perspectAElement.setAttribute(\"href\", continueReadingUrl));\r\n\r\n const mobileTrustBox = DomUtil.query(articleContainer, \".mobile-trust-box\");\r\n mobileTrustBox.insertAdjacentHTML('afterend', gradientDiv.outerHTML);\r\n\r\n articleContentDiv.insertAdjacentHTML('beforeend', continueReadingButton.outerHTML);\r\n\r\n const leftColumn = DomUtil.query(articleContainer, \".article__left-col\");\r\n leftColumn.setAttribute(\"style\", \"margin-top: 5px;\");\r\n leftColumn.insertAdjacentHTML('beforeend', gradientDiv.outerHTML);\r\n\r\n lastArticleContainer.insertAdjacentHTML('afterend', articleContainer.outerHTML);\r\n\r\n const articleTop = DomUtil.query(tempDiv, \"[data-article-container='top']\", false)\r\n if (articleTop && articleTop.innerHTML) {\r\n articleContainers = DomUtil.queryAll(document.body, '.article__container');\r\n const newLastArticleContainer = articleContainers[articleContainers.length - 1];\r\n let articleTopDiv = document.createElement(\"div\");\r\n articleTopDiv.classList.add(\"article_top\");\r\n articleTopDiv.classList.add(\"article_top_\" + nextArticleId);\r\n articleTopDiv.innerHTML = articleTop.innerHTML;\r\n newLastArticleContainer.insertAdjacentHTML('beforebegin', articleTopDiv.outerHTML);\r\n }\r\n\r\n this.loadNextArticleComponents(nextArticleClass);\r\n const nextArticleElement = DomUtil.query(document.body, \".\" + nextArticleClass);\r\n moduletracking.AjaxTrackLinks(nextArticleElement, \"NextArticle\");\r\n this.handleLoadingDisplay();\r\n this._element.remove();\r\n }).catch(error => {\r\n this.handleLoadingDisplay();\r\n console.error(error);\r\n })\r\n }\r\n\r\n\r\n }\r\n }\r\n\r\n private async loadNextArticleComponents(nextArticleClass: string): Promise {\r\n const nextArticleElement = DomUtil.query(document.body, (\".\" + nextArticleClass))\r\n await this._pageContext?.componentFactory.loadComponents(nextArticleElement)\r\n }\r\n\r\n private getRecommendedUrl(recommendedClass: string): string | null {\r\n const firstRecommended = DomUtil.query(document.body, recommendedClass);\r\n if (!firstRecommended) {\r\n return null\r\n }\r\n\r\n const recommendedAElement = DomUtil.query(firstRecommended, 'a');\r\n if (!recommendedAElement) {\r\n return null\r\n }\r\n\r\n // recommended hasn't loaded yet\r\n if (recommendedAElement.href.indexOf(window.location.toString()) > -1) {\r\n return null\r\n }\r\n\r\n return recommendedAElement.href\r\n }\r\n\r\n private handleLoadingDisplay(): void {\r\n const loadingDiv = DomUtil.query(document.body, \"[data-next-article='spinner']\")\r\n if (loadingDiv) {\r\n const showLoading = !loadingDiv.classList.contains(\"active\");\r\n if (showLoading) {\r\n loadingDiv.classList.add(\"active\");\r\n } else {\r\n loadingDiv.classList.remove(\"active\");\r\n }\r\n }\r\n }\r\n\r\n}\r\nComponentFactory.registerComponent(\"NextArticle\", NextArticle);\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ReadNext extends Component {\r\n\r\n private static healioUrl = \"https://www.healio.com\";\r\n private cleanArticleId: string | undefined;\r\n private primarySpecialtyName: string | undefined;\r\n private primarySubSpecialtyId: string | undefined;\r\n private hwsHost: string | undefined;\r\n private visitedPagesArray: string[] | null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.cleanArticleId = this._element.dataset.cleanArticleId;\r\n this.primarySpecialtyName = this._element.dataset.primarySpecName;\r\n this.primarySubSpecialtyId = this._element.dataset.primarySubSpecId;\r\n this.hwsHost = this._element.dataset.hwsHost;\r\n this.visitedPagesArray = null;\r\n }\r\n\r\n public async init(): Promise {\r\n const readNextElement = this;\r\n $(() => {\r\n if (window.Visitor !== undefined && window.Visitor !== \"\") {\r\n readNextElement.loadReadNext();\r\n } else {\r\n $(window).one(\"globalsloaded\", () => readNextElement.loadReadNext());\r\n }\r\n });\r\n\r\n }\r\n\r\n private filterAlreadyRead(this: ReadNext, value: any): any {\r\n if (this.visitedPagesArray && this.visitedPagesArray.includes(\"{\" + value.url.replace(\"/find/\", \"\").toUpperCase() + \"}\")) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n private filterResponse(input: any): any {\r\n return input.relatedItems.filter((value: any) => this.filterAlreadyRead(value));\r\n }\r\n\r\n private loadReadNext(): void {\r\n const readNextElement = this;\r\n if (typeof (window.Context) === 'undefined') {\r\n console.warn(\"window.Context is not defined. Unable to load Read Next\")\r\n return\r\n }\r\n if (window.Visitor.isbot || window.Visitor.type === \"DC\") {\r\n return;\r\n }\r\n var visitedPages = sessionStorage.getItem(\"visitedPages\");\r\n readNextElement.visitedPagesArray = visitedPages ? JSON.parse(visitedPages) : null;\r\n if (readNextElement.visitedPagesArray != null && window.Context?.documentid) {\r\n if (readNextElement.visitedPagesArray.length < 8) {\r\n if (!readNextElement.visitedPagesArray.includes(window.Context.documentid)) {\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n } else if (window.Context?.documentid) {\r\n readNextElement.visitedPagesArray.shift();\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n } else if (window.Context?.documentid) {\r\n readNextElement.visitedPagesArray = [];\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n\r\n if ($('.article__content--footer').prev().prev().is('h4')) {\r\n $('.article__content--footer').prev().prev().before($('#recoMobile'));\r\n } else {\r\n $('.article__content--footer').prev().before($('#recoMobile'));\r\n }\r\n if (typeof (window.contentBottom) !== \"undefined\") {\r\n var leftColumn = $(\".article__left-col\")\r\n var recoOneOffsetTop = $(\"#recoOne\").offset()?.top\r\n var recoTwoOffsetTop = $(\"#recoTwo\").offset()?.top\r\n\r\n var leftColumnTop = leftColumn.offset()?.top;\r\n\r\n var recoOneTop = leftColumnTop && recoOneOffsetTop ? recoOneOffsetTop - leftColumnTop : 0;\r\n var recoTwoTop = leftColumnTop && recoTwoOffsetTop ? recoTwoOffsetTop - leftColumnTop : 0;\r\n var tmode = \"article\";\r\n var primaryspecname = readNextElement.primarySpecialtyName;\r\n var primarysubspec = readNextElement.primarySubSpecialtyId;\r\n if (!primaryspecname || primaryspecname === \"\") primaryspecname = \"na\";\r\n if (!primarysubspec || primarysubspec === \"\") primarysubspec = \"na\";\r\n primaryspecname = primaryspecname.replace(/'/g, '');\r\n primaryspecname = primaryspecname.replace(/ &/g, '');\r\n $.ajax({\r\n type: \"GET\",\r\n url: readNextElement.hwsHost + \"/~/hws/relatedchips/\" + readNextElement.cleanArticleId + \"/\" + tmode + \"/\" + primaryspecname + \"/\" + primarysubspec,\r\n success: function (msg: any): void {\r\n //callback function to use filter with\r\n var filteredResponse = readNextElement.filterResponse(msg.response);\r\n var readNextPrimary = filteredResponse[0];\r\n var readNextOne = filteredResponse[1];\r\n var readNextTwo = filteredResponse[2];\r\n\r\n if (readNextPrimary && readNextPrimary.url !== '' && readNextPrimary.url !== undefined) {\r\n $(\"#recoPrimary a\").attr(\"href\", readNextPrimary.url.toString().replace(ReadNext.healioUrl, \"\"));\r\n }\r\n\r\n if (typeof (window.contentBottom) === 'function' && recoOneTop <= window.contentBottom() && readNextOne && readNextOne.url !== '' && readNextOne.url !== undefined) {\r\n $(\"#recoOne a\").html(readNextOne.title);\r\n $(\"#recoOne a\").attr(\"href\", readNextOne.url.toString().replace(ReadNext.healioUrl, \"\"));\r\n $(\"#recoOne div\").removeClass(\"d-none\");\r\n }\r\n if (typeof (window.contentBottom) === 'function' && recoTwoTop <= window.contentBottom() && readNextTwo && readNextTwo.url !== '' && readNextTwo.url !== undefined) {\r\n $(\"#recoTwo a\").html(readNextTwo.title);\r\n $(\"#recoTwo a\").attr(\"href\", readNextTwo.url.toString().replace(ReadNext.healioUrl, \"\"));\r\n $(\"#recoTwo div\").removeClass(\"d-none\");\r\n }\r\n if (!readNextOne && !readNextTwo) console.log(\"Read more results empty.\");\r\n if (readNextOne) {\r\n $(\"#hrefMobileOne\").html(readNextOne.title);\r\n $(\"#hrefMobileOne\").attr(\"href\", readNextOne.url.toString().replace(ReadNext.healioUrl, \"\"));\r\n }\r\n if (readNextTwo) {\r\n $(\"#hrefMobileTwo\").html(readNextTwo.title);\r\n $(\"#hrefMobileTwo\").attr(\"href\", readNextTwo.url.toString().replace(ReadNext.healioUrl, \"\"));\r\n }\r\n },\r\n error: function () {\r\n console.error(\"Error loading ReadNext\");\r\n },\r\n timeout: 5000\r\n });\r\n }\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"ReadNext\", ReadNext);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class ReadNextContentDiscoverability extends Component {\r\n\r\n private static healioUrl = \"https://www.healio.com\";\r\n private cleanArticleId: string | undefined;\r\n private primarySpecialtyName: string | undefined;\r\n private primarySubSpecialtyId: string | undefined;\r\n private hwsHost: string | undefined;\r\n private visitedPagesArray: string[] | null;\r\n private readLoaded: boolean | undefined;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.cleanArticleId = this._element.dataset.cleanArticleId;\r\n this.primarySpecialtyName = this._element.dataset.primarySpecName;\r\n this.primarySubSpecialtyId = this._element.dataset.primarySubSpecId;\r\n this.hwsHost = this._element.dataset.hwsHost;\r\n this.visitedPagesArray = null;\r\n this.readLoaded = false;\r\n }\r\n\r\n public async init(): Promise {\r\n const readNextElement = this;\r\n $(async () => {\r\n if (window.Visitor !== undefined && window.Visitor !== \"\") {\r\n readNextElement.loadReadNext();\r\n } else {\r\n $(window).on(\"globalsloaded\", () => readNextElement.loadReadNext());\r\n }\r\n });\r\n }\r\n\r\n private filterAlreadyRead(this: ReadNextContentDiscoverability, value: any): any {\r\n if (this.visitedPagesArray && this.visitedPagesArray.includes(\"{\" + value.url.replace(\"/find/\", \"\").toUpperCase() + \"}\")) {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n private filterResponse(input: any): any {\r\n return input.relatedItems.filter((value: any) => this.filterAlreadyRead(value));\r\n }\r\n private loadReadNext(): void {\r\n if (this.readLoaded) {\r\n return;\r\n }\r\n this.readLoaded = true;\r\n const readNextElement = this;\r\n if (typeof (window.Context) === 'undefined') {\r\n console.warn(\"window.Context is not defined. Unable to load Read Next\");\r\n return;\r\n }\r\n if (window.Visitor.isbot || window.Visitor.type === \"DC\") {\r\n return;\r\n }\r\n var visitedPages = sessionStorage.getItem(\"visitedPages\");\r\n readNextElement.visitedPagesArray = visitedPages ? JSON.parse(visitedPages) : null;\r\n if (readNextElement.visitedPagesArray != null && window.Context?.documentid) {\r\n if (readNextElement.visitedPagesArray.length < 8) {\r\n if (!readNextElement.visitedPagesArray.includes(window.Context.documentid)) {\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n } else if (window.Context?.documentid) {\r\n readNextElement.visitedPagesArray.shift();\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n } else if (window.Context?.documentid) {\r\n readNextElement.visitedPagesArray = [];\r\n readNextElement.visitedPagesArray.push(window.Context.documentid);\r\n sessionStorage.setItem(\"visitedPages\", JSON.stringify(readNextElement.visitedPagesArray));\r\n }\r\n\r\n if (typeof (window.contentBottom) === \"undefined\") {\r\n return;\r\n }\r\n\r\n\r\n\r\n var tmode = \"article\";\r\n var primaryspecname = readNextElement.primarySpecialtyName;\r\n var primarysubspec = readNextElement.primarySubSpecialtyId;\r\n if (!primaryspecname || primaryspecname === \"\") primaryspecname = \"na\";\r\n if (!primarysubspec || primarysubspec === \"\") primarysubspec = \"na\";\r\n primaryspecname = primaryspecname.replace(/'/g, '');\r\n primaryspecname = primaryspecname.replace(/ &/g, '');\r\n $.ajax({\r\n type: \"GET\",\r\n url: readNextElement.hwsHost + \"/~/hws/relatedchips/\" + readNextElement.cleanArticleId + \"/\" + tmode + \"/\" + primaryspecname + \"/\" + primarysubspec,\r\n success: function (msg: any): void {\r\n\r\n var articleContentCount = 4;\r\n var articleContentElem = document.getElementsByClassName(\"article__container\");\r\n\r\n var articleContentHeight = articleContentElem[0].clientHeight;\r\n if (articleContentHeight != undefined && articleContentHeight <= 800) {\r\n articleContentCount = 3;\r\n }\r\n\r\n //callback function to use filter with\r\n var filteredResponse = readNextElement.filterResponse(msg.response);\r\n // console.log(filteredResponse);\r\n\r\n //get most relevant article and populate hidden element for second article\r\n var readNextPrimary = filteredResponse[0];\r\n if (readNextPrimary && readNextPrimary.url !== '' && readNextPrimary.url !== undefined) {\r\n $(\"#recoPrimary a\").attr(\"href\", readNextPrimary.url.toString().replace(ReadNextContentDiscoverability.healioUrl, \"\"));\r\n } else {\r\n return;\r\n }\r\n\r\n let i: number = 1;\r\n do {\r\n let nextArticle = filteredResponse[i];\r\n let cardElem = document.getElementById('rmlrCard' + i);\r\n if (cardElem === null) {\r\n continue;\r\n }\r\n console.log(nextArticle);\r\n\r\n if (nextArticle && nextArticle.url !== '' && nextArticle.url !== undefined) {\r\n let postedDate = new Date(nextArticle.posteddate);\r\n let formattedPostedDate = postedDate.toLocaleString(\"en-US\", {\r\n day: \"numeric\",\r\n month: \"long\",\r\n year: \"numeric\"\r\n });\r\n\r\n cardElem.querySelectorAll(\".date\")[0].innerHTML = formattedPostedDate;\r\n\r\n if (nextArticle.engagementtype !== null && nextArticle.engagementtype === \"Listen Now\") {\r\n cardElem.querySelectorAll(\".time\")[0].innerHTML = nextArticle.engagementtime + \" min listen\";\r\n } else if (nextArticle.video !== null && nextArticle.engagementtime !== null) {\r\n cardElem.querySelectorAll(\".time\")[0].innerHTML = nextArticle.engagementtime + \" min watch\";\r\n } else if (nextArticle.engagementtime !== null) {\r\n cardElem.querySelectorAll(\".time\")[0].innerHTML = nextArticle.engagementtime + \" min read\";\r\n }\r\n cardElem.querySelectorAll(\".card-title a\")[0].setAttribute(\"href\", nextArticle.url);\r\n cardElem.querySelectorAll(\".card-title a\")[0].innerHTML = nextArticle.title;\r\n\r\n cardElem.classList.remove(\"d-none\");\r\n\r\n\r\n } else {\r\n cardElem.remove();\r\n }\r\n\r\n i++;\r\n } while (i <= articleContentCount)\r\n //ReloadSaveIcon(\"readMoreLeftRail\",this.pageContext);\r\n $(\"#readMoreLeftRail\").removeClass(\"d-none\");\r\n\r\n\r\n },\r\n error: function () {\r\n console.error(\"Error loading ReadNext\");\r\n },\r\n timeout: 5000\r\n });\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"ReadNextContentDiscoverability\", ReadNextContentDiscoverability);\r\n\r\n// async function ReloadSaveIcon(elemId: string, _pageContext: PageContext) {\r\n// let targetElem = document.getElementById(elemId);\r\n// if (targetElem === null || targetElem === undefined)\r\n// return;\r\n// await _pageContext?.componentFactory.loadComponents(targetElem)\r\n// }\r\n\r\n","import { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class RelatedContent extends Component {\r\n\r\n private static tMode = \"collection\";\r\n private static healioUrl = \"https://www.healio.com\";\r\n private hwsHost: string | undefined;\r\n private cleanArticleId: string | undefined;\r\n private primarySpecialtyName: string | undefined;\r\n private primarySubSpecialtyId: string | undefined;\r\n public relOnePopulated = false;\r\n public relTwoPopulated = false;\r\n public relThreePopulated = false;\r\n public relLoaded = false;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.hwsHost = this._element.dataset.hwsHost;\r\n this.cleanArticleId = this._element.dataset.cleanItemId;\r\n this.primarySpecialtyName = this._element.dataset.primarySpecialtyName;\r\n this.primarySubSpecialtyId = this._element.dataset.primarySubSpecId;\r\n\r\n if (!this.primarySpecialtyName || this.primarySpecialtyName === \"\") { this.primarySpecialtyName = \"na\"; }\r\n\r\n if (!this.primarySubSpecialtyId || this.primarySubSpecialtyId === \"\") { this.primarySubSpecialtyId = \"na\"; }\r\n }\r\n\r\n public async init(): Promise {\r\n if (window.Visitor !== undefined && window.Visitor !== \"\") {\r\n this.botCheck();\r\n } else {\r\n $(window).on(\"globalsloaded\", () => this.botCheck());\r\n }\r\n\r\n }\r\n\r\n public async botCheck(): Promise {\r\n if (window.Visitor.isbot || window.Visitor.type === \"DC\") {\r\n return;\r\n }\r\n await this.getRelatedContent();\r\n }\r\n\r\n public async getRelatedContent(): Promise {\r\n //check if already populated\r\n if (this.relLoaded) {\r\n return;\r\n }\r\n this.relLoaded = true;\r\n const relatedContent = this;\r\n $(window).on('load', function () {\r\n\r\n $.ajax({\r\n type: \"GET\",\r\n url: relatedContent.hwsHost + \"/~/hws/relatedchips/\" + relatedContent.cleanArticleId + \"/\" + RelatedContent.tMode + \"/\" + relatedContent.primarySpecialtyName + \"/\" + relatedContent.primarySubSpecialtyId,\r\n success: function (msg) {\r\n var readNextOne = msg.response.relatedItems[0];\r\n var readNextTwo = msg.response.relatedItems[1];\r\n var readNextThree = msg.response.relatedItems[2];\r\n\r\n if (readNextOne) {\r\n $(\".related__container\").removeClass(\"d-none\");\r\n relatedContent.relOnePopulated = relatedContent.populateReadNext($(\"#readOne\"), readNextOne);;\r\n } else {\r\n $(\"#readOne\").addClass(\"d-none\");\r\n }\r\n\r\n if (readNextTwo) {\r\n relatedContent.relTwoPopulated = relatedContent.populateReadNext($(\"#readTwo\"), readNextTwo);;\r\n } else {\r\n $(\"#readTwo\").addClass(\"d-none\");\r\n }\r\n\r\n if (readNextThree) {\r\n relatedContent.relTwoPopulated = relatedContent.populateReadNext($(\"#readThree\"), readNextThree);;\r\n } else {\r\n $(\"#readThree\").addClass(\"d-none\");\r\n }\r\n\r\n $(\"#related-content-template\").remove();\r\n },\r\n error: function () {\r\n $(\"#readOne\").addClass(\"d-none\");\r\n $(\"#readTwo\").addClass(\"d-none\");\r\n $(\"#readThree\").addClass(\"d-none\");\r\n console.log(\"Error loading Related Content.\");\r\n },\r\n timeout: 10000\r\n });\r\n });\r\n\r\n }\r\n\r\n private populateReadNext(element: any, rec: any): boolean {\r\n var relatedContentHtml = $(\"#related-content-template\").html();\r\n $(element).html(relatedContentHtml);\r\n\r\n //isolate the media body a tag\r\n var recType = rec.type;\r\n var sponsoredContent = false;\r\n if (recType !== undefined && recType === 'HSS') {\r\n sponsoredContent = true;\r\n }\r\n\r\n var mediabody = $(element.find(\".media-body\"));\r\n $(mediabody).find(\"[data-card-title]\").eq(0).html(rec.title);\r\n $(mediabody).find(\"[data-card-engagement]\").eq(0).html(rec.engagementtype);\r\n $(mediabody).find(\"[data-card-link]\").eq(0).attr(\"href\", rec.url.toString().replace(RelatedContent.healioUrl, \"\"));\r\n\r\n //isolate the image a tag using children, only update href\r\n $(element).children(\"a\").eq(0).attr(\"href\", rec.url.toString().replace(RelatedContent.healioUrl, \"\"));\r\n\r\n if (rec.thumb !== '' && rec.thumb !== undefined && rec.thumb !== null) {\r\n var thumbnailid = rec.thumb;\r\n var mediaidindex = thumbnailid.indexOf(\"mediaid\");\r\n if (mediaidindex > -1) thumbnailid = thumbnailid.substr(mediaidindex, mediaidindex + 41);\r\n thumbnailid = thumbnailid.replace('mediaid=\"{', '').replace('}\"', '').replace('\"', '').replace(/-/g, '');\r\n var thumbnailurl = thumbnailid.length > 1 ? '/~/media/' + thumbnailid + '.webp?w=95' : '';\r\n if (thumbnailurl !== '') {\r\n $(element).find(\"img\").attr(\"src\", thumbnailurl);\r\n $(element).find(\"img\").attr(\"alt\", rec.title);\r\n $(element).find(\"img\").removeClass(\"d-none\");\r\n }\r\n }\r\n\r\n var cardBody = $(element.find(\"[data-card-body]\"));\r\n var sponsorblock = $(element.find(\".sponsor\"));\r\n\r\n if (rec.collectionarticleid !== '' && rec.collectionarticleid !== undefined && rec.collectionarticleid !== null) {\r\n sponsorblock.remove();\r\n $(cardBody).html(rec.collectionarticletitle);\r\n }\r\n\r\n if (sponsoredContent) {\r\n if (rec.description && rec.description !== null) {\r\n cardBody.html(rec.description)\r\n }\r\n } else {\r\n sponsorblock.remove();\r\n }\r\n return true;\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"RelatedContent\", RelatedContent);\r\n","/// \r\nimport { Component } from \".././base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class WindowLoadEventTracker extends Component {\r\n\r\n private category: string | undefined;\r\n private action: string | undefined;\r\n private label: string | undefined;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this.category = this._element.dataset.category;\r\n this.action = this._element.dataset.action;\r\n this.label = this._element.dataset.label;\r\n }\r\n\r\n public async init(): Promise {\r\n // context of \"this\" is taken over inside jQuery function\r\n var thisPreserved = this;\r\n if(!this.category || !this.action || !this.label){\r\n return\r\n }\r\n $(window).on('load',function () {\r\n setTimeout(function () {\r\n var eventparams = {\r\n 'event_category': thisPreserved.category,\r\n 'event_action': thisPreserved.action,\r\n 'event_label': thisPreserved.label,\r\n 'non_interaction': true,\r\n 'value': 0\r\n };\r\n if (typeof (gtag) !== \"undefined\" && eventparams.event_action) {\r\n gtag('event', eventparams.event_action, eventparams);\r\n }\r\n }, 3000);\r\n });\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"WindowLoadEventTracker\", WindowLoadEventTracker);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\n// import { ILandingPageLoadRequest } from \"../../models/LandingPage/ILandingPageLoadRequest\";\r\n\r\nexport class PublicationDateSelect extends Component {\r\n\r\n public _yearFilter: HTMLSelectElement;\r\n public _issueFilter: HTMLSelectElement;\r\n public _issueDates: any | undefined;\r\n public _issueIds: any | undefined;\r\n public _viewButton: HTMLButtonElement;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n const query = DomUtil.queryAll.bind(null, element);\r\n\r\n this._yearFilter = query(\"#yearSelect\")[0];\r\n this._yearFilter.addEventListener(\"change\",\r\n () => this.handleYearChanged(this._yearFilter)\r\n );\r\n\r\n this._issueFilter = query(\"#issueSelect\")[0];\r\n this._issueFilter.addEventListener(\"change\",\r\n () => this.handleIssueChanged(this._issueFilter)\r\n );\r\n\r\n this._viewButton =\r\n query(\".button-nav__view-more > .btn\")[0];\r\n this._viewButton.addEventListener(\"click\",\r\n () => this.changeTableOfContents()\r\n );\r\n\r\n\r\n let data = this._element.dataset[\"issueDates\"];\r\n if (data){\r\n this._issueDates = JSON.parse(data);\r\n } else {\r\n this._issueDates = undefined;\r\n }\r\n\r\n data = this._element.dataset[\"issueIds\"];\r\n if (data){\r\n this._issueIds = JSON.parse(data);\r\n } else {\r\n this._issueIds = undefined;\r\n }\r\n\r\n var year = this._element.querySelector('#selectedYear');\r\n var issue = this._element.querySelector('#selectedIssue');\r\n\r\n if (year && issue && year.value && issue.value){\r\n this._yearFilter.value = year.value;\r\n this.handleYearChanged(this._yearFilter);\r\n this._issueFilter.value = issue.value;\r\n this.changeTableOfContents();\r\n }\r\n }\r\n\r\n public handleYearChanged(e: HTMLSelectElement): void {\r\n console.log(\"Year selected: \" + e.value)\r\n if (!this._issueDates) {\r\n return;\r\n }\r\n let months = this._issueDates[e.value]?.split(',');\r\n if (months){\r\n this._issueFilter.innerHTML = \"\";\r\n months.forEach((month: string) => {\r\n var element = document.createElement(\"option\");\r\n element.value = month;\r\n element.textContent = month;\r\n this._issueFilter.appendChild(element);\r\n });\r\n }\r\n\r\n var store = this._element.querySelector('#selectedYear');\r\n if (store){\r\n store.value = e.value;\r\n }\r\n }\r\n\r\n public async handleIssueChanged(e: HTMLSelectElement): Promise {\r\n console.log(\"Issue selected: \" + e.value)\r\n var issueStore = this._element.querySelector('#selectedIssue');\r\n if (issueStore){\r\n issueStore.value = e.value;\r\n }\r\n\r\n var yearStore = this._element.querySelector('#selectedYear');\r\n if (yearStore){\r\n yearStore.value = this._yearFilter.value;\r\n }\r\n }\r\n\r\n public async changeTableOfContents() : Promise {\r\n console.log(\"Displaying new issue...\")\r\n let toc = document.querySelector(\".table-of-contents > .nav\");\r\n if (toc){\r\n if (!this._issueIds){\r\n return\r\n }\r\n\r\n const key = this._yearFilter.value + \".\" + this._issueFilter.value;\r\n const issue = this._issueIds[key];\r\n\r\n var url = location.href.replace(location.search, '');\r\n url = `${url}?issue=${issue}`;\r\n\r\n window.location.href = url;\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"PublicationDateSelect\",\r\n PublicationDateSelect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { IHealioStoreCartRequest } from \"../../models/HealioBigComm/IHealioStoreCartRequest\";\r\nimport * as Mustache from \"mustache\";\r\nimport { NumberUtil } from \"../../util/NumberUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { LocalStorageUtil } from \"../../healio-custom-scripts-newsarea\";\r\n\r\nexport class PublicationSubscription extends Component {\r\n private _bindableEvents = ['keypress', 'click'];\r\n private readonly _bigCommerceCategoryId:\r\n string | undefined = undefined;\r\n private readonly cartIdKey = \"CartId\";\r\n private healioBigCommStorage : LocalStorageUtil | null = null;\r\n private readonly localDataStore = \"HealioBigComm\";\r\n private _loading: boolean = false;\r\n private readonly _newsSubscriptionCardTemplate:\r\n string | null = null;\r\n private readonly _newsSubscriptionListItemTemplate:\r\n string | null = null;\r\n private readonly _newsSubscriptionVariantItemTemplate:\r\n string | null = null;\r\n private _spinner: Element | null;\r\n private _subscriptionCardsElement: HTMLDivElement | null;\r\n private _subscriptionUnorderedListElement: HTMLUListElement | null;\r\n private _tempDivElement: JQuery = $(\"
\");\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n const newsSubsciptionCardTemplate = $(\"#NewsSubscriptionCardTemplate\");\r\n if (newsSubsciptionCardTemplate.length) {\r\n this._newsSubscriptionCardTemplate = newsSubsciptionCardTemplate.html().trim();\r\n }\r\n\r\n const newsSubsciptionListItemTemplate = $(\"#NewsSubscriptionListItemTemplate\");\r\n if (newsSubsciptionListItemTemplate.length) {\r\n this._newsSubscriptionListItemTemplate = newsSubsciptionListItemTemplate.html().trim();\r\n }\r\n\r\n const newsSubscriptionVariantItemTemplate = $(\"#NewsSubscriptionVariantTemplate\");\r\n if (newsSubscriptionVariantItemTemplate.length) {\r\n this._newsSubscriptionVariantItemTemplate = newsSubscriptionVariantItemTemplate.html().trim();\r\n }\r\n\r\n this._subscriptionCardsElement = this._element.querySelector(\"div[data-mustache-rendered='subsciption-cards']\");\r\n this._subscriptionUnorderedListElement = this._element.querySelector(\"ul[data-mustache-rendered='subsciption-unordered-list']\");\r\n this._bigCommerceCategoryId = this._element.dataset.categoryId;\r\n\r\n this._spinner = document.querySelector(\".loading-spinner\");\r\n\r\n }\r\n\r\n public async init(): Promise {\r\n this.healioBigCommStorage = new LocalStorageUtil(this.localDataStore);\r\n let newspaperHeadingElement = this._element.querySelector('#newspapers-tab')\r\n let cardHeaderDivElement = this._element.querySelector('.card-header')\r\n let slackHeadingElement = this._element.querySelector('#slack-tab')\r\n this._bindableEvents.forEach(evt => {\r\n\r\n cardHeaderDivElement?.addEventListener(evt,\r\n (event) => {\r\n let keyboardEvent = event as KeyboardEvent;\r\n if (keyboardEvent?.code?.toLocaleLowerCase() === \"enter\" || event.target) {\r\n $('.card-header i.far').toggleClass(\"fa-plus fa-minus\");\r\n }\r\n },\r\n false\r\n );\r\n\r\n newspaperHeadingElement?.addEventListener(evt,\r\n (event) => {\r\n let keyboardEvent = event as KeyboardEvent;\r\n if (keyboardEvent?.code?.toLocaleLowerCase() === \"enter\" || event.target) {\r\n $('.slack-tab-content').hide();\r\n $('.newspapers-content').show();\r\n $('#slack-tab').removeClass('active');\r\n $('#newspapers-tab').addClass('active');\r\n\r\n if (window.innerWidth <= 415) {\r\n $('.mobile-select').show();\r\n }\r\n }\r\n }, false);\r\n\r\n slackHeadingElement?.addEventListener(evt,\r\n (event) => {\r\n let keyboardEvent = event as KeyboardEvent;\r\n if (keyboardEvent?.code?.toLocaleLowerCase() === \"enter\" || event.target) {\r\n $('.newspapers-content').hide();\r\n $('.mobile-select').hide();\r\n $('.slack-tab-content').show();\r\n $('#newspapers-tab').removeClass('active');\r\n $('#slack-tab').addClass('active');\r\n }\r\n }, false);\r\n\r\n });\r\n\r\n window.addEventListener(\"resize\", () => {\r\n if (window.innerWidth > 991) {\r\n $('.mobile-select').hide();\r\n $('.slack-tab-content').hide();\r\n $('.newspapers-content').show();\r\n $('#newspapers-tab').addClass('active');\r\n $('#slack-tab').removeClass('active');\r\n } else if (window.innerWidth < 415 && $('#newspapers-tab').hasClass('active')) {\r\n $('.mobile-select').show();\r\n }\r\n })\r\n await this.loadSubsciptionProducts();\r\n }\r\n\r\n private bindToAnchorLinks(): void {\r\n const publicationSubscriptionComponent = this;\r\n $(\"#collapseNewsPubs .card-body ul li a\").each(function () {\r\n var abbreviation = $(this)?.attr(\"href\")?.replace(\"#\", \"\") ?? \"\";\r\n if (abbreviation !== \"\") {\r\n $(this).on('click', function () {\r\n publicationSubscriptionComponent.goToAnchorAndToggle(abbreviation);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private bindToSubscribeButtons(): void {\r\n let subscribeButtons = this._element.querySelectorAll('.news-card button');\r\n subscribeButtons.forEach(element => {\r\n element?.addEventListener(\"click\", event => {\r\n this.subscribeClicked(event);\r\n })\r\n });\r\n }\r\n\r\n private bindToSubscriptionRadioButtons(): void {\r\n let radioButtonDivElements = this._element.querySelectorAll('.single-radio-option')\r\n this._bindableEvents.forEach(evt => {\r\n radioButtonDivElements.forEach(element => {\r\n element?.addEventListener(evt, (event) => {\r\n let keyboardEvent = event as KeyboardEvent;\r\n if (keyboardEvent?.code?.toLocaleLowerCase() === \"enter\" || event.target) {\r\n $('.single-radio-option input').prop('checked', false);\r\n $('.news-card button').addClass('inactive');\r\n $(element).find('input').prop('checked', true);\r\n $(element).closest('.news-card').find('button').removeClass('inactive');\r\n }\r\n })\r\n })\r\n });\r\n }\r\n\r\n private goToAnchorAndToggle(abbreviation: string): void {\r\n var divTag = $(\"div[name='\" + abbreviation + \"']\");\r\n if (divTag !== undefined && divTag.length > 0) {\r\n const offSet = divTag.offset()?.top;\r\n if (offSet) {\r\n $('html,body').animate({ scrollTop: offSet - 75 }, 'fast');\r\n }\r\n }\r\n }\r\n\r\n private async loadSubsciptionProducts(): Promise {\r\n if (this._loading) {\r\n return;\r\n }\r\n const context = this._pageContext;\r\n try {\r\n this._loading = true;\r\n const service = context?.healioStoreService;\r\n if (!service) {\r\n throw new Error(\"HealioStoreService not found\");\r\n }\r\n if (!this._bigCommerceCategoryId) {\r\n throw new Error(\"CategoryId Not Set for Component\")\r\n }\r\n this.startSpinner();\r\n const productsPromise = service.productsByCategoryId(this._bigCommerceCategoryId)\r\n\r\n const productsResponse = await productsPromise;\r\n\r\n let products = productsResponse?.data;\r\n\r\n let productsFlattened = products?.map(product => {\r\n return {\r\n Abbreviation: product.sku,\r\n Title: product.name,\r\n CoverImageAlt: product.name,\r\n CoverImageUrl: product.images[0].url_standard,\r\n Variants: product.variants.map(variant => {\r\n return {\r\n Abbreviation: product.sku,\r\n ProductId: product.id,\r\n Price: NumberUtil.formatPrice(variant.calculated_price),\r\n UnformattedPrice: variant.calculated_price,\r\n VariantId: variant.id,\r\n VariantLabel: variant.option_values[0].label\r\n }\r\n }\r\n )\r\n }\r\n\r\n\r\n })\r\n let subscriptionListItems = this.renderListItemsFromTemplate(productsFlattened);\r\n if (this._subscriptionUnorderedListElement) {\r\n this._subscriptionUnorderedListElement.innerHTML = subscriptionListItems;\r\n }\r\n let subscriptionCards = this.renderCardsFromTemplate(productsFlattened);\r\n if (this._subscriptionCardsElement) {\r\n this._subscriptionCardsElement.innerHTML = subscriptionCards;\r\n }\r\n\r\n this.bindToAnchorLinks();\r\n this.bindToSubscriptionRadioButtons();\r\n this.bindToSubscribeButtons();\r\n }\r\n catch (error) {\r\n console.error(error)\r\n }\r\n finally {\r\n this._loading = false;\r\n this.stopSpinner(0);\r\n }\r\n }\r\n\r\n private renderCardsFromTemplate(products: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._newsSubscriptionCardTemplate) {\r\n for (let product of products) {\r\n const renderedCardTemplate = Mustache.render(this._newsSubscriptionCardTemplate, product);\r\n this._tempDivElement.html(renderedCardTemplate);\r\n for (let variant of product.Variants) {\r\n if (this._newsSubscriptionVariantItemTemplate) {\r\n const renderedVariantTemplate = Mustache.render(this._newsSubscriptionVariantItemTemplate, variant)\r\n this._tempDivElement.find('[data-mustache-rendered=\"subsciption-variants\"]').append(renderedVariantTemplate);\r\n }\r\n }\r\n renderedCards += UiUtil.replaceDataSrcWithSrcInImageTags(this._tempDivElement.html());\r\n };\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n private renderListItemsFromTemplate(products: any): string {\r\n let renderedCards = \"\";\r\n // tslint:disable-next-line: no-unsafe-any\r\n if (this._newsSubscriptionListItemTemplate) {\r\n for (let product of products) {\r\n const renderedTemplate = Mustache.render(this._newsSubscriptionListItemTemplate, product);\r\n this._tempDivElement.html(renderedTemplate);\r\n renderedCards += this._tempDivElement.html();\r\n };\r\n }\r\n\r\n return renderedCards;\r\n }\r\n\r\n private stopSpinner(timeout: number): void {\r\n setTimeout(() => {\r\n if (this._spinner) {\r\n this._spinner.classList.remove(\"active\");\r\n }\r\n }, timeout);\r\n }\r\n\r\n private startSpinner(): void {\r\n if (this._spinner) {\r\n this._spinner.classList.add(\"active\");\r\n }\r\n }\r\n\r\n private async subscribeClicked(clickEvent: Event): Promise {\r\n const service = this._pageContext?.healioStoreService;\r\n if (!service) {\r\n throw new Error(\"HealioStoreService not found\");\r\n }\r\n if (!clickEvent?.target) {\r\n throw new Error(\"Unable to find Target Clicked\")\r\n }\r\n const abbreviation = $(clickEvent.target).data(\"subcribe-button\");\r\n\r\n const messageId = \"select-message-\" + abbreviation;\r\n $(\".select-message\").hide();\r\n var messageSelector = \"#\" + messageId;\r\n\r\n //find all selected products\r\n var result = \"\";\r\n $(\"input[name='group_\" + abbreviation + \"']:radio:checked\").each(function () {\r\n var selectedValue = $(this).val();\r\n if(selectedValue && typeof(selectedValue) === \"string\") {\r\n result = selectedValue;\r\n }\r\n });\r\n\r\n if (result.length == 0) {\r\n $(messageSelector).show();\r\n } else {\r\n $(messageSelector).hide();\r\n UiUtil.toggleButtonState(clickEvent.target as HTMLButtonElement)\r\n\r\n const productAndVariant = result.split(\"|\")\r\n\r\n const cartRequest: IHealioStoreCartRequest = {\r\n \"cart_id\" : this.healioBigCommStorage?.getItem(this.localDataStore,[this.cartIdKey]) || null,\r\n \"line_items\": [\r\n {\r\n \"quantity\": 1,\r\n \"product_id\": productAndVariant[0],\r\n \"variant_id\": productAndVariant[1],\r\n \"list_price\": productAndVariant[3]\r\n }\r\n ]\r\n };\r\n const cartRedirectResponse = await service.addProductToCart(cartRequest)\r\n const cartId = cartRedirectResponse?.Data.cart_id\r\n this.healioBigCommStorage?.insertItem(this.localDataStore,[this.cartIdKey], cartId)\r\n const checkoutUrl = cartRedirectResponse?.Data?.checkout_url;\r\n UiUtil.toggleButtonState(clickEvent.target as HTMLButtonElement)\r\n if (checkoutUrl) {\r\n window.location.href = checkoutUrl;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"PublicationSubscription\",\r\n PublicationSubscription);\r\n","export const NumberUtil = {\r\n formatPrice(raw: number | null): string | null {\r\n if (raw === null) {\r\n return null;\r\n }\r\n const priceFormatter = Intl.NumberFormat('en-us',{style: 'currency', currency: 'USD'})\r\n return priceFormatter.format(raw);\r\n }\r\n}","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\n\r\nexport class NewsHeaderLinks extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn === \"False\") {\r\n return;\r\n }\r\n\r\n let specs = [...document.querySelectorAll(\".specialty-dropdown\")[0].querySelectorAll(\".list-group-item\")].map(e => {\r\n if (e.dataset.specname) {\r\n return e.dataset.specname.split(\" \").join(\"-\");\r\n }\r\n });\r\n\r\n var userSpec = profile.contentspecialty?.split(\"/\").join(\"-\").split(\" & \").join(\"-\").split(\"'\").join(\"\").split(\" \").join(\"-\").toLowerCase();\r\n\r\n //please ignore the following lines\r\n if (userSpec === '' && profile?.profession === 'Optometrist') {\r\n userSpec = 'optometry';\r\n }\r\n //ok you can look now\r\n\r\n //set all links to their specialty version\r\n document.querySelectorAll(\"[data-specialty-href]\").forEach(function (element) {\r\n if (specs.indexOf(userSpec) >= 0) {\r\n element.href = element.dataset.specialtyHref?.replace(\"/$slug$\", \"/\" + userSpec) ?? \"\";\r\n } else {\r\n let newTarget = element.dataset.specialtyHref?.replace(\"/$slug$\", \"\");\r\n if (newTarget === \"\") {\r\n newTarget = \"/\";\r\n }\r\n element.href = newTarget ?? \"\";\r\n }\r\n });\r\n\r\n //set the news link to the specialty version\r\n if (specs.indexOf(userSpec) >= 0) {\r\n let atag = document.querySelector(\".global-nav__navbar > .navbar-nav > .active > .nav-link\");\r\n if (atag) {\r\n atag.href += \"/\" + userSpec;\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"NewsHeaderLinks\", NewsHeaderLinks);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { ViewBySpecialty } from \"../news/ViewBySpecialty\"\r\n\r\nexport class NewsLandingRedirect extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n if (new URLSearchParams(window.location.search).get(\"showall\") !== \"1\" &&\r\n ([\"/\"].indexOf(window.location.pathname) !== -1\r\n || [\"/news\"].indexOf(window.location.pathname) !== -1\r\n || [\"/news/resources\"].indexOf(window.location.pathname) !== -1\r\n || [\"/news/podcasts\"].indexOf(window.location.pathname) !== -1\r\n || [\"/news/blogs-and-columns\"].indexOf(window.location.pathname) !== -1)) {\r\n await this.checkForRedirect();\r\n }\r\n }\r\n\r\n private async checkForRedirect(): Promise {\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (profile) {\r\n let contentspecialty = profile.contentspecialty || '';\r\n if (contentspecialty === '' && profile.profession === 'Optometrist') {\r\n contentspecialty = 'optometry';\r\n }\r\n\r\n contentspecialty = contentspecialty.toLowerCase();\r\n if (contentspecialty === '' || contentspecialty == null) {\r\n return;\r\n }\r\n\r\n contentspecialty = contentspecialty.split(\"/\").join(\"-\").split(\" & \").join(\"-\").split(\"'\").join(\"\").split(\" \").join(\"-\").toLowerCase();\r\n const viewBySpecialty = context.componentFactory.getComponent(ViewBySpecialty);\r\n\r\n let specialtySelect = viewBySpecialty?.element;\r\n if (specialtySelect) {\r\n specialtySelect.querySelectorAll(\"a[data-specialty-id]\").forEach(function (elem) {\r\n if(elem.href.includes(contentspecialty) && window.location.href != elem.href){\r\n console.log(\"NewsLandingRedirect.ts: Redirecting to Users Specialty Page: \" + window.location.href);\r\n window.location.href = elem.href;\r\n return;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"NewsLandingRedirect\", NewsLandingRedirect);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class SiteMapSpecialtyFilter extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n }\r\n\r\n public async init(): Promise {\r\n let applyButton = this._element.querySelector(\"[data-apply-button]\");\r\n if (applyButton) {\r\n applyButton.addEventListener(\"click\", ev => this.handleMenuApply(ev));\r\n }\r\n }\r\n\r\n public handleMenuApply(ev: Event | null): void {\r\n let allSpec = this._element.querySelector(\"[data-all-specialty]:checked\");\r\n let label = this._element.querySelector(\"#site-map-specialty-select\");\r\n if(allSpec){\r\n //if all specialties just show all\r\n document.querySelectorAll(\"li[data-specialty]\").forEach(function (el) {\r\n el.classList.remove(\"d-none\");\r\n })\r\n\r\n if(label){\r\n label.textContent = \"All Specialties\";\r\n }\r\n } else {\r\n //else hide all\r\n document.querySelectorAll(\"li[data-specialty]\").forEach(function (el) {\r\n el.classList.add(\"d-none\");\r\n })\r\n\r\n //then show what is checked\r\n this._element.querySelectorAll(\".specialty-checkbox:checked\").forEach(function (el) {\r\n let specialty = el.dataset.specialty;\r\n if (specialty) {\r\n document.querySelectorAll(\"li[data-specialty='\" + specialty + \"']\").forEach(function (el) {\r\n el.classList.remove(\"d-none\");\r\n })\r\n }\r\n\r\n if(label && specialty){\r\n label.textContent = specialty;\r\n }\r\n });\r\n\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"SiteMapSpecialtyFilter\", SiteMapSpecialtyFilter);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport {\r\n ITopicAlertLoadRequest\r\n} from \"../../models/TopicAlert/ITopicAlertLoadRequest\";\r\nimport {\r\n ITopicAlertRegisterRequest\r\n} from \"../../models/TopicAlert/ITopicAlertRegisterRequest\";\r\nimport {\r\n ITopicAlertSaveRequest\r\n} from \"../../models/TopicAlert/ITopicAlertSaveRequest\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { StringUtil } from \"../../util/StringUtil\";\r\nimport { UiUtil } from \"../../util/UiUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { HealioErrorModal } from \"../healioGlobal/HealioErrorModal\";\r\n\r\nexport class HealioMinuteSignUp extends Component {\r\n private readonly healioMinuteSubscribedKey = \"_healio_minute_sub\"\r\n private readonly emailInput: HTMLInputElement;\r\n private readonly invalidClass = \"is-invalid\";\r\n private readonly modal: HTMLElement;\r\n private readonly subscribeButton: HTMLButtonElement;\r\n private readonly subscribeSpans: HTMLSpanElement[];\r\n private readonly subscribedSpans: HTMLSpanElement[];\r\n private _isSubscribed: boolean = false;\r\n private _listId: string | undefined = undefined;\r\n private _modalId: string | undefined = undefined;\r\n private _settingsId: string | undefined = undefined;\r\n\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this._modalId = this._element.dataset.modalId ?? \"\"\r\n this._listId = this._element.dataset.listId;\r\n this._settingsId = this._element.dataset.settingsId;\r\n this.modal = DomUtil.query(this._element, `[data-modal=${this._modalId}]`)\r\n document.body.appendChild(this.modal);\r\n this.subscribeButton = DomUtil.query(this.modal, \"[data-action='Healio Minute Subscribe']\");\r\n this.emailInput = DomUtil.query(this.modal, \"[data-input='Healio Minute Email']\");\r\n this.subscribeSpans = DomUtil.queryAll(this._element, \"[data-view=subscribe]\")\r\n this.subscribedSpans = DomUtil.queryAll(this._element, \"[data-view=subscribed]\")\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.topicAlertService : null;\r\n this.subscribeButton.addEventListener(\"click\", ev => this.handleSubscribe(ev));\r\n this.emailInput.addEventListener(\"input\", ev => this.handleEmailChanged(ev));\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n const userHasSubscribed = sessionStorage.getItem(this.healioMinuteSubscribedKey)\r\n if (userHasSubscribed) {\r\n if ((!profile?.contactid && userHasSubscribed === \"00000000-0000-0000-0000-000000000000\") ||\r\n (profile?.contactid && profile.contactid === userHasSubscribed)){\r\n this._isSubscribed = true;\r\n this.handleAlreadySubscribed();\r\n return;\r\n }\r\n }\r\n if (profile && profile.isLoggedIn === \"True\"\r\n && profile.contactid\r\n && !this._isSubscribed) {\r\n\r\n const emailInputParent = this.emailInput.parentNode as HTMLElement;\r\n emailInputParent?.classList.add(\"d-none\")\r\n this.subscribeButton.removeAttribute(\"disabled\")\r\n\r\n\r\n const topicAlertLoadRequest: ITopicAlertLoadRequest = {\r\n contactid: window.UserProfile.contactid || \"00000000-0000-0000-0000-000000000000\",\r\n newswirefilters: [\r\n {\r\n Key: \"CRM Guid\",\r\n Value: this._listId || \"\"\r\n }\r\n ],\r\n sectionfilters: [],\r\n startitemid: this._settingsId || \"\"\r\n };\r\n\r\n const topicResponse =\r\n await service?.getTopicAlertWithStatus(topicAlertLoadRequest);\r\n\r\n if (!topicResponse) {\r\n return;\r\n }\r\n\r\n this._isSubscribed =\r\n topicResponse.Subscribed === \"1\";\r\n }\r\n if (this._isSubscribed) {\r\n sessionStorage.setItem(this.healioMinuteSubscribedKey, window.UserProfile.contactid || \"00000000-0000-0000-0000-000000000000\");\r\n this.handleAlreadySubscribed();\r\n return\r\n } else {\r\n this.subscribeSpans.forEach(span => span.classList.remove(\"d-none\"))\r\n $(this.modal).on(\"hidden.bs.modal\", () => {\r\n if ($(`.show[data-modal=${this._modalId}]`).length) {\r\n $(`.show[data-modal=${this._modalId}]`).modal(\"hide\");\r\n $('.modal-backdrop:visible').remove();\r\n }\r\n })\r\n }\r\n }\r\n\r\n private handleEmailChanged(ev: Event): void {\r\n const emailField = ev.target as HTMLInputElement;\r\n if (StringUtil.isValidEmail(emailField.value)) {\r\n this.subscribeButton.removeAttribute(\"disabled\")\r\n return\r\n }\r\n this.subscribeButton.setAttribute(\"disabled\", \"\")\r\n return\r\n }\r\n\r\n private handleError(): void {\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n this.subscribedSpans.forEach(span => span.classList.add(\"d-none\"))\r\n this.subscribeSpans.forEach(span => span.classList.remove(\"d-none\"))\r\n window.dispatchEvent(new Event(HealioErrorModal.HealioErrorEvent));\r\n }\r\n\r\n private handleSuccess(): void {\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n $(this.modal).modal(\"hide\");\r\n $('.modal-backdrop').remove();\r\n this.subscribeSpans.forEach(span => span.classList.add(\"d-none\"))\r\n this.subscribedSpans.forEach(span => span.classList.remove(\"d-none\"))\r\n }\r\n\r\n private handleAlreadySubscribed(): void {\r\n this.subscribeSpans.forEach(span => span.classList.add(\"d-none\"))\r\n this.subscribedSpans.forEach(span => span.classList.add(\"d-none\"))\r\n }\r\n\r\n\r\n private async handleSubscribe(ev: Event): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.topicAlertService : null;\r\n if (!window.UserProfile || !service || !this._listId) {\r\n console.warn(\"Unable to subscribe to Topic Alert. ListId, Service, or UserProfile not found\");\r\n\r\n return;\r\n }\r\n\r\n // Known Users\r\n if (window.UserProfile.isLoggedIn === \"True\"\r\n && window.UserProfile.contactid) {\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n const topicAlertSaveRequest: ITopicAlertSaveRequest = {\r\n contactid: window.UserProfile.contactid,\r\n listid: this._listId,\r\n status: \"2\",\r\n };\r\n const savedTopic = await service.save(topicAlertSaveRequest);\r\n if (savedTopic && savedTopic === \"True\") {\r\n console.log(\"Healio Minute Subscribed\")\r\n this.handleSuccess();\r\n\r\n return;\r\n }\r\n this.handleError();\r\n\r\n return;\r\n\r\n }\r\n // Non users that need to provide email\r\n if (!this.emailInput) {\r\n console.warn(\"MISSING EMAIL INPUT FOR HealioMinute SIGN UP\");\r\n\r\n return;\r\n }\r\n\r\n this.emailInput.classList.remove(this.invalidClass);\r\n if (!StringUtil.isValidEmail(this.emailInput.value)) {\r\n this.emailInput.classList.add(this.invalidClass);\r\n\r\n return;\r\n }\r\n\r\n const crmHidden = DomUtil.query(this._element, \"[data-crm-source]\", false);\r\n if (!crmHidden || !crmHidden.dataset.crmSource) {\r\n console.warn(\"MISSING CRM SOURCE FOR HEALIOMINUTE REGISTRATION\");\r\n\r\n return;\r\n }\r\n\r\n UiUtil.toggleButtonState(this.subscribeButton);\r\n const topicAlertRegisterRequest: ITopicAlertRegisterRequest = {\r\n email: this.emailInput.value,\r\n listid: this._listId,\r\n source: crmHidden.dataset.crmSource,\r\n };\r\n\r\n const registerResponse =\r\n await service.register(topicAlertRegisterRequest);\r\n if (registerResponse && registerResponse !== undefined &&\r\n (registerResponse?.toLowerCase().indexOf(\"true\") > -1 ||\r\n registerResponse?.toLowerCase().indexOf(\"existing\") > -1)) {\r\n this.handleSuccess();\r\n sessionStorage.setItem(this.healioMinuteSubscribedKey, window.UserProfile.contactid || \"00000000-0000-0000-0000-000000000000\")\r\n\r\n return;\r\n }\r\n\r\n this.handleError();\r\n\r\n }\r\n}\r\nComponentFactory.registerComponent(\"HealioMinuteSignUp\", HealioMinuteSignUp);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { LandingCardLoader } from \"../genericLanding/LandingCardLoader\";\r\n\r\nexport class MeetingCalendarFilter extends Component {\r\n\r\n public _sortElements: HTMLElement[];\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n const query = DomUtil.queryAll.bind(null, element);\r\n this._sortElements = query(\".sort-type\");\r\n\r\n this._sortElements.forEach(ct =>\r\n ct.addEventListener(\r\n \"click\",\r\n () => this.handleSortElementClick(ct)));\r\n }\r\n\r\n public handleSortElementClick(e: HTMLElement): void {\r\n const sortOrder = e.getAttribute(\"data-sort\") ?? \"\";\r\n console.log(\"sorting by: \" + sortOrder);\r\n this.toggleActiveState(e);\r\n\r\n e.dispatchEvent(\r\n EventUtil.createCustomEvent(LandingCardLoader.LoadFilteredPageEvent,\r\n sortOrder));\r\n }\r\n\r\n public toggleActiveState(e: HTMLElement): void {\r\n this._sortElements.forEach(ct =>\r\n ct.classList.remove(\"active\"));\r\n e.classList.add(\"active\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"MeetingCalendarFilter\",\r\n MeetingCalendarFilter);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { SavedPageService } from \"../../service/SavedPageService\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { HealioHeader } from \"../healioGlobal/HealioHeader\";\r\n\r\nexport class PinnedSeries extends Component {\r\n private readonly _loadingElement: HTMLElement | null;\r\n private readonly _loginElement: HTMLElement | null;\r\n private readonly _savedPageService: SavedPageService | null;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n this._loadingElement = this._element.querySelector('[data-content=\"loading\"]')\r\n this._loginElement = this._element.querySelector('[data-content=\"login\"]')\r\n this._savedPageService = context ? context.savedPageService : null;\r\n\r\n const loginLinks = this._element.querySelectorAll(\"[data-force-login]\")\r\n loginLinks?.forEach(loginLink => {\r\n loginLink.addEventListener(\"click\", () => this.forceLogin() )\r\n })\r\n\r\n if (this._savedPageService) {\r\n window.addEventListener(\r\n SavedPageService.SavedPageIncrementEvent,\r\n ev => this.handlePinAdded(ev as CustomEvent));\r\n\r\n\r\n window.addEventListener(\r\n SavedPageService.SavedPageDecrementEvent,\r\n ev => this.handlePinRemoved(ev as CustomEvent));\r\n }\r\n }\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile || profile.isLoggedIn === \"False\") {\r\n this._loginElement?.classList.remove(\"d-none\")\r\n this.hideLoadingElement()\r\n return;\r\n }\r\n\r\n await this.loadPinned();\r\n }\r\n\r\n private async forceLogin():Promise {\r\n this._element.dispatchEvent(\r\n EventUtil.createCustomEvent(\r\n HealioHeader.UnauthenticatedActionEvent,\r\n null));\r\n }\r\n\r\n private async handlePinAdded(ev: CustomEvent): Promise {\r\n const elementPinned = DomUtil.query(document.body, `[data-activity-id='${ev.detail}']`);\r\n\r\n if(elementPinned && elementPinned.dataset.contentType === this._element.dataset.contentType){\r\n const pinnedSeriesCard = elementPinned?.closest(\".card\")\r\n this._element.innerHTML += pinnedSeriesCard?.outerHTML\r\n await this._pageContext?.componentFactory.loadComponents(this._element);\r\n this.showOrHideEmptyElement()\r\n this.insureAllPinnedAreActive()\r\n }\r\n\r\n return\r\n }\r\n\r\n private async handlePinRemoved(ev: CustomEvent): Promise {\r\n const existingPinnedSeriesCard = this._element.querySelector(`[data-activity-id='${ev.detail}']`)?.closest(\".card\")\r\n if(existingPinnedSeriesCard) {\r\n existingPinnedSeriesCard.remove()\r\n }\r\n this.showOrHideEmptyElement()\r\n return\r\n }\r\n\r\n private insureAllPinnedAreActive() : void {\r\n const pinnedCards = this._element.querySelectorAll(\".card\")\r\n pinnedCards.forEach(pinnedCard => {\r\n const pinElement = pinnedCard.querySelector(\".pin\")\r\n if(pinElement) {\r\n pinElement.classList.add(\"active\")\r\n pinElement.dataset.stateCurrent = \"saved\"\r\n }\r\n })\r\n }\r\n\r\n private showOrHideEmptyElement() :void {\r\n const pinnedSeriesCards = this._element.querySelectorAll(\".card\")\r\n const emptyElement = this._element.querySelector('[data-content=\"empty\"]')\r\n if(!emptyElement){\r\n return\r\n }\r\n if(pinnedSeriesCards && pinnedSeriesCards.length < 1){\r\n emptyElement.classList.remove(\"d-none\")\r\n emptyElement.parentElement?.classList.remove(\"d-none\")\r\n } else {\r\n emptyElement.classList.add(\"d-none\")\r\n emptyElement.parentElement?.classList.add(\"d-none\")\r\n }\r\n }\r\n\r\n private hideLoadingElement(): void {\r\n this._loadingElement?.classList.remove(\"active\")\r\n this._loadingElement?.classList.add(\"d-none\")\r\n }\r\n\r\n private async loadPinned(): Promise {\r\n const context = this._pageContext;\r\n const service = context ? context.savedPageService : null;\r\n\r\n let contentType = this._element.dataset.contentType;\r\n\r\n\r\n if (this._element.dataset.siteName === undefined) {\r\n console.warn(\"No siteName Card\");\r\n\r\n return;\r\n }\r\n\r\n if (!contentType) {\r\n console.warn(\"Missing Content Type from data attributes\")\r\n\r\n return;\r\n }\r\n\r\n\r\n if (!service) {\r\n console.warn(\"No Saved Page Service available.\");\r\n\r\n return;\r\n }\r\n\r\n let pinnedSeriesItems = await service.list(contentType);\r\n\r\n const activitySiteName = this._element.dataset.siteName.toLowerCase();\r\n\r\n if (pinnedSeriesItems === null || pinnedSeriesItems.length < 1) {\r\n this.hideLoadingElement()\r\n this.showOrHideEmptyElement()\r\n return;\r\n }\r\n\r\n pinnedSeriesItems = pinnedSeriesItems.filter(\r\n s => s.site && s.site.toLowerCase() === activitySiteName\r\n )\r\n this.hideLoadingElement()\r\n if (pinnedSeriesItems && pinnedSeriesItems.length >= 1) {\r\n pinnedSeriesItems.forEach(seriesItem => {\r\n const pinnedItem = DomUtil.query(document.body, `[data-activity-id='${seriesItem.documentid}']`).closest(\".card\");\r\n this._element.innerHTML += pinnedItem?.outerHTML\r\n })\r\n\r\n await this._pageContext?.componentFactory.loadComponents(this._element);\r\n }\r\n this.showOrHideEmptyElement()\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"PinnedSeries\",\r\n PinnedSeries);\r\n","import {\r\n ILandingCardLayoutLoadedDetail,\r\n LandingCardLayout\r\n} from \"../genericLanding/LandingCardLayout\";\r\nimport { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\n\r\nexport class SpecialtyLandingFeatured extends Component {\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n window.addEventListener(\r\n LandingCardLayout.LandingCardLayoutLoadedEvent,\r\n ev =>\r\n this.updateFeatured(ev as CustomEvent)\r\n );\r\n }\r\n\r\n private async updateFeatured(\r\n ev: CustomEvent\r\n ): Promise {\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const featureHtml = ev.detail.featured;\r\n if (featureHtml && !($.isEmptyObject(featureHtml))\r\n && featureHtml.trim().length > 0) {\r\n this._element.innerHTML = featureHtml;\r\n }\r\n // const event = document.createEvent(\"Event\");\r\n // event.initEvent(\"resize\", true, false);\r\n // window.dispatchEvent(event);\r\n await context.componentFactory.loadComponents(this._element);\r\n moduletracking.AjaxTrackLinks(this._element, \"Featured\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\r\n \"SpecialtyLandingFeatured\",\r\n SpecialtyLandingFeatured\r\n);\r\n","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { LandingCardLoader } from \"../genericLanding/LandingCardLoader\";\r\nimport { LandingCardLayout } from \"../genericLanding/LandingCardLayout\";\r\n\r\nexport class YearFilter extends Component {\r\n\r\n public _sortElements: HTMLElement[];\r\n public _button: HTMLElement;\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n const query = DomUtil.queryAll.bind(null, element);\r\n this._sortElements = query(\".dropdown-item\");\r\n this._button = query(\".year-filter-toggle\")[0];\r\n\r\n const cardLayout: LandingCardLayout | null = context.componentFactory.getComponent(\r\n LandingCardLayout\r\n );\r\n\r\n\r\n if (cardLayout){\r\n this.handleSortElementClick(query(\".dropdown-item\")[0]);\r\n }\r\n else {\r\n //If there isn't a query string, load the first year\r\n if (location.search.indexOf('ap=') == -1){\r\n document.addEventListener(LandingCardLayout.LandingCardLayoutLoadedInit,\r\n ev => this.handleSortElementClick(query(\".dropdown-item\")[0])\r\n );\r\n }\r\n }\r\n }\r\n\r\n public handleSortElementClick(e: HTMLElement): void {\r\n const sortOrder = e.getAttribute(\"data-sort\") ?? \"\";\r\n console.log(\"sorting by: \" + sortOrder);\r\n this.toggleActiveState(e);\r\n\r\n e.dispatchEvent(\r\n EventUtil.createCustomEvent(LandingCardLoader.LoadFilteredPageEvent,\r\n sortOrder));\r\n }\r\n\r\n public toggleActiveState(e: HTMLElement): void {\r\n this._sortElements.forEach(ct =>\r\n ct.classList.remove(\"active\"));\r\n e.classList.add(\"active\");\r\n this._button.textContent = e.textContent;\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"YearFilter\",\r\nYearFilter);\r\n","import { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { Component } from \"../base/Component\";\r\n\r\nexport class QuikQuizProgressBar extends Component {\r\n readonly _activeClass: string = \"active\";\r\n readonly _correctClass: string = \"correct\";\r\n readonly _incorrectClass: string = \"incorrect\";\r\n readonly _dots: NodeListOf\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this._dots = this._element.querySelectorAll(\".status-dot\");\r\n\r\n window.addEventListener(\"quikquiz.progressbar.update\", event => this.updateDot(event as CustomEvent));\r\n window.addEventListener(\"quikquiz.quizcomplete\", event => this.completeQuiz());\r\n }\r\n\r\n public updateDot(event: CustomEvent) {\r\n const details = event.detail as { questionIndex: number, correct: boolean | null, active: boolean };\r\n\r\n if (details.questionIndex >= this._dots.length) {\r\n return;\r\n }\r\n\r\n let dot = this._dots[details.questionIndex];\r\n if (dot) {\r\n //set correct/incorrect\r\n if (details.correct) {\r\n dot.classList.remove(this._incorrectClass);\r\n dot.classList.add(this._correctClass);\r\n }\r\n else if(details.correct === false){\r\n dot.classList.add(this._incorrectClass);\r\n dot.classList.remove(this._correctClass);\r\n }\r\n\r\n //set active\r\n if(details.active){\r\n for(let d of this._dots){\r\n d.classList.remove(this._activeClass);\r\n }\r\n dot.classList.add(this._activeClass);\r\n } else {\r\n dot.classList.remove(this._activeClass);\r\n }\r\n }\r\n }\r\n\r\n public completeQuiz(){\r\n for(let d of this._dots){\r\n d.classList.remove(this._activeClass);\r\n }\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"QuikQuizProgressBar\", QuikQuizProgressBar);","import { IUserProfile } from \"../../@types/Wyanoke/UserProfile\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { QBankService } from \"../../service/QBankService\";\r\nimport { QuikQuizService } from \"../../service/QuikQuizService\";\r\nimport { Cookie } from \"../../util/CookieUtil\";\r\nimport { EventUtil } from \"../../util/EventUtil\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { Component } from \"../base/Component\";\r\n\r\nexport class QuikQuizQuestionGroup extends Component {\r\n private _qbankService: QBankService | null = null;\r\n private _quikQuizService: QuikQuizService | null = null;\r\n readonly _questionTemplate: string | undefined;\r\n readonly _answerTemplate: string | undefined;\r\n readonly _context: {\r\n takeId: string | null,\r\n questions: {\r\n questionId: string | null,\r\n answerId: string | null\r\n }[]\r\n };\r\n private _loading:boolean = false;\r\n private _profile: IUserProfile | null;\r\n private _currentQuestion: number | undefined | null = null;\r\n private _resumeQuestion: string | undefined | null = null;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this._questionTemplate = this._element.querySelector(\"#quiz-question-template\")?.innerHTML;\r\n this._answerTemplate = this._element.querySelector(\"#quiz-answer-template\")?.innerHTML;\r\n this._context = {\r\n takeId: null,\r\n questions: []\r\n };\r\n this._profile = null;\r\n }\r\n\r\n public async init(): Promise {\r\n const context = this._pageContext;\r\n if (context === undefined) {\r\n return;\r\n }\r\n\r\n this._qbankService = context.qbankService;\r\n if (!this._qbankService) {\r\n throw new Error(\"No QBank Service!\");\r\n }\r\n\r\n this._quikQuizService = context.quikQuizService;\r\n if (!this._quikQuizService) {\r\n throw new Error(\"No Quik Quiz Service!\");\r\n }\r\n\r\n this._profile = await WyanokeUtil.loadUserProfile(true, true);\r\n\r\n window.addEventListener(\"quikquiz.scrolltonext\", event => this.scrollToNextUnanswered());\r\n window.addEventListener(\"quikquiz.resume\", event => this.resume());\r\n window.addEventListener(\"quikquiz.completetake\", event => this.completeTake());\r\n window.addEventListener(\"scroll\", event => this.handleScroll());\r\n\r\n //add event handlers\r\n this._element.querySelectorAll(\"input[type=radio]\").forEach((element) => {\r\n element.addEventListener(\"click\", ev => {\r\n this.handleQuestionClick(ev)\r\n });\r\n });\r\n\r\n this._element.querySelectorAll(\".next-question-button\").forEach((element) => {\r\n element.addEventListener(\"click\", ev => this.scrollToNext(ev));\r\n });\r\n\r\n await this.loadTake();\r\n }\r\n\r\n private async loadTake(): Promise {\r\n //check if we are supposed to put a specific question first\r\n const urlParams = new URLSearchParams(window.location.search);\r\n const targetQuestion = urlParams.get(\"targetQuestion\")?.replace('{', '').replace('}', '').toLowerCase();\r\n const targetAnswer = urlParams.get(\"targetAnswer\")?.replace('{', '').replace('}', '').toLowerCase();\r\n\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n\r\n //verify\r\n if (this._profile?.isLoggedIn !== \"True\" && !anonymousId) {\r\n let ghostCard = this._element.querySelector(\"#ghost-card\");\r\n if (ghostCard) {\r\n ghostCard.classList.add(\"d-none\");\r\n }\r\n this.showNextQuestion();\r\n\r\n if(targetAnswer || targetQuestion){\r\n WyanokeUtil.logIn();\r\n }\r\n\r\n return;\r\n }\r\n\r\n if (!this._quikQuizService) {\r\n throw new Error(\"No Quik Quiz Service!\");\r\n }\r\n let quizId = this._element.dataset[\"quizId\"];\r\n if (!quizId) {\r\n throw new Error(\"No quiz id found!\");\r\n }\r\n let activityId = this._element.dataset[\"activityId\"];\r\n if (!activityId) {\r\n throw new Error(\"No activity id found!\");\r\n }\r\n let take = await this._quikQuizService.getCurrentTake(quizId, activityId);\r\n if (!take) {\r\n throw new Error(\"No take found!\");\r\n }\r\n if (!take.takeid) {\r\n throw new Error(\"No takeid found!\");\r\n }\r\n this._context.takeId = take.takeid;\r\n\r\n //create document fragments to sort questions\r\n var answeredQuestions = document.createDocumentFragment();\r\n var nextQuestion = document.createDocumentFragment();\r\n var unansweredQuestions = document.createDocumentFragment();\r\n\r\n //iterate questions\r\n var firstTimeVisit = true;\r\n this._loading = true;\r\n this._element.querySelectorAll(\"[data-question-id]\").forEach(qe => {\r\n let questionElement = qe as HTMLElement;\r\n let q = take?.questions.find(q => q.questionid == questionElement.dataset[\"questionId\"]);\r\n if (q) {\r\n //populate answers\r\n if (q.answers && q.answers.length > 0) {\r\n firstTimeVisit = false;\r\n let answerItem = this._element.querySelector(\"#radio-answer-\" + q.answers[0]);\r\n if (answerItem) {\r\n let ai = answerItem as HTMLElement;\r\n ai.click();\r\n questionElement.classList.remove(\"unanswered\");\r\n questionElement.classList.remove(\"d-none\");\r\n }\r\n\r\n answeredQuestions.append(questionElement);\r\n } else if (targetQuestion === questionElement.dataset[\"questionId\"]){\r\n nextQuestion.append(questionElement);\r\n questionElement.classList.remove(\"d-none\");\r\n this._resumeQuestion = questionElement.dataset[\"questionId\"];\r\n }\r\n else {\r\n unansweredQuestions.append(questionElement);\r\n }\r\n }\r\n });\r\n this._loading = false;\r\n\r\n //reorder questions\r\n let quizContainer = this._element.querySelector(\"#quiz-question-container\") as HTMLElement;\r\n if(quizContainer){\r\n quizContainer.innerHTML = \"\";\r\n quizContainer.appendChild(answeredQuestions);\r\n quizContainer.appendChild(nextQuestion);\r\n quizContainer.appendChild(unansweredQuestions);\r\n }\r\n\r\n //update visual elements to reflect reordering and update progress bar\r\n let ind = 0;\r\n let questions = this._element.querySelectorAll(\"[data-question-id]\");\r\n questions.forEach(qe => {\r\n let questionElement = qe as HTMLElement;\r\n questionElement.dataset[\"questionOrder\"] = ind.toString();\r\n ind++;\r\n\r\n // set label\r\n let questionLabel = questionElement.querySelector(\".question-number\") as HTMLElement;\r\n if(questionLabel){\r\n questionLabel.textContent = ind + \"/\" + questions.length;\r\n }\r\n\r\n // update progress if answered\r\n if(!questionElement.classList.contains(\"unanswered\")){\r\n let correct = questionElement.querySelectorAll(\"input.correct[type=radio]:checked\").length > 0;\r\n let ev = EventUtil.createCustomEvent(\"quikquiz.progressbar.update\",\r\n {\r\n questionIndex: questionElement.dataset[\"questionOrder\"],\r\n correct: correct,\r\n active: false\r\n }\r\n );\r\n this._element.dispatchEvent(ev);\r\n }\r\n });\r\n\r\n //hide ghost card\r\n let ghostCard = this._element.querySelector(\"#ghost-card\");\r\n if (ghostCard) {\r\n ghostCard.classList.add(\"d-none\");\r\n }\r\n\r\n // if no target question just show next question\r\n if(!targetQuestion || !targetAnswer){\r\n this.showNextQuestion();\r\n } else {\r\n\r\n //if target question and answer, click that answer\r\n let questionElement = this._element.querySelector(\"[data-question-id='\" + targetQuestion + \"']\");\r\n if(questionElement){\r\n let answerItem = questionElement.querySelector(\"#radio-answer-\" + targetAnswer) as HTMLInputElement;\r\n if (answerItem && !answerItem.disabled) {\r\n let ai = answerItem as HTMLElement;\r\n ai.click();\r\n } else {\r\n this.showNextQuestion();\r\n }\r\n }\r\n }\r\n\r\n //if first visit, either show resume modal or go straight to the score card\r\n if(!firstTimeVisit){\r\n let answeredItems = this._element.querySelectorAll(\"input[type=radio]:checked\").length;\r\n let totalItems = this._element.querySelectorAll(\"[data-question-id]\").length;\r\n\r\n if(totalItems !== answeredItems){\r\n $(\"#resumeModal\").modal('toggle');\r\n } else {\r\n await this.scrollToNextUnanswered();\r\n }\r\n }\r\n }\r\n\r\n private async scrollToNextUnanswered(): Promise{\r\n let unanswered = this._element.querySelectorAll(\".unanswered\");\r\n if (unanswered && unanswered.length > 0) {\r\n let firstUnanswered = unanswered[0] as HTMLElement;\r\n const y = firstUnanswered.getBoundingClientRect().top + window.scrollY - 60;\r\n if (firstUnanswered) {\r\n window.scrollTo({\r\n top: y,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n }\r\n } else {\r\n let scorecard = document.querySelector(\".card.score-card\") as HTMLElement;\r\n if(scorecard){\r\n const y = scorecard.getBoundingClientRect().top + window.scrollY - 60;\r\n window.scrollTo({\r\n top: y,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n }\r\n }\r\n }\r\n\r\n private scrollToNext(event: Event) {\r\n let element = event?.target as HTMLElement\r\n let questionGroup = element.closest(\"[data-question-id]\") as HTMLElement;\r\n let questionIndex = Number(questionGroup.dataset[\"questionOrder\"]) + 1;\r\n let nextQuestion = document.querySelector(\"[data-question-order='\" + questionIndex + \"']\") as HTMLElement;\r\n if (nextQuestion) {\r\n const y = nextQuestion.getBoundingClientRect().top + window.scrollY - 60;\r\n window.scrollTo({\r\n top: y,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n } else {\r\n let scorecard = document.querySelector(\".card.score-card\") as HTMLElement;\r\n if(scorecard){\r\n const y = scorecard.getBoundingClientRect().top + window.scrollY - 60;\r\n window.scrollTo({\r\n top: y,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n }\r\n }\r\n }\r\n\r\n private resume(){\r\n //check if we are supposed to put a specific question first\r\n if(this._resumeQuestion){\r\n let questionElement = this._element.querySelector('[data-question-id=\"' + this._resumeQuestion + '\"]');\r\n if(questionElement){\r\n const y = questionElement.getBoundingClientRect().top + window.scrollY - 60;\r\n window.scrollTo({\r\n top: y,\r\n left: 0,\r\n behavior: 'smooth'\r\n });\r\n return;\r\n }\r\n }\r\n this.scrollToNextUnanswered();\r\n }\r\n\r\n private handleQuestionClick(event: Event) {\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n if(!this._profile?.isLoggedIn && !anonymousId){\r\n event.preventDefault();\r\n event.stopPropagation();\r\n WyanokeUtil.logIn();\r\n return;\r\n }\r\n\r\n let target = event.target as HTMLInputElement;\r\n if (!target) {\r\n return\r\n }\r\n\r\n let answerGroup = target.closest(\".radio-list-group\") as HTMLElement;\r\n if (answerGroup) {\r\n //disable hover states on answers\r\n answerGroup.querySelectorAll(\".list-group-item\").forEach(element => {\r\n let e = element as HTMLElement;\r\n e.style.pointerEvents = \"none\";\r\n });\r\n\r\n //show rationale\r\n var rationale = answerGroup.querySelector(\".rationale\");\r\n if (rationale) {\r\n rationale.classList.remove(\"d-none\");\r\n }\r\n\r\n //disable answers\r\n answerGroup?.querySelectorAll(\"input[type=radio]\").forEach(element => {\r\n let e = element as HTMLInputElement;\r\n if (e) {\r\n e.disabled = true;\r\n e.style.pointerEvents = \"none\";\r\n }\r\n });\r\n }\r\n let questionGroup = answerGroup.closest(\"[data-question-id]\") as HTMLElement;\r\n if (!questionGroup) {\r\n throw new Error(\"Question group not found\");\r\n }\r\n\r\n //remove unanswered\r\n\r\n questionGroup.classList.remove(\"unanswered\");\r\n\r\n if(!this._loading)\r\n {\r\n let questionId = questionGroup.dataset[\"questionId\"];\r\n let answerId = target.value;\r\n let correct = questionGroup.querySelectorAll(\"input.correct[type=radio]:checked\").length > 0;\r\n let ev = EventUtil.createCustomEvent(\"quikquiz.progressbar.update\",\r\n {\r\n questionIndex: questionGroup.dataset[\"questionOrder\"],\r\n correct: correct,\r\n active: true\r\n }\r\n );\r\n this._element.dispatchEvent(ev);\r\n\r\n void this.submitAnswer(questionId, answerId);\r\n this.showNextQuestion();\r\n }\r\n }\r\n\r\n private async showNextQuestion() {\r\n let unanswered = this._element.querySelectorAll(\".unanswered\");\r\n if (unanswered && unanswered.length > 0) {\r\n let firstUnanswered = unanswered[0] as HTMLElement;\r\n if (firstUnanswered) {\r\n firstUnanswered.classList.remove(\"d-none\");\r\n this._currentQuestion = Number(firstUnanswered.dataset[\"questionOrder\"]) - 1;\r\n if(this._currentQuestion < 0){\r\n let ev = EventUtil.createCustomEvent(\"quikquiz.progressbar.update\",\r\n {\r\n questionIndex: 0,\r\n correct: null,\r\n active: true\r\n }\r\n );\r\n this._element.dispatchEvent(ev);\r\n }\r\n }\r\n } else {\r\n let ev = EventUtil.createCustomEvent(\"quikquiz.quizcomplete\", null);\r\n this._element.dispatchEvent(ev);\r\n await this.completeTake();\r\n }\r\n }\r\n\r\n private handleScroll(){\r\n if(this._currentQuestion === null || this._currentQuestion === undefined){\r\n return;\r\n }\r\n\r\n let element = this._element.querySelector('[data-question-order=\"' + this._currentQuestion + '\"]');\r\n var position = element?.getBoundingClientRect();\r\n if(position && position.bottom <= 30) {\r\n let ev = EventUtil.createCustomEvent(\"quikquiz.progressbar.update\",\r\n {\r\n questionIndex: Number(this._currentQuestion + 1),\r\n correct: null,\r\n active: true\r\n }\r\n );\r\n this._element.dispatchEvent(ev);\r\n this._currentQuestion = null;\r\n }\r\n\r\n }\r\n\r\n private async submitAnswer(questionId: string | undefined, answerId: string | undefined): Promise {\r\n if (!this._qbankService) {\r\n throw new Error(\"No QBank Service!\");\r\n }\r\n\r\n if (!this._context.takeId) {\r\n throw new Error(\"No QuizId\");\r\n }\r\n\r\n if (!questionId) {\r\n throw new Error(\"Invalid questionId\");\r\n }\r\n\r\n if (!answerId) {\r\n throw new Error(\"Invalid answerId\");\r\n }\r\n\r\n await this._qbankService.saveAnswer(this._context.takeId, questionId, answerId, 0);\r\n }\r\n\r\n private async completeTake(): Promise {\r\n if(!this._context.takeId){\r\n return;\r\n }\r\n\r\n await this._qbankService?.completeQuiz(this._context.takeId);\r\n }\r\n}\r\nComponentFactory.registerComponent(\"QuikQuizQuestionGroup\", QuikQuizQuestionGroup);","import { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { Component } from \"../base/Component\";\r\n\r\nexport class QuikQuizScoreCard extends Component {\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n }\r\n\r\n public async init(): Promise {\r\n window.addEventListener(\"quikquiz.quizcomplete\", ev => this.show());\r\n }\r\n\r\n public show() {\r\n let correctItems = document.querySelectorAll(\"input.correct[type=radio]:checked\").length;\r\n let totalItems = document.querySelectorAll(\"[data-question-id]\").length;\r\n\r\n //update score text\r\n let correct = correctItems;\r\n let total = totalItems;\r\n let score = this._element.querySelector(\"#score-text\") as HTMLElement;\r\n if (score) {\r\n score.textContent = correct + \"/\" + total;\r\n }\r\n\r\n //update score (percentage) text\r\n let percentage = Math.ceil(Number(correct) / Number(total) * 100)\r\n score = this._element.querySelector(\"#score-percentage\") as HTMLElement;\r\n if (score) {\r\n score.textContent = \"You scored \" + percentage + \"%\";\r\n }\r\n\r\n //show element\r\n this._element.classList.remove(\"d-none\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"QuikQuizScoreCard\", QuikQuizScoreCard);","import { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { moduletracking } from \"../../Wyanoke/ModuleTracking\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\n\r\nexport class CmeActivityRecoCards extends Component {\r\n\r\n constructor(element: HTMLElement, context: PageContext) {\r\n super(element, context);\r\n\r\n void this.loadRecommendedCards();\r\n }\r\n\r\n private async loadRecommendedCards(): Promise {\r\n const context = this._pageContext;\r\n if (!context) {\r\n throw new Error(\"No page context\");\r\n }\r\n\r\n const service = context.recommendedService;\r\n if (!service) {\r\n throw new Error(\"No recommended service\");\r\n }\r\n\r\n const listingViewName = this._element.dataset.viewDisplay;\r\n\r\n if (listingViewName === undefined) {\r\n throw new Error(\"No recommended service\");\r\n }\r\n\r\n const myCme = await service.getReco(listingViewName);\r\n if (!myCme) {\r\n throw new Error(\"No recommended results\");\r\n }\r\n\r\n this._element.innerHTML = myCme.cards;\r\n await context.componentFactory.loadComponents(this._element);\r\n moduletracking.AjaxTrackLinks(this._element,\"Recommended\");\r\n\r\n var cardItems = this._element.querySelectorAll(\".save\");\r\n cardItems.forEach(element => {\r\n element.addEventListener(\"keydown\", function(e) {\r\n let ke = e as KeyboardEvent;\r\n let htmlElem = element as HTMLElement;\r\n if (ke.key === 'Enter') {\r\n htmlElem.click();\r\n }\r\n });\r\n });\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeActivityRecoCards\",\r\nCmeActivityRecoCards);\r\n","interface HTMLCollection {\r\n forEach(callbackfn: (value: any, index: number, array: any[]) => void, thisArg?: any): void;\r\n}\r\n\r\nif (window.HTMLCollection && !HTMLCollection.prototype.forEach) {\r\n HTMLCollection.prototype.forEach = Array.prototype.forEach;\r\n}\r\n","// tslint:disable:file-name-casing\r\n// Justification: File is used only as an entry point, and the compiled file\r\n// should match the existing naming scheme.\r\n\r\n// Polyfills for targeted browsers. Babel will read this import and examine\r\n// the .browserslistrc file to determine what browsers we are supporting, then\r\n// include only the polyfills that are needed.\r\nimport \"core-js\";\r\n\r\n// Async/await support for IE11.\r\nimport \"regenerator-runtime\";\r\n\r\n// we need to polyfill until we have all script usage compiled?\r\nimport \"./extensions/HtmlCollection.prototype.forEach\";\r\n\r\n// Element.prototype.remove support for IE11.\r\n// import \"./extensions/Element.prototype.remove\";\r\n\r\n// import \"./extensions/Element.prototype.closest\";\r\n\r\n// Fetch support for IE11\r\n// Depends on Promise support for IE11, currently provided by core-js.\r\n// import \"whatwg-fetch\";\r\n\r\nexport * from \"./components/clinicalGuidance/ClinicalGuidanceMonographNav\";\r\nexport * from \"./components/eduActivity/ActivityStepNavigation\";\r\nexport * from \"./components/eduActivity/Certificate\";\r\nexport * from \"./components/eduActivity/ClaimCredit\";\r\nexport * from \"./components/eduActivity/CmeActivityContent\";\r\nexport * from \"./components/eduActivity/CmeAttestation\";\r\nexport * from \"./components/eduActivity/CmeRequiresPaymentModal\";\r\nexport * from \"./components/eduActivity/CmeTestPassedModal\";\r\nexport * from \"./components/eduActivity/CmeTestFailedModal\";\r\nexport * from \"./components/eduActivity/CommerceStartActivity\";\r\nexport * from \"./components/healioGlobal/EmailSignUp\";\r\nexport * from \"./components/healioGlobal/EmailSignUpEoOnly\";\r\nexport * from \"./components/healioGlobal/EmailSignUpSuccessModal\";\r\nexport * from \"./components/healioGlobal/HealioErrorModal\";\r\nexport * from \"./components/healioGlobal/HealioHeader\";\r\nexport * from \"./components/healioGlobal/HealioSearchBox\";\r\nexport * from \"./components/healioGlobal/ScrollToTopButton\";\r\nexport * from \"./components/healioGlobal/SpecialtySelect\";\r\nexport * from \"./components/healioGlobal/HealioFooter\";\r\nexport * from \"./components/healioGlobal/SubSpecialtySelect\";\r\nexport * from \"./components/healioGlobal/ListUnstyled\";\r\nexport * from \"./components/homepage/HomeSpecialtySelect\";\r\nexport * from \"./components/honors/HonoreeListing\";\r\nexport * from \"./components/honors/HonoreeSpecialtyFilter\";\r\nexport * from \"./components/honors/HonorsScrollingBanner\";\r\nexport * from \"./components/hss/CollapseCardSection\";\r\nexport * from \"./components/hss/HssPollCard\";\r\nexport * from \"./components/hss/HssQuizCard\";\r\nexport * from \"./components/edu/NotificationBox\";\r\nexport * from \"./components/edu/GoalChart\";\r\nexport * from \"./components/eduLanding/ActivityCard\";\r\nexport * from \"./components/eduLanding/ActivityFeatured\";\r\nexport * from \"./components/eduLanding/ActivityLayout\";\r\nexport * from \"./components/eduLanding/ActivityLoader\";\r\nexport * from \"./components/lmsLanding/LMSTopicSelect\";\r\n// export * from \"./components/edulanding/TopicFilter\";\r\nexport * from \"./components/genericLanding/LandingCardLayout\";\r\nexport * from \"./components/genericLanding/LandingCardLoader\";\r\nexport * from \"./components/genericLanding/LandingCardFeatured\";\r\nexport * from \"./components/genericLanding/LandingNoMasonry\";\r\nexport * from \"./components/healioMasterClass/MasterClassActivityCard\";\r\nexport * from \"./components/healioMasterClass/MasterClassActivityContent\";\r\nexport * from \"./components/healioMasterClass/MasterClassPointTracker\";\r\nexport * from \"./components/healioMasterClass/MasterClassVideo\";\r\nexport * from \"./components/healioMasterClass/MasterClassTrophyCase\";\r\nexport * from \"./components/healioMasterClass/MasterClassModals\";\r\nexport * from \"./components/healioMasterClass/MasterClassPointSummary\";\r\nexport * from \"./components/healioMasterClass/MasterClassRelatedContent\";\r\nexport * from \"./components/learningsites/LearningSiteNextArticle\";\r\nexport * from \"./components/learningsites/LearningSiteMyQuizzes\";\r\nexport * from \"./components/learningsites/LearningSiteQuizExitModal\";\r\nexport * from \"./components/eduActivity/LeavingCmeModal\";\r\nexport * from \"./components/myCme/MyCmeRibbon\";\r\nexport * from \"./components/myCme/FilterSelect\";\r\nexport * from \"./components/myCme/MyActivities\";\r\nexport * from \"./components/myCme/MyCMEInProgress\";\r\nexport * from \"./components/myCme/MyCMESaved\";\r\nexport * from \"./components/myCme/MyCompleted\";\r\nexport * from \"./components/myCme/MyCompletedDisplay\";\r\nexport * from \"./components/myCme/TranscriptModal\";\r\nexport * from \"./components/myCme/UserStatBox\";\r\nexport * from \"./components/mySavedPages/MySavedPages\";\r\nexport * from \"./components/newsArticle/EmailTopicAlert\";\r\nexport * from \"./components/newsArticle/NextArticle\";\r\nexport * from \"./components/newsArticle/ArticleContent\";\r\nexport * from \"./components/newslanding/HealioMinuteSignUp\";\r\nexport * from \"./components/newslanding/MeetingCalendarFilter\";\r\nexport * from \"./components/newslanding/SpecialtyLandingFeatured\";\r\nexport * from \"./components/newslanding/YearFilter\";\r\nexport * from \"./components/newsPublication/PublicationDateSelect\";\r\nexport * from \"./components/newsPublication/PublicationSubscription\";\r\nexport * from \"./components/quikQuiz/QuikQuizQuestionGroup\";\r\nexport * from \"./components/quikQuiz/QuikQuizScoreCard\";\r\nexport * from \"./components/quikQuiz/QuikQuizProgressBar\";\r\nexport * from \"./components/eduActivity/ProgressBar\";\r\n// export * from \"./components/QuestionEvaluation\";\r\nexport * from \"./components/eduActivity/PollQuestion\";\r\nexport * from \"./components/eduActivity/QuestionGroup\";\r\nexport * from \"./components/healioMasterClass/MasterClassQuestionGroupPosttest\";\r\nexport * from \"./components/healioMasterClass/MasterClassQuestionGroupPretest\";\r\nexport * from \"./components/healioMasterClass/MasterClassQuestionGroupNonScoring\";\r\nexport * from \"./components/healioMasterClass/MasterClassProgressBar\";\r\nexport * from \"./components/recommendations/CmeActivityRecoCards\";\r\nexport * from \"./components/SaveIcon\";\r\nexport * from \"./components/eduActivity/SingleSignOn\";\r\nexport * from \"./util/EventUtil\";\r\nexport * from \"./util/LocalStorageUtil\";\r\nexport * from \"./components/emailManagement/ManageEmailSubscriptions\";\r\n\r\nexport { context } from \"./Wyanoke/WyanokeContext\";\r\n","import { IUserActivityModel } from \"./IUserActivityModel\";\r\nimport { IUserActivityModelStep } from \"./IUserActivityModelStep\";\r\nimport { IUserActivityViewModel } from \"./IUserActivityViewModel\";\r\nimport { IUserActivityViewModelStep } from \"./IUserActivityViewModelStep\";\r\nimport { IUserProfile } from \"../../@types/Wyanoke/UserProfile\"\r\n\r\nexport class UserActivityModel implements IUserActivityModel {\r\n public readonly useractivity: IUserActivityModel[\"useractivity\"];\r\n\r\n constructor(userProfile: IUserProfile) {\r\n const contactid = userProfile.contactid || \"\";\r\n const activityid = window.Activity ? window.Activity.Id || \"\" : \"\";\r\n const url = window.Activity ? window.Activity.Url || \"\" : \"\";\r\n const title = window.Activity ? window.Activity.Title || \"\" : \"\";\r\n const expires = window.Activity ? window.Activity.Expires || \"\" : \"\";\r\n const firstviewed = (new Date(Date.now())).toString();\r\n const lastviewed = window.Activity ? window.Activity.LastViewed || \"\" : \"\";\r\n const providers = window.Activity ? window.Activity.Providers || [] : [];\r\n const specialties = window.Activity\r\n ? window.Activity.Specialties || []\r\n : [];\r\n const topics = window.Activity ? window.Activity.Topics || [] : [];\r\n const collections = window.Activity\r\n ? window.Activity.Collections || []\r\n : [];\r\n const lmsname = window.Activity ? window.Activity.LMSName || \"\" : \"\";\r\n const isExternal = window.Activity ? window.Activity.isExternal || false : false;\r\n\r\n this.useractivity = {\r\n activity: {\r\n activityid,\r\n collections: [...collections],\r\n expires,\r\n providers: providers\r\n .filter(Boolean)\r\n .map((p : any)=>({providerid: p.Id, title: p.Title})),\r\n specialties: [...specialties],\r\n title,\r\n topics: [...topics],\r\n url,\r\n lmsname\r\n },\r\n disabled: false,\r\n firstviewed,\r\n lastviewed,\r\n steps: [],\r\n user: {\r\n address: {},\r\n contactid\r\n },\r\n isExternal: isExternal\r\n };\r\n }\r\n\r\n public static transformToViewModel(\r\n model: IUserActivityModel | null\r\n ): IUserActivityViewModel {\r\n const userActivity = model ? model.useractivity : null;\r\n const rawSteps = userActivity ? userActivity.steps : null;\r\n const sitecoreSteps = window.Activity ? window.Activity.Steps || [] : [];\r\n\r\n const rawCertificate = userActivity ? userActivity.certificate : null;\r\n const rawCredits = rawCertificate ? rawCertificate.credits : null;\r\n const rawType = rawCertificate ? rawCertificate.credittype : null;\r\n const rawDate = rawCertificate\r\n ? rawCertificate.date === undefined\r\n ? null\r\n : rawCertificate.date\r\n : null;\r\n\r\n const claimedCredits = rawCredits ? parseFloat(rawCredits.toString()) : 0;\r\n\r\n const certificate: IUserActivityViewModel[\"certificate\"] =\r\n typeof rawCredits === \"number\" && typeof rawType === \"string\"\r\n ? {\r\n claimedCredits,\r\n credits: rawCredits,\r\n credittype: rawType,\r\n date: rawDate\r\n }\r\n : null;\r\n\r\n const steps: IUserActivityViewModelStep[] = sitecoreSteps.map(\r\n (sitecoreStep : any) => {\r\n const stepid = sitecoreStep ? sitecoreStep.Id : null;\r\n const type = sitecoreStep ? sitecoreStep.Type : null;\r\n if (!stepid || !type) {\r\n console.error(\"Invalid activity step data\", sitecoreStep);\r\n throw new Error(\"Invalid activity step data\");\r\n }\r\n\r\n const url = sitecoreStep.Url || null;\r\n const rawStep = rawSteps\r\n ? rawSteps.find(s => s.stepid === stepid)\r\n : null;\r\n\r\n const complete = rawStep && rawStep.complete ? rawStep.complete : false;\r\n const timestamp = (complete ? (Date.now.toString()) : null);\r\n\r\n return { stepid, complete, timestamp, type, url };\r\n }\r\n );\r\n\r\n const attestation = model?.useractivity?.attestation ? model.useractivity.attestation : false;\r\n\r\n return { certificate, steps, attestation };\r\n }\r\n\r\n public static updateFromContext(\r\n model: IUserActivityModel,\r\n userProfile: IUserProfile\r\n ): void {\r\n const body = model.useractivity || {};\r\n model.useractivity = body;\r\n\r\n UserActivityModel.updateActivity(body);\r\n UserActivityModel.updateSteps(body);\r\n UserActivityModel.updateUser(body, userProfile);\r\n }\r\n\r\n private static updateActivity(\r\n server: IUserActivityModel[\"useractivity\"]\r\n ): void {\r\n const sitecoreActivity = window.Activity || {};\r\n const id = sitecoreActivity.Id;\r\n\r\n if (id) {\r\n const serverActivity = server.activity || { id };\r\n server.activity = serverActivity;\r\n server.activity.activityid = id;\r\n\r\n if (sitecoreActivity.Title) {\r\n serverActivity.title = sitecoreActivity.Title;\r\n }\r\n\r\n serverActivity.specialties = sitecoreActivity.Specialties\r\n ? [...sitecoreActivity.Specialties]\r\n : [];\r\n\r\n serverActivity.providers = sitecoreActivity.Providers\r\n ? sitecoreActivity.Providers\r\n .filter(Boolean)\r\n .map((p : any )=>({\r\n providerid: p.Id,\r\n title: p.Title\r\n }))\r\n : [] as {providerid?: string; title?: string}[];\r\n\r\n serverActivity.topics = sitecoreActivity.Topics\r\n ? [...sitecoreActivity.Topics]\r\n : [];\r\n\r\n serverActivity.collections = sitecoreActivity.Collections\r\n ? [...sitecoreActivity.Collections]\r\n : [];\r\n\r\n serverActivity.url = sitecoreActivity.Url ? sitecoreActivity.Url : \"\";\r\n serverActivity.expires = sitecoreActivity.Expires\r\n ? sitecoreActivity.Expires\r\n : \"\";\r\n }\r\n }\r\n\r\n private static updateSteps(server: IUserActivityModel[\"useractivity\"]): void {\r\n const sitecoreActivity = window.Activity || {};\r\n\r\n if (sitecoreActivity.Steps) {\r\n const existingSteps = server.steps || [];\r\n server.steps = sitecoreActivity.Steps.map((sitecoreStep : any) => {\r\n const id = sitecoreStep.Id;\r\n\r\n if (!id) {\r\n return;\r\n }\r\n\r\n const serverStep: IUserActivityModelStep = existingSteps.find(\r\n e => e.stepid === id\r\n ) || { stepid: id };\r\n\r\n if (sitecoreStep.Title) {\r\n serverStep.title = sitecoreStep.Title;\r\n }\r\n\r\n if (sitecoreStep.Type) {\r\n serverStep.type = sitecoreStep.Type;\r\n }\r\n\r\n return serverStep;\r\n }).filter(Boolean) as IUserActivityModelStep[];\r\n }\r\n }\r\n\r\n private static updateUser(\r\n server: IUserActivityModel[\"useractivity\"],\r\n sitecoreUser: IUserProfile\r\n ): void {\r\n const contactid = sitecoreUser.contactid;\r\n\r\n if (contactid) {\r\n const serverUser = server.user || { contactid };\r\n server.user = serverUser;\r\n serverUser.contactid = contactid;\r\n\r\n if (sitecoreUser.email) {\r\n serverUser.email = sitecoreUser.email;\r\n }\r\n\r\n if (sitecoreUser.firstname) {\r\n serverUser.firstname = sitecoreUser.firstname;\r\n }\r\n\r\n if (sitecoreUser.lastname) {\r\n serverUser.lastname = sitecoreUser.lastname;\r\n }\r\n\r\n if (sitecoreUser.npi) {\r\n serverUser.npi = sitecoreUser.npi;\r\n }\r\n\r\n if (sitecoreUser.profession) {\r\n serverUser.profession = sitecoreUser.profession;\r\n }\r\n\r\n if (sitecoreUser.specialty) {\r\n serverUser.specialty = sitecoreUser.specialty;\r\n }\r\n\r\n if (sitecoreUser.subprofession) {\r\n serverUser.subprofession = sitecoreUser.subprofession;\r\n }\r\n\r\n if (sitecoreUser.subspecialty) {\r\n serverUser.subspecialty = sitecoreUser.subspecialty;\r\n }\r\n }\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IActivityLoadRequest } from \"../models/IActivityLoadRequest\";\r\nimport { IActivityLoadResponse } from \"../models/IActivityLoadResponse\";\r\nimport { IActivityServiceEndpoint } from \"../models/IActivityServiceEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class ActivityService {\r\n constructor(private readonly _endpoint: IActivityServiceEndpoint) {\r\n }\r\n\r\n public async load(req: IActivityLoadRequest): Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const pageNumber =\r\n req && req.page && req.page > 1 ? req.page.toString() : \"\";\r\n\r\n const page = pageNumber || \"1\";\r\n\r\n const topicList = (req.topics || [])\r\n .map(t => \"topicIds=\" + encodeURIComponent(t))\r\n .join(\"&\");\r\n\r\n const queryString = req ? [\r\n pageNumber ? \"page=\" + encodeURIComponent(pageNumber) : null,\r\n req.specialty ? \"specialtyId=\" + encodeURIComponent(req.specialty) : null,\r\n topicList\r\n ].filter(Boolean).join(\"&\") : null;\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { page, query }) || \"\")\r\n .replace(/\\{(?:query|page)\\}/g, \"\");\r\n\r\n console.log(\"Activity Service Request - sending: \");\r\n console.log({ method: endpoint.method, url });\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null);\r\n\r\n const response = result as IActivityLoadResponse;\r\n response.requestId = req.requestId;\r\n\r\n return response;\r\n }\r\n}\r\n","import { IEndpoint } from \"../models/IEndpoint\";\r\n\r\nexport const FetchUtil = {\r\n async sendMessage(\r\n endpoint: IEndpoint | null,\r\n body?: unknown,\r\n cacheStrategy: \"default\" | \"no-store\" | \"reload\" | \"no-cache\" |\r\n \"force-cache\" | \"only-if-cached\" | undefined = \"default\",\r\n encode = true\r\n ): Promise {\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n let init: RequestInit = {\r\n cache: cacheStrategy,\r\n credentials: \"same-origin\",\r\n headers: {\r\n \"Content-Type\": \"application/json\"\r\n },\r\n method: endpoint.method\r\n };\r\n\r\n if (body) {\r\n if (init.method !== \"GET\") {\r\n if (encode){\r\n init.headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Wy-Encoded\" : \"1\"\r\n };\r\n init.body = JSON.stringify({data: this.encodeRequestBody(body)});\r\n } else {\r\n init.headers = {\r\n \"Content-Type\": \"application/json\",\r\n \"Wy-Encoded\" : \"0\"\r\n };\r\n init.body = JSON.stringify(body);\r\n }\r\n } else {\r\n console.warn(\"Cannot send body with GET request\", body);\r\n }\r\n }\r\n // console.info(`Fetching: ${endpoint.url}`);\r\n\r\n return fetch(endpoint.url, init)\r\n .then(response => response.json())\r\n .catch(error => {\r\n console.error(error);\r\n\r\n return [];\r\n });\r\n },\r\n encodeRequestBody(body: unknown): string {\r\n return btoa(\r\n unescape(\r\n encodeURIComponent(\r\n JSON.stringify(body)\r\n )\r\n )\r\n );\r\n }\r\n};\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IArticleLoadRequest } from \"../models/IArticleLoadRequest\";\r\nimport { IArticleLoadResponse } from \"../models/IArticleLoadResponse\";\r\nimport { IArticleServiceEndpoint } from \"../models/IArticleServiceEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class ArticleService {\r\n constructor(private readonly _endpoint: IArticleServiceEndpoint) {\r\n }\r\n\r\n public async load(req: IArticleLoadRequest): Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const pageNumber =\r\n req && req.page && req.page > 1 ? req.page.toString() : \"\";\r\n\r\n const page = pageNumber || \"1\";\r\n\r\n const topicList = (req.topics || [])\r\n .map(t => \"topicIds=\" + encodeURIComponent(t))\r\n .join(\"&\");\r\n\r\n const queryString = req ? [\r\n pageNumber ? \"page=\" + encodeURIComponent(pageNumber) : null,\r\n req.specialty ? \"specialtyId=\" + encodeURIComponent(req.specialty) : null,\r\n topicList\r\n ].filter(Boolean).join(\"&\") : null;\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { page, query }) || \"\")\r\n .replace(/\\{(?:query|page)\\}/g, \"\");\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null);\r\n\r\n const response = result as IArticleLoadResponse;\r\n response.requestId = req.requestId;\r\n\r\n return response;\r\n }\r\n\r\n public async getSchemaDotOrg(): Promise {\r\n const endpoint = this._endpoint.schemaDotOrg;\r\n if (!endpoint) {\r\n console.error(\"Could not resolve endpoint for SchemaDotOrg.\");\r\n\r\n return \"\";\r\n }\r\n\r\n const pageContext = window.Context;\r\n if (!pageContext || !pageContext.documentid) {\r\n console.error(\"Page Context hasn't been loaded unable to load SchemaDotOrg\");\r\n\r\n return \"\";\r\n }\r\n const modifiedDate = document?.querySelector('meta[name=\"ModifiedDate\"]')?.content ?? \"\";\r\n const queryString = pageContext?.documentid ? [\r\n \"pageId=\" + encodeURIComponent(pageContext.documentid),\r\n \"modifiedDate=\"+ encodeURIComponent(modifiedDate)\r\n ].filter(Boolean).join(\"&\") : null;\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { query }) || \"\")\r\n .replace(/\\{(?:query)\\}/g, \"\");\r\n\r\n let response = \"\";\r\n try {\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null);\r\n response = result as string;\r\n } catch {\r\n console.log(\"Error in getting schemadotorg\");\r\n }\r\n\r\n return response;\r\n\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { ICertificateServiceEndpoint } from \"../models/Certificate/ICertificateServiceEndpoint\"\r\nimport { ICertificatePathResponse } from \"../models/Certificate/ICertificatePathResponse\"\r\nimport { ICertificateZipRequest } from \"../models/Certificate/ICertificateZipRequest\"\r\nimport { ICertificateZipResponse } from \"../models/Certificate/ICertificateZipResponse\"\r\nimport { ICertificateEmailZipRequest } from \"../models/Certificate/ICertificateEmailZipRequest\"\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class CertificateService {\r\n constructor(private readonly _endpoint: ICertificateServiceEndpoint) {}\r\n\r\n public async zip(request: ICertificateZipRequest): Promise{\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n if (!endpoint.zip) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const url = endpoint.zip.url;\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.zip.method, url }, request, \"default\", false);\r\n\r\n const response = result as ICertificateZipResponse;\r\n\r\n return response;\r\n }\r\n\r\n public async path(activityId: string): Promise {\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n if (!endpoint.path) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n\r\n const url = (StringUtil.supplant(endpoint.path.url, { activityId }) || \"\")\r\n .replace(/\\{(?:activityId)\\}/g, \"\");\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.path.method, url }, null);\r\n\r\n const response = result as ICertificatePathResponse;\r\n\r\n return response;\r\n }\r\n\r\n public async email(datasourceId: string): Promise {\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const activity = window.Activity;\r\n if (!activity || !activity.Id) {\r\n throw new Error(\"No global activity context.\");\r\n }\r\n\r\n const body = {\r\n EmailDataSource: datasourceId,\r\n activityId: activity.Id,\r\n };\r\n\r\n try {\r\n await FetchUtil.sendMessage(endpoint.email, body);\r\n } catch {\r\n console.log(\"Error in CertificateService.email()\");\r\n }\r\n }\r\n\r\n public async emailZip(request:ICertificateEmailZipRequest ): Promise {\r\n const endpoint = this._endpoint;\r\n if (!endpoint?.emailzip) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n FetchUtil.sendMessage(endpoint.emailzip, request, \"default\", false);\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\"\r\nimport { IEmailSignUpRequest } from \"../models/EmailSignUp/IEmailSignUpRequest\";\r\nimport { IEndpoint } from \"../models/IEndpoint\";\r\n\r\nexport interface IEmailSignUpResponse {\r\n MarketingListRegWithEmailSpecialtyEncResult: {\r\n AccountCreated: boolean;\r\n AccountGuid: string;\r\n AccountPreviouslyExist: boolean;\r\n EmailSent: boolean;\r\n Message: string;\r\n PasswordReset: boolean;\r\n remoteid: string | null;\r\n UserId: string;\r\n };\r\n}\r\n\r\nexport class EmailSignUpService {\r\n constructor(private readonly _endpoint: IEndpoint) {\r\n }\r\n\r\n public async subscribe(savedPage: IEmailSignUpRequest): Promise {\r\n if (!this._endpoint) {\r\n throw new Error(\"No endpoint available.\");\r\n }\r\n\r\n const response = await FetchUtil\r\n .sendMessage(this._endpoint, savedPage) as IEmailSignUpResponse;\r\n\r\n const result = response.MarketingListRegWithEmailSpecialtyEncResult;\r\n\r\n if (result.Message.indexOf(\"error\") > 0) {\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n return result.Message;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IFindRequirementsLoadRequest } from \"../models/CMERequirements/IFindRequirementsLoadRequest\";\r\nimport { IFindRequirementsLoadResponse } from \"../models/CMERequirements/IFindRequirementsLoadResponse\";\r\nimport { IFindRequirementsServiceEndpoint } from \"../models/CMERequirements/IFindRequirementsServiceEndpoint\";\r\n\r\nexport class FindRequirementsService {\r\n\r\n constructor(private readonly _endpoint: IFindRequirementsServiceEndpoint) {\r\n }\r\n\r\n public load(req: IFindRequirementsLoadRequest, callback: object): void {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const request: IFindRequirementsLoadRequest = {\r\n ContextItemId: (req?.ContextItemId || \"11111111-1111-1111-1111-111111111111\"),\r\n SpecialtyIds: (req?.SpecialtyIds || []),\r\n StateIds: (req?.StateIds || [])\r\n };\r\n\r\n if (!request) {\r\n throw new Error(\"Missing request data.\");\r\n }\r\n\r\n if (((request.SpecialtyIds?.length || 0) + (request.StateIds?.length || 0)) < 1) {\r\n throw new Error(\"At least one search parameter required.\");\r\n }\r\n\r\n (async () => {\r\n FetchUtil.sendMessage(endpoint, request, \"no-cache\", false)\r\n .then((unknownres) => {\r\n const result = unknownres as IFindRequirementsLoadResponse;\r\n if (typeof (callback) === 'function') {\r\n return callback(result);\r\n }\r\n });\r\n })();\r\n }\r\n}","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { IGamificationViewModel } from \"../models/Gamification/IGamificationViewModel\";\r\nimport { IGamificationServiceEndpoint } from \"../models/Gamification/IGamificationServiceEndpoint\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IGamificationViewModelStep } from \"../models/Gamification/IGamificationViewModelStep\";\r\nimport { EventUtil } from \"../util/EventUtil\";\r\n\r\nexport class GamificationService {\r\n private _currentStatePromise: Promise | null = null;\r\n private _updatePromise: Promise | null = null;\r\n private _state: IGamificationViewModel | null = null;\r\n\r\n constructor(private readonly _endpoint: IGamificationServiceEndpoint) {\r\n }\r\n\r\n public async currentState(): Promise {\r\n const cachedPromise = this._currentStatePromise;\r\n\r\n console.info(\"Checking for current gamification state...\");\r\n if (cachedPromise) {\r\n console.info(\"awaiting current promise...\");\r\n await cachedPromise;\r\n }\r\n\r\n if(this._state){\r\n console.log(\"state exists, returning\")\r\n return this._state;\r\n }\r\n\r\n if (cachedPromise){\r\n console.info(\"cached promise exists, returning\");\r\n return cachedPromise;\r\n } else {\r\n console.info(\"no cached promise\");\r\n this._currentStatePromise = this.loadCurrentState();\r\n return this._currentStatePromise\r\n }\r\n }\r\n\r\n public async updatePoints(stepid: string, points:number): Promise{\r\n if (!this._state){\r\n await this.currentState();\r\n return this.updatePoints(stepid, points)\r\n }\r\n\r\n if(!this._state){\r\n throw new Error(\"No state!\")\r\n }\r\n\r\n const stepIndex = this._state?.steps.findIndex(step => step.id === stepid);\r\n if(stepIndex === -1){\r\n throw new Error(\"Unable to find step: \" + stepid);\r\n }\r\n\r\n if (this._updatePromise){\r\n await this._updatePromise;\r\n\r\n return this.updatePoints(stepid, points);\r\n }\r\n\r\n if(points > (this._state.steps[stepIndex].maxpoints ?? 0)){\r\n points = (this._state.steps[stepIndex].maxpoints ?? 0);\r\n }\r\n if (points > (this._state.steps[stepIndex].earnedpoints ?? 0)){\r\n\r\n this._state.steps[stepIndex].earnedpoints = points;\r\n }\r\n\r\n if(points === this._state.steps[stepIndex].maxpoints){\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"points-max\"});\r\n window.document.dispatchEvent(ev);\r\n } else if(points < (this._state.steps[stepIndex].maxpoints ?? 0)){\r\n let ev = EventUtil.createCustomEvent(\"gamification.changetext\", { textId: \"points-missing\"});\r\n window.document.dispatchEvent(ev);\r\n }\r\n\r\n return this._updatePromise = this.saveCurrentState();\r\n }\r\n\r\n private async saveCurrentState(): Promise{\r\n console.info(\"Loading current gamification state...\");\r\n const updateInProgress = this._updatePromise;\r\n if (updateInProgress) {\r\n console.info(\"Gamification update in progress, awaiting...\");\r\n await updateInProgress;\r\n console.info(\"Gamification update complete\");\r\n\r\n return this.saveCurrentState();\r\n }\r\n console.info(\"Saving gamification state as view model...\");\r\n\r\n const activity = window.GamificationActivity;\r\n if (!activity || !activity.ActivityId) {\r\n console.warn(\"No global gamification activity context.\");\r\n\r\n return;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n if(!this._state){\r\n return;\r\n }\r\n\r\n this._state.lastupdated = (new Date(Date.now())).toString();\r\n const body = {\r\n gamification: this._state\r\n };\r\n\r\n try{\r\n window.UserProfile.MasterClass = this._state;\r\n } catch(e: unknown){\r\n if(e instanceof Error) {\r\n console.log(e.message);\r\n }\r\n }\r\n\r\n await Promise.all([\r\n FetchUtil.sendMessage(this._endpoint.save, body)\r\n ]);\r\n\r\n this._updatePromise = null;\r\n }\r\n\r\n\r\n\r\n public async getRelatedContent(): Promise {\r\n const endpoint = this._endpoint.loadall;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if(!profile){\r\n return null;\r\n }\r\n\r\n let contactId = profile.contactid || \"\";\r\n let values = {\r\n contactId,\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n }) as (IGamificationViewModel)[]);\r\n\r\n let ids = raw.filter(g => (g.badges.length ?? 0) > 0).map(g => g.activityid);\r\n\r\n const endpoint2 = this._endpoint.getrelatedcontent;\r\n if(!endpoint2){\r\n return null;\r\n }\r\n\r\n let query = \"?seriesid=\" + (window.GamificationActivity?.SeriesId ?? \"\") + \"&completeids=\" + ids.join(\"&completeids=\");\r\n const url2 =\r\n (StringUtil.supplant(endpoint2.url, { query }) || \"\")\r\n .replace(/\\{(?:query)\\}/g, \"\");\r\n\r\n try {\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url: url2 }, null);\r\n let card = result as {activitycard: string};\r\n return card.activitycard;\r\n\r\n } catch {\r\n console.log(\"Error in getting next activity\");\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public async updateBadges(): Promise {\r\n\r\n if(!this._state?.badges){\r\n console.log(\"no badges, returning...\")\r\n return;\r\n }\r\n\r\n let cme = window.GamificationBadges?.find(b => b.badgetype === \"cme\");\r\n if(!cme){\r\n console.log(\"no cme badge, returning...\")\r\n return;\r\n }\r\n\r\n let badgeIndex = this._state?.badges.findIndex(b => {\r\n console.log(`Comparing: ${b.id}:${cme?.id}`);\r\n return b.id === cme?.id;\r\n });\r\n\r\n if (badgeIndex < 0){\r\n console.log(\"could not find badge, returning...\")\r\n return;\r\n }\r\n\r\n let max = this._state?.steps.reduce((acc : number, step) => {\r\n acc += (step?.maxpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n let earned = this._state?.steps.reduce((acc : number, step) => {\r\n acc += (step?.earnedpoints ?? 0);\r\n return acc;\r\n }, 0);\r\n\r\n console.log(`Earned: ${earned}/${max}`);\r\n if(max === earned){\r\n console.log(\"Swapping badge...\");\r\n this._state?.badges.splice(badgeIndex, 1);\r\n this.awardMasterBadge(earned);\r\n this.saveCurrentState();\r\n }\r\n }\r\n\r\n public async awardBadges(): Promise {\r\n const endpoint = this._endpoint.loadall;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if(!profile){\r\n return;\r\n }\r\n\r\n let contactId = profile.contactid || \"\";\r\n const values = {\r\n contactId,\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n }) as (IGamificationViewModel)[]);\r\n\r\n let completeActivities = raw.filter(g => g.badges.length > 0);\r\n let earned = this._state?.steps.map(s => s.earnedpoints ? s.earnedpoints : 0).reduce((acc, value) => acc + value, 0);\r\n let max = this._state?.steps.map(s => s.maxpoints ? s.maxpoints : 0).reduce((acc, value) => acc + value, 0);\r\n let quizearned = this._state?.steps.map(s => s.type === 2 ? s.earnedpoints ?? 0 : 0).reduce((acc, value) => acc + value, 0);\r\n let quizmax = this._state?.steps.map(s => s.type === 2 ? s.maxpoints ?? 0 : 0).reduce((acc, value) => acc + value, 0);\r\n\r\n\r\n //award on a roll\r\n if(raw.filter(g => g.activityid !== this._state?.activityid\r\n && g.seriesid === this._state?.seriesid\r\n && (g.badges?.length ?? 0) > 0).length === 1){\r\n let onaroll = window.GamificationBadges?.find(b => b.badgetype === \"onaroll\")?.id;\r\n if(onaroll){\r\n this._state?.badges.push({id: onaroll})\r\n }\r\n }\r\n\r\n //award perfectscore\r\n if(quizearned === quizmax){\r\n let perfectscore = window.GamificationBadges?.find(b => b.badgetype === \"perfectscore\")?.id;\r\n if(perfectscore){\r\n this._state?.badges.push({id: perfectscore})\r\n }\r\n }\r\n\r\n //award master badge\r\n if (earned !== max){\r\n //cme\r\n let cme = window.GamificationBadges?.find(b => b.badgetype === \"cme\")?.id;\r\n if(cme){\r\n this._state?.badges.push({id: cme})\r\n }\r\n\r\n } else {\r\n this.awardMasterBadge(earned ?? 0);\r\n }\r\n\r\n let numComplete = completeActivities.length + 1;\r\n if (numComplete === 5 ) {\r\n //award risingstar\r\n let risingstar = window.GamificationBadges?.find(b => b.badgetype === \"risingstar\")?.id;\r\n if(risingstar){\r\n this._state?.badges.push({id: risingstar})\r\n }\r\n } else if (numComplete === 10) {\r\n //award superstar\r\n let superstar = window.GamificationBadges?.find(b => b.badgetype === \"superstar\")?.id;\r\n if(superstar){\r\n this._state?.badges.push({id: superstar})\r\n }\r\n } else if (numComplete === 25 ) {\r\n //award diamond\r\n let diamond = window.GamificationBadges?.find(b => b.badgetype === \"diamond\")?.id;\r\n if(diamond){\r\n this._state?.badges.push({id: diamond})\r\n }\r\n }\r\n\r\n await this.saveCurrentState();\r\n }\r\n\r\n public async getActivityState(activityId: string): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if(!profile){\r\n return null;\r\n }\r\n const contactId = profile.contactid || \"\";\r\n const endpoint = this._endpoint.load;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n }) as (IGamificationViewModel)[]);\r\n\r\n return raw[0];\r\n }\r\n\r\n private awardMasterBadge(earned: number) {\r\n if (! earned || earned < 500){\r\n //bronze\r\n let bronze = window.GamificationBadges?.find(b => b.badgetype === \"bronze\")?.id;\r\n if(bronze){\r\n this._state?.badges.push({id: bronze})\r\n }\r\n\r\n } else if (earned < 750) {\r\n //silver\r\n let silver = window.GamificationBadges?.find(b => b.badgetype === \"silver\")?.id;\r\n if(silver){\r\n this._state?.badges.push({id: silver})\r\n }\r\n\r\n } else if (earned < 1000) {\r\n //gold\r\n let gold = window.GamificationBadges?.find(b => b.badgetype === \"gold\")?.id;\r\n if(gold){\r\n this._state?.badges.push({id: gold})\r\n }\r\n\r\n } else {\r\n //platinum\r\n let platinum = window.GamificationBadges?.find(b => b.badgetype === \"platinum\")?.id;\r\n if(platinum){\r\n this._state?.badges.push({id: platinum})\r\n }\r\n }\r\n }\r\n\r\n private async loadCurrentState(): Promise{\r\n console.info(\"Loading current gamification state...\");\r\n const updateInProgress = this._updatePromise;\r\n if (updateInProgress) {\r\n console.info(\"Gamification update in progress, awaiting...\");\r\n await updateInProgress;\r\n console.info(\"Gamification update complete\");\r\n\r\n return this.loadCurrentState();\r\n }\r\n console.info(\"Returning gamification state as view model...\");\r\n\r\n const activity = window.GamificationActivity;\r\n if (!activity || !activity.ActivityId) {\r\n console.warn(\"No global gamification activity context.\");\r\n\r\n return null;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n this._state = {} as IGamificationViewModel;\r\n this._state.steps = window.GamificationActivity?.Steps?.map(s => {\r\n let step = {} as IGamificationViewModelStep;\r\n step.id = s.Id ? s.Id : \"\";\r\n step.locked = s.Locked ? s.Locked : false;\r\n step.maxpoints = s.MaxPoints ? s.MaxPoints : 0;\r\n step.earnedpoints = 0;\r\n step.type = s.Type ? Number(s.Type) : 0;\r\n return step;\r\n }).filter(Boolean) as IGamificationViewModelStep[];\r\n this._currentStatePromise = null;\r\n return this._state;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n const activityId = activity.ActivityId;\r\n\r\n const endpoint = this._endpoint.load;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n }) as (IGamificationViewModel)[]);\r\n\r\n\r\n this._state = {} as IGamificationViewModel;\r\n if(!raw[0]){\r\n this._state.contactid = window.UserProfile?.contactid ? window.UserProfile.contactid : \"\";\r\n this._state.activityid = window.Activity?.Id ? window.Activity.Id : \"\";\r\n this._state.seriesid = window.GamificationActivity?.SeriesId ? window.GamificationActivity.SeriesId : \"\";\r\n this._state.steps = window.GamificationActivity?.Steps?.map(s => {\r\n let step = {} as IGamificationViewModelStep;\r\n step.id = s.Id ? s.Id : \"\";\r\n step.locked = s.Locked ? s.Locked : false;\r\n step.maxpoints = s.MaxPoints ? s.MaxPoints : 0;\r\n step.earnedpoints = 0;\r\n step.type = s.Type ? Number(s.Type) : 0;\r\n return step;\r\n }).filter(Boolean) as IGamificationViewModelStep[];\r\n\r\n this._state.badges = [];\r\n\r\n } else {\r\n this._state = raw[0];\r\n this._state.seriesid = window.GamificationActivity?.SeriesId ? window.GamificationActivity.SeriesId : \"\";\r\n let localsteps = window.GamificationActivity?.Steps?.map(s => {\r\n let localstep = {} as IGamificationViewModelStep;\r\n let serverstep = this._state?.steps.find(st => st.id == s.Id);\r\n\r\n //load these from server\r\n localstep.earnedpoints = serverstep?.earnedpoints ? serverstep.earnedpoints : 0;\r\n localstep.locked = serverstep?.locked ? serverstep.locked : false;\r\n\r\n //load these from local (in case of updates)\r\n localstep.id = s.Id ? s.Id : \"\";\r\n localstep.maxpoints = s.MaxPoints ? s.MaxPoints : 0;\r\n localstep.type = s.Type ? Number(s.Type) : 0;\r\n return localstep;\r\n }).filter(Boolean) as IGamificationViewModelStep[];\r\n this._state.steps = localsteps;\r\n }\r\n\r\n\r\n this._currentStatePromise = null;\r\n await this.saveCurrentState();\r\n return this._state;\r\n }\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IHealioStoreEndpoint } from \"../models/HealioBigComm/IHealioStoreEndpoint\";\r\nimport { IHealioStoreAddProductToCartResponse } from \"../models/HealioBigComm/IHealioStoreAddProductToCartResponse\";\r\nimport { IHealioStoreCartRequest } from \"../models/HealioBigComm/IHealioStoreCartRequest\";\r\nimport { IHealioStoreProductsByCategoryResponse } from \"../models/HealioBigComm/IHealioStoreProductsByCategoryResponse\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class HealioStoreService {\r\n constructor(private readonly _endpoint: IHealioStoreEndpoint) {\r\n }\r\n\r\n public async productsByCategoryId(categoryId: string): Promise {\r\n const endpoint = this._endpoint.productsByCategoryId;\r\n if (!endpoint) {\r\n console.error(\"Could not resolve endpoint for ProductsByCategoryId.\");\r\n\r\n return null;\r\n }\r\n\r\n const queryString = categoryId ? [\r\n \"categoryid=\" + encodeURIComponent(categoryId),\r\n ].filter(Boolean).join(\"&\") : null;\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { query }) || \"\")\r\n .replace(/\\{(?:query)\\}/g, \"\");\r\n\r\n let response: IHealioStoreProductsByCategoryResponse.RootObject | null = null;\r\n try {\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null);\r\n response = result as IHealioStoreProductsByCategoryResponse.RootObject;\r\n } catch {\r\n console.log(\"Error in getting ProductsByCategoryId\");\r\n }\r\n\r\n return response;\r\n\r\n }\r\n\r\n public async addProductToCart(cartRequest: IHealioStoreCartRequest): Promise {\r\n const endpoint = this._endpoint.addProductToCart;\r\n if (!endpoint) {\r\n console.error(\"Could not resolve endpoint for addProductToCart.\");\r\n\r\n return null;\r\n }\r\n\r\n\r\n const url = endpoint.url;\r\n\r\n let response: IHealioStoreAddProductToCartResponse.RootObject | null = null;\r\n try {\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, cartRequest);\r\n response = result as IHealioStoreAddProductToCartResponse.RootObject;\r\n } catch {\r\n console.error(\"Error in addProductToCart\");\r\n }\r\n\r\n return response;\r\n\r\n }\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\"\r\nimport { IPollAnswerServiceEndpoint } from \"../models/HssPoll/IPollAnswerServiceEndpoint\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IPollAnswerModel } from \"../models/HssPoll/IPollAnswerModel\";\r\nimport { IPollAnswerCountModel } from \"../models/HssPoll/IPollAnswerCountModel\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { PollCompleteModel } from \"../models/HssPoll/PollCompleteModel\";\r\n\r\nexport class HssPollAnswerService {\r\n constructor(private readonly _endpoint: IPollAnswerServiceEndpoint) { }\r\n\r\n public async loadAnswers(\r\n pollId: string,\r\n anonymousId: string | null\r\n ): Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n const contactId = profile?.contactid || \"\";\r\n const values = {\r\n ContactId: contactId,\r\n AnonymousID: anonymousId,\r\n PollId: pollId\r\n };\r\n\r\n let pollAnswers: IPollAnswerModel[] | null = null;\r\n\r\n if(!contactId && !anonymousId){\r\n return pollAnswers;\r\n }\r\n const raw = await FetchUtil.sendMessage(\r\n endpoint,\r\n values\r\n );\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n pollAnswers = raw as IPollAnswerModel[];\r\n\r\n return pollAnswers;\r\n }\r\n\r\n public async saveAnswers(\r\n pollAnswerData: PollCompleteModel\r\n ): Promise {\r\n const endpoint = this._endpoint.save;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n FetchUtil.sendMessage(\r\n endpoint,\r\n pollAnswerData\r\n ).then((response: any) => {\r\n\r\n const expected = \"answers saved\";\r\n if (!response || response?.result?.toLowerCase() !== expected) {\r\n console.error(\"Unexpected response from server.\");\r\n return false;\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n public async getAnswerCounts(\r\n pollId: string,\r\n questionId: string\r\n ): Promise {\r\n const endpoint = this._endpoint.getAnswerCounts;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const queryString = [\r\n \"pollId=\" + pollId,\r\n \"questionId=\" + questionId\r\n ].filter(Boolean).join(\"&\");\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { query }) || \"\")\r\n .replace(/\\{(?:query)\\}/g, \"\");\r\n\r\n const raw = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null) as IPollAnswerCountModel[];\r\n\r\n console.log(`PollAnswerCount Type: ${raw}`);\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n return raw;\r\n }\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { ILandingPageLoadRequest } from \"../models/LandingPage/ILandingPageLoadRequest\";\r\nimport { ILandingPageLoadResponse } from \"../models/LandingPage/ILandingPageLoadResponse\";\r\nimport { ILandingPageServiceEndpoint } from \"../models/LandingPage/ILandingPageServiceEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class LandingPageService {\r\n constructor(private readonly _endpoint: ILandingPageServiceEndpoint) {\r\n }\r\n\r\n public async load(req: ILandingPageLoadRequest):\r\n Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const pageNumber =\r\n req && req.page && req.page > 1 ? req.page.toString() : \"\";\r\n\r\n const page = pageNumber || \"1\";\r\n\r\n const topicList = (req.topics || [])\r\n .map(t => \"topicIds=\" + encodeURIComponent(t))\r\n .join(\"&\");\r\n\r\n const creditTypeList = (req.creditTypes || [])\r\n .map(t => \"creditTypeIds=\" + encodeURIComponent(t))\r\n .join(\"&\");\r\n\r\n const queryString = req ? [\r\n page\r\n ? \"page=\" + encodeURIComponent(page)\r\n : null,\r\n req.templates\r\n ? \"templateIds=\" + encodeURIComponent(req.templates)\r\n : null,\r\n req.specialty\r\n ? \"specialtyId=\" + encodeURIComponent(req.specialty)\r\n : null,\r\n topicList,\r\n creditTypeList,\r\n req.additionalParameters\r\n ? \"additionalParameters=\" + encodeURIComponent(req.additionalParameters)\r\n : null,\r\n req.pageId\r\n ? \"pageId=\" + encodeURIComponent(req.pageId)\r\n : null,\r\n req.subspecialty\r\n ? \"subspecialtyId=\" + encodeURIComponent(req.subspecialty)\r\n : null,\r\n req.userId\r\n ? \"userId=\" + encodeURIComponent(req.userId)\r\n : null,\r\n req.configSettingName\r\n ? \"configsettingname=\" + encodeURIComponent(req.configSettingName)\r\n : null\r\n ].filter(Boolean).join(\"&\") : null;\r\n\r\n const query = queryString ? \"?\" + queryString : null;\r\n\r\n const url =\r\n (StringUtil.supplant(endpoint.url, { page, query }) || \"\")\r\n .replace(/\\{(?:query|page)\\}/g, \"\");\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, null);\r\n\r\n const response = result as ILandingPageLoadResponse;\r\n response.requestId = req.requestId;\r\n\r\n return response;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IMyCmeModel } from \"../models/MyCme/IMyCmeModel\";\r\nimport { IMyHealioCmeModel } from \"../models/MyCme/IMyHealioCmeModel\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IMyHealioCmeEndpoint } from \"../models/MyCme/IMyHealioCmeEndpoint\";\r\n\r\ninterface IMyCmeResponse {\r\n readonly completed?: number;\r\n readonly inprogress?: number;\r\n readonly totalcredits?: number;\r\n readonly creditbreakdown?: ReadonlyArray<{\r\n readonly credittype?: string;\r\n readonly credits?: number;\r\n }>;\r\n}\r\n\r\nexport class MyCmeService {\r\n private _currentMyCmePromise: Promise | null = null;\r\n private _currentMyHealioCmePromise: Promise | null = null;\r\n\r\n constructor(private readonly _endpoint: IMyHealioCmeEndpoint) {\r\n }\r\n\r\n public async getMyCmeJson(): Promise {\r\n const cachedPromise = this._currentMyHealioCmePromise;\r\n\r\n return cachedPromise ?\r\n cachedPromise :\r\n this._currentMyHealioCmePromise = this.jsonLoad();\r\n }\r\n\r\n private async jsonLoad(): Promise {\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n\r\n if (!endpoint.jsonLoad?.url || !endpoint.jsonLoad.method) {\r\n throw new Error(\"Could not resolve load endpoint URL.\");\r\n }\r\n\r\n let raw;\r\n let msg = \"\";\r\n try {\r\n raw = await FetchUtil.sendMessage(endpoint.jsonLoad, { contactid: contactId });\r\n } catch (err) {\r\n if (err) {\r\n const error = err as Error;\r\n console.error(error.message);\r\n }\r\n }\r\n\r\n if (msg.length > 0) {\r\n console.error(msg);\r\n throw new Error(msg);\r\n }\r\n\r\n const response = raw as IMyHealioCmeModel;\r\n\r\n return response;\r\n }\r\n\r\n\r\n public async getMyCme(): Promise {\r\n const cachedPromise = this._currentMyCmePromise;\r\n\r\n return cachedPromise ?\r\n cachedPromise :\r\n this._currentMyCmePromise = this.load();\r\n }\r\n\r\n private async load(): Promise {\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n const values = {\r\n contactId,\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n if (!endpoint.load?.url || !endpoint.load.method) {\r\n throw new Error(\"Could not resolve load endpoint URL.\");\r\n }\r\n const url = StringUtil.supplant(endpoint.load.url, values) || \"\";\r\n\r\n let raw;\r\n let msg = \"\";\r\n try {\r\n raw = await FetchUtil.sendMessage({\r\n method: endpoint.load.method,\r\n url\r\n });\r\n } catch (err) {\r\n if (err) {\r\n const error = err as Error;\r\n console.error(error.message);\r\n }\r\n }\r\n\r\n if (msg.length > 0) {\r\n console.error(msg);\r\n throw new Error(msg);\r\n }\r\n\r\n const response = raw as IMyCmeResponse;\r\n\r\n const result: IMyCmeModel = {\r\n completed: response.completed || 0,\r\n creditBreakdown: (response.creditbreakdown || [])\r\n .filter(Boolean)\r\n .map(c => ({\r\n creditType: c.credittype || \"\",\r\n credits: c.credits || 0\r\n })),\r\n inProgress: response.inprogress || 0,\r\n totalCredits: response.totalcredits || 0\r\n };\r\n\r\n return result;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IExpiringActivityModel } from \"../models/NotificationBox/IExpiringActivityModel\";\r\nimport { INotificationBoxServiceEndpoint } from \"../models/NotificationBox/INotificationBoxServiceEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { INotificationBoxLoadResponse } from \"../models/NotificationBox/INotificationBoxLoadResponse\";\r\n\r\nexport class NotificationBoxService {\r\n private _expiringActivityPromise: Promise | null = null;\r\n constructor(private readonly _endpoint: INotificationBoxServiceEndpoint) {\r\n }\r\n\r\n public async getExpiringActivities(): Promise {\r\n const cachedPromise = this._expiringActivityPromise;\r\n\r\n return cachedPromise || (this._expiringActivityPromise = this.load());\r\n }\r\n\r\n private async load(): Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n const result = await FetchUtil\r\n .sendMessage(endpoint);\r\n\r\n const response = result as INotificationBoxLoadResponse;\r\n\r\n return response.activities;\r\n }\r\n\r\n public async deleteNotification(activityId: string): Promise {\r\n const endpoint = this._endpoint.deleteNotification;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n const values = {\r\n activityId: activityId\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url });\r\n\r\n const response = result as {data: boolean};\r\n\r\n return response.data;\r\n }\r\n\r\n public async updateNotificationSettings(hideNotifications: boolean): Promise {\r\n const endpoint = this._endpoint.updateSettings;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const body = {\r\n hideNotifications: hideNotifications\r\n };\r\n\r\n const result = await FetchUtil\r\n .sendMessage(endpoint, body);\r\n\r\n const response = result as {data: boolean};\r\n\r\n return response.data;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IEndpoint } from \"../models/IEndpoint\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\n\r\ninterface IRecommendedResponse {\r\n readonly cards: string;\r\n}\r\n\r\nexport class RecommendedService {\r\n private _currentMyRecoPromise:\r\n Promise | null = null;\r\n\r\n constructor(private readonly _endpoint: IEndpoint) {\r\n }\r\n\r\n public async getReco(viewname:string): Promise {\r\n const cachedPromise = this._currentMyRecoPromise;\r\n\r\n return cachedPromise ?\r\n cachedPromise :\r\n this._currentMyRecoPromise = this.load(viewname);\r\n }\r\n\r\n public async load(viewname:string): Promise {\r\n let result: IRecommendedResponse = {\r\n cards: \"\"\r\n };\r\n\r\n const endpoint = this._endpoint;\r\n if (!endpoint) {\r\n console.error(\"Could not resolve endpoint in recommended service\");\r\n\r\n return result;\r\n }\r\n\r\n const activityid = window.Activity ? window.Activity.Id || \"\" : \"\";\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile || !profile.contactid) {\r\n console.error(\"Could not resolve user in recommended service\");\r\n\r\n return result;\r\n }\r\n\r\n const url = endpoint.url + \"?activityid=\"\r\n + activityid + \"&sitename=healiotwo&contactid=\"\r\n + profile.contactid + \"&view=\" + viewname;\r\n\r\n let raw;\r\n try{\r\n raw = await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n });\r\n } catch{\r\n raw = undefined;\r\n }\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n\r\n return result;\r\n }\r\n\r\n const response = raw as IRecommendedResponse;\r\n\r\n result = {\r\n cards: response.cards || \"\"\r\n };\r\n\r\n return result;\r\n }\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { ITopicAlertLoadRequest } from \"../models/TopicAlert/ITopicAlertLoadRequest\";\r\nimport { ITopicAlertLoadResponse } from \"../models/TopicAlert/ITopicAlertLoadResponse\";\r\nimport { ITopicAlertRegisterRequest } from \"../models/TopicAlert/ITopicAlertRegisterRequest\";\r\nimport { ITopicAlertRegisterResponse } from \"../models/TopicAlert/ITopicAlertRegisterResponse\";\r\nimport { ITopicAlertSaveRequest } from \"../models/TopicAlert/ITopicAlertSaveRequest\";\r\nimport { ITopicAlertSaveResponse } from \"../models/TopicAlert/ITopicAlertSaveResponse\";\r\nimport { ITopicAlertServiceEndpoint } from \"../models/TopicAlert/ITopicAlertServiceEndpoint\";\r\n\r\nexport class TopicAlertService {\r\n private _currentTopicAlertPromise:\r\n Promise | null = null;\r\n constructor(private readonly _endpoint: ITopicAlertServiceEndpoint) {\r\n }\r\n\r\n public async getTopicAlertWithStatus(loadRequest: ITopicAlertLoadRequest):\r\n Promise {\r\n const cachedPromise = this._currentTopicAlertPromise;\r\n\r\n return cachedPromise ?\r\n cachedPromise :\r\n this._currentTopicAlertPromise = this.load(loadRequest);\r\n }\r\n\r\n public async load(loadRequest: ITopicAlertLoadRequest):\r\n Promise {\r\n if (!this._endpoint.load) {\r\n console.error(\"No endpoint available\");\r\n\r\n return null;\r\n }\r\n\r\n try {\r\n const response = await FetchUtil\r\n .sendMessage(this._endpoint.load, loadRequest) as\r\n { GetListForTopicEncResult: string };\r\n\r\n return JSON.parse(response.GetListForTopicEncResult) as\r\n ITopicAlertLoadResponse;\r\n } catch(err) {\r\n console.warn(err);\r\n\r\n return null;\r\n }\r\n }\r\n\r\n public async register(registerRequest: ITopicAlertRegisterRequest):\r\n Promise {\r\n if (!this._endpoint.register) {\r\n throw new Error(\"No endpoint available.\");\r\n }\r\n\r\n const response = await FetchUtil\r\n .sendMessage(this._endpoint.register, registerRequest) as\r\n ITopicAlertRegisterResponse;\r\n\r\n if (response?.CheckEmailWithShortRegOpsAddToListEncResult?.Message?.indexOf(\"error\") > 0) {\r\n console.error(\"Unexpected response from server registering for topic alert.\");\r\n return null;\r\n }\r\n\r\n return response.CheckEmailWithShortRegOpsAddToListEncResult.Message;\r\n }\r\n\r\n public async save(saveRequest: ITopicAlertSaveRequest): Promise {\r\n if (!this._endpoint.save) {\r\n throw new Error(\"No endpoint available.\");\r\n }\r\n\r\n const response = await FetchUtil\r\n .sendMessage(this._endpoint.save, saveRequest) as ITopicAlertSaveResponse;\r\n\r\n const result = response.ManageListMemberEncResult;\r\n\r\n if (result.indexOf(\"error\") > 0) {\r\n console.error(\"Unexpected response from server saving topic alert.\");\r\n return null;\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IUserProfileServiceEndpoint } from \"../models/UserProfile/IUserProfileServiceEndpoint\";\r\nimport { IUserProfileCustomFieldResponse } from \"../models/UserProfile/IUserProfileCustomFieldResponse\";\r\nimport { IUserProfileCustomField } from \"../models/UserProfile/IUserProfileCustomField\";\r\nimport { IUserProfileSiteSettingsUpdateRequest } from \"../models/UserProfile/IUserProfileSiteSettingsUpdateRequest\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class UserProfileService {\r\n\r\n constructor(private readonly _api: IUserProfileServiceEndpoint) { }\r\n\r\n public async updateUserSettings(userSettings: IUserProfileSiteSettingsUpdateRequest): Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.updateSiteSettings : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n throw new Error(\"Could not resolve user.\");\r\n }\r\n\r\n if(profile.isLoggedIn === \"False\" || profile.sitesettings === undefined) {\r\n throw new Error(\"Not Allowed\");\r\n }\r\n\r\n profile.sitesettings.goalmodalsshown = (userSettings?.GoalModalsShown||[]);\r\n\r\n await FetchUtil.sendMessage(endpoint, userSettings, \"no-cache\", true);\r\n return;\r\n }\r\n\r\n public async updateProfile(fields: IUserProfileCustomField[]): Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.update : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n throw new Error(\"Could not resolve user.\");\r\n }\r\n\r\n await FetchUtil.sendMessage(\r\n {\r\n method: endpoint.method,\r\n url: endpoint.url\r\n },\r\n {\r\n contactId: profile.contactid,\r\n customFields: fields\r\n }\r\n );\r\n\r\n return true;\r\n }\r\n\r\n public async getCustomFields(ids: string[]):Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.getCustomFields : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n throw new Error(\"Could not resolve user.\");\r\n }\r\n\r\n const contactId = profile.contactid;\r\n if (!contactId) {\r\n throw new Error(\"No contactId found\");\r\n }\r\n\r\n const fieldIds = ids.reduce((a, c) => `${a},${c}`);\r\n if (!fieldIds) {\r\n throw new Error(\"No fieldIds found\");\r\n }\r\n\r\n const values = {\r\n contactId,\r\n fieldIds\r\n };\r\n const reqUrl = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const result = await FetchUtil.sendMessage(\r\n {\r\n method: endpoint.method,\r\n url: reqUrl\r\n }\r\n );\r\n\r\n return result as IUserProfileCustomFieldResponse;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IUserGoalsUpdateResponse } from \"../models/UserGoals/IUserGoalsUpdateResponse\";\r\nimport { IUserGoalsUpdateRequest } from \"../models/UserGoals/IUserGoalsUpdateRequest\";\r\nimport { IUserGoalsServiceEndpoint } from \"../models/UserGoals/IUserGoalsServiceEndpoint\";\r\nexport class UserGoalsService {\r\n constructor(private readonly _endpoint: IUserGoalsServiceEndpoint) {\r\n }\r\n\r\n public async update(req: IUserGoalsUpdateRequest): Promise {\r\n const endpoint = this._endpoint.update;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const body = {\r\n contactid: req.contactid,\r\n credits : req.credits,\r\n startdate: req.startdate,\r\n enddate: req.enddate,\r\n reminders : req.reminders\r\n };\r\n\r\n const url = endpoint.url;\r\n\r\n const result = await FetchUtil\r\n .sendMessage({ method: endpoint.method, url }, body, \"default\", false);\r\n\r\n const response = result as IUserGoalsUpdateResponse;\r\n\r\n return response;\r\n }\r\n}","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { ITopic } from \"../models/ITopic\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { ITopicListServiceEndpoint } from \"../models/TopicList/ITopicListServiceEndpoint\";\r\nimport { ICreditType } from \"../models/ICreditType\";\r\n\r\ninterface IRawTopic {\r\n readonly TopicId: string;\r\n readonly TopicName: string;\r\n}\r\n\r\ninterface IRawCreditType {\r\n readonly CreditTypeId: string;\r\n readonly CreditTypeName: string;\r\n}\r\n\r\ninterface ITopicAndCreditTypeResponse {\r\n topics: IRawTopic[];\r\n credittypes: IRawCreditType[];\r\n}\r\n\r\nexport class TopicListService {\r\n private static readonly _cache = new Map();\r\n private static readonly _topicsAndCreditTypesCache = new Map();\r\n\r\n constructor(private readonly _endpoint: ITopicListServiceEndpoint) {}\r\n\r\n private static mapTopics(raw: IRawTopic): ITopic {\r\n return {\r\n topicId: raw.TopicId,\r\n topicName: raw.TopicName,\r\n };\r\n }\r\n\r\n private static mapCreditTypes(raw: IRawCreditType): ICreditType {\r\n return {\r\n creditTypeId: raw.CreditTypeId,\r\n creditTypeName: raw.CreditTypeName,\r\n };\r\n }\r\n\r\n public async getTopicsBySpecialty(specialtyId: string): Promise {\r\n const cacheHit = TopicListService._cache.get(specialtyId);\r\n if (cacheHit) {\r\n return cacheHit;\r\n }\r\n\r\n if (!this._endpoint.topics) {\r\n throw new Error(\"No endpoint available.\");\r\n }\r\n\r\n const url = StringUtil.supplant(this._endpoint.topics.url, {\r\n encodedSpecialtyId: encodeURIComponent(specialtyId),\r\n specialtyId,\r\n });\r\n\r\n if (!url) {\r\n throw new Error(\"Unable to resolve endpoint.\");\r\n }\r\n\r\n let raw;\r\n try {\r\n raw = await FetchUtil.sendMessage({\r\n method: this._endpoint.topics.method,\r\n url,\r\n });\r\n } catch {\r\n raw = undefined;\r\n }\r\n\r\n if (!Array.isArray(raw)) {\r\n throw new Error(\"Unexpected response from server\");\r\n }\r\n\r\n const result = raw.map(TopicListService.mapTopics);\r\n\r\n TopicListService._cache.set(specialtyId, result);\r\n\r\n return result;\r\n }\r\n\r\n public async getTopicsAndCreditTypesBySpecialty(specialtyId: string): Promise<{topics: ITopic[], creditTypes: ICreditType[]}> {\r\n const cacheHit = TopicListService._topicsAndCreditTypesCache.get(specialtyId);\r\n if (cacheHit) {\r\n return cacheHit;\r\n }\r\n\r\n if (!this._endpoint.topicsAndCreditTypes) {\r\n throw new Error(\"No endpoint available.\");\r\n }\r\n\r\n const url = StringUtil.supplant(this._endpoint.topicsAndCreditTypes.url, {\r\n encodedSpecialtyId: encodeURIComponent(specialtyId),\r\n specialtyId,\r\n });\r\n\r\n if (!url) {\r\n throw new Error(\"Unable to resolve endpoint.\");\r\n }\r\n\r\n let raw;\r\n try {\r\n raw = await FetchUtil.sendMessage({\r\n method: this._endpoint.topicsAndCreditTypes.method,\r\n url,\r\n });\r\n } catch {\r\n raw = undefined;\r\n }\r\n\r\n const response = raw as ITopicAndCreditTypeResponse;\r\n\r\n let result = {\r\n topics: response.topics.length > 0 ? response.topics.map(TopicListService.mapTopics) : [],\r\n creditTypes: response.credittypes.length > 0 && response.credittypes[0] != null ? response.credittypes?.map(TopicListService.mapCreditTypes) : []\r\n }\r\n TopicListService._topicsAndCreditTypesCache.set(specialtyId, result);\r\n\r\n return result;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IUserLoginServiceEndpoint } from \"../models/UserProfile/IUserLoginServiceEndpoint\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\nexport class UserLoginService {\r\n\r\n constructor(private readonly _api: IUserLoginServiceEndpoint) { }\r\n\r\n public async getLogin(sitename: string, contextid: string): Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.get : null;\r\n if (!endpoint) {\r\n console.error(\"Could not resolve endpoint\");\r\n return;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if((profile?.isLoggedIn||\"False\") === \"True\") {\r\n console.error(\"Not Allowed\");\r\n return;\r\n }\r\n\r\n const values = {\r\n sitename,\r\n contextid\r\n };\r\n const reqUrl = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const result = await FetchUtil.sendMessage(\r\n {\r\n method: endpoint.method,\r\n url: reqUrl\r\n }, null, \"no-cache\", true\r\n );\r\n\r\n return (result as HTMLElement);\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\"\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IQBankServiceEndpoint } from \"../models/QBank/IQBankServiceEndpoint\";\r\nimport { Cookie } from \"../util/CookieUtil\";\r\n\r\nexport class QBankService {\r\n constructor(private readonly _endpoint: IQBankServiceEndpoint) { }\r\n\r\n public async completeQuiz(\r\n quizId : string\r\n ):Promise {\r\n const endpoint = this._endpoint.completeQuiz;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile && !anonymousId) {\r\n return false;\r\n }\r\n\r\n const contactId = profile?.contactid || null;\r\n const values = {\r\n contactid: contactId,\r\n anonymousid: anonymousId || null,\r\n quizid: quizId,\r\n timeremaining: -1,\r\n status: 1\r\n };\r\n\r\n const raw = await FetchUtil.sendMessage(\r\n endpoint,\r\n values,\r\n \"default\",\r\n false\r\n );\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n public async saveAnswer(\r\n quizId: string,\r\n questionItemId: string,\r\n answerItemId: string,\r\n status: Number\r\n ): Promise {\r\n const endpoint = this._endpoint.saveAnswer;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile && !anonymousId) {\r\n return false;\r\n }\r\n\r\n const contactId = profile?.contactid || null;\r\n const values = {\r\n contactid: contactId,\r\n anonymousid: anonymousId || null,\r\n quizid: quizId,\r\n questionitemid: questionItemId ,\r\n AnswerItemId: answerItemId,\r\n Status: status\r\n };\r\n\r\n const raw = await FetchUtil.sendMessage(\r\n endpoint,\r\n values,\r\n \"default\",\r\n false\r\n );\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\";\r\nimport { IQuestionAnswerServiceEndpoint } from \"../models/QuestionGroup/IQuestionAnswerServiceEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IQuestionGroupModel } from \"../models/QuestionGroup/IQuestionGroupModel\";\r\nimport { IQuestionAnswerSaveResponse } from \"../models/QuestionGroup/IQuestionAnswerSaveResponse\";\r\n\r\nexport class QuestionAnswerService {\r\n constructor(private readonly _endpoint: IQuestionAnswerServiceEndpoint) { }\r\n\r\n public async getAnswers(\r\n questionGroupId: string\r\n ): Promise {\r\n const endpoint = this._endpoint.load;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n const values = {\r\n contactId,\r\n encodedContactId: encodeURIComponent(contactId),\r\n encodedQuestionGroupId: encodeURIComponent(questionGroupId),\r\n questionGroupId\r\n };\r\n\r\n let questionGroup: IQuestionGroupModel | null = null;\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n let raw;\r\n try{\r\n raw = await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n });\r\n } catch{\r\n raw = undefined;\r\n }\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n\r\n return null;\r\n }\r\n\r\n questionGroup = raw as IQuestionGroupModel;\r\n\r\n return questionGroup;\r\n }\r\n\r\n public async saveAnswers(\r\n questiongroup: IQuestionGroupModel\r\n ): Promise {\r\n\r\n const endpoint = this._endpoint.save;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n\r\n const result = (await FetchUtil.sendMessage(\r\n endpoint,\r\n questiongroup\r\n )) as IQuestionAnswerSaveResponse;\r\n\r\n const expected = endpoint.method.toLowerCase() + \" ok\";\r\n\r\n if (!result.response?.message || result.response.message.toLowerCase() !== expected) {\r\n console.error(\"Unexpected response from server.\");\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\"\r\nimport { ICreateTranscript } from \"../models/Transcript/ICreateTranscript\";\r\nimport { ITranscriptEndpoint } from \"../models/Transcript/ITranscriptEndpoint\";\r\nimport { StringUtil } from \"../util/StringUtil\";\r\n\r\ninterface IEmailTranscriptRequest {\r\n DatasourceId: string;\r\n Email: string;\r\n FileName: string;\r\n}\r\n\r\ninterface ICreateTranscriptRequest {\r\n TranscriptBody: string;\r\n}\r\n\r\ninterface ICreateTranscriptResponse {\r\n readonly Error?: string;\r\n readonly PdfUrl?: string;\r\n readonly FileName?: string;\r\n}\r\n\r\nexport class TranscriptService {\r\n constructor(private readonly _api: ITranscriptEndpoint) {}\r\n\r\n public async emailTranscript(\r\n datasourceId: string,\r\n transcript: ICreateTranscript,\r\n email: string\r\n ): Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.email : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n if (!transcript) {\r\n throw new Error(\"Invalid request\");\r\n }\r\n\r\n const values = {\r\n email,\r\n encodedEmail: encodeURIComponent(email),\r\n encodedFilename: encodeURIComponent(transcript.filename),\r\n filename: transcript.filename,\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values);\r\n if (!url) {\r\n throw new Error(\"Invalid endpoint\");\r\n }\r\n\r\n const body: IEmailTranscriptRequest = {\r\n DatasourceId: datasourceId,\r\n Email: email,\r\n FileName: transcript.filename,\r\n };\r\n\r\n return void FetchUtil.sendMessage(\r\n {\r\n method: endpoint.method,\r\n url,\r\n },\r\n body\r\n );\r\n }\r\n\r\n public async createTranscript(html: string): Promise {\r\n const api = this._api;\r\n const endpoint = api ? api.generate : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const body: ICreateTranscriptRequest = {\r\n TranscriptBody: (html || \"\").trim(),\r\n };\r\n\r\n let raw;\r\n try {\r\n raw = await FetchUtil.sendMessage(endpoint, body);\r\n } catch {\r\n raw = undefined;\r\n }\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.warn(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n const response = raw as ICreateTranscriptResponse;\r\n\r\n if (response.Error) {\r\n console.error(response.Error);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n if (response.PdfUrl && response.FileName) {\r\n return {\r\n filename: response.FileName,\r\n pdfUrl: response.PdfUrl,\r\n };\r\n }\r\n\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n\r\n\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { HealioErrorModal } from \"../components/healioGlobal/HealioErrorModal\"\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\nimport { IQuikQuizServiceEndpoint } from \"../models/QuikQuiz/IQuikQuizServiceEndpoint\";\r\nimport { IQuikQuizGetCurrentTakeResponse } from \"../models/QuikQuiz/IQuikQuizGetCurrentTakeResponse\"\r\nimport { Cookie } from \"../util/CookieUtil\";\r\n\r\nexport class QuikQuizService {\r\n constructor(private readonly _endpoint: IQuikQuizServiceEndpoint) { }\r\n\r\n public async getCurrentTake(\r\n quizId : string,\r\n activityId : string\r\n ):Promise {\r\n const endpoint = this._endpoint.getCurrentTake;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint.\");\r\n }\r\n let anonymousId = Cookie.getCookie(\"anonid\");\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile && !anonymousId) {\r\n return null;\r\n }\r\n\r\n const contactId = profile?.contactid || \"\";\r\n const values = {\r\n contactid: contactId,\r\n anonymousid: anonymousId || \"\",\r\n activityId: activityId,\r\n quizId: quizId\r\n };\r\n\r\n const raw = await FetchUtil.sendMessage(\r\n endpoint,\r\n values,\r\n \"default\",\r\n false\r\n );\r\n\r\n if (typeof raw !== \"object\") {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, raw);\r\n HealioErrorModal.triggerHealioErrorModalEvent();\r\n return null;\r\n }\r\n\r\n return raw as IQuikQuizGetCurrentTakeResponse;\r\n }\r\n}\r\n","import { FetchUtil } from \"../util/FetchUtil\";\r\nimport { IUserActivityFilterResponse } from \"../models/UserActivity/IUserActivityFilterResponse\";\r\nimport { IUserActivityModel } from \"../models/UserActivity/IUserActivityModel\";\r\nimport { IUserActivityServiceEndpoint } from \"../models/UserActivity/IUserActivityServiceEndpoint\";\r\nimport { IUserActivityViewModel } from \"../models/UserActivity/IUserActivityViewModel\";\r\nimport { IUserProfile } from \"../@types/Wyanoke/UserProfile\"\r\n\r\nimport { StringUtil } from \"../util/StringUtil\";\r\nimport { UrlUtil } from \"../util/UrlUtil\";\r\nimport { UserActivityModel } from \"../models/UserActivity/UserActivityModel\";\r\nimport { WyanokeUtil } from \"../util/WyanokeUtil\";\r\n\r\ntype RawPromise = Promise | null> | null;\r\n\r\ninterface IRawFilterResponse {\r\n readonly activity?: {\r\n readonly activityId?: string;\r\n readonly expires?: string;\r\n readonly providers?: ReadonlyArray<{\r\n providerid?: string;\r\n title?: string;\r\n }>;\r\n readonly title?: string;\r\n readonly url?: string;\r\n readonly lmsname?: string;\r\n readonly isexternal?: boolean;\r\n };\r\n\r\n readonly certificate?: {\r\n readonly credits?: number;\r\n readonly creditType?: string;\r\n readonly creditTypeInfo?: string;\r\n readonly data? : ReadonlyArray <{\r\n name?: string;\r\n value?:string;\r\n }>;\r\n readonly date?: string;\r\n };\r\n}\r\n\r\nexport class UserActivityService {\r\n private _currentStatePromise: Promise | null = null;\r\n private _rawStatePromise: RawPromise = null;\r\n private _updatePromise: Promise | null = null;\r\n\r\n constructor(private readonly _api: IUserActivityServiceEndpoint) {}\r\n\r\n private static findActiveStepUrl(\r\n state: IUserActivityViewModel\r\n ): string | null {\r\n let lastCompletedStepIdx = -1;\r\n state.steps.every((step, idx) => {\r\n if (step.complete) {\r\n lastCompletedStepIdx = idx;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n const activeStepIdx = Math.min(\r\n state.steps.length - 1,\r\n lastCompletedStepIdx + 1\r\n );\r\n\r\n const activeStep = state.steps[activeStepIdx];\r\n\r\n if (!activeStep) {\r\n console.warn(\"Could not locate the user's active step.\");\r\n const firstStep = state.steps[0];\r\n\r\n return firstStep ? firstStep.url : null;\r\n }\r\n\r\n return activeStep.url;\r\n }\r\n\r\n public async getActivityStatus(activityId: string): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if(!profile){\r\n return null;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n\r\n const endpoint = this._api.load;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n }) as (IUserActivityViewModel)[]);\r\n\r\n return raw[0];\r\n }\r\n\r\n public async filterUserActivities(\r\n _creditType: string | null | undefined,\r\n _year: string | null | undefined,\r\n _startDate: string | null | undefined,\r\n _endDate: string | null | undefined\r\n ): Promise> {\r\n const api = this._api;\r\n const endpoint = api ? api.filter : null;\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n throw new Error(\"Could not resolve user.\");\r\n }\r\n\r\n const query = [\r\n { name: \"contactId\", value: profile.contactid || \"\" },\r\n { name: \"year\", value: _year ? _year : \"\" },\r\n { name: \"creditType\", value: _creditType ? _creditType : \"\" },\r\n { name: \"startdate\", value: _startDate ? _startDate : \"\" },\r\n { name: \"endDate\", value: _endDate ? _endDate : \"\" }\r\n ]\r\n .filter(nvp => nvp.value)\r\n .map(nvp => `${nvp.name}=${encodeURIComponent(nvp.value)}`)\r\n .join(\"&\");\r\n\r\n const queryString = query.length ? \"?\" + query : \"\";\r\n\r\n const creditType = _creditType ? _creditType : \"\";\r\n const year = _year ? _year : \"\";\r\n const values = {\r\n creditType,\r\n encodedCreditType: encodeURIComponent(creditType),\r\n encodedYear: encodeURIComponent(year),\r\n query: queryString,\r\n year\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values);\r\n if (!url) {\r\n throw new Error(\"Invalid endpoint\");\r\n }\r\n\r\n let result;\r\n try{\r\n result = await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n });\r\n }catch{\r\n result = undefined;\r\n }\r\n\r\n const err = result as { response: { message: string } };\r\n if (err.response && err.response.message) {\r\n const msg = \"Unexpected response from server: \" + err.response.message;\r\n console.error(msg, result);\r\n throw new Error(msg);\r\n }\r\n\r\n if (!Array.isArray(result)) {\r\n const msg = \"Unexpected response from server\";\r\n console.error(msg, result);\r\n throw new Error(msg);\r\n }\r\n\r\n const resolveCertificateUrl = (raw: IRawFilterResponse) => {\r\n const activity = raw.activity || { activityId: \"\" };\r\n const activityId = activity.activityId || \"\";\r\n const certEndpoint = this._api.generatecertificate || { url: \"\" };\r\n const certUrl = certEndpoint.url;\r\n\r\n return activityId && certUrl ?\r\n UrlUtil.setQueryString(certUrl, \"activityId\", activityId) :\r\n null;\r\n };\r\n\r\n return result.filter(Boolean).map(raw => {\r\n const item = raw as IRawFilterResponse;\r\n const activity = item.activity || {};\r\n const certificate = item.certificate || {};\r\n const providers = activity.providers\r\n ? activity.providers\r\n .filter(Boolean)\r\n .map(p=>({Id: p.providerid, Title: p.title}))\r\n : [] as {Id?: string; Title?: string}[];\r\n\r\n const dateEarned = certificate.date\r\n ? new Date(Date.parse(certificate.date))\r\n : undefined;\r\n\r\n const expiredOn = activity.expires\r\n ? new Date(Date.parse(activity.expires))\r\n : undefined;\r\n\r\n let isExpired = false;\r\n if (expiredOn){\r\n let now = new Date(new Date().getUTCFullYear(),new Date().getUTCMonth(),new Date().getUTCDate());\r\n let expDate = new Date(expiredOn.getUTCFullYear(),expiredOn.getUTCMonth(),expiredOn.getUTCDate());\r\n isExpired = expDate < now\r\n }\r\n\r\n return {\r\n activityId: activity.activityId,\r\n activityTitle: activity.title,\r\n lmsname: activity.lmsname,\r\n activityUrl: activity.url,\r\n certificateUrl: resolveCertificateUrl(item),\r\n creditNotice: certificate.creditTypeInfo,\r\n creditType: certificate.creditType,\r\n credits: certificate.credits,\r\n data: certificate.data,\r\n dateEarned,\r\n isExpired,\r\n providers,\r\n isExternal: activity.isexternal\r\n };\r\n });\r\n }\r\n\r\n public async currentState(): Promise {\r\n const cachedPromise = this._currentStatePromise;\r\n\r\n if (cachedPromise) {\r\n await cachedPromise;\r\n }\r\n\r\n return cachedPromise\r\n ? cachedPromise\r\n : (this._currentStatePromise = this.loadCurrentState());\r\n }\r\n\r\n public async removeUserActivity(\r\n contactId: string,\r\n activityId: string\r\n ): Promise {\r\n const endpoint = this._api.remove;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n try{\r\n await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n });\r\n }catch{\r\n console.error(\"Error removing user activity\");\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public async removeUserActivityNotifications(\r\n contactId: string,\r\n activityId: string\r\n ): Promise {\r\n const endpoint = this._api.removenotification;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n try{\r\n await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n });\r\n }catch{\r\n console.error(\"Error removing user activity\");\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public async saveCredits(\r\n credits: number,\r\n creditType: string | null,\r\n certTemplate: string | null,\r\n creditTypeInfo: string | null,\r\n dataArr: ReadonlyArray<{ name: string; value: string }>\r\n ): Promise {\r\n const updateInProgress = this._updatePromise;\r\n if (updateInProgress) {\r\n await updateInProgress;\r\n\r\n return this.saveCredits(\r\n credits,\r\n creditType,\r\n certTemplate,\r\n creditTypeInfo,\r\n dataArr\r\n );\r\n }\r\n\r\n return (this._updatePromise = this.saveCertificateUpdate( {\r\n certpath: null,\r\n credits,\r\n credittype: creditType,\r\n credittypeinfo: creditTypeInfo,\r\n data: dataArr,\r\n date: WyanokeUtil.GetDateISO8601(),\r\n templateid: certTemplate\r\n })\r\n );\r\n }\r\n\r\n public async startActivityStep(stepId: string): Promise {\r\n console.info(\"Getting current state...\");\r\n const state = await this.currentState();\r\n console.info(\"Finding step...\");\r\n const stepIdx = state.steps.findIndex(step => step.stepid === stepId);\r\n if (stepIdx === -1) {\r\n const msg = `Could not locate step ${stepId} in activity.`;\r\n throw new Error(msg);\r\n }\r\n\r\n const currentStep = state.steps[stepIdx];\r\n if (currentStep.complete) {\r\n console.warn(\"Step already complete\");\r\n\r\n return;\r\n }\r\n\r\n return this.updateSteps(stepId, false);\r\n }\r\n\r\n public async completeActivityStep(stepId: string): Promise {\r\n console.info(\"Getting current state...\");\r\n const state = await this.currentState();\r\n console.info(\"Finding step...\");\r\n const stepIdx = state.steps.findIndex(step => step.stepid === stepId);\r\n if (stepIdx === -1) {\r\n const msg = `Could not locate step ${stepId} in activity.`;\r\n throw new Error(msg);\r\n }\r\n\r\n const currentStep = state.steps[stepIdx];\r\n if (currentStep.complete) {\r\n console.warn(\"Step already complete\");\r\n\r\n return;\r\n }\r\n\r\n return this.updateSteps(stepId, true);\r\n }\r\n\r\n public async activityStepRedirectTarget(\r\n currentStepId: string\r\n ): Promise {\r\n const state = await this.currentState();\r\n\r\n // User is only allowed to view this page if the PREVIOUS state was\r\n // Complete. Otherwise, they are redirected to the last active state.\r\n\r\n const currentStepIdx = state.steps.findIndex(\r\n step => step.stepid === currentStepId\r\n );\r\n\r\n if (currentStepIdx === -1) {\r\n // Current step not found in list of steps.\r\n // User stored step data before this step was added.\r\n // Send them back to their active step.\r\n return UserActivityService.findActiveStepUrl(state);\r\n }\r\n\r\n const currentStep = state.steps[currentStepIdx];\r\n\r\n if (currentStep.complete) {\r\n // User has finished this step and can see it. Since the step has already\r\n // been marked as complete, there is nothing to do.\r\n return null;\r\n }\r\n\r\n const previousStep =\r\n currentStepIdx > 0 ? state.steps[currentStepIdx - 1] : null;\r\n\r\n if (previousStep === null) {\r\n // This is the first step\r\n // The user is allowed to see the current step.\r\n return null;\r\n }\r\n\r\n if (window.Activity && window.Activity.Price\r\n && window.Activity.Price !== 0) {\r\n const profile = await WyanokeUtil.loadUserProfile(true, true);\r\n if (profile) {\r\n let hasPurchased = false;\r\n const activityId = window.Activity &&\r\n window.Activity.Id ? window.Activity.Id : \"\";\r\n if(profile.purchased && activityId) {\r\n hasPurchased = profile.purchased.some(p => {\r\n return p.toLowerCase() === activityId.toLowerCase();\r\n });\r\n }\r\n\r\n if (hasPurchased || (profile.hasjrnlaccess\r\n && profile.hasjrnlaccess.toLowerCase() === \"true\")){\r\n // User either has journal access or has payed for the activity\r\n return null;\r\n }\r\n\r\n return state.steps[0].url;\r\n }\r\n }\r\n\r\n if (previousStep.complete){\r\n // user has completed the previous step\r\n return null;\r\n }\r\n\r\n // User cannot view this page because the previous step isn't marked as\r\n // complete. Send them to their last active step, or the first step if\r\n // they don't have an active step.\r\n return UserActivityService.findActiveStepUrl(state);\r\n }\r\n\r\n private resetPromises() : void {\r\n this._currentStatePromise = null;\r\n this._rawStatePromise = null;\r\n this._updatePromise = null;\r\n }\r\n\r\n private async updateSteps(activeStepId: string | null, setComplete: boolean): Promise {\r\n const updateInProgress = this._updatePromise;\r\n if (updateInProgress) {\r\n console.info(\"Update in progress...\");\r\n await updateInProgress;\r\n\r\n console.info(\"Update complete\");\r\n\r\n return this.updateSteps(activeStepId, setComplete);\r\n }\r\n console.info(\"Returning update lambda...\");\r\n\r\n let isOverviewStep = false;\r\n if(window && window.Activity && window.Activity.Steps\r\n && window.Activity.CurrentStepId) {\r\n const currentStep = window.Activity.Steps.find((step: any) =>\r\n step.Id === activeStepId);\r\n isOverviewStep = currentStep && currentStep.Type\r\n //master class polls are the first step, overviews are second\r\n ? currentStep.Type.toLowerCase().indexOf(\"overview\") > -1\r\n || currentStep.Type.toLowerCase() === \"healio master class poll\"\r\n || currentStep.Type.toLowerCase().indexOf(\"outcome survey\") > -1\r\n : isOverviewStep;\r\n }\r\n\r\n if(!isOverviewStep || setComplete) {\r\n return this._updatePromise = this.saveStepUpdate(activeStepId, setComplete);\r\n }\r\n\r\n return (this._updatePromise = this.saveState((model, user, setcomplete) => {\r\n UserActivityModel.updateFromContext(model, user);\r\n\r\n const userActivity = model.useractivity || {};\r\n const steps = userActivity.steps || [];\r\n\r\n if (!steps) {\r\n throw new Error(\"No steps have been set.\");\r\n }\r\n\r\n steps.forEach((step, index) => {\r\n if (step && step.stepid === activeStepId) {\r\n userActivity.steps[index].complete = setcomplete;\r\n userActivity.steps[index].timestamp = (new Date(Date.now())).toString();\r\n }\r\n });\r\n }, setComplete));\r\n }\r\n\r\n private async rawState(): Promise | null> {\r\n const cachedPromise = this._rawStatePromise;\r\n\r\n return cachedPromise\r\n ? cachedPromise\r\n : (this._rawStatePromise = this.loadRawState());\r\n }\r\n\r\n private async saveCertificateUpdate(\r\n certificate : {\r\n credits: any;\r\n credittype: string | null;\r\n credittypeinfo: string | null;\r\n certpath: string | null;\r\n data: ReadonlyArray<{ name: string; value: string }>;\r\n date: string;\r\n templateid: string | null;\r\n }\r\n ): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n const userActivity = (await this.rawState()) ||\r\n new UserActivityModel(profile);\r\n const timestamp = new Date().getTime();\r\n const certFileName = userActivity.useractivity.user.contactid.replace(\"-\", \"\").toLowerCase() +\r\n \"_\" +\r\n timestamp.toString();\r\n\r\n //const certFileNameHash = CryptoUtil.sha1Encrypt(certFileCombined).toString();\r\n\r\n certificate.certpath = (certFileName + \".pdf\");\r\n\r\n const body = {\r\n activityid : userActivity.useractivity.activity.activityid,\r\n certificate,\r\n contactid : userActivity.useractivity.user.contactid\r\n };\r\n\r\n await Promise.all([\r\n FetchUtil.sendMessage(this._api.updatecertificate, body)\r\n ]);\r\n\r\n this.resetPromises();\r\n }\r\n\r\n private async saveState(\r\n updateFn: (model: IUserActivityModel, user: IUserProfile, setcomplete: boolean) => void,\r\n setComplete: boolean\r\n ): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n const userActivity = ( await this.rawState() ||new UserActivityModel(profile));\r\n\r\n userActivity.useractivity.lastviewed = (new Date(Date.now())).toString();\r\n updateFn(userActivity, profile, setComplete);\r\n\r\n await Promise.all([\r\n FetchUtil.sendMessage(this._api.save, userActivity)\r\n ]);\r\n\r\n this.resetPromises();\r\n }\r\n\r\n private async saveStepUpdate(activeStepId: string | null, setComplete: boolean): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (!profile) {\r\n return;\r\n }\r\n\r\n const userActivity = (await this.rawState()) ||\r\n new UserActivityModel(profile);\r\n\r\n let currentStep =\r\n userActivity.useractivity.steps.find(step => step.stepid === activeStepId);\r\n if(!currentStep && window.Activity && window.Activity.Steps) {\r\n console.warn(\"Couldn't find step in user's steps. Creating from window Activity Step\");\r\n const currentActivityStep =\r\n window.Activity.Steps.find((step : any) => step.Id === activeStepId);\r\n if(!currentActivityStep) {\r\n\r\n return;\r\n }\r\n\r\n currentStep = {\r\n complete: false,\r\n stepid: currentActivityStep.Id ? currentActivityStep.Id : \"\",\r\n timestamp: (new Date(Date.now())).toString(),\r\n title: currentActivityStep.Title,\r\n type: currentActivityStep.Type,\r\n };\r\n } else if(!currentStep) {\r\n console.warn(\"Unable to update current step\");\r\n\r\n return;\r\n }\r\n currentStep.complete = setComplete;\r\n currentStep.timestamp = (new Date(Date.now())).toString();\r\n\r\n const body = {\r\n activityid : userActivity.useractivity.activity.activityid,\r\n contactid : userActivity.useractivity.user.contactid,\r\n step : currentStep\r\n };\r\n\r\n await Promise.all([\r\n FetchUtil.sendMessage(this._api.updatestep, body)\r\n ]);\r\n\r\n this.resetPromises();\r\n }\r\n\r\n private async loadCurrentState(): Promise {\r\n console.info(\"Loading current state...\");\r\n const updateInProgress = this._updatePromise;\r\n if (updateInProgress) {\r\n console.info(\"Update in progress, awaiting...\");\r\n await updateInProgress;\r\n console.info(\"Update complete\");\r\n\r\n return this.loadCurrentState();\r\n }\r\n console.info(\"Returning state as view model...\");\r\n\r\n return UserActivityModel.transformToViewModel(await this.rawState());\r\n }\r\n\r\n private async loadRawState(): Promise | null> {\r\n const activity = window.Activity;\r\n if (!activity || !activity.Id) {\r\n console.warn(\"No global activity context.\");\r\n\r\n return null;\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile) {\r\n return null;\r\n }\r\n\r\n const contactId = profile.contactid || \"\";\r\n const activityId = activity.Id;\r\n\r\n const endpoint = this._api.load;\r\n\r\n if (!endpoint) {\r\n throw new Error(\"Could not resolve endpoint\");\r\n }\r\n\r\n const values = {\r\n activityId,\r\n contactId,\r\n encodedActivityId: encodeURIComponent(activityId),\r\n encodedContactId: encodeURIComponent(contactId)\r\n };\r\n\r\n const url = StringUtil.supplant(endpoint.url, values) || \"\";\r\n\r\n const raw = (await FetchUtil.sendMessage({\r\n method: endpoint.method,\r\n url\r\n })) as (IUserActivityModel[\"useractivity\"])[];\r\n\r\n if (!Array.isArray(raw)) {\r\n const msg = \"Unexpected response from server\";\r\n console.warn(msg, raw);\r\n throw new Error(msg);\r\n }\r\n\r\n const useractivity = raw[0];\r\n\r\n return useractivity ? { useractivity } : null;\r\n }\r\n}\r\n"]}