{"version":3,"sources":["../../src/core-ui/directives/partials/apPharmacyTileDragDrop.js","../../src/core-ui/module.js","../../src/core-ui/app.templates.js","../../src/core-ui/components/apCachingSettings.js","../../src/core-ui/components/apDocumentViewerWithDownload.js","../../src/core-ui/components/apErxRequestDetails.js","../../src/core-ui/components/apErxRequestDualRow.js","../../src/core-ui/components/apErxRequestFullRow.js","../../src/core-ui/components/apErxRequestMedication.js","../../src/core-ui/components/apErxRequestPatient.js","../../src/core-ui/components/apErxRequestProvider.js","../../src/core-ui/components/apMultiSelectListItem.js","../../src/core-ui/components/tinymce.js","../../src/core-ui/configuration/app.config.hammer.js","../../src/core-ui/configuration/app.config.jquery.js","../../src/core-ui/configuration/app.run.persistentwarnings.js","../../src/core-ui/decorators/uibDropdownDecorator.js","../../src/core-ui/decorators/uibPagingDecorator.js","../../src/core-ui/decorators/uibTypeaheadDecorators.js","../../src/core-ui/directives/affix.js","../../src/core-ui/directives/apAddress.js","../../src/core-ui/directives/apAndroidHeightFix.js","../../src/core-ui/directives/apAppointmentContextMenu.js","../../src/core-ui/directives/apAuthorization.js","../../src/core-ui/directives/apAutoFocus.js","../../src/core-ui/directives/apBirthdate.js","../../src/core-ui/directives/apCheckbox.js","../../src/core-ui/directives/apContextMenu.js","../../src/core-ui/directives/apDashboardTileHeader.js","../../src/core-ui/directives/apDataGroup.js","../../src/core-ui/directives/apDateFormatter.js","../../src/core-ui/directives/apDateRangeFormatter.js","../../src/core-ui/directives/apDocumentViewer.js","../../src/core-ui/directives/apDynamicFrame.js","../../src/core-ui/directives/apFeatureCheck.js","../../src/core-ui/directives/apFormContainer.js","../../src/core-ui/directives/apFormFocus.js","../../src/core-ui/directives/apFullModal.js","../../src/core-ui/directives/apHideDevice.js","../../src/core-ui/directives/apHighlight.js","../../src/core-ui/directives/apIcdCodeModalCtrl.js","../../src/core-ui/directives/apImageViewer.js","../../src/core-ui/directives/apIncludeReplace.js","../../src/core-ui/directives/apKeyboardSpace.js","../../src/core-ui/directives/apMediaPicker.js","../../src/core-ui/directives/apMessageIcon.js","../../src/core-ui/directives/apMessageNewNote.js","../../src/core-ui/directives/apMessageNotes.js","../../src/core-ui/directives/apMessageStatus.js","../../src/core-ui/directives/apPatientContextMenu.js","../../src/core-ui/directives/apPdf.js","../../src/core-ui/directives/apPharmacyAddress.js","../../src/core-ui/directives/apSaveToFile.js","../../src/core-ui/directives/apScrollableList.js","../../src/core-ui/directives/apScrollOnInput.js","../../src/core-ui/directives/apSelect.js","../../src/core-ui/directives/apSpinner.js","../../src/core-ui/directives/apSsnField.js","../../src/core-ui/directives/apSwipeable.js","../../src/core-ui/directives/apTile.js","../../src/core-ui/directives/apTileManager.js","../../src/core-ui/directives/apVerticalSeparator.js","../../src/core-ui/directives/click/hmClick.js","../../src/core-ui/directives/click/hmStopPropagation.js","../../src/core-ui/directives/click/ngClickDecorator.js","../../src/core-ui/directives/dialHref.js","../../src/core-ui/directives/find/apFindPharmacy.js","../../src/core-ui/directives/find/apFindPrmUser.js","../../src/core-ui/directives/find/apPatientSearch.js","../../src/core-ui/directives/find/apPharmacyItem.js","../../src/core-ui/directives/find/ApReadonlyFindControl.js","../../src/core-ui/directives/focusOn.js","../../src/core-ui/directives/iframeOnload.js","../../src/core-ui/directives/inputs/apAutoGrow.js","../../src/core-ui/directives/inputs/apFocusStr.js","../../src/core-ui/directives/inputs/apTabToStr.js","../../src/core-ui/directives/inputs/contenteditable.js","../../src/core-ui/directives/lazySrc.js","../../src/core-ui/directives/metadata/apCustomInvalid.js","../../src/core-ui/directives/metadata/apFormGroup.js","../../src/core-ui/directives/metadata/apMetadata.js","../../src/core-ui/directives/metadata/apRequired.js","../../src/core-ui/directives/metadata/form.js","../../src/core-ui/directives/multiCheckbox.js","../../src/core-ui/directives/navigation/apTransitionTo.js","../../src/core-ui/directives/navigation/apTransitionToAppointment.js","../../src/core-ui/directives/navigation/apTransitionToMessage.js","../../src/core-ui/directives/navigation/TransitionToHelper.js","../../src/core-ui/directives/ngRepeatColumnReset.js","../../src/core-ui/directives/partials/apAppointmentBrief.js","../../src/core-ui/directives/partials/apAppointmentListItem.js","../../src/core-ui/directives/partials/apdragdrop.js","../../src/core-ui/directives/partials/apMessageAssignTo.js","../../src/core-ui/directives/partials/apMessageListItem.js","../../src/core-ui/directives/partials/apVisitBrief.js","../../src/core-ui/directives/scrollTo.js","../../src/core-ui/directives/selectFix.js","../../src/core-ui/directives/stRatio.js","../../src/core-ui/filters/apFilterFeature.js","../../src/core-ui/filters/apHasFeature.js","../../src/core-ui/filters/apSsnFilter.js","../../src/core-ui/modals/GeneralNotesModal.js","../../src/core-ui/modals/MultiSelectListItemModal.js","../../src/core-ui/services/apConfirm.js","../../src/core-ui/services/apConfirmService.js","../../src/core-ui/services/BarcodeScanningService.js","../../src/core-ui/services/ClickListenerService.js","../../src/core-ui/services/IcdCodeModal.js","../../src/core-ui/services/inputs/ApMultiSelectButton.js","../../src/core-ui/services/inputs/inputSelection.js","../../src/core-ui/services/IntersectionObserverService.js","../../src/core-ui/services/IosDocumentHelper.js","../../src/core-ui/services/MediaService.js","../../src/core-ui/services/PanelConfigurationService.js","../../src/core-ui/services/PersistentWarningService.js","../../src/core-ui/services/PressListenerService.js","../../src/core-ui/services/ScrollerService.js","../../src/core-ui/services/typeahead/enableTypeaheadTrackBy.js","../../src/core-ui/services/typeahead/findTypeahead.js","../../src/core-ui/services/typeahead/positionTypeaheadPopup.js","../../src/core-ui/services/typeahead/setTypeaheadPopupHeight.js","../../src/core-ui/services/typeahead/typeaheadPopupClass.js","../../src/core-ui/services/uxConstants.js","../../src/core-ui/services/ViewportInfo.js","../../src/core-ui/services/WebDocumentHelper.js"],"names":["deletePatientPharmacyModalCtrl","$scope","$modalInstance","cancel","dismiss","ok","close","angular","module","run","$templateCache","put","window","component","templateUrl","controllerAs","controller","_","AprimaCache","this","clearAll","totalSize","info","reduce","caches","sum","cache","size","bindings","disableFullscreen","disableInlinePdf","documentId","documentHelper","downloadFileName","enableDownload","hasStaticUrl","documentDownload","documentGetStaticUrl","documentLoad","vm","downloadingDocument","loadingDocument","canDownloadDocument","canOpenInSeparateTab","onDocumentDownload","finally","onDocumentLoad","requestSettings","onDocumentOpenInSeparateTab","openDocumentInSeparateTab","refillRequest","prescription","patient","label","firstValue","firstText","secondValue","secondText","warn","header","hasWarning","isNil","String","prototype","toUpperCase","call","value","transclude","requestedMed","currentPrescription","rxNormQualifer","BPK","GPK","SCD","SBD","isOpen","medDescriptionText","description","ndcDescription","text","refills","firstInstruction","Instructions","length","Refills","substitutionText","DispenseAsWritten","strengthText","DrugStrength","DrugStrengthUnits","productCodeText","DrugNdc","drugDbCodeText","DrugRxNormCode","qualifier","DrugRxNormQualifier","drugFormText","UnitOfMeasureName","UnitOfMeasureCode","hasDetails","WrittenDate","LastFillDate","ExpirationDate","EffectiveDate","PeriodEnd","DateValidated","SoldDate","PriorAuthorizationDescription","PriorAuthorizationStatusTerm","requestedPatient","currentPatient","requestedProvider","identification","provider","PhysicianReferenceType","PhysicianReferenceNumber","collection","ngDisabled","require","ngModelCtrl","$element","ApMultiSelectButton","MultiSelectListItemModal","formatter","listItem","Description","Name","init","selectedItems","openModal","find","removeFormatting","hideToolbar","useAdvancedToolbar","height","valueChanged","toolbarSelected","tinymceModelOptions","debounce","tinymceOptions","branding","toolbar","plugins","menubar","statusbar","resize","format","browser_spellcheck","remove_linebreaks","onChange","updatedValue","config","Hammer","Tap","defaults","threshold","time","pickBy","forOwn","inputType","inputHandler","element","disabled","apply","arguments","$","fn","extend","firstOrNull","first","SetupPersistentWarningService","$transitions","PersistentWarningService","onSuccess","clear","CustomModuleRunService","add","decorator","$delegate","$document","directive","compile","link","scope","attrs","dropdownCtrl","setToggleElement","ev","currentTarget","on","$on","off","create","ctrl","$attrs","result","$eval","getText","noop","typeaheadTriggerSearch","ngModel","$$lastCommittedViewValue","$setViewValue","$viewValue","$render","stopPropagation","event","$parse","enableTypeaheadTrackBy","findTypeahead","positionTypeaheadPopup","setTypeaheadPopupHeight","typeaheadPopupClass","tElement","typeaheadElement","attr","headerElement","prepend","displayNone","noneAction","noneElement","defaultHeader","matches","model","isDefault","$parent","typeaheadNgModel","triggerSearch","partial","interceptor","selectInterceptor","parsedInterceptor","item","evt","interceptorArgs","$item","$event","$triggerSearch","shouldSelect","parentSelect","select","activeIdx","match","override","selectOther","obj","id","selectMatch","directiveController","$controller","$transclude","domElement","documentElement","documentClickHandlerStart","documentClickHandlerEnd","target","targetModalContainer","parents","contains","originalTarget","ctrls","originalFormatterFn","e","selector","is","focus","typeaheadFormatter","$formatters","pop","push","modelValue","isString","ClickListenerService","restrict","elem","dereg","register","$broadcast","preventDefault","affix","offset","top","Bridge","address","openMap","fireEvent","Address1","Address2","City","State","Zip","Country","$interval","cancelUpdate","css","widthWatch","totalHeight","parentHeight","children","each","outerHeight","$rootScope","SecurityRepository","Permissions","setOptsForApptContextMenu","opts","$emit","getChargeCaptureTransition","appRoute","patientId","appointment","PatientId","Patient","Id","getPatientId","serviceSiteId","ServiceSiteId","deregister","getPermissions","Schedule","then","permission","schedulePermissionAllowed","IsAllowed","catch","AuthorizationService","providerRequired","isUserProvider","$destroy","remove","$timeout","autoFocus","DateUtilities","birthdate","deathdate","display","html","displayAge","getPersonAge","watchRemover","$watchCollection","newval","oldval","person","currentId","$compile","$log","tAttrs","type","hasClass","returnValue","post","postLink","parent","addClass","tabindex","$set","labelText","checkboxLabel","errors","checkBoxId","nextNode","next","nextNodeName","nodeName","toLowerCase","printErrors","after","forEach","error","$window","AprimaAnalytics","PressListenerService","menuTracker","menuElement","broadcastCloseContextMenu","deregisterListener","opened","backdrop","backdrops","deregisterFn","append","addBackdrop","backdropClickHandler","removeBackdrop","removeClass","getBackdrop","handleClick","apContextMenuOnClick","JSON","parse","openFn","apContextMenuOpen","closeFn","apContextMenuClose","setPosition","isUndefined","apContextMenuSetPosition","lastEvent","observer","MutationObserver","resizeMenu","deregisterClose","tryCloseContextMenu","bind","handleOpenContextMenuEvent","pageX","sendEvent","doc","docLeft","pageXOffset","scrollLeft","clientLeft","docTop","pageYOffset","scrollTop","clientTop","elementHeight","scrollHeight","elementWidth","scrollWidth","docHeight","clientHeight","pageY","docWidth","clientWidth","totalWidth","Math","max","left","$apply","srcEvent","startEvent","center","x","y","touches","touch","document","getElementById","apContextMenuTarget","apContextMenuType","observe","childList","subtree","openContextMenu","unbind","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","setTimeout","Debouncer","ticking","requestedDuringTick","DashboardHeader","watchElementSelector","options","defaultOptions","lastY","scroller","topOffset","bottomOffset","scrollUpClass","scrollDownClass","affixedClassName","debouncer","update","debouncedUpdate","handleEvent","constructor","requestTick","rafCallback","getWatchElement","__watchElement","watchElement","isElementInViewport","rect","getBoundingClientRect","bottom","toggleIsVisibleClass","toggleClass","getScrollY","undefined","body","parentNode","getViewportHeight","innerHeight","getDocumentHeight","offsetHeight","getElementHeight","elm","getScrollerHeight","isOutOfBounds","currentScrollY","pastTop","pastBottom","updateScrollPosition","apScroller","toggleTile","apIsVisibleForElement","parseInt","apIsVisibleTopOffset","apIsVisibleBottomOffset","apOnScrollUpClass","apOnScrollDownClass","apIsVisibleClass","addEventListener","toggle","removeEventListener","normal","LanguageFactory","lang","getLang","date","jsdate","removeWatch","output","formatted","thisMoment","langCode","code","isEnglish","replace","moment","locale","isValid","Date","split","startDate","endDate","multiline","BrowserService","ViewportInfo","$sce","imageFormats","htmlFormats","textFormats","pdfFormats","pageWidth","getWidth","pageHeight","getHeight","loadDocument","tryLoadAttachment","page","previousDocumentId","isNumber","pageDetails","currentPage","loadError","attachment","isImage","isHtml","isText","isPdf","loadingAttachment","request","width","attachmentData","Data","includes","Extension","imageData","htmlData","trustAsResourceUrl","textData","atob","blob","base64ToBlob","fileURL","URL","createObjectURL","pdfData","response","loadAttachment","loadPage","$watch","newValue","oldValue","loadingUrl","_resize","newHeight","contentWindow","reload","iframeDocument","content","write","ServerInfoRepository","requiredFeatures","splitRequiredFeatures","isFeatureSupported","containerDisabledExpression","apFormContainerDisabledExpression","input","elementExpression","handler","footer","modalDialog","windowSelector","updateMaxHeight","reservedSpace","closest","paddingTopStr","paddingBottomStr","paddingTop","paddingBottom","apFullModalAlways","getElementsByClassName","attributes","attributeFilter","disconnect","DeviceSettings","isDevice","isPhoneOrOverride","isTabletOrOverride","highlight","repl","replaceWith","$uibModalInstance","DiagnosisRepository","$q","searchParams","loading","modifierIndex","codePromise","modifierPromise","getModifiers","searchForCode","searchCode","trim","codeType","substring","displayCode","topLevel","endsWith","getDiagnoses","all","results","allModifiers","plain","allCodes","filteredCodes","codeModifiers","chain","map","flatten","uniq","matchedCategories","filter","category","matched","Modifiers","intersection","some","modifierCategories","cloneDeep","sortBy","selectedModifiers","updateCategories","diagnosisSelected","addHttpError","remainingModifiers","modifier","Code","searchLevelUp","modifierSelected","pull","isSelected","difference","diagnosis","pageCount","isFullScreenMode","imageElement","initialXCoordinate","initialYCoordinate","minOffsetX","maxOffsetX","minOffsetY","maxOffsetY","initScale","transform","fullscreenImageElement","loadingImage","imageDataWatch","footerHeight","resetElement","className","translate","scale","requestElementUpdate","join","updateElementTransform","pinch","release","min","snapToContainer","touchHandlerDummy","drag","targetX","deltaX","targetY","deltaY","swipe","abs","moveToPage","onPinch","onFsPinch","onRelease","onFsRelease","onTap","onFsTap","get","onDrag","onFsDrag","onSwipe","onFsSwipe","el","contents","keyboardHeight","data","activeElement","tagName","isPhone","KeyboardHeight","style","isIos","template","MediaService","image","onPicked","pickerDescription","pickImage","getMedia","media","fileName","extension","message","messageType","messageTypeId","messageSubTypeId","getMessageTypeIconName","TypeId","MessageTypeId","MessageType","SubTypeId","MessageSubTypeId","MessageSubType","getMessageSubTypeId","state","Urgency","Status","iconName","bindToController","ListService","generalNotes","selectedNote","removeHttpError","selectedNoteChanged","newNote","generalNoteTypeId","listsToLoad","getLists","activate","messageNotes","newNotes","val","DisplayDate","CreatedDate","cal","LastModificationDate","NoteAsHtml","trustAsHtml","Note","watchMessageNotes","setOptsForPatientContextMenu","apConfirm","gettext","ChargeCaptureRepository","TransitionManager","toaster","ExternalPatientsRepository","LocalStorageRepository","ClientInfoRepository","patientDashboardConfigurations","chargeCaptureId","hospitalRoundId","dischargeExternalPatient","dashboardConfigurations","getPatientDashboardConfigurations","isFndEnabled","defaultServiceSiteId","getDefaultServiceSiteId","erxEnabled","getIsERxEnabled","settings","getDashboardTileSettings","tiles","Tiles","chargeCaptureOptions","setup","dischargePatient","dischargingPatient","externalPatient","err","tryToastModelStateError","removeChargeCapture","removingChargeCapture","name","IsSuccess","navigateToDashboard","transition","configId","src","openGMap","isPrm","open","loadText","pdfFormat","_saveAsFile","fileNameToSaveAs","base64String","contentType","downloadDocumentToFile","FileName","$elem","listItemHeight","listItemWindowSize","apScrollableList","scrollTopOnChange","scroll","scrollTo","scrollTopOffset","child","$select","icon","before","addCustomDropdownChevron","spinnerName","SpinnerService","spinnerHtml","spinnerConfiguration","getSpinner","start","startSpinner","apSsnFilter","$parsers","inputValue","transformedInput","ScrollerService","NgZoneService","WebKitMutationObserver","MozMutationObserver","currentPane","paneChanged","useLastHeader","scrollerId","autoResize","scrollDiv","contextRun","zoneAwareObject","paneCount","eventsEnabled","$wrapper","wrapper","container","hammer","initialSetup","mutations","panesChanged","mutation","addedNodes","removedNodes","panes","getPanes","newPane","index","showPane","enableEventsOnce","updatePanes","$evalAsync","getScroller","once","handleHammer","animate","changingPane","runInZoneIfNecessary","updateContainer","targetHeight","updatePageIndicator","pane","adjacentPanes","prev","getAdjacentPanes","percent","scrollStart","paneOffset","dragOffset","direction","DIRECTION_RIGHT","DIRECTION_LEFT","nextPaneHeight","heightDifference","stop","console","log","destroy","zoneAwareLink","tileManager","defaultValue","tileId","Error","isCollapsed","parsedIsCollapsed","assign","isCollapsedWatch","currentScope","newVal","oldVal","tileState","tileGroup","setupTile","defaultCollapsed","TileGroup","self","groupName","tileConfiguration","storageMode","disablePersistence","configurationWatch","changeConfiguration","persistenceWatch","setPersistence","nextState","apVerticalSeparator","registerFromDirective","hasOwnProperty","$provide","dialHref","dialHrefProtocol","protocol","location","href","hmStopPropagation","ApReadonlyFindControl","PatientRepository","PharmacyRepository","patientPharmaciesCache","getOrCreate","maxAge","deleteOnExpire","capacity","directiveDefinition","getPharmacy","searchPharmacies","pharmacy","placeholderText","getSearchTextFromPharmacy","when","cachedPharmacies","getPharmacies","pharmacies","PharmacyId","Address","PrmUserRepository","getUser","searchUsers","prmUser","getSearchTextFromFindPrmUser","FormattedInternalName","LastName","FirstName","QuicksearchFactory","getPatient","updateList","getSearchTextFromPatient","$onChanges","changeObj","currentValue","MasterPharmacy","factory","getItemByIdFn","searchFn","validationKey","idProperty","itemValidatorFn","removeDuplicateDefaults","onInitCtrlFn","getDefaultsFn","initCtrlCallback","validator","isNaN","getDefaultsCallback","selectDisabled","defaultList","useId","parentContainerId","$qHelpers","uxConstants","tempViewValue","noMatchingItem","resetNgModelTimeout","render","selectedItem","placeHolderItem","inputFocus","inputBlur","$rollbackViewValue","blurDebounceTime","itemSelected","searchItems","scrollIntoView","defaultListPromise","defaultsPromise","isArray","isPromise","outstandingCalls","list","defaultItemList","compact","uniqBy","isObject","getDefaultList","searchPromise","parseFromObjectToId","$setValidity","formatFromIdToObject","$modelValue","valueChangedId","$id","$object","formatObject","objectId","parseObject","valueChangedObject","formatOrParsePrimitive","valueChangedPrimitive","$onInit","$viewChangeListeners","$onDestroy","getDefaultHeader","callNoneAction","focusOn","callBack","minHeight","$shadow","position","font","wordWrap","whiteSpace","box-shadow","newWidth","innerWidth","lastWidth","modelWatch","inputSelection","_element","getChildElement","parsedString","searchString","handleFocus","constant","trySelectStr","hasIn","keyCode","parsedConfig","processConfig","configWatch","literal","handleKey","which","selectionEnd","isInteger","brRegex","str","test","removeBreaks","replaceNbsp","$$hasNativeValidators","$isEmpty","toString","Restangular","loadImg","ignoreCache","lazySrc","endpointBase","one","img","Image","loaded","unbindLazySrc","scrollListener","throttle","$observe","removeEventListeners","lazySrcThrottle","unbindUpdateSrc","args","controllerName","directiveName","invalidClassName","validClassName","form","directiveCtrl","field","formCtrl","previousVal","cleanupFns","onValueChanged","onDestroy","cleanupFn","validate","pre","apFormGroup","ApFormGroup","formGroup","$formGroup","addField","removeField","setFieldRequired","fields","parentFormSubmitted","fieldElement","thisField","valid","pristine","required","_$setDirty","$setDirty","$pristine","updateValid","_$setPristine","$setPristine","_$setValidity","$valid","isRequired","$formGroupLabel","getLabel","setFormGroupValidity","$field","isFieldValid","MetadataService","ngMinMaxLengthUnsupportedType","datetime-local","week","month","radio","checkbox","ngMinMaxLengthUnsupportedElement","ap-patient-search","ap-find-pharmacy","ngMinMaxUnsupportedType","email","url","ngMinMaxUnsupportedElement","priority","terminal","metadata","apMetadata","applyApRequired","convertNgModelExprToMetadataExpr","isMinMaxCompatible","applyNgMinMax","isMinMaxLengthCompatible","applyNgMinMaxLength","removeAttr","modelCtrl","fieldId","apRequiredExpr","elementWatches","metadataWatches","$validators","viewValue","getObjectFromMetadata","IsGroupRequired","i","Fields","ValidationGroup","propertyValue","baseModel","FieldName","IsRequired","getIsRequired","apRequired","$validate","metadataObj","modelField","fieldMetaData","clearMetadataWatches","isEmpty","formDirective","setSubmitted","$setSubmitted","selectedlist","sourcelist","selectAll","showAll","selected","formattedDate","orderBy","selection","directiveParams","TransitionToHelper","registerTransitionTo","transitionTo","prmTransitionTo","isFunction","AppointmentTransitionToHelper","getTransition","apptScheduleType","calendarId","apptEdit","apptId","MessageTransitionToHelper","getTransitionForMessage","messageId","createNew","fnGetTransition","registerOpts","parseOptionsFromLink","gesture","preventTransitions","xs","sm","md","lg","showDuration","AppointmentType","getDuration","getDurationString","SettingService","AppointmentScheduleTypes","appt","transitionType","displayDateType","displayStartTime","displayDate","getAppointmentsListSettings","displayEndTime","scheduleType","ScheduleType","isPatientVisit","PatientVisit","scheduleTypeDescription","Age","getPersonAgeAbbr","BirthDate","openAppointmentContextMenu","closeAppointmentContextMenu","getTemplateUrl","dataType","startIndex","dropIndex","sIndex","dindex","draggable","ssIndex","ddIndex","userList","users","clickHandler","reassignHandler","narrow","CurrentUser","currentUserId","userId","isRead","LastReadByUid","$modal","pharmacyDropDownSelection","pharmacyList","pharmacySelected","selectedPharmaryIndex","loadingPharmacy","pharmacyListData","deletePharmacy","pharmacyId","onDeletePatientPharmacy","selectPharmacy","guid","p","PatientPharmacyUid","deletePatientPharmacy","loadPatientPharmacies","setStart","startMoveIndex","setDrop","newList","array","from","to","splice","guidList","l","setPharmacyOrder","orderPharmacy","checkforOut","ph","visit","parsedAttr","offsetTop","ratio","stRatio","inputCollection","featureParam","features","featureList","len","substr","title","currentNote","disableFormatting","maxCharacters","generalNoteTypeKey","openModalOnly","modalInstance","windowClass","resolve","GeneralNotesRepository","generalNotesSupported","searchText","tinymceHeight","includeInactive","originalGeneralNoteType","searchGeneralNoteType","generalNoteTypeList","loadingSearch","initialLoading","getRemainingCharacters","maxLength","shouldSwapButtons","searchGeneralNotes","search","generalNoteList","savePromise","saveGeneralNoteTypeSetting","changeSearchCriteria","searchDebounceTime","appendNote","entry","Notes","promises","getGeneralNoteType","getList","onLoad","orderFn","loadData","items","intersectionBy","previouslySelected","done","load","getItemOrder","countSelected","sumBy","identity","ApConfirmCtrl","okText","cancelText","confirm","scanBarcode","scanResultCallback","barcodeId","unregister","StatusMessage","ScannedResultText","handlerFn","handlerOpts","zoneAwareRegister","attributeName","parsedFn","zoneAwareRegisterFromDirective","hmOptions","hmPropagation","hmTapOnly","zoneAwareHandlerFn","wrapToRunInZoneIfNecessary","shouldDestroy","Manager","propagating","PreventGhostClick","Press","registerHmClick","hammerEv","Event","stopSrcPropagation","isDefaultPrevented","defaultPrevented","ngHandler","registerNgClick","deferred","defer","animation","reject","promise","onOpen","itemFormatter","resultValue","innerValue","defaultFormatterParser","newArray","onClick","blur","childElement","setSelectionRange","indexOf","observeWithSelector","observerCallback","trackerElement","querySelector","intersectionObserver","IntersectionObserver","debug","documentGetStaticUrlPromise","mediaCallback","mediaId","pickMedia","Media","widgetViews","configurations","_getConfiguration","configName","dashboards","_getLayout","widgetSetName","widgets","view","pageViews","widget","TileDescriptorId","userPlaceable","clonedWidget","configurationView","displayName","getConfiguration","getLayout","getLayoutWithConfig","getWidgetsForLayout","selectableWidgets","getPatientDashboardWidgets","Heading","isTemplate","IsCollapsed","saveLayout","removePatientDashboardConfigurations","setPatientDashboardConfigurations","reloadConfigurations","StrConvert","warnings","addOrReplace","key","exist","replaceNewLine","warning","property","getAll","toast","timeout","bodyOutputType","onHideCallback","addScroller","easyScroller","updatePageFn","removeScroller","popupElement","trackByAttr","nameOfIterator","$uibPosition","ngHideClassRegex","popupScope","watch","updatePosition","recalculatePosition","outerWidth","popupBecomingVisible","classList","attributeOldValue","prop","hasAttribute","maxHeight","parseFloat","parentContainerElem","parentElemId","updateHeight","debouncedUpdateHeight","parentElement","availableHeight","updatedHeight","popupClassesValue","doubleClickTime","incrementalSaveTime","offsetWidth","getWindowWidth","getWindowHeight","newWindow"],"mappings":"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","file":"aprima-core-ui.min.js","sourcesContent":["\r\n\r\n\r\n angular.module('aprima-core-ui')\r\n .directive('apPharmacyTileDragDrop',[\r\n 'PatientRepository',\r\n '$uibModal',\r\n function (PatientRepository,$modal){\r\n 'use strict';\r\n return{\r\n scope:{\r\n patientId: '<',\r\n pharmacyDropDownSelection: '<',\r\n pharmacyList: '&',\r\n pharmacySelected:'&'\r\n },\r\n templateUrl:'/core-ui/views/directives/partials/apPharmacyTileDragDrop.html',\r\n link:function($scope){\r\n\r\n \r\n $scope.selectedPharmaryIndex=-1;\r\n $scope.selectedPharmaryIndex=$scope.pharmacyDropDownSelection;\r\n $scope.loadingPharmacy=false;\r\n $scope.pharmacyListData = [];\r\n $scope.deletePharmacy = deletePharmacy; \r\n $scope.selectPharmacy = selectPharmacy;\r\n $scope.onDeletePatientPharmacy = onDeletePatientPharmacy;\r\n $scope.isSelected = isSelected;\r\n $scope.setStart= setStart;\r\n $scope.setDrop= setDrop;\r\n\r\n var startMoveIndex=-1;\r\n\r\n loadPatientPharmacies();\r\n\r\n $scope.$watch('pharmacyDropDownSelection',function(){\r\n \r\n checkforOut();\r\n\r\n });\r\n\r\n function checkforOut(){ \r\n\r\n $scope.selectedPharmaryIndex = -1;\r\n angular.forEach($scope.pharmacyListData, function(ph){\r\n \r\n if(ph.PatientPharmacyUid === $scope.pharmacyDropDownSelection)\r\n {\r\n $scope.selectedPharmaryIndex = $scope.pharmacyDropDownSelection;\r\n }\r\n });\r\n\r\n }\r\n \r\n function setStart(startIndex){\r\n\r\n startMoveIndex = startIndex; \r\n\r\n }\r\n \r\n function setDrop(dropIndex){\r\n\r\n var newList = reorderArray($scope.pharmacyListData,startMoveIndex,dropIndex);\r\n $scope.pharmacyListData = []; \r\n $scope.pharmacyListData = newList;\r\n $scope.$apply(); \r\n orderPharmacy($scope.pharmacyListData,$scope.patientId);\r\n \r\n }\r\n\r\n\r\n function selectPharmacy(guid) {\r\n $scope.selectedPharmaryIndex = guid;\r\n var obj = $scope.pharmacyListData.find( function (p) {return p.PatientPharmacyUid === guid;} ); \r\n $scope.pharmacySelected({pharmacy:obj});\r\n \r\n }\r\n\r\n function reorderArray(array, from, to){\r\n var element = array[from];\r\n array.splice(from, 1);\r\n array.splice(to, 0, element);\r\n return array;\r\n }\r\n\r\n function isSelected(i){\r\n if($scope.selectedPharmaryIndex === i)\r\n return true;\r\n else\r\n return false;\r\n }\r\n\r\n function deletePharmacy(pharmacyId) { \r\n openModal().then(function (selectedItem) { \r\n if(selectedItem)\r\n { \r\n $scope.onDeletePatientPharmacy(pharmacyId);\r\n }\r\n });\r\n }\r\n\r\n \r\n function onDeletePatientPharmacy(guid){\r\n \r\n PatientRepository.deletePatientPharmacy(guid).then(function(){\r\n\r\n loadPatientPharmacies();\r\n });\r\n \r\n\r\n }\r\n\r\n function openModal () {\r\n \r\n var modalInstance = $modal.open({\r\n templateUrl: '/core-ui/modal-views/deletePatientPharmacyConfirmModal.html',\r\n controller: 'deletePatientPharmacyModalCtrl',\r\n controllerAs: 'vm' ,\r\n size:'sm' \r\n });\r\n return modalInstance.result;\r\n\r\n }\r\n\r\n function loadPatientPharmacies(){\r\n\r\n $scope.loadingPharmacy = true;\r\n PatientRepository.getPharmacies($scope.patientId).then(function (data) {\r\n var x = data;\r\n // get first 4 of patient pharmacy\r\n $scope.pharmacyListData = x.splice(0,4); \r\n checkforOut(); \r\n }).finally(function () {\r\n $scope.loadingPharmacy = false; \r\n });\r\n\r\n }\r\n\r\n function orderPharmacy(list, patientId){\r\n\r\n $scope.loadingPharmacy = true; \r\n var guidList = list.map(function(l){\r\n return l.PatientPharmacyUid;\r\n });\r\n PatientRepository.setPharmacyOrder(guidList, patientId).then(function(){ \r\n }).finally(function (){\r\n $scope.loadingPharmacy = false; \r\n });\r\n }\r\n \r\n }\r\n };\r\n }\r\n ]);\r\n\r\n angular.module('aprima-core-ui').controller('deletePatientPharmacyModalCtrl', [\r\n '$scope',\r\n '$uibModalInstance',\r\n deletePatientPharmacyModalCtrl,\r\n ]);\r\n\r\n function deletePatientPharmacyModalCtrl($scope,$modalInstance) {\r\n 'use strict';\r\n \r\n $scope.cancel = cancel;\r\n $scope.ok = ok;\r\n \r\n function cancel() {\r\n $modalInstance.dismiss(false);\r\n }\r\n\r\n function ok() {\r\n $modalInstance.close(true);\r\n }\r\n }","angular.module('aprima-core-ui', [\r\n 'ui.router',\r\n 'restangular',\r\n 'ngTouch',\r\n 'ngAnimate',\r\n 'truncate',\r\n 'ui.bootstrap',\r\n 'angularLocalStorage',\r\n 'gettext',\r\n 'lodash',\r\n 'toaster',\r\n 'rt.debounce',\r\n 'hmTouchEvents',\r\n 'ui.tinymce',\r\n 'ngSanitize',\r\n\r\n //aprima\r\n 'aprima-core',\r\n 'aprima-bridge',\r\n 'aprima-config',\r\n 'aprima-legacy-common',\r\n 'aprima-provider-api',\r\n]);","angular.module('aprima-core-ui').run(['$templateCache', function($templateCache) {\n 'use strict';\r\n\r\n $templateCache.put('/core-ui/component-views/ap-caching-settings.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" Size: {{vm.totalSize()}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-details.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-dual-row.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::vm.label}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{vm.firstText || vm.firstValue}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{vm.secondText || vm.secondValue}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-full-row.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
{{::vm.label}}
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{vm.value}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-medication.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::vm.label}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-patient.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" Patient\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-erx-request-provider.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::vm.label}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-multi-select-button.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/ap-multi-select-fa-button.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/apDocumentViewWithDownload.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{'Click ' | translate}}{{'here' | translate}}{{' to view in a separate tab.' | translate}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{'Download ' | translate}}{{'here.' | translate}}\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/component-views/tinymce.html',\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/modal-views/deletePatientPharmacyConfirmModal.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" info\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
Are you sure you want to remove this pharmacy from the patient's account?
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/modal-views/generalNotesModal.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{vm.title}}\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{::entry.Name}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" ({{vm.getRemainingCharacters()}} {{'of' | translate}} {{vm.maxCharacters}})\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/modal-views/multi-select-list-item-modal.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::'Select All That Apply:' | translate}} ({{vm.countSelected()}})\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/confirm.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"

