{"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-uncurry-this.js","../../../../node_modules/core-js/internals/indexed-object.js","../../../../node_modules/core-js/internals/function-bind-context.js","../../../../node_modules/core-js/internals/to-object.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-state.js","node_modules/core-js/internals/internal-metadata.js","../../../../node_modules/core-js/internals/descriptors.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/define-built-in.js","../../../../node_modules/core-js/internals/global.js","../../../../node_modules/core-js/internals/export.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.map.js","../../../../node_modules/core-js/modules/es.weak-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/is-pure.js","node_modules/core-js/internals/function-name.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/path.js","node_modules/core-js/internals/well-known-symbol-wrapped.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-get-own-property-names.js","../../../../node_modules/core-js/internals/uid.js","../../../../node_modules/core-js/internals/object-is-extensible.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","../../../../node_modules/request-animation-frame-polyfill/dist/index.umd.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/eduActivity/ActivityStepNavigation.ts","components/eduActivity/Certificate.ts","components/eduActivity/ClaimCredit.ts","components/eduActivity/CmeActivityContent.ts","components/eduActivity/CmeAttestation.ts","components/eduActivity/CmeHint.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","models/QuestionGroup/QuestionGroupModel.ts","components/healioGlobal/HealioErrorModal.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/topicFilter/TopicFilter.ts","components/eduLanding/ActivityLoader.ts","components/healioGlobal/SpecialtySelect.ts","components/edu/FindRequirements.ts","components/myCme/FilterSelect.ts","components/edu/GoalChart.ts","components/edu/NotificationBox.ts","components/healioGlobal/SubSpecialtySelect.ts","components/genericLanding/LandingCardLoader.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/hss/CollapseCardSection.ts","components/hss/HssClickTag.ts","components/hss/HssPollCard.ts","models/HssPoll/PollCompleteModel.ts","healio-custom-scripts-newsarea.ts","components/hss/HssQuizCard.ts","components/lmsLanding/LMSTopicSelect.ts","components/myCme/CertDownload.ts","components/myCme/MyCompletedDisplay.ts","components/myCme/GoalProgressModals.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/ReminderUnsubscribe.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-cmearea.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/TopicListService.ts","service/UserGoalsService.ts","service/TopicAlertService.ts","service/UserProfileService.ts","service/UserLoginService.ts","service/TranscriptService.ts","service/QuestionAnswerService.ts","service/QBankService.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","NATIVE_BIND","FunctionPrototype","Function","fn","apply","arguments","$Object","split","propertyIsEnumerable","aCallable","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","store","wmget","wmhas","wmset","STATE","NATIVE_WEAK_MAP","createNonEnumerableProperty","OBJECT_ALREADY_INITIALIZED","WeakMap","metadata","facade","enforce","setMetadata","METADATA","objectID","id","weakData","$","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","meta","enable","REQUIRED","getOwnPropertyNames","splice","stat","forced","getWeakData","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","makeBuiltIn","defineGlobalProperty","simple","unsafe","nonConfigurable","nonWritable","check","globalThis","copyConstructorProperties","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","targetProperty","dontCallGetSet","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","internalObjectKeys","postfix","random","ARRAY_BUFFER_NON_EXTENSIBLE","$isExtensible","FAILS_ON_PRIMITIVES","$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","_typeof","polyfillRaf","currentTime","Date","delay","gap","lastTime","uId","reservedCBs","copied","performance","nowOffset","polyfillCaf","vp","getRequestAnimationFrame","arr","predicate","raf","caf","requestAnimationFrame","cancelAnimationFrame","default","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","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","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","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","ItemState","ActivityStepNavigation","_lastKnownPositions","anchorTop","footerTop","scroll","stepperHeight","_stickyAnchor","_stepper","handleScroll","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","CmeHint","questionGroupSelector","hintPosttestHintStorage","questionGroupId","questionId","questionHintsClicked","questionGroupElement","questiongroupId","hintButton","questionElement","showHint","showHintFromClick","aleadyShown","hintText","nextElementSibling","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","_id","_name","_type","_minscore","_userid","_activityid","_attempt","_attemptdate","_complete","attemptdate","firstanswers","showModal","_text","_key","ProgressBar","updateProgressBar","progress","laststep","QuestionGroup","questionGroupName","singletake","correctClass","incorrectClass","incompleteClass","base10","fa","qg","existingQuestionGroup","existingQuestions","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","_lastSelectedValue","_selectedTopics","_specialtyId","_topicMenuContainer","_topicMenuTemplate","_topicChipsContainer","_topicChipsTemplate","_clearButton","_applyButton","SpecialtySelectInitEvent","handleSpecialtyChange","handleMenuApply","handleClearAll","topicListService","getTopicsBySpecialty","cookieValue","selectedTopics","updateTopics","specialtyChangeEvent","newValue","topicName","updateChips","showHideClearFilter","raiseChangeEvent","clearCheckboxes","chip","removeChip","chipMenuItem","selectedTopicIds","filterValue","cname","ActivityLayout_1","_working","_paginationContainer","_loadMoreTemplate","handleClick","handleLoad","currentPage","totalPages","cursor","hasAttribute","loadMore","loadPage","renderLoadMore","insertAfter","ChangePageEvent","attemptUrlPatternMatch","referrer","attemptUserProfileMatch","handleSpecialtyClick","mobileH1","getCurrentDropDownValue","specialtyHealder","specialtyElements","urlPattern","selected","dropdown","ignorePaths","rootPath","ds","lc","specialties","setSelectedItem","newLocation","hasSpecialty","contentspecialty","maps","FilterSelect_1","FindRequirements","goButton","addButton","findButton","backButton","filters","firstFilter","findsection","listsection","reqcontent","contextid","recosection","FilterSelectChangedEvent","handleSelectChange","showFind","goBack","evgo","handleGoButton","evadd","handleAddButton","history","back","specs","si","ContextItemId","SpecialtyIds","StateIds","findRequirementsService","Event","showList","copy","cloneNode","statebuttonwrap","statebutton","removebutton","removeFilter","dc","FilterSelect","handleItemClick","params","URL","searchParams","btn","decodeURI","selectedItem","filterSelectName","changeSelectedItem","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","_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","pc","elemId","targetElem","ReloadComponents","EmailSignUpSuccessModal_1","EmailSignUp","invalidClass","_subscribe","handleSubscribe","emailInput","specialtyEmailList","selectedIndex","isValidEmail","signUpRequest","eolist","nwspec","sendnotification","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","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","questionElementType","answerElement","confscaleinputs","confidenceInput","answerClick","confidenceAnswers","handleConfidenceClick","btnNextQuestions","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","final","elem","sibs","nodeType","htmlElem","myParam","inprogress","MasterClassQuestionGroupPretest","questionsAnswered","ratingInputChanged","btnRationalDivs","handlePostTestButton","displayQuestion","btnNextQuestion","MasterClassRelatedContent","getRelatedContent","relatedContent","MasterClassTrophyCase","awardedBadges","badgeId","MasterClassVideo","videoStep","pointsEarned","HomeSpecialtySelect","CollapseCardSection","_collapseButton","_collapsedButtonText","collapsedButtonText","_expandedButtonText","expandedButtonText","ensureCollapseButtonIsInView","handleCollapseButtonClick","btnClassToAdd","btnClassToRemove","HssClickTag","clickTags","clickTag","anchorElement","TrackModule","FullModuleName","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","collapseButton","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","LMSTopicSelect","topicList","topicButton","currentPath","activetopic","MyCompletedDisplay_1","CertDownload","checkAllCheckbox","optionModal","emailField","handleDownloadClick","handleSelectAllClick","MyCompletedDisplay","ActivityListChangedEvent","handleListUpdate","downloadButton","emailButton","handleEmailButtonClick","handleDownloadButtonClick","handleEmailFieldChange","handleItemCheck","updateStatus","activityCheckbox","checkedCount","getPathCallback","handleGetPathError","checkQueue","hasQueue","certs","certelements","certelement","cert","certTitle","certSource","certFile","file","zipRequest","certlist","overwrite","yyyy","mm","dd","hh","mn","ss","formattedToday","padStart","formattedTime","namepart","friendlyname","resp","activityList","sizeWarning","bundlename","meh","handleDownloadModalClose","certlisting","emailZip","successModal","UserStatBox_1","MyCompleted_1","MyCompleted","LoadMoreButton","Container","_activity","_externalActivity","_activityTitle","_lmsname","_container","_creditTypeWithNotice","_creditTypeWithoutNotice","_disabledActivityTitle","_certRemoveModal","attachEvents","userStatBox","UserStatBox","setBodySize","getCurrentHeight","mobileExpandCompletedList","UserStatBoxLoadEvent","resetRemoveModal","maxvis","viewMore","collapsedStyle","viewMoreCollapsedStyle","viewMoreStartLength","dataidx","datum","resolveActivityTitle","lmsname","resolveLMSName","certificateUrl","resolveCreditType","resolveCredits","dateEarned","resolveDateEarned","provider","resolveProviders","isExternal","externalActivityTemplate","appendTo","popover","trigger","handleLineRemoveClick","expandable","expandedStyle","viewMoreExpandedStyle","cl","panel","handleModalRemoveClick","errorcol","removeUserActivity","removeRow","providers","formatted","creditNotice","parseFloat","currentValue","actUrl","isExpired","statBoxHeight","myCompleted","myCompletedHeight","clientHeight","header","newHeight","table","GoalProgressModals","CreditChanged","_modals","CookiePrefix","QueryString","modalid","goalModal","modals","handleModalShown","handleCreditUpdate","vr","goal","cmegoals","UserGoal","modalsSeen","EndDate","userSetting","modalshowing","_isShown","cmeGoals","userGoal","StartDate","goalCompletion","GoalCompletion","modalList","modalcredits","m1","m2","currentModal","datespan","startDate","endDate","creditspan","goalCredits","MyActivities","setCardBodySize","heightDiff","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","inProgressDiv","emptyMessageDiv","MyCMESaved","savedActivities","savedResources","SavedUserResources","savedResourceItems","renderResourceItemsFromTemplate","cmeResourcesDiv","SavedUserActivities","mySavedDiv","savedActivityItems","slidingElementMobile","MyCmeRibbon","TranscriptModal_1","_alreadyClicked","_generateButton","handleGenerateTranscript","transcriptStart","transcriptEnd","updateTable","startDatePicker","selectedDate","endDatePicker","srcFilter","creditFilter","allSelector","getAllSelector","updateFilters","myCme","filterUserActivities","displays","updateOptions","disp","transcriptService","TranscriptModal","outerHTML","transcript","createTranscript","_showPromise","_transcript","handlePrintTranscript","handleEmailTranscript","changeState","emailAddress","visibleFor","visibleInState","pdfUrl","form","checkValidity","ReminderUnsubscribe","_reminders","handleUnsubscribeRequest","_unsubContainer","_cancelContainer","handleUndoRequest","userGoalsService","Reminders","startdate","enddate","reminders","MySavedPages","itemId","savedItem","ArticleContent","lightboxImages","componentId","crypto","randomUUID","EmailTopicAlert","_listTitle","_listId","_isSubscribed","topicAlertStorage","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","listid","savedTopic","handleSuccess","handleError","crmHidden","topicAlertRegisterRequest","registerResponse","storeTopicListsForNonUsers","currentSubDomain","healioSubDomain","isUser","knownLanguage","unknownLanguage","storedIds","NextArticle","_nextArticleRequested","Visitor","botCheck","isbot","articleFooter","recommendedUrl","getRecommendedUrl","currentDocId","nextArticleId","nextArticleUrl","myHeaders","Headers","ok","articleContainers","lastArticleContainer","articleInnerContentDiv","gradientDiv","continueReadingButton","continueReadingUrl","tempDiv","articleContainer","nextArticleClass","articleContentDiv","emailTopicAlertComponents","topicAlertCopmonent","perspectiveLinks","perspectAElement","mobileTrustBox","leftColumn","articleTop","newLastArticleContainer","articleTopDiv","loadNextArticleComponents","nextArticleElement","recommendedClass","firstRecommended","recommendedAElement","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","selectedValue","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","specname","userSpec","specialtyHref","newTarget","atag","NewsLandingRedirect","checkForRedirect","SiteMapSpecialtyFilter","applyButton","allSpec","HealioMinuteSignUp","healioMinuteSubscribedKey","_modalId","_settingsId","modalId","listId","settingsId","subscribeSpans","subscribedSpans","handleEmailChanged","userHasSubscribed","handleAlreadySubscribed","emailInputParent","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","_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","TopicId","TopicName","CreditTypeId","CreditTypeName","cacheHit","encodedSpecialtyId","mapTopics","_topicsAndCreditTypesCache","credittypes","mapCreditTypes","_currentTopicAlertPromise","loadRequest","GetListForTopicEncResult","registerRequest","CheckEmailWithShortRegOpsAddToListEncResult","saveRequest","ManageListMemberEncResult","_api","userSettings","api","fieldIds","encodedEmail","encodedFilename","filename","DatasourceId","Email","FileName","TranscriptBody","PdfUrl","encodedQuestionGroupId","questiongroup","anonymousid","quizid","timeremaining","questionItemId","answerItemId","questionitemid","AnswerItemId","Status","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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","file":"healio-custom-scripts-cmearea.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 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 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 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 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 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","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","'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 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 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 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.map.constructor');\n","// TODO: Remove this module from `core-js@4` since it's replaced to module below\nrequire('../modules/es.weak-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","module.exports = false;\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","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 global = require('../internals/global');\n\nmodule.exports = global;\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\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 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","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 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","/* 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","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global['request-animation-frame-polyfill'] = {}));\n})(this, function (exports) {\n 'use strict';\n /**\n * Thanks for following contributor of codes\n * https://gist.github.com/1866474\n * http://paulirish.com/2011/requestanimationframe-for-smart-animating/\n * http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating\n * https://github.com/Financial-Times/polyfill-library/blob/master/polyfills/requestAnimationFrame/polyfill.js\n **/\n\n var uId = 1;\n\n var uniqueId = function uniqueId() {\n return uId++;\n }; // We use `self` instead of `window` for `WebWorker` support.\n\n\n var root = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) === 'object' && self.self == self ? self : (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) === 'object' && global.global == global ? global : {};\n var nowOffset = Date.now(); // use performance api if exist, otherwise use Date.now.\n // Date.now polyfill required.\n\n var pnow = function pnow() {\n if (root.performance && typeof root.performance.now === 'function') {\n return root.performance.now();\n } // fallback\n\n\n return Date.now() - nowOffset;\n };\n\n var reservedCBs = {};\n var lastTime = Date.now();\n\n var polyfillRaf = function polyfillRaf(callback) {\n if (typeof callback !== 'function') {\n throw new TypeError(callback + ' is not a function');\n }\n\n var currentTime = Date.now();\n var gap = currentTime - lastTime;\n var delay = gap > 16 ? 0 : 16 - gap;\n var id = uniqueId();\n reservedCBs[id] = callback; // keys(reservedCBs).length > 1 의미는 이미 setTimeout 이 걸려있는 경우.\n // 함께 callback 이 실행될 수 있게 reservedCBs 에만 추가해주고 return\n\n if (Object.keys(reservedCBs).length > 1) return id;\n setTimeout(function () {\n lastTime = currentTime;\n var copied = reservedCBs;\n reservedCBs = {};\n Object.keys(copied).forEach(function (key) {\n return copied[key](pnow());\n });\n }, delay);\n return id;\n };\n\n var polyfillCaf = function polyfillCaf(id) {\n delete reservedCBs[id];\n };\n\n var vendorPrefixes = ['', 'webkit', 'moz', 'ms', 'o'];\n\n var getRequestAnimationFrame = function getRequestAnimationFrame(vp) {\n if (typeof vp !== 'string') return polyfillRaf;\n if (vp === '') return root['requestAnimationFrame'];\n return root[vp + 'RequestAnimationFrame'];\n };\n\n var getCancelAnimationFrame = function getCancelAnimationFrame(vp) {\n if (typeof vp !== 'string') return polyfillCaf;\n if (vp === '') return root['cancelAnimationFrame'];\n return root[vp + 'CancelAnimationFrame'] || root[vp + 'CancelRequestAnimationFrame'];\n };\n\n var find = function find(arr, predicate) {\n var i = 0;\n\n while (arr[i] !== void 0) {\n if (predicate(arr[i])) return arr[i];\n i = i + 1;\n }\n };\n\n var vp = find(vendorPrefixes, function (vp) {\n return !!getRequestAnimationFrame(vp);\n });\n var raf = getRequestAnimationFrame(vp);\n var caf = getCancelAnimationFrame(vp); // References:\n // Browser export as a global\n\n root.requestAnimationFrame = raf;\n root.cancelAnimationFrame = caf; // Node Export\n\n if (typeof module !== \"undefined\" && module.exports) {\n module.exports = {\n requestAnimationFrame: raf,\n cancelAnimationFrame: caf\n };\n }\n\n var index = {\n requestAnimationFrame: raf,\n cancelAnimationFrame: caf\n };\n /*\n * Below 4 methods should be available on consumer side:\n *\n * \n * requestAnimationFrame, cancelAnimationFrame\n *\n * const {requestAnimationFrame, cancelAnimationFrame} require('request-animation-frame-polyfill')\n * const rafp require('request-animation-frame-polyfill')\n * rafp.requestAnimationFrame, rafp.cancelAnimationFrame\n *\n * import rafp from 'request-animation-frame-polyfill'\n * rafp.requestAnimationFrame, rafp.cancelAnimationFrame\n *\n * import {requestAnimationFrame, cancelAnimationFrame} from 'request-animation-frame-polyfill'\n * import * as rafp from 'request-animation-frame-polyfill'\n * rafp.requestAnimationFrame, rafp.cancelAnimationFrame\n */\n\n exports.cancelAnimationFrame = caf;\n exports.default = index;\n exports.requestAnimationFrame = raf;\n Object.defineProperty(exports, '__esModule', {\n value: true\n });\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 { 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 { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { LocalStorageUtil } from \"../../util/LocalStorageUtil\";\r\n\r\nexport class CmeHint extends Component {\r\n private readonly questionGroupSelector: string = \"[data-questiongroup-id]\"\r\n private readonly dataStore = \"CmePosttestHints\";\r\n private hintPosttestHintStorage: LocalStorageUtil | null = null;\r\n private questionGroupId: string | undefined = \"\"\r\n private questionId: string | undefined = \"\"\r\n public questionHintsClicked: string[] = []\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n const questionGroupElement = document.querySelector(this.questionGroupSelector);\r\n this.questionGroupId = questionGroupElement?.dataset.questiongroupId;\r\n this.hintPosttestHintStorage = new LocalStorageUtil(this.dataStore);\r\n\r\n if (this.questionGroupId)\r\n this.questionHintsClicked = this.hintPosttestHintStorage.getItem(this.dataStore, [this.questionGroupId]) ?? [];\r\n\r\n const hintButton = this._element.querySelector(\".hint-link\");\r\n const questionElement = hintButton?.closest(\"[data-question-id]\");\r\n this.questionId = questionElement?.dataset.questionId;\r\n // show hint and exit\r\n if(hintButton && this.questionId && this.questionHintsClicked.indexOf(this.questionId) > -1){\r\n this.showHint(hintButton, true);\r\n return;\r\n }\r\n\r\n hintButton?.addEventListener('click', ev => this.showHintFromClick(ev))\r\n }\r\n\r\n private showHintFromClick(ev: Event): void {\r\n const hintButton = ev.target as HTMLButtonElement;\r\n this.showHint(hintButton);\r\n }\r\n\r\n private showHint(hintButton: HTMLButtonElement, aleadyShown=false): void {\r\n const hintText = hintButton.nextElementSibling; // Find the hint text related to this button\r\n if (hintText && hintText.classList.contains('hint-text')) {\r\n hintText.classList.remove('d-none'); // Show the related hint\r\n hintButton.style.display = 'none'; // Hide the clicked button\r\n }\r\n\r\n if (this.questionGroupId && this.questionId && !aleadyShown) {\r\n this.questionHintsClicked.push(this.questionId)\r\n this.hintPosttestHintStorage?.insertItem(this.dataStore, [this.questionGroupId], this.questionHintsClicked)\r\n }\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"CmeHint\", CmeHint);\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 { 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 { 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 { 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 { 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 { 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 { 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 { Component } from \"../base/Component\";\r\nimport { ComponentFactory } from \"../../service/ComponentFactory\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { FilterSelect } from \"../myCme/FilterSelect\";\r\nimport { IFindRequirementsLoadRequest } from \"../../models/CMERequirements/IFindRequirementsLoadRequest\";\r\nimport { IFindRequirementsLoadResponse } from \"../../models/CMERequirements/IFindRequirementsLoadResponse\";\r\n\r\nexport class FindRequirements extends Component {\r\n public static goButton: HTMLElement | null = null;\r\n public static addButton: HTMLElement | null = null;\r\n public static filters: HTMLElement | null = null;\r\n public static firstFilter: HTMLElement | null = null;\r\n public static findsection: HTMLElement | null = null;\r\n public static listsection: HTMLElement | null = null;\r\n public static reqcontent: HTMLElement | null = null;\r\n public static findButton: HTMLElement | null = null;\r\n public static backButton: HTMLElement | null = null;\r\n public static contextid: string | null = null;\r\n public static recosection: HTMLElement | null = null;\r\n\r\n public static readonly FilterSelectChangedEvent: string =\r\n FilterSelect.FilterSelectChangedEvent;\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n FindRequirements.goButton = (element.querySelector(\".btn-go\") || null);\r\n FindRequirements.addButton = (element.querySelector(\".btn-add-more\") || null);\r\n FindRequirements.findButton = (element.querySelector(\".btn-show-find\") || null);\r\n FindRequirements.backButton = (element.querySelector(\".btn-go-back\") || null);\r\n FindRequirements.filters = (element.querySelector(\".requirements--filters\") || null);\r\n FindRequirements.firstFilter = (element.querySelector(\".first-group\") || null);\r\n FindRequirements.findsection = (element.querySelector(\"#findrequirements\") || null);\r\n FindRequirements.listsection = (element.querySelector(\"#seerequirements\") || null);\r\n FindRequirements.reqcontent = (element.querySelector(\".requirements-content-cards\") || null);\r\n FindRequirements.contextid = (element.getAttribute(\"data-context-id\") || null);\r\n FindRequirements.recosection = (document.querySelector(\".my-healio--recommended\") || null);\r\n\r\n element.addEventListener(FindRequirements.FilterSelectChangedEvent, ev => { this.handleSelectChange(ev); });\r\n\r\n if (FindRequirements.findButton !== null) {\r\n FindRequirements.findButton.addEventListener(\"click\", this.showFind)\r\n }\r\n\r\n if (FindRequirements.backButton !== null) {\r\n FindRequirements.backButton.addEventListener(\"click\", this.goBack)\r\n }\r\n\r\n if (FindRequirements.goButton !== null) {\r\n FindRequirements.goButton.addEventListener(\"click\", evgo => { this.handleGoButton(evgo); });\r\n }\r\n\r\n if (FindRequirements.addButton !== null) {\r\n FindRequirements.addButton.addEventListener(\"click\", evadd => { this.handleAddButton(evadd); });\r\n }\r\n\r\n // call show find to ensure visibile states\r\n this.showFind();\r\n }\r\n\r\n private goBack() {\r\n history.back();\r\n }\r\n\r\n private showList() {\r\n if (FindRequirements.recosection !== null) {\r\n FindRequirements.recosection.classList.remove(\"hidden\")\r\n }\r\n FindRequirements.findsection?.classList.add(\"hidden\");\r\n FindRequirements.listsection?.classList.remove(\"hidden\");\r\n }\r\n\r\n private showFind() {\r\n if (FindRequirements.reqcontent !== null) {\r\n FindRequirements.reqcontent.innerHTML = \"\";\r\n }\r\n if (FindRequirements.recosection !== null) {\r\n FindRequirements.recosection.classList.add(\"hidden\")\r\n }\r\n FindRequirements.findsection?.classList.remove(\"hidden\");\r\n FindRequirements.listsection?.classList.add(\"hidden\");\r\n }\r\n\r\n private handleSelectChange(ev: Event): void {\r\n FindRequirements.addButton?.classList.remove(\"disabled\");\r\n FindRequirements.addButton?.removeAttribute(\"aria-disabled\");\r\n FindRequirements.goButton?.classList.remove(\"disabled\");\r\n FindRequirements.goButton?.removeAttribute(\"aria-disabled\");\r\n this._element.querySelectorAll(\".error\").forEach(function (e) { e?.classList.add(\"hidden\"); });\r\n }\r\n\r\n private handleGoButton(ev: Event): void {\r\n const button = (ev.target as HTMLElement);\r\n if (button.classList.contains(\"disabled\")) {\r\n button.parentElement?.querySelector(\".error\")?.classList.remove(\"hidden\");\r\n return;\r\n }\r\n let states: Array = [];\r\n let specs: Array = [];\r\n document.querySelectorAll(\".dropdown-item.active\").forEach(function (si) {\r\n let el = (si as HTMLElement);\r\n if (el.closest(\"[data-filter-select-name='state']\")) {\r\n let id: string | null = (el.getAttribute(\"data-state-id\") || null);\r\n if (id !== null && !states.some(s => { return s === id; })) {\r\n states.push(id);\r\n }\r\n }\r\n\r\n if (el.closest(\"[data-filter-select-name='specialty']\")) {\r\n let id: string | null = (el.getAttribute(\"data-specialty-id\") || null);\r\n if (id !== null && !specs.some(function (s) { return s === id; })) {\r\n specs.push(id);\r\n }\r\n }\r\n });\r\n\r\n\r\n const ContextItemId = (FindRequirements?.contextid || \"11111111-1111-1111-1111-111111111111\");\r\n const SpecialtyIds = (specs || []);\r\n const StateIds = (states || []);\r\n\r\n const data: IFindRequirementsLoadRequest = {\r\n ContextItemId,\r\n SpecialtyIds,\r\n StateIds\r\n };\r\n\r\n const context = this._pageContext;\r\n const service = context ? context.findRequirementsService : null;\r\n if (!service) {\r\n console.warn(\"No Service available\");\r\n\r\n return;\r\n }\r\n\r\n service.load(data, (response: IFindRequirementsLoadResponse) => {\r\n if (response.cards.length > 0) {\r\n if (FindRequirements.reqcontent && FindRequirements.reqcontent !== null) {\r\n FindRequirements.reqcontent.innerHTML = response.cards;\r\n const evt = new Event(\"RequirementsLoaded\");\r\n this._element.dispatchEvent(evt);\r\n this.showList();\r\n }\r\n }\r\n });\r\n }\r\n\r\n private handleAddButton(ev: Event): void {\r\n const button = (ev.target as HTMLElement);\r\n if (button.classList.contains(\"disabled\")) {\r\n button.parentElement?.querySelector(\".error\")?.classList.remove(\"hidden\");\r\n return;\r\n }\r\n let copy = FindRequirements.firstFilter?.cloneNode(true) as HTMLElement;\r\n if (copy !== undefined && copy !== null) {\r\n copy.classList.remove(\"first-group\");\r\n let statebuttonwrap = (copy.querySelector(\"[data-filter-select-name='state']\") || null);\r\n if (statebuttonwrap !== null) {\r\n let statebutton = (statebuttonwrap.querySelector(\"button\") || null);\r\n if (statebutton !== null) {\r\n statebutton.textContent = \"Select\"\r\n }\r\n }\r\n let removebutton = document.createElement('div');\r\n removebutton.classList.add(\"form-group\")\r\n removebutton.classList.add(\"delete\");\r\n removebutton.innerHTML = '';\r\n removebutton.addEventListener(\"click\", ev => { this.removeFilter(removebutton); });\r\n copy.append(removebutton);\r\n if (FindRequirements.filters !== null) {\r\n FindRequirements.filters.append(copy);\r\n copy.querySelectorAll(\"[data-component]\").forEach(dc => { new FilterSelect((dc as HTMLElement)) });\r\n }\r\n }\r\n }\r\n\r\n public removeFilter(el: HTMLElement): void {\r\n el.closest(\".requirements--btn-group\")?.remove();\r\n }\r\n}\r\n\r\n\r\nComponentFactory.registerComponent(\"FindRequirements\", FindRequirements);","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 { 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 { 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 { 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 { 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 { 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\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { DomUtil } from \"../../util/DomUtil\";\r\n\r\n// tslint:disable:max-file-line-count\r\nexport class HssClickTag 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 clickTags = DomUtil.queryAll(this._element, \"a[data-href]\");\r\n\r\n clickTags.forEach(clickTag => {\r\n if(clickTag.dataset.href && clickTag.dataset.href.length > 0){\r\n clickTag.addEventListener(\"click\", ev => this.handleClick(ev))\r\n }\r\n })\r\n\r\n }\r\n\r\n private async handleClick(ev: Event): Promise {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n let anchorElement = ev.currentTarget as HTMLAnchorElement;\r\n if(anchorElement.dataset.href){\r\n\r\n if(typeof(window.TrackModule) === 'function' && typeof(window.FullModuleName) === 'function') {\r\n var module = window.FullModuleName(anchorElement);\r\n window.TrackModule(anchorElement, module, 'Link Clicked', anchorElement.dataset.href, 0);\r\n }\r\n\r\n if(anchorElement.target === '_blank') {\r\n window.open(anchorElement.dataset.href, \"_blank\");\r\n } else {\r\n window.location.href = anchorElement.dataset.href\r\n }\r\n }\r\n }\r\n}\r\nComponentFactory.registerComponent(\"HssClickTag\", HssClickTag);\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\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\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { MyCompletedDisplay } from \"./MyCompletedDisplay\";\r\nimport { ICertificatePathResponse } from \"../../models/Certificate/ICertificatePathResponse\";\r\nimport { ICertificateZipRequest } from \"../../models/Certificate/ICertificateZipRequest\";\r\nimport { ICertificateEmailZipRequest } from \"../../models/Certificate/ICertificateEmailZipRequest\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { ModalEventHandler } from \"bootstrap\";\r\n\r\nexport class CertDownload extends Component {\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n element\r\n .querySelectorAll(\"[data-download-btn]\")\r\n .forEach(el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleDownloadClick(ev)));\r\n\r\n element\r\n .querySelectorAll(\"#selectAll\")\r\n .forEach(el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleSelectAllClick(ev)));\r\n\r\n element.addEventListener(MyCompletedDisplay.ActivityListChangedEvent,\r\n ev => this.handleListUpdate(ev));\r\n\r\n\r\n }\r\n\r\n private checkAllCheckbox = this._element.querySelector(\"#selectAll\") as HTMLInputElement;\r\n\r\n private optionModal = (document.getElementById(\"CMEDownloadModal\") || null) as HTMLElement;\r\n\r\n private emailField = (document.getElementById(\"certificateEmail\") || null) as HTMLInputElement;\r\n\r\n public async init(): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n\r\n if (profile?.email && this.emailField) {\r\n if (profile.email.length > 0) {\r\n this.emailField.value = profile.email;\r\n (this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement)?.classList.remove(\"disabled\");\r\n }\r\n }\r\n\r\n const downloadButton = this.optionModal.querySelector(\".btn-download\") as HTMLAnchorElement;\r\n const emailButton = this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement;\r\n\r\n emailButton.addEventListener(\"click\", ev => this.handleEmailButtonClick(ev));\r\n downloadButton.addEventListener(\"click\", ev => this.handleDownloadButtonClick(ev));\r\n\r\n\r\n this.emailField.addEventListener(\"change\", ev => this.handleEmailFieldChange(ev));\r\n }\r\n\r\n private handleListUpdate(ev: Event): void {\r\n this._element.querySelectorAll(\"[data-activity-select]\").forEach(el => el.addEventListener(\r\n \"click\",\r\n ev => this.handleItemCheck(ev)));\r\n\r\n this.updateStatus();\r\n }\r\n\r\n private handleItemCheck(ev: Event): void {\r\n this.updateStatus();\r\n }\r\n\r\n private handleSelectAllClick(ev: Event): void {\r\n const checkAllCheckbox = ev.target as HTMLInputElement;\r\n\r\n this._element.querySelectorAll(\"[data-activity-select]\").forEach(el => {\r\n const activityCheckbox = el as HTMLInputElement\r\n\r\n activityCheckbox.checked = checkAllCheckbox.checked;\r\n });\r\n\r\n this.updateStatus();\r\n }\r\n\r\n private updateStatus(): void {\r\n const checkedCount = this._element.querySelectorAll(\"[data-activity-select]:checked\").length;\r\n const totalCount = this._element.querySelectorAll(\"[data-activity-select]\").length;\r\n\r\n this._element.querySelectorAll(\"[data-activity-select]\").forEach(el => {\r\n const target = el as HTMLInputElement\r\n const activity = target.closest(\".cert-listing\");\r\n\r\n if (target.checked) {\r\n activity?.setAttribute(\"data-queued\", \"1\")\r\n } else {\r\n activity?.removeAttribute(\"data-queued\");\r\n }\r\n });\r\n\r\n\r\n this._element.querySelectorAll(\"[data-download-count]\").forEach(el => {\r\n el.textContent = checkedCount.toString();\r\n });\r\n\r\n if (checkedCount > 0) {\r\n\r\n this._element.querySelectorAll(\".error\").forEach(el => {\r\n const error = el as HTMLElement;\r\n error.classList.add(\"hidden\");\r\n });\r\n\r\n if (checkedCount === totalCount) {\r\n this.checkAllCheckbox.checked = true;\r\n } else {\r\n this.checkAllCheckbox.checked = false;\r\n }\r\n\r\n this._element.querySelectorAll(\"[data-download-btn]\").forEach(el => {\r\n el.classList.remove(\"disabled\");\r\n });\r\n } else {\r\n this.checkAllCheckbox.checked = false;\r\n\r\n this._element.querySelectorAll(\"[data-download-btn]\").forEach(el => {\r\n el.classList.add(\"disabled\")\r\n });\r\n\r\n }\r\n }\r\n\r\n private handleDownloadClick(ev: Event): void {\r\n const button = (ev.target as HTMLElement);\r\n if(button.classList.contains(\"disabled\") ){\r\n button.parentElement?.querySelector(\".error\")?.classList.remove(\"hidden\");\r\n return;\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 certificateService = context.certificateService;\r\n if (!certificateService) {\r\n throw new Error(\"No certificate service\");\r\n }\r\n\r\n this._element.querySelectorAll(\"[data-activity-select]:checked\").forEach(el => {\r\n const target = el as HTMLInputElement\r\n const activity = target.closest(\".cert-listing\") as HTMLElement;\r\n const activityId = (activity.dataset.activityId || \"\");\r\n\r\n certificateService.path(activityId).then(r => { this.getPathCallback(r); }).catch(err => { this.handleGetPathError(activityId, err); });\r\n\r\n });\r\n\r\n }\r\n\r\n private getPathCallback(handle: ICertificatePathResponse): void {\r\n const activityId = handle.activityId;\r\n const name = (handle.name || null);\r\n const activity = this._element.querySelector(`[data-activity-id=\"${activityId}\"]`) as HTMLElement;\r\n activity?.removeAttribute(\"data-queued\");\r\n if (name !== null) {\r\n activity?.setAttribute(\"data-cert-file\", name);\r\n }\r\n this.checkQueue();\r\n }\r\n\r\n private handleGetPathError(activityId: string, error: any): void {\r\n const activity = this._element.querySelector(`[data-activity-id=\"${activityId}\"]`) as HTMLElement;\r\n activity?.removeAttribute(\"data-queued\");\r\n this.checkQueue();\r\n }\r\n\r\n private checkQueue(): void {\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 certificateService = context.certificateService;\r\n if (!certificateService) {\r\n throw new Error(\"No certificate service\");\r\n }\r\n\r\n const hasQueue = (this._element.querySelectorAll(\"[data-queued]\")?.length > 0 || false);\r\n let certs: Array<{ title: string, source: string, file: string }> = [];\r\n if (!hasQueue) {\r\n const certelements = this._element.querySelectorAll(\"[data-cert-file]\");\r\n if (certelements.length === 0) {\r\n\r\n return;\r\n }\r\n let index = 1;\r\n certelements.forEach(certelement => {\r\n const cert = certelement as HTMLElement;\r\n const certTitle = (cert.querySelector(\"a\")?.text || cert.dataset.activityId || `unnamedcertificate${index}`)\r\n const certSource = (cert.querySelector(\".source\") as HTMLElement)?.innerHTML || \"\";\r\n const certFile = (cert.dataset.certFile || null);\r\n index += 1;\r\n if (certFile === null) {\r\n\r\n return false;\r\n }\r\n certs.push({ title: certTitle, source: certSource, file: certFile });\r\n certelement.removeAttribute(\"data-cert-file\");\r\n });\r\n\r\n const zipRequest = {\r\n certlist: certs,\r\n overwrite: false\r\n };\r\n\r\n console.log({ certs });\r\n\r\n const today = new Date();\r\n const yyyy = today.getFullYear();\r\n let mm = today.getMonth() + 1;\r\n let dd = today.getDate();\r\n let hh = today.getHours();\r\n let mn = today.getMinutes();\r\n let ss = today.getSeconds();\r\n\r\n const formattedToday =`${mm.toString().padStart(2,\"0\")}-${dd.toString().padStart(2,\"0\")}-${yyyy}`;\r\n const formattedTime = `${hh.toString().padStart(2,\"0\")}${mn.toString().padStart(2,\"0\")}${ss.toString().padStart(2,\"0\")}`;\r\n\r\n if (certs.length === 1) {\r\n const cert = certs[0];\r\n const certTitle = cert.title.replace(/[^a-z0-9-_]/gi, '').substring(0,15).trim().replace(/\\s/ig,\"-\");\r\n const namepart = (cert.source.length > 0 ? `${cert.source.replace(/\\s/ig,\"-\")}-${certTitle}` : `${certTitle}`);\r\n const friendlyname = `${formattedToday}-${namepart}`;\r\n const downloadButton = this.optionModal.querySelector(\".btn-download\") as HTMLAnchorElement;\r\n const emailButton = this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement;\r\n emailButton.setAttribute(\"data-activities\", `${cert.source}~${cert.title}`);\r\n emailButton.setAttribute(\"data-name\", cert.file);\r\n downloadButton.href = `/~/edu/cert/${cert.file}/${friendlyname}.pdf`;\r\n\r\n } else if (certs.length > 1) {\r\n certificateService.zip((zipRequest as ICertificateZipRequest)).then(resp => {\r\n if (this.optionModal === null) {\r\n\r\n return;\r\n }\r\n const namepart = \"healio-certificate-bundle\";\r\n const friendlyname = `${formattedToday}_${formattedTime}-${namepart}`;\r\n const activityList = certs.map(c => { return `${c.source}~${c.title}` }).join(\"|\");\r\n const downloadButton = this.optionModal.querySelector(\".btn-download\") as HTMLAnchorElement;\r\n const sizeWarning = this.optionModal.querySelector(\".size-warning\") as HTMLAnchorElement;\r\n const emailButton = this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement;\r\n emailButton.setAttribute(\"data-activities\", activityList);\r\n emailButton.setAttribute(\"data-name\", resp.response.bundlename);\r\n downloadButton.href = `/~/edu/cert/${resp.response.bundlename}/${friendlyname}.zip`;\r\n if(((resp.response.size / 1024) / 1024) > 10) {\r\n sizeWarning.classList.remove(\"hidden\");\r\n } else {\r\n sizeWarning.classList.add(\"hidden\");\r\n }\r\n });\r\n }\r\n\r\n if(certs.length > 0){\r\n $(this.optionModal).on(\"hidden.bs.modal\", meh => { this.handleDownloadModalClose(meh); });\r\n $(this.optionModal).modal(\"show\");\r\n }\r\n }\r\n }\r\n\r\n private handleDownloadModalClose(meh: ModalEventHandler): void {\r\n /*\r\n const emailButton = this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement;\r\n const downloadButton = this.optionModal.querySelector(\".btn-download\") as HTMLAnchorElement;\r\n emailButton.removeEventListener(\"click\", this.handleEmailButtonClick);\r\n downloadButton.removeEventListener(\"click\", this.handleDownloadButtonClick);\r\n */\r\n this._element.querySelectorAll(\"[data-activity-select]:checked\").forEach( el => {\r\n const certlisting = el.closest(\".cert-listing\") as HTMLElement;\r\n certlisting.setAttribute(\"data-queued\", \"1\");\r\n\r\n });\r\n }\r\n\r\n private handleEmailFieldChange(ev: Event): void {\r\n if (this.optionModal === null) {\r\n\r\n return;\r\n }\r\n const emailField = ev.target as HTMLInputElement;\r\n const emailButton = this.optionModal.querySelector(\".btn-email\") as HTMLButtonElement;\r\n\r\n if (emailField.value.length > 0) {\r\n emailButton.classList.remove(\"disabled\");\r\n } else {\r\n emailButton.classList.add(\"disabled\");\r\n }\r\n }\r\n\r\n private handleEmailButtonClick(ev: Event): void {\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 certificateService = context.certificateService;\r\n if (!certificateService) {\r\n throw new Error(\"No certificate service\");\r\n }\r\n\r\n const emailButton = ev.target as HTMLButtonElement;\r\n const email = this.emailField.value;\r\n const path = (emailButton.dataset.name || \"\");\r\n const activities = (emailButton.dataset.activities?.split(\"|\") || []);\r\n if (email.length < 1 || path?.length < 1 || activities.length < 1) {\r\n\r\n return;\r\n }\r\n const request = {\r\n email: email,\r\n path: path,\r\n activities: activities\r\n } as ICertificateEmailZipRequest;\r\n\r\n certificateService.emailZip(request);\r\n const successModal = document.querySelector(\"#CMESuccessModal\");\r\n if(successModal !== null) {\r\n $(successModal).modal();\r\n }\r\n }\r\n\r\n private handleDownloadButtonClick(ev: Event): void {\r\n const button = ev.target as HTMLElement;\r\n const modal = button.closest(\".modal\") as HTMLElement;\r\n $(modal).modal(\"hide\");\r\n }\r\n}\r\n\r\nComponentFactory.registerComponent(\"CertDownload\", CertDownload);\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 { Cookie } from \"../../util/CookieUtil\";\r\nimport { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { IUserProfileSiteSettingsUpdateRequest } from \"../../models/UserProfile/IUserProfileSiteSettingsUpdateRequest\";\r\n\r\nexport class GoalProgressModals extends Component {\r\n\r\n public readonly CreditChanged: string = \"creditchanged\";\r\n\r\n public _modals: HTMLElement[] = [];\r\n\r\n private readonly CookiePrefix: string = \"goal_\";\r\n\r\n private QueryString: string = \"\";\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?.isLoggedIn === \"False\") {\r\n\r\n return;\r\n }\r\n if (profile?.sitesettings?.goalmodalsshown && profile?.sitesettings?.goalmodalsshown?.length > 0) {\r\n const expires = new Date((new Date().valueOf() + 315360000000));\r\n profile.sitesettings.goalmodalsshown.forEach(modalid => {\r\n if (Cookie.getCookie(modalid) === null) {\r\n Cookie.setCookie(modalid, \"1\", expires);\r\n }\r\n });\r\n }\r\n\r\n this._modals = Array.from(this._element.querySelectorAll(\"[data-goal-modal]\"))\r\n .map(m => {\r\n return (m as HTMLElement);\r\n })\r\n .filter(m => {\r\n let modalid = m.id;\r\n if (modalid && modalid.length > 1) {\r\n modalid = `${this.CookiePrefix}${modalid}`;\r\n return (Cookie.getCookie(modalid) === null);\r\n }\r\n })\r\n .sort(m => {\r\n return parseInt(m.dataset.goalModal || \"0\")\r\n });\r\n\r\n console.log(`GoalProgressModals: Found ${this._modals.length}`);\r\n console.log({ modals: this._modals });\r\n\r\n this._modals.forEach(m => {\r\n $(m).on(\"show.bs.modal\", meh => this.handleModalShown(meh.target));\r\n });\r\n\r\n document.addEventListener(this.CreditChanged, () => {\r\n console.log(`GoalProgressModals: Heard ${this.CreditChanged} event.`);\r\n this.handleCreditUpdate();\r\n });\r\n\r\n this._element.querySelectorAll(\".btn-view-reco\").forEach(vr => {\r\n vr.addEventListener(\"click\", (ev: Event) => {\r\n const button = ev.target as HTMLElement;\r\n const modal = button.closest(\".modal\") as HTMLElement;\r\n $(modal).modal(\"hide\");\r\n window.location.href = \"/cme/myhealiocme#my-recommended-list\";\r\n });\r\n });\r\n\r\n this._element.querySelectorAll(\".btn-transcript\").forEach(vr => {\r\n vr.addEventListener(\"click\", (ev: Event) => {\r\n const button = ev.target as HTMLElement;\r\n const modal = button.closest(\".modal\") as HTMLElement;\r\n $(modal).modal(\"hide\");\r\n window.location.href = \"/cme/myhealiocme\" + this.QueryString + \"#mycompleted\";\r\n });\r\n });\r\n\r\n this.handleCreditUpdate();\r\n }\r\n\r\n private async handleModalShown(meh: HTMLElement): Promise {\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n const goal = (profile?.cmegoals?.UserGoal || null);\r\n const modalsSeen = profile?.sitesettings?.goalmodalsshown || [];\r\n if (goal !== null) {\r\n const expires = (goal.EndDate || new Date((new Date().valueOf() + 315360000000)));\r\n let modalid = meh.id;\r\n if (modalid && modalid.length > 1) {\r\n modalid = `${this.CookiePrefix}${modalid}`;\r\n Cookie.setCookie(modalid, \"1\", expires);\r\n if (!modalsSeen.find(id => { return id === modalid })) {\r\n modalsSeen.push(modalid);\r\n }\r\n const context = this._pageContext;\r\n const service = context ? context.userProfileService : null;\r\n if (!service) {\r\n console.warn(\"No Service available\");\r\n\r\n return;\r\n }\r\n const userSetting: IUserProfileSiteSettingsUpdateRequest = {\r\n GoalModalsShown: modalsSeen\r\n }\r\n await service.updateUserSettings(userSetting);\r\n }\r\n }\r\n }\r\n\r\n private async handleCreditUpdate(): Promise {\r\n\r\n // we shouldn't show this modal if other modals\r\n // are open or if the url has a hash location.\r\n if (window.location.hash.length > 0) {\r\n return;\r\n }\r\n\r\n let modalshowing = false;\r\n document.querySelectorAll(\".modal\").forEach(m => {\r\n const el = m as HTMLElement;\r\n if ($(el).data('bs.modal')?._isShown) {\r\n modalshowing = true;\r\n }\r\n });\r\n\r\n if (modalshowing) {\r\n return;\r\n }\r\n const now = new Date();\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (profile === undefined || profile === null || (profile?.contactid || \"00000000-0000-0000-0000-000000000000\") === \"00000000-0000-0000-0000-000000000000\") {\r\n return;\r\n }\r\n\r\n const context = this._pageContext;\r\n const service = context ? context.userProfileService : null;\r\n const cmeGoals = profile?.cmegoals;\r\n const userGoal = cmeGoals?.UserGoal;\r\n if (userGoal === undefined\r\n || userGoal === null\r\n || userGoal?.StartDate === undefined\r\n || userGoal?.EndDate === undefined\r\n || now < (userGoal?.StartDate || new Date(8640000000000000))\r\n || now > (userGoal?.EndDate || new Date(0))) {\r\n // no user goal, make sure cookies and user site settings are clear\r\n Cookie.getCookies().filter(cookie => {\r\n return (cookie.indexOf(this.CookiePrefix) === 0)\r\n }).forEach(cookie => {\r\n Cookie.deleteCookie(cookie);\r\n });\r\n\r\n if (!service) {\r\n console.warn(\"No Service available\");\r\n\r\n return;\r\n }\r\n const userSetting: IUserProfileSiteSettingsUpdateRequest = {\r\n GoalModalsShown: []\r\n }\r\n service.updateUserSettings(userSetting);\r\n\r\n return;\r\n }\r\n\r\n const goalCompletion = (cmeGoals?.GoalCompletion || 0);\r\n // figure out which value we're near and if we've already\r\n // shown a modal for it. Skip modals if we've jumped goals.\r\n const modalList = this._modals.filter(m => {\r\n const modalcredits = Number(m.dataset.goalModal);\r\n return (goalCompletion >= modalcredits);\r\n }).sort((m1, m2) => { return (Number(m1.dataset.goalModal)) - (Number(m2.dataset.goalModal)); });\r\n\r\n let currentModal = (modalList.pop() || null);\r\n\r\n let datespan = this._element.querySelector(\".date-span\");\r\n if(datespan){\r\n var startDate = new Date(userGoal.StartDate) || new Date();\r\n var endDate = new Date(userGoal.EndDate) || new Date();\r\n datespan.textContent = `${startDate.getUTCMonth() + 1}/${startDate.getUTCDate()}/${startDate.getUTCFullYear()} - ${endDate.getUTCMonth() + 1}/${endDate.getUTCDate()}/${endDate.getUTCFullYear()}`;\r\n this.QueryString = `?tstart=${startDate.getUTCFullYear()}-${startDate.getUTCMonth() + 1}-${startDate.getUTCDate()}&tend=${endDate.getUTCFullYear()}-${endDate.getUTCMonth() + 1}-${endDate.getUTCDate()}`;\r\n }\r\n\r\n let creditspan = this._element.querySelector(\".credits\");\r\n if(creditspan){\r\n var goalCredits = userGoal.Credits || 0;\r\n creditspan.textContent = Number(goalCredits).toFixed(2) + \" Credits\";\r\n }\r\n modalList.forEach(m => {\r\n this.handleModalShown(m);\r\n });\r\n\r\n if (currentModal !== null) {\r\n $(currentModal).modal();\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"GoalProgressModals\", GoalProgressModals);","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 { PageContext } from \"../../service/PageContext\";\r\nimport { WyanokeUtil } from \"../../util/WyanokeUtil\";\r\nimport { IUserGoalsUpdateRequest } from \"../../models/UserGoals/IUserGoalsUpdateRequest\";\r\n\r\nexport class ReminderUnsubscribe extends Component {\r\n\r\n private _unsubContainer: HTMLElement | null;\r\n private _cancelContainer: HTMLElement | null;\r\n private _reminders: Date[] = [];\r\n\r\n constructor(element: HTMLElement, pageContext: PageContext) {\r\n super(element, pageContext);\r\n\r\n this.handleUnsubscribeRequest();\r\n\r\n this._unsubContainer = element.querySelector(\".main-unsubscribe\");\r\n this._cancelContainer = element.querySelector(\".cancel-unsubscribe\");\r\n\r\n element.querySelector(\".btn-undo\")?.addEventListener(\"click\", ev => {\r\n this.handleUndoRequest(ev).then(c => {\r\n this._unsubContainer?.classList.add(\"hidden\");\r\n this._cancelContainer?.classList.remove(\"hidden\");\r\n });\r\n\r\n });\r\n }\r\n\r\n private async handleUnsubscribeRequest(): 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.userGoalsService;\r\n if (!service) {\r\n throw new Error(\"No user goals service\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile?.cmegoals?.UserGoal) {\r\n return;\r\n }\r\n\r\n this._reminders = (profile.cmegoals.UserGoal.Reminders || []);\r\n\r\n const request = {\r\n contactid: profile?.contactid,\r\n credits: profile?.cmegoals?.UserGoal?.Credits,\r\n startdate: profile?.cmegoals?.UserGoal?.StartDate,\r\n enddate: profile?.cmegoals?.UserGoal?.EndDate,\r\n reminders: []\r\n } as IUserGoalsUpdateRequest;\r\n\r\n service.update(request);\r\n }\r\n\r\n private async handleUndoRequest(ev: Event): 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.userGoalsService;\r\n if (!service) {\r\n throw new Error(\"No user goals service\");\r\n }\r\n\r\n const profile = await WyanokeUtil.loadUserProfile(true, false);\r\n if (!profile?.cmegoals?.UserGoal) {\r\n return;\r\n }\r\n\r\n const request = {\r\n contactid: profile?.contactid,\r\n credits: profile?.cmegoals?.UserGoal?.Credits,\r\n startdate: profile?.cmegoals?.UserGoal?.StartDate,\r\n enddate: profile?.cmegoals?.UserGoal?.EndDate,\r\n reminders: this._reminders\r\n } as IUserGoalsUpdateRequest;\r\n\r\n service.update(request);\r\n }\r\n\r\n}\r\n\r\nComponentFactory.registerComponent(\"ReminderUnsubscribe\", ReminderUnsubscribe);","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. : 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// we need the polyfill for requestAnimationFrame\r\n// to ensure cross browser compat for pdfjs\r\nimport \"request-animation-frame-polyfill\";\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/edu/NotificationBox\";\r\nexport * from \"./components/edu/GoalChart\";\r\nexport * from \"./components/edu/FindRequirements\";\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/CmeHint\";\r\nexport * from \"./components/eduActivity/CmeRequiresPaymentModal\";\r\nexport * from \"./components/eduActivity/CmeTestFailedModal\";\r\nexport * from \"./components/eduActivity/CmeTestPassedModal\";\r\nexport * from \"./components/eduActivity/CommerceStartActivity\";\r\nexport * from \"./components/eduActivity/LeavingCmeModal\";\r\nexport * from \"./components/eduActivity/PollQuestion\";\r\nexport * from \"./components/eduActivity/ProgressBar\";\r\nexport * from \"./components/eduActivity/QuestionGroup\";\r\nexport * from \"./components/eduActivity/SingleSignOn\";\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/genericLanding/LandingCardLayout\";\r\nexport * from \"./components/genericLanding/LandingCardLoader\";\r\nexport * from \"./components/genericLanding/LandingNoMasonry\";\r\nexport * from \"./components/healioGlobal/HealioSearchBox\";\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/HealioFooter\";\r\nexport * from \"./components/healioGlobal/SpecialtySelect\";\r\nexport * from \"./components/healioGlobal/SubSpecialtySelect\";\r\nexport * from \"./components/healioGlobal/ListUnstyled\";\r\nexport * from \"./components/lmsLanding/LMSTopicSelect\";\r\nexport * from \"./components/mySavedPages/MySavedPages\";\r\nexport * from \"./components/recommendations/CmeActivityRecoCards\";\r\nexport * from \"./components/SaveIcon\";\r\nexport * from \"./components/newsArticle/EmailTopicAlert\";\r\nexport * from \"./util/EventUtil\";\r\nexport * from \"./util/LocalStorageUtil\";\r\n\r\nexport * from \"./components/hss/CollapseCardSection\";\r\nexport * from \"./components/hss/HssClickTag\";\r\nexport * from \"./components/hss/HssPollCard\";\r\nexport * from \"./components/hss/HssQuizCard\";\r\n\r\nexport * from \"./components/topicFilter/TopicFilter\";\r\nexport * from \"./components/topicAndCreditTypeFilter/TopicAndCreditTypeFilter\";\r\n\r\nexport * from \"./components/myCme/MyCmeRibbon\";\r\nexport * from \"./components/myCme/FilterSelect\";\r\nexport * from \"./components/myCme/CertDownload\";\r\nexport * from \"./components/myCme/GoalProgressModals\";\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/myCme/ReminderUnsubscribe\";\r\n\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/healioMasterClass/MasterClassQuestionGroupPosttest\";\r\nexport * from \"./components/healioMasterClass/MasterClassQuestionGroupPretest\";\r\nexport * from \"./components/healioMasterClass/MasterClassQuestionGroupNonScoring\";\r\nexport * from \"./components/healioMasterClass/MasterClassProgressBar\";\r\n\r\nexport * from \"./components/quikQuiz/QuikQuizQuestionGroup\";\r\nexport * from \"./components/quikQuiz/QuikQuizScoreCard\";\r\nexport * from \"./components/quikQuiz/QuikQuizProgressBar\";\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 { 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 { 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 { 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 { 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 { 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 { 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 { 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 { 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"]}