\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apAddress.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{::address.Address1}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::address.Address2}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::address.City}}, {{::address.State}} {{::address.Zip}}\\r\" +\r\n \"\\n\" +\r\n \" {{::address.Country}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apAppointmentContextMenu.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apDashboardTileHeader.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apDataGroup.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{label}} \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{value}} \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apDateRangeFormatter.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" to\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"to\\r\" +\r\n \"\\n\" +\r\n \"\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apDocumentViewer.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{attachment.textData}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"

{{::'This browser is unable to display the document inside of this webpage.' | translate}}

\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" {{::'Attachment type is not supported' | translate}} ({{attachment.Extension}}).\\r\" +\r\n \"\\n\" +\r\n \" {{::'Attachment type is not known and cannot be displayed.' | translate}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{::\\\"An error has occurred and the document could not be loaded.\\\" | translate}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::\\\"Please download the document to view it.\\\" | translate}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apIcdCodeModal.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
{{displayCode}} Codes
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t

Modifiers

\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t

\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t\t{{ category.Description }}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t

\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t
    \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t
  • \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t\t
    {{modifier.Description}}
    \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t\t
  • \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t

Codes ({{filteredCodes.length}})

\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t
    \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t
  • \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t\t({{::diagnosis.DiagnosisCode10 || diagnosis.DiagnosisCode9}}) {{::diagnosis.DiagnosisDescription}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t
  • \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t{{::\\\"An error has occurred and the icd codes could not be loaded.\\\" | translate}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apImageViewer.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
1\\\">\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apLoadingModal.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"

Loading

\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMediaPicker.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMessageAssignTo.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMessageIcon.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMessageNewNote.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMessageNotes.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" None\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" Most Recent Note\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::message.LatestNote}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
0\\\">\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" Created by {{note.LastModifiedBy.Name}} on\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apMessageStatus.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
{{message.MessageType.Name}}
\\r\" +\r\n \"\\n\" +\r\n \"
{{message.MessageSubType.Name}}
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apModalWizard.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"

{{selectedStep.title}}

\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apPatientContextMenu.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apPatientContextMenuModal.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apPharmacyAddress.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/apSelect.html',\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apFindPharmacy.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apFindPharmacyTemplate.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t{{::match.model.Name}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t{{'ERx Configured' | translate}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t{{'ERx Not Configured' | translate}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\t\t{{'Mail Order' | translate}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t{{::match.model.Phone.PhoneNumber}}\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\tCrossStreet: {{::match.model.MasterPharmacy.CrossStreet}}\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apFindPrmUser.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apFindPrmUserTemplate.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::match.model.LastName}}, {{::match.model.FirstName}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" Type: {{::match.model.Type}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::match.model.Notes}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apPatientSearch.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/find/apPatientSearchTemplate.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t \\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t {{::match.model.FirstName}}\\r\" +\r\n \"\\n\" +\r\n \"\t {{::match.model.LastName}}\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t \\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t ID: {{::match.model.ExternalId}}\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/multiSelectCheckBox.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/ngRepeatColumnReset.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apAppointmentBrief.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" ({{::$ctrl.getDuration($ctrl.appointment.StartDate) }})
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::'Provider'| translate}} :\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.appointment.ProviderName}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::'Status'| translate}} :\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.appointment.AppointmentStatus.Description}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::'Reason'| translate}} :\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.appointment.AppointmentType.Name}}\\r\" +\r\n \"\\n\" +\r\n \" - \\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.appointment.Reason}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apAppointmentListItem.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::appt.Name}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::appt.BirthDate}}\\r\" +\r\n \"\\n\" +\r\n \" | {{::appt.Age}}\\r\" +\r\n \"\\n\" +\r\n \" | {{::appt.Gender.charAt(0)}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::scheduleTypeDescription}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{appt.AppointmentType.Name || appt.AppointmentType.Description}}\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" |\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{appt.Reason}}\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" -\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
 \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apAppointmentListTemplateSlot.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t\t\t{{appt.AppointmentType.Name || appt.AppointmentType.Description}}\\r\" +\r\n \"\\n\" +\r\n \"\t\t\\r\" +\r\n \"\\n\" +\r\n \"\t
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apMessageListItem.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.message.SubType | characters:20}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.message.PatientName}}\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.message.Type}}\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.message.SubType}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{::$ctrl.message.Header}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apPharmacyTileDragDrop.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{pharmacy.Name}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" doneERx\\r\" +\r\n \"\\n\" +\r\n \" Configured\\r\" +\r\n \"\\n\" +\r\n \" Mail Order
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{pharmacy.Address.Address1}}\\r\" +\r\n \"\\n\" +\r\n \" {{pharmacy.Address.City}}{{pharmacy.Address.State}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
{{pharmacy.Phone.PhoneNumber}}
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" done\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\r\n\r\n $templateCache.put('/core-ui/views/directives/partials/apVisitBrief.html',\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" \\r\" +\r\n \"\\n\" +\r\n \" ({{::$ctrl.getDuration($ctrl.visit.VisitDate || $ctrl.visit.Date) }})
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \" {{$ctrl.visit.ProviderName}}\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\\r\" +\r\n \"\\n\" +\r\n \"
\"\r\n );\r\n\n}]);\n","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').component('apCachingSettings', {\r\n templateUrl: '/core-ui/component-views/ap-caching-settings.html',\r\n controllerAs: 'vm',\r\n controller: [\r\n '_',\r\n 'AprimaCache',\r\n ApCachingSettings,\r\n ],\r\n });\r\n\r\n function ApCachingSettings(\r\n _,\r\n AprimaCache\r\n ) {\r\n var vm = this;\r\n\r\n vm.clearAll = clearAll;\r\n vm.totalSize = totalSize;\r\n\r\n function clearAll() {\r\n return AprimaCache.clearAll();\r\n }\r\n\r\n function totalSize() {\r\n var info = AprimaCache.info();\r\n if(!info) {\r\n return 0;\r\n }\r\n\r\n var size = _.reduce(info.caches, function(sum, cache) {\r\n var newSum = sum + ((cache && cache.size) || 0);\r\n return newSum;\r\n }, 0);\r\n\r\n return size;\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').component('apDocumentViewerWithDownload', {\r\n templateUrl: '/core-ui/component-views/apDocumentViewWithDownload.html',\r\n bindings: {\r\n disableFullscreen: ' 1) {\r\n return null;\r\n }\r\n\r\n var refills = firstInstruction.Refills || 0;\r\n\r\n return refills;\r\n }\r\n\r\n function substitutionText(prescription) {\r\n if(!prescription) {\r\n return null;\r\n }\r\n\r\n var text = prescription.DispenseAsWritten ?\r\n 'DAW (Substitution Not Allowed)' :\r\n 'Substitution Allowed';\r\n return text;\r\n }\r\n\r\n function strengthText(prescription) {\r\n if(!prescription) {\r\n return null;\r\n }\r\n\r\n var text = prescription.DrugStrength;\r\n if(prescription.DrugStrengthUnits) {\r\n text += ' ' + prescription.DrugStrengthUnits;\r\n }\r\n return text;\r\n }\r\n\r\n function productCodeText(prescription) {\r\n if(!prescription) {\r\n return null;\r\n }\r\n\r\n var text = prescription.DrugNdc + ' (NDC)';\r\n return text;\r\n }\r\n\r\n function drugDbCodeText(prescription) {\r\n if(!prescription) {\r\n return null;\r\n }\r\n\r\n var text = prescription.DrugRxNormCode;\r\n var qualifier = rxNormQualifer[prescription.DrugRxNormQualifier];\r\n if(qualifier) {\r\n text += ' (' + qualifier + ')';\r\n }\r\n return text;\r\n }\r\n\r\n function drugFormText(prescription) {\r\n if(!prescription) {\r\n return null;\r\n }\r\n\r\n var text = prescription.UnitOfMeasureName;\r\n if(prescription.UnitOfMeasureCode) {\r\n text += ' (' + prescription.UnitOfMeasureCode + ')';\r\n }\r\n return text;\r\n }\r\n\r\n function hasDetails() {\r\n return vm.requestedMed &&\r\n (vm.requestedMed.WrittenDate ||\r\n vm.requestedMed.LastFillDate ||\r\n vm.requestedMed.ExpirationDate ||\r\n vm.requestedMed.EffectiveDate ||\r\n vm.requestedMed.PeriodEnd ||\r\n vm.requestedMed.DateValidated ||\r\n vm.requestedMed.SoldDate ||\r\n vm.requestedMed.PriorAuthorizationDescription ||\r\n vm.requestedMed.PriorAuthorizationStatusTerm);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular){\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').component('apErxRequestPatient', {\r\n templateUrl: '/core-ui/component-views/ap-erx-request-patient.html',\r\n bindings: {\r\n requestedPatient: '<',\r\n currentPatient: ' that has all of the results inside of it\r\n // if this attribute isn't used, then it will never add a header\r\n var typeaheadHeader = 'ap-typeahead-default-header';\r\n\r\n // This attribute will allow the user to select 'None' note: you will also need to add 'ap-typeahead-none-action'\r\n var typeaheadDisplayNone = 'ap-typeahead-display-none';\r\n\r\n // Default will result in an empty selection ex. ap-typeahead-none-action=\"vm.callNoneAction()\"\r\n var typeaheadNoneAction = 'ap-typeahead-none-action';\r\n\r\n // name of new directive to trigger the typeahead on click\r\n var apTypeaheadSearchOnClick = 'apTypeaheadSearchOnClick';\r\n\r\n // property to store original event 'target' value\r\n var originalTargetProp = 'apTypeaheadOriginalTarget';\r\n\r\n // attribute to specify that if you change the model to a string with code, then it will trigger a search for that\r\n var apTypeaheadSearchOnModelUpdate = 'apTypeaheadSearchOnModelUpdate';\r\n\r\n angular.module('aprima-core-ui').decorator('uibTypeaheadPopupDirective', [\r\n '_',\r\n '$delegate',\r\n '$parse',\r\n 'enableTypeaheadTrackBy',\r\n 'findTypeahead', \r\n 'positionTypeaheadPopup',\r\n 'setTypeaheadPopupHeight',\r\n 'typeaheadPopupClass',\r\n uibTypeaheadPopupDecorator,\r\n ]);\r\n\r\n angular.module('aprima-core-ui').decorator('uibTypeaheadDirective', [\r\n '$delegate',\r\n '$document',\r\n uibTypeaheadDecorator,\r\n ]);\r\n\r\n angular.module('aprima-core-ui').directive(apTypeaheadSearchOnClick, [\r\n 'ClickListenerService',\r\n apTypeaheadSearchOnClickDirective,\r\n ]);\r\n\r\n function uibTypeaheadPopupDecorator(\r\n _,\r\n $delegate,\r\n $parse,\r\n enableTypeaheadTrackBy,\r\n findTypeahead, \r\n positionTypeaheadPopup,\r\n setTypeaheadPopupHeight,\r\n typeaheadPopupClass\r\n ) {\r\n\r\n var directive = $delegate[0];\r\n var compile = directive.compile;\r\n\r\n directive.compile = function(tElement) {\r\n var link = compile.apply(this, arguments);\r\n\r\n //the element that has typeahead on it\r\n var typeaheadElement = findTypeahead(tElement);\r\n enableTypeaheadTrackBy(tElement, typeaheadElement);\r\n typeaheadPopupClass.init(tElement, typeaheadElement);\r\n var header = typeaheadElement.attr(typeaheadHeader);\r\n if(header) {\r\n var headerElement = angular.element('
{{defaultHeader()}}
');\r\n tElement.prepend(headerElement);\r\n }\r\n\r\n var displayNone = typeaheadElement.attr(typeaheadDisplayNone);\r\n var noneAction = typeaheadElement.attr(typeaheadNoneAction);\r\n if(displayNone) {\r\n var noneElement = angular.element('
None
');\r\n tElement.prepend(noneElement);\r\n }\r\n\r\n return function(scope, element) {\r\n // Fixes issue where you can click in the list of matches on a header or something\r\n // without trying to select a match\r\n // and the matches will still get reset\r\n element.on('click', stopPropagation);\r\n scope.$on('$destroy', function () {\r\n element.off('click', stopPropagation);\r\n });\r\n \r\n if(header) {\r\n scope.defaultHeader = function() {\r\n // The default header should only be shown if we're displaying the default results.\r\n var hasDefaultMatches = scope.matches && scope.matches[0] && scope.matches[0].model && scope.matches[0].model.isDefault;\r\n if(hasDefaultMatches) {\r\n // evaluate on outer parent scope because that is what typeahead would evaluate this attribute on\r\n return scope.$parent.$parent.$eval(header);\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n if(displayNone) {\r\n scope.displayNone = function() {\r\n // evaluate on outer parent scope because that is what typeahead would evaluate this attribute on\r\n return scope.$parent.$parent.$eval(displayNone);\r\n };\r\n }\r\n\r\n if(noneAction) {\r\n scope.noneAction = function() {\r\n // evaluate on outer parent scope because that is what typeahead would evaluate this attribute on\r\n return scope.$parent.$parent.$eval(noneAction);\r\n };\r\n }\r\n\r\n var typeaheadNgModel = typeaheadElement.controller('ngModel');\r\n var triggerSearch = _.partial(typeaheadTriggerSearch, typeaheadNgModel);\r\n scope.triggerSearch = triggerSearch;\r\n\r\n var interceptor = typeaheadElement.attr(typeaheadSelectInterceptor);\r\n\r\n var selectInterceptor = function() { return true; };\r\n if(interceptor) {\r\n var parsedInterceptor = $parse(interceptor);\r\n selectInterceptor = function(item, evt) {\r\n var interceptorArgs = {\r\n $item: item,\r\n $event: evt,\r\n $triggerSearch: triggerSearch,\r\n };\r\n // evaluate on outer scope because that is what typeahead would evaluate this attribute on\r\n return parsedInterceptor(scope.$parent.$parent, interceptorArgs);\r\n };\r\n }\r\n\r\n scope.shouldSelect = selectInterceptor;\r\n\r\n // override the select function to use the interceptor provided by the typeaheadSelectInterceptor attr\r\n var parentSelect = scope.$parent.select;\r\n scope.$parent.select = function(activeIdx, evt) {\r\n var match = scope.$parent.matches[activeIdx];\r\n var item = match.model;\r\n\r\n if(match.override || selectInterceptor(item, evt)) {\r\n return parentSelect.apply(this, arguments);\r\n }\r\n else if(evt && evt.stopPropagation) {\r\n evt.stopPropagation();\r\n }\r\n };\r\n\r\n scope.selectOther = function(obj, evt, override) {\r\n scope.$parent.matches[otherMatchProp] = {\r\n id: otherMatchProp,\r\n label: '',\r\n model: obj,\r\n override: !!override,\r\n };\r\n scope.selectMatch(otherMatchProp, evt);\r\n delete scope.$parent.matches[otherMatchProp];\r\n };\r\n\r\n link.apply(this, arguments);\r\n\r\n setTypeaheadPopupHeight(scope, element, typeaheadElement);\r\n positionTypeaheadPopup(scope, element, typeaheadElement);\r\n };\r\n };\r\n\r\n return $delegate;\r\n }\r\n\r\n function uibTypeaheadDecorator(\r\n $delegate\r\n ) {\r\n\r\n var directive = $delegate[0];\r\n\r\n var directiveController = directive.controller;\r\n directive.controller = [\r\n '$attrs',\r\n '$controller',\r\n '$document',\r\n '$element',\r\n '$scope',\r\n '$transclude',\r\n uibTypeaheadController,\r\n ];\r\n\r\n var compile = directive.compile;\r\n directive.compile = function() {\r\n var link = compile.apply(this, arguments);\r\n\r\n return function(scope, element, attrs, ctrls) {\r\n var ngModel = ctrls[0];\r\n var triggerSearch = _.partial(typeaheadTriggerSearch, ngModel);\r\n\r\n link.apply(this, arguments);\r\n\r\n // Setup an event handler to allow a search to be triggered manually\r\n scope.$on(typeaheadSearchEvent, function (e, selector, value) {\r\n if (element.is(selector)) {\r\n triggerSearch(value);\r\n element.focus();\r\n }\r\n });\r\n\r\n // if this attribute evaluates to truthy, then add a formatter that will trigger the search\r\n // if the modelValue is a string\r\n if(scope.$eval(attrs[apTypeaheadSearchOnModelUpdate])) {\r\n var typeaheadFormatter = ngModel.$formatters.pop();\r\n ngModel.$formatters.push(createSearchFormatter(typeaheadFormatter));\r\n }\r\n\r\n function createSearchFormatter(originalFormatterFn) {\r\n return searchFormatter;\r\n\r\n function searchFormatter(modelValue) {\r\n if(modelValue && angular.isString(modelValue)) {\r\n triggerSearch(modelValue);\r\n return modelValue;\r\n }\r\n return originalFormatterFn(modelValue);\r\n }\r\n }\r\n };\r\n };\r\n\r\n return $delegate;\r\n\r\n\r\n function uibTypeaheadController(\r\n $attrs,\r\n $controller,\r\n $document,\r\n $element,\r\n $scope,\r\n $transclude\r\n ) {\r\n var domElement = $element[0];\r\n var documentElement = $document[0].documentElement;\r\n\r\n // Register these listeners in this order, because the directiveController\r\n // registers a 'click' listener on the document as well.\r\n // Surrounding that listener with these 2 will allow us to control how the directive controller\r\n // handles the event, and then cleanup anything extra afterwards.\r\n $document.on('click', documentClickHandlerStart);\r\n var controller = $controller(directiveController, {\r\n $attrs: $attrs,\r\n $element: $element,\r\n $scope: $scope,\r\n $transclude: $transclude,\r\n });\r\n $document.on('click', documentClickHandlerEnd);\r\n \r\n\r\n $scope.$on('$destroy', function () {\r\n $document.off('click', documentClickHandlerStart);\r\n $document.off('click', documentClickHandlerEnd);\r\n });\r\n\r\n return controller;\r\n\r\n\r\n // This function is setup to not allow clicks in a separate modal to close out of typeahead matches,\r\n // since the modal is supposed to be sort of separate from the current page.\r\n function documentClickHandlerStart(event) {\r\n var target = event && event.target;\r\n if (!target) {\r\n return;\r\n }\r\n\r\n if (target === documentElement) {\r\n // If the click is on the documentElement, then it is most likely because\r\n // the mouse was dragged outside the screen.\r\n // Set the target to be the current typeahead element, so the matches won't get closed.\r\n event[originalTargetProp] = event.target;\r\n event.target = domElement;\r\n return;\r\n }\r\n\r\n\r\n // If the click is inside a modal, and the modal doesn't contain this typeahead,\r\n // then set the target to be the current typeahead element, so the matches won't get closed.\r\n var targetModalContainer = $(target).parents('.modal')[0];\r\n if (targetModalContainer && !$.contains(targetModalContainer, domElement)) {\r\n event[originalTargetProp] = event.target;\r\n event.target = domElement;\r\n return;\r\n }\r\n }\r\n\r\n function documentClickHandlerEnd(event) {\r\n var originalTarget = event && event[originalTargetProp];\r\n if(originalTarget) {\r\n // if the target was changed by the handler above, then reset it back to its original value,\r\n // and cleanup the originalTargetProp to avoid side effects\r\n event.target = originalTarget;\r\n delete event[originalTargetProp];\r\n }\r\n }\r\n }\r\n }\r\n\r\n function apTypeaheadSearchOnClickDirective(\r\n ClickListenerService\r\n ) {\r\n\r\n var directive = {\r\n restrict: 'A',\r\n link: link,\r\n };\r\n\r\n return directive;\r\n\r\n function link(\r\n scope,\r\n elem,\r\n attrs\r\n ) {\r\n var dereg = ClickListenerService.register(elem, clickHandler);\r\n\r\n // prevent default of mousedown event on this element so it doesn't get focused, and the\r\n // typeahead input box can be focused instead\r\n elem.on('mousedown', preventDefault);\r\n\r\n scope.$on('$destroy', function () {\r\n elem.off('mousedown', preventDefault);\r\n dereg();\r\n });\r\n\r\n function clickHandler() {\r\n var selector = scope.$eval(attrs[apTypeaheadSearchOnClick]);\r\n var value = scope.$eval(attrs[apTypeaheadSearchOnClick + 'Value']);\r\n\r\n scope.$broadcast(typeaheadSearchEvent, selector, value);\r\n }\r\n\r\n function preventDefault(event) {\r\n if(event && event.preventDefault) {\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n function typeaheadTriggerSearch(ngModel, value) {\r\n ngModel.$$lastCommittedViewValue = null;\r\n ngModel.$setViewValue(value || ngModel.$viewValue);\r\n ngModel.$render();\r\n }\r\n\r\n function stopPropagation(event) {\r\n if(event && event.stopPropagation) {\r\n event.stopPropagation();\r\n }\r\n }\r\n \r\n})(window.angular);\r\n","angular.module('aprima-core-ui').directive('affix', function () {\r\n 'use strict';\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n //element is already a jquery or jqlite object\r\n element.affix({\r\n offset: {\r\n top: 95\r\n }\r\n });\r\n }\r\n };\r\n});\r\n","angular.module('aprima-core-ui').directive('apAddress',\r\n ['Bridge',\r\n function (Bridge) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n address: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apAddress.html',\r\n link: function($scope) {\r\n $scope.openMap = function () {\r\n Bridge.fireEvent('openExternalMapsApp', {\r\n Address1: $scope.address.Address1,\r\n Address2: $scope.address.Address2,\r\n City: $scope.address.City,\r\n State: $scope.address.State,\r\n Zip: $scope.address.Zip,\r\n Country: $scope.address.Country\r\n });\r\n //fire event or whatever is needed to open the external map app with the address\r\n };\r\n }\r\n };\r\n }]);","angular.module('aprima-core-ui')\r\n .directive('apAndroidHeightFix', ['$interval', function($interval) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n link: function(scope, element){\r\n var cancelUpdate = false;\r\n\r\n element.css('min-height', '101%');\r\n\r\n function updateVisibility(){\r\n var totalHeight = 0;\r\n var parentHeight = $('body').height();\r\n\r\n element.children().each(function(){\r\n totalHeight = totalHeight + $(this).outerHeight();\r\n });\r\n\r\n if(totalHeight > parentHeight){\r\n $('body').css('overflow', 'visible');\r\n }\r\n else{\r\n $('body').css('overflow', 'hidden');\r\n }\r\n }\r\n\r\n var widthWatch = $interval(function(){\r\n // Even after calling $interval.cancel()\r\n // on the promise that $interval returns,\r\n // this method can still get called at least once.\r\n // That would cause it to get set to \"overflow: visible\" in the $destroy,\r\n // and then get reset to \"overflow:hidden\" after because of this method call.\r\n // To handle this race condition, check \"cancelUpdate\" to see whether\r\n // to proceed further in this method.\r\n if(cancelUpdate) {\r\n return;\r\n }\r\n\r\n updateVisibility();\r\n }, 50);\r\n\r\n scope.$on('$destroy', function(){\r\n cancelUpdate = true;\r\n $interval.cancel(widthWatch);\r\n $('body').css('overflow', 'visible');\r\n });\r\n }\r\n };\r\n}]);","angular.module('aprima-core-ui')\r\n .directive('apAppointmentContextMenu', ['$rootScope', 'SecurityRepository', 'Permissions',\r\n function ($rootScope, SecurityRepository, Permissions) {\r\n 'use strict';\r\n\r\n $rootScope.setOptsForApptContextMenu = function setOptsForApptContextMenu(opts) {\r\n $rootScope.$emit('open-appt-context-menu', opts);\r\n };\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {},\r\n templateUrl: '/core-ui/views/directives/apAppointmentContextMenu.html',\r\n link: function($scope) {\r\n $scope.getChargeCaptureTransition = function getChargeCaptureTransition() {\r\n return {\r\n appRoute: 'chargeCapture',\r\n opts: {\r\n patientId: getPatientId(),\r\n serviceSiteId: $scope.appointment.ServiceSiteId\r\n }\r\n };\r\n };\r\n \r\n var deregister = $rootScope.$on('open-appt-context-menu', function(evt, obj) {\r\n $scope.appointment = obj && obj.appointment;\r\n SecurityRepository.getPermissions(Permissions.Schedule)\r\n .then(function(permission) {\r\n $scope.schedulePermissionAllowed = permission && permission.IsAllowed;\r\n })\r\n .catch(function() {\r\n $scope.schedulePermissionAllowed = false;\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', function() {\r\n deregister();\r\n });\r\n\r\n function getPatientId()\r\n {\r\n if ($scope.appointment)\r\n {\r\n if ($scope.appointment.PatientId)\r\n {\r\n return $scope.appointment.PatientId;\r\n }\r\n\r\n if ($scope.appointment.Patient)\r\n {\r\n return $scope.appointment.Patient.Id;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui').directive('apAuthorization', [ 'AuthorizationService', function (AuthorizationService) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n providerRequired: '@'\r\n },\r\n link: function (scope, element) {\r\n if(scope.providerRequired){\r\n if(!AuthorizationService.isUserProvider()){\r\n // only calling $destroy here because this is using an isolate scope for this directive\r\n // that can be safely destroyed when this element is removed\r\n // don't do this if it's sharing an outer scope with some other element, or there will likely be issues\r\n scope.$destroy();\r\n element.remove();\r\n }\r\n }\r\n }\r\n };\r\n}]);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').directive('apAutofocus', ['$timeout', function($timeout) {\r\n return {\r\n scope: { \r\n autoFocus: '=apAutofocus' \r\n },\r\n link: function(scope, element) {\r\n if(scope.autoFocus) { \r\n $timeout(function() {\r\n element[0].focus();\r\n });\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n})(window.angular);\r\n","angular.module('aprima-core-ui').directive('apBirthdate', ['DateUtilities', function (DateUtilities) {\r\n 'use strict';\r\n\r\n\r\n return{\r\n restrict: 'E',\r\n scope: {\r\n birthdate: '@',\r\n deathdate: '@',\r\n display: '@'\r\n },\r\n compile: function () {\r\n var _link = function (scope, elem) {\r\n\r\n elem.html(DateUtilities.displayAge(DateUtilities.getPersonAge(scope.birthdate, scope.deathdate), {display: scope.display}));\r\n\r\n var watchRemover = scope.$watchCollection('[birthdate, deathdate, display]', function (newval, oldval) {\r\n var person;\r\n if (newval !== oldval) {\r\n person = DateUtilities.getPersonAge(newval[0], newval[1]);\r\n elem.html(DateUtilities.displayAge(person, {display: newval[2]}));\r\n }\r\n });\r\n\r\n scope.$on('$destroy', function(){\r\n watchRemover();\r\n });\r\n };\r\n\r\n return _link;\r\n }\r\n };\r\n}]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n var baseAttrName = 'apCheckbox';\r\n\r\n // interpolated string attribute to generate visible label text automatically\r\n var labelAttribute = baseAttrName + 'Label';\r\n\r\n // interpolated string attribute to be used in case the checkbox isn't supposed to have visible label text\r\n // but the text should show up for screenreaders\r\n var hiddenLabelAttribute = baseAttrName + 'HiddenLabel';\r\n\r\n var currentId = 0;\r\n\r\n // override this behavior for all input[type=checkbox]\r\n angular.module('aprima-core-ui').directive('input', [\r\n '$compile',\r\n '$log',\r\n apCheckBox,\r\n ]);\r\n\r\n function apCheckBox(\r\n $compile,\r\n $log\r\n ) {\r\n\r\n var directive = {\r\n restrict: 'E',\r\n compile: compile,\r\n };\r\n\r\n return directive;\r\n\r\n\r\n function compile(\r\n tElement,\r\n tAttrs\r\n ) {\r\n if(tAttrs.type !== 'checkbox' || tElement.hasClass('native')) {\r\n return;\r\n }\r\n\r\n var returnValue = {\r\n post: postLink,\r\n };\r\n\r\n // add the class to wrap this, so it all looks right\r\n tElement.parent().addClass('ap-checkbox-wrapper');\r\n\r\n // set the tabindex to 0 if it's not set, so this checkbox can be focusable in the document's source order\r\n // this attribute isn't interpolated, so it's ok that it doesn't get $compiled\r\n if(!tAttrs.tabindex) {\r\n tAttrs.$set('tabindex', 0);\r\n }\r\n\r\n return returnValue;\r\n }\r\n\r\n function postLink(\r\n scope,\r\n element,\r\n attrs\r\n ) {\r\n var errors = [];\r\n\r\n var labelText;\r\n var checkboxLabel;\r\n\r\n var checkBoxId = attrs.id;\r\n if(!checkBoxId) {\r\n checkBoxId = newId();\r\n attrs.$set('id', checkBoxId);\r\n\r\n errors.push('This checkbox doesn\\'t have the id attribute filled in. An id should be added. A temp id \"' + checkBoxId + '\" was created as a fallback,' +\r\n ' and if a NEW label is generated for this checkbox, the label will be associated to it.');\r\n }\r\n\r\n if(attrs[hiddenLabelAttribute]) {\r\n labelText = attrs[hiddenLabelAttribute];\r\n checkboxLabel = angular.element('');\r\n }\r\n else if(attrs[labelAttribute]) {\r\n labelText = attrs[labelAttribute];\r\n checkboxLabel = angular.element('');\r\n }\r\n else {\r\n var nextNode = element.next()[0];\r\n var nextNodeName = nextNode && nextNode.nodeName && nextNode.nodeName.toLowerCase();\r\n\r\n // without a label next to it, the checkbox, won't show up, so add one, even if no text was passed in\r\n if(nextNodeName !== 'label') {\r\n labelText = checkBoxId;\r\n checkboxLabel = angular.element('');\r\n\r\n errors.push('This checkbox doesn\\'t have a label after it and the ' +\r\n labelAttribute + ' attribute and ' +\r\n hiddenLabelAttribute + ' attribute are not filled in. One of these options needs to be used for correct behavior.' +\r\n ' A label with the id as the text was created as a fallback.');\r\n }\r\n else {\r\n printErrors();\r\n return;\r\n }\r\n }\r\n\r\n checkboxLabel.attr('for', checkBoxId);\r\n checkboxLabel.text(labelText);\r\n element.after(checkboxLabel);\r\n $compile(checkboxLabel)(scope);\r\n\r\n printErrors();\r\n return;\r\n\r\n\r\n function printErrors() {\r\n if(errors.length) {\r\n // print out errors that have the actual dom element, instead of just the template element,\r\n // so they can be more easily traced to the dom\r\n errors.forEach(function(error) {\r\n $log.warn(error, element[0]);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function newId() {\r\n var id = 'ap-checkbox-' + currentId++;\r\n return id;\r\n }\r\n\r\n})(window.angular);\r\n","/*\r\nAdapted from https://github.com/ianwalter/ng-context-menu with an MIT license.\r\n*/\r\n(function () {\r\n 'use strict';\r\n angular.module('aprima-core-ui').directive('apContextMenu', [\r\n '$window',\r\n '$document',\r\n 'AprimaAnalytics',\r\n '$log',\r\n 'ClickListenerService',\r\n 'PressListenerService',\r\n '$rootScope',\r\n '$parse',\r\n 'Bridge',\r\n '$timeout',\r\n '$transitions',\r\n function apContextMenu(\r\n $window,\r\n $document,\r\n AprimaAnalytics,\r\n $log,\r\n ClickListenerService,\r\n PressListenerService,\r\n $rootScope,\r\n $parse,\r\n Bridge,\r\n $timeout,\r\n $transitions\r\n ) {\r\n var menuTracker = {\r\n element: null,\r\n menuElement: null\r\n };\r\n\r\n Bridge.on('navigate', $rootScope, broadcastCloseContextMenu);\r\n $transitions.onSuccess({}, function closeContextMenu() {\r\n //must do it in a timeout because it interferes with the current $digest cycle\r\n $timeout(broadcastCloseContextMenu, 0);\r\n });\r\n\r\n return {\r\n restrict: 'A',\r\n scope: false,\r\n link: link,\r\n };\r\n\r\n function broadcastCloseContextMenu() {\r\n $rootScope.$broadcast('close-context-menu');\r\n }\r\n\r\n function getBackdrop() {\r\n var element;\r\n var parent = $document.find('#context-menu-container');\r\n var backdrops = parent.find('.context-menu-backdrop');\r\n var deregisterFn = angular.noop;\r\n\r\n //add the backdrop if it isnt already on the page\r\n if (!backdrops.length) {\r\n element = angular.element('
')[0];\r\n parent.append(element);\r\n } else {\r\n element = backdrops[0];\r\n }\r\n\r\n element = angular.element(element);\r\n\r\n return {\r\n addBackdrop: addBackdrop,\r\n removeBackdrop: removeBackdrop,\r\n };\r\n\r\n function addBackdrop(backdropClickHandler) {\r\n element.addClass('on');\r\n deregisterFn = ClickListenerService.register(element, backdropClickHandler);\r\n }\r\n\r\n function removeBackdrop() {\r\n element.removeClass('on');\r\n deregisterFn();\r\n }\r\n }\r\n\r\n function link(scope, element, attrs) {\r\n var opened = false;\r\n var backdrop = getBackdrop();\r\n var handleClick = attrs.apContextMenuOnClick ? !!JSON.parse(String(attrs.apContextMenuOnClick).toLowerCase()) : false;\r\n var openFn = attrs.apContextMenuOpen ? $parse(attrs.apContextMenuOpen) : angular.noop;\r\n var closeFn = attrs.apContextMenuClose ? $parse(attrs.apContextMenuClose) : angular.noop;\r\n var setPosition = _.isUndefined(attrs.apContextMenuSetPosition) ? true : !!$parse(attrs.apContextMenuSetPosition)();\r\n var lastEvent = null;\r\n var observer = new MutationObserver(function () {\r\n if (lastEvent) {\r\n resizeMenu(lastEvent, menuTracker.menuElement);\r\n }\r\n });\r\n var deregisterClose = $rootScope.$on('close-context-menu', tryCloseContextMenu);\r\n var deregisterListener;\r\n\r\n //browser default right click menu event\r\n element.bind('contextmenu', handleOpenContextMenuEvent);\r\n\r\n if (handleClick) {\r\n deregisterListener = ClickListenerService.register(element, handleOpenContextMenuEvent);\r\n } else {\r\n deregisterListener = PressListenerService.register(element, handleOpenContextMenuEvent);\r\n }\r\n\r\n scope.$on('$destroy', cleanup);\r\n\r\n function openContextMenu(event) {\r\n AprimaAnalytics.sendEvent('gestures', 'open-context-menu', attrs.apContextMenuType || '', 0);\r\n\r\n var menuElement = menuTracker.menuElement;\r\n //show and THEN calculate positional properties\r\n menuElement.addClass('open');\r\n\r\n lastEvent = event;\r\n resizeMenu(event, menuElement);\r\n\r\n //Track changes to the DOM tree so that if it changes, the menu will resize.\r\n observer.observe(menuElement[0], {childList: true, subtree: true});\r\n\r\n opened = true;\r\n\r\n backdrop.addBackdrop(backdropClickHandler);\r\n }\r\n\r\n function resizeMenu(event, menuElement) {\r\n if (!menuElement) {\r\n return;\r\n }\r\n\r\n if (!event.pageX && event.pageX !== 0) {\r\n AprimaAnalytics.sendEvent('gestures', 'open-context-menu', 'X,Y coords could not be found', 0);\r\n $log.warn('Could not determine X,Y coordinates for ');\r\n }\r\n\r\n var doc = $document[0].documentElement,\r\n docLeft = ($window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\r\n docTop = ($window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0),\r\n elementHeight = menuElement[0].scrollHeight,\r\n elementWidth = menuElement[0].scrollWidth,\r\n docHeight = doc.clientHeight + docTop,\r\n totalHeight = event.pageY - elementHeight,\r\n docWidth = doc.clientWidth + docLeft,\r\n totalWidth = elementWidth + event.pageX,\r\n top = Math.max(event.pageY - elementHeight - docTop, 0),\r\n left = Math.max(event.pageX - docLeft, 0);\r\n\r\n if (totalHeight > docHeight) {\r\n top = top - (totalHeight - docHeight);\r\n }\r\n\r\n if (totalWidth > docWidth) {\r\n left = left - (totalWidth - docWidth);\r\n }\r\n\r\n if (setPosition) {\r\n menuElement.css('top', top + 'px');\r\n menuElement.css('left', left + 'px');\r\n }\r\n\r\n opened = true;\r\n\r\n backdrop.addBackdrop(backdropClickHandler);\r\n }\r\n\r\n function tryCloseContextMenu() {\r\n var menuElement = menuTracker.menuElement;\r\n if (menuElement) {\r\n menuElement.removeClass('open');\r\n\r\n opened = false;\r\n\r\n menuTracker.element = null;\r\n menuTracker.menuElement = null;\r\n\r\n backdrop.removeBackdrop();\r\n\r\n closeFn(scope);\r\n }\r\n }\r\n\r\n function handleOpenContextMenuEvent(event) {\r\n scope.$apply(function() {\r\n //manipulates hammerjs events to have needed properties in the same place as regular click events\r\n var srcEvent = event.srcEvent;\r\n var startEvent = event.startEvent;\r\n\r\n if (event.center && event.center.x) {\r\n event.pageX = event.center.x;\r\n event.pageY = event.center.y;\r\n } else if (srcEvent && srcEvent.pageX) {\r\n event.pageX = srcEvent.pageX;\r\n event.pageY = srcEvent.pageY;\r\n } else if (startEvent) {\r\n if (startEvent.x) {\r\n event.pageX = startEvent.x;\r\n event.pageY = startEvent.y;\r\n } else if (startEvent.touches && startEvent.touches.length) {\r\n var touch = startEvent.touches[0];\r\n event.pageX = touch.pageX;\r\n event.pageY = touch.pageY;\r\n }\r\n }\r\n\r\n tryCloseContextMenu();\r\n\r\n menuTracker.menuElement = angular.element(document.getElementById(attrs.apContextMenuTarget));\r\n menuTracker.element = event.target;\r\n\r\n openFn(scope);\r\n\r\n event.preventDefault();\r\n\r\n openContextMenu(event);\r\n });\r\n }\r\n\r\n function backdropClickHandler() {\r\n scope.$apply(tryCloseContextMenu);\r\n }\r\n\r\n function cleanup() {\r\n element.unbind('contextmenu', handleOpenContextMenuEvent);\r\n\r\n deregisterListener();\r\n deregisterClose();\r\n\r\n if (opened) {\r\n tryCloseContextMenu();\r\n }\r\n }\r\n }\r\n }\r\n ]);\r\n})();","angular.module('aprima-core-ui')\r\n .directive('apDashboardTileHeader', ['$window', '_', function ($window, _) {\r\n 'use strict';\r\n\r\n var requestAnimationFrame = window.requestAnimationFrame ||\r\n window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame ||\r\n function (callback) {\r\n $window.setTimeout(callback, 1000/60);\r\n };\r\n\r\n //taken from headroom.js. utilizes requestAnimationFrame and prevents multiple scroll events from executing on top of each other.\r\n //initialize with a a callback function, and attach handleEvent to event listeners to debounce the listener\r\n function Debouncer(callback) {\r\n this.callback = callback;\r\n this.ticking = false;\r\n this.requestedDuringTick = false;\r\n }\r\n\r\n Debouncer.prototype = {\r\n constructor: Debouncer,\r\n\r\n update: function () {\r\n if (this.callback) {\r\n this.callback();\r\n }\r\n\r\n this.ticking = false;\r\n\r\n //execute at trailing edge of debounce\r\n if(this.requestedDuringTick){\r\n this.requestedDuringTick = false;\r\n this.requestTick();\r\n }\r\n },\r\n requestTick: function () {\r\n if (!this.ticking) {\r\n requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)));\r\n this.ticking = true;\r\n }\r\n else{\r\n this.requestedDuringTick = true;\r\n }\r\n },\r\n handleEvent: function () {\r\n this.requestTick();\r\n }\r\n };\r\n\r\n\r\n function DashboardHeader(elem, watchElementSelector, options) {\r\n options = _.defaults(options, DashboardHeader.defaultOptions);\r\n\r\n this.lastY = 0;\r\n this.element = elem;\r\n this.watchElementSelector = watchElementSelector;\r\n\r\n this.scroller = options.scroller;\r\n this.topOffset = options.topOffset;\r\n this.bottomOffset = options.bottomOffset;\r\n this.scrollUpClass = options.scrollUpClass;\r\n this.scrollDownClass = options.scrollDownClass;\r\n this.affixedClassName = options.affixedClassName;\r\n\r\n var debouncer = new Debouncer(this.update.bind(this));\r\n this.debouncedUpdate = debouncer.handleEvent.bind(debouncer);\r\n }\r\n\r\n DashboardHeader.defaultOptions = {\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n scroller : $window,\r\n scrollUpClass: 'scrolled-up',\r\n scrollDownClass: 'scrolled-down',\r\n affixedClassName: 'dashboard-heading-affix'\r\n };\r\n\r\n DashboardHeader.prototype = {\r\n constructor: DashboardHeader,\r\n getWatchElement: function() {\r\n if(!this.__watchElement) {\r\n var watchElement = angular.element(this.watchElementSelector);\r\n\r\n //keep trying to find it if we there werent any results\r\n if(watchElement.length) {\r\n this.__watchElement = watchElement[0];\r\n }\r\n }\r\n return this.__watchElement;\r\n },\r\n isElementInViewport: function () {\r\n var watchElement = this.getWatchElement();\r\n\r\n if(!watchElement) {\r\n return false;\r\n }\r\n\r\n var rect = watchElement.getBoundingClientRect();\r\n\r\n //apply class when top of the element is above the viewport and when the bottom of the element is below the top of the viewport (can be outside of viewport)\r\n return rect.top < (0 + this.topOffset) && rect.bottom >= (0 + this.bottomOffset);\r\n },\r\n toggleIsVisibleClass: function () {\r\n this.element.toggleClass(this.affixedClassName, this.isElementInViewport());\r\n },\r\n getScrollY : function() {\r\n return (this.scroller.pageYOffset !== undefined) ? this.scroller.pageYOffset : (this.scroller.scrollTop !== undefined) ? this.scroller.scrollTop : (document.documentElement || document.body.parentNode || document.body).scrollTop;\r\n },\r\n //TAKEN FROM headroom.js\r\n getViewportHeight : function () {\r\n return window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n },\r\n /** TAKEN FROM headroom.js\r\n * Gets the height of the document\r\n * @see http://james.padolsey.com/javascript/get-document-height-cross-browser/\r\n * @return {int} the height of the document in pixels\r\n */\r\n getDocumentHeight : function () {\r\n var body = document.body,\r\n documentElement = document.documentElement;\r\n\r\n return Math.max(\r\n body.scrollHeight, documentElement.scrollHeight,\r\n body.offsetHeight, documentElement.offsetHeight,\r\n body.clientHeight, documentElement.clientHeight\r\n );\r\n },\r\n\r\n /** TAKEN FROM headroom.js\r\n * Gets the height of the DOM element\r\n * @param {Object} elm the element to calculate the height of which\r\n * @return {int} the height of the element in pixels\r\n */\r\n getElementHeight : function (elm) {\r\n return Math.max(elm.scrollHeight, elm.offsetHeight, elm.clientHeight);\r\n },\r\n\r\n /** TAKEN FROM headroom.js\r\n * Gets the height of the scroller element\r\n * @return {int} the height of the scroller element in pixels\r\n */\r\n getScrollerHeight : function () {\r\n return (this.scroller === window || this.scroller === document.body) ? this.getDocumentHeight() : this.getElementHeight(this.scroller);\r\n },\r\n\r\n /** TAKEN FROM headroom.js\r\n * determines if the scroll position is outside of document boundaries\r\n * @param {int} currentScrollY the current y scroll position\r\n * @return {bool} true if out of bounds, false otherwise\r\n */\r\n isOutOfBounds : function (currentScrollY) {\r\n var pastTop = currentScrollY < 0,\r\n pastBottom = currentScrollY + this.getViewportHeight() > this.getScrollerHeight();\r\n\r\n return pastTop || pastBottom;\r\n },\r\n updateScrollPosition: function () {\r\n var currentScrollY = this.getScrollY();\r\n\r\n if(this.isOutOfBounds(currentScrollY)) { // Ignore bouncy scrolling in OSX\r\n return;\r\n }\r\n //100 is the tolerance.up from the patientHeaderTile.html (must be negative in if statement), 0 is the tolerance.down\r\n if(currentScrollY-this.lastY<=-100 || currentScrollY-this.lastY>0) {\r\n var scrolledDown = currentScrollY >= this.lastY;\r\n\r\n if (scrolledDown) {\r\n this.element.addClass(this.scrollDownClass);\r\n this.element.removeClass(this.scrollUpClass);\r\n }\r\n else {\r\n this.element.removeClass(this.scrollDownClass);\r\n this.element.addClass(this.scrollUpClass);\r\n }\r\n }\r\n\r\n this.lastY = currentScrollY;\r\n },\r\n update: function () {\r\n this.toggleIsVisibleClass();\r\n this.updateScrollPosition();\r\n }\r\n };\r\n\r\n var link = function ($scope, element, attrs) {\r\n var elm = element.children('.panel-header-sticky'),\r\n scroller = document.getElementById($scope.apScroller) || window,\r\n watchElementSelector = attrs.apIsVisibleForElement,\r\n options = {\r\n scroller: scroller,\r\n topOffset: parseInt(attrs.apIsVisibleTopOffset) || 0,\r\n bottomOffset: parseInt(attrs.apIsVisibleBottomOffset) || 0,\r\n scrollUpClass: attrs.apOnScrollUpClass,\r\n scrollDownClass: attrs.apOnScrollDownClass,\r\n affixedClassName: attrs.apIsVisibleClass\r\n };\r\n\r\n var header = new DashboardHeader(elm, watchElementSelector, options);\r\n header.update();\r\n\r\n // when scrolled or collapse or expand a tile, then update the 'scrolled-up' or 'scrolled-down'\r\n // class and then add or remove class that will fix the tile header to the top\r\n scroller.addEventListener('scroll', header.debouncedUpdate);\r\n $scope.toggle = function toggle() {\r\n header.debouncedUpdate();\r\n $scope.toggleTile();\r\n };\r\n\r\n $scope.$on('$destroy', function () {\r\n scroller.removeEventListener('scroll', header.debouncedUpdate);\r\n elm = header = null;\r\n });\r\n };\r\n\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/core-ui/views/directives/apDashboardTileHeader.html',\r\n transclude: true,\r\n scope: {\r\n apScroller: '=',\r\n toggleTile: '&',\r\n },\r\n link: link\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui').directive('apDataGroup', function () {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n label: '@',\r\n value: '@',\r\n normal: '@'\r\n },\r\n templateUrl: '/core-ui/views/directives/apDataGroup.html'\r\n };\r\n});","angular.module('aprima-core-ui').directive('apDateFormatter', ['LanguageFactory', '$log', '_',\r\n function(LanguageFactory, $log, _){\r\n 'use strict';\r\n\r\n var lang = LanguageFactory.getLang();\r\n\r\n var formatter = function(date, format){\r\n var formatted,\r\n dateArray;\r\n var langCode = (!lang || lang.code === '' ) ? 'en_us' : lang.code.toLowerCase();\r\n var isEnglish = (langCode === 'en_us');\r\n\r\n if(date === undefined){\r\n return '';\r\n }\r\n\r\n //when using input[type=\"date\"], dates can have quotes added like: '\"01/01/2000\"'. This strips those quotes out since quotes shouldnt be in a date anyway.\r\n if(_.isString(date)) {\r\n date = date.replace(/\"/igm, '');\r\n }\r\n\r\n moment.locale(langCode);\r\n var thisMoment;\r\n if(moment(date, 'MM/DD/YYYY').isValid()) {\r\n thisMoment = moment(new Date(date));\r\n }\r\n else {\r\n thisMoment = moment(date);\r\n }\r\n\r\n switch (format) {\r\n\r\n case 'date-time':\r\n formatted = thisMoment.format('L LT');\r\n break;\r\n case 'short-date':\r\n if (isEnglish) {\r\n formatted = thisMoment.format('M/D/YY');\r\n }\r\n else {\r\n formatted = thisMoment.format('D/M/YY');\r\n }\r\n break;\r\n case 'date':\r\n formatted = thisMoment.format('L');\r\n break;\r\n case 'time':\r\n formatted = thisMoment.format('LT');\r\n break;\r\n case 'short-time':\r\n if (isEnglish) {\r\n formatted = thisMoment.format('h:mm');\r\n } else {\r\n formatted = thisMoment.format('H:mm');\r\n }\r\n break;\r\n case 'long-date':\r\n formatted = thisMoment.format('LL');\r\n break;\r\n case 'long-abb-date':\r\n formatted = thisMoment.format('ll');\r\n break;\r\n case 'short-day':\r\n if (isEnglish) {\r\n dateArray = thisMoment.format('llll').split(',');\r\n formatted = dateArray[0];\r\n } else {\r\n dateArray = thisMoment.format('LLLL').split(',');\r\n formatted = dateArray[0];\r\n }\r\n break;\r\n case 'long-day':\r\n dateArray = thisMoment.format('LLLL').split(',');\r\n formatted = dateArray[0];\r\n break;\r\n case 'monthname-dayofmonth' :\r\n if (isEnglish) {\r\n dateArray = thisMoment.format('lll').split(',');\r\n formatted = dateArray[0];\r\n } else {\r\n dateArray = thisMoment.format('LLL').split(',');\r\n formatted = dateArray[0];\r\n }\r\n break;\r\n case 'full-date':\r\n formatted = thisMoment.format('dddd, MMMM DD, YYYY');\r\n break;\r\n case 'abb-full-date':\r\n formatted = thisMoment.format('ddd MMM DD, YYYY');\r\n break;\r\n default:\r\n formatted = thisMoment.format('L LT');\r\n break;\r\n }\r\n\r\n return formatted;\r\n };\r\n\r\n return {\r\n restrict: 'AEC',\r\n scope: {\r\n date: '@',\r\n jsdate: '=',\r\n format: '@'\r\n },\r\n link: function (scope, element) {\r\n var removeWatch = scope.$watchCollection('[date, format, default, jsdate]', function (newval, oldval) {\r\n var output;\r\n if (newval !== oldval || output === undefined) {\r\n var date = newval[3] || newval[0];\r\n var format = newval[1];\r\n\r\n if (date !== '') {\r\n output = formatter(date, format);\r\n if (output === 'Invalid date') {\r\n $log.info('apDateFormatter: error converting ' + date);\r\n return;\r\n }\r\n element.html(output);\r\n }\r\n }\r\n });\r\n\r\n scope.$on('$destroy', function(){\r\n removeWatch();\r\n });\r\n }\r\n };\r\n\r\n }]);\r\n","angular.module('aprima-core-ui').directive('apDateRangeFormatter',\r\n [function () {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'AEC',\r\n scope: {\r\n startDate: '=',\r\n endDate: '=',\r\n format: '@',\r\n multiline: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apDateRangeFormatter.html'\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui').directive('apDocumentViewer', [\r\n 'BrowserService',\r\n 'ViewportInfo',\r\n '$sce',\r\n function (\r\n BrowserService,\r\n ViewportInfo,\r\n $sce\r\n ) {\r\n 'use strict';\r\n\r\n var imageFormats = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'rtf', 'doc', 'docx', 'tif', 'tiff'];\r\n var htmlFormats = ['html', 'htm'];\r\n var textFormats = ['txt'];\r\n var pdfFormats = ['pdf'];\r\n\r\n\r\n // We need to request a resolution for any pdfs to be rendered at, so we want to leverage the devices native resolution so that devices that are higher res\r\n // have less of a chance seeming pixelated at zoom factors. Happy side effect is that lower res devices tend to be less powerful, and this will give us smaller\r\n // images for those devices.\r\n var pageWidth = ViewportInfo.getWidth();\r\n var pageHeight = ViewportInfo.getHeight();\r\n\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/core-ui/views/directives/apDocumentViewer.html',\r\n replace: true,\r\n scope: {\r\n disableFullscreen: ' 0) {\r\n\t\t\t\t\tvar paddingTopStr = modalDialog.css('padding-top');\r\n\t\t\t\t\tvar paddingBottomStr = modalDialog.css('padding-bottom');\r\n\t\t\t\t\tvar paddingTop = parseInt(paddingTopStr);\r\n\t\t\t\t\tvar paddingBottom = parseInt(paddingBottomStr);\r\n\t\t\t\t\tif (paddingTop && paddingBottom) {\r\n\t\t\t\t\t\treservedSpace = 2 + paddingTop + paddingBottom;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(header && header.length > 0){\r\n\t\t\t\t\treservedSpace += header.outerHeight();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(footer && footer.length > 0){\r\n\t\t\t\t\treservedSpace += footer.outerHeight();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tvar target = windowSelector.height() - reservedSpace;\r\n\t\t\t\t\r\n\t\t\t\tbody.css('max-height', target + 'px');\r\n\t\t\t\t\r\n\t\t\t\tif(attrs.apFullModalAlways !== undefined){\r\n\t\t\t\t\tbody.css('height', target + 'px');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tupdateMaxHeight();\r\n\t\t\t\r\n\t\t\twindowSelector.on('resize', updateMaxHeight);\r\n\t\t\tvar observer = new MutationObserver(updateMaxHeight);\r\n\t\t\t\r\n\t\t\tobserver.observe(document.getElementsByClassName('modal')[0], {attributes: true, subtree: true, attributeFilter: ['class']});\r\n\t\t\t\r\n\t\t\tscope.$on('$destroy', function(){\r\n\t\t\t\twindowSelector.off('resize', updateMaxHeight);\r\n\t\t\t\tobserver.disconnect();\r\n\t\t\t});\r\n }\r\n };\r\n});\r\n","angular.module('aprima-core-ui').directive('apHideDevice', ['DeviceSettings', function (DeviceSettings) {\r\n 'use strict';\r\n //Will hide the element if running on a device\r\n\r\n return function(scope, element) {\r\n if(DeviceSettings.isDevice || DeviceSettings.isPhoneOrOverride || DeviceSettings.isTabletOrOverride){\r\n element.addClass('ng-hide');\r\n }\r\n };\r\n}]);\r\n","angular.module('aprima-core-ui').directive('apHighlight', function () {\r\n\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n highlight: '@',\r\n target: '@'\r\n },\r\n link: function (scope, elem) {\r\n var repl = '' + scope.highlight + '';\r\n var result = scope.target.replace(scope.highlight, repl);\r\n elem.replaceWith(result);\r\n }\r\n };\r\n\r\n});","angular.module('aprima-core-ui').controller('apIcdCodeModalCtrl', ['$scope', '$uibModalInstance', 'DiagnosisRepository', '$q', '_', 'searchParams',\r\n function ($scope, $uibModalInstance, DiagnosisRepository, $q, _, searchParams) {\r\n 'use strict';\r\n\r\n $scope.loading = true;\r\n $scope.modifierIndex = 0;\r\n\r\n var modifierPromise = DiagnosisRepository.getModifiers();\r\n var codePromise;\r\n\r\n function searchForCode(searchCode) {\r\n $scope.loading = true;\r\n searchCode = _.trim(searchCode);\r\n\r\n if ($scope.codeType === 'ICD10') {\r\n $scope.code = searchCode.substring(0, searchCode.length - 1);\r\n $scope.displayCode = $scope.code + 'X';\r\n }\r\n else {\r\n $scope.code = $scope.displayCode = searchCode;\r\n }\r\n\r\n $scope.topLevel = _.endsWith($scope.code, '.');\r\n\r\n if ($scope.topLevel) {\r\n codePromise = DiagnosisRepository.getDiagnoses($scope.code.substring(0, $scope.code.length - 1), 500);\r\n }\r\n else {\r\n codePromise = DiagnosisRepository.getDiagnoses($scope.code, 500, $scope.codeType);\r\n }\r\n\r\n performSearch();\r\n }\r\n\r\n function performSearch() {\r\n $q.all([modifierPromise, codePromise]).then(function (results) {\r\n var allModifiers = results[0].plain();\r\n var allCodes = results[1].plain();\r\n\r\n if (allCodes.length === 1) {\r\n $scope.diagnosisSelected(allCodes[0]);\r\n return;\r\n }\r\n\r\n $scope.allCodes = allCodes;\r\n $scope.filteredCodes = $scope.allCodes;\r\n\r\n var codeModifiers = _.chain(allCodes)\r\n .map('Modifiers')\r\n .flatten()\r\n .uniq()\r\n .value();\r\n\r\n var matchedCategories = _.filter(allModifiers, function (category) {\r\n var matched = _.chain(category.Modifiers)\r\n .map('Code')\r\n .intersection(codeModifiers)\r\n .some()\r\n .value();\r\n\r\n return matched;\r\n });\r\n\r\n $scope.modifierCategories = _.cloneDeep(_.sortBy(matchedCategories, 'Description'));\r\n $scope.selectedModifiers = [];\r\n updateCategories();\r\n\r\n $scope.loading = false;\r\n }).catch(function (response) {\r\n $scope.addHttpError(response);\r\n });\r\n }\r\n\r\n $scope.codeType = searchParams.codeType;\r\n searchForCode(searchParams.code);\r\n\r\n $scope.searchLevelUp = function searchLevelUp() {\r\n if (!$scope.topLevel) {\r\n searchForCode($scope.code);\r\n }\r\n };\r\n\r\n function updateCategories() {\r\n var remainingModifiers = _.chain($scope.filteredCodes)\r\n .map('Modifiers')\r\n .flatten()\r\n .uniq()\r\n .value();\r\n\r\n _.chain($scope.modifierCategories)\r\n .map('Modifiers')\r\n .flatten()\r\n .forEach(function (modifier) {\r\n modifier.disabled = !_(remainingModifiers).includes(modifier.Code);\r\n });\r\n }\r\n\r\n $scope.modifierSelected = function (modifier) {\r\n if (!modifier.disabled) {\r\n if (_($scope.selectedModifiers).includes(modifier.Code)) {\r\n _.pull($scope.selectedModifiers, modifier.Code);\r\n modifier.isSelected = false;\r\n }\r\n else {\r\n $scope.selectedModifiers.push(modifier.Code);\r\n modifier.isSelected = true;\r\n }\r\n\r\n filterCodes();\r\n updateCategories();\r\n }\r\n };\r\n\r\n function filterCodes() {\r\n $scope.filteredCodes = _.filter($scope.allCodes, function (code) {\r\n return !_.chain($scope.selectedModifiers)\r\n .difference(code.Modifiers)\r\n .some()\r\n .value();\r\n });\r\n }\r\n\r\n $scope.diagnosisSelected = function (diagnosis) {\r\n $uibModalInstance.close(diagnosis);\r\n };\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n }]);","angular.module('aprima-core-ui')\r\n .directive('apImageViewer', [function () {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/core-ui/views/directives/apImageViewer.html',\r\n replace: true,\r\n scope: {\r\n imageData: '=',\r\n currentPage: '=',\r\n pageCount: '=',\r\n loadPage: '&',\r\n disableFullscreen: ' 1) {\r\n var footerHeight = element.find('.image-footer').height();\r\n\r\n element.find('.image-container').css('padding-bottom', footerHeight);\r\n element.find('.image-container').css('margin-bottom', -1 * footerHeight);\r\n }\r\n\r\n resetElement(imageElement);\r\n resetElement(fullscreenImageElement);\r\n }\r\n });\r\n\r\n function resetElement(element) {\r\n element.element.className = 'animate';\r\n element.initScale = 1;\r\n element.initialXCoordinate = 0;\r\n element.initialYCoordinate = 0;\r\n element.transform = {\r\n translate: { x: element.initialXCoordinate, y: element.initialYCoordinate },\r\n scale: 1,\r\n };\r\n requestElementUpdate(element);\r\n }\r\n\r\n function updateElementTransform(element) {\r\n var value = [\r\n // Even though we're only translating in 2 dimensions, we want to continue using the translate3D function. The browsers in\r\n // Android and iOS use GPU acceleration for the 3D transforms but not for 2D ones, so translate3D ends up being more performant\r\n // than just calling translate. Run http://jsperf.com/translate3d-vs-xy/28 to verify.\r\n 'translate3d(' + element.transform.translate.x + 'px, ' + element.transform.translate.y + 'px, 0)',\r\n 'scale(' + element.transform.scale + ', ' + element.transform.scale + ')'\r\n ];\r\n\r\n value = value.join(' ');\r\n element.element.css('webkit-transform', value);\r\n element.element.css('transform', value);\r\n element.element.css('moz-transform', value);\r\n }\r\n\r\n function requestElementUpdate(element) {\r\n updateElementTransform(element);\r\n }\r\n\r\n scope.onPinch = function (ev) {\r\n pinch(imageElement, ev);\r\n };\r\n\r\n scope.onFsPinch = function (ev) {\r\n pinch(fullscreenImageElement, ev);\r\n };\r\n\r\n function pinch(element, ev) {\r\n element.element.className = '';\r\n\r\n element.transform.scale = Math.max(element.initScale * ev.scale, 1);\r\n\r\n requestElementUpdate(element);\r\n }\r\n\r\n scope.onRelease = function (ev) {\r\n if (ev) {\r\n release(imageElement);\r\n }\r\n };\r\n \r\n scope.onFsRelease = function(ev){\r\n if(ev){\r\n release(fullscreenImageElement);\r\n }\r\n };\r\n \r\n function release(element){\r\n element.initScale = element.transform.scale;\r\n element.initialXCoordinate = element.transform.translate.x;\r\n element.initialYCoordinate = element.transform.translate.y;\r\n\r\n element.minOffsetX = -1 * (element.element.width() * ((element.transform.scale - 1) / 2));\r\n element.maxOffsetX = element.minOffsetX + (element.element.width() * (element.transform.scale - 1));\r\n element.minOffsetY = -1 * (element.element.height() * ((element.transform.scale - 1) / 2));\r\n element.maxOffsetY = element.minOffsetY + (element.element.height() * (element.transform.scale - 1));\r\n\r\n snapToContainer(element);\r\n }\r\n\r\n function snapToContainer(element) {\r\n element.transform.translate.x = element.initialXCoordinate = Math.min(Math.max(element.transform.translate.x, element.minOffsetX), element.maxOffsetX);\r\n element.transform.translate.y = element.initialYCoordinate = Math.min(Math.max(element.transform.translate.y, element.minOffsetY), element.maxOffsetY);\r\n\r\n requestElementUpdate(element);\r\n }\r\n\r\n scope.onTap = function () {\r\n resetElement(imageElement);\r\n };\r\n \r\n scope.onFsTap = function(){\r\n resetElement(fullscreenImageElement);\r\n };\r\n\r\n scope.moveToPage = function () {\r\n scope.loadingImage = true;\r\n\r\n scope.loadPage({ page: scope.currentPage });\r\n };\r\n\r\n function touchHandlerDummy(e) {\r\n e.preventDefault();\r\n return false;\r\n }\r\n\r\n imageElement.element.get(0).addEventListener('touchstart', touchHandlerDummy, false);\r\n imageElement.element.get(0).addEventListener('touchmove', touchHandlerDummy);\r\n imageElement.element.get(0).addEventListener('touchend', touchHandlerDummy);\r\n \r\n fullscreenImageElement.element.get(0).addEventListener('touchstart', touchHandlerDummy, false);\r\n fullscreenImageElement.element.get(0).addEventListener('touchmove', touchHandlerDummy);\r\n fullscreenImageElement.element.get(0).addEventListener('touchend', touchHandlerDummy);\r\n\r\n scope.onDrag = function (ev) {\r\n drag(imageElement, ev);\r\n };\r\n \r\n scope.onFsDrag = function (ev){\r\n drag(fullscreenImageElement, ev);\r\n };\r\n \r\n function drag(element, ev){\r\n element.element.className = '';\r\n\r\n var targetX = element.initialXCoordinate + ev.deltaX;\r\n var targetY = element.initialYCoordinate + ev.deltaY;\r\n\r\n element.transform.translate.x = targetX;\r\n element.transform.translate.y = targetY;\r\n\r\n requestElementUpdate(element);\r\n }\r\n \r\n scope.onSwipe = function(ev){\r\n swipe(ev);\r\n };\r\n \r\n scope.onFsSwipe = function(ev){\r\n swipe(ev);\r\n };\r\n \r\n function swipe(evt){\r\n if(Math.abs(evt.deltaX) > Math.abs(evt.deltaY)){\r\n if(evt.deltaX > 0 && scope.currentPage > 1){\r\n scope.currentPage--;\r\n scope.moveToPage();\r\n }\r\n else if(evt.deltaX < 0 && scope.currentPage < scope.pageCount){\r\n scope.currentPage++;\r\n scope.moveToPage();\r\n }\r\n }\r\n }\r\n\r\n scope.$on('$destroy', function () {\r\n imageDataWatch();\r\n });\r\n }\r\n };\r\n }]);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').directive('apIncludeReplace', [\r\n apIncludeReplace,\r\n ]);\r\n\r\n function apIncludeReplace(\r\n ) {\r\n //ng-include places the included content inside of a div. Sometimes this affects styling.\r\n //This directive simply replaces the div with the contents of the div, effectively making ng-include\r\n //render the content inline instead of inside of a new div.\r\n\r\n var directive = {\r\n require: 'ngInclude',\r\n restrict: 'A',\r\n link: link,\r\n };\r\n\r\n return directive;\r\n\r\n function link(\r\n scope,\r\n el\r\n ) {\r\n // This used to be el.children(), but i changed it to el.contents()\r\n // because that is what ngInclude is $compile()-ing.\r\n // The difference is that contents() also includes text and comment nodes, and children() does not.\r\n el.replaceWith(el.contents());\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-core-ui').directive('apKeyboardSpace',\r\n ['Bridge', 'DeviceSettings',\r\n function (Bridge, DeviceSettings) {\r\n 'use strict';\r\n\r\n var keyboardHeight=0;\r\n\r\n return {\r\n restrict: 'EA',\r\n link: function ($scope) {\r\n Bridge.on('keyboard-open', $scope, function (data) {\r\n //Native is focused\r\n if (document.activeElement.tagName.toUpperCase()==='BODY') {\r\n if (DeviceSettings.isPhone) {\r\n //the height of the menu on the bottom is 48px on phones\r\n keyboardHeight = data.KeyboardHeight - 48;\r\n }\r\n else {\r\n keyboardHeight = data.KeyboardHeight;\r\n }\r\n document.getElementById('keyboardspace').style.height = keyboardHeight + 'px';\r\n $scope.$broadcast('keyboard-opened', {\r\n keyboardHeight: keyboardHeight\r\n });\r\n }\r\n else { //webview is focused\r\n if (DeviceSettings.isIos) {\r\n $scope.$broadcast('keyboard-focus');\r\n }\r\n }\r\n });\r\n\r\n Bridge.on('keyboard-close', $scope, function () {\r\n document.getElementById('keyboardspace').style.height = '0px';\r\n $scope.$broadcast('keyboard-closed');\r\n });\r\n },\r\n template: '
'\r\n };\r\n }]);","angular.module('aprima-core-ui').directive('apMediaPicker', ['_', 'MediaService', function (_, MediaService) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n templateUrl: '/core-ui/views/directives/apMediaPicker.html',\r\n scope: {\r\n image: '=ngModel',\r\n onPicked: '&',\r\n pickerDescription: '@'\r\n },\r\n link: function (scope) {\r\n scope.pickImage = function () {\r\n MediaService.getMedia(scope, scope.pickerDescription, function (media, fileName, extension) {\r\n scope.image = media;\r\n scope.onPicked(media, fileName, extension);\r\n });\r\n };\r\n }\r\n };\r\n}]);\r\n","angular.module('aprima-core-ui')\r\n .directive('apMessageIcon', [function () {\r\n 'use strict';\r\n\r\n function getMessageTypeIconName(messageTypeId, messageSubTypeId) {\r\n var messageType = 'message';\r\n\r\n messageTypeId = messageTypeId || '';\r\n messageSubTypeId = messageSubTypeId || '';\r\n\r\n switch (messageTypeId.toUpperCase()) {\r\n\r\n //phone\r\n case '10101010-0000-0000-0000-000000000003':\r\n messageType = 'phone';\r\n break;\r\n\r\n //Electronic Rx Errors\r\n case '10101010-0000-0000-0000-000000000004':\r\n //Electronic Rx Benefits Errors\r\n case '10101010-0000-0000-0000-000000000014':\r\n //Electronic Rx Refill Request\r\n case 'D7716F70-61D6-4EC0-8BA6-01AFC95E99F2':\r\n //Rx Refill\r\n case 'A2B88BC2-E7C8-4990-92F6-AE28B5C0DC77':\r\n messageType = 'rx';\r\n break;\r\n\r\n //Patient Lab Order\r\n case '77882A75-7C9D-430B-9DA6-F8ED12058DDB':\r\n //Service Order Approval\r\n case '10101010-0000-0000-0000-000000000008':\r\n messageType = 'lab';\r\n break;\r\n }\r\n\r\n switch (messageSubTypeId.toUpperCase()) {\r\n //Task - Lab Alert\r\n case 'CEC2B936-B5BB-49F7-B4D0-39553FEF64D1':\r\n messageType = 'lab';\r\n break;\r\n\r\n //Patient Input - Patient Rx Refill Request\r\n case 'B1B7D286-1FB2-43D0-A883-7946B1CD8751':\r\n messageType = 'rx';\r\n break;\r\n }\r\n\r\n return messageType;\r\n }\r\n\r\n function getMessageTypeId(message) {\r\n return message.TypeId || message.MessageTypeId ||\r\n (message.MessageType != null ? message.MessageType.Id : null);\r\n }\r\n\r\n function getMessageSubTypeId(message) {\r\n return message.SubTypeId || message.MessageSubTypeId ||\r\n (message.MessageSubType != null ? message.MessageSubType.Id : null);\r\n }\r\n\r\n return {\r\n restrict: 'EA',\r\n scope: {\r\n message: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apMessageIcon.html',\r\n link: function (scope) {\r\n var typeId = getMessageTypeId(scope.message),\r\n subTypeId = getMessageSubTypeId(scope.message),\r\n messageType = getMessageTypeIconName(typeId, subTypeId),\r\n state = 'incomplete';\r\n\r\n if (scope.message.Urgency && scope.message.Urgency.toLowerCase() === 'urgent') {\r\n state = 'urgent';\r\n } else if (scope.message.Status && scope.message.Status.toLowerCase() === 'complete') {\r\n state = 'complete';\r\n }\r\n else {\r\n state = 'incomplete';\r\n }\r\n\r\n scope.iconName = messageType + '-' + state;\r\n }\r\n };\r\n }]);\r\n","(function() {\r\n 'use strict';\r\n angular.module('aprima-core-ui').directive('apMessageNewNote', [\r\n function() {\r\n return {\r\n restrict: 'E',\r\n bindToController: true,\r\n controller: [\r\n 'ListService',\r\n apMessageNewNote\r\n ],\r\n controllerAs: 'vm',\r\n scope: {\r\n generalNoteTypeId: '=?',\r\n message: '=',\r\n newNote: '=',\r\n },\r\n templateUrl: '/core-ui/views/directives/apMessageNewNote.html',\r\n };\r\n\r\n function apMessageNewNote(ListService) {\r\n /*jshint validthis: true */\r\n var vm = this;\r\n\r\n vm.generalNotes = [];\r\n vm.selectedNote = {};\r\n\r\n vm.addHttpError = angular.noop;\r\n vm.removeHttpError = angular.noop;\r\n vm.selectedNoteChanged = selectedNoteChanged;\r\n\r\n activate();\r\n\r\n function activate() {\r\n if (vm.generalNoteTypeId) {\r\n var listsToLoad = {\r\n generalNotes: 'generalnotes/' + vm.generalNoteTypeId,\r\n };\r\n ListService.getLists(listsToLoad, vm);\r\n }\r\n }\r\n\r\n function selectedNoteChanged() {\r\n vm.newNote = vm.selectedNote;\r\n }\r\n }\r\n }\r\n ]);\r\n})();","angular.module('aprima-core-ui').directive('apMessageNotes', ['$sce', '_', function ($sce, _) {\r\n 'use strict';\r\n\r\n return {\r\n scope: {\r\n message: '=',\r\n messageNotes: '=',\r\n },\r\n templateUrl: '/core-ui/views/directives/apMessageNotes.html',\r\n link: link,\r\n };\r\n\r\n function link(scope) {\r\n if (scope.messageNotes) {\r\n watchMessageNotes(scope);\r\n }\r\n }\r\n\r\n function watchMessageNotes(scope) {\r\n var dereg = scope.$watchCollection('messageNotes', function(newNotes) {\r\n _.forEach(newNotes, function (val) {\r\n // PRM shows the CreatedDate, but older servers only provided LastModificationDate.\r\n val.DisplayDate = val.CreatedDate ? val.CreatedDate : cal.LastModificationDate;\r\n val.NoteAsHtml = $sce.trustAsHtml(val.Note);\r\n });\r\n });\r\n\r\n scope.$on('$destroy', dereg);\r\n }\r\n}]);","angular.module('aprima-core-ui').directive('apMessageStatus', [function () {\r\n 'use strict';\r\n\r\n return {\r\n scope: {\r\n message: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apMessageStatus.html',\r\n link: function () {\r\n\r\n }\r\n };\r\n\r\n}]);","angular.module('aprima-core-ui')\r\n .directive('apPatientContextMenu', ['$rootScope', function ($rootScope) {\r\n 'use strict';\r\n\r\n $rootScope.setOptsForPatientContextMenu = function setOptsForPatientContextMenu(opts) {\r\n $rootScope.$emit('select-patient', opts);\r\n };\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {},\r\n templateUrl: '/core-ui/views/directives/apPatientContextMenu.html',\r\n controller: 'apPatientContextMenuCtrl'\r\n };\r\n }]);\r\n\r\nangular.module('aprima-core-ui')\r\n .controller('apPatientContextMenuCtrl',\r\n ['$scope', '$rootScope', 'apConfirm', 'aprgettext', 'ChargeCaptureRepository','TransitionManager',\r\n 'toaster', 'ExternalPatientsRepository', 'LocalStorageRepository', 'SecurityRepository', 'Permissions', 'ClientInfoRepository',\r\n function ($scope, $rootScope, apConfirm, gettext, ChargeCaptureRepository, TransitionManager,\r\n toaster, ExternalPatientsRepository, LocalStorageRepository, SecurityRepository, Permissions, ClientInfoRepository) {\r\n 'use strict';\r\n\r\n function setup() {\r\n if(!$scope.patient) {\r\n return;\r\n }\r\n\r\n $scope.isFndEnabled = ClientInfoRepository.isFndEnabled();\r\n\r\n SecurityRepository.getPermissions(Permissions.Schedule)\r\n .then(function(permission) {\r\n $scope.schedulePermissionAllowed = permission && permission.IsAllowed;\r\n })\r\n .catch(function() {\r\n $scope.schedulePermissionAllowed = false;\r\n });\r\n\r\n $scope.defaultServiceSiteId = LocalStorageRepository.getDefaultServiceSiteId();\r\n\r\n $scope.erxEnabled = LocalStorageRepository.getIsERxEnabled();\r\n\r\n var settings = LocalStorageRepository.getDashboardTileSettings();\r\n\r\n $scope.tiles = settings && settings.Tiles ? settings.Tiles : [];\r\n\r\n $scope.chargeCaptureOptions = {\r\n patientId: $scope.patientId || ($scope.patient && $scope.patient.Id)\r\n };\r\n\r\n if ($scope.serviceSiteId) {\r\n $scope.chargeCaptureOptions.serviceSiteId = $scope.serviceSiteId;\r\n }\r\n\r\n if ($scope.chargeCaptureId) {\r\n $scope.chargeCaptureOptions.chargeCaptureId = $scope.chargeCaptureId;\r\n }\r\n }\r\n\r\n var deregister = $rootScope.$on('select-patient', function(evt, obj) {\r\n $scope.patient = obj && obj.patient;\r\n $scope.patientDashboardConfigurations = obj && obj.patientDashboardConfigurations;\r\n $scope.serviceSiteId = obj && obj.serviceSiteId;\r\n $scope.chargeCaptureId = obj && obj.chargeCaptureId;\r\n $scope.hospitalRoundId = obj && obj.hospitalRoundId;\r\n $scope.dischargeExternalPatient = obj && obj.dischargeExternalPatient;\r\n $scope.dashboardConfigurations = LocalStorageRepository.getPatientDashboardConfigurations('all');\r\n setup();\r\n });\r\n\r\n $scope.$on('$destroy', function() {\r\n deregister();\r\n });\r\n\r\n $scope.dischargePatient = function dischargePatient() {\r\n if (!$scope.dischargeExternalPatient) {\r\n return;\r\n }\r\n\r\n $scope.dischargingPatient = true;\r\n\r\n ExternalPatientsRepository.dischargePatient($scope.hospitalRoundId)\r\n .then(function (externalPatient) {\r\n $rootScope.$broadcast('ext-patient-discharged', externalPatient);\r\n }, function (err) {\r\n $rootScope.tryToastModelStateError(err);\r\n })\r\n .finally(function () {\r\n $rootScope.$broadcast('close-context-menu');\r\n $scope.dischargingPatient = false;\r\n });\r\n };\r\n\r\n $scope.removeChargeCapture = function removeChargeCapture() {\r\n $scope.removingChargeCapture = true;\r\n\r\n apConfirm('Are you sure you want to remove the eMDs Round for ' + ($scope.patient.name || 'this patient') + '?', 'Yes', 'No')\r\n .then(function(result) {\r\n if (result) {\r\n ChargeCaptureRepository.removeChargeCapture($scope.chargeCaptureOptions.chargeCaptureId)\r\n .then(function (result) {\r\n if (result.IsSuccess) {\r\n toaster.pop('success', '', gettext('eMDs Round removed successfully.'));\r\n $rootScope.$broadcast('charge-capture-tile-remove', $scope.chargeCaptureOptions);\r\n } else {\r\n toaster.pop('error', '', gettext('Failed to remove eMDs Round.'));\r\n }\r\n })\r\n .catch(function () {\r\n toaster.pop('error', '', gettext('An exception occurred while attempting to remove eMDs Round.'));\r\n });\r\n }\r\n })\r\n .finally(function () {\r\n $rootScope.$broadcast('close-context-menu');\r\n $scope.removingChargeCapture = false;\r\n });\r\n };\r\n\r\n $scope.navigateToDashboard = function(data){\r\n TransitionManager.transition({\r\n appRoute: 'patientDashboard',\r\n opts: {id: $scope.patient.Id, configId: data},\r\n });\r\n };\r\n }]);","angular.module('aprima-core-ui').directive('apPdf', [\r\n function apPdf() {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n link: function(scope, element, attrs) {\r\n var data = scope.$eval(attrs.src);\r\n element.replaceWith('');\r\n }\r\n };\r\n }]);","angular.module('aprima-core-ui').directive('apPharmacyAddress',\r\n ['DeviceSettings','$window',\r\n function (DeviceSettings, $window) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E', \r\n scope: {\r\n address: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apPharmacyAddress.html',\r\n link: function($scope) {\r\n\r\n $scope.openGMap = function () {\r\n if(DeviceSettings.isPrm)\r\n { \r\n $window.open('https://maps.google.com/maps?q='+$scope.address.Address1+' '+$scope.address.City+', '+$scope.address.State+' '+$scope.address.Zip, '_blank'); \r\n } \r\n }; \r\n \r\n },\r\n \r\n };\r\n }]);","angular.module('aprima-core-ui').directive('apSaveToFile',\r\n ['BrowserService', '_',\r\n function (BrowserService, _) {\r\n 'use strict';\r\n\r\n function link($scope, element) {\r\n\r\n var imageFormats = ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'pdf', 'rtf', 'doc', 'docx', 'tif', 'tiff'];\r\n var htmlFormats = ['html', 'htm', 'xml'];\r\n var textFormats = ['txt'];\r\n var pdfFormat = ['pdf'];\r\n\r\n function _saveAsFile(fileNameToSaveAs, base64String, contentType) {\r\n BrowserService.downloadDocumentToFile(fileNameToSaveAs, base64String, contentType, document);\r\n }\r\n\r\n function _onClick() {\r\n $scope.loadText()\r\n .then(function (attachment) {\r\n if (attachment) {\r\n\r\n $scope.attachment = attachment;\r\n $scope.attachment.attachmentData = attachment.Data;\r\n\r\n $scope.isPdf = _.includes(pdfFormat, attachment.Extension);\r\n $scope.isImage = _.includes(imageFormats, attachment.Extension);\r\n $scope.isHtml = _.includes(htmlFormats, attachment.Extension);\r\n $scope.isText = _.includes(textFormats, attachment.Extension);\r\n\r\n var fileName = $scope.fileName || attachment.FileName;\r\n\r\n if($scope.isPdf){\r\n _saveAsFile(fileName + '.pdf', $scope.attachment.attachmentData, 'application/pdf');\r\n }\r\n else if($scope.isImage) {\r\n _saveAsFile(fileName + '.' + attachment.Extension, $scope.attachment.attachmentData, 'image/' + attachment.Extension);\r\n }\r\n else if($scope.isHtml) {\r\n _saveAsFile(fileName + '.html', $scope.attachment.attachmentData, 'text/html; charset=utf-8');\r\n }\r\n else if($scope.isText) {\r\n _saveAsFile(fileName + '.txt', $scope.attachment.attachmentData, 'text/html; charset=utf-8');\r\n }\r\n }\r\n });\r\n }\r\n\r\n element.on('click', _onClick);\r\n $scope.$on('$destroy', function () {\r\n element.off('click');\r\n });\r\n }\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n loadText: '&apSaveToFile',\r\n fileName: '@'\r\n },\r\n link: link\r\n };\r\n }]);","angular.module('aprima-core-ui').directive('apScrollableList', ['$timeout', function ($timeout) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope, $elem, attrs) {\r\n var elem = $elem[0];\r\n $elem.addClass('ap-scrollable');\r\n\r\n $timeout(function() {\r\n var listItemHeight = $elem.children(':last').outerHeight(true) || 40;\r\n var listItemWindowSize = scope.$eval(attrs.apScrollableList) || 5;\r\n $elem.css('max-height', listItemHeight * listItemWindowSize + 'px');\r\n });\r\n\r\n if(scope.$eval(attrs.scrollTopOnChange) && MutationObserver) {\r\n var observer = new MutationObserver(function() {\r\n //if scrollTop is not 0, then scroll to the top of list\r\n if(elem.scrollTop) {\r\n $elem.scrollTop(0);\r\n }\r\n });\r\n observer.observe(elem, { childList: true });\r\n\r\n scope.$on('$destroy', function () {\r\n observer.disconnect();\r\n });\r\n }\r\n }\r\n };\r\n}]);","// this will scroll the input element to the top of the page when you type in, so you can see more of the results\r\n// that would most likely be under it for a typeahead\r\nangular.module('aprima-core-ui').directive('apScrollOnInput', [function () {\r\n 'use strict';\r\n \r\n return {\r\n restrict: 'A',\r\n link: function($scope, element, attr){\r\n var topOffset = 0;\r\n \r\n function scroll(){\r\n var offset = element.parent().offset();\r\n window.scrollTo(offset.left, offset.top - topOffset);\r\n }\r\n \r\n if(attr.scrollTopOffset){\r\n topOffset = parseInt(attr.scrollTopOffset);\r\n }\r\n \r\n element.on('input', scroll);\r\n \r\n $scope.$on('$destroy', function(){\r\n element.off('input', scroll); \r\n });\r\n } \r\n };\r\n }]);\r\n","//I tried lots of things. ideally, we would just extend the needs to be wrapped in an element.\r\n\r\n(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').directive('apSelect', [\r\n ApSelect,\r\n ]);\r\n\r\n function ApSelect(\r\n ) {\r\n var directive = {\r\n restrict: 'E',\r\n transclude: true,\r\n templateUrl: '/core-ui/views/directives/apSelect.html',\r\n link: ApSelectLink,\r\n };\r\n\r\n return directive;\r\n\r\n function ApSelectLink(\r\n scope,\r\n element\r\n ) {\r\n // this logic is necessary to handle the fact that the chevron isn't an 'input-group-addon' anymore,\r\n // so in the cases where there is no other 'input-group-addon' or 'input-group-btn', we don't want to add the\r\n // 'input-group' class, or things will look weird\r\n // Because of this, I took the 'input-group' class off of the template for this directive\r\n var isInputGroup = element.find('.input-group-btn,.input-group-addon').length;\r\n if(isInputGroup) {\r\n var child = element.children();\r\n if(child) {\r\n child.addClass('input-group');\r\n }\r\n }\r\n\r\n var $select = element.find('select');\r\n\r\n\r\n if (!$select.hasClass('native')) {\r\n addCustomDropdownChevron();\r\n }\r\n\r\n function addCustomDropdownChevron() {\r\n $select.parent().addClass('has-feedback');\r\n var icon = angular.element('');\r\n\r\n $select.before(icon);\r\n }\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui')\r\n .directive('apSpinner', function () {\r\n return {\r\n restrict: 'E',\r\n controller: '$ionicSpinner',\r\n link: function ($scope, $element, $attrs, ctrl) {\r\n var spinnerName = ctrl.init();\r\n var size = $attrs.size || '1';\r\n $element.addClass('spinner spinner-' + spinnerName + ' spinner-' + size + 'x');\r\n }\r\n };\r\n });\r\n\r\n angular.module('aprima-core-ui')\r\n .controller('$ionicSpinner', [\r\n '$element',\r\n '$attrs',\r\n 'SpinnerService',\r\n function ($element, $attrs, SpinnerService) {\r\n var spinnerName, spinnerHtml;\r\n\r\n this.init = function () {\r\n var spinnerConfiguration = SpinnerService.getSpinner($attrs.icon);\r\n spinnerName = spinnerConfiguration.name;\r\n spinnerHtml = spinnerConfiguration.html;\r\n\r\n // Specifically for animations to work,\r\n // Android 4.3 and below requires the element to be\r\n // added as an html string, rather than dynmically\r\n // building up the svg element and appending it.\r\n $element.html(spinnerHtml);\r\n\r\n this.start();\r\n\r\n return spinnerName;\r\n };\r\n\r\n this.start = function () {\r\n SpinnerService.startSpinner($element[0], spinnerName);\r\n };\r\n\r\n }]);\r\n})(window.angular);","angular.module('aprima-core-ui').directive('apSsnField', ['apSsnFilterFilter', function (apSsnFilter) {\r\n 'use strict';\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attr, ctrl) {\r\n ctrl.$parsers.push(function (inputValue) {\r\n var transformedInput = apSsnFilter(inputValue);\r\n if (transformedInput !== inputValue) {\r\n ctrl.$setViewValue(transformedInput);\r\n ctrl.$render();\r\n }\r\n return transformedInput;\r\n });\r\n }};\r\n}]);\r\n","angular.module('aprima-core-ui').directive('apSwipeable', ['$window', '$timeout', 'Bridge', '_', 'ScrollerService', 'NgZoneService',\r\n function ($window, $timeout, Bridge, _, ScrollerService, NgZoneService) {\r\n 'use strict';\r\n var Hammer = $window.Hammer;\r\n var MutationObserver = $window.MutationObserver || $window.WebKitMutationObserver || $window.MozMutationObserver;\r\n\r\n return {\r\n restrict: 'E',//could change to allow attribute as well\r\n scope: {\r\n currentPane: '=?',\r\n paneChanged: '&',\r\n //lastHeader true is for controls that have headers that are just on the right side or full screen\r\n useLastHeader: '&',\r\n scrollerId: '@',\r\n autoResize: '@',\r\n scrollDiv: '@'\r\n },\r\n transclude: true,\r\n template: '
',\r\n link: link,\r\n };\r\n\r\n // This is wrapped to run outside of the Angular zone, because of all of the Hammer and MutationObserver\r\n // stuff it's doing, that doesn't need to happen inside of the Angular zone.\r\n // It should have a noticeable performance difference when inside of an UpgradeComponent.\r\n function link(scope, elem) {\r\n var result = NgZoneService.contextRun(function (zoneAwareObject) {\r\n return zoneAwareLink(scope, elem, zoneAwareObject);\r\n });\r\n return result;\r\n }\r\n\r\n // This zoneAwareObject always needs to be the last parameter to this function.\r\n function zoneAwareLink(scope, elem, zoneAwareObject) {\r\n scope.currentPane = scope.currentPane || 0;\r\n var $wrapper = elem.children().first(),\r\n wrapper = $wrapper.get(0),\r\n container = $wrapper.children().first(),\r\n paneCount,\r\n hammer = new Hammer(container.get(0)),\r\n initialSetup = true,\r\n scroller = $window,\r\n scrollDiv = $(scope.scrollDiv);\r\n\r\n //MutationObserver not supported until IE 11 and later, but Android and iOS are okay\r\n var observer = new MutationObserver(function(mutations) {\r\n var panesChanged = _.some(mutations, function(mutation) {\r\n return mutation.type === 'childList' && (mutation.addedNodes.length || mutation.removedNodes.length);\r\n });\r\n if(panesChanged) {\r\n updatePanes();\r\n }\r\n });\r\n\r\n //Add listeners for when Panes are added or Widths need to be resized\r\n observer.observe(container.get(0), { childList: true });\r\n\r\n scope.$evalAsync(function () {\r\n //the easyScroller won't be accessible in the dom until this point\r\n scroller = ScrollerService.getScroller(scope.scrollerId) || $window;\r\n });\r\n\r\n //Update the size of the container and\r\n //potentially show a different pane as well when the number of panes changes\r\n function updatePanes () {\r\n var panes = getPanes();\r\n if(panes && panes.length) {\r\n var newPane = scope.currentPane >= panes.length ? panes.length - 1 : scope.currentPane;\r\n setup(panes, newPane);\r\n }\r\n }\r\n\r\n var eventsEnabled;\r\n var enableEventsOnce = _.once(function () {\r\n hammer.on('panend panleft panright swipeleft swiperight', handleHammer);\r\n\r\n if(scrollDiv && scrollDiv.length === 1){\r\n hammer.on('panup pandown', handleHammer);\r\n }\r\n\r\n eventsEnabled = true;\r\n });\r\n\r\n function setup(panes, index) {\r\n paneCount = panes.length;\r\n if(paneCount) {\r\n panes.width((1/paneCount)*100 + '%');\r\n container.width(100 * paneCount + '%');\r\n }\r\n\r\n showPane(index);\r\n\r\n enableEventsOnce();\r\n initialSetup = false;\r\n }\r\n\r\n function getPanes() {\r\n return container.children();\r\n }\r\n\r\n function showPane(index, animate) {\r\n var changingPane = index !== scope.currentPane;\r\n\r\n // these hammer events are outside of angular so we need to $apply() scope changes\r\n // update the currentPane first with $apply\r\n zoneAwareObject.runInZoneIfNecessary(function() {\r\n scope.$apply(function () {\r\n scope.currentPane = index;\r\n });\r\n });\r\n\r\n var offset = -((100/paneCount)*scope.currentPane);\r\n updateContainer(offset, animate);\r\n\r\n if(scope.autoResize){\r\n var panes = getPanes();\r\n\r\n // TODO make sure current pane in panes\r\n if(panes && panes.length > 0){\r\n var currentPane = panes[scope.currentPane];\r\n var targetHeight = $(currentPane).height();\r\n\r\n $wrapper.height(targetHeight);\r\n }\r\n }\r\n\r\n if(changingPane || initialSetup) {\r\n //if easyScroller is already scrolling,\r\n //then using true for animate in scrollTo, will cause easyScroller to not scroll at all\r\n if(!scope.scrollDiv){\r\n scroller.scrollTo(0, 0, false);\r\n }\r\n Bridge.updatePageIndicator(paneCount, scope.currentPane, scope.useLastHeader());\r\n\r\n // these hammer events are outside of angular so we need to $apply() scope changes\r\n // then $apply the change function for currentPane after currentPane\r\n // was $apply-ed so that it is already updated in parent scope\r\n zoneAwareObject.runInZoneIfNecessary(function() {\r\n scope.$apply(function () {\r\n scope.paneChanged({\r\n pane: scope.currentPane,\r\n adjacentPanes: getAdjacentPanes(scope.currentPane)\r\n });\r\n });\r\n });\r\n }\r\n }\r\n\r\n function updateContainer(percent, animate) {\r\n container.removeClass('animate');\r\n\r\n if (animate) {\r\n container.addClass('animate');\r\n }\r\n container.css('webkit-transform', 'translate3d(' + percent + '%,0,0)');\r\n container.css('transform', 'translate3d(' + percent + '%,0,0)');\r\n container.css('moz-transform', 'translate3d(' + percent + '%,0,0)');\r\n }\r\n\r\n function getAdjacentPanes(index) {\r\n var adjacentPanes = [];\r\n var next = index + 1,\r\n prev = index - 1;\r\n if(prev >= 0) {\r\n adjacentPanes.push(prev);\r\n }\r\n if(next <= paneCount - 1) {\r\n adjacentPanes.push(next);\r\n }\r\n return adjacentPanes;\r\n }\r\n\r\n function next() {\r\n var newPane = scope.currentPane + 1;\r\n return showPane(newPane < paneCount ? newPane : paneCount-1, true);\r\n }\r\n\r\n function prev() {\r\n var newPane = scope.currentPane - 1;\r\n return showPane(newPane >= 0 ? newPane : 0, true);\r\n }\r\n\r\n var scrollStart = 0;\r\n function handleHammer(ev) {\r\n // disable browser scrolling\r\n ev.preventDefault();\r\n\r\n switch (ev.type) {\r\n case 'panright':\r\n case 'panleft':\r\n // keep the offset attached to the pan location\r\n var paneOffset = -(100/paneCount)*scope.currentPane;\r\n var dragOffset = ((100/wrapper.clientWidth)*ev.deltaX) / paneCount;\r\n\r\n // slow down at the first and last pane\r\n if((scope.currentPane === 0 && ev.direction === Hammer.DIRECTION_RIGHT) ||\r\n (scope.currentPane === paneCount-1 && ev.direction === Hammer.DIRECTION_LEFT)) {\r\n dragOffset *= 0.4;\r\n }\r\n\r\n updateContainer(dragOffset + paneOffset);\r\n\r\n if(scope.autoResize){\r\n var panes = getPanes();\r\n //default to the current height;\r\n var targetHeight = $(panes[scope.currentPane]).height();\r\n var nextPaneHeight;\r\n\r\n if(scope.currentPane !== 0 && ev.direction === Hammer.DIRECTION_RIGHT){\r\n nextPaneHeight = $(panes[scope.currentPane - 1]).height();\r\n }\r\n else if(scope.currentPane !== paneCount -1 && ev.direction === Hammer.DIRECTION_LEFT){\r\n nextPaneHeight = $(panes[scope.currentPane + 1]).height();\r\n }\r\n\r\n if(nextPaneHeight){\r\n var heightDifference = nextPaneHeight - targetHeight;\r\n targetHeight = targetHeight + (heightDifference * Math.abs(ev.deltaX)/wrapper.clientWidth);\r\n }\r\n\r\n $wrapper.height(targetHeight);\r\n }\r\n\r\n break;\r\n case 'panup':\r\n case 'pandown':\r\n if(scrollDiv && scrollDiv.length === 1 && ev.deltaY){\r\n if(!scrollStart){\r\n scrollStart = scrollDiv[0].scrollTop;\r\n }\r\n\r\n scrollDiv[0].scrollTop = Math.max(0, scrollStart - ev.deltaY);\r\n }\r\n\r\n break;\r\n case 'swipeleft':\r\n next();\r\n\r\n // stop hammer recognizer so that way it won't trigger a panend as well\r\n // which would change the pane again\r\n // causing it to potentially jump 2 panes at a time\r\n // ('swipeleft' and 'panend' could cause .next() to\r\n // be called twice in the same session)\r\n hammer.stop(true);\r\n break;\r\n case 'swiperight':\r\n prev();\r\n\r\n // stop hammer recognizer so that way it won't trigger a panend as well\r\n // which would change the pane again\r\n // causing it to potentially jump 2 panes at a time\r\n // ('swiperight' and 'panend' could cause .prev() to\r\n // be called twice in the same session)\r\n hammer.stop(true);\r\n break;\r\n case 'panend':\r\n // more than half the pane panned over, then navigate\r\n if (Math.abs(ev.deltaX) > wrapper.clientWidth / 2) {\r\n // if deltaX is >= 0 then the pan was to the right\r\n if(ev.deltaX >= 0) {\r\n prev();\r\n }\r\n else {\r\n next();\r\n }\r\n }\r\n else {\r\n showPane(scope.currentPane, true);\r\n }\r\n scrollStart = null;\r\n break;\r\n }\r\n }\r\n\r\n scope.$on('$destroy', function () {\r\n console.log('swipeable destroy');\r\n if(eventsEnabled){\r\n hammer.off('panend panleft panright swipeleft swiperight', handleHammer);\r\n }\r\n\r\n // Destroy hammer instance as well to prevent a memory leak from it holding onto a detached node.\r\n // Angular had this issue previously, and was updated to call .destroy() on the instance.\r\n // ref: https://github.com/angular/angular/issues/22155\r\n hammer.destroy();\r\n\r\n console.log('hammer dispose done');\r\n observer.disconnect();\r\n });\r\n }\r\n}]);","angular.module('aprima-core-ui')\r\n .directive('apTile', ['_', '$parse', function (_, $parse) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'EA',\r\n require: '^apTileManager',\r\n link: function(scope, element, attrs, tileManager) {\r\n var tileId = scope.$eval(attrs.tileId);\r\n var defaultValue;\r\n \r\n if(_.isNil(tileId)) {\r\n throw new Error('apTile has to have a tile-id to work properly.');\r\n }\r\n\r\n if(!tileManager) {\r\n throw new Error('apTile has to have apTileManager as a parent to work properly.');\r\n }\r\n\r\n if(attrs.isCollapsed) {\r\n var parsedIsCollapsed = $parse(attrs.isCollapsed);\r\n if(!parsedIsCollapsed.assign) {\r\n throw new Error('apTile attribute is-collapsed must be an assignable value.');\r\n }\r\n\r\n defaultValue = !!parsedIsCollapsed(scope);\r\n \r\n var isCollapsedWatch = scope.$watch(\r\n function(currentScope) {\r\n return parsedIsCollapsed(currentScope);\r\n }, \r\n function(newVal, oldVal) {\r\n if(newVal !== oldVal) {\r\n toggleTile();\r\n }\r\n }\r\n );\r\n scope.toggle = function toggle() {\r\n parsedIsCollapsed.assign(scope, !parsedIsCollapsed(scope));\r\n };\r\n scope.tileState = tileManager.tileGroup.setupTile(tileId, defaultValue, true);\r\n }\r\n else {\r\n defaultValue = !!scope.$eval(attrs.defaultCollapsed);\r\n scope.toggle = toggleTile;\r\n scope.tileState = tileManager.tileGroup.setupTile(tileId, defaultValue);\r\n }\r\n scope.scroller = attrs.scroller;\r\n\r\n function toggleTile() {\r\n tileManager.tileGroup.toggle(tileId);\r\n }\r\n\r\n scope.$on('$destroy', function() {\r\n if(isCollapsedWatch) {\r\n isCollapsedWatch();\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui')\r\n .directive('apTileManager', [function () {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'EA',\r\n controller: ['$scope', '$attrs', 'TileGroup', 'Bridge', function($scope, $attrs, TileGroup, Bridge) {\r\n var self = this;\r\n self.tileGroup = new TileGroup(\r\n $scope.$eval($attrs.groupName),\r\n $scope.$eval($attrs.tileConfiguration),\r\n $scope.$eval($attrs.storageMode),\r\n !!$scope.$eval($attrs.disablePersistence));\r\n\r\n var configurationWatch = $scope.$watch($attrs.tileConfiguration, function(newVal, oldVal) {\r\n if(newVal !== oldVal) {\r\n self.tileGroup.changeConfiguration(newVal);\r\n }\r\n });\r\n\r\n var persistenceWatch = $scope.$watch($attrs.disablePersistence, function(newVal, oldVal) {\r\n if(newVal !== oldVal) {\r\n self.tileGroup.setPersistence(!newVal);\r\n }\r\n });\r\n\r\n Bridge.on('change-tile-state', $scope, function () {\r\n self.tileGroup.nextState();\r\n });\r\n\r\n $scope.$on('$destroy', function() {\r\n configurationWatch();\r\n persistenceWatch();\r\n });\r\n }],\r\n };\r\n }]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').directive('apVerticalSeparator', [\r\n apVerticalSeparator\r\n ]);\r\n\r\n function apVerticalSeparator() {\r\n return {\r\n restrict: 'A',\r\n link: link,\r\n };\r\n\r\n function link(scope, elem, attrs) {\r\n var element = elem;\r\n var parent = elem.parent()[0];\r\n var target = document.getElementById(attrs.apVerticalSeparator);\r\n if (target) {\r\n parent = target;\r\n }\r\n\r\n function updateMaxHeight() {\r\n var reservedSpace = 0;\r\n\r\n if (element && element.length > 0) {\r\n var paddingTopStr = element.css('padding-top');\r\n var paddingBottomStr = element.css('padding-bottom');\r\n var paddingTop = parseInt(paddingTopStr);\r\n var paddingBottom = parseInt(paddingBottomStr);\r\n if (paddingTop && paddingBottom) {\r\n reservedSpace = paddingTop + paddingBottom;\r\n }\r\n }\r\n\r\n var target = $(parent).height() - reservedSpace;\r\n\r\n element.css('max-height', target + 'px');\r\n element.css('height', target + 'px');\r\n }\r\n\r\n updateMaxHeight();\r\n\r\n var windowSelector = $(window);\r\n windowSelector.on('resize', updateMaxHeight);\r\n var observer = new MutationObserver(updateMaxHeight);\r\n\r\n observer.observe(parent, {attributes: true, subtree: true, attributeFilter: ['class']});\r\n\r\n scope.$on('$destroy', function(){\r\n windowSelector.off('resize', updateMaxHeight);\r\n observer.disconnect();\r\n });\r\n }\r\n }\r\n})(angular);","(function () {\r\n 'use strict';\r\n\r\n var directiveName = 'hmClick';\r\n angular.module('aprima-core-ui').directive(directiveName, [\r\n 'ClickListenerService',\r\n hmClick\r\n ]);\r\n\r\n function hmClick(\r\n ClickListenerService\r\n ) {\r\n return {\r\n restrict: 'A',\r\n link: link,\r\n };\r\n\r\n function link(scope, element, attrs) {\r\n ClickListenerService.registerFromDirective(scope, element, attrs, directiveName);\r\n }\r\n }\r\n})();\r\n","// Usage: stop click events from propagating out of an element, without having to use a click attribute (like ng-click or hm-click)\r\n// this directive won't do anything if ng-click or hm-click is already defined, because it will already get handled properly\r\n// by those directives\r\n(function (angular) {\r\n 'use strict';\r\n\r\n // click attributes\r\n var hmClick = 'hmClick';\r\n var ngClick = 'ngClick';\r\n\r\n angular.module('aprima-core-ui').directive('hmStopPropagation', [\r\n 'ClickListenerService',\r\n hmStopPropagation,\r\n ]);\r\n\r\n\r\n function hmStopPropagation(\r\n ClickListenerService\r\n ) {\r\n var directive = {\r\n restrict: 'A',\r\n link: link,\r\n };\r\n\r\n return directive;\r\n\r\n function link(\r\n scope,\r\n element,\r\n attrs\r\n ) {\r\n if(!attrs.hasOwnProperty(ngClick) && !attrs.hasOwnProperty(hmClick)) {\r\n // don't need this attribute to actually be compiled, just have to set it here,\r\n // so the ClickListenerService picks it up\r\n attrs[ngClick] = '';\r\n ClickListenerService.registerFromDirective(scope, element, attrs, ngClick);\r\n }\r\n }\r\n }\r\n\r\n})(window.angular);","(function () {\r\n 'use strict';\r\n angular.module('aprima-core-ui').config(['$provide', function ($provide) {\r\n $provide.decorator('ngClickDirective', [\r\n '$delegate',\r\n 'ClickListenerService',\r\n ngClickDecorator\r\n ]);\r\n\r\n function ngClickDecorator(\r\n $delegate,\r\n ClickListenerService\r\n ) {\r\n // Completely replace all implementations of the ngClick directive.\r\n // We need to make sure ngClick hasn't changed when upgrading angular.\r\n $delegate.forEach(updateDirective);\r\n return $delegate;\r\n\r\n function updateDirective(directive) {\r\n // angular somehow knows that ngClick has a compile function and not a link function,\r\n // so we have to override compile instead of deleting it and using link directly.\r\n directive.compile = compile;\r\n }\r\n\r\n function compile() {\r\n return link;\r\n }\r\n\r\n function link(scope, element, attrs) {\r\n ClickListenerService.registerFromDirective(scope, element, attrs, 'ngClick');\r\n }\r\n }\r\n }]);\r\n})();","angular.module('aprima-core-ui').directive('dialHref', ['DeviceSettings', 'ClickListenerService', '$window', function (DeviceSettings, ClickListenerService, $window) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n scope: {\r\n dialHref : '=',\r\n dialHrefProtocol: '@'\r\n },\r\n link: function (scope, elem) {\r\n if (DeviceSettings.isPrm) {\r\n return;\r\n }\r\n\r\n elem.addClass('clickable');\r\n var deregister = ClickListenerService.register(elem, clickHandler, {\r\n hmStopPropagation: true,\r\n });\r\n scope.$on('$destroy', deregister);\r\n\r\n function clickHandler() {\r\n var protocol = scope.dialHrefProtocol || 'tel';\r\n $window.location.href = protocol + ':' + scope.dialHref;\r\n }\r\n }\r\n };\r\n}]);\r\n","(function(angular) {\r\n 'use strict';\r\n \r\n var directiveName = 'apFindPharmacy';\r\n\r\n angular.module('aprima-core-ui').directive(directiveName, [\r\n '$q',\r\n 'ApReadonlyFindControl',\r\n 'AprimaCache',\r\n 'PatientRepository',\r\n 'PharmacyRepository',\r\n 'ServerInfoRepository',\r\n ApFindPharmacy,\r\n ]);\r\n\r\n function ApFindPharmacy(\r\n $q,\r\n ApReadonlyFindControl,\r\n AprimaCache,\r\n PatientRepository,\r\n PharmacyRepository,\r\n ServerInfoRepository\r\n ) {\r\n var vm = null;\r\n var validationKey = 'pharmacyMatch';\r\n var idProperty = 'Id';\r\n var templateUrl = '/core-ui/views/directives/find/apFindPharmacy.html';\r\n var patientPharmaciesCache = AprimaCache.getOrCreate('PatientDefaultPharmacies', {\r\n maxAge: 5 * 60 * 1000, // 5 minutes\r\n deleteOnExpire: 'passive',\r\n capacity: 20,\r\n });\r\n var defaultHeader = 'Patient\\'s Pharmacies';\r\n \r\n var directiveDefinition = ApReadonlyFindControl.init(\r\n directiveName,\r\n PharmacyRepository.getPharmacy,\r\n PharmacyRepository.searchPharmacies, // searchPharmaciesIncludeAllMailOrders,\r\n validationKey,\r\n templateUrl,\r\n idProperty,\r\n validator,\r\n true,\r\n onInitCtrl,\r\n getDefaultList,\r\n defaultHeader\r\n );\r\n directiveDefinition.bindToController.patientId = ' use the directive's default (aka the default defined in apFindPharmacy)\r\n // default-list=\"[1, 2, 3]\"\r\n // default-list=\"some expression returning a promise that resolves to an []\"\r\n\r\n // default list of items to show up (i.e. a patient's default list of pharmacies)\r\n defaultList: '&?',\r\n \r\n // header that will show up above the defaultList\r\n defaultHeader: '&?',\r\n\r\n displayNone: '').css({\r\n position: 'absolute',\r\n top: -10000,\r\n left: -10000,\r\n font: element.css('font'),\r\n resize: 'none',\r\n wordWrap: 'break-word',\r\n whiteSpace: 'pre-wrap',\r\n 'box-shadow': element.css('box-shadow')\r\n });\r\n angular.element(document.body).append($shadow);\r\n\r\n element.css('overflow', 'hidden');\r\n element.css('resize', 'none');\r\n\r\n // In the event that the canvas get's resized, we want to adjust the size, so we're creating an interval to monitor for changes.\r\n var widthWatch = $interval(updateShadowDiv, 100);\r\n\r\n var lastWidth = -1;\r\n function updateShadowDiv() {\r\n // This method was sometimes causing Protractor to timeout,\r\n // not accessing the padding properties or calling update unless something changed fixed this. \r\n var newWidth = element.innerWidth();\r\n if (lastWidth === newWidth) {\r\n return;\r\n }\r\n\r\n lastWidth = newWidth;\r\n if (DeviceSettings.isIos) {\r\n newWidth = element.innerWidth() - parseInt(element.css('padding-right') || 0) - parseInt(element.css('padding-left') || 0) - 6;\r\n }\r\n else {\r\n newWidth = element.innerWidth() - parseInt(element.css('padding-right') || 0) - parseInt(element.css('padding-left') || 0);\r\n }\r\n \r\n $shadow.css('width', newWidth);\r\n update();\r\n }\r\n\r\n function update() {\r\n var val = element.val()\r\n .replace(//g, '>')\r\n .replace(/&/g, '&')\r\n .replace(/\\n ?$/, '
 ')\r\n .replace(/\\n/g, '
');\r\n\r\n $shadow.html(val);\r\n\r\n var newHeight = Math.max($shadow[0].offsetHeight + 14, minHeight) + 'px';\r\n element.css('height', newHeight);\r\n }\r\n\r\n var modelWatch = scope.$watch(attr.ngModel, update);\r\n\r\n scope.$on('$destroy', function() {\r\n $interval.cancel(widthWatch);\r\n modelWatch();\r\n $shadow.remove();\r\n });\r\n }\r\n };\r\n}]);","(function() {\r\n 'use strict';\r\n\r\n var directiveName = 'apFocusStr';\r\n \r\n angular.module('aprima-core-ui').directive(directiveName, ['$parse', 'inputSelection', function ($parse, inputSelection) {\r\n var defaultString = '_';\r\n\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ngModel) {\r\n var _element = inputSelection.getChildElement(element);\r\n\r\n var parsedString = $parse(attrs[directiveName]);\r\n var searchString = defaultString;\r\n if(parsedString.constant) {\r\n searchString = parsedString(scope) || defaultString;\r\n }\r\n\r\n element.on('focus', handleFocus);\r\n\r\n scope.$on('$destroy', function(){\r\n element.off('focus', handleFocus);\r\n });\r\n\r\n function handleFocus() {\r\n updateSearchString();\r\n inputSelection.trySelectStr(_element, ngModel, searchString, 0);\r\n }\r\n\r\n function updateSearchString() {\r\n if(!parsedString.constant) {\r\n searchString = parsedString(scope) || defaultString;\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function() {\r\n 'use strict';\r\n\r\n var directiveName = 'apTabToStr';\r\n \r\n angular.module('aprima-core-ui').directive(directiveName, ['_', '$parse', 'inputSelection', function (_, $parse, inputSelection) {\r\n var defaultKeyCode = 9; // tab key\r\n var defaultString = '_';\r\n\r\n // input:\r\n // string\r\n // '_'\r\n // OR\r\n // int code\r\n // 9\r\n // OR\r\n // [int code, string]\r\n // [9, '_']\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ngModel) {\r\n var _element = inputSelection.getChildElement(element);\r\n \r\n if(!_.hasIn(_element, 'selectionStart')) {\r\n throw new Error('Can\\'t use ' + directiveName + ' with ' + _element + ' because it doesn\\'t' +\r\n ' support \\'selectionStart\\'');\r\n }\r\n\r\n var keyCode = defaultKeyCode;\r\n var searchString = defaultString;\r\n\r\n var parsedConfig = $parse(attrs[directiveName]);\r\n\r\n if(parsedConfig.constant) {\r\n processConfig(parsedConfig(scope));\r\n }\r\n else {\r\n var configWatch = scope.$watch(parsedConfig, processConfig, parsedConfig.literal);\r\n }\r\n\r\n element.on('keydown', handleKey);\r\n\r\n scope.$on('$destroy', function(){\r\n element.off('keydown', handleKey);\r\n if(configWatch) {\r\n configWatch();\r\n }\r\n });\r\n\r\n function handleKey(e) {\r\n var key = e.which || e.keyCode || 0;\r\n if(key === keyCode) {\r\n if(inputSelection.trySelectStr(_element, ngModel, searchString, _element.selectionEnd)) {\r\n // if we can tab to the next string, then prevent the default action of tabbing to the\r\n // next element\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n\r\n function processConfig(config) {\r\n if(config) {\r\n if(_.isInteger(config)) {\r\n keyCode = config;\r\n }\r\n else if(_.isInteger(config[0])) {\r\n keyCode = config[0];\r\n searchString = config[1];\r\n }\r\n else {\r\n searchString = config;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n})();\r\n","//this makes contenteditable and ngModel play nicely together\r\nangular.module('aprima-core-ui').directive('contenteditable', [function() {\r\n 'use strict';\r\n var brRegex = /<\\s*br\\s*\\/?>/gm;\r\n\r\n function containsBreaks(str) {\r\n return brRegex.test(String(str));\r\n }\r\n\r\n function removeBreaks(str) {\r\n str = String(str).replace(brRegex, ' ');\r\n return str;\r\n }\r\n\r\n function replaceNbsp(str) {\r\n // instructions currently written in
for easy resizing\r\n // multiple spaces ' ', results in   throwing off char count\r\n if (!str) return str;\r\n // var re = new RegExp(String.fromCharCode(160), 'g');\r\n // return str.replace(re, ' ');\r\n return str.replace(/ /g, ' ');\r\n }\r\n\r\n /*\r\n function replaceSpace(str) {\r\n // multiple spaces ' ' without   does not display in
correctly\r\n if (!str) return str;\r\n return str.replace(/ /g, ' ');\r\n }\r\n */\r\n\r\n return {\r\n restrict: 'A', // only activate on element attribute\r\n require: '?ngModel', // get a hold of NgModelController\r\n link: function(scope, element, attrs, ngModel) {\r\n if (!ngModel) {\r\n return; // do nothing if no ng-model\r\n }\r\n\r\n // Specify how UI should be updated\r\n ngModel.$render = function() {\r\n // Bug #24922 - Removed call to (removeBreaks(replaceSpace(ngModel.$viewValue).\r\n // This fixed respective sig directions element not wrapping when rendered.\r\n // Was able to print and prescribe successfully without any garbage characters.\r\n //\r\n // element.html(removeBreaks(replaceSpace(ngModel.$viewValue) || ''));\r\n element.html(ngModel.$viewValue || '');\r\n };\r\n\r\n // this logic is based on the angular directive for input[type=text]\r\n // since it should work basically the same\r\n element.on('input change', listener);\r\n\r\n ngModel.$formatters.push(function(value) {\r\n return ngModel.$isEmpty(value) ? value : value.toString();\r\n });\r\n\r\n function listener(ev) {\r\n // Bug #25385 - entering '>', displays > as part of the SIG, when returning from the SIG Writer.\r\n // element.html() returns the innerHTML which includes >, if '>' was entered.\r\n // This resulted in > to be saved with the SigWriterDto.\r\n //\r\n // Using element.text() returns innerText, which includes '>' and not >\r\n\r\n var value = element.text();\r\n var event = ev && ev.type;\r\n\r\n if(containsBreaks(value)) {\r\n value = removeBreaks(value);\r\n }\r\n\r\n value = replaceNbsp(value);\r\n\r\n // If a control is suffering from bad input (due to native validators), browsers discard its\r\n // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the\r\n // control's value is the same empty value twice in a row.\r\n if (ngModel.$viewValue !== value || (value === '' && ngModel.$$hasNativeValidators)) {\r\n ngModel.$setViewValue(value, event);\r\n }\r\n }\r\n }\r\n };\r\n}]);\r\n","angular.module('aprima-core-ui').directive('lazySrc',\r\n ['$window', '_', 'uxConstants', '$timeout', '$rootScope', 'AprimaRestangular',\r\n function ($window, _, uxConstants, $timeout, $rootScope, Restangular) {\r\n\r\n 'use strict';\r\n\r\n // Load Image source.\r\n var loadImg = function (elm, attrs, ignoreCache) {\r\n ignoreCache = ignoreCache || false;\r\n if(attrs.lazySrc) {\r\n Restangular.get(attrs.endpointBase, {ignoreCache: ignoreCache}).one(attrs.lazySrc).get().then(function(img){\r\n elm.src = 'data:image/png;base64,' + img.Image;\r\n elm.className += ' fade-in one';\r\n });\r\n }\r\n };\r\n\r\n // Checks if top edge of element is at bottom edge of window\r\n var isBecomingVisible = function (elmOffset) {\r\n return elmOffset < $window.pageYOffset + $window.innerHeight + 700;\r\n };\r\n\r\n var link = function (scope, element, attrs) {\r\n var elm = element[0],\r\n loaded,\r\n unbindLazySrc;\r\n\r\n var scroller = element.closest('.scroller')[0] || $window;\r\n\r\n var scrollListener = _.throttle(function shouldLoad(){\r\n if (loaded) {\r\n return;\r\n }\r\n\r\n if(!elm){\r\n //could get fired after $scope.$destroy due to throttling\r\n return;\r\n }\r\n\r\n var offset = elm.getBoundingClientRect().top;\r\n\r\n if (isBecomingVisible(offset)) {\r\n loadImg(elm, attrs);\r\n loaded = true;\r\n\r\n //if this img is already visible then observe the lazySrc to update the img if it changes\r\n unbindLazySrc = attrs.$observe('lazySrc', function(){\r\n loadImg(elm, attrs);\r\n });\r\n removeEventListeners();\r\n }\r\n }, uxConstants.lazySrcThrottle);\r\n\r\n function removeEventListeners() {\r\n scroller.removeEventListener('touchmove', scrollListener);\r\n scroller.removeEventListener('mousemove', scrollListener);\r\n scroller.removeEventListener('mousewheel', scrollListener);\r\n }\r\n\r\n scroller.addEventListener('touchmove', scrollListener);\r\n scroller.addEventListener('mousemove', scrollListener);\r\n scroller.addEventListener('mousewheel', scrollListener);\r\n\r\n var unbindUpdateSrc = scope.$on('updateSrc', function(e, args){\r\n if(_.includes(attrs.lazySrc, args)) {\r\n loadImg(elm, attrs, true);\r\n }\r\n });\r\n\r\n //Check if image should be loaded immediately.\r\n //Do it in a timeout so that it doesnt block rendering the elements.\r\n //getBoundingClientRect was really slow inside an ng-repeat with ~150 items.\r\n //getBoundingClientRect took approximately 20% of the total time to render the ng-repeat\r\n $timeout(scrollListener, 0);\r\n\r\n scope.$on('$destroy', function(){\r\n removeEventListeners();\r\n unbindUpdateSrc();\r\n if(unbindLazySrc) {\r\n unbindLazySrc();\r\n }\r\n scrollListener = elm = element = null;\r\n });\r\n };\r\n\r\n return {\r\n restrict: 'A',\r\n link: link\r\n };\r\n }]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n var configs = [\r\n {\r\n controllerName: 'ApFieldInvalidCtrl',\r\n directiveName: 'apFieldInvalid',\r\n invalidClassName: 'ap-field-invalid',\r\n validClassName: 'ap-field-valid',\r\n },\r\n {\r\n controllerName: 'ApFieldsetInvalidCtrl',\r\n directiveName: 'apFieldsetInvalid',\r\n invalidClassName: 'ap-fieldset-invalid',\r\n validClassName: 'ap-fieldset-valid',\r\n },\r\n ];\r\n configs.forEach(function(config) {\r\n setup(config.controllerName, config.directiveName, config.invalidClassName, config.validClassName);\r\n });\r\n\r\n function setup(controllerName, directiveName, invalidClassName, validClassName) {\r\n angular.module('aprima-core-ui').directive(directiveName, [\r\n apCustomInvalid,\r\n ]);\r\n\r\n angular.module('aprima-core-ui').controller(controllerName, [\r\n ApCustomInvalidCtrl,\r\n ]);\r\n\r\n function apCustomInvalid() {\r\n var require = {\r\n form: '?^^form',\r\n };\r\n require[directiveName] = directiveName;\r\n\r\n return {\r\n restrict: 'A',\r\n controller: controllerName,\r\n link: link,\r\n require: require,\r\n };\r\n\r\n function link(scope, elm, attrs, ctrl) {\r\n var directiveCtrl = ctrl[directiveName];\r\n directiveCtrl.init.apply(directiveCtrl, arguments);\r\n }\r\n }\r\n\r\n function ApCustomInvalidCtrl() {\r\n var vm = this;\r\n\r\n var cleanupFns = [];\r\n var field;\r\n var formCtrl;\r\n var previousVal;\r\n\r\n vm.init = init;\r\n\r\n function init(scope, elm, attrs, ctrl) {\r\n field = elm;\r\n formCtrl = ctrl.form;\r\n cleanupFns.push(scope.$watch(attrs[directiveName], onValueChanged));\r\n scope.$on('$destroy', onDestroy);\r\n }\r\n\r\n function onDestroy() {\r\n cleanupFns.forEach(function(cleanupFn) {\r\n cleanupFn();\r\n });\r\n }\r\n\r\n function onValueChanged(newVal) {\r\n if(previousVal !== newVal) {\r\n previousVal = newVal;\r\n validate();\r\n }\r\n }\r\n\r\n function validate() {\r\n var isValid = !previousVal;\r\n field.toggleClass(validClassName, isValid);\r\n field.toggleClass(invalidClassName, !isValid);\r\n\r\n if(formCtrl) {\r\n formCtrl.$setValidity(directiveName, isValid, vm);\r\n }\r\n }\r\n }\r\n }\r\n})(angular);","angular.module('aprima-core-ui').directive('apFormGroup', [ function () {\r\n 'use strict';\r\n\r\n return {\r\n require: 'apFormGroup',\r\n restrict: 'A',\r\n controller: 'ApFormGroupCtrl',\r\n link: {\r\n pre: function(scope, element, attrs, ctrl) {\r\n ctrl.init(attrs.apFormGroup);\r\n }\r\n }\r\n };\r\n}]);\r\n\r\n\r\nangular.module('aprima-core-ui').controller('ApFormGroupCtrl', [ '$scope', '$element', 'ApFormGroup',\r\n function ($scope, $element, ApFormGroup) {\r\n 'use strict';\r\n\r\n var self = this;\r\n\r\n self.init = function init(name) {\r\n self.formGroup = new ApFormGroup(name, $scope, $element);\r\n return self.formGroup;\r\n };\r\n }\r\n]);\r\n\r\n\r\nangular.module('aprima-core-ui').factory('ApFormGroup', ['_', '$document',\r\n function (_, $document) {\r\n 'use strict';\r\n\r\n function ApFormGroup(name, scope, $formGroup) {\r\n if(!scope) {\r\n this.addField = angular.noop;\r\n this.removeField = angular.noop;\r\n this.setFieldRequired = angular.noop;\r\n return;\r\n }\r\n\r\n var fields = {};\r\n var parentFormSubmitted = false;\r\n this.addField = addField;\r\n this.removeField = removeField;\r\n this.setFieldRequired = setFieldRequired;\r\n\r\n var $formGroupLabel = getLabel(name, $formGroup);\r\n\r\n scope.$on('ap:form:submitted', function() {\r\n parentFormSubmitted = true;\r\n updateValid();\r\n });\r\n\r\n function addField(id, ngModelCtrl, fieldElement) {\r\n var thisField = fields[id] = {\r\n valid: true,\r\n pristine: true,\r\n required: false,\r\n ngModel: ngModelCtrl,\r\n element: fieldElement && (fieldElement.parent('.input-group').firstOrNull() || fieldElement)\r\n };\r\n\r\n // instead of adding watches on $pristine and $valid for each field,\r\n // hook into the places where they are being updated and then check to\r\n // see if each field and the formGroup is still valid after each change\r\n if(ngModelCtrl) {\r\n ngModelCtrl._$setDirty = ngModelCtrl.$setDirty;\r\n ngModelCtrl.$setDirty = function formGroupSetDirty() {\r\n ngModelCtrl._$setDirty.apply(ngModelCtrl, arguments);\r\n thisField.pristine = ngModelCtrl.$pristine;\r\n updateValid();\r\n };\r\n\r\n ngModelCtrl._$setPristine = ngModelCtrl.$setPristine;\r\n ngModelCtrl.$setPristine = function formGroupSetPristine() {\r\n ngModelCtrl._$setPristine.apply(ngModelCtrl, arguments);\r\n thisField.pristine = ngModelCtrl.$pristine;\r\n updateValid();\r\n };\r\n\r\n ngModelCtrl._$setValidity = ngModelCtrl.$setValidity;\r\n ngModelCtrl.$setValidity = function formGroupSetValidity() {\r\n ngModelCtrl._$setValidity.apply(ngModelCtrl, arguments);\r\n thisField.valid = ngModelCtrl.$valid;\r\n updateValid();\r\n };\r\n }\r\n }\r\n\r\n function removeField(id) {\r\n var field = fields[id];\r\n if(field && field.ngModel) {\r\n // Remove the hooks that were added to ngModel when the field is removed\r\n // from this formGroup\r\n field.ngModel.$setDirty = field.ngModel._$setDirty;\r\n field.ngModel.$setPristine = field.ngModel._$setPristine;\r\n field.ngModel.$setValidity = field.ngModel._$setValidity;\r\n }\r\n delete fields[id];\r\n }\r\n\r\n function setFieldRequired(id, required) {\r\n if(fields[id]) {\r\n fields[id].required = required;\r\n updateRequired();\r\n }\r\n }\r\n\r\n function updateRequired() {\r\n var isRequired = _.some(fields, function(field) {\r\n return field.required;\r\n });\r\n setFormGroupRequired(isRequired);\r\n }\r\n\r\n function updateValid () {\r\n var isValid = _.reduce(fields, function(result, field) {\r\n var isFieldValid = field.valid || (field.pristine && !parentFormSubmitted);\r\n setFieldValidity(field.element, isFieldValid);\r\n\r\n return result && isFieldValid;\r\n }, true);\r\n setFormGroupValidity(isValid);\r\n }\r\n\r\n //these should be idempotent\r\n function setFormGroupValidity(isValid) {\r\n if($formGroup) {\r\n $formGroup.toggleClass('ap-form-group-valid', isValid);\r\n $formGroup.toggleClass('ap-form-group-invalid', !isValid);\r\n }\r\n }\r\n\r\n function setFieldValidity($field, isValid) {\r\n if($field) {\r\n $field.toggleClass('ap-field-valid', isValid);\r\n $field.toggleClass('ap-field-invalid', !isValid);\r\n }\r\n }\r\n\r\n function setFormGroupRequired(isRequired) {\r\n if($formGroupLabel) {\r\n $formGroupLabel.toggleClass('ap-form-group-required', isRequired);\r\n }\r\n }\r\n }\r\n\r\n function getLabel (name, formGroup) {\r\n return name && $document.find('[ap-required-label-for=\"' + name + '\"]').firstOrNull() ||\r\n name && $document.find('label[for=\"' + name + '\"]').firstOrNull() ||\r\n formGroup && formGroup.find('label.control-label').firstOrNull();\r\n }\r\n\r\n return ApFormGroup;\r\n }\r\n]);\r\n","angular.module('aprima-core-ui').directive('apMetadata', ['$compile', 'MetadataService', function ($compile, MetadataService) {\r\n 'use strict';\r\n\r\n var ngMinMaxLengthUnsupportedType = {\r\n time: true,\r\n date: true,\r\n 'datetime-local': true,\r\n week: true,\r\n month: true,\r\n radio: true,\r\n checkbox: true\r\n };\r\n\r\n var ngMinMaxLengthUnsupportedElement = {\r\n select: true,\r\n 'ap-patient-search': true,\r\n 'ap-find-pharmacy': true\r\n };\r\n\r\n var ngMinMaxUnsupportedType = {\r\n checkbox: true,\r\n email: true,\r\n radio: true,\r\n text: true,\r\n url: true\r\n };\r\n\r\n var ngMinMaxUnsupportedElement = {\r\n select: true,\r\n 'ap-patient-search': true,\r\n 'ap-find-pharmacy': true\r\n };\r\n\r\n //Dynamically applies minimum/maximum validation logic based on values in $scope.metadata.\r\n return {\r\n priority: 1001,\r\n terminal: true,\r\n replace: false,\r\n restrict: 'A',\r\n compile: compile\r\n };\r\n\r\n function compile(element, attrs) {\r\n //apMetadata does not need value. If it does not have a value, metadata directives should use the value in ngModel directive\r\n var metadata = attrs.apMetadata || '';\r\n\r\n //apRequired uses the ngModel to determine which property to map to a property on scope.metadata\r\n //so don't pass in ngModel here, otherwise ap-required will be using extra watchers\r\n applyApRequired(element, metadata);\r\n\r\n if(!metadata && attrs.ngModel) {\r\n metadata = MetadataService.convertNgModelExprToMetadataExpr(attrs.ngModel);\r\n }\r\n\r\n if(isMinMaxCompatible(element, attrs)) {\r\n applyNgMinMax(element, metadata);\r\n }\r\n\r\n if(isMinMaxLengthCompatible(element, attrs)) {\r\n applyNgMinMaxLength(element, metadata);\r\n }\r\n\r\n element.removeAttr('ap-metadata');\r\n\r\n return {\r\n post: function postLink(scope, element) {\r\n $compile(element)(scope);\r\n }\r\n };\r\n }\r\n\r\n function applyApRequired(element, metadata) {\r\n element.attr('ap-required', metadata ? metadata + '.IsRequired' : '');\r\n }\r\n\r\n function applyNgMinMax(element, metadata) {\r\n //only set these attributes if they weren't set manually\r\n if(!element.attr('ng-min')) {\r\n element.attr('ng-min', metadata ? metadata + '.Minimum' : '');\r\n }\r\n\r\n if(!element.attr('ng-max')) {\r\n element.attr('ng-max', metadata ? metadata + '.Maximum' : '');\r\n }\r\n }\r\n\r\n function applyNgMinMaxLength(element, metadata) {\r\n //only set these attributes if they weren't set manually\r\n if(!element.attr('ng-minlength')) {\r\n element.attr('ng-minlength', metadata ? metadata + '.MinLength' : '');\r\n }\r\n\r\n if(!element.attr('ng-maxlength')) {\r\n element.attr('ng-maxlength', metadata ? metadata + '.MaxLength' : '');\r\n }\r\n }\r\n\r\n // ng-min, ng-max can work if element is not or one of our custom directives where it doesn't make sense\r\n // and if the input actually supports these attributes (according to angular)\r\n function isMinMaxLengthCompatible(element, attrs) {\r\n return !ngMinMaxLengthUnsupportedElement[element[0].nodeName.toLowerCase()] && !ngMinMaxLengthUnsupportedType[attrs.type];\r\n }\r\n}]);","angular.module('aprima-core-ui').directive('apRequired', ['MetadataService', '_', '$controller', function (MetadataService, _, $controller) {\r\n 'use strict';\r\n //Dynamically applies required validation logic based on values in $scope.metadata.\r\n //adapted from the ngRequired directive.\r\n\r\n function link(scope, elm, attrs, ctrl) {\r\n if (!ctrl || !ctrl.ngModel) return;\r\n var modelCtrl = ctrl.ngModel;\r\n\r\n var fieldId = attrs.name;\r\n var formGroup = ctrl.apFormGroup ?\r\n ctrl.apFormGroup.formGroup :\r\n $controller('ApFormGroupCtrl', {\r\n $scope: scope,\r\n $element: getFormGroup(elm)\r\n }).init(fieldId);\r\n formGroup.addField(fieldId, modelCtrl, elm);\r\n\r\n var apRequiredExpr = false;\r\n\r\n var elementWatches = [];\r\n var metadataWatches = [];\r\n\r\n function validator(modelValue, viewValue) {\r\n var metadata = scope.metadata;\r\n var value = modelValue || viewValue;\r\n\r\n var isRequired = apRequiredExpr;\r\n //if nothing was passed into this ap-required, then look at the metadata\r\n if (metadata && _.isUndefined(isRequired)) {\r\n isRequired = getIsRequired(metadata, scope);\r\n }\r\n formGroup.setFieldRequired(fieldId, isRequired);\r\n\r\n var invalid = isRequired && modelCtrl.$isEmpty(value);\r\n\r\n return !invalid;\r\n }\r\n\r\n modelCtrl.$validators.required = validator;\r\n\r\n var baseModel = attrs.ngModel.split('.');\r\n baseModel.pop();\r\n baseModel = baseModel.join('.');\r\n\r\n //This will trigger when apRequired attribute value changes\r\n //newVal will have the value of the attribute evaluated with the scope\r\n //this is the kind of watch that ng-required does\r\n //the only difference is that ng-required actually watches the value of 'ng-required',\r\n //then uses it to update 'required', and then another\r\n //directive $observe's the value in 'required' and validates when that gets updated\r\n elementWatches.push(scope.$watch(attrs.apRequired, function (newVal) {\r\n if(apRequiredExpr !== newVal) {\r\n //nothing is passed into ap-required, so watch the metadata to see when to update validation\r\n if(_.isUndefined(newVal)) {\r\n addMetadataWatches();\r\n }\r\n //an expression is passed into ap-required, so don't watch the metadata and clear out any current watchers\r\n else {\r\n clearMetadataWatches();\r\n }\r\n }\r\n apRequiredExpr = newVal;\r\n modelCtrl.$validate();\r\n }));\r\n\r\n scope.$on('$destroy', function () {\r\n elementWatches.forEach(function(watchRemover) {\r\n watchRemover();\r\n });\r\n clearMetadataWatches();\r\n formGroup.removeField(fieldId);\r\n });\r\n\r\n function addMetadataWatches() {\r\n //only triggers when metadata reference changes\r\n //but will add watches for the validation group fields too\r\n metadataWatches.push(scope.$watch('metadata', function (newValue) {\r\n modelCtrl.$validate();\r\n\r\n if(newValue){\r\n var metadataObj = newValue.Fields;\r\n var modelField = attrs.ngModel.split('.');\r\n modelField = modelField[modelField.length - 1];\r\n\r\n var fieldMetaData = metadataObj[modelField];\r\n\r\n if(fieldMetaData && fieldMetaData.IsGroupRequired){\r\n for(var i in metadataObj){\r\n if(newValue.Fields[i].ValidationGroup === fieldMetaData.ValidationGroup){\r\n metadataWatches.push(scope.$watch(baseModel + '.' + newValue.Fields[i].FieldName, modelCtrl.$validate));\r\n }\r\n }\r\n }\r\n }\r\n }));\r\n }\r\n\r\n function clearMetadataWatches() {\r\n if(!_.isEmpty(metadataWatches)) {\r\n metadataWatches.forEach(function(watchRemover) {\r\n watchRemover();\r\n });\r\n metadataWatches.length = 0;\r\n }\r\n }\r\n\r\n function getIsRequired(metadata, scope) {\r\n var obj = MetadataService.getObjectFromMetadata(metadata, attrs);\r\n if (obj) {\r\n if(obj.IsGroupRequired){\r\n for(var i in metadata.Fields){\r\n if(metadata.Fields[i].IsGroupRequired && metadata.Fields[i].ValidationGroup === obj.ValidationGroup){\r\n var propertyValue = scope.$eval(baseModel + '.' + metadata.Fields[i].FieldName);\r\n\r\n if(propertyValue){\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return obj.IsRequired;\r\n }\r\n\r\n return false;\r\n }\r\n }\r\n\r\n function getFormGroup (elem) {\r\n return elem.parents('.form-group').firstOrNull();\r\n }\r\n\r\n return {\r\n require: {\r\n ngModel: 'ngModel',\r\n apFormGroup: '?^^apFormGroup'\r\n },\r\n restrict: 'A',\r\n link: link\r\n };\r\n}]);","// Adds functionality to current form directives to broadcast event when form submitted state changes\r\n\r\n(function (angular) {\r\n 'use strict';\r\n\r\n formDirective('form', 'E');\r\n formDirective('ngForm', 'EAC');\r\n\r\n function formDirective(name, restrict) {\r\n angular.module('aprima-core-ui').directive(name, [\r\n function() {\r\n return {\r\n restrict: restrict,\r\n require: 'form',\r\n link: {\r\n pre: function preLink(scope, element, attrs, formCtrl) {\r\n\r\n // when $submitted is set then broadcast an event down the scope\r\n var setSubmitted = formCtrl.$setSubmitted;\r\n formCtrl.$setSubmitted = function formSetSubmitted() {\r\n setSubmitted.apply(formCtrl, arguments);\r\n scope.$broadcast('ap:form:submitted');\r\n };\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n }\r\n})(angular);\r\n","\r\nangular.module('aprima-core-ui').directive('multiCheckbox', function() {\r\n 'use strict';\r\n return {\r\n\r\n restrict: 'EA',\r\n\r\n templateUrl: '/core-ui/views/directives/multiSelectCheckBox.html',\r\n\r\n replace: true,\r\n\r\n transclude: false,\r\n\r\n scope: {\r\n\r\n selectedlist: '=',\r\n\r\n sourcelist: '=',\r\n\r\n all: '=',\r\n\r\n sortBy: '='\r\n\r\n },\r\n\r\n link: function ($scope) {\r\n\r\n $scope.checkbox = {};\r\n\r\n $scope.selectAll = false; //set 'All' checkbox to false\r\n\r\n $scope.showAll = $scope.all === true ? true : false;//to show/hide 'All' checkbox\r\n\r\n $scope.list = $scope.sourcelist;\r\n\r\n //add selected property\r\n $scope.list = _.forEach($scope.list, function(item){\r\n _.assign(item,{selected : false, formattedDate : item.Date.format('YYYY-MM-DD')});\r\n });\r\n\r\n $scope.list = _.orderBy($scope.list, $scope.sortBy, 'desc');\r\n\r\n $scope.selection = [];\r\n\r\n $scope.$watch('selectAll', function (newVal,oldVal) {\r\n if(newVal !== oldVal){\r\n $scope.list = _.forEach($scope.list, function(item){\r\n item.selected = $scope.selectAll;\r\n });\r\n }\r\n }, true);\r\n\r\n $scope.$watchCollection('list|filter:{selected:true}', function (newVal,oldVal) {\r\n if(newVal !== oldVal){\r\n $scope.selectedlist = newVal;\r\n }\r\n });\r\n\r\n }\r\n\r\n };\r\n});\r\n","(function () {\r\n 'use strict';\r\n var directiveParams = [\r\n 'TransitionToHelper',\r\n transitionTo\r\n ];\r\n\r\n angular.module('aprima-core-ui').directive('transitionTo', directiveParams);\r\n angular.module('aprima-core-ui').directive('prmTransitionTo', directiveParams);\r\n\r\n function transitionTo(\r\n TransitionToHelper\r\n ) {\r\n return {\r\n restrict: 'A',\r\n link: link\r\n };\r\n \r\n function link(scope, element, attrs) {\r\n TransitionToHelper.registerTransitionTo(scope, element, attrs, getTransition);\r\n\r\n function getTransition() {\r\n var transition = scope.$eval(attrs.transitionTo || attrs.prmTransitionTo);\r\n\r\n if (angular.isFunction(transition)) {\r\n transition = transition();\r\n }\r\n\r\n return transition;\r\n }\r\n }\r\n }\r\n})();","angular.module('aprima-core-ui').directive('apTransitionToAppointment',\r\n ['TransitionToHelper', 'AppointmentTransitionToHelper',\r\n function (TransitionToHelper, AppointmentTransitionToHelper) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n function getTransitionFromElement() {\r\n return AppointmentTransitionToHelper.getTransition(attrs.apptScheduleType, attrs.patientId, attrs.calendarId, attrs.apptEdit, attrs.apptId);\r\n }\r\n\r\n TransitionToHelper.registerTransitionTo(scope, element, attrs, getTransitionFromElement);\r\n }\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui').directive('apTransitionToMessage',\r\n ['TransitionToHelper', 'MessageTransitionToHelper',\r\n function (TransitionToHelper, MessageTransitionToHelper) {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n function getTransitionFromElement() {\r\n return MessageTransitionToHelper.getTransitionForMessage(attrs.messageTypeId, attrs.messageId, attrs.messageSubTypeId, attrs.createNew);\r\n }\r\n\r\n TransitionToHelper.registerTransitionTo(scope, element, attrs, getTransitionFromElement);\r\n }\r\n };\r\n }]);\r\n","(function () {\r\n 'use strict';\r\n angular.module('aprima-core-ui').factory('TransitionToHelper', [\r\n 'ClickListenerService',\r\n 'TransitionManager',\r\n '$window',\r\n '$rootScope',\r\n TransitionToHelper\r\n ]);\r\n\r\n function TransitionToHelper(\r\n ClickListenerService,\r\n TransitionManager,\r\n $window,\r\n $rootScope\r\n ) {\r\n function registerTransitionTo(scope, element, attrs, fnGetTransition) {\r\n element.addClass('clickable');\r\n\r\n var registerOpts = ClickListenerService.parseOptionsFromLink(scope, element, attrs);\r\n var deregister = ClickListenerService.register(element, handleClick, registerOpts);\r\n scope.$on('$destroy', deregister);\r\n\r\n function handleClick(event) {\r\n event.preventDefault();\r\n if (event.gesture && event.gesture.preventTransitions) {\r\n return;\r\n }\r\n\r\n var transition = fnGetTransition();\r\n var transitioned = TransitionManager.transition(transition);\r\n\r\n if (transitioned) {\r\n $rootScope.$broadcast('close-context-menu');\r\n //allow click event to bubble up, but do NOT handle any other transition-to directives\r\n //use the deepest occurrence to transition-to.\r\n\r\n event.gesture = event.gesture || {};\r\n event.gesture.preventTransitions = true;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n registerTransitionTo: registerTransitionTo,\r\n };\r\n }\r\n})();\r\n","// Put inside of ng-repeat before col-* element\r\n// For reference: getbootstrap.com/css/#responsive-utilities\r\n// getbootstrap.com/css/#grid-responsive-resets\r\nangular.module('aprima-core-ui').directive('ngRepeatColumnReset', [\r\n function () {\r\n 'use strict';\r\n\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n xs: '',\r\n controller: function($scope){\r\n $scope.getTemplateUrl = function() {\r\n return $scope.appt.dataType === 'template' ? \r\n '/core-ui/views/directives/partials/apAppointmentListTemplateSlot.html' :\r\n '/core-ui/views/directives/partials/apAppointmentListItem.html';\r\n };\r\n }\r\n };\r\n }]);\r\n","angular.module('aprima-core-ui')\r\n.directive('apDragDrop', [function () {\r\n 'use strict';\r\n\r\n return {\r\n scope: {\r\n index: '=',\r\n startIndex: '&',\r\n dropIndex: '&', \r\n }, \r\n link: function (scope,element) {\r\n \r\n var sIndex = -1;\r\n var dindex = -1;\r\n var i = element.find('[id*=\"ph\"]');\r\n \r\n\r\n i[0].draggable = true;\r\n\r\n i[0].addEventListener('dragstart', function ondragstart() {\r\n sIndex = scope.index;\r\n scope.startIndex({ssIndex:sIndex}); \r\n });\r\n \r\n i[0].addEventListener('drop', function ondrop(evt) {\r\n evt.preventDefault();\r\n dindex = scope.index; \r\n scope.dropIndex({ddIndex:dindex}); \r\n });\r\n\r\n i[0].addEventListener('dragover', function ondrgaover(evt) { \r\n evt.preventDefault(); }); \r\n }\r\n };\r\n\r\n}]);","angular.module('aprima-core-ui').directive('apMessageAssignTo', [function () {\r\n 'use strict';\r\n\r\n return {\r\n scope: {\r\n message: '=',\r\n userList: '=',\r\n users: '=',\r\n clickHandler: '=',\r\n reassignHandler: '='\r\n },\r\n templateUrl: '/core-ui/views/directives/apMessageAssignTo.html',\r\n link: function (scope) {\r\n\r\n if (!scope.message) {\r\n throw new Error('apMessageAssignTo: message is undefined');\r\n }\r\n if (!scope.userList) {\r\n throw new Error('apMessageAssignTo: userList is undefined');\r\n }\r\n if (!scope.clickHandler) {\r\n throw new Error('apMessageAssignTo: clickHandler is undefined');\r\n }\r\n if (!scope.reassignHandler) {\r\n throw new Error('apMessageAssignTo: reassignHandler is undefined');\r\n }\r\n if (!scope.users) {\r\n throw new Error('apMessageAssignTo: users is undefined');\r\n }\r\n\r\n }\r\n };\r\n\r\n}]);","angular.module('aprima-core-ui').component('apMessageListItem', {\r\n bindings: {\r\n message: '<',\r\n narrow: ''));\r\n }\r\n };\r\n}]);\r\n","angular.module('aprima-core-ui')\r\n .directive('stRatio', ['$parse', function($parse) {\r\n 'use strict';\r\n\r\n return {\r\n link: function (scope, element, attr) {\r\n var ratio = $parse(attr.stRatio)(scope);\r\n\r\n element.css('width', ratio + '%');\r\n }\r\n };\r\n }]);","angular.module('aprima-core-ui').filter('apFilterFeature', ['ServerInfoRepository', '_', function (ServerInfoRepository, _) {\r\n 'use strict';\r\n return function (inputCollection, featureParam) {\r\n var fn = _.isArray(inputCollection) ? _.filter : _.pickBy;\r\n\r\n return fn(inputCollection, function(item) {\r\n if(item[featureParam]) {\r\n\r\n var splitRequiredFeatures = item[featureParam].split(',');\r\n var isFeatureSupported = ServerInfoRepository.isFeatureSupported(splitRequiredFeatures);\r\n\r\n if(isFeatureSupported){\r\n return true;\r\n }\r\n }\r\n else{\r\n return true;\r\n }\r\n });\r\n };\r\n}]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').filter('apHasFeature', [\r\n '_',\r\n 'ServerInfoRepository',\r\n apHasFeature,\r\n ]);\r\n\r\n function apHasFeature(\r\n _,\r\n ServerInfoRepository\r\n ) {\r\n return hasFeature;\r\n\r\n function hasFeature(features) {\r\n if(!features) {\r\n return false;\r\n }\r\n\r\n var featureList;\r\n if(_.isArray(features)) {\r\n featureList = features;\r\n }\r\n else if(_.isString(features)) {\r\n featureList = features.split(',');\r\n }\r\n else {\r\n return false;\r\n }\r\n\r\n var featureResult = ServerInfoRepository.isFeatureSupported(featureList);\r\n\r\n return featureResult;\r\n }\r\n }\r\n\r\n})(window.angular);","angular.module('aprima-core-ui').filter('apSsnFilter', function () {\r\n 'use strict';\r\n return function (value) {\r\n\r\n if (value) {\r\n var val = value.toString().replace(/\\D/g, '');\r\n\r\n var len = val.length;\r\n if (len < 4) {\r\n return val;\r\n }\r\n else if (3 < len && len < 6) {\r\n\r\n return val.substr(0, 3) + '-' + val.substr(3);\r\n }\r\n else if (len > 5) {\r\n\r\n return val.substr(0, 3) + '-' + val.substr(3, 2) + '-' + val.substr(5, 4);\r\n }\r\n }\r\n return value;\r\n };\r\n }\r\n);\r\n","(function() {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('GeneralNotesModal', [\r\n '$uibModal',\r\n GeneralNotesModal\r\n ]);\r\n\r\n angular.module('aprima-core-ui').controller('GeneralNotesModalCtrl', [\r\n '_',\r\n '$q',\r\n '$uibModalInstance',\r\n '$window',\r\n 'currentNote',\r\n 'debounce',\r\n 'DeviceSettings',\r\n 'disableFormatting',\r\n 'GeneralNotesRepository',\r\n 'generalNoteTypeId',\r\n 'generalNoteTypeKey',\r\n 'gettext',\r\n 'ListService',\r\n 'maxCharacters',\r\n 'ServerInfoRepository',\r\n 'title',\r\n 'toaster',\r\n 'uxConstants',\r\n GeneralNotesModalCtrl,\r\n ]);\r\n\r\n function GeneralNotesModal(\r\n $modal\r\n ) {\r\n return {\r\n openModal: openModal,\r\n openModalOnly: openModalOnly,\r\n };\r\n\r\n function openModal(title, currentNote, disableFormatting, maxCharacters, generalNoteTypeKey, generalNoteTypeId) {\r\n return openModalOnly(title, currentNote, disableFormatting, maxCharacters, generalNoteTypeKey, generalNoteTypeId).result;\r\n }\r\n\r\n function openModalOnly(title, currentNote, disableFormatting, maxCharacters, generalNoteTypeKey, generalNoteTypeId) {\r\n var modalInstance = $modal.open({\r\n templateUrl: '/core-ui/modal-views/generalNotesModal.html',\r\n windowClass: 'modal-full',\r\n controller: 'GeneralNotesModalCtrl',\r\n controllerAs: 'vm',\r\n resolve: {\r\n currentNote: function() { return currentNote; },\r\n generalNoteTypeKey: function() {return generalNoteTypeKey;},\r\n generalNoteTypeId: function() {return generalNoteTypeId;},\r\n disableFormatting: function() {return disableFormatting;},\r\n maxCharacters: function() {return maxCharacters;},\r\n title: function() {return title;},\r\n },\r\n });\r\n\r\n return modalInstance;\r\n }\r\n }\r\n\r\n function GeneralNotesModalCtrl(\r\n _,\r\n $q,\r\n $modalInstance,\r\n $window,\r\n currentNote,\r\n debounce,\r\n DeviceSettings,\r\n disableFormatting,\r\n GeneralNotesRepository,\r\n generalNoteTypeId,\r\n generalNoteTypeKey,\r\n gettext,\r\n ListService,\r\n maxCharacters,\r\n ServerInfoRepository,\r\n title,\r\n toaster,\r\n uxConstants\r\n ) {\r\n var vm = this;\r\n\r\n vm.generalNotesSupported = ServerInfoRepository.isFeatureSupported('GeneralNotes');\r\n vm.currentNote = currentNote || '';\r\n vm.disableFormatting = !!disableFormatting;\r\n vm.title = title || 'General Notes';\r\n vm.maxCharacters = maxCharacters;\r\n vm.searchText = '';\r\n vm.tinymceHeight = $window.innerHeight-240; //modal padding, header footer height, right section padding\r\n vm.includeInactive = false;\r\n vm.searchGeneralNoteType = null;\r\n var originalGeneralNoteType = null;\r\n vm.generalNoteTypeList = [];\r\n vm.loadingSearch = false;\r\n vm.initialLoading = false;\r\n\r\n vm.cancel = cancel;\r\n vm.ok = ok;\r\n vm.getRemainingCharacters = getRemainingCharacters;\r\n vm.shouldSwapButtons = shouldSwapButtons;\r\n\r\n if(!vm.generalNotesSupported) {\r\n return;\r\n }\r\n\r\n // use result.finally in case the modal gets closed from outside of this controller\r\n $modalInstance.result.finally(function() {\r\n if(generalNoteTypeKey && vm.searchGeneralNoteType && (!originalGeneralNoteType || originalGeneralNoteType.Id !== vm.searchGeneralNoteType.Id)) {\r\n var savePromise = GeneralNotesRepository.saveGeneralNoteTypeSetting(generalNoteTypeKey, vm.searchGeneralNoteType);\r\n return savePromise;\r\n }\r\n });\r\n\r\n vm.changeSearchCriteria = debounce(uxConstants.searchDebounceTime, searchGeneralNotes);\r\n vm.appendNote = appendNote;\r\n\r\n onLoad();\r\n \r\n function onLoad(){\r\n vm.initialLoading = true;\r\n var promises = [];\r\n if(generalNoteTypeKey && !generalNoteTypeId) {\r\n promises.push(GeneralNotesRepository.getGeneralNoteType(generalNoteTypeKey).then(function(data) {\r\n vm.searchGeneralNoteType = data && data.plain ? data.plain() : data;\r\n if (vm.searchGeneralNoteType){\r\n originalGeneralNoteType = vm.searchGeneralNoteType;\r\n searchGeneralNotes();\r\n }\r\n }));\r\n }\r\n\r\n promises.push(ListService.getList('generalnotetypes').then(function(result) {\r\n vm.generalNoteTypeList = result;\r\n\r\n if(!vm.searchGeneralNoteType && generalNoteTypeId) {\r\n vm.searchGeneralNoteType = _.find(vm.generalNoteTypeList, {Id: generalNoteTypeId});\r\n if (vm.searchGeneralNoteType){\r\n originalGeneralNoteType = vm.searchGeneralNoteType;\r\n searchGeneralNotes();\r\n }\r\n }\r\n }));\r\n \r\n $q.all(promises).finally(function() {\r\n vm.initialLoading = false;\r\n });\r\n }\r\n\r\n function appendNote(entry) {\r\n if (!!vm.maxCharacters && (vm.maxCharacters < (vm.currentNote.length + entry.Notes.length))) {\r\n toaster.pop({\r\n type: 'error',\r\n title: gettext('Cannot Insert'),\r\n body: gettext('The note you are inserting would exceed the maximum number of characters allowed.')\r\n });\r\n return;\r\n }\r\n\r\n vm.currentNote = vm.currentNote + entry.Notes;\r\n }\r\n\r\n function searchGeneralNotes() {\r\n vm.loadingSearch = true;\r\n var generalNoteTypeId = vm.searchGeneralNoteType && vm.searchGeneralNoteType.Id;\r\n GeneralNotesRepository.search(vm.searchText, generalNoteTypeId, vm.includeInactive)\r\n .then(function(data){\r\n vm.generalNoteList = data && data.plain();\r\n })\r\n .finally(function(){\r\n vm.loadingSearch = false;\r\n });\r\n }\r\n\r\n function getRemainingCharacters() {\r\n var maxLength = vm.maxCharacters;\r\n\r\n if (vm.currentNote) {\r\n maxLength -= vm.currentNote.length;\r\n }\r\n\r\n return maxLength;\r\n }\r\n\r\n function cancel() {\r\n $modalInstance.dismiss();\r\n }\r\n \r\n function ok() {\r\n $modalInstance.close(vm.currentNote);\r\n }\r\n\r\n function shouldSwapButtons() {\r\n return DeviceSettings.isPrm;\r\n }\r\n }\r\n})();","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('MultiSelectListItemModal', [\r\n '$uibModal',\r\n MultiSelectListItemModal,\r\n ]);\r\n\r\n angular.module('aprima-core-ui').controller('MultiSelectListItemModalCtrl', [\r\n '_',\r\n '$uibModalInstance',\r\n 'collection',\r\n 'debounce',\r\n 'formatter',\r\n 'orderFn',\r\n 'selectedItems',\r\n MultiSelectListItemModalCtrl,\r\n ]);\r\n\r\n function MultiSelectListItemModal(\r\n $modal\r\n ) {\r\n var service = {\r\n openModal: openModal,\r\n };\r\n\r\n return service;\r\n\r\n function openModal(collection, selectedItems, formatter, orderFn) {\r\n var modal = $modal.open({\r\n backdrop: 'static',\r\n templateUrl: '/core-ui/modal-views/multi-select-list-item-modal.html',\r\n controller: 'MultiSelectListItemModalCtrl',\r\n controllerAs: 'vm',\r\n resolve: {\r\n collection: function() {\r\n return collection;\r\n },\r\n selectedItems: function() {\r\n return selectedItems;\r\n },\r\n formatter: function() {\r\n return formatter;\r\n },\r\n orderFn: function() {\r\n return orderFn;\r\n },\r\n },\r\n });\r\n\r\n return modal.result;\r\n }\r\n }\r\n\r\n function MultiSelectListItemModalCtrl(\r\n _,\r\n $modalInstance,\r\n collection,\r\n debounce,\r\n formatter,\r\n orderFn,\r\n selectedItems\r\n ) {\r\n var vm = this;\r\n\r\n vm.cancel = cancel;\r\n vm.done = done;\r\n vm.clear = debounce(100, clear);\r\n vm.load = debounce(200, loadData);\r\n vm.getItemOrder = getItemOrder;\r\n vm.countSelected = countSelected;\r\n vm.items = [];\r\n vm.formatter = formatter;\r\n\r\n activate();\r\n\r\n function activate() {\r\n loadData();\r\n orderFn = orderFn || _.identity;\r\n }\r\n\r\n function loadData() {\r\n vm.items = _.compact(collection);\r\n\r\n if(selectedItems) {\r\n _.intersectionBy(vm.items, selectedItems, 'Id').forEach(function(item) {\r\n item.previouslySelected = true;\r\n item.selected = true;\r\n });\r\n }\r\n }\r\n\r\n function cancel() {\r\n $modalInstance.dismiss();\r\n }\r\n\r\n function clear() {\r\n if(!vm.items) {\r\n return;\r\n }\r\n\r\n _.forEach(vm.items, function(item) {\r\n if(item) {\r\n item.selected = false;\r\n }\r\n });\r\n }\r\n\r\n function done() {\r\n var selected = _.filter(vm.items, 'selected');\r\n $modalInstance.close(selected);\r\n }\r\n\r\n function countSelected() {\r\n if(!vm.items) {\r\n return 0;\r\n }\r\n\r\n var count = _.sumBy(vm.items, function(val) {\r\n var num = val && val.selected ? 1 : 0;\r\n return num;\r\n });\r\n\r\n return count;\r\n }\r\n\r\n function getItemOrder(item) {\r\n if(!item) {\r\n return '2';\r\n }\r\n\r\n var order = '' + (item.previouslySelected ? 0 : 1) + orderFn(item);\r\n\r\n return order;\r\n }\r\n }\r\n\r\n})(window.angular);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('apConfirm', [\r\n '$uibModal',\r\n apConfirm\r\n ]);\r\n\r\n function apConfirm(\r\n $modal\r\n ) {\r\n\r\n return open;\r\n\r\n function open(message, okText, cancelText, size) {\r\n var confirmModal = $modal.open({\r\n controller: [\r\n '$uibModalInstance',\r\n 'message',\r\n 'okText',\r\n 'cancelText',\r\n ApConfirmCtrl\r\n ],\r\n controllerAs: 'vm',\r\n backdrop: 'static',\r\n templateUrl: '/core-ui/views/confirm.html',\r\n size: size || 'sm', // xs, sm, md, lg\r\n resolve: {\r\n message: function() {\r\n return message;\r\n },\r\n okText: function() {\r\n return okText;\r\n },\r\n cancelText: function() {\r\n return cancelText;\r\n },\r\n },\r\n });\r\n\r\n return confirmModal.result;\r\n }\r\n }\r\n\r\n function ApConfirmCtrl(\r\n $modalInstance,\r\n message,\r\n okText,\r\n cancelText\r\n ) {\r\n var vm = this;\r\n\r\n vm.message = message;\r\n vm.okText = okText || 'OK';\r\n vm.cancelText = cancelText || 'Cancel';\r\n vm.cancel = cancel;\r\n vm.close = close;\r\n\r\n function cancel() {\r\n $modalInstance.dismiss();\r\n }\r\n\r\n function close(value) {\r\n $modalInstance.close(value);\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('apConfirmService', [\r\n 'apConfirm',\r\n apConfirmService\r\n ]);\r\n\r\n function apConfirmService(\r\n apConfirm\r\n ) {\r\n\r\n return {\r\n confirm: confirm,\r\n };\r\n\r\n function confirm(message, okText, cancelText, size) {\r\n return apConfirm(message, okText, cancelText, size);\r\n }\r\n }\r\n})(window.angular);\r\n","angular.module('aprima-core-ui').factory('BarcodeScanningService',\r\n ['Bridge',\r\n function (Bridge) {\r\n 'use strict';\r\n var id = 0;\r\n\r\n function scanBarcode (scope, scanResultCallback) {\r\n var barcodeId = id++;\r\n Bridge.scanBarcode(barcodeId);\r\n\r\n var unregister = Bridge.on('scannedBarcodeResult', scope, function (value) {\r\n unregister();\r\n\r\n if (parseInt(value.Id) === barcodeId) {\r\n scanResultCallback(value.StatusMessage, value.ScannedResultText);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n scanBarcode: scanBarcode\r\n };\r\n }\r\n ]\r\n);","(function () {\r\n 'use strict';\r\n angular.module('aprima-core-ui').factory('ClickListenerService', [\r\n '$parse',\r\n '$window',\r\n 'DeviceSettings',\r\n 'NgZoneService',\r\n ClickListenerService\r\n ]);\r\n\r\n function ClickListenerService(\r\n $parse,\r\n $window,\r\n DeviceSettings,\r\n NgZoneService\r\n ) {\r\n // These changes to wrap the functions using NgZoneService.contextRun() (to runOutsideAngular) are based off of hammer_gestures.ts in Angular\r\n // where the creation of the Hammer instance, and .on() are wrapped in a similar way.\r\n // This can also be done carefully in other services, components, etc that get referenced by UpgradeComponents,\r\n // to fix issues where the the page is really slow because of too much stuff happening inside of the Angular zone,\r\n // which is then triggering the change detection.\r\n // This is more important for the hammer events than the click events, so if it's causing issues with the click events, then\r\n // this service could be changed to just wrap the hammer functions below, like registerHmClick, instead of all 3 of these\r\n // top-level functions that are returned.\r\n\r\n return {\r\n parseOptionsFromLink: parseOptionsFromLink,\r\n register: register,\r\n registerFromDirective: registerFromDirective,\r\n };\r\n\r\n function parseOptionsFromLink(scope, element, attrs) {\r\n return {\r\n hmOptions: $parse(attrs.hmOptions)(scope, {}),\r\n hmPropagation: $parse(attrs.hmPropagation)(scope, {}),\r\n hmStopPropagation: $parse(attrs.hmStopPropagation)(scope, {}),\r\n hmTapOnly: $parse(attrs.hmTapOnly)(scope, {}),\r\n };\r\n }\r\n\r\n function shouldUseHammer() {\r\n // Hammer doesn't work on some Windows 7/Server 2008 R2 machines,\r\n // so always fallback to ngClick when in PRM.\r\n return !DeviceSettings.isPrm &&\r\n Hammer !== 'undefined' &&\r\n $window.addEventListener;\r\n }\r\n\r\n function register(element, handlerFn, handlerOpts) {\r\n var result = NgZoneService.contextRun(function (zoneAwareObject) {\r\n return zoneAwareRegister(element, handlerFn, handlerOpts, zoneAwareObject);\r\n });\r\n return result;\r\n }\r\n\r\n // This zoneAwareObject always needs to be the last parameter to this function.\r\n function zoneAwareRegister(element, handlerFn, handlerOpts, zoneAwareObject) {\r\n var opts = {\r\n // Enable propagation functionality for this element.\r\n // Propagation needs to be enabled for the child element\r\n // to be able to receive the Hammer event\r\n // when both parent and child have been registered for Hammer events.\r\n hmPropagation: false,\r\n // Always call $event.stopPropagation().\r\n // Automatically turns on Hammer propagation.\r\n hmStopPropagation: false,\r\n // If false, treat the tap and press events identically.\r\n // If true, only listen for tap events using default timings.\r\n hmTapOnly: false,\r\n };\r\n\r\n angular.extend(opts, handlerOpts);\r\n\r\n var zoneAwareHandlerFn = zoneAwareObject.wrapToRunInZoneIfNecessary(handlerFn);\r\n\r\n if (shouldUseHammer()) {\r\n return registerHmClick(element, hmHandler, opts);\r\n } else {\r\n return registerNgClick(element, ngHandler);\r\n }\r\n\r\n function ngHandler(event) {\r\n zoneAwareHandlerFn(event);\r\n\r\n if (opts.hmStopPropagation) {\r\n event.stopPropagation();\r\n }\r\n }\r\n\r\n function hmHandler(event) {\r\n var stopPropagation = event.stopPropagation;\r\n if(stopPropagation && (opts.hmPropagation || opts.hmStopPropagation)) {\r\n event.stopPropagation = function() {\r\n stopSrcPropagation(event);\r\n stopPropagation.apply(event, arguments);\r\n };\r\n }\r\n\r\n if (!event.isDefaultPrevented) {\r\n event.isDefaultPrevented = function clsIsDefaultPrevented() {\r\n return event.srcEvent && event.srcEvent.defaultPrevented;\r\n };\r\n }\r\n\r\n ngHandler(event);\r\n }\r\n }\r\n\r\n function stopSrcPropagation(hammerEv) {\r\n var srcEvent = hammerEv && hammerEv.srcEvent;\r\n if(!(srcEvent instanceof Event)) {\r\n return;\r\n }\r\n\r\n // propagating-hammerjs redefines stopPropagation, so make sure we are calling the prototype one\r\n Event.prototype.stopPropagation.call(srcEvent);\r\n }\r\n\r\n function registerFromDirective(scope, element, attrs, attributeName) {\r\n var result = NgZoneService.contextRun(function (zoneAwareObject) {\r\n return zoneAwareRegisterFromDirective(scope, element, attrs, attributeName, zoneAwareObject);\r\n });\r\n return result;\r\n }\r\n\r\n // This zoneAwareObject always needs to be the last parameter to this function.\r\n function zoneAwareRegisterFromDirective(scope, element, attrs, attributeName, zoneAwareObject) {\r\n var registerOpts = parseOptionsFromLink(scope, element, attrs);\r\n // calling $parse with 3 arguments, rather than just the expression comes from ngclick in 1.5.x\r\n var parsedFn = $parse(attrs[attributeName], null, true);\r\n\r\n var deregister = zoneAwareRegister(element, clickHandler, registerOpts, zoneAwareObject);\r\n\r\n scope.$on('$destroy', deregister);\r\n\r\n function clickHandler(event) {\r\n // Previously (look at comment below), this was not wrapped in NgZoneService.run because it didn't need to manually trigger a run of Angular change detection,\r\n // but the reason I'm realizing that it needs to now is that this callback could be calling back into Angular code (which means it needs to be in the Ng Zone).\r\n // And I would rather handle fixing that here, than having to know in specific places if we need to run certain Angular code inside of the Ng Zone.\r\n // This situation would happen either directly or indirectly from an UpgradeComponent or upgraded injectable.\r\n // This handler gets wrapped to run inside of the Ng Zone above, when it is passed into register().\r\n // =================================================================================================================\r\n // Previous logic:\r\n // We currently don't need to run this inside of NgZone in hybrid mode,\r\n // because it will detect changes from this digest cycle started by scope.$apply.\r\n // The reason is because of the ForceLoadAngularComponent, which is downgraded with propagateDigest = true,\r\n // which causes the Angular change detection to run on every $digest.\r\n // If that changes, then code that is doing scope.$apply outside of Angular, like this line will need to be wrapped in NgZoneService.run().\r\n // For reference: https://angular.io/api/upgrade/static/downgradeComponent#downgradecomponent\r\n // =================================================================================================================\r\n scope.$apply(callback);\r\n\r\n function callback() {\r\n parsedFn(scope, { $event: event });\r\n } \r\n }\r\n }\r\n\r\n /* Adapted from:\r\n * angular-hammer v1.2.4\r\n * (c) 2013 Monospaced http://monospaced.com\r\n * License: MIT\r\n */\r\n /* This fixes an issue with hm-tap where longer taps do not register as taps but as presses.\r\n Hammerjs requires a maximum tap time of 250ms which seemed to be too short when actually using devices.\r\n\r\n This change makes hm-click fire for taps AND presses.\r\n\r\n hm-click should NOT be used in cases where a press and tap are expected to be handled differently\r\n */\r\n function registerHmClick(element, handlerFn, opts) {\r\n // don't create multiple Hammer instances per element\r\n var hammer = element.data('hammer');\r\n var shouldDestroy = false;\r\n if (!hammer) {\r\n hammer = new Hammer.Manager(element[0], opts.hmOptions);\r\n\r\n // we are creating a new instance in this function,\r\n // so it needs to be cleaned up in here as well, below in the returned dereg function\r\n shouldDestroy = true;\r\n\r\n if (opts.hmPropagation || opts.hmStopPropagation) {\r\n hammer = propagating(hammer);\r\n }\r\n\r\n element.data('hammer', hammer);\r\n }\r\n\r\n // Make sure that a click event is ignored when it was already handled as a tap or press.\r\n $window.PreventGhostClick(element[0]);\r\n\r\n // bind Hammer touch event\r\n if (opts.hmTapOnly) {\r\n hammer.add(new Hammer.Tap());\r\n\r\n hammer.on('tap', handlerFn);\r\n } else {\r\n hammer.add(new Hammer.Tap({ time: 499 }));\r\n hammer.add(new Hammer.Press({ time: 500 }));\r\n\r\n hammer.on('tap', handlerFn);\r\n hammer.on('pressup', handlerFn);\r\n }\r\n\r\n return function hmCleanup() {\r\n // unbind Hammer touch event\r\n hammer.off('tap', handlerFn);\r\n\r\n if (!opts.hmTapOnly) {\r\n hammer.off('pressup', handlerFn);\r\n }\r\n\r\n if (shouldDestroy) {\r\n hammer.destroy();\r\n }\r\n };\r\n }\r\n\r\n function registerNgClick(element, handlerFn) {\r\n element.on('click', handlerFn);\r\n\r\n return function ngCleanup() {\r\n element.off('click', handlerFn);\r\n };\r\n }\r\n }\r\n})();","angular.module('aprima-core-ui').factory('IcdCodeModal', ['$uibModal', '$rootScope', '$q', function ($modal, $rootScope, $q) {\r\n 'use strict';\r\n\r\n function openModal(code, codeType) {\r\n var deferred = $q.defer();\r\n \r\n var modalInstance = $modal.open({\r\n animation: false,\r\n templateUrl: '/core-ui/views/directives/apIcdCodeModal.html',\r\n controller: 'apIcdCodeModalCtrl',\r\n resolve: {\r\n searchParams: function () {\r\n return {\r\n code: code,\r\n codeType: codeType\r\n };\r\n }\r\n },\r\n backdrop: 'static',\r\n windowClass: 'modal-full'\r\n });\r\n \r\n modalInstance.result.then(function(result){\r\n deferred.resolve(result);\r\n }).catch(function(err){\r\n deferred.reject(err);\r\n modalInstance.dismiss();\r\n });\r\n \r\n return deferred.promise;\r\n }\r\n \r\n return {\r\n openModal: openModal\r\n };\r\n}]);","(function(angular){\r\n 'use strict';\r\n\r\n var validationKey = 'apMultiSelectButton';\r\n\r\n angular.module('aprima-core-ui').factory('ApMultiSelectButton', [\r\n '_',\r\n ApMultiSelectButton,\r\n ]);\r\n\r\n function ApMultiSelectButton(\r\n _\r\n ) {\r\n var service = {\r\n init: init,\r\n };\r\n\r\n return service;\r\n \r\n\r\n function init(ctrl, onOpen, itemFormatter, orderFn, element) {\r\n itemFormatter = itemFormatter || _.identity;\r\n orderFn = orderFn || _.identity;\r\n\r\n ctrl.innerValue = undefined;\r\n ctrl.onClick = onClick;\r\n ctrl.$onInit = onInit;\r\n\r\n\r\n function onInit() {\r\n ctrl.ngModelCtrl.$isEmpty = isEmpty;\r\n ctrl.ngModelCtrl.$render = render;\r\n ctrl.ngModelCtrl.$formatters.push(defaultFormatterParser);\r\n ctrl.ngModelCtrl.$parsers.push(defaultFormatterParser);\r\n }\r\n\r\n function render() {\r\n var value = ctrl.ngModelCtrl.$viewValue;\r\n\r\n if(_.isArray(value)) {\r\n var resultValue = _(value)\r\n .sortBy(orderFn)\r\n .map(itemFormatter)\r\n .join(', ');\r\n\r\n ctrl.innerValue = resultValue;\r\n\r\n return;\r\n }\r\n\r\n ctrl.innerValue = undefined;\r\n }\r\n\r\n function isEmpty(value) {\r\n return !value || !value.length;\r\n }\r\n\r\n function onClick() {\r\n if(!ctrl.ngModelCtrl) {\r\n return;\r\n }\r\n\r\n onOpen(ctrl.ngModelCtrl.$viewValue)\r\n .then(function(result) {\r\n ctrl.ngModelCtrl.$setViewValue(result || []);\r\n ctrl.ngModelCtrl.$render();\r\n })\r\n .finally(function() {\r\n // after closing, don't keep button focused\r\n if(element) {\r\n element.blur();\r\n }\r\n });\r\n }\r\n\r\n function defaultFormatterParser(value) {\r\n if(_.isNil(value)) {\r\n ctrl.ngModelCtrl.$setValidity(validationKey, true);\r\n return null;\r\n }\r\n\r\n if(!_.isArray(value)) {\r\n ctrl.ngModelCtrl.$setValidity(validationKey, false);\r\n return null;\r\n }\r\n\r\n // cloneDeep so that mutating an object in either array won't have side effects on the other one\r\n var newArray = _(value)\r\n .filter(itemFormatter)\r\n .cloneDeep();\r\n\r\n // if the filtered array is the same length, then there are no invalid items\r\n if(newArray.length === value.length) {\r\n ctrl.ngModelCtrl.$setValidity(validationKey, true);\r\n }\r\n else {\r\n ctrl.ngModelCtrl.$setValidity(validationKey, false);\r\n }\r\n\r\n return newArray;\r\n }\r\n }\r\n }\r\n\r\n})(window.angular);","angular.module('aprima-core-ui').factory('inputSelection', [ \r\n function() {\r\n 'use strict';\r\n \r\n return {\r\n getChildElement: getChildElement,\r\n trySelectStr: trySelectStr,\r\n };\r\n \r\n function getChildElement(element) {\r\n var childElement = element[0];\r\n if(!childElement.setSelectionRange) {\r\n throw new Error('inputSelection won\\'t work with ' + childElement + ' because it doesn\\'t' +\r\n ' support \\'setSelectionRange\\'');\r\n }\r\n return childElement;\r\n }\r\n \r\n function trySelectStr(element, ngModelCtrl, str, startIndex) {\r\n if(!element || !ngModelCtrl) {\r\n return false;\r\n }\r\n startIndex = startIndex || 0;\r\n \r\n var viewValue = ngModelCtrl.$viewValue && ngModelCtrl.$viewValue.toString();\r\n if(viewValue) {\r\n var index = viewValue.indexOf(str, startIndex);\r\n if(index !== -1) {\r\n element.setSelectionRange(index, index + str.length);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n }\r\n]);","(function (angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('IntersectionObserverService', [\r\n '$log',\r\n IntersectionObserverService,\r\n ]);\r\n\r\n function IntersectionObserverService(\r\n $log\r\n ) {\r\n return {\r\n observeWithSelector: observeWithSelector,\r\n };\r\n\r\n function observeWithSelector(selector, observerCallback) {\r\n if('IntersectionObserver' in window) {\r\n var trackerElement = document.querySelector(selector);\r\n var intersectionObserver = new IntersectionObserver(observerCallback);\r\n intersectionObserver.observe(trackerElement);\r\n return intersectionObserver.disconnect.bind(intersectionObserver);\r\n }\r\n\r\n $log.debug('Browser doesn\\'t support \"IntersectionObserver\".');\r\n return angular.noop;\r\n }\r\n }\r\n})(window.angular);","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('IosDocumentHelper', [\r\n 'Bridge',\r\n IosDocumentHelper\r\n ]);\r\n\r\n function IosDocumentHelper(\r\n Bridge\r\n ) {\r\n return {\r\n openDocumentInSeparateTab: openDocumentInSeparateTab \r\n };\r\n\r\n function openDocumentInSeparateTab(documentGetStaticUrlPromise) {\r\n documentGetStaticUrlPromise.then(function(url) {\r\n Bridge.fireEvent('OpenLinkInBrowser', {url: url});\r\n });\r\n }\r\n } \r\n})(angular);\r\n","angular.module('aprima-core-ui').factory('MediaService', ['Bridge', function (Bridge) {\r\n 'use strict';\r\n var id = 0;\r\n\r\n function getMedia (scope, pickerDescription, mediaCallback) {\r\n var mediaId = id++;\r\n Bridge.pickMedia(mediaId, pickerDescription);\r\n\r\n Bridge.on('mediaPicked', scope, function (value) {\r\n if(parseInt(value.Id) === mediaId) {\r\n mediaCallback(value.Media, value.FileName, value.Extension);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n getMedia: getMedia\r\n };\r\n}]);\r\n","angular.module('aprima-core-ui').factory('PanelConfigurationService', ['LocalStorageRepository', '$log', 'widgetViews',\r\n function (LocalStorageRepository, $log, widgetViews) {\r\n\r\n 'use strict';\r\n\r\n var configurations;\r\n configurations = configurations || LocalStorageRepository.getPatientDashboardConfigurations('all');\r\n\r\n function getWidgetsForLayout() {\r\n var selectableWidgets = [];\r\n var widgets = LocalStorageRepository.getPatientDashboardWidgets();\r\n var view;\r\n\r\n _.forEach(widgets, function (widget) {\r\n view = _.cloneDeep(_.find(widgetViews, {'id': widget.Id}));\r\n if (view && view.userPlaceable) {\r\n view.Heading = view.displayName;\r\n view.Name = view.name;\r\n view.TileDescriptorId = view.id;\r\n view.Id = view.name + '.template';\r\n view.isTemplate = true;\r\n view.IsCollapsed = false;\r\n selectableWidgets.push(view);\r\n }\r\n });\r\n\r\n return selectableWidgets;\r\n }\r\n\r\n function reloadConfigurations() {\r\n configurations = LocalStorageRepository.getPatientDashboardConfigurations('all');\r\n }\r\n\r\n function saveLayout(configName, widgetSetName, widgets){\r\n var config = _getConfiguration(configName);\r\n\r\n _.forEach(widgets, function(widget){\r\n if(widget.name && !widget.Name){\r\n widget.Name = widget.name;\r\n }\r\n });\r\n\r\n config[widgetSetName] = widgets;\r\n\r\n LocalStorageRepository.removePatientDashboardConfigurations('all');\r\n LocalStorageRepository.setPatientDashboardConfigurations(configurations, 'all');\r\n }\r\n\r\n function _getConfiguration(configName, dashboards) {\r\n if(!dashboards){\r\n dashboards = configurations;\r\n }\r\n \r\n var settings = _.find(dashboards, {Id: configName});\r\n\r\n if (!settings) {\r\n $log.warn('patient dashboard configuration not found');\r\n }\r\n\r\n return settings;\r\n }\r\n\r\n function _getLayout(settings, widgetSetName) {\r\n\r\n var widgets, view, pageViews;\r\n widgets = settings[widgetSetName];\r\n pageViews = [];\r\n\r\n _.forEach(widgets, function (widget) {\r\n view = _.find(widgetViews, {'id': widget.TileDescriptorId});\r\n if (view && view.userPlaceable) {\r\n var clonedWidget = _.cloneDeep(widget);\r\n clonedWidget.view = view.view;\r\n clonedWidget.configurationView = view.configurationView;\r\n clonedWidget.displayName = view.displayName;\r\n pageViews.push(clonedWidget);\r\n }\r\n });\r\n\r\n return pageViews;\r\n }\r\n\r\n function _getLayoutWithConfig(config, widgetSetName, dashboards) {\r\n var settings = _getConfiguration(config, dashboards);\r\n return _getLayout(settings, widgetSetName);\r\n }\r\n\r\n return {\r\n getConfiguration: _getConfiguration,\r\n getLayout: _getLayout,\r\n getLayoutWithConfig: _getLayoutWithConfig,\r\n getWidgetsForLayout: getWidgetsForLayout,\r\n saveLayout: saveLayout,\r\n reloadConfigurations: reloadConfigurations,\r\n };\r\n\r\n }]);","// This is an abstraction around how we can handle warnings that should be displayed indefinitely\r\n// Currently it uses 'toaster' to display these warnings,\r\n// but this could be modified to display them differently, if needed\r\n\r\n(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('PersistentWarningService', [\r\n '_',\r\n 'StrConvert',\r\n 'toaster',\r\n PersistentWarningService,\r\n ]);\r\n\r\n function PersistentWarningService(\r\n _,\r\n StrConvert,\r\n toaster\r\n ) {\r\n\r\n var warnings = {\r\n list: []\r\n };\r\n\r\n var service = {\r\n add: add,\r\n addOrReplace: addOrReplace,\r\n clear: clear,\r\n getAll: getAll,\r\n remove: remove,\r\n };\r\n\r\n return service;\r\n\r\n function clear() {\r\n _.forEach(warnings.list, function(warning) {\r\n toaster.clear(warning);\r\n });\r\n _.forEach(warnings, function(property){\r\n if (property.length){\r\n return;\r\n }\r\n toaster.clear(property);\r\n if (property && property.message){\r\n property.message = null;\r\n }\r\n });\r\n }\r\n\r\n function remove(warning, key) {\r\n if(!_.isNil(warning)) {\r\n if(_.isInteger(warning)) {\r\n if(warning >= warnings.length) {\r\n return;\r\n }\r\n warning = warnings.list[warning];\r\n }\r\n if (warning){\r\n toaster.clear(warning);\r\n }\r\n }\r\n if (key) {\r\n warning = warnings[key];\r\n if (warning){\r\n toaster.clear(warning);\r\n warning.message = null;\r\n }\r\n }\r\n }\r\n\r\n function add(message, key) {\r\n message = StrConvert.replaceNewLine(message);\r\n var toast = toaster.pop({\r\n type: 'warning',\r\n body: message,\r\n title: '',\r\n timeout: 0,\r\n bodyOutputType: 'trustedHtml',\r\n onHideCallback: function() {\r\n _.pull(warnings, toast);\r\n },\r\n });\r\n toast.message = message;\r\n if (key){\r\n warnings[key] = toast;\r\n } else {\r\n warnings.list.push(toast);\r\n }\r\n return toast;\r\n }\r\n\r\n function addOrReplace(message, key){\r\n var exist;\r\n message = StrConvert.replaceNewLine(message);\r\n\r\n if (key) {\r\n exist = warnings[key];\r\n if (exist && exist.message !== message){\r\n remove(exist);\r\n exist = null;\r\n }\r\n } \r\n if (!exist){\r\n return add(message, key);\r\n }\r\n return exist;\r\n }\r\n\r\n function getAll(){\r\n return warnings;\r\n }\r\n }\r\n})(window.angular);\r\n","(function () {\r\n 'use strict';\r\n angular.module('aprima-core-ui').factory('PressListenerService', [\r\n 'NgZoneService',\r\n PressListenerService,\r\n ]);\r\n\r\n function PressListenerService(\r\n NgZoneService\r\n ) {\r\n return {\r\n register: register,\r\n };\r\n\r\n function register(element, handlerFn) {\r\n var result = NgZoneService.contextRun(function (zoneAwareObject) {\r\n return zoneAwareRegister(element, handlerFn, zoneAwareObject);\r\n });\r\n return result;\r\n }\r\n\r\n // This zoneAwareObject always needs to be the last parameter to this function.\r\n function zoneAwareRegister(element, handlerFn, zoneAwareObject) {\r\n // see comments in ClickListenerService for why this is necessary\r\n var zoneAwareHandlerFn = zoneAwareObject.wrapToRunInZoneIfNecessary(handlerFn);\r\n\r\n // don't create multiple Hammer instances per element\r\n var hammer = element.data('hammer');\r\n var shouldDestroy = false;\r\n if (!hammer) {\r\n hammer = new Hammer.Manager(element[0]);\r\n\r\n // we are creating a new instance in this function,\r\n // so it needs to be cleaned up in here as well, below in the dereg function\r\n shouldDestroy = true;\r\n\r\n element.data('hammer', hammer);\r\n }\r\n hammer.add(new Hammer.Press());\r\n hammer.on('press', zoneAwareHandlerFn);\r\n\r\n return function hmPressCleanup() {\r\n hammer.off('press', zoneAwareHandlerFn);\r\n\r\n if (shouldDestroy) {\r\n hammer.destroy();\r\n }\r\n };\r\n }\r\n }\r\n})();","angular.module('aprima-core-ui').factory('ScrollerService', ['_', function (_) {\r\n 'use strict';\r\n\r\n var scroller = {};\r\n\r\n return {\r\n getScroller: function (id) {\r\n return scroller[id];\r\n },\r\n addScroller: function (id, easyScroller, updatePageFn) {\r\n scroller[id] = _.cloneDeep(easyScroller);\r\n if(updatePageFn) {\r\n scroller[id].scrollTo = function(left, top, animate) {\r\n updatePageFn();\r\n easyScroller.scrollTo(left, top, animate);\r\n };\r\n }\r\n },\r\n removeScroller: function (id) {\r\n scroller[id] = undefined;\r\n }\r\n };\r\n}]);\r\n","//This service will change\r\n//ng-repeat=\"match in matches track by $index\"\r\n//to\r\n//ng-repeat=\"match in matches track by match.model.\"\r\n//in the typeahead popup template (typeahead-popup.html)\r\n\r\n//This allows us to use one time bindings in a typeahead template without running into issues\r\n//where some bindings don't change even when the list changes\r\n\r\n//it uses the 'ap-typeahead-track-by' attribute that I defined\r\n//if this attribute isn't used, then it will just use the default of track by $index\r\n\r\n//Example Usage:\r\n//uib-typeahead=\"item for item in getItem($viewValue)\"\r\n//ap-typeahead-track-by=\"Id\"\r\n//===============================\r\n//this means 'track by item.Id'\r\n\r\n//uib-typeahead=\"item for item in getItem($viewValue)\"\r\n//ap-typeahead-track-by=\"name\"\r\n//================================\r\n//this means 'track by item.name'\r\n\r\n// This is hacky but there is no other way right now to do it\r\n\r\nangular.module('aprima-core-ui').factory('enableTypeaheadTrackBy', ['findTypeahead', function (findTypeahead) {\r\n 'use strict';\r\n\r\n // the new attribute I'm defining to allow a different track by clause in the inner ng-repeat\r\n var typeaheadTrackBy = 'ap-typeahead-track-by';\r\n\r\n return enableTypeaheadTrackBy;\r\n\r\n function enableTypeaheadTrackBy(popupElement, typeaheadElement) {\r\n if(!popupElement) {\r\n return;\r\n }\r\n\r\n typeaheadElement = typeaheadElement || findTypeahead(popupElement);\r\n if(!typeaheadElement) {\r\n return;\r\n }\r\n \r\n var trackByAttr = typeaheadElement.attr(typeaheadTrackBy);\r\n if(trackByAttr) {\r\n popupElement.children('[ng-repeat*=\"matches\"]').first().attr('ng-repeat', function(index, value) {\r\n if(value) {\r\n var nameOfIterator = value.substring(0, value.indexOf(' '));\r\n //Will need to update this if the structure of the match changes\r\n //(It currently looks something like this { id: 'someid', model: {}, label: {}}\r\n return value.replace('$index', nameOfIterator + '.model.' + trackByAttr);\r\n }\r\n });\r\n }\r\n }\r\n}]);\r\n","// This is a way to find the typeahead input element that corresponds to the popup element\r\n// that is passed in\r\nangular.module('aprima-core-ui').factory('findTypeahead', ['$document', function($document) {\r\n 'use strict';\r\n\r\n return findTypeaheadElementFromPopup;\r\n \r\n function findTypeaheadElementFromPopup(popupElement) {\r\n if(!popupElement || !popupElement[0]) {\r\n return;\r\n }\r\n\r\n return $document.find('[aria-owns=\"' + popupElement[0].id + '\"]');\r\n }\r\n}]);","// this resizes the width of the uibTypeaheadPopup template to be the same width as the input box for typeahead (it won't automatically do this)\r\n// and places it directly below the input box\r\n// typeahead does the positioning (but not the width) automatically when it gets matches back for the query,\r\n// but during the time we are showing the loading spinner instead of results, it won't be positioned correctly\r\n// without this directive\r\n\r\n// It will not mess with the width if you use the class ap-form-control-menu on the popup element,\r\n// because this means that the width is already set to a percent that will be responsive\r\nangular.module('aprima-core-ui').factory('positionTypeaheadPopup', ['$uibPosition', 'findTypeahead', '_', function ($uibPosition, findTypeahead, _) {\r\n 'use strict';\r\n\r\n var ngHideClassRegex = /(\\s|^)ng-hide(\\s|$)/;\r\n\r\n return positionTypeaheadPopup;\r\n\r\n function positionTypeaheadPopup(popupScope, popupElement, typeaheadElement) {\r\n if(!popupScope || !popupElement) {\r\n return;\r\n }\r\n\r\n typeaheadElement = typeaheadElement || findTypeahead(popupElement);\r\n\r\n if(!typeaheadElement) {\r\n return;\r\n }\r\n\r\n var observer,\r\n watch,\r\n updatePosition;\r\n\r\n if(popupElement.hasClass('ap-form-control-menu')) {\r\n updatePosition = recalculatePosition;\r\n }\r\n else {\r\n updatePosition = updatePositionAndWidth;\r\n }\r\n\r\n if(MutationObserver){\r\n observer = new MutationObserver(function(mutations){\r\n var popupBecomingVisible = _.some(mutations, function(mutation) {\r\n return ngHideClassRegex.test(mutation.oldValue) && !mutation.target.classList.contains('ng-hide');\r\n });\r\n\r\n if(popupBecomingVisible) {\r\n updatePosition();\r\n }\r\n });\r\n\r\n observer.observe(popupElement[0], { attributes: true, attributeFilter: ['class'], attributeOldValue: true });\r\n }\r\n else{\r\n watch = popupScope.$watch(function(){\r\n return !popupElement.hasClass('ng-hide');\r\n }, function(newVal){\r\n if(newVal){\r\n updatePosition();\r\n }\r\n });\r\n }\r\n\r\n popupScope.$on('$destroy', function(){\r\n if(watch){\r\n watch();\r\n }\r\n\r\n if(observer){\r\n observer.disconnect();\r\n }\r\n });\r\n\r\n function updatePositionAndWidth(){\r\n recalculatePosition();\r\n\r\n popupElement.outerWidth(typeaheadElement.outerWidth());\r\n }\r\n\r\n // This is basically the same recalculatePosition function\r\n // that typeahead internally uses to position the results list correctly.\r\n // I modified it to set the style for left and top manually rather than\r\n // setting a scope variable, but the logic is the same\r\n function recalculatePosition() {\r\n var position = appendedToBody() ? $uibPosition.offset(typeaheadElement) : $uibPosition.position(typeaheadElement);\r\n position.top += typeaheadElement.prop('offsetHeight');\r\n\r\n popupElement.css('left', position.left);\r\n popupElement.css('top', position.top);\r\n }\r\n\r\n function appendedToBody() {\r\n return popupElement.parent().is('body');\r\n }\r\n }\r\n}]);","// typeahead is not easily scrolled through with arrow keys unless if the list allows scrolling\r\n// otherwise, when you arrow through the items and go off the page, then you can't see what is selected\r\n// and the page doesn't scroll properly\r\n// this all comes from how angular-ui-bootstrap handles the keydown events:\r\n// (it expects the parent node to be in a scrollable element, like the body)\r\n// target = popUpEl.find('li')[scope.activeIdx];\r\n// target.parentNode.scrollTop = target.offsetTop;\r\n\r\nangular.module('aprima-core-ui').factory('setTypeaheadPopupHeight', ['findTypeahead', 'debounce', '$parse', '$window', function (findTypeahead, debounce, $parse, $window) {\r\n 'use strict';\r\n\r\n // this is the debounce time that angular-ui-bootstrap uses\r\n var heightDebounceTime = 200;\r\n\r\n // the new attribute I'm defining to allow you to give a max height to search results\r\n // search results will be scrollable themselves (not just the window scrolling)\r\n // default height is 5px less than the height of the screen\r\n var typeaheadPopupMaxHeight = 'ap-typeahead-popup-max-height';\r\n\r\n // to use this attribute you must also add 'ap-typeahead-popup-max-height'\r\n // this attribute will allow you to specify the id of the containing element\r\n // the dropdown will not exceed that container\r\n var typeaheadParent = 'ap-typeahead-popup-parent';\r\n\r\n return setTypeaheadPopupHeight;\r\n\r\n function setTypeaheadPopupHeight(popupScope, popupElement, typeaheadElement) {\r\n if(!popupScope || !popupElement) {\r\n return;\r\n }\r\n \r\n typeaheadElement = typeaheadElement || findTypeahead(popupElement);\r\n if(!typeaheadElement || !typeaheadElement[0] || !typeaheadElement[0].hasAttribute(typeaheadPopupMaxHeight)) {\r\n return;\r\n }\r\n\r\n // evaluate on outer scope\r\n var maxHeight = parseFloat(popupScope.$parent.$parent.$eval(typeaheadElement.attr(typeaheadPopupMaxHeight)));\r\n \r\n popupElement.css('overflow-y', 'auto');\r\n if(maxHeight > 1) {\r\n popupElement.css('max-height', maxHeight + 'px');\r\n return;\r\n }\r\n\r\n var windowSelector = $($window);\r\n var parentContainerElem;\r\n var parentElemId = typeaheadElement.attr(typeaheadParent);\r\n if(parentElemId) {\r\n var id = $parse(parentElemId)(popupScope.$parent);\r\n parentContainerElem = $(document).find('#' + id);\r\n }\r\n updateHeight();\r\n var debouncedUpdateHeight = debounce(heightDebounceTime, updateHeight);\r\n windowSelector.on('resize', debouncedUpdateHeight);\r\n\r\n var parentElement = popupElement.parent()[0];\r\n var observer = new MutationObserver(updateHeight);\r\n observer.observe(parentElement, {attributes: false, childList: true, subtree: true});\r\n\r\n popupScope.$on('$destroy', function(){\r\n windowSelector.off('resize', debouncedUpdateHeight);\r\n observer.disconnect();\r\n });\r\n\r\n function updateHeight() {\r\n var availableHeight;\r\n var top = popupElement.offset().top;\r\n if (parentContainerElem && parentContainerElem.length) {\r\n availableHeight = parentContainerElem.height();\r\n top = top - parentContainerElem.offset().top;\r\n } else {\r\n availableHeight = windowSelector.height();\r\n }\r\n //minus 5 to make sure scroll bars are gone\r\n var updatedHeight = availableHeight - top - 5;\r\n popupElement.css('max-height', updatedHeight + 'px');\r\n }\r\n }\r\n}]);\r\n","// This service will add classes to the popup element for typeahead\r\n// this is normally a
    that has all of the results inside of it\r\n\r\n// it uses the 'ap-typeahead-popup-classes' attribute that I defined\r\n// if this attribute isn't used, then it won't add/change an classes\r\n\r\n(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('typeaheadPopupClass', [\r\n 'findTypeahead',\r\n typeaheadPopupClass,\r\n ]);\r\n\r\n function typeaheadPopupClass(\r\n findTypeahead\r\n ) {\r\n var typeaheadClasses = 'ap-typeahead-popup-classes';\r\n \r\n var service = {\r\n init: init,\r\n };\r\n\r\n return service;\r\n\r\n function init(popupElement, typeaheadElement) {\r\n if(!popupElement) {\r\n return;\r\n }\r\n\r\n typeaheadElement = typeaheadElement || findTypeahead(popupElement);\r\n if(!typeaheadElement) {\r\n return;\r\n }\r\n \r\n var popupClassesValue = typeaheadElement.attr(typeaheadClasses);\r\n if(popupClassesValue) {\r\n popupElement.addClass(popupClassesValue);\r\n }\r\n }\r\n }\r\n\r\n})(window.angular);\r\n","angular.module('aprima-core-ui').constant('uxConstants', {\r\n blurDebounceTime: 200,\r\n //use the same value as in hammer.js, they've mostly likely done the research on the appropriate value.\r\n doubleClickTime: 300,\r\n incrementalSaveTime: 1000,\r\n lazySrcThrottle: 300,\r\n searchDebounceTime: 300,\r\n});\r\n","angular.module('aprima-core-ui').factory('ViewportInfo', ['$document',\r\n function($document){\r\n 'use strict';\r\n\r\n var doc = $document[0];\r\n\r\n function getWidth(){\r\n var pageWidth = Math.max(\r\n Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth),\r\n Math.max(doc.body.offsetWidth, doc.documentElement.offsetWidth),\r\n Math.max(doc.body.clientWidth, doc.documentElement.clientWidth));\r\n\r\n return pageWidth;\r\n }\r\n\r\n function getHeight(){\r\n var pageHeight = Math.max(\r\n Math.max(doc.body.scrollHeight, doc.documentElement.scrollHeight),\r\n Math.max(doc.body.offsetHeight, doc.documentElement.offsetHeight),\r\n Math.max(doc.body.clientHeight, doc.documentElement.clientHeight));\r\n\r\n return pageHeight;\r\n }\r\n\r\n return{\r\n getWidth: getWidth,\r\n getHeight: getHeight,\r\n getWindowWidth: function() {\r\n return window.innerWidth;\r\n },\r\n getWindowHeight: function() {\r\n return window.innerHeight;\r\n }\r\n };\r\n }]);\r\n","(function(angular) {\r\n 'use strict';\r\n\r\n angular.module('aprima-core-ui').factory('WebDocumentHelper', [\r\n '$window',\r\n WebDocumentHelper\r\n ]);\r\n\r\n function WebDocumentHelper(\r\n $window\r\n ) {\r\n return {\r\n openDocumentInSeparateTab: openDocumentInSeparateTab \r\n };\r\n\r\n function openDocumentInSeparateTab(documentGetStaticUrlPromise) {\r\n //Need to open the window directly from click handler to avoid popup blockers.\r\n //Go ahead and open tab in IE even though it probably won't load,\r\n //because other browsers might behave the same way in certain configurations.\r\n\r\n var newWindow = $window.open('');\r\n newWindow.document.write('loading...');\r\n newWindow.document.close();\r\n \r\n documentGetStaticUrlPromise.then(function(url) {\r\n // IE will leave the window/tab open, so clear the loading message.\r\n newWindow.document.write('');\r\n newWindow.document.close();\r\n newWindow.location.href = url;\r\n }).catch(function() {\r\n newWindow.close();\r\n });\r\n }\r\n } \r\n})(angular);\r\n"]}