{"version":3,"sources":["helpers.js","app.js","app.validation.js","app.directives.js","app.filter.js","version.js","api.js","current-user.js","directives.js","date-utils.js","date-input-utils.js","app.service.js","debounce.service.js","formatting.service.js","logger.service.js","request-helper.service.js","response-helper.service.js","user.service.js","moment.js","buttons/bankid-signing-button.component.js","buttons/combo-button.component.js","buttons/show-hide-toggle-button.component.js","calendar/calendar-editable-toggle.component.js","calendar/calendar-event-header.component.js","calendar/calendar-event-select-indicator.component.js","calendar/calendar-event-source-selector-item.component.js","calendar/calendar-event-source-selector.component.js","calendar/calendar-select-mode-toolbar.component.js","calendar/calendar.component.js","calendar/holiday-calendar-event-source.component.js","calendar/holiday-calendar-event.component.js","cases/case-label.component.js","cases/case-status.component.html.js","cases/case-type-icon.component.js","cases/case-type.component.js","comments/comment-list-item.component.js","comments/comment-list.component.js","content/alert-box.component.js","content/qr-code.component.js","dashboard/dashboard-item.component.js","dashboard/paged-data-list-dashboard-item.component.js","datetime/date-time-formatted.component.js","enum/enum-item-list.component.js","enum/enum-item-selector.component.js","enum/enum-item.component.js","filters/date-time-filter.component.js","filters/filter-bar.component.js","filters/filter-toolbar.component.js","filters/filter-value.component.js","filters/filter.component.js","filters/time-period-filter.component.js","form/bank-account-number-form.component.js","form/basic-form.component.js","form/collapsable-fieldset.component.js","form/form-status.component.js","form/input-field-reset-button.component.js","form/input-field.component.js","form/month-input-field.component.js","form/single-item-selector.component.js","form/textarea-field.component.js","grid/tabular-data-grid-column-header.component.js","grid/tabular-data-grid-column.component.js","grid/tabular-data-grid-footer.component.js","grid/tabular-data-grid-header.component.js","grid/tabular-data-grid-item.component.js","grid/tabular-data-grid-row.component.js","grid/tabular-data-grid.component.js","indicators/beta-badge.component.js","indicators/fa-icon.component.js","indicators/progress-indicator.component.js","indicators/progress-step-bar.component.js","indicators/progress-step.component.js","indicators/status-alert.component.js","indicators/wip.component.js","layout/button-group-layout.component.js","layout/toolbar-layout.component.js","list/paged-data-list-pager.component.js","list/paged-data-list-refresh-button.component.js","list/paged-data-list-show-hidden-columns-toggle.component.js","list/paged-data-list-sort-button.component.js","list/paged-data-list.component.js","overlays/dropdown-header.component.js","overlays/dropdown.component.js","printing/print-button.component.js","selectors/dropdown-selector.component.js","user-guide/markdown-user-guide.component.js","users/user-avatar.component.js","users/user-dropdown-menu.component.js","users/user-id-card.component.js","users/user-id.component.js","users/user-status.component.js","system/feature-unavailable.ctrl.html.js","system/not-found.ctrl.html.js","system/unauthorized.ctrl.js","buttons/close-button.directive.js","buttons/edit-copy-delete-buttons.directive.js","buttons/focus-mode-button.directive.js","buttons/link-button.directive.js","buttons/refresh-button.directive.js","buttons/toggle-button.directive.js","content/explanation-icon.directive.js","content/rich-text-block.directive.js","customers/customer-avatar.directive.js","dialogs/modal-dialog.directive.js","filters/active-filter-warning.directive.js","filters/boolean-filter.directive.js","filters/date-time-filter.directive.js","filters/dropdown-filter.directive.js","filters/filter-bar.directive.js","filters/filter-value-list.directive.js","filters/integer-input-filter.directive.js","filters/text-input-filter.directive.js","filters/time-interval-filter.directive.js","form/checkbox-input-field.directive.js","form/checkbox.directive.js","form/customer-avatar-editor.directive.js","form/email-input-field.directive.js","form/file-uploader.directive.js","form/number-input-field.directive.js","form/phone-input-field.directive.js","form/radio-button-input-field.directive.js","form/read-only-text-field.directive.js","form/standard-form.directive.js","form/text-input-field.directive.js","form/user-avatar-editor.directive.js","gfx/coordinare-logo.directive.js","indicators/counter-icon.directive.js","indicators/expand-collapse-indicator.directive.js","indicators/progress-step.directive.js","indicators/toggle-icon.directive.js","indicators/utilization-bar.directive.js","layout/dialog-column-layout.directive.js","layout/field-column-layout.directive.js","layout/field-grid-layout.directive.js","layout/field-row-layout.directive.js","layout/fieldset-column-layout.directive.js","layout/page-column-layout.directive.js","layout/page-section-column-layout.directive.js","layout/portlet.directive.js","layout/side-column-layout.directive.js","lists/list-data-pager.directive.js","lists/no-results.directive.js","lists/paged-data-list-table-col.directive.js","lists/paged-data-list-table-data.directive.js","lists/paged-data-list-table-header.directive.js","lists/paged-data-list-table.directive.js","navigation/scroll-to-top.directive.js","preferences/decimal-time-setting.directive.js","selectors/dropdown-selector.directive.js","selectors/month-selector.directive.js","selectors/year-selector.directive.js","table/list-collapse-toggle.directive.js","table/toggle-show-all-columns.directive.js","users/user-contact-details-menu.directive.js","settings/local-settings.service.js","users/current-user.service.js","users/user-impersonation.service.js","utilities/directive.service.js","utilities/location.service.js","utilities/modal-dialog.service.js","customers/customer.service.js","users/user-avatar-dropdown-menu.component.js","users/user-name-dropdown-menu.component.js","calendar/full-calendar/full-calendar.component.js","cases/whistleblower-reports/whistleblower-report.service.js","cases/whistleblower-reports/whistleblower-report-author.component.js","cases/whistleblower-reports/whistleblower-report-submit-form.component.js","cases/whistleblower-reports/whistleblower-report.component.js","cases/whistleblower-reports/whistleblower-report-header.ctrl.js","cases/whistleblower-reports/whistleblower-report-submit.ctrl.js","cases/whistleblower-reports/whistleblower-report.ctrl.js","cases/whistleblower-reports/comments/whistleblower-report-comment.service.js","cases/whistleblower-reports/comments/whistleblower-report-comment-add-form.component.js","cases/whistleblower-reports/comments/whistleblower-report-comment-author.component.js","cases/whistleblower-reports/comments/whistleblower-report-comment-list-item.component.js","cases/whistleblower-reports/comments/whistleblower-report-comment-list.component.js"],"names":["isString","value","isObject","hasValue","Number","isNaN","hasItems","array","length","refreshArray","existingArray","newArray","log","idPropertyName","itemsToRemove","filter","existingItem","_","find","updatedItem","removedItems","forEach","itemToRemove","push","splice","indexOf","debug","result","index","itemToUpdate","assign","getQueryString","params","includeQueryStringDelimiter","esc","encodeURIComponent","keys","Object","map","k","join","isTranscludeSlotFilled","nodes","i","ii","node","nodeValue","trim","innerHTML","outerHTML","removeTime","date","Date","getFullYear","getMonth","getDate","mergeCustomizer","objValue","srcValue","key","object","source","stack","angular","isUndefined","isArray","isPlainObject","mergeWith","merge","dest","filterObjectKeys","obj","keysToKeep","newObj","trimObjectKeys","let","keysSet","Set","has","datesAreStartAndEndOfMonth","start","end","localStart","parseToLocalDate","localEnd","moment","isSame","startOf","endOf","add","getLocalDate","year","month","day","tz","undefined","toDate","convertToLocalDate","dateString","copyDate","getTime","dateToHHMM","format","dateIsStartOfDay","getHours","getMinutes","getSeconds","datesSpanMultipleDays","dayDiff","Math","floor","datesAreSame","date1","date2","firstCharToLowerCase","str","charAt","toLowerCase","slice","firstCharToUpperCase","toUpperCase","arraysAreEqual","arr1","arr2","generateGUID","replace","c","r","random","toString","convertHexToRGBValues","hex","parseInt","substring","g","b","max","min","getRGBValues","rgb","rgbValues","match","Error","convertHexToRGB","values","darkenRGBValues","percent","darkenHexColor","convertRGBtoRGBA","alpha","rgbValuesToRgbaString","rgbValuesToRgbString","app","module","commonClientControllerTemplateBasePath","entries","ownProps","resArray","Array","factory","$q","logger","getLogger","responseError","rejection","url","config","status","statusText","error","data","warning","reject","$log","exception","cause","isHandled","message","window","appInsights","trackException","$httpProvider","interceptors","publicClientControllerTemplateBasePath","appendToPageTitle","$rootScope","text","title","$routeProvider","$locationProvider","resolves","customRouteProvider","extend","when","path","route","resolve","this","html5Mode","hashPrefix","templateUrl","controller","reloadOnSearch","otherwise","redirectTo","$provide","decorator","$delegate","$window","get","angularTemplatesVersion","$compileProvider","uiSelectConfig","appendToBody","appStatusCheckInterval","stopAppStatusCheck","$interval","cancel","run","$rootElement","appService","initSupportedBrowserFeatures","breakpoints","items","current","registerBreakpoints","isFeatureAvailable","bankIDTransactionInProgress","fullscreenMode","attr","appVersion","getLocalAppVersion","setDefault","getSystemTypes","then","systemTypes","systemTypeKey","$on","$watch","user","checkAppStatus","e","$$route","pageWidth","icons","cases","list","appInitialized","directive","restrict","require","link","scope","elem","attrs","ngClick","href","on","preventDefault","defaults","transformResponse","element","bind","stopPropagation","ngModel","$parsers","val","parsedVal","isNumber","$formatters","parseFloat","$setPristine","update","datetimepicker","$setViewValue","$viewValue","init","onblur","$apply","$observe","options","$eval","time","up","down","$timeout","mindate","maxdate","$scope","fillValues","isMoment","updateModel","$render","locale","picker","showClear","useCurrent","ignoreReadonly","pickMonth","pickTime","toggleSelector","toggle","minDate","maxDate","isAfter","isBefore","elm","ngModelCtrl","expressionToCall","oldValue","type","changeOnBlur","firstInvalid","querySelector","scrollTo","offsetTop","focus","$last","locationService","parentId","parent","id","findIndex","children","o","parents","setQueryParam","removeQueryParam","compile","tElm","tAttrs","uiIndeterminate","newVal","indeterminate","noop","msg","ngConfirmClick","clickAction","confirmedClick","event","confirm","template","el","label","popoverLabel","$","popover","trigger","html","container","content","popoverHtml","placement","popoverPlacement","which","keyCode","enterKey","target","blur","$location","location","newPath","split","addClass","removeClass","terminal","$element","$attr","ctrl","transclude","childScope","transcludedContent","clone","newScope","replaceWith","remove","$destroy","priority","debounce","unbind","ngDebounce","$animate","enabled","$select","searchInput","querySelectorAll","$emit","off","name","focusOn","$broadcast","validateSameDay","dateBegin","dateEnd","beginDate","endDate","isValid","DateUtils","sameDay","$setValidity","$modelValue","tagName","originalMinValidator","$validators","modelValue","viewValue","endTimeInput","component","bindings","condition","$transclude","refreshContent","destroyChildScope","empty","append","$onChanges","changes","isFirstChange","currentValue","previousValue","$onInit","$onDestroy","fromNow","isDuration","FormattingService","durationString","decimalTime","skipUnit","timespan","formatHM","duration","shortFormat","abs","startsWith","formatDuration","startDate","formattingString","durationBetween","dayIndex","$sce","trustAsHtml","marked","parse","take","reverse","includeVat","number","toLocaleString","style","currency","maximumFractionDigits","minimumFractionDigits","ssn","parts","local","diff","mDate","hours","minutes","seconds","milliseconds","subtract","toEndDateStringFilter","toDateSpanStringFilter","timeInterval","intervalDates","isBetween","toJSON","numWeeks","timespan1","timespan2","asSeconds","totalSeconds","targetLength","String","padStart","asMonths","formatString","precision","decimalSeparator","monthNumber","monthIndex","timespanString","utc","ceil","dateStart","twix","hourFormat","implicitYear","startMoment","endMoment","endMomentIsStartOfDay","hideTime","hideYear","shift","hideDate","durationEnd","durationEndFormatted","descriptions","deviationStart","durationStartFormatted","durationStart","asMilliseconds","deviationEnd","clientId","client","userHasClientAccess","fullName","shiftStatusHelper","getStatusFlags","getInternalStatuses","flag","enums","scheduleStatus","hospitalVisit","temporaryExtension","temporaryExtensionLevel","initials","numInitials","nameParts","staff","userHasStaffAccess","person","stringBuilder","telephone","boolString","collection","predicate","some","item","propertyName","sumBy","arrayProperty","timeSpanProperty","getAbsenceStatusItem","sickLeave","sickLeavePeriodStatus","getSickLeavePeriodStatusItem","inputObj","objPropKeys","prop","attributes","novalidate","$set","form","$valid","validateSubmit","$submitted","$$phase","control","e1","e2","passwordMatch","n","matchString","valid","passwordValidate","numberMatches","letterMatches","unshift","minValidator","v","ngMin","maxValidator","ngMax","Infinity","$error","required","Personnummer","FORMAT_MODERN","requireValue","requireIf","isBoolean","isNull","isFunction","Api","constructor","api","$http","responseHelper","post","endpointName","pathParams","queryParams","precondition","_request","method","put","delete","endpointUrl","_prepareEndpointUrl","headers","Content-Type","response","catch","_handleError","routes","endpointRoutes","_findUnreplacedParams","unreplacedParams","paramNames","simplifiedParams","paramRegex","exec","fullParam","paramName","every","param","includes","processedEndpoint","_replacePathParams","endpoint","errorMessage","getException","info","reload","CurrentUser","serverData","rootScope","clientScheduleAccess","ClientScheduleAccess","hasClientScheduleReadAccess","wholePeriod","userHasClientScheduleAdminAccess","read","period","contains","intersects","now","future","hasClientScheduleModifyAccess","modify","ClientScheduleAccessType","TimeInterval","isActive","isFuture","resize","css","height","overflow-y","rows","scrollHeight","collapsed","getMonthDateInterval","isSameDate","firstDate","secondDate","toDateString","subtractOneDay","isStartOfDay","getMilliseconds","addOneDay","newDate","setDate","DateInputUtils","minMaxFormat","getMinDateString","exclusive","getMaxDateString","serviceId","requestHelper","detectUtils","localAppVersion","newAppVersionDetected","checkingAppStatus","apis","clientApiAccessControlMaps","baseApiUrl","setCurrentBreakpoint","bp","getFeature","featureSystemName","productFeatures","logout","interval","isDefined","setOffline","offline","success","initApis","getApi","getClientApiAccessControlMap","apiName","apiAccessControlMap","clientApiAccessControlMap","clientApiAccessEndpoint","copy","endpointAccess","getSystemType","version","action","mediaQuery","mediaQueryList","matchMedia","matches","addListener","mq","productFeature","accessible","ensureFeatureIsAvailable","setPath","isIOS","inputTypesForWhichShowPickerIsUnsupportedOnIOS","browserFeatures","inputs","inputShowPicker","input","document","createElement","setAttribute","showPicker","timeouts","func","delay","formatHMNonZero","totalHours","asHours","formattedDuration","consoleDebug","service","showToast","toastActions","hideAfter","logIt","moduleId","l","toastType","m","warn","Messenger","extraClasses","theme","RegExp","actions","showCloseButton","getRequestUrl","baseUrl","handleSuccess","handleError","resp","defaultMessage","exceptionMessage","innerException","curMsg","responseText","JSON","responseJSON","modelState","errors","isUsernameAvailable","username","getUserIdentity","userId","getUsername","getTwoFactorAuthEnabled","setTwoFactorAuthEnabled","fn","onInit","onSignClicked","onSign","onSigningInProgress","onSigned","onCancelled","onError","orderRef","ngDisabled","bankIDService","defaultOptions","state","busy","signOnSameDevice","signingOrderRef","signText","cancelSignText","signOnOtherDeviceText","small","setBusy","handleSigningInProgress","signResponse","autoStartToken","handleSignResponse","handleSignSuccess","handleSignProgress","qrCode","$dropdown","opening","open","toggleDropdown","close","reset","stopCollectingTransactionStatus","$bankIdSigningButton","onInitDropdown","dropdownCtrl","onSignedClicked","onSameDevice","sign","signOnOtherDevice","cancelTransaction","startBankIDClient","primary","secondary","primarySlotIsFilled","isSlotFilled","secondarySlotIsFilled","color","dropdown","icon","openIcon","showIndicator","styleAsButton","cssClasses","btn","dropdownOptions","combo-button-trigger","closeOnClick","disableDropdown","onChanged","minimize","setEditable","editable","showTimeStatus","timeStatus","$calendar","visibility","eventRendered","multiDay","clicked","selectEvent","eventSource","activeEventSource","onSelected","onVisibilityChanged","active","select","callbacks","visibilityChanged","visible","eventSources","onActiveEventSourceChanged","onEventSourceVisibilityChanged","updateNumVisibleSources","numSources","numVisibleSources","s","calendarEventSourceSelectorCtrl","eventSourceMap","initDropdown","eventSourceSelected","eventSourceVisibilityChanged","onSelectAllChanged","selectAll","setSelectMode","selectMode","selectAllChanged","componentId","onDatesSet","onFiltersLoaded","onFiltersChanged","onFilterBarInit","onSetEditable","onLeftColumnToggled","onRightColumnToggled","onRefresh","firstToolbar","secondToolbar","readOnlyToolbar","leftColumn","leftColumnHeader","rightColumn","rightColumnHeader","localSettingsService","leftColumnSlotFilled","firstToolbarSlotFilled","secondToolbarSlotFilled","readOnlyToolbarSlotFilled","eventSourcesSlotFilled","rightColumnSlotFilled","leftColumnHeaderSlotFilled","rightColumnHeaderSlotFilled","calenderId","calenderFilterPrefix","filterBar","dropdownFilterSet","displayLeftColumnFromBp","displayRightColumnFromBp","$calendarEventSourceSelector","timePeriod","selectedEventCount","hasSelectedEvents","hasMultipleSelectedEvents","selectedEvents","selectedEventIds","currentView","clickedDateInfo","clickedEvent","clickedEventTarget","rightClickedEvent","rightClickedEventTarget","filterIdPrefix","filterQueryStringParams","activeFilters","filterIsActive","filterObject","dataLoaded","numCurrentEventSources","numTotalEventSources","numVisibleEventSources","allEventSourcesLoaded","activeEventSourceIndex","renderLeftColumn","renderRightColumn","collapseLeftColumn","getBool","collapseRightColumn","rightColumnCollapsed","leftColumnCollapsed","$goToDateForm","eventSourceList","$fullCalendar","filters","calendarOptions","$postLink","eventSourcesSlot","getBooleanQueryParam","initialView","getQueryParam","getValue","initialDate","selectable","updateSideColumnState","isEditable","setEventDates","eventId","setEventEditable","updateEvent","updateEvents","events","addEventSource","sourceCopy","successCallback","failureCallback","getFilterParams","sortBy","setActiveEventSource","removeEventSource","sourceId","getEventSourceById","loadEventSourceFilters","setEventSourceVisibility","addEvent","removeEvent","removeEvents","eventIds","openDropdown","targetElement","menuElement","setTriggerElement","setFilterValue","filterId","f","$filterBar","filterChanged","refresh","refreshVisibility","currentBreakPoint","eventSourceId","filterParams","setFilters","renderLeftColumnChanged","renderRightColumnChanged","broadcastEvent","args","initGoToDateForm","formCtrl","initCalendarEventSourceSelector","activeEventSourceChanged","editEvent","targetElem","goToDate","toggleLeftColumn","setValue","toggleRightColumn","updateSize","leftColumnExpanded","rightColumnExpanded","filterBarInitialized","filterValuesInitialized","es","filtersChanged","filterState","isEqual","firstChange","calendarInitialized","calendarCtrl","calendarDatesSet","dates","view","currentStart","toISOString","calendarViewSet","$calendarViewSelector","setOption","calendarLoading","isLoading","orphanedScopes","selectedEventsChanged","eventList","hasSingleSelectedEvent","selectedEventDuration","reduce","total","eventsSelected","eventsDeselected","selectModeChanged","enable","editableChanged","setSelectable","setSelectAll","calendarViewSelectorInit","dropdownSelectorCtrl","calendarViewSelectorOptionChanged","changeView","removeSelectedEvents","removed","selectAllEvents","resetSelectedEvents","CalendarEventSource","$id","readOnly","eventTemplates","default","className","case","setupOptions","colorCssClass","abbreviation","defaultsDeep","iconOnly","size","sizeCssClass","textCssClass","iconHtml","codeName","userAvatar","userName","replyForm","editForm","replies","comment","userAccess","onRemove","hasValueFilter","statusSlotFilled","replyFormSlotFilled","editFormSlotFilled","repliesSlotFilled","repliesCollapsed","setDeletedStatus","deletedAt","deleted","toolbarDropdownOptions","styleAsSquareButton","$doCheck","header","addFormUserAvatar","addForm","body","onLoadData","onLoadFilters","onLoadTypeDeclaration","onDataLoaded","$document","headerSlotFilled","addFormSlotFilled","bodySlotFilled","pagedDataList","listSettingsPrefix","defaultPageSize","pageSizes","threadedView","addFormElementId","busyText","pagedDataListCtrl","loadFilters","loadData","threaded","fullReload","results","onPagedDataListInit","listCtrl","threadedViewChanged","scrollToElement","elementId","getElementById","angularElement","scrollToAddForm","iconAlignment","fullWidth","collapsable","backgroundColor","collapse","showIcon","iconCssClass","alertCssClass","toggleCollapse","width","colorDark","colorLight","clear","makeCode","QRCode","correctLevel","CorrectLevel","H","titleText","explanationText","dashboardItemCtrl","preRenderBody","manualFirstOpen","manualClose","formattedDate","relative","dateCss","cssClass","fromDay","toDay","numResults","dateTextLabel","onDashboardItemInit","$dashboardItem","onDropdownInit","onOpening","setNumResults","setActiveFilters","fromNowFilter","toDateTimeStringFilter","toDateStringFilter","isEffectiveDateFilter","dateOnly","inclusiveEndDate","momentDate","daysDiff","formattedDateTime","presentedDateString","dateHasPassed","emptySlotIsFilled","bindingRefreshTrigger","compact","horizontal","$form","itemType","ngRequired","editMode","placeholder","indicateActiveState","selectableItemLimit","updateSelectedItem","selectCtrl","model","selectedItemId","selectedIndex","selectedItem","activeIndex","selectableItems","itemId","previousItem","refreshItems","searchWords","selectIsOpen","searchText","searchWord","selected","dateFilter","previousDayFilter","momentFilter","enablePlaceholder","handleFilterValueUpdate","handleLinkedFilter","linkedFilter","dateTimeType","explanation","$watchCollection","oldVal","filtername","shortName","description","onDateChanged","toolbar1","toolbar2","onFilterValuesInitialized","hideToolbar1","hideToolbar2","disableStoredFilters","hasItemsFilter","defaultSlotFilled","toolbar1SlotFilled","toolbar2SlotFilled","transclusionSlotsFilled","filterCtrls","storedFilterSettingsInitialized","initializeFilterValues","restoreFilterOptions","storedFilters","filterQueryParamValue","isQueryParamValueDefined","setDefaultOptions","filterFormIsValid","handleCurrentBreakpoint","currentBreakpoint","dropdownFilters","visibleFilters","mandatory","enableFilterDropdown","renderPrimaryFiltersInline","renderSecondaryFiltersInline","secondaryFilters","previousFilters","previousFilter","currentFilter","hasMandatoryFilters","renderMandatoryFiltersInline","mandatoryFilterFormCtrl","mandatoryFilters","filterHasValue","hasPrimaryFilters","primaryFilterFormCtrl","hasSecondaryFilters","secondaryFilterFormCtrl","dropdownFilterFormCtrl","valueTypeName","filterHasNonDefaultValue","defaultValue","isActiveFilter","filterIds","storedFilter","setQueryStringParam","sf","clearQueryStringParams","maxColumns","showFiltersStorageKey","getPath","filterStorageKey","collapsableFilterSectionExpanded","hasFilters","hideIfOnlyOneOption","hasVisibleFilters","mandatoryNonButtonFilters","showAsButtons","hasMandatoryNonButtonFilters","primaryFilters","buttonFilters","showAllFilterOptions","allFiltersArePrimary","registerFilterCtrl","filterCtrl","setFilterIdsExcludedFromActiveFiltersWithNonDefaultValue","filterIdsExcludedFromActiveFiltersWithNonDefaultValue","filterDropdown","activeFilterCount","resetFilters","mandatoryFilterFormInit","primaryFilterFormInit","secondaryFilterFormInit","dropdownFilterFormInit","updatedFilterIndex","changedFilter","currentFiltersState","filterIndex","linkedFilterId","lf","activeFiltersWithNonDefaultValues","activeSecondaryFiltersWithNonDefaultValues","selectedOption","activeFilterObj","storedFiltersLoaded","filtersStored","storedFiltersCleared","toggleCollapsableFilterSection","buttonFilterClicked","disabled","onStoredFiltersLoaded","onFiltersStored","onStoredFiltersCleared","onResetFilters","filterTypesNotStored","5","updateState","storedFilterSetEqualsActive","getStorableActiveFilters","storableActiveFilterSetEqualsDefault","getActiveFilterSetEqualsDefault","getFiltersWithDefaultValues","activeFilterSetEqualsDefault","showSave","showRemoveSaved","hasStoredFilters","showRestoreFilters","activeSet","defaultSet","activeFilterMap","filtersWithDefaultValuesMap","hasDefaultFilters","onFilterChanged","storeFilters","removeStoredFilters","localStorage","removeItem","genericArgumentsStartIndex","optionModelTypeName","dropdownType","filterBarCtrl","filterValue","defaultToCurrentDate","loadFilterValue","valueParts","filterFromDate","filterToDate","setDates","updateCustomPeriod","updateBasedOnMonth","startOfMonth","endOfMonth","setMonth","from","to","fromDateMax","toDateMin","fromDate","updateFromDateMax","updateToDateMin","updateFilterValue","customPeriod","updatePending","monthPickerCtrl","ios","allowCustomPeriod","resetCustomPeriod","formInit","onReset","monthPickerInit","showMonthPicker","nativeInputShowPickerSupported","inputElement","monthChanged","fromChanged","toChanged","customizePeriod","confirmCustomPeriod","showDropdown","dropdownClosed","bankAccountClearingNumber","bankAccountNumber","bankName","onSubmitted","cronaApi","formOptions","submit","buttonText","payrollSystemIntegrationEnabled","payrollSystemIntegration","available","customer","hasCronaIntegration","bankDetailsAreMandatory","busyState","validationResult","propertyUpdated","propName","modelDefaults","hideToolbar","hideSubmit","disableSubmit","disableDefaultInteraction","hideCancel","headerTitleText","onSubmit","onLoadModel","onUpdateModel","onClose","enableRefresh","parentFormCtrl","headerStatus","headerToolbar","toolbar","headerSlotIsFilled","headerStatusSlotIsFilled","headerToolbarSlotIsFilled","toolbarSlotIsFilled","hasParentForm","formStatusHasItems","closeDropdownAfterSubmit","fullResetAfterSubmit","resetDefaultsAfterSubmit","btn-green","confirmationText","loadModel","fullResetAfterClose","resetDefaultsAfterClose","disableAutocomplete","autoSavingForm","loadedOnInit","modelLoaded","setModelDefaults","manualOpen","updateDropdown","onOpen","autocomplete","promises","all","resetModel","$setUntouched","onHeaderClose","updateMenuPosition","collapsableFieldsetCtrl","titleCssClasses","onToggled","borders","padding","showDescription","tooltipPlacement","static","updateCssClasses","nested","updateFormFieldsStatus","formFieldIds","formFields","formFieldsCtrls","formFieldsAreRequired","formFieldCtrl","formFieldsHaveRequiredError","formFieldId","formFieldsHaveOtherErrors","titleSlotIsFilled","toggleCollapsedState","registerFormFieldCtrl","formFieldCtrlUpdated","unregisterFormFieldCtrl","hasRequiredItems","hasInvalidItems","requiredFieldList","trackNestedForms","invalidFieldList","registerErrorItem","errorItem","dictionary","nestedFormItemKeys","fieldId","$name","nestedFormErrorItem","hasOwnProperty","subItemKey","registerElement","labelText","associatedLabels","queryId","formElement","$$element","labels","textContent","errorCounts","$invalid","errorCategory","newValue","invalidFields","requiredFields","requiredItem","invalidItem","ngRequiredCtrl","ngValue","ngName","ngModelIndeterminate","selectableOptions","matchModel","matchModelValidationMessage","ngReadonly","ngStep","minlength","maxlength","pattern","focusEvent","defaultText","requiredMessage","disabledReason","readOnlyMode","onSave","updateMaxBasedOnCurrentTime","typeInitialized","enableSaveOnEnter","nativeInputTypeSupported","saveButton","insertDefaultTextButton","copyDefaultTextButton","smallButtons","selectOnFocus","endTime","wrap","statusAlerts","password","disableValidation","datetime","allowFutureDates","tooltip","radio","verticalLayout","grid","gridBp","gridColumns","checkbox","disabledTooltipDelay","fallback","minimal","errorMessages","hasFocus","focusedElement","userIsTyping","userSelectedValue","validationTooltip","disabledTooltip","enableMarkdownPreview","defaultsContraints","minYear","maxYear","restoreFocusWhenRenabled","fallbackModels","setupType","setupModel","updateCheckboxCssClasses","updateRadioCssClasses","save","changed","email","$ctrl","usernameAvailable","week","updateValidationTooltip","previouslyFocusedElement","formDisabled","lengthOfCurrentInputValue","setSelectionRange","debounceTimeout","cancelDebounceTimeout","outputValue","prepareOutputValue","updateSaveButtonState","onChangeDebounced","onFocus","onBlur","modelHasChanged","onKeydown","showSaveButton","enableMarkdownPreviewChanged","setMaxBasedOnCurrentTime","setHours","setMinutes","setSeconds","setMilliseconds","updateTimeIfEndTime","hour","minute","currentModel","currentModelType","preparedValue","radioOptions","verticalRadioOptionLayout","gridLayout","text-no-wrap","w-spacing-y-05","w-spacing-x-4","checkboxOptions","verticalCheckboxOptionLayout","directiveId","selectableItem","selectedItemReadOnly","typeDeclaration","onLoad","onRemoved","onGroup","onFilterGroups","standardItems","toolbarSlotFilled","enableGrouping","prepareSelectableItems","itemSet","shouldPreselectSingleItem","preselectSingleItem","ae","refreshing","isGrouped","typeInfo","group","filterGroups","groups","originalValue","insertPlaceholderText","$dataGrid","$dataGridHeader","visibleFromBp","contentsVisibleFromBp","showToolbar","disableForcedVisibility","updateVisibilityFromBpCssClasses","currentBp","previousBp","applyToElement","forceVisibility","previousVisibleFromBpCssClass","getVisibleFromBpCssClass","currentVisibleFromBpCssClass","column","breakpoint","updateVisibility","contentCssClasses","toggleClass","applyColumnProperties","justify","showExplanation","getColumn","addedColumn","updatedColumn","addColumnHeader","initialized","hasExplanation","displayName","widthBreakpoints","currentWidth","addColumn","updateColumnVisibility","sortable","updateColumn","getWidth","widthBreakpoint","_columnWidths","setColumnWidths","columnWidths","getCurrentColumnWidths","dataGrid","columnHeaders","columnWidthsUpdated","visibleColumnHeaders","columnHeader","dataGridCtrl","overflowEllipsis","columns","controllerAs","debounceService","columnsSlotIsFilled","rowsSlotIsFilled","columnList","visibleColumns","columnWidthBreakpoints","currentColumnWidths","setColumnVisibility","updateVisibleColumns","updateColumnWidths","updatedColumnWidths","sortByColumn","getVisibleColumns","visibleColumnsChanged","normalizeWidth","square","styles","overlay","overlayBg","spinnerDelay","spinnerCssClasses","hideOverlayedContent","showSpinner","overlayedContentOpacity","textOverlay","updateOverlayedContentVisibility","overlaybg","hasText","steps","progress","currentStepIndex","step","statusDescription","statusDate","statusMessages","horizontalFromBreakpoint","breakpointListener","insideDropdown","stepVisibilityOptions","stepIndex","isEmptyFilter","subSteps","bar","iconLayersObj","inProgress","actionRequired","faTransform","completed","waiting","in-progress","dropdownCssClasses","iconLayers","iconTextLayer","mainStepSize","subStepSize","statusCodeName","subStatusCodeNames","progressStepStatuses","subStatuses","subStatus","progressStepSubStatuses","subStatusCodeName","stepNumber","font-weight","isCurrentStep","tooltipContent","textCssClasses","large","dense","align","pageIndex","pageSize","numPageResults","totalNumResults","onPageChanged","onPageSizeChanged","pages","listId","totalNumPages","maxPageSize","itemsLabelSingular","itemsLabelPlural","storedPageSize","isValidPageSize","pageChanged","pageSizeStorageKey","validDefaultPageSize","tempStoredPageSizeTmp","getInt","range","previousPage","nextPage","pageSizeChanged","setItem","$list","sortableColumns","onSort","columnPropertyName","resetSorting","noResults","bodyToolbar","onCountResults","onCheckLastItemUpdated","onResultsCounted","onLastItemUpdatedChecked","onBreakpointChanged","onColumnsUpdated","apiBaseUrl","disableDataLoading","minimizeHeaders","showHeader","isDefinedAndEmptyFilter","titleSlotFilled","noResultsSlotFilled","bodyToolbarSlotFilled","noResultsMessageWhenEmpty","sortButton","refreshButton","hiddenColumnsToggleButton","hideTitle","responsiveness","trackCurrentBreakpoint","updateColumnInfo","columnsById","sorted","sortByColumns","columnsSortable","columnStats","numColumns","numVisibleColumns","columnVisibilityAffectedBelowBp","forcedVisibilityDisabled","getApiSupportedMethods","supportedMethods","hasSupportedMethods","isBusy","pagerOptions","baseStorageKey","sortingStorageKey","dataIsEmpty","pagerOptionsInitialized","setupPagerTypeOptions","setApiBaseUrl","removeValue","forceColumnVisibility","toggleForcedColumnVisibility","resultCount","displayNamePlural","displayNameDefinite","getListRequestParams","sortByParams","requestParams","skip","isInteger","filteringParams","dateParams","countResults","listRequestQueryString","count","Promise","checkLastItemUpdated","lastItemUpdatedAt","dataIsDefinedAndEmpty","filterOptionResultCounts","optionResultCounts","filterOption","filterOptionResultCount","optionResultCountsAllZero","optionResultCountsSomeZero","filterOptionSecondaryResultCounts","secondaryOptionResultCounts","secondaryOptionResultCountsAllZero","secondaryOptionResultCountsSomeZero","queryStringParams","disable","statusSlotIsFilled","titleSlot","statusSlot","toolbarSlot","triggerDisabled","onOpened","onClosed","customTrigger","subDropdowns","dropdownTriggerId","dropdownContainerId","dropdownId","openedMenuElement","dropdownContainerElement","renderBody","renderBodyContent","triggerCssClasses","menuCssClasses","dropdownMenuCssClasses","closeOthersOnOpen","firstOpenDelay","removeBodyOnClose","external","externalElementId","externalElement","unpackFromBreakpointAndUp","defaultState","unpacked","placeOpenedMenuElement","windowInnerHeight","scrollbarOffsetTop","dropdownWidth","dropdownHeight","triggerOffset","triggerWidth","triggerHeight","triggerTopOffset","triggerLeftOffset","triggerIndicator","triggerIndicatorWidth","triggerIndicatorHeight","triggerPosAdjustmentX","triggerDropdownMargin","dropdownTopOffset","dropdownCss","fitsAboveTrigger","fitsBelowTrigger","fitsToTheLeftOfTrigger","fitsToTheRightOfTrigger","triggerPosition","triggerPositionLeft","triggerPositionRight","triggerIndicatorCss","triggerIndicatorWidthHeightDifference","triggerElement","windowInnerWidth","innerWidth","innerHeight","scrollTop","offset","dropdownWidthWithMargin","outerWidth","dropdownMargin","outerHeight","round","top","triggerBottomOffset","left","triggerRightOffset","dropdownBottomOffset","dropdownLeftOffset","dropdownRightOffset","display","position","transform","unpack","documentClickEventHandler","hasClass","canClose","windowResizeEventHandler","elementIsOrContainsClickedElement","clickedElement","is","sd","logDebug","callingDropdownId","currentScope","targetScope","closeParentDropdowns","next","currentTarget","detach","hide","openPrintDialog","print","defaultOptionId","onOptionChanged","menuDirection","hideSelectedOptionText","persistSelected","queryParamName","localStorageKey","hideIcon","menuItem","minimizeBelowBp","updateTooltip","currentOption","getOptionById","vt","updateQueryString","storeCurrentOption","optionId","btn-sm","menu-item","storedOptionId","dropdownInit","viewType","previousOption","option","sampleMarkdown","fullNameInitialsFilter","showStatus","containerWidth","containerHeight","statusTooltip","showInactivationStatus","showConfidentialStatus","statusIconShrinkFactor","statusIconGrowFactor","userColorHex","confidential","dateInactivated","statuses","statusIconOffsetFactor","fontSize","avatarOnly","avatarOptions","linkToProfile","showDetailedStatus","showSecondaryId","hideId","highlightText","userIdStatus","subTitle","staffProfileUrlFilter","clientProfileUrlFilter","userIdStatusSlotFilled","subTitleSlotFilled","rolesNames","spacingCssClasses","shrinkable","roles","show","cssStyle","badge","employmentId","externalId","emailIndication","hideSubTitle","showUserIdStatus","fullAccess","showEmploymentIds","showRoles","showExternalId","gridCssClasses","activeGridCssClasses","profileUrl","userType","role","employments","showSecondRow","smallerText","showIdCell","revealFullId","currentUserService","redirectToStartView","redirectUserToStartView","back","history","directiveService","optionsParam","initializeObjParam","edit","order","editItem","copyItem","colorParam","borderParam","containerCssClass","btnCssClass","trueIcon","falseIcon","layeredTrueIcon","layeredFalseIcon","trueText","falseText","trueTooltip","falseTooltip","disableTooltip","iconText","iconTextCssClass","iconTextTransform","anchor","iconBtn","externalToggle","toggleState","iconParam","transcluding","modalDialogService","onOk","onCancel","closeModal","enableReset","headerText","onChange","resetFilter","dateModel","onPropertyChanged","componentType","onItemSelected","$event","ngChange","ctrls","onClicked","click","change","CustomerAdminService","avatarEditorId","uploadUrl","fileUploaderOptions","dropZoneId","onUploadComplete","logoImageUrl","selectImage","uploaderId","removeImage","removeLogo","uploaderParamName","maxNumberOfFiles","maxFileSize","messages","acceptFileTypes","uploadOptions","minFileSize","dropZone","pasteZone","dataType","autoUpload","$this","process","fileupload","done","fail","alert","files","formData","ngPattern","updateCurrentUser","profileImageUrl","apiEndpointUrl","baseIconParam","baseIcon","expand","finished","highlighted","currentPercentage","maxValue","tooltipTemplate","currentValueSlotFilled","showText","printColumns","allowWideColumns","alignItems","twoColumnBreakpoint","threeColumnBreakpoint","fourColumnBreakpoint","sideColumn","mainColumn","sideColumnFilled","mainColumnFilled","pageSizeParam","pageSelected","pageSizeSelected","onUpdate","noResultsTextParam","noResultsFilteredTextParam","isToolbarSlotFilled","noResultsText","noResultsFilteredText","widths","minWidth","fillWidth","tElement","pagedDataListTableCtrl","setupVisibility","columnIndex","force","columnId","cssClassesParam","alignRight","disableForcedVisability","parentTableCtrl","$anchorScroll","hashParam","hash","goToTop","setHash","settings","$routeParams","menuDirectionParam","persistSelectedOption","currentOptionParam","eventPrefix","initialize","optionsParamSet","currentOptionParamSet","emitEvent","eventName","arg1","arg2","fullEventName","prevVal","storageKey","reportingMonth","valueOf","getItem","limitParam","limit","localValue","console","int","stringify","appApi","legacyClientService","accessService","userPromise","getUser","forceUpdate","defer","Chainer","initSystemTypes","initSystemData","initSystemMetaData","initCurrentUser","promise","sort","a","localeCompare","byCodeName","byCodeNameLowerCase","systemData","systemDataKey","municipalities","externalOrganizations","org","typeId","systemMetaData","systemMetaDataKey","hasClientAccess","userHasBasicClientAccess","hasBasicClientAccess","userHasClientScheduleAccess","hasStaffAccess","userHasReportingAccess","hasReportingAccess","isSysowner","userIsStaff","userIsClient","userIsAssistant","userHasRole","userIsAssistantOnly","getRoleId","userIsWorkleader","userIsWorkleaderOrAbove","isAdministrator","userIsAdministrator","userIsSysadmin","userHasSideNavAccess","updateCurrentUserClients","clients","currentClient","setCurrent","updateImpersonationStatus","hasDashboardAccess","hasActiveLegalRepresentativeRelations","newClientTimeReportsBeta","getByCurrentUser","isImpersonating","impersonating","__","getEmail","updateStaff","changePassword","changeUsername","changeEmail","getUsers","customerId","impersonateUser","$parse","attrName","callback","getHostUrl","protocol","host","absUrl","port","search","getUrl","setUrl","getAbsoluteUrl","stripQueryString","queryStringIndex","lastIndexOf","getHost","getAbsolutePath","$$path","getHash","openModal","modal","backdrop","getCustomer","customerGuid","onLoading","onSelectedEventsChanged","onEventsSelected","onEventsDeselected","onViewSet","onEditableChanged","onSelectModeChanged","$compile","toHoursMinutesFilter","views","subIcon","defaultDayView","defaultWeekView","calendar","calendarElement","firstChild","temporaryEvents","selectedClass","selectedEventsGroupId","eventScopes","eventElements","eventIdsPendingMount","eventsIdsPendingRender","multiDayEventIdsPendingRender","eventRightClickedEventHandlers","listView","yearView","debugState","numCreatedScopes","numRemovedScopes","numVisibleEvents","defaultEventTemplate","today","weekText","weekTextLong","allDayContent","noEventsContent","moreLinkContent","arg","num","firstDay","weekNumbers","eventResizableFromStart","dayMaxEvents","nowIndicator","selectMirror","navLinks","eventDisplay","selectMinDistance","multiMonthMaxColumns","slotEventOverlap","lazyFetching","forceEventDuration","allDayMaintainDuration","viewClassNames","viewWillUnmount","viewDidMount","datesSet","loading","eventSourceFailure","eventsSet","eventChange","eventDataTransform","eventClassNames","eventContent","eventDidMount","eventWillUnmount","eventClick","eventResize","eventResizeStop","eventDragStart","eventOverlap","eventDragStop","eventDrop","dateClick","navLinkDayClick","navLinkWeekClick","selectAllow","functionToWrap","that","$root","apply","arguments","FullCalendar","Calendar","render","isValidView","removeTemporaryEventsTimeoutPromise","destroy","removeEventScope","updateEditableEvents","prev","gotoDate","getEventByExternalId","extendedProps","removedEvents","batchRendering","removedEvent","updatedEvent","calendarEvent","getEventById","updatedProperties","getUpdatedProperties","updatedEventDataItems","originalGroupId","groupId","groupIdReset","updatedEventDataItem","eventInfo","resetEventGroup","setEventGroup","fullCalendarEventId","FullCalendarEvent","getInternalEventId","addSelectedEvent","addSelectedEvents","getEvents","isEventSelectable","refetch","refetchEvents","viewId","classList","errorObj","dateInfo","currentEnd","eventData","classNames","eventElementId","eventIsResizing","updatedProps","eventProps","activeStart","activeEnd","_instance","instanceId","defId","startTime","performance","requireEventId","isResizing","updatedEventViewModel","createEventViewModel","timestamp","eventScopeId","$new","eventTemplate","hasBgPattern","domNodes","childElement","getViewState","dotEl","getElementsByClassName","borderColor","appendChild","eventRightClicked","executeCallbackOnEventSourceWithId","eventStart","eventEnd","addEventListener","countScopes","jsEvent","ctrlKey","getEventsById","isAltKeyPressed","eventSourceHasCallback","draggedEvent","selectedEvent","addTemporaryEvent","stillEvent","movingEvent","overlap","executeCallbackOnActiveEventSource","cleanupOrphanedEventScopes","currentEventIds","eid","orphanedEventId","hasTemporaryEvents","removeTemporaryEvents","executeRemovedEventScopeWorkaround","eventDropInfo","droppedEvents","relatedEvents","relatedEvent","executeEventCallbackByEventSource","revert","createdEventCopies","eventSourceResult","eventCopy","eventResizeInfo","resizedEvents","changeInfo","eventsInSelection","unselect","createdEvent","allDay","dayEl","selectInfo","eventElement","removeEventListener","eventScope","scopeId","FullCalendarEventViewModel","calendarState","allday","updatedPropName","setAllDay","updatedPropValue","setStart","setEnd","updatedExtendedPropValue","updatedExtendedPropName","setExtendedProp","setEventProp","updatedTopLevelProperties","setProp","eventSourcesToUpdate","calendarEditable","esEvents","esActive","backgroundEventsWhenNotActive","skipBatchRendering","getSelectedEvents","deselectedEventsById","selectedEventId","groupedEvents","selectedEventsById","selectedEventIdsBySourceId","executeCallbackOnEventSource","acc","eventToCopy","evt","textColor","tmpEvent","callbackName","concat","eventsBySourceId","getOption","totalScopes","rootElement","countScopesRecursive","$$childHead","$$nextSibling","altKey","getBaseApiUrl","isProductFeatureEnabled","createReport","getReport","publicGuid","author","whistleblowerReportService","submittedBy","report","changeAnonymity","section","firstName","lastName","phone","onAnonymityChanged","anonymous","onLoaded","controllerId","publicCustomerService","whistleblowerReportCaseType","reportUrl","productFeatureEnabled","publicReportGuid","getUserAccess","addComment","getCommentFilters","getComments","getComment","commentId","updateComment","removeComment","reportGuid","replyToComment","onAdded","whistleblowerReportCommentService","subject","setupReplyToCommentId","replyToCommentId","onReply","reply","onCommentListInit","commentListCtrl","onCommentAdded","onCommentUpdated"],"mappings":"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","file":"public-client.min.js","sourcesContent":["function isString(value) {\r\n\treturn typeof value === 'string';\r\n}\r\n\r\nfunction isObject(value) {\r\n\treturn typeof value === 'object' && value !== null;\r\n}\r\n\r\nfunction hasValue(value) {\r\n\treturn value !== undefined && value !== null && value !== '' && !Number.isNaN(value);\r\n}\r\n\r\nfunction hasItems(array) {\r\n\treturn array !== undefined && array !== null && array.length > 0;\r\n}\r\n\r\nfunction refreshArray(existingArray, newArray, log, idPropertyName = 'id') {\r\n\tvar itemsToRemove = existingArray.filter(function (existingItem) {\r\n\t\treturn !_.find(newArray, function (updatedItem) {\r\n\t\t\treturn updatedItem[idPropertyName] === existingItem[idPropertyName];\r\n\t\t});\r\n\t});\r\n\r\n\tvar removedItems = [];\r\n\titemsToRemove.forEach(function (itemToRemove) {\r\n\t\tremovedItems.push(existingArray.splice(existingArray.indexOf(itemToRemove)));\r\n\t});\r\n\r\n\tif (log) {\r\n\t\tlog.debug('Removed items: ');\r\n\t\tlog.debug(removedItems);\r\n\t}\r\n\r\n\tnewArray.forEach(function (result, index) {\r\n\t\tvar itemToUpdate = _.find(existingArray, function (existingItem) {\r\n\t\t\treturn existingItem[idPropertyName] === result[idPropertyName];\r\n\t\t});\r\n\r\n\t\tif (itemToUpdate) {\r\n\t\t\titemToUpdate = _.assign(itemToUpdate, result);\r\n\t\t} else if (index < existingArray.length) {\r\n\t\t\texistingArray.splice(index, 0, result);\r\n\t\t} else {\r\n\t\t\texistingArray.push(result);\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction getQueryString(params, includeQueryStringDelimiter) {\r\n\tif (params) {\r\n\t\tvar esc = encodeURIComponent;\r\n\r\n\t\tvar keys = Object.keys(params);\r\n\r\n\t\tif (keys.length > 0) {\r\n\t\t\treturn (\r\n\t\t\t\t(includeQueryStringDelimiter ? '?' : '') +\r\n\t\t\t\tkeys\r\n\t\t\t\t\t.map(function (k) {\r\n\t\t\t\t\t\treturn esc(k) + '=' + esc(params[k]);\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.join('&')\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\treturn '';\r\n}\r\n\r\nfunction isTranscludeSlotFilled(nodes) {\r\n\tfor (var i = 0, ii = nodes.length; i < ii; i++) {\r\n\t\tvar node = nodes[i];\r\n\t\t//if (node.nodeType !== Node.COMMENT_NODE) {\r\n\r\n\t\tif (node.nodeValue && node.nodeValue.trim()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (node.innerHTML && node.innerHTML.trim()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif (node.outerHTML && node.outerHTML.trim()) {\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\t//if (node.innerHTML) {\r\n\t\t// var trimmedInnerHtml = node.innerHTML.trim();\r\n\r\n\t\t// if (trimmedInnerHtml && trimmedInnerHtml.indexOf('') !== (trimmedInnerHtml.length - 1)) {\r\n\t\t// return true;\r\n\t\t// }\r\n\t\t//}\r\n\t\t//}\r\n\t}\r\n\r\n\treturn false;\r\n}\r\n\r\nfunction removeTime(date = new Date()) {\r\n\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate());\r\n}\r\n\r\nfunction mergeCustomizer(objValue, srcValue, key, object, source, stack) {\r\n\tif (angular.isUndefined(objValue)) {\r\n\t\treturn srcValue;\r\n\t} else if (_.isArray(objValue)) {\r\n\t\treturn objValue;\r\n\t} else if (_.isPlainObject(objValue)) {\r\n\t\t_.mergeWith(objValue, srcValue, mergeCustomizer);\r\n\t}\r\n\r\n\treturn objValue;\r\n}\r\n\r\nfunction merge(dest, source) {\r\n\tif (dest) {\r\n\t\t_.mergeWith(dest, source, mergeCustomizer);\r\n\t} else {\r\n\t\tdest = source;\r\n\t}\r\n\r\n\treturn dest;\r\n}\r\n\r\nfunction filterObjectKeys(obj, keysToKeep) {\r\n\tlet newObj = { ...obj }; // creating a copy of the object, to avoid mutating the original\r\n\r\n\ttrimObjectKeys(newObj, keysToKeep);\r\n\r\n\treturn newObj;\r\n}\r\n\r\nfunction trimObjectKeys(obj, keysToKeep) {\r\n\tlet keysSet = new Set(keysToKeep); // convert array of keys to a Set for faster lookup\r\n\tfor (let key in obj) {\r\n\t\tif (!(keysSet.has(Number(key)) || keysSet.has(key))) {\r\n\t\t\tdelete obj[key];\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction datesAreStartAndEndOfMonth(start, end) {\r\n\tvar localStart = parseToLocalDate(start);\r\n\tvar localEnd = parseToLocalDate(end);\r\n\treturn (\r\n\t\tmoment(localStart).isSame(moment(localStart).startOf('month')) &&\r\n\t\tmoment(localEnd).isSame(moment(localStart).endOf('month').add(1, 'ms'))\r\n\t);\r\n}\r\n\r\n\r\nfunction getLocalDate(year, month, day) {\r\n\tlet date = moment.tz({ year: year, month: month, day: day !== undefined ? day: 1 }, \"Europe/Stockholm\");\r\n\r\n\t// Create a native JavaScript Date object from the moment object\r\n\tlet nativeDate = date.toDate();\r\n\r\n\treturn nativeDate;\r\n}\r\n\r\nfunction convertToLocalDate(date) {\r\n if (date) {\r\n\t\treturn getLocalDate(date.getFullYear(), date.getMonth(), date.getDate());\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction parseToLocalDate(dateString) {\r\n\tif (dateString) {\r\n\t\treturn convertToLocalDate(new Date(dateString));\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction copyDate(date) {\r\n\treturn date ? new Date(date.getTime()) : null;\r\n}\r\n\r\nfunction dateToHHMM(date) {\r\n\tif (!date) {\r\n return '';\r\n }\r\n\r\n return moment(date).format('HH:mm');\r\n}\r\n\r\nfunction dateIsStartOfDay(date) {\r\n\treturn date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0;\r\n}\r\n\r\nfunction datesSpanMultipleDays(start, end) {\r\n // Calculate the difference in days between the start and end dates\r\n const dayDiff = Math.floor((end - start) / (1000 * 60 * 60 * 24));\r\n\r\n // Check if the difference in days is greater than 1\r\n return dayDiff > 1 || (dayDiff === 1 && !dateIsStartOfDay(start) && !dateIsStartOfDay(end));\r\n}\r\n\r\nfunction datesAreSame(date1, date2) {\r\n // Compare the year, month, and day components of the dates\r\n return (\r\n date1.getFullYear() === date2.getFullYear() &&\r\n date1.getMonth() === date2.getMonth() &&\r\n date1.getDate() === date2.getDate()\r\n );\r\n}\r\n\r\nfunction firstCharToLowerCase(str) {\r\n\tif (!str || !str.length) return str;\r\n\r\n\treturn str.charAt(0).toLowerCase() + str.slice(1);\r\n}\r\n\r\nfunction firstCharToUpperCase(str) {\r\n\tif (!str || !str.length) return str;\r\n\r\n\treturn str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\nfunction arraysAreEqual(arr1, arr2) {\r\n\tif ((!arr1 && arr2) || (arr1 && !arr2)) {\r\n\t\treturn false;\r\n\t}\r\n\tif (!arr1 && !arr2) {\r\n\t\treturn true;\r\n\t}\r\n\tif (arr1.length !== arr2.length) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfor (let i = 0; i < arr1.length; i++) {\r\n\t\tif (arr1[i] !== arr2[i]) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\nfunction generateGUID() {\r\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n\t\tvar r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n\t\treturn v.toString(16);\r\n\t});\r\n}\r\n\r\n// #region Colors\r\n\r\nfunction convertHexToRGBValues(hex) {\r\n\t// Remove the hash at the start if it's there\r\n\thex = hex.replace(/^#/, '');\r\n\r\n\t// Parse the r, g, b values\r\n\tlet r = parseInt(hex.substring(0, 2), 16);\r\n\tlet g = parseInt(hex.substring(2, 4), 16);\r\n\tlet b = parseInt(hex.substring(4, 6), 16);\r\n\r\n\t// Ensure values are within the valid range (0-255)\r\n\tr = Math.max(0, Math.min(255, r));\r\n\tg = Math.max(0, Math.min(255, g));\r\n\tb = Math.max(0, Math.min(255, b));\r\n\r\n\treturn {\r\n\t\tr: r,\r\n\t\tg: g,\r\n\t\tb: b\r\n\t}\r\n}\r\n\r\nfunction getRGBValues(rgb) {\r\n\t// Extract the RGB values using a regular expression\r\n\tconst rgbValues = rgb.match(/\\d+/g);\r\n\r\n\t// Check if the input is a valid RGB value\r\n\tif (rgbValues && rgbValues.length === 3) {\r\n\t\tconst [r, g, b] = rgbValues;\r\n\r\n\t\treturn {\r\n\t\t\tr: r,\r\n\t\t\tg: g,\r\n\t\t\tb: b\r\n\t\t}\r\n\t} else {\r\n\t\tthrow new Error(\"Invalid RGB color value\");\r\n\t}\r\n}\r\n\r\nfunction convertHexToRGB(hex) {\r\n\tvar values = convertHexToRGBValues(hex)\r\n\r\n\treturn `rgb(${values.r}, ${values.g}, ${values.b})`;\r\n}\r\n\r\nfunction darkenRGBValues(values, percent) {\r\n\r\n\t// Calculate the new r, g, b values\r\n\tlet r = Math.floor(values.r * (1 - percent / 100));\r\n\tlet g = Math.floor(values.g * (1 - percent / 100));\r\n\tlet b = Math.floor(values.b * (1 - percent / 100));\r\n\r\n\t// Ensure values are within the valid range (0-255)\r\n\tr = Math.max(0, Math.min(255, r));\r\n\tg = Math.max(0, Math.min(255, g));\r\n\tb = Math.max(0, Math.min(255, b));\r\n\r\n\treturn {\r\n\t\tr: r,\r\n\t\tg: g,\r\n\t\tb: b\r\n\t}\r\n}\r\n\r\nfunction darkenHexColor(hex, percent) {\r\n\tvar values = darkenRGBValues(convertHexToRGBValues(hex), percent);\r\n\r\n\t// Convert back to hex and return\r\n\tconst newHex = `#${((1 << 24) + (values.r << 16) + (values.g << 8) + values.b).toString(16).slice(1).toUpperCase()}`;\r\n\treturn newHex;\r\n}\r\n\r\nfunction convertRGBtoRGBA(rgb, alpha) {\r\n\r\n\t// Ensure alpha is a valid number between 0 and 1\r\n\tif (alpha < 0 || alpha > 1) {\r\n\t\tthrow new Error(\"Alpha value must be between 0 and 1\");\r\n\t}\r\n\r\n\tvar rgbValues = getRGBValues(rgb);\r\n\r\n\t// Construct the RGBA value\r\n\treturn rgbValuesToRgbaString(rgbValues, alpha);\r\n}\r\n\r\nfunction rgbValuesToRgbString(values) {\r\n\treturn `rgb(${values.r}, ${values.g}, ${values.b})`;\r\n}\r\n\r\nfunction rgbValuesToRgbaString(values, alpha) {\r\n\treturn `rgba(${values.r}, ${values.g}, ${values.b}, ${alpha})`;\r\n}\r\n\r\n// #endregion\r\n","(function () {\r\n\t'use strict';\r\n\tvar app = angular.module('app', [\r\n\t\t// Angular\r\n\t\t'ngRoute',\r\n\t\t'ngAnimate',\r\n\t\t'ngCookies',\r\n\t\t'ngSanitize',\r\n\r\n\t\t// External\r\n\t\t'angular.filter',\r\n\t\t'ui.bootstrap',\r\n\t\t'ui.select',\r\n\t\t'blueimp.fileupload',\r\n\t\t'a8m.filter-watcher',\r\n\r\n\t\t// Custom\r\n\t\t'angularMoment',\r\n\t\t'app.filters.moment',\r\n\t\t'app.filters',\r\n\r\n\t\t'ng.deviceDetector',\r\n\r\n\t\t'duScroll'\r\n\t]);\r\n\r\n\tif (!Object.entries) {\r\n\t\tObject.entries = function (obj) {\r\n\t\t\tvar ownProps = Object.keys(obj),\r\n\t\t\t\ti = ownProps.length,\r\n\t\t\t\tresArray = new Array(i); // preallocate the Array\r\n\t\t\twhile (i--) resArray[i] = [ownProps[i], obj[ownProps[i]]];\r\n\r\n\t\t\treturn resArray;\r\n\t\t};\r\n\t}\r\n\r\n\t// -- Error handling\r\n\t// register the interceptor as a service\r\n\tapp.factory('customHttpInterceptor', [\r\n\t\t'$q',\r\n\t\t'logger',\r\n\t\tfunction ($q, logger) {\r\n\t\t\tvar log = logger.getLogger('customHttpInterceptor');\r\n\t\t\treturn {\r\n\t\t\t\t// optional method\r\n\t\t\t\tresponseError: function (rejection) {\r\n\t\t\t\t\tvar url = null;\r\n\t\t\t\t\tif (rejection.config && rejection.config.url) {\r\n\t\t\t\t\t\turl = rejection.config.url;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tlog.debug(rejection);\r\n\r\n\t\t\t\t\tswitch (rejection.status) {\r\n\t\t\t\t\t\tcase 403:\r\n\t\t\t\t\t\t\tswitch (rejection.statusText) {\r\n\t\t\t\t\t\t\t\tcase 'Forbidden':\r\n\t\t\t\t\t\t\t\t\tlog.error('Du saknar behörighet till resursen ' + url, rejection.data);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'Site Disabled':\r\n\t\t\t\t\t\t\t\t\tlog.warning('Systemunderhåll pågår... var god vänta.');\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase 404:\r\n\t\t\t\t\t\t\tlog.error('Det finns ingen resurs som matchar sökvägen ' + url);\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn $q.reject(rejection);\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t]);\r\n\r\n\tapp.factory('$exceptionHandler', [\r\n\t\t'$log',\r\n\t\t'logger',\r\n\t\tfunction ($log, logger) {\r\n\t\t\treturn function (exception, cause) {\r\n\t\t\t\tif (!exception.isHandled) {\r\n\t\t\t\t\tvar log = logger.getLogger('$exceptionHandler');\r\n\t\t\t\t\tlog.error(exception.message);\r\n\r\n\t\t\t\t\tif (window.appInsights) {\r\n\t\t\t\t\t\twindow.appInsights.trackException({ exception: exception });\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t$log.error(exception, cause);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t},\r\n\t]);\r\n\r\n\tapp.config([\r\n\t\t'$httpProvider',\r\n\t\tfunction ($httpProvider) {\r\n\t\t\t$httpProvider.interceptors.push('customHttpInterceptor');\r\n\t\t},\r\n\t]);\r\n\r\n\t// -- Routing\r\n\tvar commonClientControllerTemplateBasePath = '/client/common/controllers/';\r\n\tvar publicClientControllerTemplateBasePath = '/client/public/controllers/';\r\n\r\n\tapp.config([\r\n\t\t'$routeProvider',\r\n\t\t'$locationProvider',\r\n\t\tfunction ($routeProvider, $locationProvider) {\r\n\r\n\t\t\tvar resolves = {};\r\n\r\n\t\t\tvar customRouteProvider = angular.extend({}, $routeProvider, {\r\n\t\t\t\twhen: function (path, route) {\r\n\t\t\t\t\troute.resolve = route.resolve ? route.resolve : {};\r\n\t\t\t\t\tangular.extend(route.resolve, resolves);\r\n\t\t\t\t\t$routeProvider.when(path, route);\r\n\t\t\t\t\treturn this;\r\n\t\t\t\t},\r\n\t\t\t});\r\n\r\n\t\t\t//var customRouteProvider = $routeProvider;\r\n\r\n\t\t\t$locationProvider.html5Mode(true).hashPrefix('');\r\n\r\n\t\t\t// #region Routes\r\n\t\t\tcustomRouteProvider\r\n\r\n\t\t\t\t// Cases\r\n\r\n\t\t\t\t.when('/whistleblowerreports/:customerGuid', {\r\n\t\t\t\t\ttitle: 'Anmälan',\r\n\t\t\t\t\ttemplateUrl: publicClientControllerTemplateBasePath + 'cases/whistleblower-reports/whistleblower-report-submit.ctrl.html',\r\n\t\t\t\t\tcontroller: 'whistleblowerReportSubmitCtrl',\r\n\t\t\t\t\treloadOnSearch: false,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t.when('/whistleblowerreports/:customerGuid/:publicReportGuid', {\r\n\t\t\t\t\ttitle: 'Anmälan',\r\n\t\t\t\t\ttemplateUrl: publicClientControllerTemplateBasePath + 'cases/whistleblower-reports/whistleblower-report.ctrl.html',\r\n\t\t\t\t\tcontroller: 'whistleblowerReportCtrl',\r\n\t\t\t\t\treloadOnSearch: false,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t// System\r\n\r\n\t\t\t\t.when('/feature-unavailable', {\r\n\t\t\t\t\ttitle: 'Funktionen ingår inte i ditt abonnemang',\r\n\t\t\t\t\ttemplateUrl: commonClientControllerTemplateBasePath + 'system/feature-unavailable.ctrl.html',\r\n\t\t\t\t\tcontroller: 'featureUnavailableCtrl',\r\n\t\t\t\t\treloadOnSearch: false,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t.when('/unauthorized', {\r\n\t\t\t\t\ttitle: 'Du saknar tillgång till den här funktionen',\r\n\t\t\t\t\ttemplateUrl: commonClientControllerTemplateBasePath + 'system/unauthorized.ctrl.html',\r\n\t\t\t\t\tcontroller: 'unauthorizedCtrl',\r\n\t\t\t\t\treloadOnSearch: false,\r\n\t\t\t\t})\r\n\r\n\t\t\t\t.when('/404', {\r\n\t\t\t\t\ttitle: 'Sidan hittades inte',\r\n\t\t\t\t\ttemplateUrl: commonClientControllerTemplateBasePath + 'system/not-found.ctrl.html',\r\n\t\t\t\t\tcontroller: 'notFoundCtrl',\r\n\t\t\t\t})\r\n\r\n\t\t\t\t.otherwise({ redirectTo: '/404' });\r\n\r\n\t\t\t// #endregion\r\n\t\t},\r\n\t]);\r\n\r\n\t// .html template cache-busting\r\n\tapp.config([\r\n\t\t'$provide',\r\n\t\tfunction ($provide) {\r\n\t\t\treturn $provide.decorator('$http', [\r\n\t\t\t\t'$delegate',\r\n\t\t\t\t'$window',\r\n\t\t\t\tfunction ($delegate, $window) {\r\n\t\t\t\t\tvar get = $delegate.get;\r\n\t\t\t\t\t$delegate.get = function (url, config) {\r\n\t\t\t\t\t\tif (~url.indexOf('/client/') && ~url.indexOf('.html')) {\r\n\t\t\t\t\t\t\t// Append ?v=[version] to url\r\n\t\t\t\t\t\t\turl += url.indexOf('?') === -1 ? '?' : '&';\r\n\t\t\t\t\t\t\turl += 'v=' + $window.angularTemplatesVersion;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\treturn get(url, config);\r\n\t\t\t\t\t};\r\n\t\t\t\t\treturn $delegate;\r\n\t\t\t\t},\r\n\t\t\t]);\r\n\t\t},\r\n\t]);\r\n\r\n\tapp.config([\r\n\t\t'$compileProvider',\r\n\t\tfunction ($compileProvider) {\r\n\t\t\t// $compileProvider.debugInfoEnabled(false); // we cannot do this yet since code in daypilot.js (angular.element('#page-wrapper-view').scope() etc) seems to rely on debug info\r\n\t\t},\r\n\t]);\r\n\r\n\tapp.config([\r\n\t\t'uiSelectConfig',\r\n\t\tfunction (uiSelectConfig) {\r\n\t\t\tuiSelectConfig.appendToBody = true;\r\n\t\t},\r\n\t]);\r\n\r\n\t//app.config(['$anchorScrollProvider', function ($anchorScrollProvider) {\r\n\t//\t$anchorScrollProvider.disableAutoScrolling();\r\n // }])\r\n\r\n\tfunction appendToPageTitle($rootScope, text) {\r\n\t\tif (text) {\r\n\t\t\tif ($rootScope.title) {\r\n\t\t\t\t$rootScope.title += ' - ' + text;\r\n\t\t\t} else {\r\n\t\t\t\t$rootScope.title = text;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar appStatusCheckInterval = undefined;\r\n\r\n\tfunction stopAppStatusCheck($interval) {\r\n\t\tif (appStatusCheckInterval) {\r\n\t\t\t$interval.cancel(appStatusCheckInterval);\r\n\t\t\tappStatusCheckInterval = undefined;\r\n\t\t}\r\n }\r\n\r\n\tapp.run([\r\n\t\t'$rootElement',\r\n\t\t'$rootScope',\r\n\t\t'$interval',\r\n\t\t'appService',\r\n\t\tfunction ($rootElement, $rootScope, $interval, appService) {\r\n\r\n\t\t\tappService.initSupportedBrowserFeatures();\r\n\r\n\t\t\t$rootScope.breakpoints = {\r\n\t\t\t\titems: [0, 360, 480, 640, 768, 1024, 1200, 1366, 1600, 1920],\r\n\t\t\t\tcurrent: undefined,\r\n\t\t\t};\r\n\r\n\t\t\tappService.registerBreakpoints($rootScope.breakpoints);\r\n\t\t\t$rootScope.isFeatureAvailable = appService.isFeatureAvailable;\r\n\r\n\t\t\t$rootScope.bankIDTransactionInProgress = false;\r\n\t\t\t$rootScope.fullscreenMode = false;\r\n\r\n\t\t\twindow.angularTemplatesVersion = $rootElement.attr('ng-template-timestamp');\r\n\t\t\t$rootScope.appVersion = appService.getLocalAppVersion();\r\n\t\t\tmoment.tz.setDefault('Europe/Stockholm');\r\n\r\n\t\t\tappService.getSystemTypes().then(function (systemTypes) {\r\n\t\t\t\t$rootScope.systemTypes = systemTypes;\r\n\r\n\t\t\t\tObject.keys($rootScope.systemTypes).forEach(function (systemTypeKey) {\r\n\t\t\t\t\t$rootScope.systemTypes[systemTypeKey].values = Object.values($rootScope.systemTypes[systemTypeKey]);\r\n\t\t\t\t});\r\n\t\t\t})\r\n\r\n\t\t\t$rootScope.$on('$destroy', function () {\r\n\t\t\t\tstopAppStatusCheck($interval);\r\n\t\t\t});\r\n\r\n\t\t\t$rootScope.$watch('user', function (user) {\r\n\t\t\t\tif (user) {\r\n\t\t\t\t\tif (appStatusCheckInterval === undefined) {\r\n\t\t\t\t\t\tappService.checkAppStatus();\r\n\r\n\t\t\t\t\t\tappStatusCheckInterval = $interval(appService.checkAppStatus, 30000);\r\n }\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstopAppStatusCheck($interval);\r\n }\r\n })\r\n\r\n\t\t\t$rootScope.$on('$routeChangeSuccess', function (e, current) {\r\n\t\t\t\tif (current && current.$$route && current.$$route.controller) {\r\n\t\t\t\t\t$rootScope.title = '';\r\n\r\n\t\t\t\t\tappendToPageTitle($rootScope, current.title);\r\n\r\n\t\t\t\t\tappendToPageTitle($rootScope, 'Coordinare');\r\n\r\n\t\t\t\t\tswitch (current.$$route.controller) {\r\n\t\t\t\t\t\tcase 'whistleblowerReportSubmitCtrl':\r\n\t\t\t\t\t\tcase 'whistleblowerReportCtrl':\r\n\t\t\t\t\t\t\t$rootScope.pageWidth = 'page-width-narrow';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\t$rootScope.pageWidth = 'page-width-default';\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t$rootScope.icons = {\r\n\t\t\t\tcases: {\r\n\t\t\t\t\tlist: 'far fa-inbox-in'\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\t$rootScope.appInitialized = true;\r\n\t\t},\r\n\t]);\r\n})();\r\n","(function () {\r\n\tvar app = angular.module('app');\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Används på formulär för att genomföra en validering då formuläret\r\n\t// anropar .submit.\r\n\t// Exempel:
\r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('validateSubmit', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\tlink: function (scope, element, attributes) {\r\n\t\t\t\tif (typeof attributes.novalidate === 'undefined') {\r\n\t\t\t\t\tattributes.$set('novalidate', 'novalidate');\r\n\t\t\t\t}\r\n\r\n\t\t\t\telement.bind('submit', function (e) {\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\t// Get the form object.\r\n\t\t\t\t\tvar form = scope.$eval(attributes.name);\r\n\t\t\t\t\tif (form.$valid) {\r\n\t\t\t\t\t\t// If the form is valid call the method specified\r\n\t\t\t\t\t\tscope.$eval(attributes.validateSubmit);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tform.$submitted = true;\r\n\t\t\t\t\t\tif (!scope.$$phase) {\r\n\t\t\t\t\t\t\tscope.$apply();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\telement.addClass('submitted');\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Match attribut\r\n\t// \r\n\t// \r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('passwordMatch', [\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tscope: true,\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, elem, attrs, control) {\r\n\t\t\t\t\tvar checker = function () {\r\n\t\t\t\t\t\t// get the value of the first password\r\n\t\t\t\t\t\tvar e1 = scope.$eval(attrs.ngModel);\r\n\t\t\t\t\t\te1 = angular.isString(e1) ? e1 : '';\r\n\r\n\t\t\t\t\t\t// get the value of the other password\r\n\t\t\t\t\t\tvar e2 = scope.$eval(attrs.passwordMatch);\r\n\t\t\t\t\t\te2 = angular.isString(e2) ? e2 : '';\r\n\r\n\t\t\t\t\t\treturn e1 == e2;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tscope.$watch(checker, function (n) {\r\n\t\t\t\t\t\t// set the form control to valid if both\r\n\t\t\t\t\t\t// passwords are the same, else invalid\r\n\t\t\t\t\t\tcontrol.$setValidity('passwordMatch', n);\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t]);\r\n\r\n\tapp.directive('matchString', [\r\n\t\tfunction () {\r\n\t\t\treturn {\r\n\t\t\t\trestrict: 'A',\r\n\t\t\t\tscope: true,\r\n\t\t\t\trequire: 'ngModel',\r\n\t\t\t\tlink: function (scope, elem, attrs, control) {\r\n\r\n\t\t\t\t\tif (!attrs.matchString) return true;\r\n\r\n\t\t\t\t\tvar checker = function () {\r\n\r\n\t\t\t\t\t\tvar e1 = scope.$eval(attrs.ngModel);\r\n\r\n\t\t\t\t\t\tif (e1 === undefined) return true;\r\n\r\n\t\t\t\t\t\te1 = angular.isString(e1) ? e1 : '';\r\n\r\n\t\t\t\t\t\tvar e2 = attrs.matchString;\r\n\t\t\t\t\t\te2 = angular.isString(e2) ? e2 : '';\r\n\r\n\t\t\t\t\t\treturn e1 == e2;\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tscope.$watch(checker, function (valid) {\r\n\t\t\t\t\t\tcontrol.$setValidity('matchString', valid);\r\n\t\t\t\t\t});\r\n\t\t\t\t},\r\n\t\t\t};\r\n\t\t},\r\n\t]);\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Password attribut\r\n\t// \r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('passwordValidate', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\r\n\t\t\tlink: function (scope, elem, attr, ctrl) {\r\n\r\n\t\t\t\tif (attr.passwordValidate === 'false') return;\r\n\r\n\t\t\t\tvar isValid = function (val) {\r\n\t\t\t\t\tif (val == '' || val == null || !val.length) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar numberMatches = val.match(/[0-9]{1,}/g);\r\n\t\t\t\t\tvar letterMatches = val.match(/[a-zA-Z]{1,}/g);\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\tangular.isString(val) &&\r\n\t\t\t\t\t\tval.length >= 8 &&\r\n\t\t\t\t\t\tnumberMatches != null &&\r\n\t\t\t\t\t\tnumberMatches.length >= 1 &&\r\n\t\t\t\t\t\tletterMatches != null &&\r\n\t\t\t\t\t\tletterMatches.length >= 1\r\n\t\t\t\t\t);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tctrl.$parsers.unshift(function (value) {\r\n\t\t\t\t\tvar valid = isValid(value);\r\n\t\t\t\t\tctrl.$setValidity('passwordValidate', valid);\r\n\t\t\t\t\treturn valid ? value : undefined;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tctrl.$formatters.unshift(function (value) {\r\n\t\t\t\t\tctrl.$setValidity('passwordValidate', isValid(value));\r\n\t\t\t\t\treturn value;\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Validera ng-min=\"23\"\r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('ngMin', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, elem, attr, ctrl) {\r\n\t\t\t\tvar minValidator = function (value) {\r\n\t\t\t\t\tvar min = scope.$eval(attr.ngMin) || 0;\r\n\t\t\t\t\tvar isEmpty = function (v) {\r\n\t\t\t\t\t\treturn typeof v === 'undefined' || v == null || v == '';\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (!isEmpty(value) && value < min) {\r\n\t\t\t\t\t\tctrl.$setValidity('ngMin', false);\r\n\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tctrl.$setValidity('ngMin', true);\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tctrl.$parsers.push(minValidator);\r\n\t\t\t\tctrl.$formatters.push(minValidator);\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Validera ng-max=\"23\"\r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('ngMax', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, elem, attr, ctrl) {\r\n\t\t\t\tvar maxValidator = function (value) {\r\n\t\t\t\t\tvar max = scope.$eval(attr.ngMax) || Infinity;\r\n\t\t\t\t\tvar isEmpty = function (v) {\r\n\t\t\t\t\t\treturn typeof v === 'undefined' || v == null || v == '';\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\tif (!isEmpty(value) && value > max) {\r\n\t\t\t\t\t\tctrl.$setValidity('ngMax', false);\r\n\t\t\t\t\t\treturn undefined;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tctrl.$setValidity('ngMax', true);\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tctrl.$parsers.push(maxValidator);\r\n\t\t\t\tctrl.$formatters.push(maxValidator);\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n\r\n\tapp.directive('validSsn', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: '?ngModel',\r\n\t\t\tpriority: 1,\r\n\t\t\tlink: function (scope, element, attrs, ngModelCtrl) {\r\n\t\t\t\tif (!ngModelCtrl) return; // do nothing if no ng-model\r\n\r\n\t\t\t\tvar validate = function (value) {\r\n\t\t\t\t\tif (!ngModelCtrl.$error.required) {\r\n\t\t\t\t\t\tvar valid = value ? Personnummer.isValid(value) : false;\r\n\r\n\t\t\t\t\t\tngModelCtrl.$setValidity('validSsn', valid);\r\n\r\n\t\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\t\tvalue = Personnummer.format(value, Personnummer.FORMAT_MODERN);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tngModelCtrl.$setViewValue(value);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.on('blur', function () {\r\n\t\t\t\t\tscope.$apply(function () {\r\n\t\t\t\t\t\tvalidate(element.val());\r\n\t\t\t\t\t\tngModelCtrl.$render();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n\r\n\t// --------------------------------------------------------------- //\r\n\t// Validera att ett textfält är obligatoriskt om en checkbox/input/textarea\r\n\t// är vald/ifylld data-require-if=\"scope.model\"\r\n\t// --------------------------------------------------------------- //\r\n\tapp.directive('requireIf', function () {\r\n\t\treturn {\r\n\t\t\trestrict: 'A',\r\n\t\t\trequire: 'ngModel',\r\n\t\t\tlink: function (scope, elem, attr, ctrl) {\r\n\t\t\t\tvar validate = function () {\r\n\t\t\t\t\tvar requireValue = scope.$eval(attr.requireIf);\r\n\t\t\t\t\tvar hasValue = (_.isString(ctrl.$viewValue) && ctrl.$viewValue != '') || _.isObject(ctrl.$viewValue);\r\n\r\n\t\t\t\t\tif (_.isBoolean(requireValue)) {\r\n\t\t\t\t\t\treturn (!requireValue && !hasValue) || (requireValue && hasValue);\r\n\t\t\t\t\t} else if (_.isString(requireValue)) {\r\n\t\t\t\t\t\treturn requireValue == '' || (requireValue != '' && hasValue);\r\n\t\t\t\t\t} else if (_.isUndefined(requireValue) || _.isNull(requireValue)) {\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t} else if (_.isObject(requireValue) || _.isFunction(requireValue)) {\r\n\t\t\t\t\t\treturn hasValue;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tscope.$watch(validate, function (valid) {\r\n\t\t\t\t\tctrl.$setValidity('requireIf', valid);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t};\r\n\t});\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n // --------------------------------------------------------------- //\r\n // Direktiv för om att stoppa klick event om href är '' eller '#'\r\n // --------------------------------------------------------------- //\r\n app.directive('a', function () {\r\n return {\r\n restrict: 'E',\r\n link: function (scope, elem, attrs) {\r\n if (attrs.ngClick || attrs.href === '' || attrs.href === '#') {\r\n elem.on('click', function (e) {\r\n e.preventDefault();\r\n });\r\n }\r\n }\r\n };\r\n });\r\n\r\n app.config([\r\n '$httpProvider',\r\n function ($httpProvider) {\r\n $httpProvider.defaults.transformResponse.push(function (data) {\r\n if (data === \"null\") {\r\n data = null;\r\n }\r\n return data;\r\n });\r\n }\r\n ]);\r\n\r\n app.directive('stopPropagation', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attr) {\r\n element.bind('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n \r\n }\r\n };\r\n });\r\n\r\n app.directive('convertToNumber', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModel) {\r\n ngModel.$parsers.push(function (val) {\r\n if (val != null) {\r\n var parsedVal = parseInt(val, 10);\r\n\r\n if (angular.isNumber(parsedVal)) return parsedVal;\r\n }\r\n\r\n return null;\r\n });\r\n ngModel.$formatters.push(function (val) {\r\n return val != null ? '' + val : null;\r\n });\r\n }\r\n };\r\n });\r\n\r\n app.directive('convertToFloat', function () {\r\n return {\r\n require: 'ngModel',\r\n link: function (scope, element, attrs, ngModel) {\r\n ngModel.$parsers.push(function (val) {\r\n if (val != null) {\r\n var parsedVal = parseFloat(val);\r\n\r\n if (angular.isNumber(parsedVal)) return parsedVal;\r\n }\r\n\r\n return null;\r\n });\r\n ngModel.$formatters.push(function (val) {\r\n return val != null ? '' + val : null;\r\n });\r\n }\r\n };\r\n });\r\n\r\n app.directive('timeInput', function () {\r\n // TODO: Fixa till den här, den har vuxit sig åt helt fel riktning\r\n return {\r\n require: '?ngModel',\r\n restrict: 'A',\r\n link: function (scope, element, attrs, controller) {\r\n controller.$setPristine();\r\n var update = function () {\r\n\r\n var value = element.val();\r\n if (value) {\r\n var date = moment(value, 'HH:mm');\r\n if (date) {\r\n element.datetimepicker().data(\"DateTimePicker\").date(date);\r\n }\r\n \r\n return controller.$setViewValue(date ? date.format('HH:mm') : undefined);\r\n }\r\n controller.$setPristine();\r\n return controller.$viewValue;\r\n };\r\n\r\n var init = function () {\r\n var value = element.val();\r\n if (value) {\r\n var date = moment(element.val(), 'HH:mm');\r\n element.datetimepicker().data(\"DateTimePicker\").date(date);\r\n return controller.$setViewValue(date ? date.format('HH:mm') : undefined);\r\n }\r\n };\r\n\r\n var onblur = function () {\r\n var date = element.datetimepicker().data(\"DateTimePicker\").date();\r\n return scope.$apply(function () {\r\n return controller.$setViewValue(date ? date.format('HH:mm') : '');\r\n });\r\n };\r\n\r\n return attrs.$observe('timeInput', function (value) {\r\n\r\n var options = {\r\n\r\n };\r\n\r\n if (angular.isObject(value)) {\r\n options = angular.extend(options, value);\r\n }\r\n\r\n if (typeof (value) === \"string\" && value.length > 0) {\r\n options = angular.extend(options, scope.$eval(value));\r\n }\r\n\r\n options.format = 'HH:mm';\r\n\r\n options.icons = {\r\n time: \"far fa-clock\",\r\n date: \"far fa-calendar-alt\",\r\n up: \"fa fa-arrow-up\",\r\n down: \"fa fa-arrow-down\"\r\n };\r\n\r\n return element.datetimepicker(options).on('change.dp', update).on('dp.change', update).on('dp.show', init).on('blur', onblur);\r\n });\r\n }\r\n };\r\n });\r\n\r\n app.directive('dateInput', [\r\n '$timeout',\r\n 'logger',\r\n function ($timeout, logger) {\r\n var log = logger.getLogger('dateInput');\r\n return {\r\n require: 'ngModel',\r\n restrict: 'A',\r\n scope: {\r\n mindate: '=',\r\n maxdate: '='\r\n },\r\n link: function ($scope, element, attrs, controller) {\r\n var updateModel, onblur, hasRun;\r\n\r\n var fillValues = function () {\r\n if (typeof element.data('DateTimePicker') === 'undefined') {\r\n log.debug('Okänd DateTimePicker');\r\n return controller.$viewValue;\r\n }\r\n\r\n var date = controller.$viewValue;\r\n\r\n if (angular.isUndefined(date) || date == null || date == '' || Number.isNaN(date)) {\r\n // Skippa initiering\r\n element.data(\"DateTimePicker\").date(null);\r\n } else if (moment.isMoment(date)) {\r\n //log.debug('Är ett moment', date);\r\n element.data(\"DateTimePicker\").date(date);\r\n controller.$setViewValue(date);\r\n } else if (angular.isString(date)) {\r\n date = moment(new Date(date));\r\n element.data(\"DateTimePicker\").date(date);\r\n controller.$setViewValue(date);\r\n } else {\r\n log.debug('Okänd typ', date);\r\n throw new Error('ng-model value must be a Moment - currently it is a ' + typeof date + '.');\r\n }\r\n controller.$setPristine();\r\n return controller.$viewValue;\r\n };\r\n\r\n if (controller !== null) {\r\n controller.$setPristine();\r\n updateModel = function (e) {\r\n //log.debug('Updatemodel', e);\r\n };\r\n\r\n onblur = function () {\r\n var date = element.datetimepicker().data(\"DateTimePicker\").date();\r\n return $scope.$apply(function () {\r\n return controller.$setViewValue(date);\r\n });\r\n };\r\n\r\n controller.$render = fillValues;\r\n }\r\n\r\n return attrs.$observe('dateInput', function (value) {\r\n hasRun = true;\r\n\r\n var options = {\r\n locale: 'sv'\r\n };\r\n\r\n if (angular.isObject(value)) {\r\n options = angular.extend(options, value);\r\n }\r\n\r\n if (typeof (value) === \"string\" && value.length > 0) {\r\n options = angular.extend(options, $scope.$eval(value));\r\n }\r\n\r\n if (options.showClear === undefined) {\r\n options.showClear = true;\r\n }\r\n \r\n options.useCurrent = false;\r\n //options.debug = true;\r\n\r\n options.icons = {\r\n time: \"far fa-clock\",\r\n date: \"far fa-calendar-alt\",\r\n up: \"fa fa-arrow-up\",\r\n down: \"fa fa-arrow-down\"\r\n };\r\n\r\n if (!options.ignoreReadonly) {\r\n options.ignoreReadonly = true;\r\n }\r\n\r\n if (angular.isUndefined(options.format) || !angular.isString(options.format)) {\r\n\r\n if (attrs.pickMonth == \"true\") {\r\n options.format = 'YYYY-MM';\r\n } else if (attrs.pickTime == \"false\") {\r\n options.format = 'YYYY-MM-DD';\r\n } else {\r\n options.format = 'YYYY-MM-DD HH:mm';\r\n\t\t\t\t\t\t\t}\r\n }\r\n\r\n var picker = element.datetimepicker(options).on('dp.change', updateModel).on('blur', onblur);\r\n\r\n if (attrs.toggleSelector) {\r\n $timeout(function () {\r\n angular.element('#' + attrs.toggleSelector).on('click', function () {\r\n element.data(\"DateTimePicker\").toggle();\r\n });\r\n });\r\n }\r\n\r\n if (!angular.isUndefined(attrs.mindate)) {\r\n $scope.$watch('mindate', function (value) {\r\n if (value) {\r\n if (element.data('DateTimePicker').maxDate() && moment(value).isAfter(element.data('DateTimePicker').maxDate())) {\r\n element.data('DateTimePicker').maxDate(false);\r\n }\r\n element.data('DateTimePicker').minDate(moment(value));\r\n } else {\r\n element.data('DateTimePicker').minDate(false);\r\n }\r\n });\r\n } else {\r\n element.data('DateTimePicker').minDate(moment('1970-01-01 00:00'));\r\n }\r\n\r\n if (!angular.isUndefined(attrs.maxdate)) {\r\n $scope.$watch('maxdate', function (value) {\r\n if (value) {\r\n if (element.data('DateTimePicker').minDate() && moment(value).isBefore(element.data('DateTimePicker').minDate())) {\r\n element.data('DateTimePicker').minDate(false);\r\n }\r\n element.data('DateTimePicker').maxDate(moment(value));\r\n } else {\r\n element.data('DateTimePicker').maxDate(false);\r\n }\r\n });\r\n }\r\n\r\n if (typeof controller.$render !== 'undefined' && controller.$viewValue != null) {\r\n fillValues();\r\n }\r\n\r\n return picker;\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n\r\n app.directive('changeOnBlur', function () {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elm, attrs, ngModelCtrl) {\r\n if (attrs.type === 'radio' || attrs.type === 'checkbox')\r\n return;\r\n\r\n var expressionToCall = attrs.changeOnBlur;\r\n\r\n var oldValue = null;\r\n elm.bind('focus', function () {\r\n scope.$apply(function () {\r\n oldValue = elm.val();\r\n });\r\n });\r\n\r\n elm.bind('blur', function () {\r\n scope.$apply(function () {\r\n var newValue = elm.val();\r\n if (newValue !== oldValue) {\r\n scope.$eval(expressionToCall);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n });\r\n\r\n //app.directive('validateOnBlur', [function () {\r\n // return {\r\n // restrict: 'A',\r\n // require: 'ngModel',\r\n // link: function (scope, element, attrs, ctrl) {\r\n // ctrl.validate = false;\r\n\r\n // element.bind('focus', function (evt) {\r\n // if (ctrl.validate && ctrl.$invalid) // if we focus and the field was invalid, keep the validation\r\n // {\r\n // scope.$apply(function () { ctrl.validate = true; });\r\n // }\r\n // else {\r\n // scope.$apply(function () { ctrl.validate = false; });\r\n // }\r\n\r\n // }).bind('blur', function (evt) {\r\n // scope.$apply(function () { ctrl.validate = true; });\r\n // });\r\n // }\r\n // };\r\n //}]);\r\n\r\n app.directive('form', function () {\r\n \treturn {\r\n \t restrict: 'E',\r\n \t\tlink: function ($scope, elem) {\r\n \t\t\telem.on('submit', function () {\t\r\n \t\t\t\tvar firstInvalid = angular.element(elem[0].querySelector('.ng-invalid'))[0];\r\n\r\n \t\t\t\tif (firstInvalid) {\r\n\t\t\t\t window.scrollTo(0, firstInvalid.offsetTop);\r\n \t\t\t\t\tfirstInvalid.focus();\r\n \t\t\t\t}\r\n \t\t\t});\r\n\r\n\t\t }\r\n \t};\r\n });\r\n\r\n app.directive('myPostRepeatDirective', function () {\r\n return function (scope, element, attrs) {\r\n if (scope.$last) {\r\n scope.$eval('doComplete()');\r\n }\r\n };\r\n });\r\n\r\n app.directive('uibTab', ['logger', 'locationService', '$timeout', '$rootScope',\r\n function (logger, locationService, $timeout, $rootScope) {\r\n return {\r\n restrict: 'E',\r\n link: function (scope, elem, attrs) {\r\n var log = logger.getLogger('tab');\r\n\r\n elem.on('click', function (e) {\r\n e.stopPropagation();\r\n\r\n var parentId = elem.parent()[0].id;\r\n var i = _.findIndex(elem.parent().children(), function (o) {\r\n return elem[0] === o;\r\n });\r\n scope.$apply(function () {\r\n var subTabs = elem.parents('.tab-content').length > 0;\r\n if (subTabs) {\r\n locationService.setQueryParam('subtab', i);\r\n } else {\r\n locationService.setQueryParam('tab' + (parentId ? '-' + parentId : ''), i);\r\n locationService.removeQueryParam('subtab', null);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n app.directive('uiIndeterminate', [\r\n function () {\r\n\r\n return {\r\n compile: function (tElm, tAttrs) {\r\n if (!tAttrs.type || tAttrs.type.toLowerCase() !== 'checkbox') {\r\n return angular.noop;\r\n }\r\n\r\n return function ($scope, elm, attrs) {\r\n\r\n $scope.$watch(attrs.uiIndeterminate, function (newVal) {\r\n elm[0].indeterminate = !!newVal;\r\n });\r\n };\r\n }\r\n };\r\n }]);\r\n\r\n app.directive('ngConfirmClick', [\r\n function () {\r\n return {\r\n link: function (scope, element, attr) {\r\n var msg = attr.ngConfirmClick || \"Är du säker?\";\r\n var clickAction = attr.confirmedClick;\r\n element.bind('click', function (event) {\r\n if (window.confirm(msg)) {\r\n scope.$eval(clickAction);\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n app.directive('customPopover',\r\n function () {\r\n return {\r\n restrict: 'A',\r\n template: '{{label}}',\r\n link: function (scope, el, attrs) {\r\n scope.label = attrs.popoverLabel;\r\n $(el).popover({\r\n trigger: 'hover',\r\n html: true,\r\n container: 'body',\r\n content: attrs.popoverHtml,\r\n placement: attrs.popoverPlacement\r\n });\r\n }\r\n };\r\n });\r\n\r\n app.directive('enterKey', function () {\r\n return function (scope, element, attrs) {\r\n element.bind(\"keyup\", function (event) {\r\n var keyCode = event.which || event.keyCode;\r\n\r\n // If enter key is pressed \r\n if (keyCode === 13) {\r\n scope.$apply(function () {\r\n // Evaluate the expression \r\n scope.$eval(attrs.enterKey);\r\n });\r\n event.preventDefault();\r\n }\r\n });\r\n };\r\n });\r\n\r\n app.directive('blurOnEnter', ['$timeout', function ($timeout) {\r\n return function (scope, element, attrs) {\r\n element.bind(\"keyup\", function (event) {\r\n var keyCode = event.which || event.keyCode;\r\n\r\n // If enter key is pressed \r\n if (keyCode === 13) {\r\n // this will finish the current digest before triggering the blur\r\n $timeout(function () {\r\n event.target.blur()\r\n }, 0, false);\r\n event.preventDefault();\r\n }\r\n });\r\n };\r\n }]);\r\n\r\n \r\n\r\n app.directive('navLink', ['$location', function ($location) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n\r\n var clazz = 'active';\r\n scope.location = $location;\r\n scope.$watch('location.path()', function (newPath) {\r\n if (attrs.href && (attrs.href.indexOf('/#') !== -1 ? newPath === attrs.href.substring(2).split(\"?\")[0] : newPath === attrs.href.split(\"?\")[0])) {\r\n element.addClass(clazz);\r\n } else {\r\n element.removeClass(clazz);\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n app.directive('ngTranscludeReplace', ['$log', function ($log) {\r\n return {\r\n terminal: true,\r\n restrict: 'EA',\r\n\r\n link: function ($scope, $element, $attr, ctrl, transclude) {\r\n if (!transclude) {\r\n $log.error('orphan',\r\n 'Illegal use of ngTranscludeReplace directive in the template! ' +\r\n 'No parent directive that requires a transclusion found. ');\r\n return;\r\n }\r\n\r\n var childScope;\r\n var transcludedContent;\r\n transclude(function (clone, newScope) {\r\n childScope = newScope;\r\n\r\n if (clone.length) {\r\n transcludedContent = clone;\r\n $element.replaceWith(clone);\r\n }\r\n else {\r\n $element.remove();\r\n }\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n if (childScope) {\r\n childScope.$destroy();\r\n childScope = null;\r\n }\r\n\r\n if (transcludedContent) {\r\n transcludedContent.remove();\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n\r\n app.directive('ngDebounce', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n priority: 99,\r\n link: function (scope, elm, attr, ngModelCtrl) {\r\n if (attr.type === 'radio' || attr.type === 'checkbox') return;\r\n\r\n elm.unbind('input');\r\n\r\n var debounce;\r\n elm.bind('input', function () {\r\n $timeout.cancel(debounce);\r\n debounce = $timeout(function () {\r\n scope.$apply(function () {\r\n ngModelCtrl.$setViewValue(elm.val());\r\n });\r\n }, attr.ngDebounce || 1000);\r\n });\r\n elm.bind('blur', function () {\r\n scope.$apply(function () {\r\n ngModelCtrl.$setViewValue(elm.val());\r\n });\r\n });\r\n }\r\n\r\n }\r\n }]);\r\n\r\n app.directive(\"disableAnimate\", ['$animate', function ($animate) {\r\n return function (scope, element) {\r\n $animate.enabled(element, false);\r\n };\r\n }]);\r\n\r\n app.directive('uiSelectEventRouter', ['$timeout', function ($timeout) {\r\n return {\r\n require: 'uiSelect',\r\n link: function ($scope, $element, attrs, $select) {\r\n var searchInput = $element.querySelectorAll('input.ui-select-search');\r\n if (searchInput.length !== 1) throw Error();\r\n\r\n searchInput.on('blur', function (e) {\r\n $timeout(function () {\r\n $scope.$emit('blur', e);\r\n });\r\n });\r\n\r\n searchInput.on('focus', function (e) {\r\n $timeout(function () {\r\n $scope.$emit('focus', e);\r\n });\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n searchInput.off('blur focus');\r\n });\r\n }\r\n }\r\n }]);\r\n\r\n app.directive('focusOn', function () {\r\n return function (scope, elem, attr) {\r\n scope.$on('focusOn', function (e, name) {\r\n if (name === attr.focusOn) {\r\n elem[0].focus();\r\n }\r\n });\r\n };\r\n });\r\n\r\n app.factory('focus', ['$rootScope', '$timeout', function ($rootScope, $timeout) {\r\n return function (name) {\r\n $timeout(function () {\r\n $rootScope.$broadcast('focusOn', name);\r\n });\r\n }\r\n }]);\r\n\r\n app.directive('sameDay', function () {\r\n return {\r\n require: 'ngModel',\r\n link: ['scope', 'element', 'attrs', 'ngModel', function (scope, element, attrs, ngModel) {\r\n function validateSameDay() {\r\n var dateBegin = scope.$eval(attrs.dateBegin);\r\n var dateEnd = scope.$eval(attrs.dateEnd);\r\n if (dateBegin && dateEnd) {\r\n var beginDate = new Date(dateBegin);\r\n var endDate = new Date(dateEnd);\r\n var isValid = DateUtils.sameDay(beginDate, endDate);\r\n ngModel.$setValidity('sameDay', isValid);\r\n }\r\n return ngModel.$modelValue;\r\n }\r\n\r\n scope.$watch(attrs.dateBegin, validateSameDay);\r\n scope.$watch(attrs.dateEnd, validateSameDay);\r\n }\r\n ]};\r\n });\r\n\r\n app.directive('endTimeInput', function () {\r\n return {\r\n restrict: 'A',\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, ngModelCtrl) {\r\n\r\n // Check if element is a time input, if not return early\r\n if (elem[0].tagName !== 'INPUT' || attrs.type !== 'time') {\r\n return;\r\n }\r\n\r\n // Override the native min validator if a min attribute is present.\r\n attrs.$observe('min', function (min) {\r\n if (min) {\r\n // Save the original min validator function.\r\n var originalMinValidator = ngModelCtrl.$validators.min;\r\n\r\n // Override the min validator.\r\n ngModelCtrl.$validators.min = function (modelValue, viewValue) {\r\n var value = modelValue || viewValue;\r\n\r\n // When the directive is active and the user enters 00:00,\r\n // we want to consider it valid even though it doesn't meet the native min.\r\n if (scope.endTimeInput && value instanceof Date &&\r\n value.getHours() === 0 && value.getMinutes() === 0) {\r\n return true;\r\n }\r\n // Otherwise, fall back to the original validator.\r\n return originalMinValidator(modelValue, viewValue);\r\n };\r\n }\r\n });\r\n\r\n // Observe the endTime attribute so we know when to apply this directive's behavior.\r\n attrs.$observe('endTimeInput', function (val) {\r\n scope.endTimeInput = scope.$eval(val) === true;\r\n });\r\n }\r\n };\r\n });\r\n\r\n app.component('bindingRefresher', {\r\n transclude: true,\r\n bindings: {\r\n condition: '<'\r\n },\r\n controller: ['$element', '$transclude', '$scope', function ($element, $transclude, $scope) {\r\n var childScope;\r\n\r\n var ctrl = this;\r\n\r\n ctrl.$onChanges = function (changes) {\r\n // When the 'condition' binding changes, refresh the transcluded content\r\n if (changes.condition && !changes.condition.isFirstChange() && changes.condition.currentValue !== changes.condition.previousValue) {\r\n refreshContent();\r\n }\r\n }\r\n\r\n // Initial content rendering\r\n ctrl.$onInit = function () {\r\n refreshContent();\r\n }\r\n\r\n ctrl.$onDestroy = function() {\r\n destroyChildScope();\r\n }\r\n\r\n function refreshContent() {\r\n destroyChildScope();\r\n\r\n $element.empty();\r\n\r\n $transclude(function (clone, newScope) {\r\n childScope = newScope;\r\n $element.append(clone);\r\n });\r\n }\r\n\r\n function destroyChildScope() {\r\n if (childScope) {\r\n childScope.$destroy();\r\n childScope = null;\r\n }\r\n }\r\n }\r\n ]});\r\n})();","(function () {\r\n\t'use strict';\r\n\r\n\tangular\r\n\t\t.module('app.filters.moment', [])\r\n\t\t.filter('moment', function () {\r\n\t\t\treturn function (date, format) {\r\n\t\t\t\tif (angular.isUndefined(format) || format == null) {\r\n\t\t\t\t\tformat = 'YYYY-MM-DD HH:mm';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (angular.isString(date)) {\r\n\t\t\t\t\tif (format == 'fromNow') {\r\n\t\t\t\t\t\treturn moment(date).fromNow();\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn moment(date).format(format);\r\n\t\t\t\t} else if (moment.isMoment(date) || (moment.isDuration(date) && date.format)) {\r\n\t\t\t\t\treturn date.format(format);\r\n\t\t\t\t}\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('duration', [\r\n\t\t\t'FormattingService',\r\n\t\t\tfunction (FormattingService) {\r\n\t\t\t\treturn function (durationString, decimalTime, skipUnit) {\r\n\t\t\t\t\treturn FormattingService.timespan.formatHM(durationString, decimalTime, skipUnit);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('formatDurationInHoursAndMinutes', [\r\n\t\t\t'FormattingService',\r\n\t\t\tfunction (FormattingService) {\r\n\t\t\t\treturn function (duration, shortFormat) {\r\n\t\t\t\t\tif (!duration) return '';\r\n\r\n\t\t\t\t\tif (angular.isNumber(duration)) {\r\n\t\t\t\t\t\tduration = Math.abs(duration);\r\n\t\t\t\t\t} else if (angular.isString(duration)) {\r\n\t\t\t\t\t\t// trim minus character from the start of the string\r\n if (duration.startsWith('-')) {\r\n duration = duration.substring(1);\r\n }\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (shortFormat === undefined) {\r\n shortFormat = true;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn FormattingService.formatDuration({ duration: moment.duration(duration), shortFormat: shortFormat });\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('durationBetweenDates', [\r\n\t\t\t'FormattingService',\r\n\t\t\tfunction (FormattingService) {\r\n\t\t\t\treturn function (startDate, endDate, formattingString) {\r\n\t\t\t\t\treturn FormattingService.date.durationBetween(startDate, endDate, formattingString);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('dayOfWeekName', [\r\n\t\t\tfunction () {\r\n\t\t\t\treturn function (dayIndex) {\r\n\t\t\t\t\treturn moment().day(dayIndex).format('dddd');\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t]);\r\n\r\n\tangular\r\n\t\t.module('app.filters', [])\r\n\t\t.filter('objValues', function () {\r\n\t\t\treturn function (obj) {\r\n\t\t\t\tif (angular.isObject(obj)) return Object.values(obj);\r\n\r\n\t\t\t\treturn undefined;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('enum', function () {\r\n\t\t\treturn function (value) {\r\n\t\t\t\tvar keys = [];\r\n\r\n\t\t\t\tfor (var i = 0; i < value.length; i++) {\r\n\t\t\t\t\tkeys.push({\r\n\t\t\t\t\t\tname: value[i].name,\r\n\t\t\t\t\t\tvalue: value[i].value,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn keys;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('textToHtml', [\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($sce) {\r\n\t\t\t\treturn function (text) {\r\n\t\t\t\t\tif (text) return $sce.trustAsHtml(text.replace(/(?:\\r\\n|\\r|\\n| | | | )/g, '
'));\r\n\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('markdownToHtml', [\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($sce) {\r\n\t\t\t\treturn function (text) {\r\n\t\t\t\t\tif (text) return $sce.trustAsHtml(marked.parse(text));\r\n\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('boolean', function () {\r\n\t\t\treturn function (value) {\r\n\t\t\t\treturn value == true ? 'Ja' : 'Nej';\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('take', function () {\r\n\t\t\treturn function (items, length) {\r\n\t\t\t\tif (_.isArray(items)) {\r\n\t\t\t\t\treturn _.take(items, length);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isEmpty', function () {\r\n\t\t\treturn function (obj) {\r\n\t\t\t\treturn !obj || (_.isArray(obj) && obj.length === 0);\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('hasItems', function () {\r\n\t\t\treturn function (obj) {\r\n\t\t\t\treturn obj && _.isArray(obj) && obj.length > 0;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isDefinedAndEmpty', function () {\r\n\t\t\treturn function (obj) {\r\n\t\t\t\treturn obj && _.isArray(obj) && obj.length === 0;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isArray', function () {\r\n\t\t\treturn function (obj) {\r\n\t\t\t\treturn _.isArray(obj);\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('reverse', function () {\r\n\t\t\treturn function (items) {\r\n\t\t\t\treturn typeof items !== 'undefined' ? items.slice().reverse() : items;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('trusted', [\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($sce) {\r\n\t\t\t\treturn function (text) {\r\n\t\t\t\t\treturn $sce.trustAsHtml(text);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('toSEK', function () {\r\n\t\t\treturn function (val, includeVat) {\r\n\t\t\t\tif (val === 0) return '0 kr';\r\n\r\n\t\t\t\tif (val) {\r\n\t\t\t\t\tvar number = new Number(val);\r\n\r\n\t\t\t\t\tif (includeVat) number = number * 1.25;\r\n\r\n\t\t\t\t\treturn number.toLocaleString('sv-SE', {\r\n\t\t\t\t\t\tstyle: 'currency',\r\n\t\t\t\t\t\tcurrency: 'SEK',\r\n\t\t\t\t\t\tmaximumFractionDigits: 2,\r\n\t\t\t\t\t\tminimumFractionDigits: 2,\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('formatNumber', function () {\r\n\t\t\treturn function (val) {\r\n\t\t\t\tif (val !== undefined && val !== null) {\r\n\t\t\t\t\tvar number = new Number(val);\r\n\r\n\t\t\t\t\treturn number.toLocaleString('sv-SE', { maximumFractionDigits: 2 });\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn null;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('anonymizeSSN', [\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($sce) {\r\n\t\t\t\treturn function (ssn) {\r\n\t\t\t\t\tif (ssn) {\r\n\t\t\t\t\t\tvar parts = ssn.split('-');\r\n\t\t\t\t\t\tif (parts.length === 2) {\r\n\t\t\t\t\t\t\treturn $sce.trustAsHtml(parts[0] + '-XXXX');\r\n\t\t\t\t\t\t\t//return $sce.trustAsHtml(parts[0] + '-' + '' + parts[1] + '');\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn ssn;\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('previousDay', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\treturn moment(date).add(-1, 'day');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('dateIsSameOrAfter', function () {\r\n\t\t\treturn function (date1, date2) {\r\n\t\t\t\treturn moment(date1).isSame(moment(date2)) || moment(date1).isAfter(moment(date2));\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('dateIsSameDay', function () {\r\n\t\t\treturn function (date1, date2) {\r\n\t\t\t\treturn moment(date2).local().startOf('day').diff(moment(date1).local().startOf('day'), 'hours') <= 24;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('dateIsAfter', function () {\r\n\t\t\treturn function (date1, date2) {\r\n\t\t\t\treturn moment(date1).isAfter(moment(date2));\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('dateIsToday', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\treturn moment(date).isSame(moment(), 'd');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('fromNow', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return '';\r\n\r\n\t\t\t\treturn moment(date).fromNow();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toDateString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return '';\r\n\r\n\t\t\t\treturn moment(date).format('L');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toEndDateString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tvar mDate = moment(date);\r\n\t\t\t\tif (mDate.hours() === 0 && mDate.minutes() === 0 && mDate.seconds() === 0 && mDate.milliseconds() === 0) {\r\n\t\t\t\t\tmDate.subtract(1, 'milliseconds');\r\n\t\t\t\t}\r\n\t\t\t\treturn mDate.format('L');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toDateTimeString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return '';\r\n\r\n\t\t\t\treturn moment(date).format('L LT');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toFullDateString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\treturn moment(date).format('dddd LL');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toDayMonthYearString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\treturn moment(date).format('D MMM YYYY');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toMonthYearString', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return '';\r\n\r\n\t\t\t\treturn moment(date).format('MMMM YYYY');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toDateSpanString', [\r\n\t\t\t'toEndDateStringFilter',\r\n\t\t\tfunction (toEndDateStringFilter) {\r\n\t\t\t\treturn function (date1, date2) {\r\n\t\t\t\t\tif (!date1) return '';\r\n\r\n\t\t\t\t\tif (!date2) return moment(date1).local().format('L') + ' – ';\r\n\r\n\t\t\t\t\tif (datesAreStartAndEndOfMonth(date1, date2)) {\r\n\t\t\t\t\t\treturn moment(date1).local().format('MMMM YYYY');\r\n\t\t\t\t\t} else if (moment(date2).local().startOf('day').diff(moment(date1).local().startOf('day'), 'hours') <= 24) {\r\n\t\t\t\t\t\treturn moment(date1).local().format('L');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn moment(date1).local().format('L') + ' – ' + toEndDateStringFilter(moment(date2).local());\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('timeIntervalToDateSpanString', [\r\n\t\t\t'toDateSpanStringFilter',\r\n\t\t\tfunction (toDateSpanStringFilter) {\r\n\t\t\t\treturn function (timeInterval) {\r\n\t\t\t\t\tif (!timeInterval) return '';\r\n\r\n\t\t\t\t\tvar intervalDates = timeInterval.split(',');\r\n\r\n\t\t\t\t\treturn toDateSpanStringFilter(intervalDates[0], intervalDates[1]);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('dateIsBetween', [\r\n\t\t\tfunction () {\r\n\t\t\t\treturn function (date, startDate, endDate) {\r\n\t\t\t\t\tif (!date || !startDate || !endDate) return false;\r\n\r\n\t\t\t\t\treturn moment(date).isBetween(moment(startDate), moment(endDate));\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('dateToJSON', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return '';\r\n\r\n\t\t\t\treturn moment(date).toJSON();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toLocalDate', function () {\r\n\t\t\treturn function (date) {\r\n\t\t\t\tif (!date) return undefined;\r\n\r\n\t\t\t\treturn moment(date).local();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toNumWeeksString', function () {\r\n\t\t\treturn function (numWeeks) {\r\n\t\t\t\tif (numWeeks == 1) return numWeeks + ' vecka';\r\n\r\n\t\t\t\treturn numWeeks + ' veckor';\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('durationIsLongerThan', function () {\r\n\t\t\treturn function (timespan1, timespan2) {\r\n\t\t\t\treturn moment.duration(timespan1).asSeconds() > moment.duration(timespan2).asSeconds();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('durationIsNegative', function () {\r\n\t\t\treturn function (duration) {\r\n\t\t\t\treturn moment.duration(duration).asSeconds() < 0;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('durationPercentageOf', function () {\r\n\t\t\treturn function (timespan1, timespan2) {\r\n\t\t\t\tvar totalSeconds = moment.duration(timespan2).asSeconds();\r\n\r\n\t\t\t\tif (totalSeconds === 0) return 0;\r\n\r\n\t\t\t\treturn (moment.duration(timespan1).asSeconds() / totalSeconds) * 100;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toHoursMinutes', function () {\r\n\t\t\treturn function (timespan) {\r\n\t\t\t\tvar duration = moment.duration(timespan);\r\n\r\n\t\t\t\treturn duration.format('h:mm', { trim: false });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('formatHHmm', function () {\r\n\t\t\treturn function (hours, minutes) {\r\n\t\t\t\tvar duration = moment.duration({\r\n\t\t\t\t\thours: hours,\r\n\t\t\t\t\tminutes: minutes,\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn duration.format('h:mm', { trim: false });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('padNumber', function () {\r\n\t\t\treturn function (number, targetLength) {\r\n\t\t\t\treturn String(number).padStart(targetLength, '0');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toHoursMinutesFull', function () {\r\n\t\t\treturn function (timespan) {\r\n\t\t\t\tvar duration = moment.duration(timespan);\r\n\r\n\t\t\t\treturn duration.format('HH:mm', { trim: false });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toHours', function () {\r\n\t\t\treturn function (timespan) {\r\n\t\t\t\tvar duration = moment.duration(timespan);\r\n\r\n\t\t\t\treturn duration.format('h', { trim: false });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('durationAsMonths', function () {\r\n\t\t\treturn function (timespan) {\r\n\t\t\t\treturn moment.duration(timespan).asMonths();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('formatDuration', function () {\r\n\t\t\treturn function (timespan, formatString) {\r\n\t\t\t\tif (formatString) return moment.duration(timespan).format(formatString);\r\n\r\n\t\t\t\treturn moment.duration(timespan).format();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toDecimalHours', function () {\r\n\t\t\treturn function (timespan) {\r\n\t\t\t\tvar duration = moment.duration(timespan);\r\n\r\n\t\t\t\treturn duration.format('h', {\r\n\t\t\t\t\ttrim: false,\r\n\t\t\t\t\tprecision: 2,\r\n\t\t\t\t\tdecimalSeparator: ',',\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('numberToFullMonth', function () {\r\n\t\t\treturn function (monthNumber) {\r\n\t\t\t\tif (!monthNumber) return '';\r\n\r\n\t\t\t\treturn moment()\r\n\t\t\t\t\t.month(monthNumber - 1)\r\n\t\t\t\t\t.format('MMMM');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('indexToMonth', function () {\r\n\t\t\treturn function (monthIndex) {\r\n\t\t\t\tif (monthIndex === null) return '';\r\n\r\n\t\t\t\treturn moment().month(monthIndex).format('MMM');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('indexToMonthNo', function () {\r\n\t\t\treturn function (monthIndex) {\r\n\t\t\t\tif (monthIndex === null) return '';\r\n\r\n\t\t\t\treturn moment().month(monthIndex).format('MM');\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isNonZeroTimeSpan', function () {\r\n\t\t\treturn function (timespanString) {\r\n\t\t\t\tif (timespanString) {\r\n\t\t\t\t\treturn timespanString !== '00:00:00' && timespanString !== '0:00';\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isEffectiveDate', function () {\r\n\t\t\treturn function (dateString) {\r\n\t\t\t\tif (dateString) {\r\n\t\t\t\t\treturn moment(dateString) <= moment().utc();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn false;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('ceil', function () {\r\n\t\t\treturn function (number) {\r\n\t\t\t\tif (number) {\r\n\t\t\t\t\treturn Math.ceil(number);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 0;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('datespan', function () {\r\n\t\t\treturn function (dateStart, dateEnd) {\r\n\t\t\t\treturn moment(dateStart).twix(dateEnd).format({ hourFormat: '', implicitYear: true });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('dateTimeSpan', function () {\r\n\t\t\treturn function (dateStart, dateEnd) {\r\n\t\t\t\tlet startMoment = moment(dateStart);\r\n\t\t\t\tlet endMoment = moment(dateEnd);\r\n\r\n\t\t\t\tlet endMomentIsStartOfDay = endMoment.clone().startOf('day').isSame(endMoment);\r\n\t\t\t\tif (endMomentIsStartOfDay) {\r\n\t\t\t\t\tendMoment.add(-1, 'ms');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn startMoment.twix(endMoment).format({\r\n\t\t\t\t\thourFormat: 'HH',\r\n\t\t\t\t\thideTime: startMoment.clone().startOf('day').isSame(startMoment) && endMomentIsStartOfDay,\r\n\t\t\t\t\thideYear: startMoment.year() === endMoment.year()\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('shiftTimeSpan', function () {\r\n\t\t\treturn function (shift) {\r\n\t\t\t\tif (!shift) return '';\r\n\t\t\t\treturn moment(shift.dateBegin)\r\n\t\t\t\t\t.twix(shift.dateEnd)\r\n\t\t\t\t\t.format({ hourFormat: 'HH', hideDate: true });\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('shiftDuration', [\r\n\t\t\t'FormattingService',\r\n\t\t\tfunction (FormattingService) {\r\n\t\t\t\treturn function (shift, decimalTime) {\r\n\t\t\t\t\treturn FormattingService.shift.duration(shift, decimalTime);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('shiftHasPassed', function () {\r\n\t\t\treturn function (shift) {\r\n\t\t\t\treturn moment(shift.dateEnd) <= moment();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('shiftHasStarted', function () {\r\n\t\t\treturn function (shift) {\r\n\t\t\t\treturn moment(shift.dateBegin) <= moment();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('shiftDeviationDescription', [\r\n\t\t\t'FormattingService',\r\n\t\t\tfunction (FormattingService) {\r\n\t\t\t\treturn function (shift, decimalTime) {\r\n\t\t\t\t\tvar descriptions = [];\r\n\r\n\t\t\t\t\tif (shift.deviationStart) {\r\n\t\t\t\t\t\tvar durationStart = moment.duration(shift.deviationStart);\r\n\t\t\t\t\t\tvar durationStartFormatted = durationStart.format('h [tim] m [min]').replace('-', '');\r\n\r\n\t\t\t\t\t\tif (durationStart.asMilliseconds() > 0) {\r\n\t\t\t\t\t\t\tdescriptions.push('började ' + durationStartFormatted + ' tidigare');\r\n\t\t\t\t\t\t} else if (durationStart.asMilliseconds() < 0) {\r\n\t\t\t\t\t\t\tdescriptions.push('kom sent ' + durationStartFormatted);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (shift.deviationEnd) {\r\n\t\t\t\t\t\tvar durationEnd = moment.duration(shift.deviationEnd);\r\n\t\t\t\t\t\tvar durationEndFormatted = durationEnd.format('h [tim] m [min]').replace('-', '');\r\n\r\n\t\t\t\t\t\tif (durationEnd.asMilliseconds() < 0) {\r\n\t\t\t\t\t\t\tdescriptions.push('slutade ' + durationEndFormatted + ' tidigare');\r\n\t\t\t\t\t\t} else if (durationEnd.asMilliseconds() > 0) {\r\n\t\t\t\t\t\t\tdescriptions.push('jobbade över ' + durationEndFormatted);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn descriptions.join(', ');\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('clientProfileUrl', function () {\r\n\t\t\treturn function (clientId) {\r\n\t\t\t\treturn '/client/profile/' + clientId;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('clientProfileLink', [\r\n\t\t\t'$rootScope',\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($rootScope, $sce) {\r\n\t\t\t\treturn function (client) {\r\n\t\t\t\t\tif ($rootScope.userHasClientAccess) {\r\n\t\t\t\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\t\t\t\t'' + client.fullName + ''\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn client.fullName;\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('shiftUrl', function () {\r\n\t\t\treturn function (shift, clientId) {\r\n\t\t\t\treturn '/client/schedule/' + clientId + '?scheduleRowId=' + shift.id + '&view=week';\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('shiftType', [\r\n\t\t\t'shiftStatusHelper',\r\n\t\t\t'$window',\r\n\t\t\tfunction (shiftStatusHelper, $window) {\r\n\t\t\t\treturn function (shift) {\r\n\t\t\t\t\treturn _.map(\r\n\t\t\t\t\t\tshiftStatusHelper.getStatusFlags(shift.status, shiftStatusHelper.getInternalStatuses()),\r\n\t\t\t\t\t\tfunction (flag) {\r\n\t\t\t\t\t\t\tvar name = flag.name;\r\n\t\t\t\t\t\t\tif ((shift.status & $window.enums.scheduleStatus.hospitalVisit.value) !== 0)\r\n\t\t\t\t\t\t\t\tname += ' vid sjukhusvistelse';\r\n\r\n\t\t\t\t\t\t\tif (shift.temporaryExtension) {\r\n\t\t\t\t\t\t\t\tswitch (shift.temporaryExtensionLevel) {\r\n\t\t\t\t\t\t\t\t\tcase 0:\r\n\t\t\t\t\t\t\t\t\t\tname += ' (tillfällig utökning)';\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\t\t\t\t\tname += ' (tillfällig utökning från väntetid)';\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\t\t\t\t\tname += ' (tillfällig utökning från beredskap)';\r\n\t\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\treturn name;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('fullNameInitials', function () {\r\n\t\t\treturn function (fullName) {\r\n\t\t\t\tif (fullName && fullName.indexOf('[Dolt namn]') === -1) {\r\n\t\t\t\t\tvar initials = '';\r\n\t\t\t\t\tvar numInitials = 0;\r\n\t\t\t\t\tvar nameParts = fullName.split(/[\\s,\\-\\/]+/);\r\n\t\t\t\t\tfor (var i = 0; i < nameParts.length; i++) {\r\n\t\t\t\t\t\tif (nameParts[i]) {\r\n\t\t\t\t\t\t\tinitials += nameParts[i][0].toUpperCase();\r\n\t\t\t\t\t\t\tnumInitials++;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (numInitials == 3) {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn initials;\r\n\t\t\t\t}\r\n\t\t\t\treturn '?';\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('staffProfileUrl', function () {\r\n\t\t\treturn function (staff) {\r\n\t\t\t\treturn staff ? '/staff/profile/' + staff.id : undefined;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('staffProfileLink', [\r\n\t\t\t'$rootScope',\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($rootScope, $sce) {\r\n\t\t\t\treturn function (staff) {\r\n\t\t\t\t\tif ($rootScope.userHasStaffAccess) {\r\n\t\t\t\t\t\treturn $sce.trustAsHtml(\r\n\t\t\t\t\t\t\t'' + staff.fullName + ''\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn staff.fullName;\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('personContactDetailsHtml', [\r\n\t\t\t'$rootScope',\r\n\t\t\t'$sce',\r\n\t\t\tfunction ($rootScope, $sce) {\r\n\t\t\t\treturn function (person) {\r\n\t\t\t\t\tvar stringBuilder = [];\r\n\t\t\t\t\tif (person.telephone) {\r\n\t\t\t\t\t\tstringBuilder.push(\r\n\t\t\t\t\t\t\t'' +\r\n\t\t\t\t\t\t\t\tperson.telephone +\r\n\t\t\t\t\t\t\t\t''\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn $sce.trustAsHtml(stringBuilder.join(''));\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('staffScheduleShiftUrl', function () {\r\n\t\t\treturn function (shift) {\r\n\t\t\t\treturn '/staff/schedule/' + shift.staff.id + '?scheduleRowId=' + shift.id;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('staffTimesheetUrl', function () {\r\n\t\t\treturn function (staff) {\r\n\t\t\t\treturn '/staff/shifts/' + staff.id;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('humanizeBoolString', function () {\r\n\t\t\treturn function (boolString) {\r\n\t\t\t\tswitch (boolString.toLowerCase()) {\r\n\t\t\t\t\tcase 'true':\r\n\t\t\t\t\t\treturn 'Ja';\r\n\t\t\t\t\tcase 'false':\r\n\t\t\t\t\t\treturn 'Nej';\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn '';\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('toLowerCase', function () {\r\n\t\t\treturn function (str) {\r\n\t\t\t\tif (!str) return '';\r\n\r\n\t\t\t\treturn str.toLowerCase();\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('capitalizeFirstLetter', function () {\r\n\t\t\treturn function (str) {\r\n\t\t\t\treturn firstCharToUpperCase(str);\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('some', function () {\r\n\t\t\treturn function (collection, predicate) {\r\n\t\t\t\treturn _.some(collection, predicate);\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('sumBy', function () {\r\n\t\t\treturn function (item, propertyName) {\r\n\t\t\t\treturn _.sumBy(item, propertyName);\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('hasValue', function () {\r\n\t\t\treturn function (value) {\r\n\t\t\t\treturn value !== undefined && value !== null && value !== '';\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('isNumber', function () {\r\n\t\t\treturn function (value) {\r\n\t\t\t\treturn angular.isNumber(value);\r\n\t\t\t};\r\n\t\t})\r\n\t\t//.filter('every', function () {\r\n\t\t// return function (item, propertyName) {\r\n\t\t// return _.every(item, propertyName);\r\n\t\t// };\r\n\t\t//})\r\n\t\t.filter('someNonEmptyArray', function () {\r\n\t\t\treturn function (collection, arrayProperty) {\r\n\t\t\t\treturn _.some(collection, function (i) {\r\n\t\t\t\t\treturn i[arrayProperty] && i[arrayProperty].length > 0;\r\n\t\t\t\t});\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('numNonZeroTimeSpans', function () {\r\n\t\t\treturn function (collection, timeSpanProperty) {\r\n\t\t\t\treturn _.filter(collection, function (i) {\r\n\t\t\t\t\treturn i[timeSpanProperty] !== '00:00:00';\r\n\t\t\t\t}).length;\r\n\t\t\t};\r\n\t\t})\r\n\t\t.filter('absenceStatusText', [\r\n\t\t\t'shiftStatusHelper',\r\n\t\t\t'$window',\r\n\t\t\tfunction (shiftStatusHelper, $window) {\r\n\t\t\t\treturn function (shift) {\r\n\t\t\t\t\tvar status = shiftStatusHelper.getAbsenceStatusItem(shift);\r\n\r\n\t\t\t\t\tif (status !== undefined) {\r\n\t\t\t\t\t\tvar statusText = status.name;\r\n\r\n\t\t\t\t\t\tif (status.value === $window.enums.scheduleStatus.sickLeave.value) {\r\n\t\t\t\t\t\t\tvar sickLeavePeriodStatus = shiftStatusHelper.getSickLeavePeriodStatusItem(shift);\r\n\r\n\t\t\t\t\t\t\tif (sickLeavePeriodStatus !== undefined) {\r\n\t\t\t\t\t\t\t\tstatusText += ' (' + sickLeavePeriodStatus.name.toLowerCase() + ')';\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\treturn statusText;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn '';\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('merge', [\r\n\t\t\tfunction () {\r\n\t\t\t\treturn function (dest, source) {\r\n\t\t\t\t\treturn merge(dest, source);\r\n\t\t\t\t};\r\n\t\t\t},\r\n\t\t])\r\n\t\t.filter('propValues', function () {\r\n\t\t\treturn function (inputObj, objPropKeys) {\r\n\t\t\t\tif (!angular.isObject(inputObj) || !angular.isArray(objPropKeys)) {\r\n\t\t\t\t\treturn inputObj;\r\n\t\t\t\t}\r\n\t\t\t\treturn objPropKeys.map(prop => inputObj[prop]);\r\n\t\t\t};\r\n\t\t});\r\n})();\r\n","window.appVersion = '1.37.0.14';\r\n","class Api {\r\n constructor({ api, $q, $http, $window, responseHelper }) {\r\n Object.assign(this, api);\r\n this.$q = $q;\r\n this.$http = $http;\r\n this.$window = $window;\r\n this.responseHelper = responseHelper;\r\n }\r\n\r\n post({ endpointName, pathParams, queryParams, data, precondition = null } = {}) {\r\n return this._request({\r\n method: 'post',\r\n endpointName,\r\n pathParams,\r\n queryParams,\r\n data,\r\n precondition\r\n });\r\n }\r\n\r\n get({ endpointName, pathParams, queryParams, precondition = null } = {}) {\r\n\r\n return this._request({\r\n method: 'get',\r\n endpointName,\r\n pathParams,\r\n queryParams,\r\n precondition\r\n });\r\n }\r\n\r\n put({ endpointName, pathParams, queryParams, data, precondition = null } = {}) {\r\n return this._request({\r\n method: 'put',\r\n endpointName,\r\n pathParams,\r\n queryParams,\r\n data,\r\n precondition\r\n });\r\n }\r\n\r\n delete({ endpointName, pathParams, queryParams, data, precondition = null } = {}) {\r\n return this._request({\r\n method: 'delete',\r\n endpointName,\r\n pathParams,\r\n queryParams,\r\n data,\r\n precondition\r\n });\r\n }\r\n\r\n _request({ method, endpointName, pathParams, queryParams, data, precondition = null } = {}) {\r\n if (!precondition || precondition()) {\r\n var endpointUrl = this._prepareEndpointUrl(endpointName, pathParams);\r\n\r\n return this.$http({\r\n method: method,\r\n url: endpointUrl,\r\n params: queryParams,\r\n data: data,\r\n headers: {\r\n // Ensures consistent Content-Type header\r\n // Without this configuration $http defaults to 'text/plain;charset=UTF-8' for 'delete' method\r\n // which breaks request parameter binding in backend\r\n 'Content-Type': 'application/json;charset=UTF-8' \r\n }\r\n }).then(response => response.data)\r\n .catch(error => this._handleError(error));\r\n }\r\n\r\n return this.$q.resolve();\r\n }\r\n\r\n _prepareEndpointUrl(endpointName, pathParams) {\r\n if (!endpointName) throw new Error('endpoint must be set');\r\n var routes = this.endpointRoutes[endpointName];\r\n\r\n // If no pathParams provided, find the first route without parameters, or use first route if none found\r\n if (!pathParams || Object.keys(pathParams).length === 0) {\r\n // Try to find a route without parameters first\r\n for (let i = 0; i < routes.length; i++) {\r\n const route = routes[i];\r\n const unreplacedParams = this._findUnreplacedParams(route);\r\n if (unreplacedParams.length === 0) {\r\n // Found a route with no parameters\r\n return route;\r\n }\r\n }\r\n\r\n // If no parameterless route found, use the first route but check for required parameters\r\n const route = routes[0];\r\n const unreplacedParams = this._findUnreplacedParams(route);\r\n if (unreplacedParams.length > 0) {\r\n throw new Error(`Route for '${endpointName}' requires parameters: ${unreplacedParams.join(', ')}`);\r\n }\r\n return route;\r\n }\r\n\r\n // Find the first route that contains all parameters in pathParams\r\n for (let i = 0; i < routes.length; i++) {\r\n const route = routes[i];\r\n const paramNames = [];\r\n const simplifiedParams = {};\r\n const paramRegex = /{([^:}]+)(?::([^}]+))?}/g;\r\n let match;\r\n\r\n // Extract all parameter names from this route\r\n while ((match = paramRegex.exec(route)) !== null) {\r\n const fullParam = match[0]; // e.g. {staffId:int} or {name}\r\n const paramName = match[1]; // e.g. staffId or name\r\n paramNames.push(paramName);\r\n\r\n // Check if the simplified param exists\r\n if (pathParams[paramName] !== undefined) {\r\n simplifiedParams[fullParam] = pathParams[paramName];\r\n }\r\n }\r\n\r\n // Check if all path parameters are found in this route\r\n const allParamsFound = Object.keys(pathParams).every(param =>\r\n paramNames.includes(param) || // Check by parameter name (simplified format)\r\n route.includes(param) // Check by template format (e.g. {staffId:int})\r\n );\r\n\r\n if (allParamsFound) {\r\n // Use simplified params if available\r\n let processedEndpoint;\r\n if (Object.keys(simplifiedParams).length > 0) {\r\n processedEndpoint = this._replacePathParams(route, simplifiedParams);\r\n } else {\r\n processedEndpoint = this._replacePathParams(route, pathParams);\r\n }\r\n\r\n // Check if there are any unreplaced parameters\r\n const unreplacedParams = this._findUnreplacedParams(processedEndpoint);\r\n if (unreplacedParams.length > 0) {\r\n throw new Error(`Missing required parameters for route '${endpointName}': ${unreplacedParams.join(', ')}`);\r\n }\r\n\r\n return processedEndpoint;\r\n }\r\n }\r\n\r\n // If we got here, no route contained all parameters\r\n throw new Error(`No route for '${endpointName}' contains all required parameters: ${Object.keys(pathParams).join(', ')}`);\r\n }\r\n\r\n _replacePathParams(endpoint, pathParams) {\r\n if (pathParams) {\r\n Object.keys(pathParams).forEach(key => {\r\n endpoint = endpoint.replace(key, pathParams[key]);\r\n });\r\n }\r\n return endpoint;\r\n }\r\n\r\n // Helper function to find unreplaced parameters in a processed endpoint\r\n _findUnreplacedParams(endpoint) {\r\n const paramRegex = /{([^:}]+)(?::([^}]+))?}/g;\r\n const unreplacedParams = [];\r\n let match;\r\n\r\n while ((match = paramRegex.exec(endpoint)) !== null) {\r\n unreplacedParams.push(match[1]); // Add the parameter name\r\n }\r\n\r\n return unreplacedParams;\r\n }\r\n\r\n // copied from legacy requestHelper service\r\n _handleError(response) {\r\n if (response.status === -1) {\r\n var error = new Error('Kan inte ansluta till servern');\r\n\r\n throw error;\r\n } else {\r\n var errorMessage = this.responseHelper.getException(response.data);\r\n\r\n var error = new Error(errorMessage);\r\n\r\n switch (response.status) {\r\n case 401:\r\n log.info(errorMessage);\r\n $timeout(function () {\r\n log.info('Du loggas nu ut...');\r\n $timeout(function () {\r\n this.$window.location.reload();\r\n }, 2000);\r\n }, 2000);\r\n error.isHandled = true;\r\n break;\r\n case 403:\r\n error.isHandled = true;\r\n break;\r\n case 404:\r\n error.isHandled = true;\r\n break;\r\n default:\r\n error.isHandled = false;\r\n break;\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n}","class CurrentUser {\r\n constructor({ serverData, rootScope }) {\r\n Object.assign(this, serverData);\r\n\r\n Object.keys(this.clientScheduleAccess).forEach(clientId => {\r\n this.clientScheduleAccess[clientId] = new ClientScheduleAccess({ serverData: this.clientScheduleAccess[clientId] });\r\n })\r\n\r\n this.rootScope = rootScope;\r\n }\r\n\r\n hasClientScheduleReadAccess({ clientId, start = null, end = null, wholePeriod = true } = {}) {\r\n if (this.rootScope.userHasClientScheduleAdminAccess) return true;\r\n\r\n let clientScheduleAccess = this.clientScheduleAccess[clientId];\r\n\r\n if (!hasValue(clientScheduleAccess) || !hasValue(clientScheduleAccess.read) || !hasValue(clientScheduleAccess.read.period)) {\r\n return false;\r\n }\r\n\r\n if (start instanceof Date && end instanceof Date) {\r\n if (wholePeriod) {\r\n return clientScheduleAccess.read.period.contains({ start: start, end: end });\r\n }\r\n\r\n return clientScheduleAccess.read.period.intersects({ start: start, end: end });\r\n } else {\r\n return clientScheduleAccess.read.now || clientScheduleAccess.read.future;\r\n }\r\n }\r\n\r\n hasClientScheduleModifyAccess({ clientId, start, end, wholePeriod = true } = {}) {\r\n\r\n if (this.rootScope.userHasClientScheduleAdminAccess) return true;\r\n\r\n let clientScheduleAccess = this.clientScheduleAccess[clientId];\r\n\r\n if (!hasValue(clientScheduleAccess) || !hasValue(clientScheduleAccess.modify) || !hasValue(clientScheduleAccess.modify.period)) {\r\n return false;\r\n }\r\n\r\n if (wholePeriod) {\r\n return clientScheduleAccess.modify.period.contains({ start: start, end: end });\r\n }\r\n\r\n return clientScheduleAccess.modify.period.intersects({ start: start, end: end }); \r\n }\r\n}\r\n\r\nclass ClientScheduleAccess {\r\n constructor({ serverData }) {\r\n this.read = new ClientScheduleAccessType({ serverData: serverData.read });\r\n this.modify = new ClientScheduleAccessType({ serverData: serverData.modify });\r\n }\r\n}\r\n\r\nclass ClientScheduleAccessType {\r\n constructor({ serverData }) {\r\n this.period = serverData.period ? new TimeInterval(serverData.period) : null;\r\n }\r\n\r\n //get period() {\r\n // return this.period;\r\n //}\r\n\r\n get now() {\r\n return hasValue(this.period) && this.period.isActive;\r\n }\r\n\r\n get future() {\r\n return hasValue(this.period) && this.period.isFuture;\r\n }\r\n}\r\n\r\nclass TimeInterval {\r\n constructor({ start, end }) {\r\n this.start = new Date(start);\r\n this.end = new Date(end);\r\n }\r\n\r\n //get start() {\r\n // return this.start;\r\n //}\r\n\r\n //get end() {\r\n // return this.end;\r\n //}\r\n\r\n get duration() {\r\n return this.end - this.start;\r\n }\r\n\r\n get isActive() {\r\n let now = new Date();\r\n return now >= this.start && now < this.end;\r\n }\r\n\r\n get isFuture() {\r\n return this.start > new Date();\r\n }\r\n\r\n contains({ start, end }) {\r\n return (start >= this.start && start < this.end) // start date is within period\r\n && (end > this.start && end <= this.end) // end date is within period\r\n }\r\n\r\n intersects({ start, end }) {\r\n return (start >= this.start && start < this.end) // start date is within period\r\n || (end > this.start && end <= this.end) // OR end date is within period\r\n || (start < this.start && end > this.end); // OR start date and end date completely overlaps period\r\n }\r\n}\r\n\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n app.directive('autoResize', ['$timeout', function ($timeout) {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element, attrs) {\r\n\r\n element.css({ 'height': 'auto', 'overflow-y': 'hidden' });\r\n $timeout(function () {\r\n resize();\r\n }, 250);\r\n\r\n element.on('input focus', function () {\r\n resize();\r\n });\r\n\r\n scope.$on('collapsableFieldset.collapsedStateChange', function (e, collapsed) {\r\n if (!collapsed) {\r\n $timeout(function () {\r\n resize();\r\n });\r\n }\r\n });\r\n\r\n function resize() {\r\n element.css({ 'height': 'auto', 'overflow-y': 'hidden' });\r\n element.css('height', Math.max(Math.max(20, attrs.rows * 20 + 10), element[0].scrollHeight) + 'px');\r\n }\r\n }\r\n };\r\n }]);\r\n})();","class DateUtils {\r\n\r\n static getMonthDateInterval(date) {\r\n // Get start and end date of month from date \r\n let start = new Date(date.getFullYear(), date.getMonth(), 1);\r\n let end = new Date(date.getFullYear(), date.getMonth() + 1, 1);\r\n\r\n return { start: start, end: end };\r\n }\r\n\r\n static isSameDate(firstDate, secondDate) {\r\n return firstDate && secondDate && firstDate.toDateString() === secondDate.toDateString();\r\n }\r\n\r\n static sameDay(beginDate, endDate) {\r\n return beginDate.toDateString() === endDate.toDateString() ||\r\n (beginDate.toDateString() === DateUtils.subtractOneDay(endDate).toDateString() && endDate.getHours() === 0 && endDate.getMinutes() === 0)\r\n }\r\n\r\n static isStartOfDay(date) {\r\n if (!date) return false;\r\n return date.getHours() === 0 && date.getMinutes() === 0 && date.getSeconds() === 0 && date.getMilliseconds() === 0;\r\n }\r\n\r\n static addOneDay(date) {\r\n if (date) {\r\n let newDate = new Date(date);\r\n newDate.setDate(date.getDate() + 1);\r\n return newDate;\r\n }\r\n\r\n return date;\r\n }\r\n\r\n static subtractOneDay(date) {\r\n if (date) {\r\n let newDate = new Date(date);\r\n newDate.setDate(date.getDate() - 1);\r\n return newDate;\r\n }\r\n\r\n return date;\r\n }\r\n}\r\n","class DateInputUtils {\r\n\r\n static get minMaxFormat() {\r\n return 'YYYY-MM-DDTHH:mm';\r\n }\r\n\r\n static getMinDateString({ date, exclusive = true } = {}) {\r\n if (!date) {\r\n return undefined;\r\n }\r\n\r\n let minDate = moment(date);\r\n\r\n if (exclusive) {\r\n minDate.add(1, 'minutes');\r\n }\r\n\r\n return minDate.format(this.minMaxFormat);\r\n }\r\n\r\n static getMaxDateString({ date, exclusive = true } = {}) {\r\n if (!date) {\r\n return undefined;\r\n }\r\n\r\n let maxDate = moment(date);\r\n\r\n if (exclusive) {\r\n maxDate.add(-1, 'minutes');\r\n }\r\n\r\n return maxDate.format(this.minMaxFormat);\r\n }\r\n}","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'appService';\r\n angular.module('app').factory(serviceId, [\r\n '$rootScope', '$http', '$q', '$interval', '$timeout', 'locationService', 'requestHelper', 'responseHelper', 'logger', 'detectUtils', '$window',\r\n function ($rootScope, $http, $q, $interval, $timeout, locationService, requestHelper, responseHelper, logger, detectUtils, $window) {\r\n\r\n var localAppVersion = window.appVersion;\r\n var newAppVersionDetected = false;\r\n var checkingAppStatus = false;\r\n var newVersionReloadInterval = null;\r\n var apis = undefined;\r\n var clientApiAccessControlMaps = {};\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n var baseApiUrl = 'api/app';\r\n\r\n var getLocalAppVersion = function () {\r\n return localAppVersion;\r\n };\r\n\r\n var getAppStatus = function () {\r\n return requestHelper.get(baseApiUrl, 'status');\r\n };\r\n\r\n var initApis = function () {\r\n return requestHelper.get(baseApiUrl, 'apis').then(function (response) {\r\n apis = response;\r\n clientApiAccessControlMaps = {};\r\n\r\n log.debug('APIs initialized', apis);\r\n\r\n return apis;\r\n });\r\n };\r\n\r\n var getApi = function (api) {\r\n if (apis) {\r\n var api = apis[api];\r\n\r\n if (api) return new Api({ api, $q, $http, $window, responseHelper });\r\n }\r\n\r\n return {};\r\n }\r\n\r\n function getClientApiAccessControlMap(apiName, clientId) {\r\n\r\n if (!apis) {\r\n return $q.reject({});\r\n }\r\n\r\n var apiAccessControlMap = apis[apiName];\r\n\r\n if (!apiAccessControlMap) {\r\n clientApiAccessControlMaps[clientId] = {};\r\n clientApiAccessControlMaps[clientId][apiName] = {};\r\n\r\n return $q.resolve(clientApiAccessControlMaps[clientId][apiName]);\r\n }\r\n\r\n var clientApiAccessControlMap = undefined;\r\n\r\n if (clientApiAccessControlMaps[clientId]) {\r\n clientApiAccessControlMap = clientApiAccessControlMaps[clientId][apiName];\r\n }\r\n\r\n if (clientApiAccessControlMap) {\r\n return $q.resolve(clientApiAccessControlMap);\r\n }\r\n\r\n if (apiAccessControlMap.clientApiAccessEndpoint) {\r\n\r\n if (!clientId) return $q.reject(new Error('Client ID is required to get client API access control map for \"' + apiName + '\" API'));\r\n\r\n log.debug('Client API access control map for ' + apiName + ' and client ' + clientId + ' not available. Fetching from server...');\r\n\r\n return requestHelper.get(apiAccessControlMap.clientApiAccessEndpoint.replace('{clientId:int}', clientId), '', { clientId: clientId }).then(function (response) {\r\n\r\n if (!clientApiAccessControlMaps[clientId]) {\r\n clientApiAccessControlMaps[clientId] = {};\r\n }\r\n\r\n clientApiAccessControlMaps[clientId][apiName] = Object.assign(angular.copy(apiAccessControlMap.endpointAccess), response);\r\n\r\n log.debug('Client API access control maps updated', clientApiAccessControlMaps);\r\n\r\n return clientApiAccessControlMaps[clientId][apiName];\r\n });\r\n } else {\r\n return $q.resolve(apiAccessControlMap.endpointAccess);\r\n }\r\n\r\n //return $q.reject(new Error('No client API access endpoint available for \"' + apiName + '\" API'));\r\n }\r\n\r\n var getSystemTypes = function () {\r\n return requestHelper.get(baseApiUrl, 'systemtypes');\r\n };\r\n\r\n var getSystemType = function (type, id) {\r\n\r\n if (!$rootScope.systemTypes[type]) throw new Error('System type with type ' + type + ' not found');\r\n\r\n if (!id) throw new Error('System type id is required');\r\n\r\n if (!$rootScope.systemTypes[type][id]) throw new Error('System type with type ' + type + ' and id ' + id + ' not found');\r\n\r\n return $rootScope.systemTypes[type][id];\r\n }\r\n\r\n var checkAppStatus = function checkAppStatus() {\r\n if (!newAppVersionDetected && !checkingAppStatus) {\r\n log.debug('Checking app status');\r\n checkingAppStatus = true;\r\n return getAppStatus().then(\r\n function (status) {\r\n\r\n setOffline(false);\r\n\r\n if (_.isString(status.version) && localAppVersion !== status.version) {\r\n\r\n newAppVersionDetected = true;\r\n\r\n var actions = {\r\n reload: {\r\n label: 'Uppdatera',\r\n action: function() {\r\n location.reload(true);\r\n }\r\n }\r\n };\r\n\r\n log.info('Det finns en ny version av Coordinare tillgänglig.', '', true, actions);\r\n\r\n //cancelInterval();\r\n\r\n //var newVersionReloadDelay = 60;\r\n\r\n //newVersionReloadInterval = $interval(function () {\r\n // newVersionReloadDelay--;\r\n\r\n // if (newVersionReloadDelay % 10 == 0) {\r\n // newVersionReloadDelay\r\n // log.info('Applikationen kommer att laddas om på ' + newVersionReloadDelay + ' sekunder', '', true);\r\n // }\r\n\r\n // if (newVersionReloadDelay == 0) {\r\n // $interval.cancel(newVersionReloadInterval);\r\n // location.reload(true);\r\n // }\r\n //}, 1000);\r\n }\r\n\r\n checkingAppStatus = false;\r\n\r\n return status;\r\n\r\n }, function (e) {\r\n checkingAppStatus = false;\r\n\r\n if (e.message === 'Kan inte ansluta till servern') {\r\n setOffline(true)\r\n }\r\n\r\n //console.error(e);\r\n\r\n throw e;\r\n }\r\n );\r\n }\r\n\r\n return $q.resolve(null);\r\n };\r\n\r\n var registerBreakpoints = function (breakpoints) {\r\n breakpoints.items.forEach(function (bp, i) {\r\n var mediaQuery = '(min-width: ' + bp + 'px)' + (i < breakpoints.items.length - 1 ? ' and (max-width: ' + (breakpoints.items[i + 1] - 0.5) + 'px)' : '');\r\n log.debug('Registering media query for breakpoint ' + i + ':', mediaQuery);\r\n var mediaQueryList = window.matchMedia(mediaQuery);\r\n\r\n if (mediaQueryList.matches) {\r\n setCurrentBreakpoint(i, bp);\r\n }\r\n\r\n mediaQueryList.addListener(function (mq) {\r\n if (mq.matches) {\r\n $timeout(function () {\r\n setCurrentBreakpoint(i, bp);\r\n });\r\n }\r\n });\r\n });\r\n }\r\n \r\n\r\n $rootScope.$on('$destroy', function () {\r\n cancelInterval(newVersionReloadInterval);\r\n });\r\n\r\n function cancelInterval(interval) {\r\n if (angular.isDefined(interval)) {\r\n $interval.cancel(interval);\r\n interval = null;\r\n }\r\n }\r\n\r\n function setCurrentBreakpoint(i, bp) {\r\n $rootScope.breakpoints.current = i;\r\n $rootScope.$broadcast('currentbreakpoint.changed', $rootScope.breakpoints.current);\r\n log.debug('Current breakpoint:', i + ' (' + bp + 'px)');\r\n }\r\n\r\n function getFeature(featureSystemName) {\r\n \r\n if ($rootScope.user) {\r\n return $rootScope.user.productFeatures[featureSystemName];\r\n }\r\n\r\n logout();\r\n\r\n return null;\r\n }\r\n\r\n var isFeatureEnabled = function (featureSystemName) {\r\n var productFeature = getFeature(featureSystemName);\r\n\r\n return productFeature && productFeature.enabled;\r\n }\r\n\r\n var isFeatureAccessible = function (featureSystemName) {\r\n var productFeature = getFeature(featureSystemName);\r\n\r\n return productFeature && productFeature.accessible;\r\n }\r\n\r\n var isFeatureAvailable = function (featureSystemName) {\r\n var productFeature = getFeature(featureSystemName);\r\n\r\n return productFeature && productFeature.enabled && productFeature.accessible;\r\n }\r\n\r\n var ensureFeatureIsAvailable = function (featureSystemName) {\r\n if (!isFeatureEnabled(featureSystemName)) {\r\n locationService.setPath('/feature-unavailable');\r\n }\r\n\r\n if (!isFeatureAccessible(featureSystemName)) {\r\n locationService.setPath('/unauthorized');\r\n }\r\n }\r\n\r\n var logout = function () {\r\n\r\n $timeout(function () {\r\n log.info('Du loggas nu ut...');\r\n $timeout(function () {\r\n window.location = '/Mvc/Account/Logoff';\r\n }, 2000);\r\n }, 2000);\r\n }\r\n\r\n var setOffline = function (offline) {\r\n\r\n if ($rootScope.offline !== offline) {\r\n if (offline) {\r\n log.error(\"Nätverksanslutningen förlorades\");\r\n $timeout(function () {\r\n log.info(\"Kontrollera din internetanslutning\");\r\n }, 2000);\r\n\r\n } else {\r\n log.success(\"Nätverksanslutningen har återupptagits\");\r\n }\r\n $rootScope.offline = offline;\r\n }\r\n }\r\n\r\n var initSupportedBrowserFeatures = function () {\r\n\r\n var isIOS = detectUtils.isIOS();\r\n\r\n $rootScope.browserFeatures = {};\r\n $rootScope.browserFeatures.inputs = {};\r\n $rootScope.browserFeatures.inputShowPicker = {};\r\n\r\n var inputTypesToTest = ['date', 'month', 'time', 'datetime-local', 'week', 'number', 'color', 'email', 'url', 'search', 'tel', 'range'];\r\n var inputTypesForWhichShowPickerIsUnsupportedOnIOS = ['date', 'month', 'time', 'datetime-local', 'week', 'color'];\r\n inputTypesToTest.forEach(function (type) {\r\n var input = document.createElement('input');\r\n input.setAttribute('type', type);\r\n\r\n $rootScope.browserFeatures.inputs[type] = (input.type === type);\r\n if (isIOS && inputTypesForWhichShowPickerIsUnsupportedOnIOS.includes(type)) {\r\n $rootScope.browserFeatures.inputShowPicker[type] = false;\r\n } else {\r\n $rootScope.browserFeatures.inputShowPicker[type] = $rootScope.browserFeatures.inputs[type] && angular.isFunction(input.showPicker);\r\n }\r\n });\r\n }\r\n\r\n return {\r\n getLocalAppVersion: getLocalAppVersion,\r\n initApis: initApis,\r\n getApi: getApi,\r\n getClientApiAccessControlMap: getClientApiAccessControlMap,\r\n getSystemTypes: getSystemTypes,\r\n getSystemType: getSystemType,\r\n checkAppStatus: checkAppStatus,\r\n registerBreakpoints: registerBreakpoints,\r\n isFeatureAvailable: isFeatureAvailable,\r\n ensureFeatureIsAvailable: ensureFeatureIsAvailable,\r\n logout: logout,\r\n setOffline: setOffline,\r\n initSupportedBrowserFeatures: initSupportedBrowserFeatures,\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'debounceService';\r\n\r\n angular.module('app').factory(serviceId, ['$timeout', function ($timeout) {\r\n var timeouts = {};\r\n\r\n function debounce(func, delay, key) {\r\n if (!key) {\r\n key = 'default';\r\n }\r\n\r\n if (timeouts[key]) {\r\n $timeout.cancel(timeouts[key]);\r\n }\r\n\r\n timeouts[key] = $timeout(func, delay);\r\n }\r\n\r\n return {\r\n debounce: debounce\r\n };\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'FormattingService';\r\n angular.module('app').factory(serviceId, [\r\n 'moment',\r\n function (moment) {\r\n\r\n var formatHMNonZero = function (timespan, decimalTime) {\r\n\r\n if (timespan === '00:00:00') return '';\r\n\r\n return formatHM(timespan, decimalTime);\r\n };\r\n\r\n var formatHM = function (timespan, decimalTime, skipUnit) {\r\n\r\n var duration = moment.duration(timespan);\r\n\r\n if (decimalTime) {\r\n return duration.format(skipUnit ? 'h' : 'h [tim]', {\r\n trim: false,\r\n precision: 2,\r\n decimalSeparator: ','\r\n });\r\n }\r\n\r\n return duration.format('h:mm', { trim: false });\r\n };\r\n\r\n var shiftDuration = function (shift, decimalTime) {\r\n var duration = moment.duration(moment(shift.dateEnd) - moment(shift.dateBegin));\r\n if (decimalTime) {\r\n return duration.format(\"h [tim]\", {\r\n trim: false,\r\n precision: 2,\r\n decimalSeparator: ','\r\n });\r\n }\r\n\r\n return duration.format('h:mm', { trim: false });\r\n };\r\n\r\n var durationBetweenDates = function (startDate, endDate, formattingString) {\r\n var duration = moment.duration(moment(endDate) - moment(startDate));\r\n\r\n return duration.format(formattingString ? formattingString : \"h\", {\r\n trim: false,\r\n precision: 2,\r\n decimalSeparator: ','\r\n });\r\n }\r\n\r\n var formatDuration = function ({ duration, shortFormat = false } = {}) {\r\n // Get hours and minutes\r\n const totalHours = Math.floor(duration.asHours());\r\n const minutes = duration.minutes();\r\n\r\n // Dynamic formatting of the duration\r\n let formattedDuration = '';\r\n\r\n if (totalHours > 0) {\r\n formattedDuration += `${totalHours} ${shortFormat ? 'tim' : totalHours === 1 ? \"timme\" : \"timmar\"}`;\r\n }\r\n\r\n if (minutes > 0) {\r\n if (formattedDuration) {\r\n formattedDuration += shortFormat ? ' ' : ' och ';\r\n }\r\n formattedDuration += `${minutes} ${shortFormat ? 'min' : minutes === 1 ? \"minut\" : \"minuter\"}`;\r\n }\r\n\r\n return formattedDuration;\r\n }\r\n\r\n return {\r\n timespan: {\r\n formatHM: formatHM,\r\n formatHMNonZero: formatHMNonZero\r\n },\r\n shift: {\r\n duration: shiftDuration\r\n },\r\n date: {\r\n durationBetween: durationBetweenDates\r\n },\r\n formatDuration: formatDuration\r\n };\r\n }\r\n ]);\r\n})();","(function() {\r\n\t'use strict';\r\n\r\n\tangular.module('app').factory('logger', [\r\n\t\t'$log',\r\n\t\tfunction($log) {\r\n\t\t\t// Dölj debug kod om live\r\n\t\t\tvar debug = window.consoleDebug;\r\n\t\t\tvar service = {\r\n\t\t\t\tlog: log,\r\n\t\t\t\terror: logError,\r\n\t\t\t\tsuccess: logSuccess,\r\n\t\t\t\tdebug: logDebug,\r\n\t\t\t\tinfo: log,\r\n\t\t\t\twarning: logWarning,\r\n\t\t\t\tgetLogger: create\r\n\t\t\t};\r\n\r\n\t\t\treturn service;\r\n\r\n\t\t\tfunction create(moduleId) {\r\n\t\t\t\tfunction l(type, msg, data, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\t\tservice[type](msg, data, moduleId, (showToast === undefined) ? true : showToast, toastActions, id, hideAfter);\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn {\r\n\t\t\t\t\tinfo: function(msg, data, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\t\t\tl('info', msg, data, showToast, toastActions, id, hideAfter);\r\n\t\t\t\t\t},\r\n\t\t\t\t\twarning: function (msg, data, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\t\t\tl('warning', msg, data, showToast, toastActions, id, hideAfter);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tsuccess: function (msg, data, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\t\t l('success', msg, data, showToast, toastActions, id, hideAfter);\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: function (msg, data, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\t\t l('error', msg, data, showToast, toastActions, id, hideAfter);\r\n\t\t\t\t\t},\r\n\t\t\t\t\tdebug: function (msg, data, toastActions, id, hideAfter) {\r\n\t\t\t\t\t l('debug', msg, data, false, toastActions, id, hideAfter);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t}\r\n\r\n\t\t\tfunction log(message, data, source, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\tlogIt(message, data, source, showToast, 'info', toastActions, id, hideAfter);\r\n\t\t\t}\r\n\r\n\t\t\tfunction logWarning(message, data, source, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\tlogIt(message, data, source, showToast, 'warning');\r\n\t\t\t}\r\n\r\n\t\t\tfunction logSuccess(message, data, source, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\tlogIt(message, data, source, showToast, 'success');\r\n\t\t\t}\r\n\r\n\t\t\tfunction logError(message, data, source, showToast, toastActions, id, hideAfter) {\r\n\t\t\t\tlogIt(message, data, source, showToast, 'error');\r\n\t\t\t}\r\n\r\n\t\t\tfunction logDebug(message, data, source, showToast, toastActions, id, hideAfter) {\r\n\t\t\t logIt(message, data, source, showToast, 'debug', toastActions, id, hideAfter);\r\n\t\t\t}\r\n\r\n\t\t\tfunction logIt(message, data, source, showToast, toastType, toastActions, id, hideAfter) {\r\n\t\t\t\tif (toastType == 'debug') {\r\n\t\t\t\t\tif (!debug) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttoastType = 'info';\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (angular.isArray(message)) {\r\n\t\t\t\t\t_.forEach(message, function(m) {\r\n\t\t\t\t\t\tlogIt(m, data, source, showToast, toastType);\r\n\t\t\t\t\t});\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (debug || toastType === 'error' || toastType === 'warning') {\r\n\t\t\t\t\t\tvar logWriter = (toastType === 'error') ? $log.error : (toastType === 'warning') ? $log.warn : $log.log;\r\n\t\t\t\t\t\tsource = source ? '[' + source + ']' : '';\r\n\t\t\t\t\t\tlogWriter(source, message, typeof data === 'undefined' ? '' : data);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tMessenger.options = {\r\n\t\t\t\t\t\textraClasses: 'messenger-fixed messenger-on-bottom messenger-on-right',\r\n\t\t\t\t\t\ttheme: 'flat'\r\n\t\t\t\t\t};\r\n\r\n var msg = _.isString(message) ? message.replace(new RegExp('\\r?\\n', 'g'), '
') : message;\r\n\t\t\t\t\tif (_.isUndefined(msg) || msg == null) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (showToast && !_.isUndefined(message) && message != null) {\r\n Messenger().post({\r\n id: id,\r\n\t\t\t\t\t\t\tmessage: msg,\r\n\t\t\t\t\t\t\ttype: toastType,\r\n\t\t\t\t\t\t\tactions: toastActions ? toastActions : {},\r\n hideAfter: toastActions ? null : hideAfter ? hideAfter : 10,\r\n\t\t\t\t\t\t\tshowCloseButton: toastActions ? false : true\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'requestHelper';\r\n angular.module('app').factory(serviceId, ['$http', 'responseHelper', 'logger', '$window', '$timeout',\r\n function ($http, responseHelper, logger, $window, $timeout) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n function getRequestUrl(baseUrl, method) {\r\n if (method) {\r\n return baseUrl + '/' + method;\r\n }\r\n\r\n return baseUrl;\r\n }\r\n\r\n var get = function (baseUrl, method, params) {\r\n return $http.get(getRequestUrl(baseUrl, method), { params: params })\r\n .then(handleSuccess, handleError);\r\n };\r\n\r\n var post = function (baseUrl, method, data, params) {\r\n return $http.post(getRequestUrl(baseUrl, method), data, params ? { params: params } : undefined)\r\n .then(handleSuccess, handleError);\r\n };\r\n\r\n var put = function (baseUrl, method, params) {\r\n return $http.put(getRequestUrl(baseUrl, method), params)\r\n .then(handleSuccess, handleError);\r\n };\r\n\r\n var remove = function (baseUrl, method, params) {\r\n return $http.delete(getRequestUrl(baseUrl, method), { data: params })\r\n .then(handleSuccess, handleError);\r\n };\r\n\r\n function handleSuccess(response) {\r\n return response.data\r\n }\r\n\r\n function handleError(response) {\r\n if (response.status === -1) {\r\n var error = new Error('Kan inte ansluta till servern');\r\n\r\n throw error;\r\n } else {\r\n var errorMessage = responseHelper.getException(response.data);\r\n\r\n var error = new Error(errorMessage);\r\n\r\n switch (response.status) {\r\n case 401:\r\n log.info(errorMessage);\r\n $timeout(function () {\r\n log.info('Du loggas nu ut...');\r\n $timeout(function () {\r\n reload();\r\n }, 2000);\r\n }, 2000);\r\n error.isHandled = true;\r\n break;\r\n case 403:\r\n error.isHandled = true;\r\n break;\r\n case 404:\r\n error.isHandled = true;\r\n break;\r\n default:\r\n error.isHandled = false;\r\n break;\r\n }\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n function reload() {\r\n $window.location.reload();\r\n }\r\n\r\n return {\r\n get: get,\r\n post: post,\r\n remove: remove,\r\n put: put\r\n };\r\n }\r\n ]);\r\n})();","(function() {\r\n 'use strict';\r\n\r\n var serviceId = 'responseHelper';\r\n angular.module('app').factory(serviceId, [\r\n function() {\r\n function extractException(resp, defaultMessage) {\r\n defaultMessage = _.isUndefined(defaultMessage) ? 'Ett okänt fel uppstod' : defaultMessage;\r\n var response = resp;\r\n\r\n if (_.isString(response)) {\r\n if (response == '') {\r\n return defaultMessage;\r\n }\r\n return response;\r\n }\r\n\r\n if (!_.isObject(response) || _.isUndefined(response) || response == null) {\r\n return defaultMessage;\r\n }\r\n\r\n if (response.exceptionMessage) {\r\n\r\n\t var i = 0,\r\n\t\t msg = response.innerException,\r\n\t \tcurMsg = response.exceptionMessage;\r\n\r\n\t while (typeof msg !== 'undefined' && msg != null && i < 10) {\r\n\t\t\t\t\t\tif (angular.isDefined(msg) && angular.isString(msg.exceptionMessage)) {\r\n curMsg += '\\r\\n\\r\\n' + msg.exceptionMessage;\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tmsg = msg.innerException;\r\n\t\t\t\t\t\ti++;\r\n\t\t\t\t\t}\r\n return curMsg;\r\n }\r\n\r\n\t\t\t\tif (angular.isString(response.responseText)) {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tresponse = JSON.parse(response.responseText);\r\n\t\t\t\t\t} catch (e) {} \r\n\t\t\t\t}\r\n\r\n if (response.statusText && _.isString(response.statusText) && response.statusText != '') {\r\n return response.statusText;\r\n }\r\n\r\n if (response.responseJSON) {\r\n var exception = response.responseJSON.exceptionMessage;\r\n if (angular.isString(exception)) {\r\n return exception;\r\n }\r\n response = response.responseJSON;\r\n }\r\n\r\n if (_.isObject(response.modelState)) {\r\n var list = [];\r\n _.forEach(_.keys(response.modelState), function(key) {\r\n var errors = response.modelState[key];\r\n _.forEach(errors, function(msg) {\r\n list.push(msg);\r\n });\r\n });\r\n return list.length > 0 ? list.join('\\r\\n') : (response.message ? response.message : defaultMessage);\r\n }\r\n return response.message ? response.message : defaultMessage;\r\n }\r\n\r\n return {\r\n getException: extractException\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'userService';\r\n var app = angular.module('app');\r\n\r\n app.service(serviceId, [\r\n 'requestHelper', 'logger',\r\n function (requestHelper, logger) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n var baseUrl = 'api/user';\r\n\r\n function isUsernameAvailable( /*string*/ username) {\r\n return requestHelper.get(baseUrl, 'username/available?username=' + username)\r\n }\r\n\r\n function getUserIdentity(userId) {\r\n return requestHelper.get(baseUrl, 'identity/' + userId);\r\n }\r\n\r\n function getUsername(userId) {\r\n return requestHelper.get(baseUrl, 'username/' + userId);\r\n }\r\n\r\n function getTwoFactorAuthEnabled(userId) {\r\n return requestHelper.get(baseUrl, 'twofactorauthenabled/' + userId);\r\n }\r\n\r\n function setTwoFactorAuthEnabled(userId, enabled) {\r\n return requestHelper.put(baseUrl, 'twofactorauthenabled/' + userId, { enabled: enabled });\r\n }\r\n\r\n return {\r\n isUsernameAvailable: isUsernameAvailable,\r\n getUserIdentity: getUserIdentity,\r\n getUsername: getUsername,\r\n getTwoFactorAuthEnabled: getTwoFactorAuthEnabled,\r\n setTwoFactorAuthEnabled: setTwoFactorAuthEnabled,\r\n };\r\n }]);\r\n})();","(function (factory) {\r\n\tfactory(window.moment); // Browser global\r\n})\r\n\r\n(function (moment) {\r\n\treturn moment.locale('sv');\r\n});\r\n\r\n// Moment duration extension\r\nmoment.duration.fn.toJSON = function () {\r\n\treturn this.format('hh:mm', { trim: false });\r\n};\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'bankidSigningButton';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n onInit: '&',\r\n onSignClicked: '&',\r\n onSign: '&',\r\n onSigningInProgress: '&',\r\n onSigned: '&',\r\n onCancelled: '&',\r\n onError: '&',\r\n orderRef: '<',\r\n options: '<',\r\n ngDisabled: '<'\r\n },\r\n templateUrl:\r\n '/client/common/components/buttons/bankid-signing-button.component.html',\r\n controller: ['$scope', '$rootScope', '$q', '$timeout', 'bankIDService',\r\n function ($scope, $rootScope, $q, $timeout, bankIDService) {\r\n\r\n var ctrl = this;\r\n\r\n $scope.state = {\r\n busy: false,\r\n signOnSameDevice: true,\r\n signingOrderRef: undefined\r\n }\r\n\r\n var defaultOptions = {\r\n signText: 'Signera med BankID',\r\n cancelSignText: 'Avbryt signering',\r\n signOnOtherDeviceText: 'Signera med BankID på annan enhet',\r\n small: undefined\r\n };\r\n\r\n $scope.$on('$destroy', function () {\r\n bankIDService.stopCollectingTransactionStatus();\r\n });\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ $bankIdSigningButton: ctrl });\r\n };\r\n\r\n ctrl.onInitDropdown = function (dropdownCtrl) {\r\n ctrl.$dropdown = dropdownCtrl;\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n $scope.signOnSameDevice = function (e) {\r\n e.stopPropagation();\r\n if (!$scope.state.busy) {\r\n var onSignedClicked = ctrl.onSignClicked({ onSameDevice: true });\r\n if (onSignedClicked !== false && onSignedClicked === undefined) {\r\n ctrl.sign(true);\r\n } \r\n } else {\r\n ctrl.cancel();\r\n }\r\n }\r\n\r\n $scope.signOnOtherDevice = function (e) {\r\n e.stopPropagation();\r\n if (!$scope.state.busy) {\r\n var onSignedClicked = ctrl.onSignClicked({ onSameDevice: false });\r\n if (onSignedClicked !== false && onSignedClicked === undefined) {\r\n ctrl.sign(false);\r\n } \r\n }\r\n }\r\n\r\n ctrl.cancel = function () {\r\n if ($rootScope.bankIDTransactionInProgress && $scope.state.signingOrderRef) {\r\n setBusy(true);\r\n bankIDService.cancelTransaction({ orderRef: $scope.state.signingOrderRef }).then(function () {\r\n reset();\r\n\r\n ctrl.onCancelled();\r\n }, handleError);\r\n }\r\n }\r\n\r\n ctrl.sign = function (onSameDevice) {\r\n var onSign = ctrl.onSign();\r\n\r\n if (onSign === false) {\r\n return;\r\n }\r\n else if (onSign && angular.isFunction(onSign.then)) {\r\n\r\n $scope.state.signOnSameDevice = onSameDevice;\r\n\r\n setBusy(true);\r\n\r\n return onSign.then(handleSigningInProgress, handleError);\r\n } else {\r\n handleError(new Error('onSign must return either false or a promise'));\r\n }\r\n }\r\n\r\n ctrl.startBankIDClient = function () {\r\n ctrl.$dropdown.close();\r\n bankIDService.startBankIDClient($scope.state.autoStartToken);\r\n }\r\n\r\n function setBusy(busy) {\r\n $scope.state.busy = busy;\r\n }\r\n\r\n function handleSigningInProgress(signResponse) {\r\n\r\n if (!signResponse) {\r\n handleError(new Error('signResponse is required'));\r\n }\r\n\r\n if (!signResponse.orderRef || !signResponse.autoStartToken) {\r\n handleError(new Error('signResponse is missing required properties'));\r\n }\r\n\r\n $scope.state.signingOrderRef = signResponse.orderRef;\r\n $scope.state.autoStartToken = signResponse.autoStartToken;\r\n\r\n ctrl.onSigningInProgress();\r\n\r\n bankIDService.handleSignResponse(signResponse, $scope.state.signOnSameDevice, handleSignSuccess, handleError, handleSignProgress);\r\n }\r\n\r\n function handleSignProgress(response) {\r\n $scope.state.qrCode = response.qrCode;\r\n\r\n if (!$scope.state.signOnSameDevice && $scope.state.qrCode) {\r\n if (!(ctrl.$dropdown.state.opening || ctrl.$dropdown.state.open)) {\r\n ctrl.$dropdown.toggleDropdown();\r\n }\r\n } else {\r\n ctrl.$dropdown.close();\r\n }\r\n }\r\n\r\n function handleSignSuccess() {\r\n\r\n reset();\r\n\r\n return ctrl.onSigned();\r\n }\r\n\r\n function reset() {\r\n ctrl.$dropdown.close();\r\n\r\n setBusy(false);\r\n }\r\n\r\n function handleError(error) {\r\n reset();\r\n\r\n ctrl.onError({ error: error });\r\n\r\n throw error;\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'comboButton';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n options: '<'\r\n },\r\n transclude: {\r\n 'primary': 'comboButtonPrimary',\r\n 'secondary': 'comboButtonSecondary'\r\n },\r\n templateUrl:\r\n '/client/common/components/buttons/combo-button.component.html',\r\n controller: ['$scope', '$transclude',\r\n function ($scope, $transclude) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.primarySlotIsFilled = $transclude.isSlotFilled('primary');\r\n ctrl.secondarySlotIsFilled = $transclude.isSlotFilled('secondary');\r\n\r\n $scope.dropdownOptions = undefined;\r\n\r\n var defaultOptions = {\r\n color: 'green',\r\n dropdown: {\r\n trigger: {\r\n icon: 'fas fa-caret-down',\r\n openIcon: 'fas fa-caret-up',\r\n showIndicator: false,\r\n styleAsButton: false,\r\n cssClasses: {\r\n 'btn': true,\r\n 'combo-button-trigger': true,\r\n }\r\n },\r\n closeOnClick: true\r\n },\r\n disableDropdown: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (changes.options.previousValue && changes.options.previousValue.color) {\r\n ctrl.options.dropdown.trigger.cssClasses['btn-' + changes.options.previousValue.color] = false;\r\n }\r\n\r\n if (ctrl.options.color) {\r\n ctrl.options.dropdown.trigger.cssClasses['btn-' + ctrl.options.color] = true;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'showHideToggleButton';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n state: '<',\r\n ngDisabled: '<',\r\n text: '@',\r\n onChanged: '&'\r\n },\r\n templateUrl:\r\n '/client/common/components/buttons/show-hide-toggle-button.component.html',\r\n controller: ['$scope', '$transclude',\r\n function ($scope, $transclude) {\r\n\r\n var ctrl = this;\r\n\r\n $scope.onChanged = function (e, state) {\r\n e.stopPropagation();\r\n ctrl.onChanged({ state: state });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarEditableToggle';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n ngModel: '<',\r\n ngDisabled: '<',\r\n onChanged: '&',\r\n minimize: '<'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-editable-toggle.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.minimize) {\r\n $scope.minimize = ctrl.minimize === true;\r\n\r\n $scope.cssClasses['btn-square'] = $scope.minimize;\r\n }\r\n }\r\n\r\n $scope.cssClasses = {};\r\n $scope.minimize = false;\r\n\r\n $scope.setEditable = function (e, editable) {\r\n\r\n e.stopPropagation();\r\n\r\n if (!ctrl.ngDisabled) {\r\n ctrl.onChanged({ editable: editable });\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarEventHeader';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n event: '<',\r\n showTimeStatus: '<',\r\n options: '<'\r\n },\r\n transclude: {\r\n time: '?calendarEventHeaderTime',\r\n timeStatus: '?calendarEventHeaderTimeStatus',\r\n },\r\n require: {\r\n $calendar: '?^^calendar'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-event-header.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', function ($scope, $transclude, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n //$scope.timeSlotIsFilled = $transclude.isSlotFilled('time');\r\n\r\n var defaultOptions = {\r\n visibility: {\r\n time: true\r\n }\r\n };\r\n\r\n //ctrl.$onInit = function () {\r\n //}\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.event && ctrl.event && ctrl.$calendar) {\r\n ctrl.$calendar.eventRendered(ctrl.event.id, ctrl.event.multiDay);\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarEventSelectIndicator';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n event: '<',\r\n //options: '<'\r\n },\r\n require: {\r\n $calendar: '?^calendar'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-event-select-indicator.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //ctrl.$onInit = function () {\r\n //}\r\n\r\n ctrl.$onChanges = function (changes) {\r\n //if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n //}\r\n }\r\n\r\n $scope.clicked = function (e) {\r\n // Necessary workaround to ensure checkbox is actually checked when clicked\r\n // If event is allowed to propagate, the checkbox will not be checked for some reason\r\n // It seems as if FullCalendar is doing something to prevent the checkbox from being checked\r\n e.stopPropagation();\r\n\r\n ctrl.$calendar.selectEvent(ctrl.event.id);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarEventSourceSelectorItem';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n eventSource: '<',\r\n activeEventSource: '<',\r\n onSelected: '&',\r\n onVisibilityChanged: '&'\r\n //options: '<'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-event-source-selector-item.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //ctrl.$onInit = function () {\r\n //}\r\n\r\n let state = {\r\n active: false\r\n }\r\n\r\n $scope.state = state;\r\n\r\n ctrl.$onChanges = function (changes) {\r\n //if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n //}\r\n\r\n if (changes.activeEventSource) {\r\n state.active = hasValue(ctrl.activeEventSource) && ctrl.activeEventSource.id === ctrl.eventSource.id;\r\n }\r\n }\r\n\r\n $scope.select = function (e) {\r\n e.stopPropagation();\r\n\r\n if (hasValue(ctrl.eventSource.callbacks)) {\r\n ctrl.onSelected();\r\n }\r\n }\r\n\r\n $scope.visibilityChanged = function (visible) {\r\n \r\n ctrl.onVisibilityChanged({ visible: visible });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarEventSourceSelector';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n eventSources: '<',\r\n activeEventSource: '<',\r\n onActiveEventSourceChanged: '&',\r\n onEventSourceVisibilityChanged: '&',\r\n onInit: '&'\r\n //options: '<'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-event-source-selector.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ calendarEventSourceSelectorCtrl: ctrl });\r\n }\r\n\r\n $scope.$dropdown = undefined;\r\n $scope.eventSourceMap = undefined;\r\n $scope.state = {\r\n numSources: 0,\r\n numVisibleSources: 0\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n //if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n //}\r\n\r\n if (changes.eventSources && ctrl.eventSources) {\r\n $scope.eventSourceMap = {};\r\n ctrl.eventSources.forEach(s => $scope.eventSourceMap[s.id] = s);\r\n updateNumVisibleSources();\r\n }\r\n }\r\n\r\n ctrl.updateNumVisibleSources = updateNumVisibleSources;\r\n\r\n $scope.initDropdown = function (dropdownCtrl) {\r\n $scope.$dropdown = dropdownCtrl;\r\n }\r\n\r\n $scope.eventSourceSelected = function(eventSource) {\r\n\r\n ctrl.onActiveEventSourceChanged({ eventSource: eventSource });\r\n\r\n $scope.$dropdown.close();\r\n }\r\n\r\n $scope.eventSourceVisibilityChanged = function (eventSource, visible) {\r\n\r\n eventSource.visible = visible;\r\n\r\n ctrl.onEventSourceVisibilityChanged({ eventSource: eventSource, visible: visible });\r\n\r\n updateNumVisibleSources();\r\n }\r\n\r\n function updateNumVisibleSources() {\r\n $scope.state.numSources = ctrl.eventSources.length;\r\n $scope.state.numVisibleSources = ctrl.eventSources.filter(s => s.visible === true).length\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendarSelectModeToolbar';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n ngModel: '<',\r\n ngDisabled: '<',\r\n onChanged: '&',\r\n onSelectAllChanged: '&',\r\n //options: '<'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar-select-mode-toolbar.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //ctrl.$onInit = function () {\r\n //}\r\n\r\n ctrl.$onChanges = function (changes) {\r\n //if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n //}\r\n }\r\n\r\n $scope.selectAll = false;\r\n\r\n $scope.setSelectMode = function (e, selectMode) {\r\n\r\n e.stopPropagation();\r\n\r\n ctrl.onChanged({ selectMode: selectMode });\r\n }\r\n\r\n $scope.selectAllChanged = function (selectAll) {\r\n ctrl.onSelectAllChanged({ selectAll: selectAll });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'calendar';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n onInit: '&',\r\n onDatesSet: '&',\r\n onFiltersLoaded: '&',\r\n onFiltersChanged: '&',\r\n onFilterBarInit: '&',\r\n onSetEditable: '&',\r\n onActiveEventSourceChanged: '&',\r\n onEventSourceVisibilityChanged: '&',\r\n onLeftColumnToggled: '&',\r\n onRightColumnToggled: '&',\r\n onRefresh: '&',\r\n options: '<'\r\n },\r\n transclude: {\r\n firstToolbar: '?firstToolbar',\r\n secondToolbar: '?secondToolbar',\r\n readOnlyToolbar: '?readOnlyToolbar',\r\n eventSources: '?eventSources',\r\n leftColumn: '?leftColumn',\r\n leftColumnHeader: '?leftColumnHeader',\r\n rightColumn: '?rightColumn',\r\n rightColumnHeader: '?rightColumnHeader',\r\n },\r\n require: {\r\n $dropdown: '?^^dropdown'\r\n },\r\n templateUrl: '/client/common/components/calendar/calendar.component.html',\r\n controller: ['$scope', '$rootScope', '$timeout', '$transclude', '$element', 'locationService', 'logger', 'localSettingsService',\r\n function ($scope, $rootScope, $timeout, $transclude, $element, locationService, logger, localSettingsService) {\r\n\r\n let ctrl = this;\r\n\r\n let log = logger.getLogger(componentId);\r\n\r\n $scope.firstToolbarSlotFilled = $transclude.isSlotFilled('firstToolbar');\r\n $scope.secondToolbarSlotFilled = $transclude.isSlotFilled('secondToolbar');\r\n $scope.readOnlyToolbarSlotFilled = $transclude.isSlotFilled('readOnlyToolbar');\r\n $scope.eventSourcesSlotFilled = $transclude.isSlotFilled('eventSources');\r\n let leftColumnSlotFilled = $transclude.isSlotFilled('leftColumn');\r\n $scope.leftColumnHeaderSlotFilled = $transclude.isSlotFilled('leftColumnHeader');\r\n let rightColumnSlotFilled = $transclude.isSlotFilled('rightColumn');\r\n $scope.rightColumnHeaderSlotFilled = $transclude.isSlotFilled('rightColumnHeader');\r\n\r\n let defaultOptions = {\r\n editable: false,\r\n calenderId: undefined,\r\n calenderFilterPrefix: 'c_',\r\n filterBar: {\r\n dropdownFilterSet: 'secondary'\r\n },\r\n visibility: {\r\n readOnlyToolbar: true,\r\n secondToolbar: true,\r\n leftColumn: false,\r\n leftColumnHeader: true,\r\n rightColumn: false,\r\n rightColumnHeader: true\r\n },\r\n displayLeftColumnFromBp: 8,\r\n displayRightColumnFromBp: 8\r\n };\r\n\r\n let $calendarEventSourceSelector = undefined;\r\n\r\n let state = {\r\n timePeriod: undefined,\r\n busy: false,\r\n editable: false,\r\n selectMode: false,\r\n selectedEventCount: 0,\r\n hasSelectedEvents: false,\r\n hasMultipleSelectedEvents: false,\r\n selectedEvents: [],\r\n selectedEventIds: [],\r\n currentView: undefined,\r\n clickedDateInfo: undefined,\r\n clickedEvent: null,\r\n clickedEventTarget: null,\r\n rightClickedEvent: null,\r\n rightClickedEventTarget: null,\r\n filterIdPrefix: null,\r\n filterQueryStringParams: null,\r\n activeFilters: null,\r\n filterIsActive: false,\r\n filterObject: null,\r\n dataLoaded: false,\r\n numCurrentEventSources: 0,\r\n numTotalEventSources: 0,\r\n numVisibleEventSources: 0,\r\n allEventSourcesLoaded: false,\r\n activeEventSourceIndex: 0,\r\n renderLeftColumn: false,\r\n renderRightColumn: false,\r\n collapseLeftColumn: localSettingsService.getBool(`${componentId}_collapseLeftColumn`, false),\r\n collapseRightColumn: localSettingsService.getBool(`${componentId}_collapseRightColumn`, false),\r\n rightColumnCollapsed: false,\r\n leftColumnCollapsed: false \r\n }\r\n\r\n $scope.state = state;\r\n $scope.eventSources = {};\r\n $scope.eventSourceList = [];\r\n $scope.activeEventSource = undefined;\r\n $scope.$fullCalendar = undefined;\r\n $scope.filters = undefined;\r\n $scope.calendarOptions = undefined;\r\n\r\n ctrl.state = $scope.state;\r\n\r\n // #region Lifecycle hooks\r\n\r\n ctrl.$postLink = function () {\r\n $timeout(() => {\r\n // Select the named transclusion slot using the ng-transclude=\"eventSources\" attribute\r\n var eventSourcesSlot = $element[0].querySelector('[ng-transclude=\"eventSources\"]');\r\n\r\n // Count elements in the slot to determine total number of event sources\r\n state.numTotalEventSources = eventSourcesSlot.children[0].children.length;\r\n });\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n \r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (ctrl.options.calenderFilterPrefix && ctrl.options.calenderId) {\r\n state.filterIdPrefix = `${ctrl.options.calenderFilterPrefix}${ctrl.options.calenderId}_`;\r\n } else if (ctrl.options.calenderFilterPrefix) {\r\n state.filterIdPrefix = `${ctrl.options.calenderFilterPrefix}`;\r\n } else {\r\n state.filterIdPrefix = undefined;\r\n }\r\n\r\n state.editable = ctrl.options.editable === true && locationService.getBooleanQueryParam('editable');\r\n\r\n $scope.calendarOptions = {\r\n initialView: locationService.getQueryParam('view') || localSettingsService.getValue(`${componentId}.view`),\r\n initialDate: locationService.getQueryParam('date'),\r\n editable: state.editable,\r\n selectable: state.editable\r\n }\r\n\r\n updateSideColumnState();\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n\r\n // #region Public members\r\n\r\n ctrl.isEditable = function () {\r\n return $scope.$fullCalendar.isEditable();\r\n }\r\n\r\n ctrl.setEventDates = function (eventId, start, end) {\r\n $scope.$fullCalendar.setEventDates($scope.activeEventSource.id, eventId, start, end);\r\n }\r\n\r\n ctrl.setEventEditable = function (eventId, editable) {\r\n $scope.$fullCalendar.setEventEditable($scope.activeEventSource.id, eventId, editable);\r\n }\r\n\r\n ctrl.updateEvent = function (event) {\r\n $scope.$fullCalendar.updateEvent(event);\r\n }\r\n\r\n ctrl.updateEvents = function (events) {\r\n $scope.$fullCalendar.updateEvents(events);\r\n }\r\n\r\n ctrl.addEventSource = function (source) {\r\n $timeout(() => {\r\n let sourceCopy = angular.copy(source);\r\n\r\n if (angular.isFunction(sourceCopy.events)) {\r\n sourceCopy.events = function (info, successCallback, failureCallback) {\r\n return source.events(info, getFilterParams(), successCallback, failureCallback).then(function (response) {\r\n $timeout(() => {\r\n sourceCopy.dataLoaded = true;\r\n\r\n state.allEventSourcesLoaded = Object.values($scope.eventSources).filter(s => angular.isFunction(s.events)).every(s => s.dataLoaded);\r\n });\r\n });\r\n }\r\n }\r\n\r\n $scope.eventSources[source.id] = sourceCopy;\r\n\r\n $scope.eventSourceList = _.sortBy(Object.values($scope.eventSources), ['index']);\r\n\r\n if ($scope.eventSourceList.length == state.numTotalEventSources) {\r\n // all event sources have been initialized\r\n\r\n ctrl.setActiveEventSource($scope.eventSourceList[state.activeEventSourceIndex].id);\r\n }\r\n\r\n updateNumVisibleSources();\r\n });\r\n }\r\n\r\n ctrl.removeEventSource = function (sourceId) {\r\n $scope.$fullCalendar.removeEventSource(sourceId);\r\n\r\n delete eventSources[sourceId];\r\n\r\n updateNumVisibleSources();\r\n }\r\n\r\n ctrl.setActiveEventSource = function (sourceId) {\r\n $scope.activeEventSource = getEventSourceById(sourceId);\r\n loadEventSourceFilters($scope.activeEventSource);\r\n }\r\n\r\n ctrl.setEventSourceVisibility = function (sourceId, visible) {\r\n\r\n let eventSource = getEventSourceById(sourceId);\r\n\r\n if (eventSource.visible != visible) {\r\n $scope.eventSourceVisibilityChanged(eventSource, visible);\r\n\r\n $calendarEventSourceSelector.updateNumVisibleSources();\r\n }\r\n }\r\n\r\n ctrl.addEvent = function (event) {\r\n $scope.$fullCalendar.addEvent(event, $scope.activeEventSource.id);\r\n }\r\n\r\n ctrl.removeEvent = function (eventId) {\r\n return $scope.$fullCalendar.removeEvent($scope.activeEventSource.id, eventId);\r\n }\r\n\r\n ctrl.removeEvents = function (eventIds) {\r\n return $scope.$fullCalendar.removeEvents($scope.activeEventSource.id, eventIds);\r\n }\r\n\r\n ctrl.selectEvent = function (eventId) {\r\n $scope.$fullCalendar.selectEvent($scope.activeEventSource.id, eventId);\r\n }\r\n\r\n ctrl.openDropdown = function (dropdownCtrl, targetElement) {\r\n $timeout(() => {\r\n if (dropdownCtrl.menuElement) {\r\n dropdownCtrl.close();\r\n dropdownCtrl.setTriggerElement(targetElement);\r\n dropdownCtrl.toggleDropdown();\r\n } else {\r\n dropdownCtrl.setTriggerElement(targetElement);\r\n dropdownCtrl.toggleDropdown();\r\n }\r\n });\r\n }\r\n\r\n ctrl.setFilterValue = (filterId, value) => {\r\n\r\n let filter = $scope.filters.find(f => f.id == filterId);\r\n\r\n if (filter) {\r\n filter.value = value;\r\n\r\n $scope.$filterBar.filterChanged(filter);\r\n }\r\n };\r\n\r\n ctrl.refresh = refresh;\r\n\r\n ctrl.refreshVisibility = () => {\r\n updateSideColumnState();\r\n }\r\n\r\n ctrl.setEditable = setEditable;\r\n\r\n ctrl.eventRendered = (eventId, multiDay) => {\r\n if ($scope.$fullCalendar) {\r\n $scope.$fullCalendar.eventRendered(eventId, multiDay);\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region $scope members\r\n\r\n $scope.$on('currentbreakpoint.changed', (e, currentBreakPoint) => {\r\n updateSideColumnState();\r\n });\r\n\r\n let $goToDateForm = undefined;\r\n $scope.initGoToDateForm = function (formCtrl) {\r\n $goToDateForm = formCtrl;\r\n }\r\n\r\n $scope.initCalendarEventSourceSelector = function (calendarEventSourceSelectorCtrl) {\r\n $calendarEventSourceSelector = calendarEventSourceSelectorCtrl;\r\n }\r\n\r\n $scope.activeEventSourceChanged = function (eventSource) {\r\n ctrl.setActiveEventSource(eventSource.id);\r\n }\r\n\r\n $scope.eventSourceVisibilityChanged = function (eventSource, visible) {\r\n if (visible) {\r\n $scope.$fullCalendar.addEventSource(eventSource);\r\n } else {\r\n $scope.$fullCalendar.removeEventSource(eventSource.id);\r\n }\r\n\r\n $scope.eventSources[eventSource.id].visible = visible;\r\n\r\n updateNumVisibleSources();\r\n\r\n ctrl.onEventSourceVisibilityChanged({ eventSource: eventSource });\r\n }\r\n\r\n $scope.editEvent = function (eventId, eventSourceId, targetElem) {\r\n $scope.eventSources[eventSourceId].callbacks.editEvent(eventId, eventSourceId, targetElem);\r\n }\r\n\r\n $scope.goToDate = function (date) {\r\n //$timeout(() => {\r\n // if (date && $goToDateForm.form.$valid) {\r\n $scope.$fullCalendar.goToDate(date);\r\n // }\r\n //})\r\n }\r\n\r\n $scope.toggleLeftColumn = function () {\r\n state.collapseLeftColumn = !state.collapseLeftColumn;\r\n\r\n localSettingsService.setValue(`${componentId}_collapseLeftColumn`, state.collapseLeftColumn)\r\n\r\n if (!state.collapseLeftColumn) {\r\n state.leftColumnCollapsed = false;\r\n }\r\n\r\n ctrl.onLeftColumnToggled({ collapsed: state.collapseLeftColumn });\r\n }\r\n\r\n $scope.toggleRightColumn = function () {\r\n state.collapseRightColumn = !state.collapseRightColumn;\r\n\r\n localSettingsService.setValue(`${componentId}_collapseRightColumn`, state.collapseRightColumn)\r\n\r\n if (!state.collapseRightColumn) {\r\n state.rightColumnCollapsed = false;\r\n }\r\n\r\n ctrl.onRightColumnToggled({ collapsed: state.collapseRightColumn });\r\n }\r\n\r\n $scope.updateSize = function () {\r\n if ($scope.$fullCalendar) {\r\n $scope.$fullCalendar.updateSize();\r\n }\r\n }\r\n\r\n $scope.leftColumnCollapsed = function () {\r\n state.leftColumnCollapsed = true;\r\n $scope.updateSize();\r\n }\r\n\r\n $scope.leftColumnExpanded = function () {\r\n $scope.updateSize();\r\n }\r\n\r\n $scope.rightColumnCollapsed = function () {\r\n state.rightColumnCollapsed = true;\r\n $scope.updateSize();\r\n }\r\n\r\n $scope.rightColumnExpanded = function () {\r\n $scope.updateSize();\r\n }\r\n\r\n // #region FilterBar event handlers\r\n\r\n $scope.filterBarInitialized = function ($filterBar) {\r\n $scope.$filterBar = $filterBar;\r\n\r\n ctrl.onFilterBarInit({ $filterBar: $filterBar });\r\n };\r\n\r\n $scope.filterValuesInitialized = function (filters) {\r\n\r\n $scope.eventSourceList.forEach(es => $scope.$fullCalendar.addEventSource(es));\r\n\r\n $scope.$fullCalendar.setActiveEventSource($scope.activeEventSource.id);\r\n\r\n ctrl.setEventSourceVisibility($scope.activeEventSource.id, true);\r\n\r\n ctrl.onActiveEventSourceChanged({ eventSource: $scope.activeEventSource });\r\n\r\n ctrl.onFiltersLoaded({ filters: filters });\r\n }\r\n\r\n $scope.filtersChanged = function (filterState) {\r\n\r\n if (!_.isEqual(state.filterQueryStringParams, filterState.filterParams)) {\r\n // Only update if filters really have changed\r\n state.activeFilters = filterState.activeFilters;\r\n state.filterIsActive = filterState.filterIsActive;\r\n state.filterQueryStringParams = filterState.filterParams;\r\n state.filterObject = filterState.filterObject;\r\n\r\n ctrl.onFiltersChanged({ filterState: filterState });\r\n\r\n if (!state.busy && !filterState.firstChange) {\r\n refresh();\r\n }\r\n }\r\n };\r\n\r\n // #endregion\r\n\r\n // #region FullCalendar event handlers\r\n\r\n $scope.calendarInitialized = function (calendarCtrl) {\r\n $scope.$fullCalendar = calendarCtrl;\r\n\r\n ctrl.onInit({ calendarCtrl: ctrl });\r\n }\r\n\r\n $scope.calendarDatesSet = function (dates, title) {\r\n setQueryParam('date', dates.view.currentStart.toISOString());\r\n\r\n ctrl.onDatesSet({ dates: dates, title: title });\r\n\r\n let init = state.timePeriod === undefined;\r\n\r\n state.timePeriod = dates;\r\n\r\n if (init) {\r\n loadEventSourceFilters($scope.activeEventSource);\r\n }\r\n }\r\n\r\n $scope.calendarViewSet = function (view) {\r\n state.currentView = view;\r\n if ($scope.$calendarViewSelector) {\r\n $scope.$calendarViewSelector.setOption(view);\r\n }\r\n\r\n setQueryParam('view', view.id);\r\n }\r\n\r\n $scope.calendarLoading = function (isLoading) {\r\n busy(isLoading);\r\n\r\n $timeout(() => {\r\n orphanedScopes = undefined;\r\n }, 2000);\r\n }\r\n\r\n $scope.selectedEventsChanged = function (events) {\r\n\r\n let eventList = Object.values(events);\r\n state.selectedEvents = eventList;\r\n state.selectedEventIds = eventList.map((e) => e.id);\r\n state.selectedEventCount = eventList.length;\r\n state.hasSelectedEvents = eventList.length > 0;\r\n state.hasSingleSelectedEvent = eventList.length == 1;\r\n state.hasMultipleSelectedEvents = eventList.length > 1;\r\n\r\n state.selectedEventDuration = eventList.reduce((total, e) => {\r\n return total + (e.end - e.start);\r\n }, 0);\r\n }\r\n\r\n $scope.eventsSelected = (events) => {\r\n broadcastEvent('eventsSelected', events);\r\n }\r\n\r\n $scope.eventsDeselected = (events) => {\r\n broadcastEvent('eventsDeselected', events);\r\n }\r\n\r\n $scope.selectModeChanged = function (enable) {\r\n state.selectMode = enable;\r\n\r\n broadcastEvent('selectModeChanged', enable);\r\n }\r\n\r\n $scope.editableChanged = function (editable) {\r\n state.editable = editable;\r\n\r\n $scope.$fullCalendar.setSelectable(editable);\r\n $scope.setSelectMode(false);\r\n $scope.setSelectAll(false);\r\n\r\n setQueryParam('editable', editable + '');\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Calendar view selector event handlers\r\n\r\n $scope.calendarViewSelectorInit = function (dropdownSelectorCtrl) {\r\n $scope.$calendarViewSelector = dropdownSelectorCtrl;\r\n }\r\n\r\n $scope.calendarViewSelectorOptionChanged = function (view) {\r\n $scope.$fullCalendar.changeView(view.id);\r\n\r\n localSettingsService.setValue(`${componentId}.view`, view.id);\r\n }\r\n\r\n // #endregion\r\n\r\n $scope.removeSelectedEvents = function () {\r\n return $scope.removeEvents(state.selectedEvents).then(function (removed) {\r\n if (removed) {\r\n $scope.$fullCalendar.removeSelectedEvents();\r\n }\r\n });\r\n }\r\n\r\n // #region Toolbar actions\r\n\r\n $scope.setEditable = setEditable;\r\n\r\n $scope.setSelectMode = function(selectMode) {\r\n\r\n state.selectMode = selectMode;\r\n\r\n $scope.$fullCalendar.setSelectMode(selectMode);\r\n }\r\n\r\n $scope.setSelectAll = function (value) {\r\n state.selectAll = value;\r\n\r\n if (state.selectAll) {\r\n $scope.$fullCalendar.selectAllEvents();\r\n } else {\r\n $scope.$fullCalendar.resetSelectedEvents();\r\n }\r\n }\r\n\r\n $scope.refresh = () => {\r\n refresh();\r\n ctrl.onRefresh();\r\n }\r\n\r\n // #endregion\r\n\r\n // #endregion\r\n\r\n // #region Private members\r\n function setEditable(editable) {\r\n $scope.$fullCalendar.setEditable(editable);\r\n\r\n ctrl.onSetEditable({ editable: editable });\r\n }\r\n\r\n function refresh(eventSourceId) {\r\n $scope.$fullCalendar.refresh(eventSourceId);\r\n }\r\n\r\n function setQueryParam(key, value) {\r\n if (!ctrl.$dropdown) {\r\n locationService.setQueryParam(key, value);\r\n }\r\n }\r\n\r\n function busy(busy) {\r\n state.busy = busy;\r\n }\r\n\r\n function getFilterParams() {\r\n var filterParams = {};\r\n\r\n if (state.filterIdPrefix) {\r\n filterParams.filterIdPrefix = state.filterIdPrefix;\r\n }\r\n\r\n Object.assign(filterParams, state.filterQueryStringParams);\r\n\r\n return filterParams;\r\n }\r\n\r\n function loadEventSourceFilters(eventSource) {\r\n if (eventSource && state.timePeriod) {\r\n if (eventSource.filters) {\r\n eventSource.filters(state.timePeriod, getFilterParams()).then(function (response) {\r\n $scope.filters = response;\r\n $scope.$filterBar.setFilters(response);\r\n });\r\n } else {\r\n $scope.filters = null;\r\n $scope.$filterBar.setFilters([]);\r\n }\r\n }\r\n }\r\n\r\n function getEventSourceById(sourceId) {\r\n let eventSource = $scope.eventSources[sourceId];\r\n\r\n if (!eventSource) log.error(`Undefined event source: ${sourceId}`);\r\n\r\n return eventSource;\r\n }\r\n\r\n function updateNumVisibleSources() {\r\n state.numCurrentEventSources = $scope.eventSourceList.length;\r\n state.numVisibleEventSources = $scope.eventSourceList.filter(s => s.visible === true).length;\r\n }\r\n\r\n function updateSideColumnState() {\r\n let renderLeftColumn = leftColumnSlotFilled && ctrl.options.visibility.leftColumn && $rootScope.breakpoints.current >= ctrl.options.displayLeftColumnFromBp;\r\n let renderLeftColumnChanged = renderLeftColumn != state.renderLeftColumn;\r\n state.renderLeftColumn = renderLeftColumn;\r\n if (renderLeftColumnChanged || !state.renderLeftColumn && !state.leftColumnCollapsed) {\r\n ctrl.onLeftColumnToggled({ collapsed: !state.renderLeftColumn });\r\n }\r\n\r\n let renderRightColumn = rightColumnSlotFilled && ctrl.options.visibility.rightColumn && $rootScope.breakpoints.current >= ctrl.options.displayRightColumnFromBp; \r\n let renderRightColumnChanged = renderRightColumn != state.renderRightColumn;\r\n state.renderRightColumn = renderRightColumn;\r\n if (renderRightColumnChanged || !state.renderRightColumn && !state.rightColumnCollapsed) {\r\n ctrl.onRightColumnToggled({ collapsed: !state.renderRightColumn });\r\n }\r\n }\r\n\r\n function broadcastEvent(name, args) {\r\n $scope.$broadcast(`${componentId}.${name}`, args);\r\n }\r\n\r\n // #endregion\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'holidayCalendarEventSource';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n //options: '<'\r\n },\r\n require: {\r\n $calendar: '^calendar'\r\n },\r\n controller: ['$scope', '$element', function ($scope, $element) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n let eventSource = new CalendarEventSource({\r\n id: $scope.$id,\r\n type: componentId,\r\n name: 'Helgdagar',\r\n url: '/Content/helgdagar.ics',\r\n format: 'ics',\r\n readOnly: true,\r\n visible: true,\r\n selectable: false,\r\n eventTemplates: {\r\n default: ``\r\n }\r\n });\r\n\r\n ctrl.$onInit = function () {\r\n eventSource.index = $element.index();\r\n ctrl.$calendar.addEventSource(eventSource);\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n //if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n //}\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'holidayCalendarEvent';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n event: '<',\r\n //options: '<'\r\n },\r\n templateUrl: '/client/common/components/calendar/holiday-calendar-event.component.html',\r\n controller: ['$scope', '$element', function ($scope, $element) {\r\n\r\n var ctrl = this;\r\n\r\n //var defaultOptions = {\r\n \r\n //};\r\n\r\n ctrl.$onInit = function () {\r\n $element[0].className = 'fc-event-main-frame';\r\n }\r\n\r\n //ctrl.$onChanges = function (changes) {\r\n // if (changes.options) {\r\n // ctrl.options = merge(ctrl.options, defaultOptions);\r\n // }\r\n //}\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'caseLabel';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n case: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/cases/case-label.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n link: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n setupOptions();\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n $scope.colorCssClass = '';\r\n\r\n if (changes.case || changes.options) {\r\n\r\n if (changes.options) {\r\n setupOptions();\r\n }\r\n\r\n if (changes.case && ctrl.case && ctrl.case.type) {\r\n\r\n switch (ctrl.case.type.abbreviation) {\r\n\r\n //case 'OK':\r\n // $scope.colorCssClass += 'info-bg-color';\r\n // break;\r\n case 'KN':\r\n $scope.colorCssClass += 'success-bg-color';\r\n break;\r\n case 'PR':\r\n $scope.colorCssClass += 'info-bg-color';\r\n break;\r\n case 'FL':\r\n $scope.colorCssClass += 'warning-bg-color';\r\n break;\r\n case 'VB':\r\n $scope.colorCssClass += 'error-bg-color';\r\n break;\r\n case 'ÖV':\r\n $scope.colorCssClass += 'purple-bg-color';\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n var setupOptions = function () {\r\n if (ctrl.options) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'caseStatus';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n status: '<',\r\n iconOnly: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/cases/case-status.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n size: '1x'\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n\r\n $scope.sizeCssClass = ctrl.options.size ? ' fa-' + ctrl.options.size : '';\r\n switch (ctrl.options.size) {\r\n case 'lg':\r\n case '2x':\r\n $scope.textCssClass = 'font-weight-bold';\r\n break;\r\n //case '1x':\r\n // $scope.textCssClass = 'font-weight-medium';\r\n // break;\r\n }\r\n }\r\n\r\n if (changes.status) {\r\n $scope.iconHtml = '';\r\n\r\n if (ctrl.status) {\r\n $scope.iconHtml += '';\r\n switch (ctrl.status.codeName) {\r\n\r\n case 'None':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'InProgress':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'AwaitingFeedback':\r\n $scope.iconHtml += '';\r\n $scope.iconHtml += '';\r\n break;\r\n case 'Closed':\r\n $scope.iconHtml += '';\r\n break;\r\n }\r\n $scope.iconHtml += '';\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'caseTypeIcon';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n type: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/cases/case-type-icon.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n size: '1x'\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n setupOptions();\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n $scope.iconHtml = '';\r\n\r\n if (changes.type || changes.options) {\r\n\r\n if (changes.options) {\r\n setupOptions()\r\n\r\n $scope.sizeCssClass = ctrl.options.size ? ' fa-' + ctrl.options.size : '';\r\n }\r\n\r\n if (changes.type && ctrl.type) {\r\n\r\n $scope.iconHtml += '';\r\n switch (ctrl.type.abbreviation) {\r\n\r\n case 'OK':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'KN':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'PR':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'FL':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'VB':\r\n $scope.iconHtml += '';\r\n break;\r\n case 'ÖV':\r\n $scope.iconHtml += '';\r\n break;\r\n }\r\n $scope.iconHtml += '';\r\n }\r\n }\r\n }\r\n\r\n var setupOptions = function () {\r\n if (ctrl.options) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'caseType';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n type: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/cases/case-type.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n size: '1x'\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n setupOptions();\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.type || changes.options) {\r\n\r\n if (changes.options) {\r\n setupOptions();\r\n\r\n switch (ctrl.options.size) {\r\n case 'lg':\r\n case '2x':\r\n $scope.textCssClass = 'font-weight-bold';\r\n break;\r\n //case '1x':\r\n // $scope.textCssClass = 'font-weight-medium';\r\n // break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n var setupOptions = function () {\r\n if (ctrl.options) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'commentListItem';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n 'userAvatar': 'commentListItemUserAvatar',\r\n 'userName': 'commentListItemUserName',\r\n 'status': '?commentListItemStatus',\r\n 'replyForm': '?commentListItemReplyForm',\r\n 'editForm': '?commentListItemEditForm',\r\n 'replies': '?commentListItemReplies'\r\n },\r\n bindings: {\r\n comment: '<',\r\n userAccess: '<',\r\n options: '<',\r\n onRemove: '&'\r\n },\r\n templateUrl:\r\n '/client/common/components/comments/comment-list-item.component.html',\r\n controller: ['$scope', '$transclude', '$element', 'logger', 'hasValueFilter',\r\n function ($scope, $transclude, $element, logger, hasValueFilter) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n $scope.statusSlotFilled = $transclude.isSlotFilled('status');\r\n $scope.replyFormSlotFilled = $transclude.isSlotFilled('replyForm');\r\n $scope.editFormSlotFilled = $transclude.isSlotFilled('editForm');\r\n $scope.repliesSlotFilled = $transclude.isSlotFilled('replies');\r\n\r\n var defaultOptions = {\r\n readOnly: false,\r\n repliesCollapsed: true\r\n };\r\n\r\n ctrl.toolbarDropdownOptions = {\r\n trigger: {\r\n icon: 'far fa-ellipsis-h',\r\n cssClasses: ['btn btn-sm'],\r\n styleAsButton: false,\r\n styleAsSquareButton: false\r\n }\r\n };\r\n\r\n ctrl.deletedAt = undefined;\r\n ctrl.deleted = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.repliesCollapsed = ctrl.options.repliesCollapsed;\r\n\r\n ctrl.deletedAt = ctrl.comment.deletedAt;\r\n\r\n setDeletedStatus();\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.$doCheck = function () {\r\n if (ctrl.comment.deletedAt !== ctrl.deletedAt) {\r\n ctrl.deletedAt = ctrl.comment.deletedAt;\r\n setDeletedStatus()\r\n }\r\n }\r\n\r\n ctrl.remove = function () {\r\n\r\n if (ctrl.toolbarDropdownOptions.controller) {\r\n ctrl.toolbarDropdownOptions.controller.close();\r\n }\r\n \r\n ctrl.onRemove({ comment: ctrl.comment });\r\n }\r\n\r\n function setDeletedStatus() {\r\n if (ctrl.comment && ctrl.comment.deletedAt) {\r\n ctrl.deleted = true;\r\n $element.addClass('deleted');\r\n } else {\r\n ctrl.deleted = false;\r\n $element.removeClass('deleted');\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'commentList';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n header: '?commentListHeader',\r\n addFormUserAvatar: 'commentListAddFormUserAvatar',\r\n addForm: '?commentListAddForm',\r\n body: '?commentListBody'\r\n },\r\n bindings: {\r\n onLoadData: '&',\r\n onLoadFilters: '&',\r\n onLoadTypeDeclaration: '&',\r\n onDataLoaded: '&',\r\n onInit: '&',\r\n options: '<'\r\n },\r\n templateUrl:\r\n '/client/common/components/comments/comment-list.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', '$document', 'logger', 'localSettingsService', 'focus',\r\n function ($scope, $transclude, $timeout, $document, logger, localSettingsService, focus) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n $scope.headerSlotFilled = $transclude.isSlotFilled('header');\r\n $scope.addFormSlotFilled = $transclude.isSlotFilled('addForm');\r\n $scope.bodySlotFilled = $transclude.isSlotFilled('body');\r\n\r\n var defaultOptions = {\r\n pagedDataList: {\r\n listSettingsPrefix: componentId,\r\n defaultPageSize: 100,\r\n pageSizes: [100],\r\n filterBar: {\r\n dropdownFilterSet: 'secondary'\r\n }\r\n }\r\n };\r\n\r\n ctrl.data = undefined;\r\n ctrl.threadedView = loadBoolSetting('threadedView');\r\n ctrl.addFormElementId = 'addForm_' + $scope.$id;\r\n\r\n ctrl.busy = function (busy, busyText) {\r\n ctrl.pagedDataListCtrl.busy(busy, busyText);\r\n }\r\n\r\n ctrl.handleError = function (error) {\r\n ctrl.busy(false);\r\n\r\n throw error;\r\n }\r\n\r\n ctrl.loadFilters = function (params) {\r\n return ctrl.onLoadFilters({ params });\r\n }\r\n\r\n ctrl.loadData = function (params) {\r\n\r\n _.assign(params, { threaded: ctrl.threadedView });\r\n\r\n return ctrl.onLoadData({ params });\r\n }\r\n\r\n ctrl.dataLoaded = function (data, params, fullReload) {\r\n log.debug('Data received', data);\r\n\r\n if (!fullReload && ctrl.data && ctrl.data.results) {\r\n refreshArray(ctrl.data.results, data.results);\r\n } else {\r\n ctrl.data = data;\r\n }\r\n\r\n ctrl.onDataLoaded({ data: data, params: params, fullReload: fullReload });\r\n }\r\n \r\n ctrl.$onInit = function () {\r\n\r\n ctrl.data = undefined;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.onPagedDataListInit = function (listCtrl) {\r\n ctrl.pagedDataListCtrl = listCtrl;\r\n\r\n ctrl.onInit({ listCtrl: ctrl });\r\n }\r\n\r\n ctrl.refresh = function () {\r\n return ctrl.pagedDataListCtrl.loadData().then(function () {\r\n $scope.$broadcast(componentId + '.refresh')\r\n });\r\n }\r\n\r\n ctrl.threadedViewChanged = function () {\r\n $timeout(function () {\r\n saveSetting('threadedView', ctrl.threadedView);\r\n ctrl.pagedDataListCtrl.loadData({ fullReload: true });\r\n });\r\n }\r\n\r\n ctrl.scrollToElement = function (elementId, delay = 1000) {\r\n $timeout(function () {\r\n var element = document.getElementById(elementId);\r\n if (element) {\r\n var angularElement = angular.element(element);\r\n\r\n $document.scrollToElement(angularElement, 30, 500);\r\n }\r\n\r\n }, delay);\r\n }\r\n\r\n ctrl.scrollToAddForm = function () {\r\n ctrl.scrollToElement(ctrl.addFormElementId, 0);\r\n focus(componentId + '_newComment');\r\n }\r\n\r\n function saveSetting(key, value) {\r\n localSettingsService.setValue(componentId + '_' + key, value);\r\n }\r\n\r\n function loadBoolSetting(key) {\r\n return localSettingsService.getBool(componentId + '_' + key, false);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'alertBox';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n 'header': '?alertBoxHeader',\r\n 'body': '?alertBoxBody'\r\n },\r\n bindings: {\r\n type: '@',\r\n icon: '@',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/content/alert-box.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', 'logger',\r\n function ($scope, $transclude, $timeout, logger) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n iconAlignment: 'center',\r\n fullWidth: false,\r\n collapsable: false,\r\n backgroundColor: true\r\n };\r\n\r\n ctrl.collapse = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions)\r\n\r\n ctrl.collapse = ctrl.options.collapsable;\r\n }\r\n\r\n if (changes.icon || changes.type || changes.options) {\r\n setup();\r\n }\r\n }\r\n\r\n ctrl.toggleCollapse = function () {\r\n if (ctrl.options.collapsable) {\r\n ctrl.collapse = !ctrl.collapse\r\n }\r\n }\r\n\r\n $scope.headerSlotFilled = $transclude.isSlotFilled('header');\r\n $scope.bodySlotFilled = $transclude.isSlotFilled('body');\r\n\r\n function setup() {\r\n\r\n $scope.showIcon = false;\r\n\r\n if (ctrl.options) {\r\n $timeout(function () {\r\n if (ctrl.icon) {\r\n $scope.iconCssClass = ctrl.icon + ' ';\r\n } else {\r\n $scope.iconCssClass = '';\r\n }\r\n\r\n var typeLowerCased = ctrl.type ? ctrl.type.toLowerCase() : null;\r\n\r\n switch (typeLowerCased) {\r\n\r\n case 'success':\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-success';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-check-circle';\r\n $scope.iconCssClass += ' icon-success-colors';\r\n break;\r\n case 'progress':\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-info';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-circle';\r\n $scope.iconCssClass += ' text-info';\r\n break;\r\n case 'waiting':\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-warning';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-hourglass-half';\r\n $scope.iconCssClass += ' text-warning';\r\n break;\r\n case 'warning':\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-warning';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-exclamation-circle';\r\n $scope.iconCssClass += ' icon-warning-colors';\r\n break;\r\n case 'error':\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-danger';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-exclamation-circle';\r\n $scope.iconCssClass += ' icon-error-colors';\r\n break;\r\n case 'info':\r\n default:\r\n if (ctrl.options.backgroundColor) $scope.alertCssClass = 'alert-info';\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-info-circle';\r\n $scope.iconCssClass += ' icon-info-colors';\r\n break;\r\n }\r\n\r\n $scope.showIcon = true;\r\n });\r\n }\r\n }\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'qrCode';\r\n\r\n app.component(componentId, {\r\n \r\n bindings: {\r\n text: '@',\r\n width: '@',\r\n height: '@',\r\n colorDark: '@',\r\n colorLight: '@',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/content/qr-code.component.html',\r\n controller: ['$scope', '$timeout', '$element', 'logger',\r\n function ($scope, $timeout, $element, logger) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n }\r\n\r\n $scope.qrCode = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions)\r\n }\r\n\r\n if ((changes.text || changes.width || changes.height || changes.colorDark || changes.colorLight)\r\n && ctrl.text) {\r\n if ($scope.qrCode) {\r\n $scope.qrCode.clear();\r\n $scope.qrCode.makeCode(ctrl.text);\r\n } else {\r\n $scope.qrCode = new QRCode($element[0], {\r\n text: ctrl.text,\r\n width: parseInt(ctrl.width, 10) || 256,\r\n height: parseInt(ctrl.height, 10) || 256,\r\n colorDark: ctrl.colorDark || \"#000000\",\r\n colorLight: ctrl.colorLight || \"#ffffff\",\r\n correctLevel: QRCode.CorrectLevel.H\r\n });\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dashboardItem';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n titleText: '@',\r\n icon: '@',\r\n explanationText: '@',\r\n onInit: '&',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/dashboard/dashboard-item.component.html',\r\n controller: ['$scope', '$rootScope',\r\n function ($scope, $rootScope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n $scope.busy = false;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ dashboardItemCtrl: ctrl });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.busy = function (busy) {\r\n $scope.busy = busy;\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataListDashboardItem';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n titleText: '@',\r\n icon: '@',\r\n explanationText: '@',\r\n options: '<',\r\n onInit: '&',\r\n },\r\n templateUrl: '/client/common/components/dashboard/paged-data-list-dashboard-item.component.html',\r\n controller: ['$scope', '$rootScope',\r\n function ($scope, $rootScope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n dropdown: {\r\n preRenderBody: true,\r\n manualFirstOpen: true,\r\n manualClose: false,\r\n size: 'large'\r\n },\r\n formattedDate: {\r\n\r\n relative: true,\r\n dateCss: [\r\n {\r\n cssClass: 'badge badge-warning',\r\n fromDay: 0,\r\n toDay: 7\r\n }\r\n ]\r\n }\r\n };\r\n\r\n $scope.state = {\r\n activeFilters: undefined,\r\n numResults: undefined,\r\n date: undefined,\r\n dateTextLabel: undefined\r\n }\r\n\r\n ctrl.$onInit = function () {\r\n \r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n $scope.onDashboardItemInit = function (dashboardItemCtrl) {\r\n $scope.$dashboardItem = dashboardItemCtrl;\r\n\r\n ctrl.busy = $scope.$dashboardItem.busy;\r\n\r\n ctrl.onInit({ ctrl: ctrl });\r\n }\r\n\r\n $scope.onDropdownInit = function (dropdownCtrl) {\r\n $dropdown = dropdownCtrl;\r\n\r\n $dropdown.onOpening = function () {\r\n $scope.$emit(componentId + '.dropdownOpening');\r\n }\r\n }\r\n\r\n ctrl.setNumResults = function (numResults) {\r\n $scope.state.numResults = numResults;\r\n }\r\n\r\n ctrl.setActiveFilters = function (activeFilters) {\r\n if ($scope.state.activeFilters && activeFilters) {\r\n refreshArray($scope.state.activeFilters, activeFilters);\r\n } else {\r\n $scope.state.activeFilters = activeFilters;\r\n }\r\n }\r\n\r\n ctrl.setDate = function (date, dateTextLabel) {\r\n $scope.state.date = date;\r\n $scope.state.dateTextLabel = dateTextLabel;\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dateTimeFormatted';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n empty: '?empty'\r\n },\r\n bindings: {\r\n date: '<',\r\n cssClass: '@',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/datetime/date-time-formatted.component.html',\r\n controller: ['$transclude', 'fromNowFilter', 'toDateTimeStringFilter', 'toDateStringFilter', 'toEndDateStringFilter', 'isEffectiveDateFilter',\r\n function ($transclude, fromNowFilter, toDateTimeStringFilter, toDateStringFilter, toEndDateStringFilter, isEffectiveDateFilter) {\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n relative: true,\r\n dateCss: undefined,\r\n dateOnly: false,\r\n inclusiveEndDate: false\r\n };\r\n\r\n ctrl.cssClasses = {}\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.date) {\r\n formatDate(ctrl.date);\r\n }\r\n\r\n ctrl.emptySlotIsFilled = $transclude.isSlotFilled('empty');\r\n\r\n refreshBindings();\r\n }\r\n\r\n function formatDate(date) {\r\n\r\n if (date) {\r\n if (ctrl.options.dateOnly) {\r\n ctrl.formattedDateTime = ctrl.options.inclusiveEndDate ? toEndDateStringFilter(date) : toDateStringFilter(date);\r\n } else {\r\n ctrl.formattedDateTime = toDateTimeStringFilter(date);\r\n }\r\n var now = moment();\r\n var momentDate = moment(date);\r\n var daysDiff = momentDate.diff(now, 'days')\r\n if (ctrl.options.relative) {\r\n if (daysDiff < -30 || daysDiff > 30) {\r\n ctrl.presentedDateString = moment(date).format('ll');\r\n } else {\r\n ctrl.presentedDateString = fromNowFilter(date);\r\n }\r\n } else {\r\n ctrl.presentedDateString = ctrl.formattedDateTime;\r\n }\r\n\r\n if (ctrl.cssClass) {\r\n ctrl.cssClasses[ctrl.cssClass] = true;\r\n }\r\n else if (!ctrl.cssClass && ctrl.options.dateCss && angular.isArray(ctrl.options.dateCss)) {\r\n ctrl.options.dateCss.forEach(function (dateCss) {\r\n if (dateCss && dateCss.cssClass) {\r\n if (dateCss.dateHasPassed) {\r\n ctrl.cssClasses[dateCss.cssClass] = isEffectiveDateFilter(ctrl.date);\r\n }\r\n else if ((dateCss.fromDay == undefined || (momentDate.isAfter(now) && daysDiff >= dateCss.fromDay)) && (dateCss.toDay === undefined || daysDiff <= dateCss.toDay)) {\r\n ctrl.cssClasses[dateCss.cssClass] = true;\r\n } else {\r\n ctrl.cssClasses[dateCss.cssClass] = false;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n else {\r\n ctrl.formattedDateTime = null;\r\n ctrl.presentedDateString = null;\r\n }\r\n }\r\n\r\n function refreshBindings() {\r\n ctrl.bindingRefreshTrigger = new Date().getTime();\r\n }\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'enumItemList';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n items: '<',\r\n options: '<',\r\n },\r\n templateUrl:\r\n '/client/common/components/enum/enum-item-list.component.html',\r\n controller: ['$scope', '$timeout', 'logger',\r\n function ($scope, $timeout, logger) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n compact: false,\r\n horizontal: false,\r\n };\r\n\r\n $scope.cssClasses = {};\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n $scope.cssClasses['column'] = !ctrl.options['horizontal'];\r\n $scope.cssClasses['row wrap'] = ctrl.options['horizontal'];\r\n $scope.cssClasses['w-spacing-4'] = true;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'enumItemSelector';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $form: '^form',\r\n },\r\n bindings: {\r\n items: '<',\r\n itemType: '<',\r\n ngModel: '<',\r\n ngRequired: '<',\r\n ngDisabled: '<',\r\n options: '<',\r\n onSelected: '&',\r\n editMode: '':\r\n $scope.component = 'casePriority';\r\n break;\r\n case 'EnumItem':\r\n $scope.component = 'caseStatus';\r\n break;\r\n default:\r\n break;\r\n }\r\n } else {\r\n $scope.component = undefined;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dateTimeFilter';\r\n\r\n app.component(componentId, {\r\n restrict: 'E',\r\n replace: true,\r\n bindings: {\r\n filter: '<',\r\n onChanged: '&',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/filters/date-time-filter.component.html',\r\n controller: ['$scope', 'logger', 'hasValueFilter', 'dateFilter', 'previousDayFilter', 'momentFilter',\r\n function ($scope, logger, hasValueFilter, dateFilter, previousDayFilter, momentFilter) {\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n enablePlaceholder: false\r\n };\r\n\r\n ctrl.date = undefined;\r\n ctrl.minDate = undefined;\r\n ctrl.maxDate = undefined;\r\n ctrl.label = undefined;\r\n ctrl.placeholder = undefined;\r\n ctrl.explanation = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n\r\n $scope.$watchCollection(function () {\r\n return [ctrl.filter.linkedFilter, ctrl.filter.linkedFilter ? ctrl.filter.linkedFilter.value : null];\r\n }, function (newVal, oldVal) {\r\n if (newVal[0] !== oldVal[0] || newVal[1] !== oldVal[1]) {\r\n var linkedFilter = newVal[0];\r\n\r\n handleLinkedFilter(linkedFilter);\r\n }\r\n });\r\n\r\n $scope.$watch(function () { return ctrl.filter.value; }, function (newVal, oldVal) {\r\n if (newVal != oldVal) {\r\n handleFilterValueUpdate(ctrl.filter.value)\r\n }\r\n })\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.filter || changes.options) {\r\n\r\n if (ctrl.filter) {\r\n handleFilterValueUpdate(ctrl.filter.value)\r\n\r\n handleLinkedFilter(ctrl.filter.linkedFilter);\r\n }\r\n\r\n if (ctrl.filter && ctrl.options) {\r\n\r\n var filtername = ctrl.filter.shortName || ctrl.filter.name;\r\n\r\n ctrl.label = !ctrl.options.enablePlaceholder ? filtername : undefined;\r\n ctrl.placeholder = ctrl.options.enablePlaceholder ? filtername : undefined;\r\n ctrl.explanation = hasValueFilter(ctrl.filter.description) ? ctrl.filter.description : undefined;\r\n }\r\n }\r\n\r\n }\r\n\r\n ctrl.onDateChanged = function (value) {\r\n ctrl.date = value;\r\n ctrl.filter.value = value ? value.toISOString() : null;\r\n\r\n ctrl.onChanged({ filter: ctrl.filter });\r\n }\r\n\r\n function handleFilterValueUpdate(value) {\r\n ctrl.date = value ? new Date(value) : null;\r\n }\r\n\r\n function handleLinkedFilter(linkedFilter) {\r\n if (linkedFilter && linkedFilter.type == 4) {\r\n\r\n switch (ctrl.filter.dateTimeType) {\r\n case 0: // from\r\n ctrl.maxDate = linkedFilter.value ? momentFilter(previousDayFilter(linkedFilter.value), 'YYYY-MM-DD') : undefined;\r\n break;\r\n case 1: // to\r\n ctrl.minDate = linkedFilter.value ? dateFilter(new Date(linkedFilter.value), 'yyyy-MM-dd') : undefined;\r\n break;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'newFilterBar';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n toolbar1: '?filterBarToolbar1',\r\n toolbar2: '?filterBarToolbar2'\r\n },\r\n bindings: {\r\n onFiltersChanged: '&',\r\n onFilterValuesInitialized: '&',\r\n onInit: '&',\r\n busy: '<',\r\n filterIdPrefix: '@',\r\n hideToolbar1: '<',\r\n hideToolbar2: '<',\r\n dropdownFilterSet: '<',\r\n disableStoredFilters: '<',\r\n },\r\n templateUrl: '/client/common/components/filters/filter-bar.component.html',\r\n controller: ['$scope', '$transclude', '$q', 'logger', '$rootScope', '$timeout', 'locationService', 'localSettingsService', 'hasItemsFilter',\r\n function ($scope, $transclude, $q, logger, $rootScope, $timeout, locationService, localSettingsService, hasItemsFilter) {\r\n\r\n $transclude(function (clone, newScope) {\r\n $scope.defaultSlotFilled = isTranscludeSlotFilled(clone);\r\n newScope.$destroy();\r\n newScope = null;\r\n });\r\n $scope.toolbar1SlotFilled = $transclude.isSlotFilled('toolbar1');\r\n $scope.toolbar2SlotFilled = $transclude.isSlotFilled('toolbar2');\r\n\r\n $scope.transclusionSlotsFilled = $scope.defaultSlotFilled || $scope.toolbar1SlotFilled || $scope.toolbar2SlotFilled;\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger('filterBar');\r\n\r\n var filterCtrls = {};\r\n var storedFilterSettingsInitialized = false;\r\n var filterValuesInitialized = false;\r\n\r\n var defaultOptions = {\r\n\r\n };\r\n\r\n // #region Lifecycle hooks\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ $filterBar: ctrl });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Public members\r\n\r\n ctrl.filters = [];\r\n ctrl.activeFilters = [];\r\n ctrl.maxColumns = 4;\r\n ctrl.showFiltersStorageKey = undefined;\r\n\r\n ctrl.setFilters = function (filters) {\r\n\r\n filterValuesInitialized = false\r\n ctrl.filters = filters;\r\n\r\n initializeStoredFilterSettings();\r\n\r\n if (filters) {\r\n\r\n $scope.hasFilters = ctrl.filters && ctrl.filters.length > 0;\r\n\r\n $scope.visibleFilters = ctrl.filters.filter(function (f) {\r\n return f.visible === true && (f.type !== 2 || !f.hideIfOnlyOneOption || (f.options && f.options.length > 1));\r\n });\r\n\r\n $scope.hasVisibleFilters = $scope.visibleFilters.length > 0;\r\n\r\n $scope.mandatoryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.mandatory === true;\r\n });\r\n\r\n $scope.hasMandatoryFilters = $scope.mandatoryFilters.length > 0;\r\n\r\n $scope.mandatoryNonButtonFilters = $scope.mandatoryFilters.filter(function (f) {\r\n return !f.showAsButtons === true\r\n });\r\n\r\n $scope.hasMandatoryNonButtonFilters = $scope.mandatoryNonButtonFilters.length > 0;\r\n\r\n $scope.primaryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.primary === true && f.mandatory !== true && !f.showAsButtons === true;\r\n });\r\n\r\n $scope.hasPrimaryFilters = $scope.primaryFilters.length > 0;\r\n\r\n $scope.secondaryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.primary === false && f.mandatory !== true && !f.showAsButtons === true;\r\n });\r\n\r\n $scope.buttonFilters = ctrl.filters.filter(function (f) {\r\n return f.showAsButtons === true;\r\n });\r\n\r\n $scope.buttonFilters.forEach(function (f) {\r\n if (f.showAllFilterOptions === undefined) {\r\n f.showAllFilterOptions = true;\r\n }\r\n });\r\n\r\n $scope.hasSecondaryFilters = $scope.secondaryFilters.length > 0;\r\n\r\n $scope.allFiltersArePrimary = ctrl.filters.every(function (f) { return f.primary === true; })\r\n\r\n handleCurrentBreakpoint($rootScope.breakpoints.current);\r\n\r\n return initializeFilterValues();\r\n }\r\n else {\r\n return $q.resolve([]).then(function (filters) {\r\n $scope.hasVisibleFilters = false;\r\n $scope.visibleFilters = filters;\r\n\r\n return filters;\r\n });\r\n }\r\n }\r\n\r\n ctrl.registerFilterCtrl = function (filterId, filterCtrl) {\r\n filterCtrls[filterId] = filterCtrl;\r\n }\r\n\r\n ctrl.setFilterValue = function (filterId, value) {\r\n var filterCtrl = filterCtrls[filterId];\r\n if (filterCtrl) {\r\n filterCtrl.setValue(value);\r\n }\r\n }\r\n\r\n ctrl.setFilterIdsExcludedFromActiveFiltersWithNonDefaultValue = function (filterIds) {\r\n ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue = filterIds;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region $scope members\r\n\r\n $scope.state = {\r\n collapsableFilterSectionExpanded: false,\r\n filterDropdown: {}\r\n };\r\n\r\n $scope.activeFilterCount = 0;\r\n $scope.storedFilters = undefined;\r\n $scope.filterStorageKey = undefined;\r\n $scope.filterIsActive = false;\r\n $scope.renderMandatoryFiltersInline = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n $scope.enableFilterDropdown = false;\r\n $scope.buttonFilters = undefined;\r\n\r\n $scope.mandatoryFilterFormCtrl = undefined;\r\n $scope.primaryFilterFormCtrl = undefined;\r\n $scope.secondaryFilterFormCtrl = undefined;\r\n $scope.dropdownFilterFormCtrl = undefined;\r\n\r\n // #region Event handlers\r\n\r\n $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n handleCurrentBreakpoint(currentBreakpoint);\r\n });\r\n\r\n $scope.$on(componentId + '.resetFilters', function (e) {\r\n $scope.resetFilters();\r\n });\r\n\r\n // #endregion\r\n\r\n $scope.mandatoryFilterFormInit = function (formCtrl) {\r\n $scope.mandatoryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.primaryFilterFormInit = function (formCtrl) {\r\n $scope.primaryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.secondaryFilterFormInit = function (formCtrl) {\r\n $scope.secondaryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.dropdownFilterFormInit = function (formCtrl) {\r\n $scope.dropdownFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.filterChanged = function (filter) {\r\n return $timeout(function () {\r\n log.debug('Filter changed', filter);\r\n\r\n var updatedFilterIndex = 0;\r\n ctrl.filters.find(function (f, index) { updatedFilterIndex = index; return f.id == filter.id; })\r\n\r\n ctrl.filters[updatedFilterIndex] = filter;\r\n\r\n setQueryStringParam(filter);\r\n\r\n $scope.filtersChanged(filter);\r\n })\r\n };\r\n\r\n ctrl.filterChanged = $scope.filterChanged;\r\n\r\n $scope.filtersChanged = function (changedFilter, firstChange) {\r\n\r\n if (filterFormIsValid()) {\r\n log.debug('Filters changed');\r\n log.debug('Available filters:', ctrl.filters)\r\n\r\n var filterParams = {};\r\n if (ctrl.filters) {\r\n\r\n _.forEach(ctrl.filters, function (f) {\r\n if (f.linkedFilterId) {\r\n f.linkedFilter = _.find(ctrl.filters, function (lf) { return lf.id === f.linkedFilterId; });\r\n }\r\n })\r\n\r\n ctrl.activeFilters = ctrl.filters.filter(function (filter) { return isActiveFilter(filter); });\r\n ctrl.activeFiltersWithNonDefaultValues = ctrl.activeFilters.filter(function (f) {\r\n return (!ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue || !ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue[f.id]) && (f.primary && filterHasNonDefaultValue(f) || !f.primary && filterHasValue(f));\r\n });\r\n ctrl.activeSecondaryFiltersWithNonDefaultValues = ctrl.activeFiltersWithNonDefaultValues.filter(function (f) { return !f.primary && !f.mandatory; });\r\n\r\n $scope.activeFilterCount = ctrl.activeFiltersWithNonDefaultValues.length;\r\n _.forEach(ctrl.filters, function (f) {\r\n f.selectedOption = _.find(f.options, function (o) {\r\n if (angular.isNumber(f.value)) {\r\n return o.id === f.value;\r\n }\r\n return o.id === f.value;\r\n });\r\n })\r\n\r\n $scope.filterIsActive = ctrl.activeFilters && ctrl.activeFilters.length > 0;\r\n\r\n filterParams = getFilteringRequestParams(ctrl.activeFilters);\r\n }\r\n\r\n\r\n log.debug('Active filters:', ctrl.activeFilters)\r\n\r\n var currentFiltersState = {\r\n activeFilters: ctrl.activeFilters,\r\n activeFiltersWithNonDefaultValues: ctrl.activeFiltersWithNonDefaultValues,\r\n filterIsActive: $scope.filterIsActive,\r\n filterParams: filterParams,\r\n activeFilterObj: getFilterObject(ctrl.activeFilters),\r\n changedFilter: changedFilter,\r\n firstChange: firstChange\r\n };\r\n\r\n ctrl.onFiltersChanged({ filterState: currentFiltersState });\r\n\r\n $scope.$emit(componentId + '.filtersChanged', currentFiltersState);\r\n }\r\n };\r\n $scope.resetFilters = function (e, filterIds) {\r\n\r\n log.debug('Resetting filters');\r\n\r\n if (filterIds) log.debug('Excluded filters:', filterIds);\r\n\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n\r\n _.forEach(ctrl.activeFilters, function (filter) {\r\n if (filter.visible && (!filterIds || filterIds[filter.id])) {\r\n setFilterValue(filter, undefined);\r\n }\r\n });\r\n\r\n clearQueryStringParams(filterIds);\r\n\r\n setDefaultOptions(filterIds);\r\n\r\n $scope.filtersChanged();\r\n };\r\n\r\n ctrl.resetFilters = $scope.resetFilters;\r\n\r\n $scope.storedFiltersLoaded = function (storedFilters) {\r\n $scope.storedFilters = ctrl.disableStoredFilters ? null : storedFilters || null;\r\n\r\n initializeFilterValues();\r\n\r\n log.debug('Stored filters:', $scope.storedFilters);\r\n }\r\n\r\n $scope.filtersStored = function (storedFilters) {\r\n $scope.storedFilters = storedFilters;\r\n\r\n log.debug('Filters stored:', $scope.storedFilters);\r\n }\r\n\r\n $scope.storedFiltersCleared = function () {\r\n $scope.storedFilters = undefined;\r\n clearQueryStringParams();\r\n _.forEach(ctrl.activeFilters, function (filter) {\r\n setFilterValue(filter, undefined);\r\n });\r\n setDefaultOptions();\r\n $scope.filtersChanged();\r\n }\r\n\r\n $scope.toggleCollapsableFilterSection = function (e) {\r\n e.stopPropagation();\r\n\r\n $scope.state.collapsableFilterSectionExpanded = !$scope.state.collapsableFilterSectionExpanded\r\n\r\n localSettingsService.setValue(ctrl.showFiltersStorageKey, $scope.state.collapsableFilterSectionExpanded);\r\n }\r\n\r\n $scope.buttonFilterClicked = function (filter, value) {\r\n if (filter.value !== value) {\r\n filter.value = value;\r\n\r\n $scope.filterChanged(filter);\r\n }\r\n else {\r\n if (!filter.mandatory) {\r\n filter.value = null;\r\n $scope.filterChanged(filter);\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Private members\r\n\r\n function initializeFilterValues() {\r\n return $timeout(function () {\r\n if (filterValuesInitialized) {\r\n if (ctrl.activeFilters.length > 0) {\r\n restoreFilterOptions(ctrl.activeFilters);\r\n }\r\n\r\n $scope.filtersChanged();\r\n\r\n } else if (ctrl.filters\r\n && (ctrl.filters.length === 0 || $scope.storedFilters !== undefined)) {\r\n\r\n setFiltersBasedOnQueryParams();\r\n setDefaultOptions();\r\n\r\n if (filterFormIsValid()) {\r\n filterValuesInitialized = true;\r\n\r\n log.debug('Filters values initialized', ctrl.filters);\r\n\r\n if (ctrl.activeFilters.length > 0) {\r\n restoreFilterOptions(ctrl.activeFilters);\r\n }\r\n\r\n $scope.filtersChanged(null, true);\r\n\r\n ctrl.onFilterValuesInitialized({ filters: ctrl.filters });\r\n }\r\n }\r\n });\r\n }\r\n\r\n function initializeStoredFilterSettings() {\r\n if (!storedFilterSettingsInitialized) {\r\n ctrl.showFiltersStorageKey = 'ShowFilters:' + (ctrl.filterIdPrefix ? '(' + ctrl.filterIdPrefix + ')' : '') + locationService.getPath();\r\n $scope.filterStorageKey = 'Filters:' + (ctrl.filterIdPrefix ? '(' + ctrl.filterIdPrefix + ')' : '') + locationService.getPath();\r\n\r\n $scope.state.collapsableFilterSectionExpanded = localSettingsService.getBool(ctrl.showFiltersStorageKey, false)\r\n }\r\n }\r\n\r\n function handleCurrentBreakpoint(currentBreakpoint) {\r\n if (currentBreakpoint < 5 /*&& !$scope.allFiltersArePrimary*/) {\r\n $scope.dropdownFilters = $scope.visibleFilters.filter(function (f) { return f.mandatory === false; });\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n } else {\r\n switch (ctrl.dropdownFilterSet) {\r\n case 'secondary':\r\n $scope.dropdownFilters = $scope.secondaryFilters;\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = true;\r\n $scope.renderSecondaryFiltersInline = false;\r\n break;\r\n case 'all':\r\n $scope.dropdownFilters = $scope.visibleFilters;\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n break;\r\n default:\r\n $scope.dropdownFilters = undefined;\r\n $scope.enableFilterDropdown = false;\r\n $scope.renderPrimaryFiltersInline = true;\r\n $scope.renderSecondaryFiltersInline = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function setFiltersBasedOnQueryParams() {\r\n log.debug('Setting filters based on query params ');\r\n _.forEach(ctrl.filters, function (filter) {\r\n var filterQueryParamValue = locationService.getQueryParam(filter.id);\r\n if (isQueryParamValueDefined(filterQueryParamValue)) {\r\n setFilterValue(filter, filterQueryParamValue);\r\n\r\n log.debug('Filter set based on query param:', filter);\r\n }\r\n });\r\n }\r\n\r\n function restoreFilterOptions(previousFilters) {\r\n log.debug('Restoring previous filter settings');\r\n _.forEach(previousFilters, function (previousFilter) {\r\n if (previousFilter.value !== undefined && previousFilter.value !== null) {\r\n var currentFilter = _.find(ctrl.filters, function (f) { return f.id === previousFilter.id; });\r\n if (currentFilter && (currentFilter.value === undefined || currentFilter.value === null)) {\r\n setFilterValue(currentFilter, previousFilter.value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function filterFormIsValid() {\r\n return (!($scope.hasMandatoryFilters && $scope.renderMandatoryFiltersInline) || (($scope.mandatoryFilterFormCtrl && $scope.mandatoryFilterFormCtrl.form && $scope.mandatoryFilterFormCtrl.form.$valid)\r\n && $scope.mandatoryFilters.every(f => filterHasValue(f)))) &&\r\n (!($scope.hasPrimaryFilters && $scope.renderPrimaryFiltersInline) || ($scope.primaryFilterFormCtrl && $scope.primaryFilterFormCtrl.form && $scope.primaryFilterFormCtrl.form.$valid)) &&\r\n (!($scope.hasSecondaryFilters && $scope.renderSecondaryFiltersInline) || ($scope.secondaryFilterFormCtrl && $scope.secondaryFilterFormCtrl.form && $scope.secondaryFilterFormCtrl.form.$valid)) &&\r\n (!(hasItemsFilter($scope.dropdownFilters) && $scope.enableFilterDropdown) || ($scope.dropdownFilterFormCtrl && $scope.dropdownFilterFormCtrl.form && $scope.dropdownFilterFormCtrl.form.$valid));\r\n }\r\n\r\n function setFilterValue(filter, value) {\r\n switch (filter.type) {\r\n case 1:\r\n filter.value = value !== undefined && value !== null ? Number(value) : value;\r\n break;\r\n case 2:\r\n switch (filter.valueTypeName) {\r\n case 'Nullable':\r\n filter.value = value !== undefined && value !== null ? Number(value) : value;\r\n break;\r\n case 'Nullable':\r\n filter.value = value !== undefined && value !== null ? value === true || value === 'true' : value;\r\n break;\r\n default:\r\n filter.value = value\r\n break;\r\n }\r\n\r\n break;\r\n case 3:\r\n filter.value = value === true || value === 'true';\r\n break;\r\n default:\r\n filter.value = value;\r\n break;\r\n }\r\n }\r\n\r\n function getFilterDefaultValue(filter) {\r\n switch (filter.type) {\r\n case 3:\r\n return filter.defaultValue === true || filter.defaultValue === 'true'\r\n default:\r\n return filter.defaultValue;\r\n }\r\n }\r\n\r\n function filterHasNonDefaultValue(filter) {\r\n return filter.value !== getFilterDefaultValue(filter);\r\n }\r\n\r\n function isActiveFilter(filter) {\r\n return filterHasValue(filter);\r\n }\r\n\r\n function setDefaultOptions(filterIds) {\r\n\r\n log.debug('Setting default options');\r\n if (filterIds) log.debug('Excluded filters:', filterIds);\r\n\r\n _.forEach(ctrl.filters, function (filter) {\r\n\r\n if (!filterIds || filterIds[filter.id]) {\r\n if (!filterQueryParamHasValue(filter)) {\r\n if (filter.defaultValue !== undefined && filter.defaultValue !== null && filterHasNonDefaultValue(filter)) {\r\n setFilterValue(filter, filter.defaultValue)\r\n\r\n setQueryStringParam(filter);\r\n }\r\n\r\n if ($scope.storedFilters) {\r\n var storedFilter = _.find($scope.storedFilters, function (sf) { return sf.id === filter.id })\r\n if (storedFilter && filter.value !== storedFilter.value) {\r\n setFilterValue(filter, storedFilter.value)\r\n\r\n setQueryStringParam(filter);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n function filterQueryParamHasValue(filter) {\r\n return isQueryParamValueDefined(locationService.getQueryParam(filter.id));\r\n }\r\n\r\n function isQueryParamValueDefined(value) {\r\n return value !== undefined && value !== null && value !== '';\r\n }\r\n\r\n function filterHasValue(filter) {\r\n return filter.value !== undefined && filter.value !== null && filter.value !== '' && !Number.isNaN(filter.value);\r\n }\r\n\r\n function setQueryStringParam(filter) {\r\n if (isActiveFilter(filter) && filterHasNonDefaultValue(filter)) {\r\n locationService.setQueryParam(filter.id, String(filter.value));\r\n } else {\r\n locationService.removeQueryParam(filter.id);\r\n }\r\n }\r\n\r\n function clearQueryStringParams(filterIds) {\r\n if (ctrl.filters) {\r\n _.forEach(ctrl.filters, function (filter) {\r\n if (!filterIds || filterIds[filter.id]) {\r\n locationService.removeQueryParam(filter.id);\r\n }\r\n });\r\n }\r\n }\r\n function getFilteringRequestParams(filters) {\r\n var filterParams = {};\r\n var filterIndex = 0;\r\n\r\n _.forEach(filters, function (filter) {\r\n if (filterHasValue(filter)) {\r\n filterParams['filters[' + filterIndex + '].Key'] = filter.id;\r\n filterParams['filters[' + filterIndex + '].Value'] = filter.value;\r\n }\r\n filterIndex++;\r\n });\r\n\r\n return filterParams;\r\n }\r\n\r\n function getFilterObject(filters) {\r\n var filterObject = {};\r\n\r\n _.forEach(filters, function (filter) {\r\n if (filterHasValue(filter)) {\r\n filterObject[filter.id] = filter.value;\r\n }\r\n });\r\n\r\n return filterObject;\r\n }\r\n\r\n // #endregion\r\n }],\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'filterToolbar';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n filters: '<',\r\n activeFilters: '<',\r\n filterStorageKey: '<',\r\n disabled: '<',\r\n options: '<',\r\n onStoredFiltersLoaded: '&',\r\n onFiltersStored: '&',\r\n onStoredFiltersCleared: '&',\r\n onResetFilters: '&',\r\n },\r\n templateUrl: '/client/common/components/filters/filter-toolbar.component.html',\r\n controller: ['$scope', 'logger', 'localSettingsService', function ($scope, logger, localSettingsService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.storedFilters = undefined;\r\n var filterTypesNotStored = {\r\n 5: true\r\n };\r\n\r\n ctrl.state = {\r\n showSave: false,\r\n showRemoveSaved: false,\r\n showRestoreFilters: false,\r\n hasDefaultFilters: false,\r\n hasStoredFilters: false,\r\n disableStoredFilters: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.filterStorageKey && ctrl.filterStorageKey) {\r\n ctrl.storedFilters = localSettingsService.getValue(ctrl.filterStorageKey, undefined);\r\n\r\n ctrl.state.hasStoredFilters = hasItems(ctrl.storedFilters);\r\n\r\n ctrl.onStoredFiltersLoaded({ storedFilters: ctrl.storedFilters });\r\n }\r\n\r\n if (changes.activeFilters) {\r\n ctrl.filterIsActive = ctrl.activeFilters && ctrl.activeFilters.length > 0;\r\n }\r\n\r\n if (changes.filters) {\r\n ctrl.state.hasDefaultFilters = _.some(ctrl.filters, function (f) { return f.defaultValue; });\r\n }\r\n\r\n if (changes.filters || changes.activeFilters || changes.options) {\r\n if (ctrl.filters && ctrl.activeFilters && ctrl.options) {\r\n updateState();\r\n }\r\n }\r\n }\r\n\r\n ctrl.filterChanged = function (filter) {\r\n ctrl.onFilterChanged({ filter: filter });\r\n };\r\n\r\n ctrl.storeFilters = function () {\r\n ctrl.storedFilters = _.map(getStorableActiveFilters(), function (f) { return { id: f.id, value: f.value } });\r\n localSettingsService.setValue(ctrl.filterStorageKey, ctrl.storedFilters);\r\n ctrl.state.hasStoredFilters = true;\r\n updateState();\r\n\r\n ctrl.onFiltersStored({ storedFilters: ctrl.storedFilters });\r\n };\r\n\r\n ctrl.removeStoredFilters = function () {\r\n ctrl.storedFilters = undefined;\r\n localStorage.removeItem(ctrl.filterStorageKey);\r\n ctrl.state.hasStoredFilters = false;\r\n updateState();\r\n\r\n ctrl.onStoredFiltersCleared();\r\n };\r\n\r\n ctrl.resetFilters = function () {\r\n ctrl.onResetFilters();\r\n }\r\n\r\n function updateState() {\r\n var storedFilterSetEqualsActive = getStoredFilterSetEqualsActive();\r\n var storableActiveFilterSetEqualsDefault = getActiveFilterSetEqualsDefault(getStorableActiveFilters(), getStorableFiltersWithDefaultValues());\r\n var activeFilterSetEqualsDefault = getActiveFilterSetEqualsDefault(ctrl.activeFilters, getFiltersWithDefaultValues());\r\n\r\n ctrl.state.showSave = !ctrl.options.disableStoredFilters && ctrl.filterIsActive && !storedFilterSetEqualsActive && !storableActiveFilterSetEqualsDefault\r\n ctrl.state.showRemoveSaved = !ctrl.options.disableStoredFilters && ctrl.state.hasStoredFilters;\r\n ctrl.state.showRestoreFilters = !storedFilterSetEqualsActive && !activeFilterSetEqualsDefault && hasItems(ctrl.filters);\r\n }\r\n\r\n function getFiltersWithDefaultValues() {\r\n return ctrl.filters.filter(function (f) { return hasValue(f.defaultValue); })\r\n }\r\n\r\n function getStorableFiltersWithDefaultValues() {\r\n return getFiltersWithDefaultValues().filter(function (f) { return !filterTypesNotStored[f.type]; })\r\n }\r\n\r\n function getStorableActiveFilters() {\r\n return ctrl.activeFilters.filter(function (f) { return !filterTypesNotStored[f.type]; });\r\n }\r\n\r\n function getStoredFilterSetEqualsActive() {\r\n\r\n if (ctrl.storedFilters) {\r\n return _.isEqual(\r\n _.sortBy(ctrl.storedFilters),\r\n _.sortBy(_.map(getStorableActiveFilters(), function (f) { return { id: f.id, value: f.value } }))\r\n )\r\n }\r\n\r\n return getStorableActiveFilters().length === 0;\r\n }\r\n\r\n function getActiveFilterSetEqualsDefault(activeSet, defaultSet) {\r\n var activeFilterMap = _.sortBy(_.map(activeSet, function (f) { return { id: f.id, value: f.value } }));\r\n log.debug('Active filters:', activeFilterMap);\r\n\r\n var filtersWithDefaultValuesMap = _.sortBy(_.map(defaultSet, function (f) { return { id: f.id, value: f.defaultValue } }));\r\n log.debug('Default filters:', filtersWithDefaultValuesMap);\r\n\r\n return _.isEqual(\r\n filtersWithDefaultValuesMap,\r\n activeFilterMap\r\n )\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'filterValue';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n filter: '<',\r\n },\r\n templateUrl: '/client/common/components/filters/filter-value.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.filter && ctrl.filter) {\r\n if (ctrl.filter.type === 2) {\r\n var genericArgumentsStartIndex = ctrl.filter.optionModelTypeName.indexOf('<');\r\n var typeName = genericArgumentsStartIndex > 0 ? ctrl.filter.optionModelTypeName.substring(0, genericArgumentsStartIndex) : ctrl.filter.optionModelTypeName;\r\n switch (typeName) {\r\n case 'String':\r\n $scope.dropdownType = 'default';\r\n break;\r\n case 'Boolean':\r\n $scope.dropdownType = 'boolean';\r\n break;\r\n case 'IBasicPersonReadModel':\r\n case 'IPersonReadModel':\r\n $scope.dropdownType = 'userSelector';\r\n break;\r\n case 'ICompanyReadModel':\r\n $scope.dropdownType = 'companySelector';\r\n break;\r\n case 'EnumItem':\r\n $scope.dropdownType = 'enumItemSelector';\r\n break;\r\n case 'CaseTypeReadModel':\r\n $scope.dropdownType = 'caseTypeSelector';\r\n break;\r\n \r\n default:\r\n $scope.dropdownType = undefined;\r\n throw new Error('Unknown option model type: ' + ctrl.filter.optionModelTypeName)\r\n }\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'filter';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n filter: '<',\r\n options: '<',\r\n onFilterChanged: '&'\r\n },\r\n require: {\r\n $form: '^form',\r\n },\r\n templateUrl: '/client/common/components/filters/filter.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n\r\n var defaultOptions = {\r\n enablePlaceholder: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.filterChanged = function (filter) {\r\n ctrl.onFilterChanged({ filter: filter });\r\n };\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'timePeriodFilter';\r\n\r\n app.component(componentId, {\r\n restrict: 'E',\r\n replace: true,\r\n require: {\r\n $form: '^form',\r\n filterBarCtrl: '^filterBar'\r\n },\r\n bindings: {\r\n filter: '<',\r\n filterValue: '<',\r\n onChanged: '&',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/filters/time-period-filter.component.html',\r\n controller: ['$scope', 'logger', 'hasValueFilter', '$timeout', 'previousDayFilter', 'momentFilter', 'detectUtils',\r\n function ($scope, logger, hasValueFilter, $timeout, previousDayFilter, momentFilter, detectUtils) {\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n enablePlaceholder: false,\r\n defaultToCurrentDate: false\r\n };\r\n\r\n ctrl.customPeriod = false;\r\n ctrl.month = undefined;\r\n ctrl.fromDate = undefined;\r\n ctrl.fromDateMax = undefined;\r\n ctrl.toDate = undefined;\r\n ctrl.toDateMin = undefined;\r\n ctrl.minDate = undefined;\r\n ctrl.maxDate = undefined;\r\n ctrl.label = undefined;\r\n ctrl.placeholder = undefined;\r\n ctrl.explanation = undefined;\r\n ctrl.updatePending = false;\r\n $scope.monthPickerCtrl = undefined;\r\n\r\n $scope.state = {\r\n ios: detectUtils.isIOS()\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n ctrl.filterBarCtrl.registerFilterCtrl(ctrl.filter.id, ctrl);\r\n\r\n if (!ctrl.month && ctrl.options.defaultToCurrentDate) {\r\n let now = new Date();\r\n let startOfMonth = getLocalDate(now.getFullYear(), now.getMonth(), 1);\r\n\r\n ctrl.month = startOfMonth;\r\n\r\n updateBasedOnMonth(ctrl.month);\r\n\r\n updateFilterValue();\r\n }\r\n\r\n if (!ctrl.filter.allowCustomPeriod) {\r\n ctrl.resetCustomPeriod();\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.filter || changes.options) {\r\n\r\n if (ctrl.filter) {\r\n loadFilterValue(ctrl.filter.value);\r\n }\r\n\r\n if (ctrl.filter && ctrl.options) {\r\n\r\n var filtername = ctrl.filter.shortName || ctrl.filter.name;\r\n\r\n ctrl.label = !ctrl.options.enablePlaceholder ? filtername : undefined;\r\n ctrl.placeholder = ctrl.options.enablePlaceholder ? filtername : undefined;\r\n ctrl.explanation = hasValueFilter(ctrl.filter.description) ? ctrl.filter.description : undefined;\r\n }\r\n }\r\n\r\n if (changes.filterValue) {\r\n loadFilterValue(ctrl.filterValue);\r\n }\r\n }\r\n\r\n ctrl.formInit = function (formCtrl) {\r\n ctrl.formCtrl = formCtrl;\r\n\r\n ctrl.formCtrl.onReset = function () {\r\n loadFilterValue(ctrl.filterValue);\r\n }\r\n }\r\n\r\n ctrl.onDropdownInit = function (dropdownCtrl) {\r\n $scope.dropdownCtrl = dropdownCtrl;\r\n }\r\n\r\n ctrl.monthPickerInit = function (ctrl) {\r\n $scope.monthPickerCtrl = ctrl;\r\n }\r\n\r\n ctrl.showMonthPicker = function () {\r\n\r\n if (!$scope.monthPickerCtrl.nativeInputShowPickerSupported) return;\r\n\r\n if (!ctrl.customPeriod && $scope.monthPickerCtrl && $scope.monthPickerCtrl.inputElement) {\r\n $scope.monthPickerCtrl.inputElement.showPicker();\r\n }\r\n }\r\n\r\n ctrl.monthChanged = function (value) {\r\n\r\n if (value) {\r\n ctrl.month = convertToLocalDate(value);\r\n updateBasedOnMonth(ctrl.month);\r\n \r\n } else {\r\n reset();\r\n }\r\n\r\n updateFilterValue();\r\n }\r\n\r\n ctrl.fromChanged = function (value) {\r\n ctrl.month = value ? parseToLocalDate(value) : null;\r\n\r\n ctrl.fromDate = parseToLocalDate(value);\r\n\r\n updateToDateMin();\r\n }\r\n\r\n ctrl.toChanged = function (value) {\r\n ctrl.toDate = parseToLocalDate(value);\r\n\r\n updateFromDateMax();\r\n }\r\n\r\n ctrl.customizePeriod = function (e) {\r\n\r\n ctrl.customPeriod = true;\r\n }\r\n\r\n ctrl.confirmCustomPeriod = function () {\r\n\r\n updateFilterValue();\r\n\r\n $scope.dropdownCtrl.close()\r\n }\r\n\r\n ctrl.resetCustomPeriod = function (e) {\r\n\r\n ctrl.customPeriod = false;\r\n\r\n let startDate = ctrl.fromDate || new Date();\r\n let startOfMonth = getLocalDate(startDate.getFullYear(), startDate.getMonth(), 1);\r\n\r\n ctrl.month = startOfMonth;\r\n\r\n updateBasedOnMonth(ctrl.month);\r\n\r\n updateFilterValue();\r\n\r\n if ($scope.dropdownCtrl && $scope.dropdownCtrl.showDropdown) {\r\n $scope.dropdownCtrl.close();\r\n\r\n ctrl.showMonthPicker();\r\n }\r\n }\r\n\r\n ctrl.setValue = function(value) {\r\n loadFilterValue(value);\r\n\r\n updateFilterValue();\r\n }\r\n\r\n ctrl.cancel = function () {\r\n $scope.dropdownCtrl.close()\r\n }\r\n\r\n $scope.dropdownClosed = function () {\r\n updateCustomPeriod();\r\n }\r\n\r\n function loadFilterValue(value) {\r\n if (value) {\r\n var valueParts = value.split(',');\r\n\r\n ctrl.filterFromDate = parseToLocalDate(valueParts[0]);\r\n ctrl.filterToDate = parseToLocalDate(valueParts[1]);\r\n\r\n ctrl.month = copyDate(ctrl.filterFromDate);\r\n\r\n setDates(copyDate(ctrl.filterFromDate), copyDate(ctrl.filterToDate))\r\n\r\n updateCustomPeriod();\r\n } else {\r\n reset();\r\n }\r\n }\r\n\r\n function updateBasedOnMonth(value) {\r\n var startOfMonth = new Date(value);\r\n var endOfMonth = new Date(startOfMonth);\r\n endOfMonth.setMonth(startOfMonth.getMonth() + 1)\r\n\r\n setDates(startOfMonth, endOfMonth)\r\n }\r\n\r\n function setDates(from, to) {\r\n\r\n ctrl.fromDateMax = undefined;\r\n ctrl.toDateMin = undefined;\r\n\r\n ctrl.fromDate = from;\r\n ctrl.toDate = to;\r\n\r\n updateFromDateMax();\r\n updateToDateMin();\r\n }\r\n\r\n function updateFromDateMax() {\r\n ctrl.fromDateMax = ctrl.toDate ? (momentFilter(previousDayFilter(ctrl.toDate), 'YYYY-MM-DD')) : undefined\r\n }\r\n\r\n function updateToDateMin() {\r\n ctrl.toDateMin = ctrl.fromDate ? momentFilter(moment(ctrl.fromDate), 'YYYY-MM-DD') : undefined\r\n }\r\n\r\n function updateFilterValue() {\r\n if (ctrl.fromDate && ctrl.toDate) {\r\n ctrl.filter.value = (ctrl.fromDate ? ctrl.fromDate.toISOString() : '') + ',' + (ctrl.toDate ? ctrl.toDate.toISOString() : '');\r\n\r\n ctrl.filterFromDate = parseToLocalDate(ctrl.fromDate);\r\n ctrl.filterToDate = parseToLocalDate(ctrl.toDate);\r\n\r\n updateCustomPeriod();\r\n\r\n } else {\r\n ctrl.filter.value = null;\r\n ctrl.customPeriod = false;\r\n }\r\n\r\n ctrl.onChanged({ filter: ctrl.filter });\r\n }\r\n\r\n function reset() {\r\n ctrl.filterFromDate = null;\r\n ctrl.filterToDate = null;\r\n ctrl.month = null;\r\n setDates(null, null);\r\n ctrl.customPeriod = false;\r\n }\r\n\r\n function updateCustomPeriod() {\r\n ctrl.customPeriod = !datesAreStartAndEndOfMonth(ctrl.fromDate, ctrl.toDate);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'bankAccountNumberForm';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n bankAccountClearingNumber: '<',\r\n bankAccountNumber: '<',\r\n bankName: '<',\r\n options: '<',\r\n onSubmitted: '&',\r\n },\r\n templateUrl:\r\n '/client/common/components/form/bank-account-number-form.component.html',\r\n controller: ['$scope', '$rootScope', '$q', 'logger', 'requestHelper', 'appService',\r\n function ($scope, $rootScope, $q, logger, requestHelper, appService) {\r\n\r\n var ctrl = this;\r\n\r\n let cronaApi = appService.getApi('crona');\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n formOptions: {\r\n submit: {\r\n buttonText: 'Spara'\r\n }\r\n },\r\n readOnly: false\r\n };\r\n\r\n $scope.model = {\r\n bankAccountClearingNumber: undefined,\r\n bankAccountNumber: undefined\r\n };\r\n\r\n let state = {\r\n payrollSystemIntegrationEnabled: $rootScope.user.productFeatures.payrollSystemIntegration.available && $rootScope.user.customer.hasCronaIntegration,\r\n bankDetailsAreMandatory: undefined\r\n };\r\n state.bankDetailsAreMandatory = state.payrollSystemIntegrationEnabled;\r\n $scope.state = state; \r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.bankAccountClearingNumber) {\r\n $scope.model.bankAccountClearingNumber = ctrl.bankAccountClearingNumber;\r\n }\r\n\r\n if (changes.bankAccountNumber) {\r\n $scope.model.bankAccountNumber = ctrl.bankAccountNumber;\r\n }\r\n\r\n if (changes.bankName) {\r\n $scope.model.bankName = ctrl.bankName;\r\n }\r\n\r\n if (changes.bankAccountClearingNumber || changes.bankAccountNumber || changes.bankName) {\r\n state.bankDetailsAreMandatory = state.payrollSystemIntegrationEnabled && (hasValue(ctrl.bankAccountClearingNumber) || hasValue(ctrl.bankAccountNumber) || hasValue(ctrl.bankName));\r\n }\r\n }\r\n\r\n ctrl.formInit = function (formCtrl) {\r\n ctrl.formCtrl = formCtrl;\r\n ctrl.handleError = ctrl.formCtrl.handleError;\r\n ctrl.busy = ctrl.formCtrl.busy;\r\n ctrl.busyState = ctrl.formCtrl.busyState;\r\n }\r\n\r\n ctrl.submit = function (model) {\r\n\r\n if (state.payrollSystemIntegrationEnabled) {\r\n\r\n cronaApi.post({\r\n endpointName: 'validateBankAccountNumber',\r\n data: {\r\n bankAccountClearingNumber: model.bankAccountClearingNumber,\r\n bankAccountNumber: model.bankAccountNumber\r\n }\r\n }).then(validationResult => {\r\n if (validationResult.isValid) {\r\n model.bankName = validationResult.bankName;\r\n return submit(model);\r\n }\r\n\r\n log.error('Kontonumret är felaktigt. Kontrollera siffrorna och försök igen.');\r\n });\r\n } else {\r\n return submit(model);\r\n }\r\n };\r\n\r\n ctrl.propertyUpdated = function (propName, value) {\r\n $scope.model[propName] = value;\r\n }\r\n\r\n function submit(model) {\r\n return $q(function (resolve) {\r\n ctrl.onSubmitted({ model: model })\r\n\r\n resolve();\r\n });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'basicForm';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n model: '<',\r\n modelDefaults: '<',\r\n hideToolbar: '<',\r\n hideSubmit: '<',\r\n disableSubmit: '<',\r\n disableDefaultInteraction: '<',\r\n hideCancel: '<',\r\n headerTitleText: '@',\r\n options: '<',\r\n onInit: '&',\r\n onSubmit: '&',\r\n onLoadModel: '&',\r\n onUpdateModel: '&',\r\n onClose: '&',\r\n onReset: '&',\r\n ngDisabled: '<',\r\n enableRefresh: '<',\r\n onRefresh: '&',\r\n $dropdown: ' {\r\n updateDropdown();\r\n });\r\n }\r\n }\r\n }\r\n else if (ctrl.$dropdown.onOpen === undefined) {\r\n ctrl.$dropdown.onOpen = function () {\r\n ctrl.loadModel(true);\r\n }\r\n }\r\n\r\n if (ctrl.dropdownCtrl.onClose === undefined) {\r\n ctrl.dropdownCtrl.onClose = function () {\r\n ctrl.onClose();\r\n ctrl.reset();\r\n }\r\n }\r\n\r\n if (ctrl.$dropdown.state.open || ctrl.$dropdown.state.opening) {\r\n ctrl.loadModel(true);\r\n }\r\n\r\n } else {\r\n ctrl.loadModel(true);\r\n }\r\n })\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (ctrl.options.disableAutocomplete) {\r\n $scope.autocomplete = 'off';\r\n }\r\n }\r\n\r\n if ((changes.headerTitleText || changes.options) && ctrl.options) {\r\n\r\n state.visibility.header = ctrl.headerSlotIsFilled && ctrl.options.visibility.header;\r\n state.visibility.headerStatus = ctrl.headerStatusSlotIsFilled && ctrl.options.visibility.headerStatus;\r\n state.visibility.headerToolbar = ctrl.headerToolbarSlotIsFilled && ctrl.options.visibility.headerToolbar;\r\n }\r\n\r\n if (changes.modelDefaults) {\r\n ctrl.modelDefaults = merge(ctrl.modelDefaults, modelDefaults);\r\n }\r\n\r\n if (ctrl.form && changes.ngDisabled) {\r\n ctrl.form.ngDisabled = ctrl.ngDisabled === true;\r\n }\r\n }\r\n\r\n ctrl.init = function () {\r\n\r\n var init = ctrl.onInit({ formCtrl: ctrl });\r\n\r\n if (init) {\r\n $timeout(function () {\r\n busy(true);\r\n\r\n init.then(function () {\r\n busy(false);\r\n\r\n }, handleError);\r\n });\r\n }\r\n }\r\n\r\n ctrl.loadModel = function (init) {\r\n\r\n if (!init || !state.loadedOnInit) {\r\n state.loadedOnInit = true;\r\n\r\n var onLoadModel = ctrl.onLoadModel();\r\n if (onLoadModel && angular.isFunction(onLoadModel.then)) {\r\n busy(true, ctrl.options.loadModel.busyText);\r\n\r\n return onLoadModel.then(function () {\r\n state.modelLoaded = true;\r\n busy(false);\r\n\r\n updateDropdown();\r\n\r\n return state.modelLoaded;\r\n }, handleError);\r\n } else {\r\n $scope.state.modelLoaded = true;\r\n\r\n updateDropdown();\r\n }\r\n }\r\n\r\n return $q.resolve($scope.state.modelLoaded);\r\n }\r\n\r\n ctrl.submit = function () {\r\n\r\n if (ctrl.form.$valid && (!ctrl.options.submit.confirmationText || confirm(ctrl.options.submit.confirmationText))) {\r\n\r\n var promises = [];\r\n promises.push($timeout(function () {\r\n var model = angular.copy(ctrl.model);\r\n\r\n var submit = ctrl.onSubmit({ model: model });\r\n\r\n if (submit && angular.isFunction(submit.then)) {\r\n\r\n busy(true, ctrl.options.submit.busyText);\r\n\r\n return submit.then(function () {\r\n busy(false);\r\n\r\n if (ctrl.options.submit.closeDropdownAfterSubmit) {\r\n ctrl.close();\r\n }\r\n\r\n if (ctrl.options.submit.fullResetAfterSubmit\r\n || (ctrl.options.submit.resetDefaultsAfterSubmit\r\n && ctrl.modelDefaults\r\n && Object.keys(ctrl.modelDefaults).length > 0)) {\r\n\r\n ctrl.reset();\r\n }\r\n\r\n }, handleError);\r\n }\r\n }));\r\n\r\n return $q.all(promises);\r\n }\r\n\r\n ctrl.form.$submitted = true;\r\n\r\n return false;\r\n }\r\n\r\n ctrl.cancel = function () {\r\n ctrl.close();\r\n\r\n ctrl.reset();\r\n }\r\n\r\n ctrl.reset = function () {\r\n state.loadedOnInit = false;\r\n\r\n $timeout(function () {\r\n if (ctrl.form && ctrl.onReset() !== false) {\r\n resetModel();\r\n ctrl.form.$setUntouched();\r\n ctrl.form.$setPristine();\r\n }\r\n });\r\n }\r\n\r\n ctrl.close = function () {\r\n if (ctrl.onClose() !== false) {\r\n if (ctrl.$dropdown) {\r\n ctrl.$dropdown.close(false);\r\n }\r\n }\r\n }\r\n\r\n ctrl.onHeaderClose = function () {\r\n //return ctrl.onClose();\r\n }\r\n\r\n ctrl.refresh = function () {\r\n return ctrl.onRefresh();\r\n }\r\n\r\n var resetModel = function () {\r\n if (ctrl.model) {\r\n if (ctrl.options.close.fullResetAfterClose || ctrl.options.submit.fullResetAfterSubmit) {\r\n Object.keys(ctrl.model).forEach(function (k) {\r\n delete ctrl.model[k];\r\n });\r\n }\r\n if (ctrl.options.close.resetDefaultsAfterClose || ctrl.options.submit.resetDefaultsAfterSubmit) {\r\n setModelDefaults();\r\n }\r\n }\r\n }\r\n\r\n var setModelDefaults = function () {\r\n if (ctrl.modelDefaults) {\r\n _.assign(ctrl.model, ctrl.modelDefaults);\r\n }\r\n }\r\n\r\n var busy = function (busy, busyText) {\r\n ctrl.busyState.busy = busy;\r\n ctrl.busyState.busyText = busyText;\r\n }\r\n\r\n ctrl.busy = busy;\r\n\r\n var handleError = function (error) {\r\n busy(false);\r\n\r\n throw error;\r\n }\r\n\r\n ctrl.handleError = handleError;\r\n\r\n function updateDropdown() {\r\n if (ctrl.$dropdown) {\r\n\r\n if (ctrl.$dropdown.state.open) {\r\n $timeout(() => ctrl.$dropdown.updateMenuPosition());\r\n } else if (ctrl.$dropdown.state.opening) {\r\n $timeout(function () {\r\n ctrl.$dropdown.open();\r\n\r\n $timeout(() => ctrl.$dropdown.updateMenuPosition(), 200);\r\n });\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'collapsableFieldset';\r\n\r\n app.component(componentId, {\r\n require: {\r\n formCtrl: '?^form',\r\n collapsableFieldsetCtrl: '?^^collapsableFieldset'\r\n },\r\n transclude: {\r\n title: '?collapsableFieldsetTitle',\r\n },\r\n bindings: {\r\n titleText: '@',\r\n titleCssClasses: ' 0) {\r\n return labels;\r\n }\r\n\r\n return Array.from(formElement.querySelectorAll('.ui-select-placeholder'));\r\n }\r\n\r\n return [];\r\n }\r\n\r\n function getElementLabelText(elementId) {\r\n var associatedLabels = getAssociatedElementLabels(elementId);\r\n if (associatedLabels && associatedLabels.length > 0) {\r\n return associatedLabels[0].textContent;\r\n }\r\n\r\n return null;\r\n }\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'inputFieldResetButton';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n model: '<',\r\n onReset: '&',\r\n },\r\n templateUrl: '/client/common/components/form/input-field-reset-button.component.html',\r\n controller: ['$scope', function ($scope) {\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n \r\n };\r\n\r\n $scope.reset = function () {\r\n\r\n $scope.$emit(componentId + '.reset');\r\n\r\n ctrl.onReset({ value: null })\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'inputField';\r\n\r\n app.component(componentId, {\r\n require: {\r\n formCtrl: '^form',\r\n ngModelCtrl: 'ngModel',\r\n ngRequiredCtrl: '?ngRequired',\r\n collapsableFieldsetCtrl: '?^collapsableFieldset'\r\n },\r\n bindings: {\r\n type: '@',\r\n ngModel: '<',\r\n ngValue: '<',\r\n ngName: '@',\r\n ngModelIndeterminate: '<',\r\n selectableOptions: '<',\r\n matchModel: '<',\r\n matchModelValidationMessage: '@',\r\n ngRequired: '<',\r\n ngDisabled: '<',\r\n ngReadonly: '<',\r\n min: '@',\r\n max: '@',\r\n ngStep: '<',\r\n minlength: '@',\r\n maxlength: '@',\r\n pattern: '@',\r\n label: '@',\r\n focusEvent: '@',\r\n placeholder: '@',\r\n defaultText: '@',\r\n autocomplete: '@',\r\n requiredMessage: '@',\r\n explanation: '@',\r\n disabledReason: '@',\r\n readOnlyMode: ' {\r\n switch (ctrl.type) {\r\n case 'checkbox':\r\n if (state.cssClasses.checkbox) {\r\n updateCheckboxCssClasses();\r\n }\r\n break;\r\n case 'radio':\r\n if (state.cssClasses.radio) {\r\n updateRadioCssClasses();\r\n }\r\n break;\r\n }\r\n });\r\n\r\n $scope.$watch(\"$ctrl.formCtrl['\" + $scope.id + \"'].$valid\", function (newValue, oldValue) {\r\n if (newValue !== undefined) {\r\n log.debug('Validity', [$scope.id, newValue]);\r\n updateParentComponents();\r\n }\r\n });\r\n\r\n $scope.$watch(\"$ctrl.formCtrl['\" + $scope.id + \"'].$error\", function (newValue, oldValue) {\r\n if (newValue !== undefined) {\r\n \r\n let error = newValue;\r\n state.errorMessages = [];\r\n\r\n if (error.required) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(ctrl.requiredMessage ? ctrl.requiredMessage : ctrl.label ? `${ctrl.label} måste anges` : 'Måste anges');\r\n break;\r\n }\r\n }\r\n\r\n if (error.minlength) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Måste vara minst ${$scope.minlength} tecken`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.maxlength) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Får vara max ${$scope.maxlength} tecken`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.pattern) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Ogiltigt format`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.email) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`E-postadressen har ogiltigt format`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.matchString) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push($ctrl.matchModelValidationMessage ? $ctrl.matchModelValidationMessage : 'Matchar inte');\r\n break;\r\n }\r\n }\r\n\r\n if (error.usernameAvailable) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Användarnamnet är upptaget`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.passwordValidate) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Använd 8 tecken varav minst en siffra och minst en bokstav`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.min) {\r\n switch (ctrl.type) {\r\n case 'year':\r\n state.errorMessages.push(`Det angivna året måste vara ${$scope.min} eller senare`);\r\n break;\r\n case 'datetime-local':\r\n state.errorMessages.push(`Den angivna tidpunkten måste vara ${toDateTimeStringFilter($scope.min)} eller senare`);\r\n break;\r\n default:\r\n state.errorMessages.push(`Det angivna värdet måste vara minst ${$scope.min}`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.max) {\r\n switch (ctrl.type) {\r\n case 'year':\r\n state.errorMessages.push(`Det angivna året måste vara ${$scope.max} eller tidigare`);\r\n break;\r\n case 'datetime-local':\r\n state.errorMessages.push(`Den angivna tidpunkten måste vara ${toDateTimeStringFilter($scope.max)} eller tidigare`);\r\n break;\r\n default:\r\n state.errorMessages.push(`Det angivna värdet får vara max ${$scope.max}`);\r\n break;\r\n }\r\n }\r\n\r\n if (error.week) {\r\n switch (ctrl.type) {\r\n default:\r\n state.errorMessages.push(`Ogiltigt värde`);\r\n break;\r\n }\r\n }\r\n\r\n updateValidationTooltip();\r\n }\r\n }, true);\r\n\r\n let restoreFocusWhenRenabled = false;\r\n let previouslyFocusedElement = null;\r\n\r\n $scope.$watch(\"$ctrl.formCtrl.ngDisabled\", function (newValue, oldValue) {\r\n if (newValue !== undefined) {\r\n let formDisabled = newValue;\r\n switch ($scope.type) {\r\n case 'text':\r\n case 'number':\r\n if (state.hasFocus && state.focusedElement && formDisabled) {\r\n restoreFocusWhenRenabled = true;\r\n previouslyFocusedElement = state.focusedElement;\r\n }\r\n\r\n if (!formDisabled && restoreFocusWhenRenabled) {\r\n previouslyFocusedElement.focus();\r\n\r\n $timeout(function () {\r\n // Move the cursor to the end of the input's value\r\n previouslyFocusedElement.select();\r\n let lengthOfCurrentInputValue = previouslyFocusedElement.value.length;\r\n previouslyFocusedElement.setSelectionRange(lengthOfCurrentInputValue, lengthOfCurrentInputValue);\r\n previouslyFocusedElement = null;\r\n restoreFocusWhenRenabled = false;\r\n });\r\n }\r\n break;\r\n }\r\n }\r\n });\r\n\r\n let debounceTimeout;\r\n \r\n function cancelDebounceTimeout() {\r\n if (debounceTimeout) {\r\n $timeout.cancel(debounceTimeout);\r\n }\r\n }\r\n\r\n function changed(value) {\r\n\r\n $timeout(() => {\r\n if (!ctrl.nativeInputTypeSupported || isValid()) {\r\n\r\n let outputValue = prepareOutputValue(value);\r\n\r\n ctrl.onChanged({ value: outputValue })\r\n\r\n log.debug('Value changed:', outputValue);\r\n\r\n updateSaveButtonState();\r\n }\r\n })\r\n }\r\n\r\n $scope.changed = changed;\r\n\r\n $scope.onChangeDebounced = function () {\r\n log.debug('onChangeDebounced:', ctrl.model);\r\n cancelDebounceTimeout();\r\n\r\n // If the user is not typing, assume they selected value\r\n if (!state.userIsTyping) {\r\n state.userSelectedValue = true;\r\n changed(ctrl.model); // Trigger immediately if selected through date picker\r\n } else {\r\n // Set a debounce timeout\r\n debounceTimeout = $timeout(function () {\r\n changed(ctrl.model);\r\n }, ctrl.options.debounce); // Adjust delay as needed (500ms in this case)\r\n }\r\n }\r\n\r\n $scope.onFocus = function (e) {\r\n log.debug('onFocus:', ctrl.model);\r\n state.hasFocus = true;\r\n state.focusedElement = e.target;\r\n state.userIsTyping = false;\r\n state.userSelectedValue = false;\r\n\r\n if (ctrl.options.selectOnFocus) {\r\n e.target.select();\r\n }\r\n };\r\n\r\n $scope.onBlur = function (e) {\r\n log.debug('onBlur:', ctrl.model);\r\n state.hasFocus = false;\r\n state.focusedElement = null;\r\n cancelDebounceTimeout();\r\n\r\n if (modelHasChanged()) {\r\n cancelDebounceTimeout();\r\n changed(ctrl.model);\r\n }\r\n }\r\n\r\n $scope.onKeydown = function (e) {\r\n state.userIsTyping = true;\r\n log.debug('onKeydown:', ctrl.model);\r\n\r\n if (modelHasChanged()) {\r\n switch (e.keyCode) {\r\n case 13:\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n cancelDebounceTimeout();\r\n changed(ctrl.model);\r\n\r\n if (ctrl.showSaveButton && ctrl.options.enableSaveOnEnter) {\r\n ctrl.save(ctrl.model, e);\r\n }\r\n\r\n break;\r\n default:\r\n $scope.onChangeDebounced();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n $scope.enableMarkdownPreviewChanged = function (enable) {\r\n state.enableMarkdownPreview = enable;\r\n }\r\n\r\n var setupType = function () {\r\n\r\n let type = ctrl.type || 'text';\r\n let autocomplete = ctrl.autocomplete || 'off';\r\n let min = ctrl.min;\r\n let max = ctrl.max;\r\n let pattern = ctrl.pattern;\r\n let maxlength = ctrl.maxlength;\r\n\r\n switch (ctrl.type) {\r\n case 'username':\r\n type = 'text';\r\n pattern = /^[a-zA-Z0-9@\\-_.]+$/i;\r\n autocomplete = ctrl.autocomplete || 'off';\r\n $scope.id = 'username_' + $scope.$id;\r\n break;\r\n case 'password':\r\n type = 'password';\r\n autocomplete = ctrl.autocomplete || 'new-password';\r\n break;\r\n case 'number':\r\n type = ctrl.type;\r\n autocomplete = ctrl.autocomplete || 'off';\r\n\r\n if (ctrl.ngStep === 0.01) {\r\n pattern = /^[0-9]+(\\.[0-9]{1,2})?$/;\r\n }\r\n break;\r\n case 'bank-account-clearing-number':\r\n type = 'text';\r\n maxlength = 6;\r\n pattern = /^(?:\\d{4}|\\d{4}-\\d)$/;\r\n\r\n // ^ asserts the start of the string.\r\n // (?: ... ) is a non-capturing group.\r\n // \\d{4} matches exactly 4 digits.\r\n // | is the alternation operator, which allows matching either the pattern before or the pattern after it.\r\n // \\d{4} matches exactly 4 digits.\r\n // - matches the '-' character.\r\n // \\d matches a digit.\r\n // $ asserts the end of the string.\r\n break;\r\n case 'bank-account-number':\r\n type = 'text';\r\n maxlength = 13;\r\n pattern = /^(?=\\d)(?!.*([ -]){2})(?:[0-9]| |-)*\\d$/;\r\n // ^ asserts the start of the string.\r\n // (?=\\d) is a positive lookahead assertion that checks if the string starts with a digit.\r\n // (?!.*([ -]){2}) is a negative lookahead assertion that ensures there are no two consecutive space characters or '-' characters.\r\n // (?:[0-9]| |-)* is a non-capturing group that matches any combination of digits, spaces, and '-' characters, where * denotes zero or more occurrences.\r\n // \\d matches a digit.\r\n // $ asserts the end of the string.\r\n break;\r\n case 'year':\r\n type = 'number';\r\n min = ctrl.min || defaultsContraints.minYear;\r\n max = ctrl.max || defaultsContraints.maxYear;\r\n break;\r\n case 'month':\r\n min = ctrl.min || `${defaultsContraints.minYear}-01`;\r\n max = ctrl.max || `${defaultsContraints.maxYear}-12`;\r\n break;\r\n case 'week':\r\n min = ctrl.min || `${defaultsContraints.minYear}-W01`;\r\n max = ctrl.max || `${defaultsContraints.maxYear}-W53`;\r\n break;\r\n case 'date':\r\n min = ctrl.min || `${defaultsContraints.minYear}-01-01`;\r\n max = ctrl.max || `${defaultsContraints.maxYear}-12-31`;\r\n break;\r\n case 'datetime-local':\r\n\r\n min = ctrl.min || `${defaultsContraints.minYear}-01-01T00:00`;\r\n\r\n if (ctrl.options && ctrl.options.datetime.allowFutureDates === false && !updateMaxBasedOnCurrentTime) {\r\n setMaxBasedOnCurrentTime();\r\n\r\n // Set interval to update datetime-local max attribute every 15 seconds\r\n updateMaxBasedOnCurrentTime = $interval(setMaxBasedOnCurrentTime, 15000);\r\n } else {\r\n max = ctrl.max || `${defaultsContraints.maxYear}-12-31T00:00`;\r\n }\r\n break;\r\n }\r\n\r\n $scope.type = type;\r\n $scope.autocomplete = autocomplete;\r\n $scope.min = min;\r\n $scope.max = max;\r\n $scope.pattern = pattern;\r\n $scope.maxlength = maxlength;\r\n\r\n $scope.cssClasses = {};\r\n\r\n $scope.cssClasses[`${$scope.type}-input-field`] = true;\r\n\r\n if (ctrl.type && $scope.type !== ctrl.type) {\r\n $scope.cssClasses[`${ctrl.type}-input-field`] = true;\r\n }\r\n\r\n if (ctrl.options.visibility.reset) {\r\n $scope.cssClasses[`resettable-input-field`] = true;\r\n }\r\n\r\n ctrl.nativeInputTypeSupported = $rootScope.browserFeatures.inputs[$scope.type] !== false;\r\n ctrl.nativeInputShowPickerSupported = $rootScope.browserFeatures.inputShowPicker[$scope.type] !== false;\r\n\r\n if (!$scope.typeInitialized && !ctrl.nativeInputTypeSupported) {\r\n switch ($scope.type) {\r\n case 'month':\r\n $scope.$watch('$ctrl.fallbackModels.month', function (newValue, oldValue) {\r\n if (!moment(newValue).isSame(moment(oldValue))) {\r\n ctrl.model = newValue ? moment(newValue).toDate() : null;\r\n changed(ctrl.model);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n\r\n $scope.typeInitialized = true;\r\n }\r\n\r\n var setupOptions = function () {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n updateValidationTooltip();\r\n }\r\n\r\n var setupModel = function () {\r\n switch ($scope.type) {\r\n case 'date':\r\n if (ctrl.ngModel) {\r\n\r\n if (ctrl.options.date.inclusiveEndDate) {\r\n ctrl.model = moment(ctrl.ngModel).local().startOf('day').add(-1, 'days').utc().toDate();\r\n }\r\n else {\r\n ctrl.model = removeTime(new Date(ctrl.ngModel));\r\n }\r\n } else {\r\n ctrl.model = undefined;\r\n }\r\n break;\r\n case 'datetime-local':\r\n if (ctrl.ngModel) {\r\n ctrl.model = new Date(ctrl.ngModel);\r\n } else {\r\n ctrl.model = undefined;\r\n }\r\n break;\r\n case 'time':\r\n if (ctrl.ngModel) {\r\n let date = new Date(ctrl.ngModel);\r\n\r\n // Extract time components\r\n let hours = date.getHours();\r\n let minutes = date.getMinutes();\r\n let seconds = date.getSeconds();\r\n let milliseconds = date.getMilliseconds();\r\n\r\n // Create a new Date object for 1970-01-01\r\n date = new Date('1970-01-01T00:00:00Z');\r\n\r\n // Set the time components\r\n date.setHours(hours);\r\n date.setMinutes(minutes);\r\n date.setSeconds(seconds);\r\n date.setMilliseconds(milliseconds);\r\n\r\n date = updateTimeIfEndTime(date);\r\n\r\n ctrl.model = date;\r\n } else {\r\n ctrl.model = undefined;\r\n }\r\n break;\r\n \r\n case 'number':\r\n if (ctrl.type === 'year') {\r\n ctrl.model = new Date(ctrl.ngModel).getFullYear();\r\n } else {\r\n ctrl.model = ctrl.ngModel;\r\n }\r\n break;\r\n case 'month':\r\n ctrl.fallbackModels.month = new Date(ctrl.ngModel);\r\n ctrl.model = ctrl.ngModel;\r\n break;\r\n default:\r\n ctrl.model = ctrl.ngModel;\r\n break;\r\n }\r\n\r\n updateSaveButtonState();\r\n }\r\n\r\n var updateSaveButtonState = function () {\r\n $timeout(function () {\r\n ctrl.showSaveButton = ctrl.options.saveButton && modelHasChanged() && isValid();\r\n });\r\n }\r\n\r\n function isValid() {\r\n\r\n if (ctrl.ngName) {\r\n return ctrl.formCtrl[ctrl.ngName].$valid\r\n }\r\n\r\n if (!hasValue(ctrl.formCtrl[$scope.id])) throw new Error('Input field not registered in form');\r\n\r\n return ctrl.formCtrl[$scope.id].$valid;\r\n }\r\n\r\n function registerWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.registerFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n\r\n function updateParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.formFieldCtrlUpdated($scope.id);\r\n }\r\n }\r\n\r\n function unregisterWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.unregisterFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n\r\n function setMaxBasedOnCurrentTime() {\r\n const now = new Date();\r\n\r\n const year = now.getFullYear();\r\n const month = (now.getMonth() + 1).toString().padStart(2, '0'); // JavaScript months are 0-based.\r\n const day = now.getDate().toString().padStart(2, '0');\r\n const hour = now.getHours().toString().padStart(2, '0');\r\n const minute = now.getMinutes().toString().padStart(2, '0');\r\n\r\n const localDateTime = `${year}-${month}-${day}T${hour}:${minute}`;\r\n\r\n ctrl.max = localDateTime;\r\n }\r\n\r\n function modelHasChanged() {\r\n let currentModel = prepareOutputValue(ctrl.model);\r\n let currentModelType = typeof currentModel;\r\n let originalModelType = typeof ctrl.ngModel;\r\n\r\n if (currentModelType !== originalModelType) return true;\r\n\r\n if (currentModelType === 'object') {\r\n return !_.isEqual(currentModel, ctrl.ngModel);\r\n }\r\n\r\n return currentModel !== ctrl.ngModel;\r\n }\r\n\r\n function prepareOutputValue(value) {\r\n\r\n let preparedValue = undefined;\r\n switch (ctrl.type) {\r\n case 'year':\r\n preparedValue = new Date(value, 0)\r\n break;\r\n case 'date':\r\n case 'datetime-local':\r\n if (value && ctrl.options.date && ctrl.options.date.inclusiveEndDate) {\r\n preparedValue = moment(value).local().startOf('day').add(1, 'days').utc().toDate();\r\n } else {\r\n preparedValue = value;\r\n }\r\n break;\r\n case 'time':\r\n preparedValue = updateTimeIfEndTime(value);\r\n break;\r\n default:\r\n preparedValue = value;\r\n break;\r\n }\r\n\r\n return preparedValue;\r\n }\r\n\r\n function updateTimeIfEndTime(date) {\r\n if (ctrl.options.time.endTime && DateUtils.isStartOfDay(date)) {\r\n // add 1 day to the date to make it the start of the next day\r\n date = DateUtils.addOneDay(date);\r\n }\r\n\r\n return date;\r\n }\r\n\r\n function updateRadioCssClasses() {\r\n let radioOptions = ctrl.options.radio;\r\n let verticalRadioOptionLayout = radioOptions.verticalLayout || (radioOptions.grid && $rootScope.breakpoints.current < radioOptions.gridBp);\r\n let gridLayout = radioOptions.grid && !verticalRadioOptionLayout;\r\n\r\n state.cssClasses.radio = { 'text-no-wrap': true, 'w-spacing-y-05': false, 'w-spacing-x-4': true };\r\n state.cssClasses.radio['layout column'] = verticalRadioOptionLayout;\r\n state.cssClasses.radio['layout align-center wrap'] = !verticalRadioOptionLayout && !gridLayout;\r\n state.cssClasses.radio['grid '] = gridLayout;\r\n state.cssClasses.radio[`grid-cols-${radioOptions.gridColumns}-bp-${radioOptions.gridBp}-and-up`] = gridLayout && $rootScope.breakpoints.current >= radioOptions.gridBp;\r\n }\r\n\r\n function updateCheckboxCssClasses() {\r\n let checkboxOptions = ctrl.options.checkbox;\r\n let verticalCheckboxOptionLayout = checkboxOptions.verticalLayout || (checkboxOptions.grid && $rootScope.breakpoints.current < checkboxOptions.gridBp);\r\n let gridLayout = checkboxOptions.grid && !verticalCheckboxOptionLayout;\r\n\r\n state.cssClasses.checkbox = { 'text-no-wrap': true, 'w-spacing-y-05': false, 'w-spacing-x-4': true };\r\n state.cssClasses.checkbox['layout column'] = verticalCheckboxOptionLayout;\r\n state.cssClasses.checkbox['layout align-center wrap'] = !verticalCheckboxOptionLayout && !gridLayout;\r\n state.cssClasses.checkbox['grid'] = gridLayout;\r\n state.cssClasses.checkbox[`grid-cols-${checkboxOptions.gridColumns}-bp-${checkboxOptions.gridBp}-and-up`] = gridLayout && $rootScope.breakpoints.current >= checkboxOptions.gridBp;\r\n }\r\n\r\n function updateValidationTooltip() {\r\n if (ctrl.options && ctrl.options.errors && ctrl.options.errors.tooltip && state.errorMessages.length > 0) {\r\n state.validationTooltip = `
${state.errorMessages.map(error => `
${error}
`).join()}
`\r\n } else {\r\n state.validationTooltip = null;\r\n }\r\n }\r\n\r\n function updateDisabledTooltip() {\r\n if (ctrl.ngDisabled && ctrl.disabledReason) {\r\n state.disabledTooltip = ctrl.disabledReason;\r\n } else {\r\n state.disabledTooltip = null;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'monthInputField';\r\n\r\n app.component(directiveId, {\r\n require: {\r\n formCtrl: '^form',\r\n ngModelCtrl: 'ngModel',\r\n ngRequiredCtrl: '?ngRequired'\r\n },\r\n bindings: {\r\n ngModel: '=',\r\n ngRequired: '<',\r\n ngDisabled: '<',\r\n ngReadonly: '<',\r\n min: '@',\r\n max: '@',\r\n label: '@',\r\n placeholder: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '${ctrl.label} måste anges` : 'Måste anges');\r\n }\r\n\r\n updateValidationTooltip();\r\n }\r\n }, true);\r\n\r\n ctrl.selected = function (item, model) {\r\n ctrl.onSelected({ item: item });\r\n }\r\n\r\n ctrl.removed = function (item, model) {\r\n ctrl.onRemoved({ item: item });\r\n }\r\n\r\n $scope.refreshItems = function (args) {\r\n\r\n ctrl.selectCtrl = args.selectCtrl;\r\n\r\n ctrl.selectCtrl.isGrouped = ctrl.options.enableGrouping;\r\n\r\n if (args.selectIsOpen) {\r\n\r\n ctrl.refreshing = true;\r\n\r\n var params = {};\r\n if (args.searchText) {\r\n params.searchText = args.searchText;\r\n }\r\n\r\n if (ctrl.items) {\r\n if (args.searchText) {\r\n var searchWords = [args.searchText];\r\n log.debug('Search words:', searchWords);\r\n prepareSelectableItems(_.take(ctrl.items.filter(function (item) {\r\n return searchWords.some(function (searchWord) { return itemMatches(item, searchWord); });\r\n }), ctrl.options.selectableItemLimit));\r\n } else {\r\n prepareSelectableItems(_.take(ctrl.items, ctrl.options.selectableItemLimit));\r\n }\r\n\r\n ctrl.refreshing = false;\r\n log.debug('Refreshed selectable items:', $scope.selectableItems)\r\n\r\n updateSelectedItem();\r\n\r\n } else {\r\n var onLoad = ctrl.onLoad({ params: params });\r\n if (onLoad && angular.isFunction(onLoad.then)) {\r\n return onLoad.then(function (response) {\r\n prepareSelectableItems(angular.copy(response.results));\r\n\r\n ctrl.typeInfo = response.type;\r\n ctrl.refreshing = false;\r\n\r\n updateSelectedItem();\r\n }, handleError);\r\n } else {\r\n ctrl.refreshing = false;\r\n }\r\n }\r\n }\r\n else {\r\n updateSelectedItem();\r\n }\r\n }\r\n\r\n ctrl.group = function (item) {\r\n return ctrl.onGroup({ item: item });\r\n }\r\n\r\n ctrl.filterGroups = function (groups) {\r\n return ctrl.onFilterGroups({ groups: groups }) || groups;\r\n }\r\n\r\n function prepareSelectableItems(items) {\r\n if (!$scope.selectableItems) $scope.selectableItems = [];\r\n\r\n refreshArray($scope.selectableItems, addStandardItems(items));\r\n }\r\n\r\n function addStandardItems(array) {\r\n if (ctrl.standardItems) {\r\n ctrl.standardItems.forEach(function (item) {\r\n array.unshift(item)\r\n })\r\n }\r\n\r\n return array;\r\n }\r\n\r\n function updateSelectedItem() {\r\n\r\n $timeout(function () {\r\n log.debug('updateSelectedItem', [$scope.id, $scope.model.selectedItemId, ctrl.selectedItem, (ctrl.items || $scope.selectableItems)]);\r\n\r\n var selectedIndex = -1;\r\n\r\n var itemSet = undefined;\r\n\r\n if (ctrl.selectCtrl && ctrl.selectCtrl.items && ctrl.selectCtrl.items.length > 0) {\r\n itemSet = ctrl.selectCtrl.items;\r\n } else if (ctrl.items) {\r\n itemSet = ctrl.items;\r\n } else if ($scope.selectableItems) {\r\n itemSet = $scope.selectableItems;\r\n }\r\n\r\n if (ctrl.selectedItem && ctrl.selectedItem.id === $scope.model.selectedItemId) {\r\n $scope.model.selectedItem = angular.copy(ctrl.selectedItem);\r\n if (itemSet) {\r\n itemSet.find(function (i, index) {\r\n if (i.id == $scope.model.selectedItem.id) {\r\n selectedIndex = index;\r\n return true;\r\n };\r\n })\r\n }\r\n } else if (itemSet && modelHasValue()) {\r\n $scope.model.selectedItem = itemSet.find(function (i, index) {\r\n if (i.id == ctrl.ngModel) {\r\n selectedIndex = index;\r\n return true;\r\n };\r\n\r\n return false;\r\n })\r\n\r\n if ($scope.model.selectedItem == null && shouldPreselectSingleItem()) {\r\n selectedIndex = preselectSingleItem();\r\n }\r\n } else if (shouldPreselectSingleItem()) {\r\n selectedIndex = preselectSingleItem();\r\n }\r\n else {\r\n selectedIndex = -1;\r\n }\r\n\r\n if (ctrl.selectCtrl) {\r\n ctrl.selectCtrl.activeIndex = selectedIndex;\r\n }\r\n })\r\n }\r\n\r\n function shouldPreselectSingleItem() {\r\n var itemSet = ctrl.items || $scope.selectableItems;\r\n\r\n return itemSet && itemSet.length === 1 && ctrl.ngRequired\r\n }\r\n\r\n function preselectSingleItem() {\r\n var itemSet = ctrl.items || $scope.selectableItems;\r\n\r\n if (itemSet && itemSet.length == 1) {\r\n $scope.model.selectedItem = itemSet[0];\r\n\r\n ctrl.onSelected({ item: $scope.model.selectedItem });\r\n\r\n return 0;\r\n }\r\n\r\n return clearSelection();\r\n }\r\n\r\n function clearSelection() {\r\n //log.debug('Clear selection', [$scope.id, $scope.model.selectedItemId]);\r\n $scope.model.selectedItem = undefined;\r\n $scope.model.selectedItemId = undefined;\r\n\r\n return -1;\r\n }\r\n\r\n function modelHasValue() {\r\n return ctrl.ngModel !== undefined && ctrl.ngModel !== null;\r\n }\r\n\r\n function itemMatches(item, searchWord) {\r\n return Object.keys(item).some(function (k) {\r\n return k !== 'id' && (\r\n (angular.isString(item[k]) && item[k].toLowerCase().startsWith(searchWord.toLowerCase()))\r\n || angular.isNumber(item[k]) && item[k].toString().toLowerCase().startsWith(searchWord.toLowerCase())\r\n );\r\n })\r\n }\r\n\r\n var handleError = function (error) {\r\n ctrl.refreshing = false;\r\n\r\n throw error;\r\n }\r\n\r\n function registerWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.registerFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n\r\n function updateParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.formFieldCtrlUpdated($scope.id);\r\n }\r\n }\r\n\r\n function unregisterWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.unregisterFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n\r\n function updateValidationTooltip() {\r\n if (ctrl.options && ctrl.options.errors && ctrl.options.errors.tooltip && state.errorMessages.length > 0) {\r\n state.validationTooltip = `
${state.errorMessages.map(error => `
${error}
`).join()}
`\r\n } else {\r\n state.validationTooltip = null;\r\n }\r\n }\r\n function updateDisabledTooltip() {\r\n if (ctrl.ngDisabled && ctrl.disabledReason && ctrl.editMode) {\r\n state.disabledTooltip = ctrl.disabledReason;\r\n } else {\r\n state.disabledTooltip = null;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'textareaField';\r\n\r\n app.component(componentId, {\r\n require: {\r\n formCtrl: '^form',\r\n ngModelCtrl: 'ngModel',\r\n ngRequiredCtrl: '?ngRequired',\r\n collapsableFieldsetCtrl: '?^collapsableFieldset'\r\n },\r\n bindings: {\r\n ngModel: '<',\r\n ngRequired: '<',\r\n ngDisabled: '<',\r\n ngReadonly: '<',\r\n min: '@',\r\n max: '@',\r\n label: '@',\r\n focusEvent: '@',\r\n placeholder: '@',\r\n defaultText: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: ' instead.`, null, false);\r\n\r\n var ctrl = this;\r\n\r\n $scope.id = 'textareaField_' + $scope.$id;\r\n\r\n var defaultOptions = {\r\n rows: 5,\r\n saveButton: false,\r\n insertDefaultTextButton: false,\r\n copyDefaultTextButton: false,\r\n smallButtons: false\r\n };\r\n\r\n $scope.originalValue = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n\r\n $scope.originalValue = ctrl.ngModel;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n $scope.originalValue = ctrl.ngModel;\r\n\r\n if (changes.ngModel) {\r\n if (changes.ngModel.isFirstChange()) {\r\n registerWithParentComponents();\r\n }\r\n }\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n unregisterWithParentComponents();\r\n };\r\n\r\n $scope.$watch(\"$ctrl.formCtrl['\" + $scope.id + \"'].$valid\", function (newValue, oldValue) {\r\n if (newValue !== undefined) {\r\n log.debug('Validity', [$scope.id, newValue]);\r\n updateParentComponents();\r\n }\r\n });\r\n\r\n ctrl.changed = function (value) {\r\n ctrl.onChanged({ value: value })\r\n }\r\n\r\n ctrl.save = function (value) {\r\n ctrl.onSave({ value: value })\r\n }\r\n\r\n ctrl.insertPlaceholderText = function () {\r\n ctrl.ngModel = ctrl.defaultText;\r\n }\r\n\r\n function registerWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.registerFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n\r\n function updateParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.formFieldCtrlUpdated($scope.id);\r\n }\r\n }\r\n\r\n function unregisterWithParentComponents() {\r\n if (ctrl.collapsableFieldsetCtrl) {\r\n ctrl.collapsableFieldsetCtrl.unregisterFormFieldCtrl($scope.id, ctrl);\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridColumnHeader';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $dataGrid: '^tabularDataGrid',\r\n $dataGridHeader: '^tabularDataGridHeader'\r\n },\r\n transclude: {\r\n toolbar: '?tabularDataGridColumnHeaderToolbar',\r\n },\r\n bindings: {\r\n visibleFromBp: '@',\r\n contentsVisibleFromBp: '@',\r\n showToolbar: '<',\r\n explanation: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid-column-header.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', '$element', '$rootScope',\r\n function ($scope, $transclude, $timeout, $element, $rootScope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.toolbarSlotIsFilled = $transclude.isSlotFilled('toolbar');\r\n\r\n var defaultOptions = {\r\n disableForcedVisibility: false\r\n };\r\n\r\n $scope.cssClasses = {};\r\n $scope.contentCssClasses = {};\r\n $scope.showExplanation = false;\r\n\r\n ctrl.column = undefined;\r\n \r\n ctrl.$onInit = function () {\r\n\r\n ctrl.column = ctrl.$dataGrid.getColumn($element.index());\r\n\r\n if (ctrl.column) {\r\n applyColumnProperties(ctrl.column);\r\n }\r\n\r\n $scope.$on('tabularDataGrid.columnAdded', function (e, addedColumn) {\r\n if (!ctrl.column && $element.index() === addedColumn.index) {\r\n ctrl.column = addedColumn;\r\n applyColumnProperties(ctrl.column);\r\n }\r\n });\r\n\r\n $scope.$on('tabularDataGrid.columnVisibilityChanged', function (e, updatedColumn) {\r\n if (ctrl.column && ctrl.column.index === updatedColumn.index) {\r\n updateVisibility(ctrl.column);\r\n }\r\n });\r\n\r\n $scope.$on('tabularDataGrid.columnUpdated', function (e, updatedColumn) {\r\n if (ctrl.column && ctrl.column.index === updatedColumn.index) {\r\n applyColumnProperties(ctrl.column);\r\n }\r\n });\r\n\r\n ctrl.index = ctrl.$dataGridHeader.addColumnHeader(ctrl);\r\n\r\n initialized = true;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.disableForcedVisibility = ctrl.options.disableForcedVisibility;\r\n }\r\n\r\n if (changes.visibleFromBp && ctrl.column) {\r\n updateVisibilityFromBpCssClasses($scope.cssClasses, changes.visibleFromBp.currentValue, changes.visibleFromBp.previousValue, true);\r\n }\r\n\r\n if (changes.contentsVisibleFromBp && ctrl.column) {\r\n updateVisibilityFromBpCssClasses($scope.contentCssClasses, changes.contentsVisibleFromBp.currentValue, changes.contentsVisibleFromBp.previousValue, false);\r\n }\r\n\r\n if (changes.explanation) {\r\n // workaround since uibTooltipHtml directive does not support dynamic content\r\n $scope.showExplanation = false;\r\n var hasExplanation = hasValue(ctrl.explanation);\r\n $timeout(function () {\r\n $scope.showExplanation = hasExplanation;\r\n })\r\n }\r\n }\r\n\r\n function updateVisibilityFromBpCssClasses(cssClasses, currentBp, previousBp, applyToElement, forceVisibility) {\r\n if (previousBp) {\r\n var previousVisibleFromBpCssClass = getVisibleFromBpCssClass(previousBp);\r\n if (previousVisibleFromBpCssClass && cssClasses[previousVisibleFromBpCssClass] !== undefined) {\r\n delete cssClasses[previousVisibleFromBpCssClass];\r\n if (applyToElement) $element.removeClass(previousVisibleFromBpCssClass);\r\n }\r\n }\r\n\r\n if (currentBp) {\r\n var currentVisibleFromBpCssClass = getVisibleFromBpCssClass(currentBp);\r\n if (ctrl.column.visible && !forceVisibility && currentVisibleFromBpCssClass) {\r\n cssClasses[currentVisibleFromBpCssClass] = true;\r\n if (applyToElement) $element.addClass(currentVisibleFromBpCssClass);\r\n }\r\n else {\r\n if (cssClasses[currentVisibleFromBpCssClass]) {\r\n delete cssClasses[currentVisibleFromBpCssClass];\r\n }\r\n\r\n if (applyToElement) $element.removeClass(currentVisibleFromBpCssClass);\r\n }\r\n }\r\n }\r\n\r\n function getVisibleFromBpCssClass(breakpoint) {\r\n if (angular.isUndefined(breakpoint)) return null;\r\n\r\n return 'hidden-screen visible-bp-' + breakpoint + '-and-up';\r\n }\r\n function updateVisibility(column) {\r\n\r\n updateVisibilityFromBpCssClasses($scope.cssClasses, ctrl.visibleFromBp, null, true);\r\n updateVisibilityFromBpCssClasses($scope.contentCssClasses, ctrl.contentsVisibleFromBp, null, false);\r\n\r\n $element.toggleClass('d-none', !column.visible);\r\n }\r\n\r\n function applyColumnProperties(column) {\r\n $element.toggleClass('justify-end', column.justify === 'right');\r\n\r\n updateVisibility(column);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridColumn';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $dataGrid: '^tabularDataGrid'\r\n },\r\n bindings: {\r\n displayName: '@',\r\n propertyName: '@',\r\n id: '@',\r\n width: '<',\r\n enabled: '<',\r\n visibleFromBp: '<',\r\n justify: '@',\r\n options: '<'\r\n },\r\n //templateUrl: '/client/common/components/grid/tabular-data-grid.component.html',\r\n controller: ['$scope', '$element',\r\n function ($scope, $element) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n var type = undefined;\r\n var widthBreakpoints = undefined;\r\n var currentWidth = undefined;\r\n var initialized = false;\r\n \r\n ctrl.$onInit = function () {\r\n ctrl.$dataGrid.addColumn(ctrl);\r\n\r\n initialized = true;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.width) {\r\n if (ctrl.width) {\r\n if (angular.isObject(ctrl.width)) {\r\n type = 'responsive';\r\n widthBreakpoints = Object.keys(ctrl.width).map(function (k) { return Number(k); });\r\n } else {\r\n type = 'fixed';\r\n currentWidth = ctrl.width;\r\n }\r\n }\r\n }\r\n\r\n if (changes.enabled) {\r\n if (angular.isUndefined(ctrl.enabled)) {\r\n ctrl.enabled = true;\r\n }\r\n\r\n ctrl.visible = ctrl.enabled;\r\n\r\n if (initialized) {\r\n ctrl.$dataGrid.updateColumnVisibility(ctrl.index, ctrl.enabled === true);\r\n }\r\n }\r\n\r\n if (changes.propertyName) {\r\n ctrl.sortable = ctrl.propertyName !== undefined\r\n }\r\n\r\n if (changes.justify && ctrl.index !== undefined) {\r\n ctrl.$dataGrid.updateColumn(ctrl);\r\n }\r\n }\r\n\r\n ctrl.getWidth = function (currentBreakpoint) {\r\n switch (type) {\r\n case 'responsive':\r\n // { 3: '150px', 5: '120px' }\r\n\r\n for (var i = 0; i < widthBreakpoints.length; i++) {\r\n var widthBreakpoint = widthBreakpoints[i];\r\n if (widthBreakpoint > currentBreakpoint && !currentWidth) {\r\n currentWidth = 'auto';\r\n break;\r\n } else {\r\n if (widthBreakpoint <= currentBreakpoint) {\r\n currentWidth = ctrl.width[widthBreakpoint];\r\n }\r\n \r\n if (widthBreakpoint === currentBreakpoint) {\r\n break;\r\n }\r\n }\r\n }\r\n return currentWidth;\r\n case 'fixed':\r\n return currentWidth;\r\n default:\r\n return 'auto';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridFooter';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $dataGrid: '^^tabularDataGrid'\r\n },\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid-footer.component.html',\r\n controller: ['$scope', '$rootScope', '$element',\r\n function ($scope, $rootScope, $element) {\r\n\r\n var ctrl = this;\r\n var _columnWidths = undefined;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n if (!_columnWidths) {\r\n setColumnWidths(ctrl.$dataGrid.getCurrentColumnWidths());\r\n }\r\n $scope.$on('tabularDataGrid.columnWidthsUpdated', function (e, dataGrid, columnWidths) {\r\n if (dataGrid.id === ctrl.$dataGrid.id) {\r\n setColumnWidths(columnWidths);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n function setColumnWidths(columnWidths) {\r\n _columnWidths = columnWidths;\r\n\r\n if (_columnWidths) {\r\n $element.css('grid-template-columns', _columnWidths.join(' ')) + ';';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridHeader';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $dataGrid: '^tabularDataGrid'\r\n },\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid-header.component.html',\r\n controller: ['$scope', '$rootScope', '$element',\r\n function ($scope, $rootScope, $element) {\r\n\r\n var ctrl = this;\r\n var columnHeaders = [];\r\n var _columnWidths = undefined;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!_columnWidths) {\r\n setColumnWidths(ctrl.$dataGrid.getCurrentColumnWidths());\r\n }\r\n $scope.$on('tabularDataGrid.columnWidthsUpdated', function (e, dataGrid, columnWidths) {\r\n if (dataGrid.id === ctrl.$dataGrid.id) {\r\n setColumnWidths(columnWidths);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.addColumnHeader = function (columnHeader) {\r\n\r\n var index = columnHeaders.length;\r\n columnHeaders.push(columnHeader);\r\n\r\n columnWidthsUpdated()\r\n\r\n return index;\r\n }\r\n\r\n function setColumnWidths(columnWidths) {\r\n _columnWidths = columnWidths;\r\n\r\n columnWidthsUpdated();\r\n }\r\n\r\n function columnWidthsUpdated() {\r\n if (_columnWidths) {\r\n var visibleColumnHeaders = !columnHeaders ? columnHeaders : columnHeaders.filter(function (columnHeader) {\r\n return !columnHeader.visibleFromBp || $rootScope.breakpoints.current >= Number(columnHeader.visibleFromBp);\r\n })\r\n\r\n $element.css('grid-template-columns', (visibleColumnHeaders ? _columnWidths.slice(0, visibleColumnHeaders.length) : _columnWidths).join(' ')) + ';';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridItem';\r\n\r\n app.component(componentId, {\r\n require: {\r\n dataGridCtrl: '?^tabularDataGrid'\r\n },\r\n transclude: true,\r\n bindings: {\r\n cssClasses: '<',\r\n overflowEllipsis: '<',\r\n justify: '@',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid-item.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', '$element', '$rootScope',\r\n function ($scope, $transclude, $timeout, $element, $rootScope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.column = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.column = ctrl.dataGridCtrl.getColumn($element.index());\r\n\r\n if (ctrl.column) {\r\n applyColumnProperties(ctrl.column)\r\n }\r\n\r\n $scope.$on('tabularDataGrid.columnAdded', function (e, addedColumn) {\r\n if (!ctrl.column && $element.index() === addedColumn.index) {\r\n ctrl.column = addedColumn;\r\n applyColumnProperties(ctrl.column);\r\n }\r\n });\r\n\r\n $scope.$on('tabularDataGrid.columnVisibilityChanged', function (e, updatedColumn) {\r\n if (ctrl.column.index === updatedColumn.index) {\r\n updateVisibility(ctrl.column);\r\n }\r\n });\r\n\r\n $scope.$on('tabularDataGrid.columnUpdated', function (e, updatedColumn) {\r\n if (ctrl.column.index === updatedColumn.index) {\r\n applyColumnProperties(ctrl.column);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.overflowEllipsis) {\r\n $element.toggleClass('overflow-ellipsis', ctrl.overflowEllipsis === true);\r\n }\r\n }\r\n\r\n function updateVisibility(column) {\r\n $element.toggleClass('d-none', !column.visible);\r\n }\r\n\r\n function applyColumnProperties(column) {\r\n $element.toggleClass('justify-start', column.justify === 'left' || ctrl.justify === 'left');\r\n $element.toggleClass('justify-center', column.justify === 'center' || ctrl.justify === 'center');\r\n $element.toggleClass('justify-end', column.justify === 'right' || ctrl.justify === 'right');\r\n\r\n updateVisibility(column);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGridRow';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $dataGrid: '^^tabularDataGrid'\r\n },\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid-row.component.html',\r\n controller: ['$scope', '$rootScope', '$element',\r\n function ($scope, $rootScope, $element) {\r\n\r\n var ctrl = this;\r\n var _columnWidths = undefined;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n if (!_columnWidths) {\r\n setColumnWidths(ctrl.$dataGrid.getCurrentColumnWidths());\r\n }\r\n $scope.$on('tabularDataGrid.columnWidthsUpdated', function (e, dataGrid, columnWidths) {\r\n if (dataGrid.id === ctrl.$dataGrid.id) {\r\n setColumnWidths(columnWidths);\r\n }\r\n });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n function setColumnWidths(columnWidths) {\r\n _columnWidths = columnWidths;\r\n\r\n if (_columnWidths) {\r\n $element.css('grid-template-columns', _columnWidths.join(' ')) + ';';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'tabularDataGrid';\r\n\r\n app.component(componentId, {\r\n require: {\r\n listCtrl: '?^pagedDataList'\r\n },\r\n transclude: {\r\n columns: 'tabularDataGridColumns'\r\n },\r\n bindings: {\r\n columnWidths: '<',\r\n onInit: '&',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/grid/tabular-data-grid.component.html',\r\n controllerAs: '$dataGrid',\r\n controller: ['$scope', '$transclude', '$rootScope', 'debounceService',\r\n function ($scope, $transclude, $rootScope, debounceService) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.id = $scope.$id;\r\n\r\n ctrl.columnsSlotIsFilled = $transclude.isSlotFilled('columns');\r\n ctrl.headerSlotIsFilled = $transclude.isSlotFilled('header');\r\n ctrl.rowsSlotIsFilled = $transclude.isSlotFilled('rows');\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n var columns = {};\r\n var columnList = [];\r\n var visibleColumns = [];\r\n var columnWidthBreakpoints = undefined;\r\n var currentColumnWidths = [];\r\n \r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ $dataGrid: ctrl });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.columnWidths) {\r\n if (ctrl.columnWidths) {\r\n if (angular.isObject(ctrl.columnWidths)) {\r\n type = 'responsive';\r\n columnWidthBreakpoints = Object.keys(ctrl.columnWidths).map(function (k) { return Number(k); });\r\n } else {\r\n type = 'fixed';\r\n currentColumnWidths = ctrl.columnWidths.split(' ');\r\n }\r\n\r\n if (!changes.columnWidths.isFirstChange()) {\r\n updateVisibleColumns($rootScope.breakpoints.current);\r\n }\r\n }\r\n }\r\n }\r\n\r\n ctrl.addColumn = function (column) {\r\n\r\n var index = columnList.length;\r\n columns[index] = column;\r\n column.index = index;\r\n\r\n if (ctrl.listCtrl) {\r\n ctrl.listCtrl.addColumn(index, column);\r\n }\r\n\r\n columnList = Object.values(columns);\r\n\r\n ctrl.columns = columns;\r\n\r\n $scope.$broadcast(componentId + '.columnAdded', column);\r\n\r\n //debounceService.debounce(function (e) {\r\n updateVisibleColumns($rootScope.breakpoints.current);\r\n //}, 500);\r\n }\r\n\r\n ctrl.sortByColumn = function (e, column) {\r\n\r\n if (e) e.stopPropagation();\r\n\r\n if (!column.propertyName) throw new Error('Column does not have a property name')\r\n\r\n if (ctrl.listCtrl) {\r\n ctrl.listCtrl.sortBy(column.propertyName);\r\n }\r\n }\r\n\r\n ctrl.updateColumnVisibility = function (index, visible) {\r\n setColumnVisibility(columns[index], visible);\r\n updateVisibleColumns($rootScope.breakpoints.current);\r\n }\r\n\r\n ctrl.updateColumn = function (column) {\r\n $scope.$broadcast(componentId + '.columnUpdated', column);\r\n }\r\n\r\n ctrl.getColumn = function (index) {\r\n return columns[index];\r\n }\r\n\r\n ctrl.getVisibleColumns = function () {\r\n return visibleColumns;\r\n }\r\n\r\n ctrl.getCurrentColumnWidths = function () {\r\n return currentColumnWidths;\r\n }\r\n\r\n $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n var visibleColumnsChanged = false;\r\n columnList.forEach(function (c) { \r\n if (c.enabled && !angular.isUndefined(c.visibleFromBp)) {\r\n if (currentBreakpoint < c.visibleFromBp && c.visible) {\r\n setColumnVisibility(c, false);\r\n visibleColumnsChanged = true;\r\n } else if (currentBreakpoint >= c.visibleFromBp && !c.visible) {\r\n setColumnVisibility(c, true);\r\n visibleColumnsChanged = true;\r\n }\r\n }\r\n })\r\n\r\n if (visibleColumnsChanged) {\r\n updateVisibleColumns(currentBreakpoint);\r\n } else {\r\n updateColumnWidths(currentBreakpoint);\r\n }\r\n });\r\n\r\n function setColumnVisibility(column, visible) {\r\n column.visible = visible;\r\n $scope.$broadcast(componentId + '.columnVisibilityChanged', column);\r\n }\r\n\r\n function updateVisibleColumns(currentBreakpoint) {\r\n visibleColumns = Object.values(columns).filter(function (c) {\r\n return c.visible;\r\n });\r\n\r\n $scope.$broadcast(componentId + '.visibleColumnsUpdated', { columns: visibleColumns });\r\n\r\n updateColumnWidths(currentBreakpoint);\r\n }\r\n\r\n function updateColumnWidths(currentBreakpoint) {\r\n\r\n var updatedColumnWidths = undefined;\r\n if (columnWidthBreakpoints) {\r\n switch (type) {\r\n case 'responsive':\r\n var columnWidths = null;\r\n\r\n for (var i = 0; i < columnWidthBreakpoints.length; i++) {\r\n var widthBreakpoint = columnWidthBreakpoints[i];\r\n if (widthBreakpoint <= currentBreakpoint) {\r\n var columnWidths = ctrl.columnWidths[widthBreakpoint];\r\n updatedColumnWidths = columnWidths ? columnWidths.split(' ') : columnWidths;\r\n }\r\n\r\n if (widthBreakpoint === currentBreakpoint) {\r\n break;\r\n }\r\n }\r\n break;\r\n case 'fixed':\r\n return;\r\n }\r\n }\r\n\r\n if (!updatedColumnWidths && visibleColumns && visibleColumns.length > 0) {\r\n var columnWidths = [];\r\n visibleColumns.forEach(function (column) {\r\n columnWidths.push(column.getWidth(currentBreakpoint));\r\n })\r\n\r\n updatedColumnWidths = columnWidths;\r\n }\r\n\r\n if (!arraysAreEqual(updatedColumnWidths, currentColumnWidths)) {\r\n\r\n currentColumnWidths = updatedColumnWidths;\r\n $scope.$broadcast(componentId + '.columnWidthsUpdated', ctrl, currentColumnWidths);\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'betaBadge';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/indicators/beta-badge.component.html',\r\n controller: [function () {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n alpha: false\r\n };\r\n\r\n ctrl.text = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (ctrl.options.alpha) {\r\n ctrl.text = 'alpha';\r\n } else {\r\n ctrl.text = 'beta';\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'faIcon';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/indicators/fa-icon.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n size: 'fa-1x',\r\n normalizeWidth: true,\r\n square: true,\r\n };\r\n\r\n $scope.cssClasses = undefined;\r\n $scope.styles = undefined;\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n let cssClasses = {};\r\n cssClasses['fa-fw'] = ctrl.options.normalizeWidth;\r\n cssClasses[ctrl.options.size] = hasValue(ctrl.options.size);\r\n\r\n $scope.cssClasses = cssClasses;\r\n\r\n let styles = {};\r\n if(ctrl.options.square) {\r\n styles['width'] = '1em';\r\n styles['height'] = '1em';\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'progressIndicator';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n busy: '<',\r\n text: '<',\r\n overlay: '<',\r\n overlayBg: '<',\r\n spinnerDelay: '<',\r\n options: '<'\r\n },\r\n transclude: true,\r\n templateUrl: '/client/common/components/indicators/progress-indicator.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n let ctrl = this;\r\n\r\n let defaultOptions = {\r\n spinnerCssClasses: [],\r\n hideOverlayedContent: false,\r\n };\r\n\r\n let state = {\r\n showSpinner: false,\r\n overlayedContentOpacity: 1,\r\n textOverlay: false\r\n }\r\n\r\n let cssClasses = {};\r\n\r\n $scope.cssClasses = cssClasses;\r\n $scope.state = state;\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n cssClasses['d-inline-flex'] = ctrl.options.hideOverlayedContent;\r\n }\r\n\r\n if (changes.text) {\r\n if (ctrl.text === undefined) ctrl.text = null;\r\n\r\n cssClasses['progress-indicator-w-text'] = hasValue(ctrl.text);\r\n }\r\n\r\n if (changes.overlay) {\r\n if (ctrl.overlay === undefined) ctrl.overlay = false;\r\n\r\n cssClasses['progress-indicator-overlay'] = ctrl.overlay;\r\n }\r\n\r\n if (changes.overlayBg) {\r\n if (ctrl.overlayBg === undefined) ctrl.overlayBg = false;\r\n\r\n cssClasses['progress-indicator-overlay-bg'] = ctrl.overlayBg;\r\n }\r\n\r\n if ((changes.overlaybg || changes.text) && ctrl.overlaybg && ctrl.text) {\r\n state.hasText = hasValue(ctrl.text);\r\n state.textOverlay = ctrl.overlaybg === true && state.hasText;\r\n }\r\n\r\n if (changes.spinnerDelay && ctrl.spinnerDelay === undefined) {\r\n ctrl.spinnerDelay = 500;\r\n }\r\n\r\n if (changes.busy) {\r\n\r\n if (ctrl.busy === undefined) {\r\n ctrl.busy = false;\r\n }\r\n\r\n if (ctrl.busy) {\r\n $timeout(function () {\r\n state.showSpinner = ctrl.busy;\r\n updateOverlayedContentVisibility();\r\n }, ctrl.spinnerDelay)\r\n } else {\r\n state.showSpinner = false;\r\n updateOverlayedContentVisibility();\r\n }\r\n }\r\n }\r\n\r\n function updateOverlayedContentVisibility() {\r\n state.overlayedContentOpacity = ctrl.options.hideOverlayedContent && state.showSpinner ? 0 : 1;\r\n }\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'progressStepBar';\r\n\r\n app.component(componentId, {\r\n require: {\r\n dropdownCtrl: '?^^dropdown'\r\n },\r\n bindings: {\r\n steps: '<',\r\n progress: '<',\r\n currentStepIndex: '<',\r\n ngDisabled: '<',\r\n options: '<',\r\n },\r\n templateUrl: '/client/common/components/indicators/progress-step-bar.component.html',\r\n controller: ['$scope', '$rootScope', function ($scope, $rootScope) {\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n size: 'md',\r\n visibility: {\r\n step: {\r\n title: true,\r\n statusDescription: true,\r\n statusDate: true,\r\n statusMessages: false,\r\n }\r\n },\r\n horizontalFromBreakpoint: 0\r\n };\r\n\r\n var breakpointListener = undefined;\r\n\r\n $scope.cssClasses = {};\r\n ctrl.state = {\r\n horizontal: true\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n $scope.insideDropdown = ctrl.dropdownCtrl != null;\r\n\r\n handleCurrentBreakpoint($rootScope.breakpoints.current);\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n $scope.cssClasses['progress-step-bar-' + ctrl.options.size] = true;\r\n\r\n $scope.stepVisibilityOptions = angular.copy(ctrl.options.visibility.step);\r\n\r\n if (ctrl.options.horizontalFromBreakpoint && !breakpointListener) {\r\n breakpointListener = $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n handleCurrentBreakpoint(currentBreakpoint);\r\n });\r\n }\r\n }\r\n\r\n if (changes.step && ctrl.steps) {\r\n \r\n }\r\n }\r\n\r\n function handleCurrentBreakpoint(currentBreakpoint) {\r\n\r\n ctrl.state.horizontal = ctrl.options !== undefined && ctrl.options.horizontalFromBreakpoint !== undefined && currentBreakpoint >= ctrl.options.horizontalFromBreakpoint;\r\n\r\n $scope.cssClasses['progress-step-bar-horizontal'] = ctrl.state.horizontal;\r\n $scope.cssClasses['progress-step-bar-vertical'] = !ctrl.state.horizontal;\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'progressStep';\r\n\r\n app.component(componentId, {\r\n require: {\r\n dropdownCtrl: '?^^dropdown'\r\n },\r\n bindings: {\r\n step: '<',\r\n stepIndex: '<',\r\n currentStepIndex: '<',\r\n ngDisabled: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/indicators/progress-step.component.html',\r\n controller: ['$scope', '$rootScope', 'isEmptyFilter', function ($scope, $rootScope, isEmptyFilter) {\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n visibility: {\r\n title: true,\r\n statusDescription: true,\r\n statusDate: true,\r\n subSteps: true,\r\n statusMessages: true\r\n },\r\n bar: {\r\n horizontal: true\r\n },\r\n };\r\n\r\n var iconLayersObj = {\r\n //notStarted: {\r\n // enabled: false,\r\n // cssClasses: 'fas fa-circle text-grey'\r\n //},\r\n inProgress: {\r\n enabled: false,\r\n cssClasses: 'far fa-dot-circle text-white'\r\n },\r\n actionRequired: {\r\n enabled: false,\r\n cssClasses: 'far fa-pen text-white',\r\n faTransform: 'shrink-3'\r\n },\r\n completed: {\r\n enabled: false,\r\n cssClasses: 'fas fa-check fa-xs text-white'\r\n },\r\n waiting: {\r\n enabled: false,\r\n cssClasses: 'fas fa-hourglass-half fa-xs text-white'\r\n },\r\n warning: {\r\n enabled: false,\r\n cssClasses: 'fas fa-exclamation fa-xs text-white'\r\n },\r\n error: {\r\n enabled: false,\r\n cssClasses: 'fas fa-exclamation fa-xs text-white'\r\n }\r\n };\r\n\r\n $scope.cssClasses = {\r\n 'completed': false,\r\n 'in-progress': false,\r\n 'current': false,\r\n };\r\n\r\n $scope.dropdownCssClasses = {};\r\n\r\n $scope.iconLayers = [];\r\n\r\n $scope.iconTextLayer = {\r\n enabled: false,\r\n cssClasses: 'fa-layers-text fa-inverse text-black',\r\n text: undefined,\r\n style: {}\r\n }\r\n\r\n $scope.mainStepSize = 'md';\r\n $scope.subStepSize = 'md';\r\n $scope.visibility = {\r\n title: false,\r\n statusDescription: false,\r\n statusDate: false\r\n };\r\n\r\n $scope.status = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n\r\n $scope.insideDropdown = ctrl.dropdownCtrl != null;\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n $scope.dropdownCssClasses['progress-step-bar-lg'] = true;\r\n\r\n $scope.disableDropdown = ctrl.options.visibility.statusDescription\r\n && ctrl.options.visibility.statusDate\r\n && (!ctrl.options.visibility.subSteps || isEmptyFilter(ctrl.step.subSteps));\r\n }\r\n\r\n if (changes.step && ctrl.step) {\r\n\r\n $scope.status = $rootScope.systemTypes.progressStepStatuses[ctrl.step.status];\r\n var statusCodeName = firstCharToLowerCase($scope.status.codeName);\r\n\r\n $scope.cssClasses['in-progress'] = statusCodeName === 'inProgress';\r\n $scope.cssClasses['action-required'] = statusCodeName === 'actionRequired';\r\n $scope.cssClasses['waiting'] = statusCodeName === 'waiting';\r\n $scope.cssClasses['completed'] = statusCodeName === 'completed';\r\n\r\n if (ctrl.step.subStatuses.length > 0) {\r\n var subStatusCodeNames = ctrl.step.subStatuses.map(function (subStatus) {\r\n return firstCharToLowerCase($rootScope.systemTypes.progressStepSubStatuses[subStatus].codeName);\r\n });\r\n\r\n subStatusCodeNames.forEach(function (subStatusCodeName) {\r\n $scope.cssClasses[subStatusCodeName] = true;\r\n });\r\n\r\n if (subStatusCodeNames.some(function (subStatusCodeName) { return iconLayersObj[subStatusCodeName]; })) {\r\n subStatusCodeNames.forEach(function (subStatusCodeName) {\r\n if (iconLayersObj[subStatusCodeName]) {\r\n iconLayersObj[subStatusCodeName].enabled = true;\r\n }\r\n });\r\n } else if (iconLayersObj[statusCodeName]) {\r\n iconLayersObj[statusCodeName].enabled = true; \r\n }\r\n } else {\r\n $rootScope.systemTypes.progressStepSubStatuses.values.forEach(function (subStatus) {\r\n if ($scope.cssClasses[subStatus.codeName]) {\r\n $scope.cssClasses[subStatus.codeName].enabled = false;\r\n }\r\n });\r\n\r\n if (iconLayersObj[statusCodeName]) {\r\n iconLayersObj[statusCodeName].enabled = true;\r\n }\r\n }\r\n \r\n $scope.iconLayers = Object.values(iconLayersObj).filter(function (v) {\r\n return v.enabled === true;\r\n });\r\n\r\n $scope.iconTextLayer.enabled = statusCodeName === 'notStarted';\r\n $scope.iconTextLayer.text = (ctrl.stepIndex + 1) + '';\r\n\r\n $scope.stepNumber = statusCodeName === 'notStarted' && ctrl.step.subStatuses.length == 0 ? ctrl.stepIndex + 1 : undefined;\r\n }\r\n\r\n if (changes.stepIndex || changes.currentStepIndex) {\r\n if (ctrl.stepIndex === ctrl.currentStepIndex) {\r\n $scope.iconTextLayer.style = {\r\n 'font-weight': 900\r\n }\r\n }\r\n\r\n $scope.isCurrentStep = ctrl.stepIndex === ctrl.currentStepIndex;\r\n\r\n $scope.cssClasses['current'] = $scope.isCurrentStep;\r\n }\r\n\r\n if (changes.options || changes.step) {\r\n if (ctrl.options && ctrl.step) {\r\n $scope.visibility.title = ctrl.options.visibility.title && ctrl.step.title;\r\n $scope.visibility.statusDescription = (ctrl.options.visibility.statusDescription && ctrl.step.statusDescription);\r\n $scope.visibility.statusDate = (ctrl.options.visibility.statusDate && ctrl.step.statusDate);\r\n $scope.visibility.content = $scope.visibility.title || $scope.visibility.description || $scope.visibility.date;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'statusAlert';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n text: '@',\r\n type: '@',\r\n icon: '@',\r\n tooltipContent: '@',\r\n size: '@',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/indicators/status-alert.component.html',\r\n controller: ['$scope', '$timeout', function ($scope, $timeout) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n wrap: true\r\n };\r\n $scope.textCssClasses = {};\r\n\r\n ctrl.$onInit = function () {\r\n //if (!$scope.textCssClass) {\r\n // $scope.textCssClass = 'font-weight-medium';\r\n //}\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n $scope.textCssClasses['text-no-wrap'] = !ctrl.options.wrap;\r\n }\r\n\r\n if (changes.icon || changes.type) {\r\n\r\n $scope.showIcon = false;\r\n\r\n $timeout(function () {\r\n if (ctrl.icon) {\r\n $scope.iconCssClass = ctrl.icon + ' ';\r\n } else {\r\n $scope.iconCssClass = '';\r\n }\r\n\r\n if (ctrl.type) {\r\n switch (ctrl.type.toLowerCase()) {\r\n case 'info':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-info-circle';\r\n $scope.iconCssClass += ' icon-info-colors';\r\n break;\r\n case 'progress':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-circle';\r\n $scope.iconCssClass += ' text-info';\r\n break;\r\n case 'waiting':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-hourglass-half';\r\n $scope.iconCssClass += ' text-warning';\r\n break;\r\n case 'success':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-check-circle';\r\n $scope.iconCssClass += ' icon-success-colors';\r\n break;\r\n case 'warning':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-exclamation-circle';\r\n $scope.iconCssClass += ' icon-warning-colors';\r\n break;\r\n case 'error':\r\n if (!ctrl.icon) $scope.iconCssClass += 'fad fa-exclamation-circle';\r\n $scope.iconCssClass += ' icon-error-colors';\r\n break;\r\n }\r\n }\r\n\r\n $scope.showIcon = true;\r\n });\r\n }\r\n\r\n if (changes.size && ctrl.size) {\r\n $scope.sizeCssClass = 'fa-' + ctrl.size; \r\n }\r\n\r\n if (changes.size || changes.type) {\r\n $scope.textCssClasses['font-weight-bold'] = (ctrl.size == 'lg' || ctrl.size == '2x');\r\n $scope.textCssClasses['font-weight-medium'] = ctrl.size == '1x' || ctrl.type.toLowerCase() == 'error'; \r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'wip';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/indicators/wip.component.html',\r\n controller: [function () {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n large: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'buttonGroupLayout';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/layout/button-group-layout.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.cssClasses = {};\r\n\r\n var defaultOptions = {\r\n dense: false,\r\n align: undefined\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.cssClasses['w-spacing-2'] = ctrl.options.dense;\r\n ctrl.cssClasses['w-spacing-3'] = !ctrl.options.dense;\r\n ctrl.cssClasses['space-between'] = ctrl.options.align === 'fill';\r\n ctrl.cssClasses['justify-start'] = ctrl.options.align === 'left';\r\n ctrl.cssClasses['justify-end'] = ctrl.options.align === 'right';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'toolbarLayout';\r\n\r\n app.component(componentId, {\r\n transclude: true,\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/layout/toolbar-layout.component.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.cssClasses = {};\r\n\r\n var defaultOptions = {\r\n dense: false,\r\n align: undefined\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.cssClasses['w-spacing-1'] = ctrl.options.dense;\r\n ctrl.cssClasses['w-spacing-3'] = !ctrl.options.dense;\r\n ctrl.cssClasses['space-between'] = ctrl.options.align === 'fill';\r\n ctrl.cssClasses['justify-start'] = ctrl.options.align === 'left';\r\n ctrl.cssClasses['justify-end'] = ctrl.options.align === 'right';\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataListPager';\r\n\r\n app.component(componentId, {\r\n require: {\r\n listCtrl: '^pagedDataList'\r\n },\r\n bindings: {\r\n pageIndex: '<',\r\n pageSize: '<',\r\n numPageResults: '<',\r\n totalNumResults: '<',\r\n options: '<',\r\n onPageChanged: '&',\r\n onPageSizeChanged: '&',\r\n ngDisabled: '<'\r\n },\r\n templateUrl: '/client/common/components/list/paged-data-list-pager.component.html',\r\n controller: ['$scope', 'locationService', 'logger', 'localSettingsService',\r\n function ($scope, locationService, logger, localSettingsService) {\r\n var log = logger.getLogger(componentId);\r\n\r\n var ctrl = this;\r\n\r\n ctrl.pages = [];\r\n ctrl.pageSizes = [];\r\n ctrl.totalNumPages = 0;\r\n ctrl.initialized = false;\r\n\r\n var defaultOptions = {\r\n listId: undefined,\r\n pageSizes: [5, 10, 15, 25, 50, 100],\r\n defaultPageSize: 15,\r\n maxPageSize: undefined,\r\n itemsLabelSingular: 'Resultat',\r\n itemsLabelPlural: 'Resultat'\r\n };\r\n\r\n var storedPageSize = undefined;\r\n var validDefaultPageSize = false;\r\n\r\n ctrl.$onInit = function () {\r\n if (ctrl.pageIndex === undefined) {\r\n ctrl.pageIndex = 0;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.pageSizeStorageKey = componentId + (ctrl.options.listId ? '[' + ctrl.options.listId + ']' : '') + '|PageSize:' + locationService.getPath();\r\n\r\n if (ctrl.options.maxPageSize) {\r\n ctrl.pageSizes = _.filter(ctrl.options.pageSizes, function (pageSize) {\r\n return pageSize <= ctrl.options.maxPageSize;\r\n })\r\n } else {\r\n ctrl.pageSizes = ctrl.options.pageSizes;\r\n }\r\n\r\n if (isValidPageSize(ctrl.options.defaultPageSize)) {\r\n validDefaultPageSize = true\r\n } else {\r\n validDefaultPageSize = false;\r\n throw new Error(\"Default page size is invalid\");\r\n }\r\n\r\n var tempStoredPageSizeTmp = localSettingsService.getInt(ctrl.pageSizeStorageKey, undefined);\r\n if (isValidPageSize(tempStoredPageSizeTmp)) {\r\n storedPageSize = tempStoredPageSizeTmp;\r\n }\r\n\r\n initializePageSize(ctrl.pageSize);\r\n }\r\n\r\n if (changes.totalNumResults || changes.pageSize) {\r\n if (ctrl.pageSize) {\r\n\r\n log.debug(\"Total results: \" + ctrl.totalNumResults);\r\n log.debug(\"Page size: \" + ctrl.pageSize);\r\n\r\n ctrl.totalNumPages = ctrl.totalNumResults ? Math.ceil(ctrl.totalNumResults / ctrl.pageSize) : 0;\r\n\r\n log.debug(\"Pages: \" + ctrl.totalNumPages);\r\n }\r\n\r\n ctrl.pages = _.range(1, Math.max(2, ctrl.totalNumPages + 1));\r\n }\r\n }\r\n\r\n function initializePageSize(newVal) {\r\n if (angular.isUndefined(newVal)) {\r\n ctrl.pageSize = storedPageSize || (ctrl.options && ctrl.options.defaultPageSize);\r\n\r\n if (!isValidPageSize(ctrl.pageSize)) ctrl.pageSize = ctrl.options.pageSizes[0];\r\n\r\n ctrl.onPageSizeChanged({ pageSize: ctrl.pageSize });\r\n\r\n $scope.$emit(componentId + '.pageSizeChanged', ctrl.pageSize);\r\n }\r\n else {\r\n if (!isValidPageSize(newVal)) throw new Error(\"Page size is invalid\");\r\n\r\n ctrl.pageSize = newVal;\r\n }\r\n };\r\n\r\n ctrl.previousPage = function () {\r\n if (ctrl.pageIndex > 0) {\r\n ctrl.pageIndex--;\r\n\r\n pageChanged();\r\n }\r\n };\r\n\r\n ctrl.nextPage = function () {\r\n if (ctrl.pageIndex + 1 < ctrl.totalNumPages) {\r\n ctrl.pageIndex++;\r\n\r\n pageChanged();\r\n }\r\n };\r\n\r\n ctrl.pageChanged = function (pageIndex) {\r\n pageChanged();\r\n };\r\n\r\n ctrl.pageSizeChanged = function () {\r\n log.debug(\"Page size \" + ctrl.pageSize);\r\n\r\n localStorage.setItem(ctrl.pageSizeStorageKey, ctrl.pageSize);\r\n\r\n ctrl.onPageSizeChanged({ pageSize: ctrl.pageSize });\r\n };\r\n\r\n function isValidPageSize(pageSize) {\r\n return pageSize && _.findIndex(ctrl.pageSizes, function (size) {\r\n return size === pageSize;\r\n }) != -1;\r\n }\r\n\r\n function pageChanged() {\r\n log.debug(\"Page index \" + ctrl.pageIndex);\r\n ctrl.onPageChanged({ pageIndex: ctrl.pageIndex });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataListRefreshButton';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $list: '?^pagedDataList'\r\n },\r\n bindings: {\r\n listCtrl: '<',\r\n options: '<',\r\n onRefresh: '&',\r\n },\r\n templateUrl: '/client/common/components/list/paged-data-list-refresh-button.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n \r\n ctrl.$onInit = function () {\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.listCtrl && ctrl.listCtrl) {\r\n ctrl.$list = ctrl.listCtrl;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataListShowHiddenColumnsToggle';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $list: '?^pagedDataList'\r\n },\r\n bindings: {\r\n listCtrl: '<',\r\n },\r\n templateUrl: '/client/common/components/list/paged-data-list-show-hidden-columns-toggle.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n ctrl.$onInit = function () {\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.listCtrl && ctrl.listCtrl) {\r\n ctrl.$list = ctrl.listCtrl;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataListSortButton';\r\n\r\n app.component(componentId, {\r\n require: {\r\n $list: '?^pagedDataList'\r\n },\r\n bindings: {\r\n listCtrl: '<',\r\n sortableColumns: '<',\r\n options: '<',\r\n onSort: '&',\r\n },\r\n templateUrl: '/client/common/components/list/paged-data-list-sort-button.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n \r\n ctrl.$onInit = function () {\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n\r\n if (changes.listCtrl && ctrl.listCtrl) {\r\n ctrl.$list = ctrl.listCtrl;\r\n }\r\n }\r\n\r\n ctrl.sortBy = function (e, columnPropertyName) {\r\n e.stopPropagation();\r\n\r\n ctrl.$list.sortBy(columnPropertyName);\r\n }\r\n\r\n ctrl.resetSorting = function (e) {\r\n e.stopPropagation();\r\n \r\n ctrl.$list.resetSorting()\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'pagedDataList';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n title: '?pagedDataListTitle',\r\n header: '?pagedDataListHeader',\r\n toolbar: '?pagedDataListToolbar',\r\n body: 'pagedDataListBody',\r\n noResults: '?pagedDataListNoResults',\r\n bodyToolbar: '?pagedDataListBodyToolbar'\r\n },\r\n bindings: {\r\n onCountResults: '&',\r\n onLoadData: '&',\r\n onLoadFilters: '&',\r\n onLoadTypeDeclaration: '&',\r\n onCheckLastItemUpdated: '&',\r\n onResultsCounted: '&',\r\n onLastItemUpdatedChecked: '&',\r\n onInit: '&',\r\n onFilterBarInit: '&',\r\n onFiltersLoaded: '&',\r\n onDataLoaded: '&',\r\n onFiltersChanged: '&',\r\n onBreakpointChanged: '&',\r\n onColumnsUpdated: '&',\r\n apiBaseUrl: '<',\r\n disableDataLoading: '<',\r\n minimizeHeaders: '<',\r\n showHeader: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/list/paged-data-list.component.html',\r\n controller: ['$scope', '$rootScope', '$q', '$transclude', 'logger', 'requestHelper', 'hasItemsFilter', 'isDefinedAndEmptyFilter', 'localSettingsService', '$timeout',\r\n function ($scope, $rootScope, $q, $transclude, logger, requestHelper, hasItemsFilter, isDefinedAndEmptyFilter, localSettingsService, $timeout) {\r\n\r\n $scope.titleSlotFilled = $transclude.isSlotFilled('title');\r\n $scope.headerSlotFilled = $transclude.isSlotFilled('header');\r\n $scope.toolbarSlotFilled = $transclude.isSlotFilled('toolbar');\r\n\r\n $scope.bodySlotFilled = $transclude.isSlotFilled('body');\r\n $scope.noResultsSlotFilled = $transclude.isSlotFilled('noResults');\r\n $scope.bodyToolbarSlotFilled = $transclude.isSlotFilled('bodyToolbar');\r\n\r\n var ctrl = this;\r\n\r\n ctrl.id = $scope.$id;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n listId: undefined,\r\n listSettingsPrefix: undefined,\r\n defaultPageSize: 15,\r\n noResultsMessageWhenEmpty: true,\r\n dense: false,\r\n filterBar: {\r\n dropdownFilterSet: undefined,\r\n disableStoredFilters: false,\r\n maxColumns: 4\r\n },\r\n visibility: {\r\n header: true,\r\n sortButton: true,\r\n refreshButton: true,\r\n hiddenColumnsToggleButton: true,\r\n toolbar: true\r\n },\r\n hideTitle: false,\r\n responsiveness: {\r\n trackCurrentBreakpoint: false\r\n }\r\n };\r\n\r\n var onLoadFilters = undefined;\r\n var breakpointListener = undefined;\r\n\r\n ctrl.pagerOptions = {};\r\n\r\n ctrl.sortByColumns = {}\r\n ctrl.baseStorageKey = undefined;\r\n ctrl.sortingStorageKey = undefined;\r\n ctrl.dataIsEmpty = true;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.sortByColumns = localSettingsService.getValue(ctrl.sortingStorageKey, {});\r\n\r\n ctrl.onInit({ listCtrl: ctrl });\r\n\r\n getApiSupportedMethods();\r\n\r\n ctrl.loadFilters().then(function () {\r\n ctrl.onFiltersLoaded({ filters: $scope.filters });\r\n });\r\n\r\n ctrl.pagerOptionsInitialized = true;\r\n\r\n var onLoadTypeDeclaration = ctrl.onLoadTypeDeclaration();\r\n if (onLoadTypeDeclaration) {\r\n onLoadTypeDeclaration.then(function (typeDeclaration) {\r\n $scope.typeInfo = typeDeclaration;\r\n setupPagerTypeOptions(ctrl.typeInfo);\r\n });\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.baseStorageKey = componentId\r\n + (ctrl.options.listSettingsPrefix ? '|' + ctrl.options.listSettingsPrefix : '')\r\n + (ctrl.options.listId ? '|' + ctrl.options.listId : '');\r\n\r\n ctrl.sortingStorageKey = ctrl.baseStorageKey + '|Sorting';\r\n\r\n ctrl.pagerOptions = {\r\n pageSizes: ctrl.options.pageSizes,\r\n defaultPageSize: ctrl.options.defaultPageSize,\r\n listId: ctrl.baseStorageKey\r\n }\r\n\r\n if (ctrl.options.responsiveness.trackCurrentBreakpoint && !breakpointListener) {\r\n\r\n handleCurrentBreakpoint($rootScope.breakpoints.current);\r\n breakpointListener = $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n handleCurrentBreakpoint(currentBreakpoint);\r\n });\r\n }\r\n }\r\n\r\n if (changes.onLoadData\r\n || (changes.disableDataLoading && changes.disableDataLoading.previousValue === true && changes.disableDataLoading.currentValue == false && !$scope.dataLoaded)) {\r\n ctrl.loadData();\r\n }\r\n\r\n if (changes.options || changes.showHeader) {\r\n if (ctrl.options && ctrl.showHeader !== undefined) {\r\n ctrl.options.visibility.header = ctrl.showHeader;\r\n }\r\n }\r\n }\r\n\r\n $scope.$on('$destroy', function () {\r\n if (breakpointListener) breakpointListener();\r\n });\r\n\r\n function handleCurrentBreakpoint(currentBreakpoint) {\r\n ctrl.onBreakpointChanged({ currentBreakpoint: currentBreakpoint })\r\n }\r\n\r\n ctrl.setApiBaseUrl = function (apiBaseUrl) {\r\n ctrl.apiBaseUrl = apiBaseUrl;\r\n\r\n getApiSupportedMethods();\r\n }\r\n\r\n ctrl.sorted = false;\r\n\r\n ctrl.sortBy = function (propertyName) {\r\n\r\n if (propertyName == undefined) {\r\n ctrl.sortByColumns = {};\r\n }\r\n else {\r\n if (ctrl.sortByColumns[propertyName] === undefined) {\r\n ctrl.sortByColumns[propertyName] = 'asc';\r\n\r\n } else if (ctrl.sortByColumns[propertyName] === 'asc') {\r\n ctrl.sortByColumns[propertyName] = 'desc';\r\n }\r\n else if (ctrl.sortByColumns[propertyName] === 'desc') {\r\n delete ctrl.sortByColumns[propertyName];\r\n }\r\n }\r\n\r\n ctrl.columnList.forEach(function (column) {\r\n column.sorted = ctrl.sortByColumns[column.propertyName];\r\n })\r\n ctrl.sorted = Object.keys(ctrl.sortByColumns).length > 0;\r\n\r\n if (ctrl.sorted) {\r\n localSettingsService.setValue(ctrl.sortingStorageKey, ctrl.sortByColumns);\r\n } else {\r\n localSettingsService.removeValue(ctrl.sortingStorageKey);\r\n }\r\n\r\n ctrl.loadData();\r\n }\r\n\r\n ctrl.resetSorting = function () {\r\n ctrl.sortBy();\r\n }\r\n\r\n ctrl.columns = {};\r\n ctrl.columnList = [];\r\n ctrl.columnsSortable = [];\r\n ctrl.columnStats = {\r\n numColumns: 0,\r\n numVisibleColumns: 0,\r\n columnVisibilityAffectedBelowBp: undefined\r\n };\r\n\r\n ctrl.addColumn = function (index, column) {\r\n\r\n ctrl.columns[index] = column;\r\n\r\n updateColumnInfo();\r\n }\r\n\r\n ctrl.updateColumn = function (index, column) {\r\n ctrl.columns[index] = column;\r\n\r\n updateColumnInfo();\r\n }\r\n\r\n ctrl.forceColumnVisibility = false;\r\n ctrl.toggleForcedColumnVisibility = function (e) {\r\n e.stopPropagation();\r\n\r\n ctrl.forceColumnVisibility = !ctrl.forceColumnVisibility;\r\n ctrl.columnList.forEach(function (column) {\r\n column.forceVisibility(ctrl.forceColumnVisibility);\r\n $scope.$broadcast(componentId + '.forceVisibility', column.index, ctrl.forceColumnVisibility);\r\n })\r\n }\r\n\r\n function updateColumnInfo() {\r\n\r\n ctrl.columnList = Object.values(ctrl.columns);\r\n ctrl.columnsById = {};\r\n ctrl.columnList.forEach(function (column) {\r\n if (column.propertyName) {\r\n ctrl.columnsById[column.propertyName] = column;\r\n } else if (column.id) {\r\n ctrl.columnsById[column.id] = column;\r\n }\r\n })\r\n ctrl.sorted = Object.keys(ctrl.sortByColumns).length > 0;\r\n ctrl.columnsSortable = ctrl.columnList.filter(function (c) { return c.propertyName !== undefined; });\r\n ctrl.columnStats.numColumns = ctrl.columnList.length;\r\n ctrl.columnStats.numVisibleColumns = ctrl.columnList.filter(function (column) { return column.visible; }).length;\r\n ctrl.columnStats.columnVisibilityAffectedBelowBp = _.max(ctrl.columnList.filter(function (c) { return !c.forcedVisibilityDisabled; })\r\n .map(function (c) { return Number(c.visibleFromBp); }));\r\n\r\n ctrl.onColumnsUpdated({ columns: ctrl.columns });\r\n }\r\n\r\n function getSortByParams() {\r\n var sortByParams = {};\r\n\r\n Object.keys(ctrl.sortByColumns).forEach(function (column, index) {\r\n sortByParams['sortBy[' + index + '].Key'] = column;\r\n sortByParams['sortBy[' + index + '].Value'] = ctrl.sortByColumns[column];\r\n });\r\n\r\n return sortByParams;\r\n }\r\n\r\n function getApiSupportedMethods() {\r\n if (ctrl.apiBaseUrl) {\r\n requestHelper.get(ctrl.apiBaseUrl, 'supportedmethods').then(function (response) {\r\n ctrl.supportedMethods = response;\r\n ctrl.hasSupportedMethods = Object.keys(ctrl.supportedMethods).some(function (key) {\r\n return ctrl.supportedMethods[key] === true;\r\n })\r\n })\r\n }\r\n }\r\n\r\n ctrl.isBusy = false;\r\n ctrl.busyText = null;\r\n\r\n function busy(busy, busyText) {\r\n ctrl.isBusy = busy;\r\n ctrl.busyText = busyText;\r\n }\r\n\r\n ctrl.busy = busy;\r\n\r\n $scope.data = undefined;\r\n $scope.resultCount = undefined;\r\n ctrl.typeInfo = {\r\n idPropertyName: 'id',\r\n displayName: 'Post',\r\n displayNamePlural: 'Poster',\r\n displayNameDefinite: 'Posten'\r\n };\r\n ctrl.pageIndex = 0;\r\n $scope.filters = undefined;\r\n $scope.dataLoaded = false;\r\n\r\n $scope.activeFilters = undefined;\r\n ctrl.filterIsActive = false;\r\n\r\n $scope.state = {\r\n pageSize: undefined\r\n }\r\n\r\n ctrl.getListRequestParams = function () {\r\n var requestParams = {\r\n skip: Number.isInteger(ctrl.pageIndex) && Number.isInteger($scope.state.pageSize) ? ctrl.pageIndex * $scope.state.pageSize : undefined,\r\n take: $scope.state.pageSize\r\n };\r\n\r\n if (ctrl.options.listId) {\r\n requestParams.filterIdPrefix = ctrl.options.listId + '_';\r\n }\r\n\r\n $scope.filteringParams = {};\r\n _.assign($scope.filteringParams, $scope.dateParams);\r\n _.assign($scope.filteringParams, $scope.filterQueryStringParams);\r\n if (ctrl.options.requestParams) {\r\n _.assign($scope.filteringParams, ctrl.options.requestParams);\r\n }\r\n\r\n _.assign(requestParams, getSortByParams());\r\n\r\n _.assign(requestParams, $scope.filteringParams);\r\n\r\n return requestParams;\r\n }\r\n\r\n ctrl.loadFilters = function () {\r\n onLoadFilters = ctrl.onLoadFilters({ params: ctrl.getListRequestParams() });\r\n if (onLoadFilters && angular.isFunction(onLoadFilters.then)) {\r\n\r\n return onLoadFilters.then(function (filters) {\r\n $scope.filters = filters;\r\n log.debug('Filters loaded');\r\n\r\n return filters;\r\n });\r\n }\r\n\r\n return $q.resolve([]).then(function (filters) {\r\n $scope.filters = filters;\r\n log.debug('Filters loaded');\r\n\r\n return filters;\r\n });\r\n }\r\n\r\n ctrl.countResults = function () {\r\n if (!onLoadFilters || $scope.filterQueryStringParams) {\r\n\r\n var params = ctrl.getListRequestParams();\r\n ctrl.listRequestQueryString = getQueryString(params);\r\n\r\n var onCountResults = ctrl.onCountResults({ params: params });\r\n\r\n if (onCountResults && angular.isFunction(onCountResults.then)) {\r\n log.debug('Fetching result count');\r\n\r\n return onCountResults.then(function (count) {\r\n\r\n $scope.resultCount = count;\r\n\r\n ctrl.onResultsCounted({ count: count, activeFilters: $scope.activeFilters });\r\n\r\n }, handleError);\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n };\r\n ctrl.checkLastItemUpdated = function () {\r\n if (!onLoadFilters || $scope.filterQueryStringParams) {\r\n\r\n var params = ctrl.getListRequestParams();\r\n ctrl.listRequestQueryString = getQueryString(params);\r\n\r\n var onCheckLastItemUpdated = ctrl.onCheckLastItemUpdated({ params: params });\r\n\r\n if (onCheckLastItemUpdated && angular.isFunction(onCheckLastItemUpdated.then)) {\r\n log.debug('Fetching last updated datetime');\r\n\r\n return onCheckLastItemUpdated.then(function (lastItemUpdatedAt) {\r\n\r\n $scope.lastItemUpdatedAt = lastItemUpdatedAt;\r\n\r\n ctrl.onLastItemUpdatedChecked({ lastItemUpdatedAt: lastItemUpdatedAt, activeFilters: $scope.activeFilters });\r\n\r\n }, handleError);\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n };\r\n\r\n ctrl.loadData = function ({ fullReload = false } = {}) {\r\n if (!ctrl.disableDataLoading && !ctrl.isBusy && $scope.state.pageSize && (!onLoadFilters || $scope.filterQueryStringParams)) {\r\n\r\n var params = ctrl.getListRequestParams();\r\n ctrl.listRequestQueryString = getQueryString(params);\r\n\r\n var onLoadData = ctrl.onLoadData({ params: params, sortBy: ctrl.sortByColumns, fullReload: fullReload });\r\n\r\n if (onLoadData && angular.isFunction(onLoadData.then)) {\r\n log.debug('Fetching data');\r\n busy(true, 'Hämtar data...');\r\n\r\n return onLoadData.then(function (data) {\r\n\r\n $scope.data = data;\r\n\r\n $scope.dataLoaded = true;\r\n\r\n ctrl.dataIsEmpty = !hasItemsFilter(data.results);\r\n\r\n ctrl.dataIsDefinedAndEmpty = isDefinedAndEmptyFilter(data.results);\r\n\r\n if (data.type) {\r\n ctrl.typeInfo = data.type;\r\n setupPagerTypeOptions(ctrl.typeInfo);\r\n }\r\n\r\n if ($scope.filters && $scope.filters.length > 0) {\r\n if (data.filterOptionResultCounts) {\r\n Object.keys(data.filterOptionResultCounts).forEach(function (filterId) {\r\n var filter = $scope.filters.find(function (f) { return f.id === filterId; });\r\n if (filter && filter.optionResultCounts) {\r\n filter.options.forEach(function (filterOption) {\r\n var filterOptionResultCount = data.filterOptionResultCounts[filterId][filterOption.id];\r\n if (filterOptionResultCount !== undefined) {\r\n filter.optionResultCounts[filterOption.id] = filterOptionResultCount;\r\n }\r\n });\r\n\r\n filter.optionResultCountsAllZero = Object.values(filter.optionResultCounts).every(function (count) { return count === 0; });\r\n filter.optionResultCountsSomeZero = Object.values(filter.optionResultCounts).some(function (count) { return count === 0; });\r\n filter.showAllFilterOptions = false;\r\n }\r\n })\r\n }\r\n\r\n if (data.filterOptionSecondaryResultCounts) {\r\n Object.keys(data.filterOptionSecondaryResultCounts).forEach(function (filterId) {\r\n var filter = $scope.filters.find(function (f) { return f.id === filterId; });\r\n if (filter && filter.secondaryOptionResultCounts) {\r\n filter.options.forEach(function (filterOption) {\r\n var filterOptionResultCount = data.filterOptionSecondaryResultCounts[filterId][filterOption.id];\r\n if (filterOptionResultCount !== undefined) {\r\n filter.secondaryOptionResultCounts[filterOption.id] = filterOptionResultCount;\r\n }\r\n });\r\n\r\n filter.secondaryOptionResultCountsAllZero = Object.values(filter.secondaryOptionResultCounts).every(function (count) { return count === 0; });\r\n filter.secondaryOptionResultCountsSomeZero = Object.values(filter.secondaryOptionResultCounts).some(function (count) { return count === 0; });\r\n filter.showAllFilterOptions = false;\r\n }\r\n })\r\n }\r\n }\r\n\r\n busy(false);\r\n\r\n ctrl.onDataLoaded({ data: data, params: params, filteringParams: $scope.filteringParams, fullReload: fullReload, activeFilters: $scope.activeFilters });\r\n\r\n }, handleError);\r\n }\r\n }\r\n\r\n return Promise.resolve();\r\n };\r\n\r\n ctrl.pageChanged = function (pageIndex) {\r\n ctrl.pageIndex = pageIndex;\r\n ctrl.loadData();\r\n };\r\n\r\n ctrl.pageSizeChanged = function (pageSize) {\r\n $scope.state.pageSize = pageSize;\r\n ctrl.loadData();\r\n };\r\n\r\n $scope.filterBarInitialized = function (filterBarCtrl) {\r\n ctrl.filterBarCtrl = filterBarCtrl;\r\n\r\n $timeout(function () {\r\n if (ctrl.options.filterBar && ctrl.options.filterBar.maxColumns) {\r\n ctrl.filterBarCtrl.maxColumns = ctrl.options.filterBar.maxColumns;\r\n }\r\n })\r\n\r\n ctrl.onFilterBarInit({ $filterBar: filterBarCtrl });\r\n };\r\n\r\n ctrl.filtersChanged = function (activeFilters, filterIsActive, queryStringParams, filterObject, changedFilter) {\r\n\r\n if (!_.isEqual($scope.filterQueryStringParams, queryStringParams)) {\r\n // Only update if filters really have changed\r\n $scope.activeFilters = activeFilters;\r\n ctrl.filterIsActive = filterIsActive;\r\n $scope.filterQueryStringParams = queryStringParams;\r\n $scope.filterObject = filterObject;\r\n ctrl.pageIndex = 0;\r\n\r\n ctrl.onFiltersChanged({ activeFilters: activeFilters, filterIsActive: filterIsActive, queryStringParams: queryStringParams, filterObject: filterObject, changedFilter: changedFilter });\r\n\r\n ctrl.loadData();\r\n }\r\n };\r\n\r\n var setupPagerTypeOptions = function (typeInfo) {\r\n _.assign(ctrl.pagerOptions, {\r\n itemsLabelSingular: typeInfo.displayName,\r\n itemsLabelPlural: typeInfo.displayNamePlural\r\n });\r\n }\r\n\r\n function handleError(error) {\r\n busy(false);\r\n\r\n throw error;\r\n }\r\n\r\n ctrl.setFilterValue = function(filterId, value) {\r\n ctrl.filterBarCtrl.setFilterValue(filterId, value);\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dropdownHeader';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n titleText: '@',\r\n disable: '<',\r\n options: '<',\r\n enableRefresh: '<',\r\n onRefresh: '&',\r\n onClose: '&',\r\n },\r\n transclude: {\r\n 'title': '?dropdownHeaderTitle',\r\n 'status': '?dropdownHeaderStatus',\r\n 'toolbar': '?dropdownHeaderToolbar',\r\n },\r\n require: {\r\n $dropdown: '?^^dropdown'\r\n },\r\n templateUrl: '/client/common/components/overlays/dropdown-header.component.html',\r\n controller: ['$scope', '$transclude',\r\n function ($scope, $transclude) {\r\n\r\n $scope.titleSlotIsFilled = $transclude.isSlotFilled('title');\r\n $scope.statusSlotIsFilled = $transclude.isSlotFilled('status');\r\n $scope.toolbarSlotIsFilled = $transclude.isSlotFilled('toolbar');\r\n\r\n var ctrl = this;\r\n\r\n $scope.state = {\r\n refreshing: false\r\n }\r\n\r\n var defaultOptions = {\r\n visibility: {\r\n titleSlot: true,\r\n statusSlot: true,\r\n toolbarSlot: true,\r\n }\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n ctrl.close = function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n if (ctrl.onClose() !== false) {\r\n if (ctrl.$dropdown) {\r\n ctrl.$dropdown.close(false);\r\n }\r\n }\r\n }\r\n\r\n ctrl.refresh = function () {\r\n\r\n $scope.state.refreshing = true;\r\n var onRefresh = ctrl.onRefresh();\r\n\r\n if (onRefresh && angular.isFunction(onRefresh.then)) {\r\n onRefresh.then(function () {\r\n $scope.state.refreshing = false;\r\n }, error => {\r\n $scope.state.refreshing = false;\r\n\r\n throw error;\r\n });\r\n } else {\r\n $scope.state.refreshing = false;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dropdown';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n 'trigger': '?dropdownTrigger',\r\n 'body': 'dropdownBody'\r\n },\r\n bindings: {\r\n state: '<',\r\n options: '<',\r\n triggerDisabled: '<',\r\n onInit: '&',\r\n onOpened: '&',\r\n onClosed: '&',\r\n },\r\n templateUrl: '/client/common/components/overlays/dropdown.component.html',\r\n controller: ['$scope', '$rootScope', '$window', '$transclude', '$timeout', '$element', '$document', 'logger',\r\n function ($scope, $rootScope, $window, $transclude, $timeout, $element, $document, logger) {\r\n\r\n $scope.customTrigger = $transclude.isSlotFilled('trigger');\r\n\r\n var ctrl = this;\r\n\r\n ctrl.id = $scope.$id;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n $scope.dropdownTriggerId = 'dropdownTrigger_' + $scope.$id;\r\n $scope.dropdownContainerId = 'dropdownContainer_' + $scope.$id;\r\n $scope.dropdownId = 'dropdown_' + $scope.$id;\r\n\r\n ctrl.initialized = false;\r\n\r\n ctrl.menuElement = undefined;\r\n ctrl.openedMenuElement = undefined;\r\n ctrl.dropdownContainerElement = undefined;\r\n\r\n var subDropdowns = [];\r\n var breakpointListener = undefined;\r\n\r\n $scope.renderBody = undefined;\r\n $scope.renderBodyContent = undefined;\r\n ctrl.showDropdown = false;\r\n $scope.triggerCssClasses = {};\r\n $scope.dropdownMenuCssClasses = {};\r\n\r\n var defaultOptions = {\r\n size: undefined,\r\n menuCssClasses: {},\r\n preRenderBody: false,\r\n closeOnClick: false,\r\n closeOthersOnOpen: false,\r\n manualOpen: false,\r\n manualClose: false,\r\n manualFirstOpen: false,\r\n firstOpenDelay: 200,\r\n removeBodyOnClose: false,\r\n trigger: {\r\n external: false,\r\n externalElementId: undefined,\r\n externalElement: undefined,\r\n icon: 'far fa-ellipsis-h fa-1x',\r\n openIcon: undefined,\r\n text: undefined,\r\n tooltip: undefined,\r\n tooltipPlacement: $rootScope.fullscreenMode ? 'bottom' : 'top',\r\n styleAsButton: !$scope.customTrigger,\r\n styleAsSquareButton: !$scope.customTrigger,\r\n cssClasses: [],\r\n showIndicator: true,\r\n disabled: false\r\n },\r\n controller: ctrl,\r\n unpackFromBreakpointAndUp: undefined,\r\n appendToBody: true\r\n };\r\n\r\n var defaultState = {\r\n unpacked: false,\r\n open: false,\r\n opening: false\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ dropdownCtrl: ctrl });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (ctrl.options.preRenderBody) {\r\n $scope.renderBody = true;\r\n $scope.renderBodyContent = true;\r\n }\r\n\r\n if (ctrl.options.trigger.styleAsButton) {\r\n\r\n $scope.triggerCssClasses['btn'] = true;\r\n\r\n if (ctrl.options.trigger.styleAsSquareButton) {\r\n $scope.triggerCssClasses['btn-square'] = true;\r\n }\r\n }\r\n\r\n if (ctrl.options.trigger.cssClasses) {\r\n if (Array.isArray(ctrl.options.trigger.cssClasses)) {\r\n ctrl.options.trigger.cssClasses.forEach(function (cssClass) {\r\n $scope.triggerCssClasses[cssClass] = true;\r\n });\r\n } else {\r\n $scope.triggerCssClasses = _.assign($scope.triggerCssClasses, ctrl.options.trigger.cssClasses);\r\n }\r\n }\r\n\r\n if (ctrl.options.unpackFromBreakpointAndUp && !breakpointListener) {\r\n breakpointListener = $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n\r\n handleCurrentBreakpoint(currentBreakpoint);\r\n });\r\n }\r\n\r\n if (ctrl.options.menuCssClasses) {\r\n $scope.dropdownMenuCssClasses = merge($scope.dropdownMenuCssClasses, ctrl.options.menuCssClasses);\r\n }\r\n\r\n if (ctrl.options.size) {\r\n $scope.dropdownMenuCssClasses['dropdown-' + ctrl.options.size] = true;\r\n }\r\n }\r\n\r\n if (changes.state) {\r\n ctrl.state = merge(ctrl.state, defaultState);\r\n\r\n handleCurrentBreakpoint($rootScope.breakpoints.current);\r\n }\r\n\r\n if (changes.state && ctrl.state === undefined) {\r\n ctrl.state = null;\r\n }\r\n\r\n if (changes.triggerDisabled && ctrl.triggerDisabled === undefined) {\r\n ctrl.triggerDisabled = false;\r\n }\r\n\r\n refreshBindings();\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n logDebug('Menu destroyed');\r\n $document.unbind('click', documentClickEventHandler);\r\n angular.element($window).unbind('resize', windowResizeEventHandler);\r\n\r\n ctrl.close();\r\n\r\n if (breakpointListener) breakpointListener();\r\n\r\n // Clear element references\r\n ctrl.menuElement = null;\r\n ctrl.openedMenuElement = null;\r\n ctrl.triggerElement = null;\r\n ctrl.dropdownContainerElement = null;\r\n }\r\n\r\n $scope.$on(componentId + '.close', function (e, callingDropdownId) {\r\n if (callingDropdownId !== $scope.dropdownId) {\r\n logDebug('Received close event from ' + callingDropdownId);\r\n ctrl.close();\r\n }\r\n });\r\n\r\n $scope.$on('dropdown.opened', function (e, dropdownCtrl) {\r\n if (e.currentScope.$id !== e.targetScope.$id) {\r\n e.stopPropagation();\r\n\r\n subDropdowns.push(dropdownCtrl);\r\n }\r\n });\r\n\r\n $scope.$on('dropdown.closed', function (e, dropdownCtrl, closeParentDropdowns) {\r\n if (e.currentScope.$id !== e.targetScope.$id) {\r\n logDebug('Received close event from ' + dropdownCtrl.id);\r\n if (closeParentDropdowns && _.find(subDropdowns, function (sd) { return elementIsOrContainsClickedElement(sd.openedMenuElement, dropdownCtrl.openedMenuElement); })) {\r\n logDebug('Closing menu in response to close event from ' + dropdownCtrl.id);\r\n $(dropdownCtrl.openedMenuElement).removeClass('open');\r\n\r\n $timeout(function () {\r\n ctrl.close(closeParentDropdowns);\r\n });\r\n }\r\n\r\n e.stopPropagation();\r\n\r\n subDropdowns = subDropdowns.filter(function (sd) { return sd.id !== dropdownCtrl.id; });\r\n }\r\n });\r\n\r\n $scope.$on('$routeChangeSuccess', function (next, current) {\r\n ctrl.close();\r\n });\r\n\r\n $scope.$on('slideNav.show', function (next, current) {\r\n ctrl.close();\r\n });\r\n\r\n $document.bind('click', documentClickEventHandler);\r\n\r\n ctrl.toggleDropdown = function (e) {\r\n if (e) {\r\n e.preventDefault();\r\n\r\n if (!ctrl.triggerDisabled) {\r\n e.stopPropagation();\r\n }\r\n }\r\n\r\n if (ctrl.showDropdown) {\r\n if (!ctrl.options.manualClose) {\r\n ctrl.close();\r\n\r\n ctrl.showDropdown = false;\r\n }\r\n } else if (!ctrl.triggerDisabled) {\r\n\r\n if (ctrl.options.closeOthersOnOpen) {\r\n $rootScope.$broadcast(componentId + '.close', $scope.dropdownId);\r\n };\r\n\r\n $scope.renderBody = true;\r\n $scope.renderBodyContent = true;\r\n logDebug('Rendering menu body');\r\n ctrl.state.opening = true;\r\n\r\n $timeout(function () {\r\n\r\n if (!ctrl.menuElement) ctrl.menuElement = $('#' + $scope.dropdownId);\r\n\r\n if (ctrl.menuElement.length === 0) throw new Error('Dropdown menu element not found');\r\n\r\n if (!ctrl.triggerElement) {\r\n if (ctrl.options.trigger.externalElementId) {\r\n ctrl.triggerElement = $($document[0].getElementById(ctrl.options.trigger.externalElementId));\r\n } else if (ctrl.options.trigger.externalElement) {\r\n ctrl.setTriggerElement(ctrl.options.trigger.externalElement);\r\n } else {\r\n ctrl.triggerElement = e ? $(e.currentTarget) : $($element[0].querySelector('#' + $scope.dropdownTriggerId));\r\n }\r\n }\r\n\r\n if (ctrl.triggerElement.length === 0) {\r\n log.error('Dropdown trigger element not found')\r\n }\r\n\r\n $scope.$emit('dropdown.opening');\r\n\r\n if (ctrl.onOpening) {\r\n ctrl.onOpening();\r\n }\r\n\r\n if (!ctrl.options.manualOpen && (!ctrl.options.manualFirstOpen || ctrl.initialized)) {\r\n ctrl.open();\r\n }\r\n }, ctrl.menuElement ? 0 : ctrl.options.firstOpenDelay);\r\n }\r\n };\r\n\r\n ctrl.open = function () {\r\n if (!ctrl.triggerDisabled && ctrl.menuElement && !ctrl.openedMenuElement) {\r\n\r\n if (ctrl.onOpen) {\r\n ctrl.onOpen();\r\n }\r\n\r\n $timeout(function () {\r\n if (ctrl.options.appendToBody) {\r\n // detach it and append it to the body\r\n logDebug('Detaching menu element and appending to body element');\r\n ctrl.openedMenuElement = ctrl.menuElement.detach();\r\n $('body').append(ctrl.openedMenuElement);\r\n } else {\r\n ctrl.openedMenuElement = ctrl.menuElement;\r\n }\r\n\r\n $timeout(function () {\r\n placeOpenedMenuElement()\r\n\r\n $($element).addClass('open');\r\n\r\n ctrl.showDropdown = true;\r\n\r\n ctrl.initialized = true;\r\n\r\n ctrl.state.open = true;\r\n\r\n ctrl.state.opening = false;\r\n\r\n logDebug('Menu opened');\r\n\r\n $scope.$emit('dropdown.opened', ctrl);\r\n\r\n angular.element($window).bind('resize', windowResizeEventHandler);\r\n\r\n ctrl.onOpened();\r\n });\r\n });\r\n }\r\n }\r\n\r\n ctrl.close = function (closeParentDropdowns) {\r\n\r\n if (ctrl.openedMenuElement) {\r\n\r\n if (ctrl.onClose) {\r\n ctrl.onClose();\r\n }\r\n\r\n logDebug('Detaching menu element and appending to initial container');\r\n $('#' + $scope.dropdownContainerId).append(ctrl.openedMenuElement.detach());\r\n ctrl.openedMenuElement.hide();\r\n if (ctrl.options.appendToBody) {\r\n ctrl.openedMenuElement.css('left', '');\r\n ctrl.openedMenuElement.css('top', '');\r\n }\r\n ctrl.openedMenuElement.css('visibility', '');\r\n\r\n var triggerIndicator = ctrl.openedMenuElement.find('.dropdown-trigger-indicator');\r\n triggerIndicator.css('left', '');\r\n triggerIndicator.css('top', '');\r\n triggerIndicator.css('transform', '');\r\n\r\n ctrl.showDropdown = false;\r\n\r\n $scope.$emit('dropdown.closed', ctrl, closeParentDropdowns);\r\n\r\n if (ctrl.options.removeBodyOnClose) {\r\n $scope.renderBodyContent = false;\r\n }\r\n\r\n ctrl.openedMenuElement = undefined;\r\n\r\n ctrl.state.open = false;\r\n\r\n logDebug('Menu closed', closeParentDropdowns);\r\n\r\n angular.element($window).unbind('resize', windowResizeEventHandler);\r\n\r\n ctrl.onClosed();\r\n }\r\n }\r\n\r\n ctrl.setTriggerElement = function (element) {\r\n ctrl.triggerElement = $(element);\r\n }\r\n\r\n ctrl.updateMenuPosition = placeOpenedMenuElement;\r\n\r\n function placeOpenedMenuElement() {\r\n var triggerElement = ctrl.triggerElement;\r\n var openedMenuElement = ctrl.openedMenuElement;\r\n if (openedMenuElement) {\r\n var windowInnerWidth = window.innerWidth;\r\n var windowInnerHeight = window.innerHeight;\r\n var documentHeight = $(document).height();\r\n var scrollbarOffsetTop = $(window).scrollTop()\r\n\r\n var dropdownMargin = 16;\r\n var dropdownOffset = openedMenuElement.offset();\r\n var dropdownWidth = openedMenuElement.outerWidth();\r\n var dropdownWidthWithMargin = dropdownWidth + dropdownMargin * 2;\r\n var dropdownHeight = openedMenuElement.outerHeight();\r\n\r\n var triggerOffset = triggerElement.offset();\r\n var triggerWidth = triggerElement.outerWidth();\r\n var triggerHeight = triggerElement.outerHeight();\r\n var triggerTopOffset = Math.round(triggerOffset.top);\r\n var triggerBottomOffset = Math.round(triggerOffset.top + triggerHeight);\r\n var triggerLeftOffset = Math.round(triggerOffset.left);\r\n var triggerRightOffset = Math.round(triggerOffset.left + triggerWidth);\r\n\r\n var triggerIndicator = openedMenuElement.find('.dropdown-trigger-indicator');\r\n \r\n var triggerIndicatorWidth = triggerIndicator.outerWidth();\r\n var triggerIndicatorHeight = triggerIndicator.outerHeight();\r\n\r\n var triggerPosAdjustmentX = triggerWidth < 24 ? 24 - triggerWidth : 0; \r\n\r\n var triggerDropdownMargin = ctrl.options.trigger.showIndicator ? 4 : 0;\r\n var dropdownTopOffset = 2 * Math.round((triggerBottomOffset + triggerIndicatorHeight + triggerDropdownMargin) / 2);\r\n var dropdownBottomOffset = 2 * Math.round((triggerOffset.top - triggerIndicatorHeight - triggerDropdownMargin) / 2);\r\n var dropdownLeftOffset = 2 * Math.round(triggerLeftOffset / 2);\r\n var dropdownRightOffset = 2 * Math.round(triggerRightOffset / 2);\r\n\r\n var dropdownCss = {\r\n 'display': ctrl.options.appendToBody ? 'block' : 'flex',\r\n 'visibility': 'hidden'\r\n }\r\n\r\n var fitsAboveTrigger = (dropdownBottomOffset - dropdownHeight - dropdownMargin * 2 - scrollbarOffsetTop) >= 0;\r\n var fitsBelowTrigger = (dropdownTopOffset + dropdownHeight + dropdownMargin * 2 - scrollbarOffsetTop) <= windowInnerHeight;\r\n\r\n var spaceLeftToTheLeft = (dropdownLeftOffset - dropdownWidthWithMargin);\r\n var fitsToTheLeftOfTrigger = spaceLeftToTheLeft >= 0;\r\n var spaceLeftToTheRight = windowInnerWidth - (dropdownLeftOffset + dropdownWidthWithMargin);\r\n var fitsToTheRightOfTrigger = spaceLeftToTheRight >= 0;\r\n if (ctrl.options.appendToBody) {\r\n if (fitsBelowTrigger || fitsAboveTrigger) {\r\n if (fitsToTheLeftOfTrigger) {\r\n dropdownCss.left = dropdownRightOffset - dropdownWidth + triggerPosAdjustmentX;\r\n } else if (fitsToTheRightOfTrigger) {\r\n dropdownCss.left = dropdownLeftOffset - triggerPosAdjustmentX;\r\n } else {\r\n dropdownCss.left = Math.round((windowInnerWidth - dropdownWidth) / 2);\r\n }\r\n } else if (fitsToTheLeftOfTrigger) {\r\n dropdownCss.left = dropdownLeftOffset - dropdownWidth - triggerIndicatorHeight;\r\n } else if (fitsToTheRightOfTrigger) {\r\n dropdownCss.left = dropdownRightOffset + triggerIndicatorHeight + triggerDropdownMargin;\r\n } else {\r\n dropdownCss.left = Math.round((windowInnerWidth - dropdownWidth) / 2);\r\n }\r\n\r\n if (fitsBelowTrigger) {\r\n dropdownCss.top = dropdownTopOffset;\r\n } else if (fitsAboveTrigger) {\r\n dropdownCss.top = dropdownBottomOffset - dropdownHeight;\r\n } else if (fitsToTheLeftOfTrigger || fitsToTheRightOfTrigger) {\r\n dropdownCss.top = Math.max(Math.min(Math.round(scrollbarOffsetTop + (windowInnerHeight - dropdownHeight) / 2), triggerTopOffset) , dropdownMargin);\r\n } else {\r\n \r\n dropdownCss.top = dropdownTopOffset;\r\n }\r\n } else {\r\n var triggerPosition = triggerElement.position();\r\n var triggerPositionLeft = Math.round(triggerPosition.left);\r\n var triggerPositionRight = Math.round(triggerPositionLeft + triggerWidth);\r\n\r\n if (fitsBelowTrigger || fitsAboveTrigger) {\r\n if (fitsToTheLeftOfTrigger) {\r\n dropdownCss.left = (triggerPositionLeft + triggerWidth) - dropdownWidth;\r\n } else if (fitsToTheRightOfTrigger) {\r\n dropdownCss.left = triggerPositionLeft;\r\n } else {\r\n dropdownCss.left = dropdownMargin;\r\n }\r\n } else if (fitsToTheLeftOfTrigger) {\r\n dropdownCss.left = triggerPositionLeft - dropdownWidth - triggerIndicatorHeight - triggerDropdownMargin;\r\n } else if (fitsToTheRightOfTrigger) {\r\n dropdownCss.left = triggerPositionRight + triggerIndicatorHeight + triggerDropdownMargin;\r\n } else {\r\n dropdownCss.left = -triggerLeftOffset + dropdownMargin;\r\n }\r\n\r\n if (fitsBelowTrigger) {\r\n dropdownCss.top = (ctrl.options.trigger.external ? 0 : triggerHeight) + triggerIndicatorHeight + triggerDropdownMargin;\r\n } else if (fitsAboveTrigger) {\r\n dropdownCss.top = -(triggerIndicatorHeight + triggerDropdownMargin + dropdownHeight);\r\n } else if (fitsToTheLeftOfTrigger || fitsToTheRightOfTrigger) {\r\n dropdownCss.top = -Math.min(triggerTopOffset, Math.round(dropdownHeight / 2)) + dropdownMargin;\r\n } else {\r\n dropdownCss.top = (ctrl.options.trigger.external ? 0 : triggerHeight) + triggerIndicatorHeight + triggerDropdownMargin;\r\n }\r\n }\r\n\r\n openedMenuElement.css(dropdownCss);\r\n\r\n var triggerIndicatorCss = {};\r\n var triggerIndicatorWidthHeightDifference = triggerIndicatorWidth - triggerIndicatorHeight;\r\n\r\n if (fitsBelowTrigger) {\r\n triggerIndicatorCss.top = -triggerIndicatorHeight;\r\n } else if (fitsAboveTrigger) {\r\n triggerIndicatorCss.top = dropdownHeight - 1;\r\n triggerIndicatorCss.transform = 'rotate(180deg)';\r\n } else if (fitsToTheLeftOfTrigger || fitsToTheRightOfTrigger) {\r\n if (ctrl.options.appendToBody) {\r\n triggerIndicatorCss.top = Math.round(triggerOffset.top - dropdownCss.top + triggerHeight / 2 - triggerIndicatorHeight / 2);\r\n } else {\r\n triggerIndicatorCss.top = Math.round(-dropdownCss.top + triggerHeight / 2 - triggerIndicatorHeight / 2);\r\n }\r\n } else {\r\n // dropdown goes below trigger\r\n triggerIndicatorCss.top = -triggerIndicatorHeight;\r\n }\r\n\r\n if (fitsToTheLeftOfTrigger) {\r\n if (fitsAboveTrigger || fitsBelowTrigger) {\r\n triggerIndicatorCss.left = (dropdownWidth - ((triggerWidth / 2) + (triggerIndicatorWidth / 2))) - triggerPosAdjustmentX;\r\n if (!fitsBelowTrigger && fitsAboveTrigger) {\r\n triggerIndicatorCss.transform = 'rotate(180deg)';\r\n } else {\r\n triggerIndicatorCss.transform = 'none';\r\n }\r\n } else {\r\n triggerIndicatorCss.left = dropdownWidth - (triggerIndicatorWidthHeightDifference / 2);\r\n triggerIndicatorCss.transform = 'rotate(90deg)';\r\n }\r\n } else if (fitsToTheRightOfTrigger) {\r\n if (fitsAboveTrigger || fitsBelowTrigger) {\r\n triggerIndicatorCss.left = (triggerWidth / 2) - (triggerIndicatorWidth / 2) + triggerPosAdjustmentX;\r\n if (!fitsBelowTrigger && fitsAboveTrigger) {\r\n triggerIndicatorCss.transform = 'rotate(180deg)';\r\n } else {\r\n triggerIndicatorCss.transform = 'none';\r\n }\r\n } else {\r\n triggerIndicatorCss.left = -(triggerIndicatorHeight + (triggerIndicatorWidthHeightDifference / 2));\r\n triggerIndicatorCss.transform = 'rotate(-90deg)';\r\n }\r\n } else {\r\n if (ctrl.options.appendToBody) {\r\n triggerIndicatorCss.left = triggerOffset.left - dropdownCss.left + (triggerWidth / 2) - (triggerIndicatorWidth / 2);\r\n } else {\r\n triggerIndicatorCss.left = -dropdownCss.left + triggerPositionLeft + (triggerWidth / 2) - (triggerIndicatorWidth / 2);\r\n }\r\n if (!fitsBelowTrigger && fitsAboveTrigger) {\r\n triggerIndicatorCss.transform = 'rotate(180deg)';\r\n } else {\r\n triggerIndicatorCss.transform = 'none';\r\n }\r\n }\r\n\r\n triggerIndicator.css(triggerIndicatorCss);\r\n\r\n openedMenuElement.css({ 'visibility': 'visible' });\r\n\r\n //logDebug('Menu positioned')\r\n }\r\n }\r\n function handleCurrentBreakpoint(currentBreakpoint) {\r\n var unpack = ctrl.options !== undefined && ctrl.options.unpackFromBreakpointAndUp !== undefined && currentBreakpoint >= ctrl.options.unpackFromBreakpointAndUp;\r\n\r\n if (unpack) {\r\n ctrl.close();\r\n }\r\n\r\n ctrl.state.unpacked = unpack;\r\n }\r\n\r\n function documentClickEventHandler(e) {\r\n if (ctrl.openedMenuElement\r\n && !ctrl.options.manualClose\r\n && !($(e.target).hasClass('ui-select-placeholder') // prevent ui-select from closing dropdown\r\n || $(e.target).hasClass('ui-select-choices-row-inner') \r\n || $(e.target).parents('.ui-select-container').length > 0\r\n || $(e.target).parents('.ui-select-choices-row-inner').length > 0)\r\n && ctrl.canClose(e.target)\r\n ) {\r\n $($element).removeClass('open');\r\n\r\n $timeout(function () {\r\n ctrl.close();\r\n });\r\n }\r\n }\r\n\r\n function windowResizeEventHandler(e) {\r\n $timeout(function () {\r\n placeOpenedMenuElement();\r\n });\r\n }\r\n\r\n function elementIsOrContainsClickedElement(element, clickedElement) {\r\n return element && (element.is(clickedElement) || element.has(clickedElement).length > 0)\r\n || subDropdowns.some(sd => sd.openedMenuElement && (sd.openedMenuElement.is(clickedElement) || sd.openedMenuElement.has(clickedElement).length > 0));\r\n }\r\n\r\n function logDebug(message) {\r\n log.debug(message, $scope.$id);\r\n }\r\n\r\n ctrl.canClose = function (clickedElement) {\r\n return !ctrl.options.manualClose\r\n && (ctrl.options.closeOnClick || !elementIsOrContainsClickedElement(ctrl.openedMenuElement, clickedElement))\r\n && !_.find(subDropdowns, function (sd) { return !sd.canClose(clickedElement); })\r\n }\r\n\r\n function refreshBindings() {\r\n $scope.bindingRefreshTrigger = new Date().getTime();\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'printButton';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/printing/print-button.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n \r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n $scope.openPrintDialog = function () {\r\n window.print();\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'dropdownSelector';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n selectableOptions: '<',\r\n defaultOptionId: '@',\r\n tooltipContent: '@',\r\n onInit: '&',\r\n onOptionChanged: '&',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/selectors/dropdown-selector.component.html',\r\n controller: ['$scope', 'logger', 'localSettingsService', '$rootScope', 'locationService',\r\n function ($scope, logger, localSettingsService, $rootScope, locationService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n menuDirection: 'left',\r\n tooltipPlacement: 'top',\r\n hideSelectedOptionText: false,\r\n persistSelected: false,\r\n queryParamName: undefined,\r\n localStorageKey: undefined,\r\n hideIcon: false,\r\n small: false,\r\n menuItem: false,\r\n minimizeBelowBp: 3\r\n };\r\n\r\n $scope.dropdownOptions = {\r\n closeOnClick: true\r\n };\r\n\r\n $scope.tooltip = undefined;\r\n $scope.minimize = false;\r\n\r\n ctrl.$onInit = function () {\r\n ctrl.onInit({ dropdownSelectorCtrl: ctrl });\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n Object.assign($scope.dropdownOptions, {\r\n trigger: {\r\n styleAsButton: true,\r\n cssClasses: [{ 'btn-sm': ctrl.options.small, 'menu-item': ctrl.options.menuItem }]\r\n }\r\n });\r\n\r\n $scope.minimize = $rootScope.breakpoints.current < ctrl.options.minimizeBelowBp;\r\n }\r\n\r\n if ((changes.selectableOptions || changes.options) && ctrl.selectableOptions && ctrl.options) {\r\n loadOptionFromQueryString();\r\n loadStoredOption();\r\n\r\n if (!$scope.currentOption && ctrl.defaultOptionId) {\r\n $scope.currentOption = getOptionById(ctrl.defaultOptionId);\r\n }\r\n\r\n if (!$scope.currentOption && ctrl.selectableOptions && ctrl.selectableOptions.length > 0) {\r\n $scope.currentOption = ctrl.selectableOptions[0];\r\n }\r\n\r\n updateQueryString();\r\n }\r\n\r\n if (changes.tooltipContent) {\r\n updateTooltip();\r\n }\r\n }\r\n\r\n $scope.dropdownInit = function (dropdownCtrl) {\r\n $scope.$dropdown = dropdownCtrl;\r\n }\r\n\r\n $scope.$on('currentbreakpoint.changed', (e, currentBreakPoint) => {\r\n $scope.minimize = currentBreakPoint < ctrl.options.minimizeBelowBp;\r\n });\r\n\r\n ctrl.setOption = function (viewType) {\r\n if ($scope.currentOption !== viewType) {\r\n var previousOption = $scope.currentOption;\r\n $scope.currentOption = viewType;\r\n\r\n updateQueryString();\r\n storeCurrentOption();\r\n updateTooltip();\r\n\r\n ctrl.onOptionChanged({ option: $scope.currentOption, previousOption: previousOption });\r\n }\r\n }\r\n\r\n function updateTooltip() {\r\n $scope.tooltip = ctrl.tooltipContent ? ctrl.tooltipContent : $scope.currentOption ? $scope.currentOption.name : undefined;\r\n }\r\n\r\n function getOptionById(id) {\r\n return _.find(ctrl.selectableOptions, function (vt) { return vt.id === id; });\r\n }\r\n\r\n function loadOptionFromQueryString() {\r\n var optionId = locationService.getQueryParam(ctrl.options.queryParamName)\r\n\r\n if (optionId) {\r\n $scope.currentOption = getOptionById(optionId);\r\n storeCurrentOption();\r\n };\r\n }\r\n\r\n function updateQueryString() {\r\n if (hasValue(ctrl.options.queryParamName) && $scope.currentOption) {\r\n locationService.setQueryParam(ctrl.options.queryParamName, $scope.currentOption.id);\r\n }\r\n }\r\n\r\n function storeCurrentOption() {\r\n if (ctrl.options.persistSelected && $scope.currentOption) {\r\n localSettingsService.setValue(ctrl.options.localStorageKey, $scope.currentOption.id);\r\n }\r\n }\r\n\r\n function loadStoredOption() {\r\n if (ctrl.options.persistSelected && !$scope.currentOption) {\r\n var storedOptionId = localSettingsService.getValue(ctrl.options.localStorageKey);\r\n if (storedOptionId) $scope.currentOption = getOptionById(storedOptionId);\r\n }\r\n }\r\n\r\n }],\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'markdownUserGuide';\r\n\r\n app.component(componentId, {\r\n templateUrl:\r\n '/client/common/components/user-guide/markdown-user-guide.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n $scope.sampleMarkdown = '# Rubrik\\n' +\r\n '## Underrubrik\\n\\n' +\r\n 'Brödtext\\n\\n' +\r\n '- punkt 1\\n' +\r\n '- punkt 2\\n\\n' +\r\n '**fetstil**\\n\\n' +\r\n '[Länkad text](https://www.coordinare.se)\\n\\n' +\r\n 'https://www.coordinare.se';\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userAvatar';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/users/user-avatar.component.html',\r\n controller: ['$scope', 'fullNameInitialsFilter', 'isEffectiveDateFilter', 'toDateStringFilter',\r\n function ($scope, fullNameInitialsFilter, isEffectiveDateFilter, toDateStringFilter) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n showStatus: true,\r\n size: 32,\r\n containerWidth: undefined,\r\n containerHeight: undefined\r\n };\r\n\r\n $scope.state = {\r\n statusTooltip: undefined,\r\n showInactivationStatus: false,\r\n showConfidentialStatus: false\r\n }\r\n\r\n $scope.statusIconShrinkFactor = 0;\r\n $scope.statusIconGrowFactor = 0;\r\n $scope.userColorHex = undefined;\r\n\r\n ctrl.$onInit = function () {\r\n setupOptions();\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n setupOptions();\r\n }\r\n\r\n if (changes.user && ctrl.user) {\r\n $scope.initials = fullNameInitialsFilter(ctrl.user.fullName);\r\n\r\n $scope.userColorHex = ctrl.user.color ? ctrl.user.color.hex : null;\r\n }\r\n\r\n if ((changes.options || changes.user) && (ctrl.options && ctrl.user)) {\r\n var showStatus = ctrl.options.showStatus;\r\n var confidential = ctrl.user.confidential;\r\n var dateInactivated = ctrl.user.dateInactivated;\r\n\r\n var statuses = [];\r\n\r\n if (showStatus && dateInactivated) {\r\n $scope.state.showInactivationStatus = true;\r\n statuses.push('
' + (isEffectiveDateFilter(dateInactivated) ? 'Inaktiverades' : 'Inaktiveras') + ' ' + toDateStringFilter(dateInactivated) + '
');\r\n } else {\r\n $scope.state.showInactivationStatus = false;\r\n }\r\n\r\n if (showStatus && confidential) {\r\n $scope.state.showConfidentialStatus = true;\r\n statuses.push('
Utökad sekretess
');\r\n } else {\r\n $scope.state.showConfidentialStatus = false;\r\n }\r\n\r\n if (statuses.length > 0) {\r\n $scope.state.statusTooltip = '
' + statuses.join('') + '
';\r\n }\r\n\r\n refreshBindings();\r\n }\r\n }\r\n\r\n var setupOptions = function () {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n var size = ctrl.options.size;\r\n if (size) {\r\n $scope.statusIconOffsetFactor = Math.round(size / 3) + 2;\r\n $scope.fontSize = 2 * Math.round((size / 3 + 2) / 2);\r\n\r\n if ($scope.initials && $scope.initials.length > 2) {\r\n $scope.fontSize -= 2 * Math.round((size / 16) / 2);\r\n }\r\n\r\n if (size <= 24) {\r\n $scope.statusIconShrinkFactor = 6;\r\n\r\n } else if (size <= 40) {\r\n $scope.statusIconShrinkFactor = 2;\r\n }\r\n else if (size <= 64) {\r\n $scope.statusIconGrowFactor = 4;\r\n }\r\n else if (size <= 128) {\r\n $scope.statusIconGrowFactor = 8;\r\n }\r\n }\r\n }\r\n\r\n function refreshBindings() {\r\n $scope.bindingRefreshTrigger = new Date().getTime();\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userDropdownMenu';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n trigger: '?dropdownTrigger'\r\n },\r\n bindings: {\r\n user: '<',\r\n date: '<',\r\n avatarOnly: '<',\r\n options: '<'\r\n },\r\n templateUrl: '/client/common/components/users/user-dropdown-menu.component.html',\r\n controller: ['$scope', '$transclude', 'logger', function ($scope, $transclude, logger) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n avatarOptions: {}\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userIdCard';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<',\r\n linkToProfile: '<',\r\n showDetailedStatus: '<',\r\n showSecondaryId: '<',\r\n avatarOnly: '<',\r\n hideId: '<',\r\n date: '<',\r\n highlightText: '<',\r\n options: '<'\r\n },\r\n transclude: {\r\n userIdStatus: '?userIdCardUserIdStatus',\r\n subTitle: '?userIdCardSubTitle',\r\n },\r\n templateUrl: '/client/common/components/users/user-id-card.component.html',\r\n controller: ['$scope', '$rootScope', '$transclude', 'staffProfileUrlFilter', 'clientProfileUrlFilter',\r\n function ($scope, $rootScope, $transclude, staffProfileUrlFilter, clientProfileUrlFilter) {\r\n\r\n var ctrl = this;\r\n\r\n $scope.userIdStatusSlotFilled = $transclude.isSlotFilled('userIdStatus');\r\n $scope.subTitleSlotFilled = $transclude.isSlotFilled('subTitle');\r\n\r\n $scope.rolesNames = null;\r\n ctrl.spacingCssClasses = {}\r\n\r\n var defaultOptions = {\r\n avatarOptions: {\r\n hide: false\r\n },\r\n shrinkable: false,\r\n dense: false,\r\n roles: {\r\n show: false,\r\n cssClasses: ['text-small'],\r\n cssStyle: null,\r\n badge: false\r\n },\r\n employmentId: {\r\n cssClasses: ['text-small'],\r\n badge: true\r\n },\r\n externalId: {\r\n cssClasses: ['text-small'],\r\n badge: true\r\n },\r\n emailIndication: {\r\n show: false\r\n },\r\n hideSubTitle: false,\r\n showUserIdStatus: false,\r\n fullAccess: false\r\n };\r\n\r\n let state = {\r\n showEmploymentIds: false,\r\n showRoles: false,\r\n showExternalId: false,\r\n gridCssClasses: ['grid-cols-2-min-content'],\r\n activeGridCssClasses: [],\r\n profileUrl: null,\r\n fullAccess: false\r\n }\r\n\r\n $scope.state = state;\r\n\r\n ctrl.$onInit = function () {\r\n }\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n ctrl.spacingCssClasses['w-spacing-x-1'] = ctrl.options.dense;\r\n ctrl.spacingCssClasses['w-spacing-x-2'] = !ctrl.options.dense;\r\n ctrl.spacingCssClasses['w-spacing-x-3'] = $scope.subTitleSlotFilled && !ctrl.options.hideSubTitle;\r\n\r\n if (ctrl.options.shrinkable) {\r\n state.gridCssClasses[0] = 'grid-cols-2-min-content-shrinkable';\r\n }\r\n\r\n if (ctrl.user) {\r\n\r\n state.fullAccess = ctrl.options.fullAccess || (ctrl.user.userType === 0 && $rootScope.userHasStaffAccess) || (ctrl.user.userType === 1 && $rootScope.userHasClientAccess);\r\n\r\n if (state.fullAccess && ctrl.linkToProfile && ctrl.user.userType !== undefined) {\r\n switch (ctrl.user.userType) {\r\n case 0:\r\n state.profileUrl = staffProfileUrlFilter(ctrl.user);\r\n break;\r\n case 1:\r\n state.profileUrl = clientProfileUrlFilter(ctrl.user.id);\r\n break;\r\n }\r\n }\r\n\r\n if (ctrl.options.roles.show && state.fullAccess) {\r\n var rolesNames = [];\r\n\r\n _.forEach($rootScope.systemTypes.roles.values, function (role) {\r\n if (role.id !== 0 && (ctrl.user.roles & role.id) == role.id) {\r\n rolesNames.push(role.name);\r\n }\r\n });\r\n\r\n $scope.rolesNames = rolesNames;\r\n\r\n state.showRoles = $scope.rolesNames.length > 0;\r\n }\r\n\r\n state.showExternalId = ctrl.showSecondaryId && ctrl.user.externalId && state.fullAccess;\r\n }\r\n\r\n ctrl.options.avatarOptions.showStatus = !$scope.showDetailedStatus && state.fullAccess;\r\n\r\n state.showEmploymentIds = ctrl.showSecondaryId\r\n && state.fullAccess\r\n && ctrl.user.employments\r\n && ctrl.user.employments.filter(function (e) {\r\n return e.employmentId;\r\n }).length > 0;\r\n\r\n state.showSecondRow = !ctrl.avatarOnly && (state.showRoles || state.showEmploymentIds || state.showExternalId);\r\n\r\n $scope.smallerText = ctrl.options.avatarOptions.size < 28;\r\n }\r\n\r\n if (changes.user || changes.date || changes.options) {\r\n state.showIdCell = state.showSecondRow || (hasValue(ctrl.user) && hasValue(ctrl.user.fullName)) || hasValue(ctrl.date);\r\n\r\n if (state.showIdCell) {\r\n state.activeGridCssClasses = angular.copy(state.gridCssClasses);\r\n } else {\r\n state.activeGridCssClasses = [];\r\n }\r\n }\r\n\r\n refreshBindings();\r\n\r\n if (changes.avatarOnly && ctrl.avatarOnly === undefined) {\r\n ctrl.avatarOnly = false;\r\n }\r\n\r\n if (changes.highlightText && ctrl.highlightText === undefined) {\r\n ctrl.highlightText = null;\r\n }\r\n }\r\n\r\n function refreshBindings() {\r\n $scope.bindingRefreshTrigger = new Date().getTime();\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userId';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<',\r\n hideId: '<',\r\n revealFullId: '<',\r\n highlightText: '<',\r\n showStatus: '<',\r\n fullAccess: '<',\r\n },\r\n transclude: {\r\n status: '?userIdStatus',\r\n },\r\n templateUrl: '/client/common/components/users/user-id.component.html',\r\n controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n\r\n var ctrl = this;\r\n\r\n $scope.statusSlotFilled = $transclude.isSlotFilled('status');\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.user && ctrl.user) {\r\n if (ctrl.user.userType === undefined) {\r\n ctrl.user.userType = null;\r\n }\r\n }\r\n\r\n if (changes.hideId && ctrl.hideId === undefined) {\r\n ctrl.hideId = false;\r\n }\r\n\r\n if (changes.revealFullId && ctrl.revealFullId === undefined) {\r\n ctrl.revealFullId = false;\r\n }\r\n\r\n if (changes.highlightText && ctrl.highlightText === undefined) {\r\n ctrl.highlightText = null;\r\n }\r\n\r\n if (changes.showStatus && ctrl.showStatus === undefined) {\r\n ctrl.showStatus = false;\r\n }\r\n\r\n if (changes.fullAccess && ctrl.fullAccess === undefined) {\r\n ctrl.fullAccess = false;\r\n }\r\n }\r\n\r\n function refreshBindings() {\r\n $scope.bindingRefreshTrigger = new Date().getTime();\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userStatus';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<'\r\n },\r\n templateUrl: '/client/common/components/users/user-status.component.html',\r\n link: function (scope, element, attr) {\r\n\r\n\r\n }\r\n });\r\n})();","(function () {\r\n\t'use strict';\r\n\r\n\tvar controllerId = 'featureUnavailableCtrl';\r\n\tangular.module('app').controller(controllerId, [\r\n\t\t'$scope', 'currentUserService',\r\n\t\tfunction ($scope, currentUserService) {\r\n\r\n\t\t\t$scope.redirectToStartView = function () {\r\n\t\t\t\tcurrentUserService.redirectUserToStartView();\r\n }\r\n\t\t}\r\n\t]);\r\n})();","(function () {\r\n\t'use strict';\r\n\r\n\tvar controllerId = 'notFoundCtrl';\r\n\tangular.module('app').controller(controllerId, [\r\n\t\t'$scope', '$window',\r\n\t\tfunction ($scope, $window) {\r\n\r\n\t\t\t$scope.back = function () {\r\n\t\t\t\t$window.history.back();\r\n }\r\n\t\t}\r\n\t]);\r\n})();","(function () {\r\n\t'use strict';\r\n\r\n\tvar controllerId = 'unauthorizedCtrl';\r\n\tangular.module('app').controller(controllerId, [\r\n\t\t'$scope', 'currentUserService',\r\n\t\tfunction ($scope, currentUserService) {\r\n\r\n\t\t\t$scope.redirectToStartView = function () {\r\n\t\t\t\tcurrentUserService.redirectUserToStartView();\r\n }\r\n\t\t}\r\n\t]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'closeButton';\r\n\r\n app.directive(directiveId, ['directiveService', function (directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n busy: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/buttons/close-button.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ($scope, element, attrs) {\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'editCopyDeleteButtons';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n model: '=',\r\n id: '@',\r\n optionsParam: '=?options'\r\n },\r\n templateUrl: '/client/common/directives/buttons/edit-copy-delete-buttons.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ($scope, element, attrs) {\r\n var log = logger.getLogger(directiveId);\r\n\r\n var defaultOptions = {\r\n edit: {\r\n text: 'Redigera',\r\n cssClasses: undefined,\r\n tooltip: true,\r\n disabled: false,\r\n hide: false,\r\n order: 0\r\n },\r\n copy: {\r\n text: 'Kopiera',\r\n cssClasses: undefined,\r\n tooltip: true,\r\n disabled: false,\r\n hide: false,\r\n order: 1\r\n },\r\n delete: {\r\n text: 'Ta bort',\r\n cssClasses: undefined,\r\n tooltip: true,\r\n disabled: false,\r\n hide: false,\r\n order: 2\r\n }\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.editItem = function (e, item) {\r\n e.stopPropagation();\r\n log.debug('Editing item: ', item);\r\n\r\n $scope.$emit(($scope.id ? $scope.id : directiveId) + '.editItem', item);\r\n };\r\n\r\n $scope.copyItem = function (e, item) {\r\n e.stopPropagation();\r\n\r\n $scope.$emit(($scope.id ? $scope.id : directiveId) + '.copyItem', item);\r\n }\r\n\r\n $scope.removeItem = function (e, item) {\r\n e.stopPropagation();\r\n\r\n $scope.$emit(($scope.id ? $scope.id : directiveId) + '.removeItem', item);\r\n };\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'focusModeButton';\r\n\r\n app.directive(directiveId, [\r\n '$rootScope',\r\n function ($rootScope) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n \r\n },\r\n templateUrl: '/client/common/directives/buttons/focus-mode-button.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function (scope, element, attr) {\r\n\r\n scope.$on(\"$destroy\", function () {\r\n $rootScope.fullscreenMode = false;\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'linkButton';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n url: '@',\r\n text: '@',\r\n icon: '@',\r\n colorParam: '@color',\r\n borderParam: '=border',\r\n target: '@',\r\n tooltipContent: '@',\r\n disabled: '=ngDisabled'\r\n },\r\n templateUrl: '/client/common/directives/buttons/link-button.directive.html',\r\n link: function ($scope, element, attrs) {\r\n\r\n $scope.containerCssClass = '';\r\n $scope.btnCssClass = '';\r\n $scope.$watch('colorParam', function () {\r\n if (!angular.isUndefined($scope.colorParam)) {\r\n $scope.btnCssClass += ' btn-' + $scope.colorParam;\r\n $scope.containerCssClass += ' btn-' + $scope.colorParam;\r\n }\r\n })\r\n\r\n $scope.$watch('borderParam', function () {\r\n \r\n if (!angular.isUndefined($scope.borderParam) && $scope.borderParam == true) {\r\n $scope.containerCssClass += ' btn-border';\r\n }\r\n })\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'refreshButton';\r\n\r\n app.directive(directiveId, ['directiveService', function (directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n busy: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/buttons/refresh-button.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ($scope, element, attrs) {\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'toggleButton';\r\n\r\n app.directive(directiveId, ['directiveService',\r\n function (directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n state: '=',\r\n icon: '@',\r\n text: '@',\r\n trueIcon: '@',\r\n falseIcon: '@',\r\n layeredTrueIcon: '@',\r\n layeredFalseIcon: '@',\r\n trueText: '@',\r\n falseText: '@',\r\n trueTooltip: '@',\r\n falseTooltip: '@',\r\n disableTooltip: '=',\r\n iconText: '@',\r\n iconTextCssClass: '@',\r\n iconTextTransform: '@',\r\n anchor: '=',\r\n iconBtn: '=',\r\n onToggled: '=',\r\n externalToggle: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/buttons/toggle-button.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ($scope, element, attrs) {\r\n\r\n element.on('click', function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n\r\n $scope.toggleState = function () {\r\n if ($scope.externalToggle) return;\r\n\r\n $scope.state = !$scope.state;\r\n\r\n if ($scope.onToggled) {\r\n $scope.onToggled($scope.state);\r\n }\r\n\r\n $scope.$emit(directiveId + '.stateChanged', $scope.state);\r\n }\r\n\r\n var defaultOptions = {\r\n tooltipPlacement: 'auto'\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'explanationIcon';\r\n\r\n app.directive(directiveId, [\r\n 'logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n explanation: '=',\r\n explanationText: '@',\r\n iconParam: '@icon'\r\n },\r\n templateUrl: '/client/common/directives/content/explanation-icon.directive.html',\r\n controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n\r\n $scope.transcluding = false;\r\n\r\n $transclude(function (clone) {\r\n if (clone.length) {\r\n $scope.transcluding = true;\r\n }\r\n });\r\n }],\r\n link: function ($scope, element, attr) {\r\n\r\n $scope.$watch('icon', function () {\r\n if (angular.isUndefined($scope.iconParam)) {\r\n $scope.icon = 'far fa-info-circle';\r\n } else {\r\n $scope.icon = $scope.iconParam;\r\n }\r\n })\r\n }\r\n };\r\n }\r\n ]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'richTextBlock';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n content: '='\r\n },\r\n templateUrl: '/client/common/directives/content/rich-text-block.directive.html'\r\n };\r\n }]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'customerAvatar';\r\n\r\n app.directive(directiveId, ['directiveService', 'fullNameInitialsFilter', function (directiveService, fullNameInitialsFilter) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n customer: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/customers/customer-avatar.directive.html',\r\n link: function ($scope, element, attrs) {\r\n\r\n var defaultOptions = {\r\n showStatus: true,\r\n size: 32\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.$watchCollection('[customer.logoImageUrl, customer.name]', function (values) {\r\n var logoImageUrl = values[0];\r\n var customerName = values[1];\r\n\r\n if (!logoImageUrl) {\r\n $scope.initials = fullNameInitialsFilter(customerName);\r\n }\r\n });\r\n\r\n $scope.$watchCollection('[options.size]', function (values) {\r\n var size = values[0];\r\n if (size) {\r\n $scope.statusIconOffsetFactor = Math.round(size / 3) + 2;\r\n $scope.fontSize = 2 * Math.round((size / 3 + 2) / 2);\r\n\r\n if ($scope.initials && $scope.initials.length > 2) {\r\n $scope.fontSize -= 2 * Math.round((size / 16) / 2);\r\n }\r\n\r\n if (size <= 24) {\r\n $scope.statusIconShrinkFactor = 4;\r\n\r\n } else {\r\n $scope.statusIconShrinkFactor = 2;\r\n }\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'modalDialog';\r\n\r\n app.directive(directiveId, [\r\n 'logger', '$rootScope', 'modalDialogService',\r\n function (logger, $rootScope, modalDialogService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n cssClasses: '=',\r\n titleText: '@',\r\n onOk: '=',\r\n onCancel: '='\r\n },\r\n templateUrl:\r\n '/client/common/directives/dialogs/modal-dialog.directive.html',\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attrs) {\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.close = function () {\r\n log.debug('close');\r\n modalDialogService.closeModal(attrs.id);\r\n $rootScope.$broadcast('modalDialog.close');\r\n }\r\n\r\n $scope.$on(\"$destroy\", function () {\r\n $scope.close();\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'activeFilterWarning';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filters: '=',\r\n onResetFilters: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/filters/active-filter-warning.directive.html',\r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n var defaultOptions = {\r\n enableReset: true,\r\n headerText: 'Anpassade filterinställningar'\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.resetFilters = function (e) {\r\n e.preventDefault()\r\n\r\n $scope.$emit(directiveId + '.resetFilters');\r\n\r\n if ($scope.onResetFilters) $scope.onResetFilters();\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'booleanFilter';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n ngDisabled: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/boolean-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n log.debug($scope.filter);\r\n\r\n $scope.filterChanged = function (filter) {\r\n log.debug('filter changed', filter);\r\n\r\n if ($scope.onChange) $scope.onChange(filter);\r\n };\r\n\r\n $scope.resetFilter = function (filter) {\r\n filter.value = undefined;\r\n\r\n $scope.filterChanged(filter);\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'legacyDateTimeFilter';\r\n\r\n app.directive(directiveId, ['logger', '$timeout',\r\n function (logger, $timeout) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n enablePlaceholder: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/date-time-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.dateModel = {\r\n minDate: undefined,\r\n maxDate: undefined\r\n };\r\n\r\n function updateFilterValue(value) {\r\n if ($scope.filter.dateTimeType === 0) {\r\n $scope.filter.value = moment(value).local().startOf('day').utc().toJSON();\r\n } else if ($scope.filter.dateTimeType === 1) {\r\n $scope.filter.value = moment(value).local().startOf('day').add(1, 'days').utc().toJSON();\r\n }\r\n\r\n log.debug('Filter value:', $scope.filter.value);\r\n }\r\n\r\n //$scope.$on('dateInputField.dateInitialized', function (e, newVal, oldVal) {\r\n // log.debug('Date initialized:', moment.isMoment(newVal) ? newVal.toISOString(true) : newVal);\r\n\r\n // updateFilterValue(newVal);\r\n\r\n // if (!$scope.filter.defaultValue) {\r\n // $scope.filterChanged($scope.filter);\r\n // }\r\n //});\r\n\r\n //$scope.$on('dateInputField.dateSelected', function (e, newVal, oldVal) {\r\n // log.debug('Date selected:', moment.isMoment(newVal) ? newVal.toISOString(true) : newVal);\r\n\r\n // updateFilterValue(newVal);\r\n\r\n // $scope.filterChanged($scope.filter);\r\n //});\r\n\r\n $scope.$watch('filter', function () {\r\n if ($scope.filter && $scope.filter.value) {\r\n if ($scope.filter.dateTimeType === 1) {\r\n $scope.dateModel.date = moment($scope.filter.value).local().startOf('day').add(-1, 'days');\r\n } else {\r\n $scope.dateModel.date = moment($scope.filter.value);\r\n }\r\n }\r\n });\r\n\r\n $scope.$watch('filter.value', function (newVal) {\r\n if (!newVal) {\r\n $scope.dateModel.date = undefined;\r\n }\r\n });\r\n\r\n $scope.$watchCollection('[filter.linkedFilter, filter.linkedFilter.value]', function (newVal) {\r\n var linkedFilter = newVal[0];\r\n \r\n if (linkedFilter && linkedFilter.type == 4) {\r\n switch ($scope.filter.dateTimeType) {\r\n case 0: // from\r\n $scope.dateModel.maxDate = linkedFilter.value ? moment(linkedFilter.value).local().startOf('day').add(-1, 'days') : undefined;\r\n break;\r\n case 1: // to\r\n $scope.dateModel.minDate = linkedFilter.value ? moment(linkedFilter.value) : undefined;\r\n break;\r\n }\r\n }\r\n });\r\n\r\n $scope.onPropertyChanged = function (propName, value) {\r\n $scope.dateModel[propName] = value;\r\n\r\n updateFilterValue(value);\r\n\r\n $scope.filterChanged($scope.filter);\r\n }\r\n\r\n $scope.filterChanged = function (filter) {\r\n log.debug('filter changed');\r\n\r\n if ($scope.onChange) $scope.onChange(filter);\r\n };\r\n\r\n $scope.resetFilter = function (filter) {\r\n $scope.dateModel.date = undefined;\r\n filter.value = undefined;\r\n\r\n $scope.filterChanged(filter);\r\n }\r\n\r\n $scope.$on('inputFieldResetButton.reset', function (e) {\r\n e.stopPropagation();\r\n $scope.resetFilter($scope.filter);\r\n })\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'dropdownFilter';\r\n\r\n app.directive(directiveId, ['logger', '$timeout',\r\n function (logger, $timeout) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n enablePlaceholder: '=',\r\n ngDisabled: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/dropdown-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.componentType = undefined;\r\n\r\n $scope.$watch('filter', function (filter) {\r\n if (filter) {\r\n var genericArgumentsStartIndex = filter.optionModelTypeName.indexOf('<');\r\n var typeName = genericArgumentsStartIndex > 0 ? filter.optionModelTypeName.substring(0, genericArgumentsStartIndex) : filter.optionModelTypeName;\r\n switch (typeName) {\r\n case 'String':\r\n $scope.componentType = 'default';\r\n break;\r\n case 'Boolean':\r\n $scope.componentType = 'boolean';\r\n break;\r\n case 'IBasicPersonReadModel':\r\n case 'IPersonReadModel':\r\n $scope.componentType = 'userSelector';\r\n break;\r\n case 'ICompanyReadModel':\r\n $scope.componentType = 'companySelector';\r\n break;\r\n case 'EnumItem':\r\n $scope.componentType = 'enumItemSelector';\r\n break;\r\n case 'CaseTypeReadModel':\r\n $scope.componentType = 'caseTypeSelector';\r\n break;\r\n default:\r\n $scope.componentType = undefined;\r\n throw new Error('Unknown option model type: ' + filter.optionModelTypeName)\r\n }\r\n }\r\n });\r\n\r\n $scope.filterChanged = function (filter) {\r\n log.debug('filter changed', filter);\r\n\r\n if ($scope.onChange) $scope.onChange(filter);\r\n };\r\n\r\n $scope.onItemSelected = function (selectedItem) {\r\n if (selectedItem) {\r\n $scope.filter.value = selectedItem.id;\r\n } else {\r\n $scope.filter.value = undefined;\r\n }\r\n\r\n $scope.onChange($scope.filter);\r\n }\r\n\r\n $scope.clear = function ($event) {\r\n $event.stopPropagation();\r\n $scope.filter.value = undefined;\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'filterBar';\r\n\r\n app.directive(directiveId, ['logger', '$rootScope', '$timeout', 'locationService', 'localSettingsService', 'hasItemsFilter',\r\n function (logger, $rootScope, $timeout, locationService, localSettingsService, hasItemsFilter) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: {\r\n toolbar1: '?filterBarToolbar1',\r\n toolbar2: '?filterBarToolbar2'\r\n },\r\n scope: {\r\n filters: '=',\r\n onFiltersChanged: '=',\r\n onLoadData: '=',\r\n onInit: '=',\r\n busy: '=',\r\n refresh: '=',\r\n control: '=',\r\n filterIdPrefix: '@',\r\n hideToolbar1: '=',\r\n hideToolbar2: '=',\r\n dropdownFilterSet: '=',\r\n disableStoredFilters: '=',\r\n },\r\n templateUrl: '/client/common/directives/filters/filter-bar.directive.html',\r\n controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n\r\n $transclude(function (clone, newScope) {\r\n $scope.defaultSlotFilled = isTranscludeSlotFilled(clone);\r\n newScope.$destroy();\r\n newScope = null;\r\n });\r\n $scope.toolbar1SlotFilled = $transclude.isSlotFilled('toolbar1');\r\n $scope.toolbar2SlotFilled = $transclude.isSlotFilled('toolbar2');\r\n\r\n $scope.transclusionSlotsFilled = $scope.defaultSlotFilled || $scope.toolbar1SlotFilled || $scope.toolbar2SlotFilled;\r\n\r\n var ctrl = this;\r\n\r\n var filterCtrls = {};\r\n\r\n ctrl.registerFilterCtrl = function (filterId, filterCtrl) {\r\n filterCtrls[filterId] = filterCtrl;\r\n }\r\n\r\n ctrl.setFilterValue = function (filterId, value) {\r\n var filterCtrl = filterCtrls[filterId];\r\n if (filterCtrl) {\r\n filterCtrl.setValue(value);\r\n }\r\n }\r\n\r\n ctrl.setFilterIdsExcludedFromActiveFiltersWithNonDefaultValue = function (filterIds) {\r\n ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue = filterIds;\r\n }\r\n }],\r\n link: function ($scope, element, attrs, controller) {\r\n\r\n var ctrl = controller;\r\n\r\n ctrl.maxColumns = 4;\r\n\r\n $scope.$ctrl = ctrl;\r\n\r\n var log = logger.getLogger('filterBar');\r\n var filterValuesInitialized = false;\r\n\r\n var showFiltersStorageKey = undefined;\r\n\r\n $scope.mandatoryFilterFormCtrl = undefined;\r\n $scope.primaryFilterFormCtrl = undefined;\r\n $scope.secondaryFilterFormCtrl = undefined;\r\n $scope.dropdownFilterFormCtrl = undefined;\r\n\r\n if ($scope.onInit) $scope.onInit(ctrl);\r\n\r\n $scope.mandatoryFilterFormInit = function (formCtrl) {\r\n $scope.mandatoryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.primaryFilterFormInit = function (formCtrl) {\r\n $scope.primaryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.secondaryFilterFormInit = function (formCtrl) {\r\n $scope.secondaryFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.dropdownFilterFormInit = function (formCtrl) {\r\n $scope.dropdownFilterFormCtrl = formCtrl;\r\n\r\n initializeFilterValues();\r\n }\r\n\r\n $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n handleCurrentBreakpoint(currentBreakpoint);\r\n });\r\n\r\n $scope.$watch('control', function () {\r\n if ($scope.control) {\r\n $scope.control.resetFilters = $scope.resetFilters;\r\n }\r\n });\r\n\r\n $scope.$on(directiveId + '.resetFilters', function (e) {\r\n $scope.resetFilters();\r\n });\r\n\r\n $scope.state = {\r\n collapsableFilterSectionExpanded: false,\r\n filterDropdown: {}\r\n };\r\n\r\n ctrl.activeFilters = [];\r\n $scope.activeFilterCount = 0;\r\n $scope.storedFilters = undefined;\r\n $scope.filterStorageKey = undefined;\r\n $scope.filterIsActive = false;\r\n $scope.renderMandatoryFiltersInline = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n $scope.enableFilterDropdown = false;\r\n $scope.buttonFilters = undefined;\r\n\r\n var storedFilterSettingsInitialized = false;\r\n\r\n function handleCurrentBreakpoint(currentBreakpoint) {\r\n if (currentBreakpoint < 5 /*&& !$scope.allFiltersArePrimary*/) {\r\n $scope.dropdownFilters = $scope.visibleFilters.filter(function (f) { return f.mandatory === false; });\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n } else {\r\n switch ($scope.dropdownFilterSet) {\r\n case 'secondary':\r\n $scope.dropdownFilters = $scope.secondaryFilters;\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = true;\r\n $scope.renderSecondaryFiltersInline = false;\r\n break;\r\n case 'all':\r\n $scope.dropdownFilters = $scope.visibleFilters;\r\n $scope.enableFilterDropdown = true;\r\n $scope.renderPrimaryFiltersInline = false;\r\n $scope.renderSecondaryFiltersInline = false;\r\n break;\r\n default:\r\n $scope.dropdownFilters = undefined;\r\n $scope.enableFilterDropdown = false;\r\n $scope.renderPrimaryFiltersInline = true;\r\n $scope.renderSecondaryFiltersInline = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n function initializeStoredFilterSettings() {\r\n if (!storedFilterSettingsInitialized) {\r\n showFiltersStorageKey = 'ShowFilters:' + ($scope.filterIdPrefix ? '(' + $scope.filterIdPrefix + ')' : '') + locationService.getPath();\r\n $scope.filterStorageKey = 'Filters:' + ($scope.filterIdPrefix ? '(' + $scope.filterIdPrefix + ')' : '') + locationService.getPath();\r\n\r\n $scope.state.collapsableFilterSectionExpanded = localSettingsService.getBool(showFiltersStorageKey, false)\r\n }\r\n }\r\n\r\n $scope.$watch('filters', function (filters, previousFilters) {\r\n initializeStoredFilterSettings();\r\n\r\n if (filters) {\r\n\r\n $scope.hasFilters = $scope.filters && $scope.filters.length > 0;\r\n\r\n $scope.visibleFilters = $scope.filters.filter(function (f) {\r\n return f.visible === true && (f.type !== 2 || !f.hideIfOnlyOneOption || (f.options && f.options.length > 1));\r\n });\r\n\r\n $scope.hasVisibleFilters = $scope.visibleFilters.length > 0;\r\n\r\n $scope.mandatoryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.mandatory === true;\r\n });\r\n\r\n $scope.hasMandatoryFilters = $scope.mandatoryFilters.length > 0;\r\n\r\n $scope.mandatoryNonButtonFilters = $scope.mandatoryFilters.filter(function (f) {\r\n return !f.showAsButtons === true\r\n });\r\n\r\n $scope.hasMandatoryNonButtonFilters = $scope.mandatoryNonButtonFilters.length > 0;\r\n\r\n $scope.primaryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.primary === true && f.mandatory !== true && !f.showAsButtons === true;\r\n });\r\n\r\n $scope.hasPrimaryFilters = $scope.primaryFilters.length > 0;\r\n\r\n $scope.secondaryFilters = $scope.visibleFilters.filter(function (f) {\r\n return f.primary === false && f.mandatory !== true && !f.showAsButtons === true;\r\n });\r\n\r\n $scope.buttonFilters = $scope.filters.filter(function (f) {\r\n return f.showAsButtons === true;\r\n });\r\n\r\n $scope.buttonFilters.forEach(function (f) {\r\n if (f.showAllFilterOptions === undefined) {\r\n f.showAllFilterOptions = true;\r\n }\r\n });\r\n\r\n $scope.hasSecondaryFilters = $scope.secondaryFilters.length > 0;\r\n\r\n $scope.allFiltersArePrimary = $scope.filters.every(function (f) { return f.primary === true; })\r\n\r\n handleCurrentBreakpoint($rootScope.breakpoints.current);\r\n\r\n initializeFilterValues();\r\n }\r\n else {\r\n $scope.hasVisibleFilters = false;\r\n $scope.visibleFilters = [];\r\n }\r\n });\r\n\r\n $scope.$on('filterBar.command.handleFilterChange', function () {\r\n $scope.filtersChanged();\r\n });\r\n\r\n $scope.filterChanged = function (filter) {\r\n $timeout(function () {\r\n log.debug('Filter changed', filter);\r\n\r\n var updatedFilterIndex = 0;\r\n $scope.filters.find(function (f, index) { updatedFilterIndex = index; return f.id == filter.id; })\r\n\r\n $scope.filters[updatedFilterIndex] = filter;\r\n\r\n setQueryStringParam(filter);\r\n\r\n $scope.filtersChanged(filter);\r\n })\r\n };\r\n\r\n $scope.filtersChanged = function (changedFilter) {\r\n\r\n if (filterFormIsValid()) {\r\n log.debug('Filters changed');\r\n log.debug('Available filters:', $scope.filters)\r\n\r\n var filterParams = {};\r\n if ($scope.filters) {\r\n\r\n _.forEach($scope.filters, function (f) {\r\n if (f.linkedFilterId) {\r\n f.linkedFilter = _.find($scope.filters, function (lf) { return lf.id === f.linkedFilterId; });\r\n }\r\n })\r\n\r\n ctrl.activeFilters = $scope.filters.filter(function (filter) { return isActiveFilter(filter); });\r\n ctrl.activeFiltersWithNonDefaultValues = ctrl.activeFilters.filter(function (f) {\r\n return (!ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue || !ctrl.filterIdsExcludedFromActiveFiltersWithNonDefaultValue[f.id]) && (f.primary && filterHasNonDefaultValue(f) || !f.primary && filterHasValue(f));\r\n });\r\n ctrl.activeSecondaryFiltersWithNonDefaultValues = ctrl.activeFiltersWithNonDefaultValues.filter(function (f) { return !f.primary && !f.mandatory; });\r\n\r\n $scope.activeFilterCount = ctrl.activeFiltersWithNonDefaultValues.length;\r\n _.forEach($scope.filters, function (f) {\r\n f.selectedOption = _.find(f.options, function (o) {\r\n if (angular.isNumber(f.value)) {\r\n return o.id === f.value;\r\n }\r\n return o.id === f.value;\r\n });\r\n })\r\n\r\n $scope.filterIsActive = ctrl.activeFilters && ctrl.activeFilters.length > 0;\r\n\r\n filterParams = getFilteringRequestParams(ctrl.activeFilters);\r\n }\r\n \r\n\r\n log.debug('Active filters:', ctrl.activeFilters)\r\n\r\n var currentFiltersState = {\r\n activeFilters: ctrl.activeFilters,\r\n activeFiltersWithNonDefaultValues: ctrl.activeFiltersWithNonDefaultValues,\r\n filterIsActive: $scope.filterIsActive,\r\n filterParams: filterParams,\r\n activeFilterObj: getFilterObject(ctrl.activeFilters),\r\n changedFilter: changedFilter\r\n };\r\n\r\n if ($scope.onFiltersChanged) {\r\n $scope.onFiltersChanged(\r\n currentFiltersState.activeFilters,\r\n currentFiltersState.filterIsActive,\r\n currentFiltersState.filterParams,\r\n currentFiltersState.activeFilterObj,\r\n currentFiltersState.changedFilter\r\n );\r\n }\r\n\r\n $scope.$emit(directiveId + '.filtersChanged', currentFiltersState);\r\n }\r\n };\r\n\r\n $scope.resetFilters = function (e, filterIds) {\r\n\r\n log.debug('Resetting filters');\r\n\r\n if (filterIds) log.debug('Excluded filters:', filterIds);\r\n\r\n if (e) {\r\n e.stopPropagation();\r\n }\r\n \r\n _.forEach(ctrl.activeFilters, function (filter) {\r\n if (filter.visible && (!filterIds || filterIds[filter.id])) {\r\n setFilterValue(filter, undefined);\r\n }\r\n });\r\n\r\n clearQueryStringParams(filterIds);\r\n\r\n setDefaultOptions(filterIds);\r\n\r\n $scope.filtersChanged();\r\n };\r\n\r\n ctrl.resetFilters = $scope.resetFilters;\r\n\r\n $scope.storedFiltersLoaded = function (storedFilters) {\r\n $scope.storedFilters = $scope.disableStoredFilters ? null : storedFilters || null;\r\n\r\n initializeFilterValues();\r\n\r\n log.debug('Stored filters:', $scope.storedFilters);\r\n }\r\n\r\n $scope.filtersStored = function (storedFilters) {\r\n $scope.storedFilters = storedFilters;\r\n\r\n log.debug('Filters stored:', $scope.storedFilters);\r\n }\r\n\r\n $scope.storedFiltersCleared = function () {\r\n $scope.storedFilters = undefined;\r\n clearQueryStringParams();\r\n _.forEach(ctrl.activeFilters, function (filter) {\r\n setFilterValue(filter, undefined);\r\n });\r\n setDefaultOptions();\r\n $scope.filtersChanged();\r\n }\r\n\r\n $scope.loadData = function () {\r\n log.debug('Load data');\r\n\r\n if ($scope.onLoadData) $scope.onLoadData();\r\n };\r\n\r\n $scope.toggleCollapsableFilterSection = function (e) {\r\n e.stopPropagation();\r\n\r\n $scope.state.collapsableFilterSectionExpanded = !$scope.state.collapsableFilterSectionExpanded\r\n\r\n localSettingsService.setValue(showFiltersStorageKey, $scope.state.collapsableFilterSectionExpanded);\r\n }\r\n\r\n function initializeFilterValues() {\r\n $timeout(function () {\r\n if (filterValuesInitialized) {\r\n if (ctrl.activeFilters.length > 0) {\r\n restoreFilterOptions(ctrl.activeFilters);\r\n }\r\n\r\n $scope.filtersChanged();\r\n\r\n } else if ($scope.filters\r\n && $scope.storedFilters !== undefined) {\r\n\r\n setFiltersBasedOnQueryParams();\r\n setDefaultOptions();\r\n\r\n if (filterFormIsValid()) {\r\n filterValuesInitialized = true;\r\n\r\n log.debug('Filters values initialized', $scope.filters);\r\n\r\n if (ctrl.activeFilters.length > 0) {\r\n restoreFilterOptions(ctrl.activeFilters);\r\n }\r\n\r\n $scope.filtersChanged();\r\n }\r\n }\r\n });\r\n }\r\n\r\n function filterFormIsValid() {\r\n return (!($scope.hasMandatoryFilters && $scope.renderMandatoryFiltersInline) || (($scope.mandatoryFilterFormCtrl && $scope.mandatoryFilterFormCtrl.form && $scope.mandatoryFilterFormCtrl.form.$valid)\r\n && $scope.mandatoryFilters.every(f => filterHasValue(f)))) &&\r\n (!($scope.hasPrimaryFilters && $scope.renderPrimaryFiltersInline) || ($scope.primaryFilterFormCtrl && $scope.primaryFilterFormCtrl.form && $scope.primaryFilterFormCtrl.form.$valid)) &&\r\n (!($scope.hasSecondaryFilters && $scope.renderSecondaryFiltersInline) || ($scope.secondaryFilterFormCtrl && $scope.secondaryFilterFormCtrl.form && $scope.secondaryFilterFormCtrl.form.$valid)) &&\r\n (!(hasItemsFilter($scope.dropdownFilters) && $scope.enableFilterDropdown) || ($scope.dropdownFilterFormCtrl && $scope.dropdownFilterFormCtrl.form && $scope.dropdownFilterFormCtrl.form.$valid));\r\n }\r\n\r\n function setFilterValue(filter, value) {\r\n switch (filter.type) {\r\n case 1:\r\n filter.value = value !== undefined && value !== null ? Number(value) : value;\r\n break;\r\n case 2:\r\n switch (filter.valueTypeName) {\r\n case 'Nullable':\r\n filter.value = value !== undefined && value !== null ? Number(value) : value;\r\n break;\r\n case 'Nullable':\r\n filter.value = value !== undefined && value !== null ? value === true || value === 'true' : value;\r\n break;\r\n default:\r\n filter.value = value\r\n break;\r\n }\r\n \r\n break;\r\n case 3:\r\n filter.value = value === true || value === 'true';\r\n break;\r\n default:\r\n filter.value = value;\r\n break;\r\n }\r\n }\r\n\r\n function getFilterDefaultValue(filter) {\r\n switch (filter.type) {\r\n case 3:\r\n return filter.defaultValue === true || filter.defaultValue === 'true'\r\n default:\r\n return filter.defaultValue;\r\n }\r\n }\r\n\r\n function filterHasNonDefaultValue(filter) {\r\n return filter.value !== getFilterDefaultValue(filter);\r\n }\r\n\r\n function isActiveFilter(filter) {\r\n return filterHasValue(filter);\r\n }\r\n\r\n function restoreFilterOptions(previousFilters) {\r\n log.debug('Restoring previous filter settings');\r\n _.forEach(previousFilters, function (previousFilter) {\r\n if (previousFilter.value !== undefined && previousFilter.value !== null) {\r\n var currentFilter = _.find($scope.filters, function (f) { return f.id === previousFilter.id; });\r\n if (currentFilter && (currentFilter.value === undefined || currentFilter.value === null)) {\r\n setFilterValue(currentFilter, previousFilter.value);\r\n }\r\n }\r\n });\r\n }\r\n\r\n function setDefaultOptions(filterIds) {\r\n\r\n log.debug('Setting default options');\r\n if (filterIds) log.debug('Excluded filters:', filterIds);\r\n\r\n _.forEach($scope.filters, function (filter) {\r\n\r\n if (!filterIds || filterIds[filter.id]) {\r\n if (!filterQueryParamHasValue(filter)) {\r\n if (filter.defaultValue !== undefined && filter.defaultValue !== null && filterHasNonDefaultValue(filter)) {\r\n setFilterValue(filter, filter.defaultValue)\r\n\r\n setQueryStringParam(filter);\r\n }\r\n\r\n if ($scope.storedFilters) {\r\n var storedFilter = _.find($scope.storedFilters, function (sf) { return sf.id === filter.id })\r\n if (storedFilter && filter.value !== storedFilter.value) {\r\n setFilterValue(filter, storedFilter.value)\r\n\r\n setQueryStringParam(filter);\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n function setFiltersBasedOnQueryParams() {\r\n log.debug('Setting filters based on query params ');\r\n _.forEach($scope.filters, function (filter) {\r\n var filterQueryParamValue = locationService.getQueryParam(filter.id);\r\n if (isQueryParamValueDefined(filterQueryParamValue)) {\r\n setFilterValue(filter, filterQueryParamValue);\r\n \r\n log.debug('Filter set based on query param:', filter);\r\n }\r\n });\r\n }\r\n\r\n function filterQueryParamHasValue(filter) {\r\n return isQueryParamValueDefined(locationService.getQueryParam(filter.id));\r\n }\r\n\r\n function isQueryParamValueDefined(value) {\r\n return value !== undefined && value !== null && value !== '';\r\n }\r\n\r\n function filterHasValue(filter) {\r\n return filter.value !== undefined && filter.value !== null && filter.value !== '' && !Number.isNaN(filter.value);\r\n }\r\n\r\n function setQueryStringParam(filter) {\r\n if (isActiveFilter(filter) && filterHasNonDefaultValue(filter)) {\r\n locationService.setQueryParam(filter.id, String(filter.value));\r\n } else {\r\n locationService.removeQueryParam(filter.id);\r\n }\r\n }\r\n\r\n function clearQueryStringParams(filterIds) {\r\n if ($scope.filters) {\r\n _.forEach($scope.filters, function (filter) {\r\n if (!filterIds || filterIds[filter.id]) {\r\n locationService.removeQueryParam(filter.id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n function getFilteringRequestParams(filters) {\r\n var filterParams = {};\r\n var filterIndex = 0;\r\n\r\n _.forEach(filters, function (filter) {\r\n if (filterHasValue(filter)) {\r\n filterParams['filters[' + filterIndex + '].Key'] = filter.id;\r\n filterParams['filters[' + filterIndex + '].Value'] = filter.value;\r\n }\r\n filterIndex++;\r\n });\r\n\r\n return filterParams;\r\n }\r\n\r\n function getFilterObject(filters) {\r\n var filterObject = {};\r\n\r\n _.forEach(filters, function (filter) {\r\n if (filterHasValue(filter)) {\r\n filterObject[filter.id] = filter.value;\r\n }\r\n });\r\n\r\n return filterObject;\r\n }\r\n\r\n $scope.setFilterValue = function(filter, value) {\r\n if (filter.value !== value) {\r\n filter.value = value;\r\n\r\n $scope.filterChanged(filter);\r\n }\r\n else {\r\n if (!filter.mandatory) {\r\n filter.value = null;\r\n $scope.filterChanged(filter);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'filterValueList';\r\n\r\n app.directive(directiveId, ['logger', \r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filters: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/filter-value-list.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'integerInputFilter';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n enablePlaceholder: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/integer-input-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.filterChanged = function (value) {\r\n\r\n $scope.filter.value = value;\r\n\r\n if ($scope.onChange) $scope.onChange($scope.filter);\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'textInputFilter';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n enablePlaceholder: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/text-input-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.filterChanged = function (value) {\r\n\r\n $scope.filter.value = value;\r\n\r\n if ($scope.onChange) $scope.onChange($scope.filter);\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'timeIntervalFilter';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n filter: '=',\r\n onChange: '=',\r\n enablePlaceholder: '='\r\n },\r\n templateUrl: '/client/common/directives/filters/time-interval-filter.directive.html',\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.filterChanged = function (filter) {\r\n log.debug('filter changed');\r\n\r\n if ($scope.onChange) $scope.onChange(filter);\r\n };\r\n\r\n $scope.resetFilter = function (filter) {\r\n filter.value = undefined;\r\n\r\n $scope.filterChanged(filter);\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'checkboxInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired'],\r\n scope: {\r\n ngModel: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n ngChange: '&',\r\n label: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/checkbox-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'checkboxInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n\r\n var defaultOptions = {\r\n required: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'checkbox';\r\n\r\n app.directive(directiveId, [\r\n 'logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n model: '=ngModel',\r\n onClicked: '=ngClick',\r\n onChange: '=ngChange',\r\n label: '@'\r\n },\r\n templateUrl:\r\n '/client/common/directives/form/checkbox.directive.html',\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attr) {\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.click = function () {\r\n log.debug('Click');\r\n $scope.$emit(directiveId + '.clicked', attr.id, $scope.model);\r\n if ($scope.onClicked) $scope.onClicked($scope.model);\r\n };\r\n\r\n $scope.change = function () {\r\n log.debug('Change');\r\n $scope.$emit(directiveId + '.changed', attr.id, $scope.model);\r\n if ($scope.onChange) $scope.onChange($scope.model);\r\n };\r\n }\r\n };\r\n }\r\n ]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'customerAvatarEditor';\r\n\r\n app.directive(directiveId, ['$rootScope', '$timeout', 'directiveService', 'CustomerAdminService',\r\n function ($rootScope, $timeout, directiveService, CustomerAdminService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n customer: '=',\r\n enabled: '=?',\r\n optionsParam: '=?options'\r\n },\r\n templateUrl: '/client/common/directives/form/customer-avatar-editor.directive.html',\r\n link: function ($scope, element, attrs) {\r\n var defaultOptions = {\r\n avatarOptions: {\r\n showStatus: true,\r\n size: 128,\r\n containerWidth: 160,\r\n containerHeight: 160\r\n }\r\n };\r\n\r\n $scope.avatarEditorId = 'avatarEditor_' + $scope.$id;\r\n $scope.uploadUrl = undefined;\r\n $scope.requestParams = undefined;\r\n\r\n $scope.fileUploaderOptions = {\r\n dropZoneId: $scope.avatarEditorId,\r\n }\r\n\r\n $scope.$watch('customer', function (customer) {\r\n if (customer) {\r\n $scope.uploadUrl = '/api/admin/customer/' + customer.id + '/logo';\r\n }\r\n })\r\n\r\n $scope.$watch('optionsParam',\r\n function (newValue, oldValue) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', newValue, defaultOptions);\r\n });\r\n\r\n $scope.onUploadComplete = function (data) {\r\n\r\n $scope.customer.logoImageUrl = data.result;\r\n }\r\n\r\n $scope.selectImage = function () {\r\n $timeout(function () {\r\n angular.element('#' + $scope.fileUploaderOptions.uploaderId).trigger(\"click\");\r\n });\r\n };\r\n\r\n $scope.removeImage = function () {\r\n\r\n if (confirm('Vill du verkligen ta bort logotypen för ' + $scope.customer.name + '?')) {\r\n $scope.busy = true;\r\n CustomerAdminService.removeLogo($scope.customer.id).then(function () {\r\n $scope.customer.logoImageUrl = undefined;\r\n $scope.busy = false;\r\n }, function (error) {\r\n $scope.busy = false;\r\n\r\n throw error;\r\n });\r\n }\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'emailInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired'],\r\n scope: {\r\n ngModel: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n label: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/email-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'emailInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n\r\n var defaultOptions = {\r\n required: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.reset = function (value) {\r\n $scope.ngModel = value;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'fileUploader';\r\n\r\n app.directive(directiveId, [\r\n 'logger', 'responseHelper', 'directiveService',\r\n function (logger, responseHelper, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n uploadUrl: '=?',\r\n requestParams: '=?',\r\n label: '@',\r\n onSubmit: '=',\r\n onUploadComplete: '=',\r\n onError: '=',\r\n optionsParam: '=?options'\r\n },\r\n templateUrl:\r\n '/client/common/directives/form/file-uploader.directive.html',\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attrs) {\r\n var log = logger.getLogger(directiveId);\r\n\r\n var defaultOptions = {\r\n dropZoneId: undefined,\r\n uploaderId: 'fileUploader_' + $scope.$id,\r\n uploaderParamName: 'files',\r\n maxNumberOfFiles: 1,\r\n maxFileSize: 1024 * 1024 * 5,\r\n messages: {\r\n acceptFileTypes: 'Det är inte tillåtet att ladda upp denna typ av fil här.',\r\n }\r\n };\r\n\r\n $scope.busy = false;\r\n $scope.uploadOptions = undefined;\r\n\r\n $scope.$watch('optionsParam',\r\n function (newValue, oldValue) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', newValue, defaultOptions);\r\n\r\n $scope.options.messages.maxNumberOfFiles = 'Antalet filer som kan laddas upp är begränsat till ' + $scope.options.maxNumberOfFiles + ' åt gången.';\r\n $scope.options.messages.maxFileSize = 'Filstorleken är begränsad till ' + Math.round($scope.options.maxFileSize / 1024 / 1024) + ' MB.';\r\n\r\n if ($scope.options.minFileSize) {\r\n $scope.options.messages.minFileSize = 'Filen måste vara minst ' + Math.round($scope.options.minFileSize / 1024 / 1024) + ' MB.'\r\n }\r\n\r\n $scope.uploadOptions = {\r\n dropZone: $scope.options.dropZoneId ? $('#' + $scope.options.dropZoneId) : null,\r\n acceptFileTypes: $scope.options.acceptFileTypes ? $scope.options.acceptFileTypes : undefined,\r\n maxFileSize: $scope.options.maxFileSize ? $scope.options.maxFileSize : undefined,\r\n maxNumberOfFiles: $scope.options.maxNumberOfFiles ? $scope.options.maxNumberOfFiles : undefined,\r\n messages: $scope.options.messages ? $scope.options.messages : undefined,\r\n pasteZone: null,\r\n url: $scope.uploadUrl,\r\n dataType: 'json',\r\n autoUpload: true,\r\n add: function (e, data) {\r\n var $this = $(this);\r\n data.process(function () {\r\n return $this.fileupload('process', data);\r\n }).done(function () {\r\n //do success stuff\r\n data.submit();\r\n }).fail(function () {\r\n alert(data.files[0].error);\r\n });\r\n },\r\n submit: function (e, data) {\r\n log.debug(data);\r\n if ($scope.requestParams) {\r\n data.formData = $scope.requestParams;\r\n }\r\n\r\n onSubmit(data);\r\n\r\n $scope.busy = true;\r\n },\r\n done: function (e, data) {\r\n log.debug(data);\r\n uploadComplete(data);\r\n $scope.busy = false;\r\n },\r\n error: function (error) {\r\n var errorMessage = responseHelper.getException(error.responseJSON);\r\n log.error(errorMessage);\r\n $scope.busy = false;\r\n\r\n onError(error);\r\n }\r\n };\r\n\r\n log.debug('Upload options: ', $scope.uploadOptions)\r\n });\r\n\r\n function onSubmit(data) {\r\n if ($scope.onSubmit) $scope.onSubmit(data);\r\n }\r\n\r\n function onError(error) {\r\n if ($scope.onError) $scope.onError(error);\r\n }\r\n\r\n function uploadComplete(data) {\r\n if ($scope.onUploadComplete) $scope.onUploadComplete(data);\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'numberInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired', '?ngPattern'],\r\n scope: {\r\n ngModel: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n ngPattern: '=?',\r\n ngMin: '=?',\r\n ngMax: '=?',\r\n ngStep: '=?',\r\n label: '@',\r\n placeholder: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/number-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'numberInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n\r\n var defaultOptions = {\r\n required: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.reset = function (value) {\r\n $scope.ngModel = value;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'phoneInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired'],\r\n scope: {\r\n ngModel: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n label: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/phone-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'phoneInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n\r\n var defaultOptions = {\r\n required: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.reset = function (value) {\r\n $scope.ngModel = value;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'radioButtonInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired', '?^collapsableFieldset'],\r\n scope: {\r\n ngModel: '=',\r\n selectableOptions: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n ngChange: '&',\r\n label: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/radio-button-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'radioButtonInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n $scope.collapsableFieldsetCtrl = ctrls[3];\r\n\r\n registerWithParentComponents();\r\n\r\n var defaultOptions = {\r\n verticalLayout: false\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.$on('$destroy', function () {\r\n unregisterWithParentComponents();\r\n });\r\n\r\n $scope.$watch(\"formCtrl['\" + $scope.id + \"'].$valid\", function (newValue, oldValue) {\r\n if (newValue !== undefined) {\r\n log.debug('Validity', [$scope.id, newValue]);\r\n updateParentComponents();\r\n }\r\n });\r\n\r\n $scope.changed = function () {\r\n $scope.ngChange()\r\n }\r\n\r\n function registerWithParentComponents() {\r\n if ($scope.collapsableFieldsetCtrl) {\r\n $scope.collapsableFieldsetCtrl.registerFormFieldCtrl($scope.id, $scope);\r\n }\r\n }\r\n\r\n function updateParentComponents() {\r\n if ($scope.collapsableFieldsetCtrl) {\r\n $scope.collapsableFieldsetCtrl.formFieldCtrlUpdated($scope.id);\r\n }\r\n }\r\n\r\n function unregisterWithParentComponents() {\r\n if ($scope.collapsableFieldsetCtrl) {\r\n $scope.collapsableFieldsetCtrl.unregisterFormFieldCtrl($scope.id, $scope);\r\n }\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'readOnlyTextField';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n label: '@',\r\n contentCssClasses: '=?'\r\n },\r\n templateUrl: '/client/common/directives/form/read-only-text-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'standardForm';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/standard-form.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //$scope.$watch('optionsParam',\r\n // function (value) {\r\n // directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n // });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'textInputField';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService',\r\n function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n require: ['^form', 'ngModel', '?ngRequired'],\r\n scope: {\r\n ngModel: '=',\r\n ngRequired: '=',\r\n ngDisabled: '=',\r\n ngReadonly: '=',\r\n label: '@',\r\n placeholder: '@',\r\n requiredMessage: '@',\r\n readOnlyMode: '=?',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/form/text-input-field.directive.html',\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.id = 'textInput_' + $scope.$id;\r\n\r\n $scope.formCtrl = ctrls[0];\r\n $scope.ngModelCtrl = ctrls[1];\r\n\r\n var defaultOptions = {\r\n required: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n\r\n $scope.reset = function (value) {\r\n $scope.ngModel = value;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'userAvatarEditor';\r\n\r\n app.directive(directiveId, ['$rootScope', '$timeout', 'directiveService', 'requestHelper',\r\n function ($rootScope, $timeout, directiveService, requestHelper) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n user: '=',\r\n enabled: '=?',\r\n optionsParam: '=?options'\r\n },\r\n templateUrl: '/client/common/directives/form/user-avatar-editor.directive.html',\r\n link: function ($scope, element, attrs) {\r\n var defaultOptions = {\r\n avatarOptions: {\r\n showStatus: true,\r\n size: 128,\r\n containerWidth: 160,\r\n containerHeight: 160\r\n }\r\n };\r\n\r\n $scope.avatarEditorId = 'avatarEditor_' + $scope.$id;\r\n $scope.apiEndpointUrl = undefined;\r\n\r\n $scope.fileUploaderOptions = {\r\n dropZoneId: $scope.avatarEditorId,\r\n acceptFileTypes: /(\\.|\\/)(gif|jpe?g|png)$/i,\r\n // The maximum allowed file size in bytes:\r\n maxFileSize: 1024 * 1024 * 10, // 10 MB limit,\r\n messages: {\r\n acceptFileTypes: 'Filen måste vara av typen jpg, gif eller png.'\r\n }\r\n }\r\n\r\n $scope.$watch('user', function (user) {\r\n if (user && user.userType !== undefined) {\r\n switch (user.userType) {\r\n case 0:\r\n $scope.apiEndpointUrl = '/api/user/profileimage/staff/' + user.id;\r\n break;\r\n case 1:\r\n $scope.apiEndpointUrl = '/api/user/profileimage/client/' + user.id;\r\n break;\r\n default:\r\n throw new Error('Unknown user type');\r\n }\r\n }\r\n })\r\n\r\n $scope.$watch('optionsParam',\r\n function (newValue, oldValue) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', newValue, defaultOptions);\r\n });\r\n\r\n $scope.onUploadComplete = function (data) {\r\n $scope.user.profileImageUrl = data.result;\r\n updateCurrentUser();\r\n }\r\n\r\n $scope.selectImage = function () {\r\n $timeout(function () {\r\n angular.element('#' + $scope.fileUploaderOptions.uploaderId).trigger(\"click\");\r\n });\r\n };\r\n\r\n $scope.removeImage = function () {\r\n\r\n if (confirm('Vill du verkligen ta bort profilbilden? Åtgärden går inte att ångra.')) {\r\n $scope.busy = true;\r\n requestHelper.remove($scope.apiEndpointUrl).then(function () {\r\n $scope.user.profileImageUrl = null;\r\n updateCurrentUser();\r\n \r\n $scope.busy = false;\r\n }, function (error) {\r\n $scope.busy = false;\r\n\r\n throw error;\r\n });\r\n }\r\n };\r\n\r\n function updateCurrentUser() {\r\n if ($scope.user.id === $rootScope.user.id && $scope.user.userType === $rootScope.user.userType) {\r\n $rootScope.user.profileImageUrl = $scope.user.profileImageUrl;\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'coordinareLogo';\r\n\r\n app.directive(directiveId, function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n \r\n },\r\n templateUrl: '/client/common/directives/gfx/coordinare-logo.directive.html',\r\n link: function (scope, element, attr) {\r\n\r\n \r\n }\r\n };\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'counterIcon';\r\n\r\n app.directive(directiveId, function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n baseIconParam: '@baseIcon',\r\n count: '=',\r\n tooltipContent: '@',\r\n },\r\n templateUrl: '/client/common/directives/indicators/counter-icon.directive.html',\r\n link: function (scope, element, attr) {\r\n\r\n scope.$watch('baseIconParam', function () {\r\n if (angular.isUndefined(scope.baseIconParam)) scope.baseIcon = 'far fa-question-circle';\r\n else scope.baseIcon = scope.baseIconParam;\r\n });\r\n }\r\n };\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'expandCollapseIndicator';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n expand: '='\r\n },\r\n templateUrl: '/client/common/directives/indicators/expand-collapse-indicator.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function (scope, element, attr) {\r\n\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'legacyProgressStep';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n inProgress: '=',\r\n finished: '=',\r\n highlighted: '=',\r\n error: '=',\r\n info: '=',\r\n disabled: '=ngDisabled',\r\n stepIndex: '=',\r\n tooltipContent: '='\r\n },\r\n templateUrl: '/client/common/directives/indicators/progress-step.directive.html'\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'toggleIcon';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n state: '=',\r\n trueIcon: '@',\r\n falseIcon: '@',\r\n trueTooltip: '@',\r\n falseTooltip: '@',\r\n iconText: '@',\r\n iconTextCssClass: '@',\r\n iconTextTransform: '@'\r\n },\r\n templateUrl: '/client/common/directives/indicators/toggle-icon.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n }],\r\n link: function (scope, element, attr) {\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'utilizationBar';\r\n\r\n app.directive(directiveId, [\r\n 'logger', '$rootScope', 'directiveService',\r\n function (logger, $rootScope, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: {\r\n 'currentValue': '?currentValue'\r\n },\r\n scope: {\r\n currentPercentage: '=',\r\n currentValue: '=',\r\n maxValue: '=',\r\n tooltipContent: '@',\r\n tooltipTemplate: '@',\r\n label: '@',\r\n optionsParam: '=options'\r\n },\r\n templateUrl:\r\n '/client/common/directives/indicators/utilization-bar.directive.html',\r\n controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n $scope.currentValueSlotFilled = $transclude.isSlotFilled('currentValue');\r\n }],\r\n link: function ($scope, element, attrs) {\r\n var log = logger.getLogger(directiveId);\r\n\r\n var defaultOptions = {\r\n showText: true\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n });\r\n }\r\n };\r\n }\r\n ]);\r\n})();\r\n","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'dialogColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/dialog-column-layout.directive.html',\r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'fieldColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/field-column-layout.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //$scope.$watch('optionsParam',\r\n // function (value) {\r\n // directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n // });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'fieldGridLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/field-grid-layout.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.cssClasses = {};\r\n\r\n var defaultOptions = {\r\n maxColumns: 3,\r\n printColumns: 3,\r\n allowWideColumns: true,\r\n alignItems: undefined,\r\n twoColumnBreakpoint: 2,\r\n threeColumnBreakpoint: 4,\r\n fourColumnBreakpoint: 6\r\n };\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n\r\n $scope.cssClasses = {};\r\n\r\n $scope.cssClasses['grid-cols-2-bp-' + $scope.options.twoColumnBreakpoint + '-and-up'] = $scope.options.maxColumns > 1;\r\n $scope.cssClasses['grid-cols-3-bp-' + $scope.options.threeColumnBreakpoint + '-and-up'] = $scope.options.maxColumns > 2;\r\n $scope.cssClasses['grid-cols-4-bp-' + $scope.options.fourColumnBreakpoint + '-and-up'] = $scope.options.maxColumns > 3;\r\n $scope.cssClasses['grid-cols-5-bp-6-and-up'] = $scope.options.maxColumns > 4;\r\n $scope.cssClasses['grid-cols-wide'] = $scope.options.allowWideColumns;\r\n $scope.cssClasses['max-grid-cols-' + $scope.options.maxColumns] = true;\r\n $scope.cssClasses['grid-cols-' + $scope.options.printColumns + '-print'] = true;\r\n if ($scope.options.alignItems) {\r\n $scope.cssClasses['align-' + $scope.options.alignItems] = true;\r\n }\r\n });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'fieldRowLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/field-row-layout.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //$scope.$watch('optionsParam',\r\n // function (value) {\r\n // directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n // });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'fieldsetColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/fieldset-column-layout.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pageColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/page-column-layout.directive.html',\r\n //controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n\r\n // $scope.transcluding = false;\r\n\r\n // $transclude(function (clone) {\r\n // if (clone.length) {\r\n // $scope.transcluding = true;\r\n // }\r\n // });\r\n //}],\r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pageSectionColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/page-section-column-layout.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //$scope.$watch('optionsParam',\r\n // function (value) {\r\n // directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n // });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'portlet';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n //optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/layout/portlet.directive.html',\r\n \r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n //var defaultOptions = {\r\n //};\r\n\r\n //$scope.$watch('optionsParam',\r\n // function (value) {\r\n // directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions);\r\n // });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'sideColumnLayout';\r\n\r\n app.directive(directiveId, ['logger', 'directiveService', function (logger, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: {\r\n 'sideColumn': 'sideColumn',\r\n 'mainColumn': 'mainColumn'\r\n },\r\n scope: {\r\n },\r\n templateUrl: '/client/common/directives/layout/side-column-layout.directive.html',\r\n controller: ['$scope', '$transclude', '$element', function ($scope, $transclude, $element) {\r\n $scope.sideColumnFilled = $transclude.isSlotFilled('sideColumn');\r\n $scope.mainColumnFilled = $transclude.isSlotFilled('mainColumn');\r\n }],\r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n \r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'listDataPager';\r\n\r\n app.directive(directiveId, ['locationService', 'logger', 'directiveService', 'localSettingsService',\r\n function (locationService, logger, directiveService, localSettingsService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n pageIndex: '=ngModel',\r\n onPageChanged: '=',\r\n onPageSizeChanged: '=',\r\n pageSizeParam: '=pageSize',\r\n numPageResults: '=',\r\n totalNumResults: '=',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/lists/list-data-pager.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ( $scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n var pageSizeStorageKey = 'PageSize:' + locationService.getPath();\r\n\r\n $scope.pageSizes = [];\r\n $scope.pageIndex = 0;\r\n $scope.totalNumPages = 0;\r\n $scope.initialized = false;\r\n\r\n var defaultOptions = {\r\n pageSizes: [5, 10, 15, 25, 50, 100],\r\n defaultPageSize: 15,\r\n maxPageSize: undefined,\r\n itemsLabelSingular: 'Resultat',\r\n itemsLabelPlural: 'Resultat'\r\n };\r\n\r\n var storedPageSize = undefined;\r\n var validDefaultPageSize = false;\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions, function () {\r\n if ($scope.options.maxPageSize) {\r\n $scope.pageSizes = _.filter($scope.options.pageSizes, function (pageSize) {\r\n return pageSize <= $scope.options.maxPageSize;\r\n })\r\n } else {\r\n $scope.pageSizes = $scope.options.pageSizes;\r\n }\r\n\r\n if (isValidPageSize($scope.options.defaultPageSize)) {\r\n validDefaultPageSize = true\r\n } else {\r\n validDefaultPageSize = false;\r\n throw new Error(\"Default page size is invalid\");\r\n }\r\n\r\n var tempStoredPageSizeTmp = localSettingsService.getInt(pageSizeStorageKey, undefined);\r\n if (isValidPageSize(tempStoredPageSizeTmp)) {\r\n storedPageSize = tempStoredPageSizeTmp;\r\n }\r\n\r\n initializePageSize($scope.pageSizeParam);\r\n });\r\n });\r\n\r\n function initializePageSize(newVal) {\r\n if (angular.isUndefined(newVal)) {\r\n $scope.pageSize = storedPageSize || ($scope.options && $scope.options.defaultPageSize);\r\n\r\n if (!isValidPageSize($scope.pageSize)) $scope.pageSize = $scope.options.pageSizes[0];\r\n\r\n if ($scope.onPageSizeChanged) $scope.onPageSizeChanged($scope.pageSize);\r\n\r\n $scope.$emit(directiveId + '.pageSizeChanged', $scope.pageSize);\r\n }\r\n else {\r\n if (!isValidPageSize(newVal)) throw new Error(\"Page size is invalid\");\r\n\r\n $scope.pageSize = newVal;\r\n }\r\n };\r\n\r\n $scope.$watchCollection('[totalNumResults, pageSize]', function (newVal, oldVal) {\r\n\r\n if (newVal[1]) {\r\n var totalNumResults = newVal[0];\r\n var pageSize = newVal[1];\r\n \r\n log.debug(\"Total results: \" + totalNumResults);\r\n log.debug(\"Page size: \" + pageSize);\r\n\r\n $scope.totalNumPages = totalNumResults ? Math.ceil(totalNumResults / pageSize) : 0;\r\n\r\n log.debug(\"Pages: \" + $scope.totalNumPages);\r\n }\r\n });\r\n\r\n $scope.pages = function () {\r\n return _.range(1, $scope.totalNumPages + 1);\r\n };\r\n\r\n $scope.previousPage = function () {\r\n if ( $scope.pageIndex > 0) {\r\n $scope.pageIndex--;\r\n\r\n pageChanged();\r\n }\r\n };\r\n\r\n $scope.nextPage = function () {\r\n if ( $scope.pageIndex + 1 < $scope.totalNumPages) {\r\n $scope.pageIndex++;\r\n\r\n pageChanged();\r\n }\r\n };\r\n\r\n $scope.pageSelected = function () {\r\n pageChanged();\r\n };\r\n\r\n $scope.pageSizeSelected = function () {\r\n log.debug(\"Page size \" + $scope.pageSize);\r\n\r\n localStorage.setItem(pageSizeStorageKey, $scope.pageSize);\r\n\r\n if ( $scope.onPageSizeChanged) $scope.onPageSizeChanged( $scope.pageSize);\r\n };\r\n\r\n function isValidPageSize(pageSize) {\r\n return pageSize && _.findIndex($scope.pageSizes, function (size) {\r\n return size === pageSize;\r\n }) != -1;\r\n }\r\n\r\n function pageChanged() {\r\n log.debug(\"Page index \" + $scope.pageIndex);\r\n if ($scope.onPageChanged) $scope.onPageChanged($scope.pageIndex);\r\n\r\n $scope.$emit(directiveId + '.pageChanged', $scope.pageIndex);\r\n }\r\n\r\n function initSetting(propName) {\r\n if (angular.isUndefined( $scope.options[propName])) {\r\n $scope.options[propName] = defaultOptions[propName];\r\n }\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'noResults';\r\n\r\n app.directive(directiveId, ['logger', \r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: {\r\n 'toolbar': '?noResultsToolbar'\r\n },\r\n scope: {\r\n filterIsActive: '=',\r\n onUpdate: '=',\r\n noResultsTextParam: '@noResultsText',\r\n noResultsFilteredTextParam: '@noResultsFilteredText'\r\n },\r\n templateUrl: '/client/common/directives/lists/no-results.directive.html',\r\n controller: ['$scope', '$transclude', function ($scope, $transclude) {\r\n $scope.isToolbarSlotFilled = $transclude.isSlotFilled('toolbar');\r\n }],\r\n link: function ($scope) {\r\n\r\n var log = logger.getLogger('noResults');\r\n\r\n var defaultOptions = {\r\n noResultsText: 'Det finns inget data att visa.',\r\n noResultsFilteredText: 'Det finns inget data som matchar aktuellt filter.'\r\n };\r\n\r\n $scope.$watch('noResultsTextParam', function () {\r\n if (angular.isUndefined($scope.noResultsTextParam)) $scope.noResultsText = defaultOptions.noResultsText;\r\n else $scope.noResultsText = $scope.noResultsTextParam;\r\n });\r\n\r\n $scope.$watch('noResultsFilteredTextParam', function () {\r\n if (angular.isUndefined($scope.noResultsFilteredTextParam)) $scope.noResultsFilteredText = defaultOptions.noResultsFilteredText;\r\n else $scope.noResultsFilteredText = $scope.noResultsFilteredTextParam;\r\n });\r\n\r\n $scope.update = function () {\r\n log.debug('Update');\r\n\r\n if ($scope.onUpdate) $scope.onUpdate();\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pagedDataListTableCol';\r\n\r\n app.directive(directiveId, ['$rootScope', '$timeout',\r\n function ($rootScope, $timeout) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n require: ['pagedDataListTableCol', '^pagedDataListTable'],\r\n transclude: true,\r\n scope: {\r\n width: '=',\r\n widths: '=',\r\n minWidth: '=',\r\n fillWidth: '@',\r\n },\r\n\r\n templateUrl: function (tElement) {\r\n return '/client/common/directives/lists/paged-data-list-table-col.directive.html';\r\n },\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var ctrl = ctrls[0];\r\n var pagedDataListTableCtrl = ctrls[1];\r\n var pagedDataListCtrl = pagedDataListTableCtrl ? pagedDataListTableCtrl.pagedDataListCtrl : null;\r\n $scope.cssClasses = {};\r\n $scope.style = undefined;\r\n $scope.columnIndex = undefined;\r\n $scope.column = undefined;\r\n\r\n $scope.$on('pagedDataList.forceVisibility', function (e, columnIndex, force) {\r\n if (columnIndex === $scope.columnIndex) {\r\n ctrl.forceVisibility(force);\r\n }\r\n })\r\n\r\n $scope.$watchCollection('[width, widths, minWidth, fillWidth, forceVisibility]', function (newVal, oldVal) {\r\n var width = newVal[0];\r\n var widths = newVal[1];\r\n var minWidth = newVal[2];\r\n var fillWidth = newVal[3];\r\n var forceVisibility = newVal[4];\r\n\r\n var currentWidth = undefined;\r\n\r\n if (widths) {\r\n Object.keys(widths).forEach(function (key) {\r\n if (!forceVisibility && widths[key] === true) {\r\n currentWidth = key;\r\n }\r\n })\r\n }\r\n\r\n if (currentWidth === undefined) {\r\n currentWidth = width;\r\n }\r\n\r\n $scope.style = minWidth ? { minWidth: currentWidth + 'px' } : { width: currentWidth + 'px' };\r\n\r\n if (fillWidth) {\r\n $scope.style['width'] = '100%';\r\n }\r\n });\r\n\r\n $scope.forceVisibility = false;\r\n\r\n $timeout(function () {\r\n if (pagedDataListCtrl) {\r\n $scope.columnIndex = element.index() + 1;\r\n $scope.column = pagedDataListCtrl.columns[$scope.columnIndex];\r\n $scope.columnId = $scope.column ? ($scope.column.propertyName || $scope.column.id) : undefined;\r\n setupVisibility($scope.forceVisibility);\r\n }\r\n });\r\n\r\n function setupVisibility(forceVisibility) {\r\n if ($scope.column && $scope.column.visibleFromBp) {\r\n $scope.cssClasses['hidden-screen'] = !forceVisibility;\r\n $scope.cssClasses['visible-bp-' + $scope.column.visibleFromBp + '-and-up'] = !forceVisibility;\r\n }\r\n }\r\n\r\n ctrl.forceVisibility = function (force) {\r\n $scope.forceVisibility = force && $scope.column && !$scope.column.forcedVisibilityDisabled;\r\n setupVisibility($scope.forceVisibility);\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pagedDataListTableData';\r\n\r\n app.directive(directiveId, ['$timeout', 'directiveService',\r\n function ($timeout, directiveService) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n require: ['pagedDataListTableData', '^pagedDataListTable'],\r\n transclude: true,\r\n scope: {\r\n cssClassesParam: '=?cssClasses',\r\n overflowEllipsis: '=',\r\n alignRight: '=',\r\n },\r\n templateUrl: function (tElement) {\r\n return '/client/common/directives/lists/paged-data-list-table-data.directive.html';\r\n },\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var ctrl = ctrls[0];\r\n var pagedDataListTableCtrl = ctrls[1];\r\n var pagedDataListCtrl = pagedDataListTableCtrl ? pagedDataListTableCtrl.pagedDataListCtrl : null;\r\n\r\n var cssClasses = {};\r\n\r\n $scope.$watchCollection('[cssClassesParam, alignRight]',\r\n function (values) {\r\n var cssClassesParam = values[0];\r\n var alignRight = values[1];\r\n\r\n directiveService.initializeObjParam($scope, attrs, 'cssClasses', cssClassesParam, cssClasses);\r\n\r\n $scope.cssClasses['align-right'] = alignRight === true;\r\n });\r\n\r\n $scope.forceVisibility = false;\r\n\r\n if (pagedDataListCtrl) {\r\n $timeout(function () {\r\n $scope.columnIndex = element.index() + 1;\r\n $scope.column = pagedDataListCtrl.columns[$scope.columnIndex];\r\n\r\n setupVisibility($scope.forceVisibility);\r\n });\r\n\r\n $scope.$on('pagedDataList.forceVisibility', function (e, columnIndex, force) {\r\n if (columnIndex === $scope.columnIndex) {\r\n ctrl.forceVisibility(force);\r\n }\r\n })\r\n }\r\n\r\n function setupVisibility(forceVisibility) {\r\n if ($scope.column && $scope.column.visibleFromBp) {\r\n $scope.cssClasses['hidden-screen'] = !forceVisibility;\r\n $scope.cssClasses['visible-bp-' + $scope.column.visibleFromBp + '-and-up'] = !forceVisibility;\r\n }\r\n }\r\n\r\n ctrl.forceVisibility = function (force) {\r\n $scope.forceVisibility = force && $scope.column && !$scope.column.forcedVisibilityDisabled;\r\n setupVisibility($scope.forceVisibility);\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pagedDataListTableHeader';\r\n\r\n app.directive(directiveId, ['$rootScope', '$timeout',\r\n function ($rootScope, $timeout) {\r\n return {\r\n restrict: 'A',\r\n replace: true,\r\n require: ['pagedDataListTableHeader', '^pagedDataListTable'],\r\n transclude: {\r\n toolbar: '?pagedDataListTableHeaderToolbar',\r\n },\r\n scope: {\r\n displayName: '@',\r\n propertyName: '@',\r\n id: '@',\r\n visibleFromBp: '@',\r\n contentsVisibleFromBp: '@',\r\n verticalLayout: '=',\r\n minimize: '=',\r\n showToolbar: '=',\r\n alignRight: '=',\r\n },\r\n\r\n templateUrl: function (tElement) {\r\n return '/client/common/directives/lists/paged-data-list-table-header.directive.html';\r\n },\r\n controller: ['$scope', function ($scope) { }],\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var ctrl = ctrls[0];\r\n var pagedDataListTableCtrl = ctrls[1];\r\n $scope.pagedDataListCtrl = pagedDataListTableCtrl ? pagedDataListTableCtrl.pagedDataListCtrl : null;\r\n\r\n $scope.cssClasses = {};\r\n $scope.contentCssClasses = {};\r\n $scope.forceVisibility = false;\r\n\r\n ctrl.forcedVisibilityDisabled = attrs.disableForcedVisability !== undefined;\r\n\r\n $timeout(function () {\r\n $scope.columnIndex = element.index() + 1;\r\n\r\n ctrl.index = $scope.columnIndex;\r\n\r\n ctrl.visibleFromBp = Number($scope.visibleFromBp);\r\n ctrl.displayName = $scope.displayName;\r\n ctrl.sortable = $scope.propertyName !== undefined;\r\n ctrl.propertyName = $scope.propertyName;\r\n ctrl.id = $scope.id;\r\n\r\n $scope.cssClasses['align-right'] = $scope.alignRight === true;\r\n\r\n setupVisibility($rootScope.breakpoints.current, $scope.forceVisibility);\r\n })\r\n\r\n function setupVisibility(currentBreakpoint, forceVisibility) {\r\n setColumnVisibility(currentBreakpoint, forceVisibility)\r\n\r\n if ($scope.visibleFromBp) {\r\n $scope.cssClasses['hidden-screen'] = !forceVisibility;\r\n $scope.cssClasses['visible-bp-' + $scope.visibleFromBp + '-and-up'] = !forceVisibility;\r\n }\r\n\r\n if ($scope.contentsVisibleFromBp) {\r\n $scope.contentCssClasses['hidden-screen'] = !forceVisibility;\r\n $scope.contentCssClasses['visible-bp-' + $scope.contentsVisibleFromBp + '-and-up'] = !forceVisibility;\r\n }\r\n\r\n if ($scope.pagedDataListCtrl) {\r\n if (angular.isUndefined($scope.columnIndex)) {\r\n $scope.pagedDataListCtrl.addColumn($scope.columnIndex, ctrl);\r\n } else {\r\n $scope.pagedDataListCtrl.updateColumn($scope.columnIndex, ctrl);\r\n }\r\n }\r\n }\r\n\r\n function setColumnVisibility(currentBreakpoint, forceVisibility) {\r\n ctrl.visible = forceVisibility || !$scope.visibleFromBp || currentBreakpoint >= $scope.visibleFromBp;\r\n }\r\n\r\n ctrl.forceVisibility = function (force) {\r\n $scope.forceVisibility = force && !ctrl.forcedVisibilityDisabled;\r\n setupVisibility($rootScope.breakpoints.current, $scope.forceVisibility);\r\n };\r\n\r\n $scope.$on('currentbreakpoint.changed', function (e, currentBreakpoint) {\r\n setupVisibility(currentBreakpoint, $scope.forceVisibility);\r\n });\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'pagedDataListTable';\r\n\r\n app.directive(directiveId, function () {\r\n return {\r\n restrict: 'A',\r\n require: ['pagedDataListTable', '?^^pagedDataListTable', '?^pagedDataList'],\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n },\r\n templateUrl: function (tElement) {\r\n return '/client/common/directives/lists/paged-data-list-table.directive.html';\r\n },\r\n controller: ['$scope', function ($scope) {\r\n\r\n \r\n }],\r\n link: function ($scope, element, attrs, ctrls) {\r\n\r\n var ctrl = ctrls[0];\r\n var parentTableCtrl = ctrls[1];\r\n var pagedDataListCtrl = ctrls[2];\r\n\r\n if (pagedDataListCtrl &&\r\n (!parentTableCtrl ||\r\n !parentTableCtrl.pagedDataListCtrl ||\r\n parentTableCtrl.pagedDataListCtrl.id !== pagedDataListCtrl.id)) {\r\n ctrl.pagedDataListCtrl = pagedDataListCtrl;\r\n }\r\n }\r\n };\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'scrollToTop';\r\n\r\n app.directive(directiveId, ['locationService', '$anchorScroll', 'logger',\r\n function (locationService, $anchorScroll, logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n hashParam: '@hash'\r\n },\r\n templateUrl: '/client/common/directives/navigation/scroll-to-top.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function ($scope, element, attr) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n\r\n if (angular.isUndefined($scope.optionsParam)) $scope.hash = 'top';\r\n\r\n $scope.goToTop = function () {\r\n // set the location.hash to the id of\r\n // the element you wish to scroll to.\r\n locationService.setHash($scope.hash);\r\n\r\n // call $anchorScroll()\r\n $anchorScroll();\r\n };\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'decimalTimeSetting';\r\n\r\n app.directive(directiveId, ['logger', '$rootScope', 'localSettingsService',\r\n function (logger, $rootScope, localSettingsService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n },\r\n templateUrl: '/client/common/directives/preferences/decimal-time-setting.directive.html',\r\n link: function ($scope, element, attr) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n $scope.$watch('settings', function () {\r\n if ($scope.settings) {\r\n log.debug('Settings updated', $scope.settings);\r\n localSettingsService.setValue('settings.decimalTime', $scope.settings.decimalTime);\r\n\r\n $rootScope.$broadcast('decimalTimeSetting.updated', $scope.settings);\r\n }\r\n }, true);\r\n\r\n $scope.settings = {\r\n decimalTime: localSettingsService.getBool('settings.decimalTime', true)\r\n };\r\n\r\n log.debug('Initialized', $scope.settings);\r\n\r\n $scope.stopPropagation = function ($event) {\r\n $event.stopPropagation();\r\n }\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'legacyDropdownSelector';\r\n\r\n app.directive(directiveId, ['logger', 'localSettingsService', '$routeParams', 'locationService', 'directiveService',\r\n function (logger, localSettingsService, $routeParams, locationService, directiveService) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n key: '@',\r\n queryParamName: '@',\r\n selectableOptions: '=',\r\n defaultOptionId: '@',\r\n menuDirectionParam: '@menuDirection',\r\n persistSelectedOption: '=',\r\n hideIcon: '=',\r\n small: '=',\r\n currentOptionParam: '=currentOption',\r\n tooltipContent: '@',\r\n optionsParam: '=options'\r\n },\r\n templateUrl: '/client/common/directives/selectors/dropdown-selector.directive.html',\r\n link: function ($scope, element, attrs) {\r\n\r\n var log = logger.getLogger(directiveId);\r\n\r\n var localStorageKey = $scope.key;\r\n var queryParamName = $scope.queryParamName || $scope.key;\r\n var eventPrefix = $scope.key;\r\n\r\n $scope.dropdownOptions = {\r\n closeOnClick: true\r\n };\r\n\r\n var defaultOptions = {\r\n tooltipPlacement: 'top',\r\n hideSelectedOptionText: false\r\n };\r\n\r\n $scope.dropdownInit = function (dropdownCtrl) {\r\n $scope.$dropdown = dropdownCtrl;\r\n }\r\n\r\n $scope.$watchCollection('[tooltipContent, currentOption.name]',\r\n function (value) {\r\n $scope.tooltip = $scope.tooltipContent ? $scope.tooltipContent : $scope.currentOption ? $scope.currentOption.name : undefined;\r\n });\r\n\r\n $scope.$watch('optionsParam',\r\n function (value) {\r\n directiveService.initializeObjParam($scope, attrs, 'options', value, defaultOptions, function () {\r\n _.assign($scope.dropdownOptions, {\r\n trigger: {\r\n styleAsButton: true,\r\n cssClasses: [{ 'btn-sm': $scope.small, 'menu-item': $scope.options.menuItem }],\r\n tooltip: $scope.tooltip,\r\n tooltipPlacement: $scope.options.tooltipPlacement\r\n }\r\n });\r\n });\r\n });\r\n\r\n $scope.optionsParamSet = false;\r\n $scope.$watch('selectableOptions', function (newVal, prevVal) {\r\n $scope.optionsParamSet = true;\r\n initialize();\r\n });\r\n\r\n $scope.currentOptionParamSet = false;\r\n $scope.$watch('currentOptionParam', function () {\r\n if (!angular.isUndefined($scope.currentOptionParam)) {\r\n $scope.currentOption = $scope.currentOptionParam;\r\n }\r\n\r\n $scope.currentOptionParamSet = true;\r\n initialize();\r\n });\r\n\r\n $scope.$watch('menuDirectionParam', function () {\r\n if (angular.isUndefined($scope.menuDirectionParam)) {\r\n $scope.menuDirection = 'left';\r\n }\r\n else {\r\n $scope.menuDirection = $scope.menuDirectionParam\r\n }\r\n });\r\n\r\n function initialize() {\r\n\r\n if ($scope.optionsParamSet && $scope.currentOptionParamSet) {\r\n if (!$scope.currentOption) {\r\n loadOptionFromQueryString();\r\n }\r\n\r\n if (!$scope.currentOption) {\r\n loadStoredOption();\r\n }\r\n\r\n if (!$scope.currentOption && $scope.defaultOptionId) {\r\n $scope.currentOption = getOptionById($scope.defaultOptionId);\r\n }\r\n\r\n if (!$scope.currentOption && $scope.selectableOptions && $scope.selectableOptions.length > 0) {\r\n $scope.currentOption = $scope.selectableOptions[0];\r\n }\r\n\r\n emitEvent('set', $scope.currentOption);\r\n\r\n updateQueryString();\r\n }\r\n }\r\n\r\n $scope.setOption = function (viewType) {\r\n if ($scope.currentOption !== viewType) {\r\n var previousOption = $scope.currentOption;\r\n $scope.currentOption = viewType;\r\n\r\n updateQueryString();\r\n storeCurrentOption();\r\n\r\n emitEvent('changed', $scope.currentOption, previousOption);\r\n }\r\n }\r\n function emitEvent(eventName, arg1, arg2) {\r\n var fullEventName = eventPrefix + '.' + eventName;\r\n log.debug(fullEventName, arg1, arg2);\r\n $scope.$emit(fullEventName, arg1, arg2);\r\n }\r\n\r\n function getOptionById(id) {\r\n return _.find($scope.selectableOptions, function (vt) { return vt.id === id; });\r\n }\r\n\r\n function loadOptionFromQueryString() {\r\n if ($routeParams[queryParamName]) {\r\n $scope.currentOption = getOptionById($routeParams[queryParamName]);\r\n storeCurrentOption();\r\n };\r\n }\r\n\r\n function updateQueryString() {\r\n if ($scope.currentOption) {\r\n locationService.setQueryParam(queryParamName, $scope.currentOption.id);\r\n }\r\n }\r\n\r\n function storeCurrentOption() {\r\n if ($scope.persistSelectedOption && $scope.currentOption) {\r\n localSettingsService.setValue(localStorageKey, $scope.currentOption.id);\r\n }\r\n }\r\n\r\n function loadStoredOption() {\r\n if ($scope.persistSelectedOption) {\r\n var storedOptionId = localSettingsService.getValue(localStorageKey);\r\n if (storedOptionId) $scope.currentOption = getOptionById(storedOptionId);\r\n }\r\n }\r\n\r\n\r\n }\r\n };\r\n }]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'monthSelector';\r\n\r\n app.directive(directiveId, ['logger',\r\n function (logger) {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n month: '=',\r\n onInit: '=',\r\n onChange: '=',\r\n storageKey: '@'\r\n },\r\n templateUrl: '/client/common/directives/selectors/month-selector.directive.html',\r\n link: function (scope, element, attrs, controller) {\r\n\r\n var log = logger.getLogger('monthSelector');\r\n\r\n scope.month = undefined;\r\n\r\n var initialized = false;\r\n\r\n scope.$watch('month', function (newValue, oldValue) {\r\n\r\n if (newValue && scope.storageKey) {\r\n localStorage.setItem(scope.storageKey, newValue.valueOf());\r\n }\r\n\r\n if (newValue && !initialized && scope.onInit) {\r\n log.debug('Date initialized');\r\n scope.onInit(moment(newValue), { year: newValue.year(), month: newValue.month() + 1 });\r\n }\r\n else if (scope.onChange && newValue && (!oldValue || (newValue.year() !== oldValue.year() || newValue.month() !== oldValue.month()))) {\r\n scope.onChange(moment(newValue), { year: newValue.year(), month: newValue.month() + 1 });\r\n }\r\n\r\n if (!initialized) initialized = true;\r\n });\r\n\r\n if (!scope.month) {\r\n if (scope.storageKey) {\r\n var reportingMonth = Number(localStorage.getItem(scope.storageKey));\r\n\r\n if (angular.isNumber(reportingMonth) && reportingMonth > 0) {\r\n scope.month = moment(reportingMonth);\r\n }\r\n }\r\n \r\n if (!scope.month) {\r\n scope.month = moment().startOf('month');\r\n }\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'yearSelector';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n scope: {\r\n year: '=',\r\n onInit: '=',\r\n onChange: '='\r\n },\r\n templateUrl: '/client/common/directives/selectors/year-selector.directive.html',\r\n link: function (scope, element, attrs, controller) {\r\n\r\n var initialized = false;\r\n\r\n scope.$watch('year', function (newValue, oldValue) {\r\n \r\n if (newValue && !initialized && scope.onInit) {\r\n scope.onInit(moment(newValue), { year: newValue.year() });\r\n }\r\n else if (scope.onChange && newValue && (!oldValue || (newValue.year() !== oldValue.year()))) {\r\n scope.onChange(moment(newValue), { year: newValue.year() });\r\n }\r\n\r\n if (!initialized) initialized = true;\r\n });\r\n\r\n if (!scope.year) {\r\n scope.year = moment().startOf('year');\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'listCollapseToggle';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n state: '=',\r\n list: '=',\r\n limitParam: '=limit',\r\n hide: '='\r\n },\r\n templateUrl: '/client/common/directives/table/list-collapse-toggle.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function (scope, element, attr) {\r\n var defaultOptions = {\r\n limit: 3\r\n };\r\n\r\n scope.$watch('limitParam', function () {\r\n if (angular.isUndefined(scope.limitParam)) scope.limit = defaultOptions.limit;\r\n else scope.limit = scope.limitParam;\r\n });\r\n\r\n scope.toggleState = function() {\r\n scope.state = !scope.state;\r\n }\r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'toggleShowAllColumns';\r\n\r\n app.directive(directiveId, [\r\n function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n state: '='\r\n },\r\n templateUrl: '/client/common/directives/table/toggle-show-all-columns.directive.html',\r\n controller: ['$scope', function ($scope) {\r\n\r\n\r\n }],\r\n link: function (scope, element, attr) {\r\n\r\n \r\n }\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var directiveId = 'userContactDetailsMenu';\r\n\r\n app.directive(directiveId, function () {\r\n return {\r\n restrict: 'E',\r\n replace: true,\r\n scope: {\r\n user: '='\r\n },\r\n templateUrl: '/client/common/directives/users/user-contact-details-menu.directive.html',\r\n link: function (scope, element, attr) {\r\n\r\n \r\n }\r\n };\r\n });\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'localSettingsService';\r\n angular.module('app').factory(serviceId, [\r\n 'logger',\r\n function (logger) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n function getBool(key, defaultValue) {\r\n\r\n var value = false;\r\n var localValue\r\n\r\n try {\r\n localValue = localStorage.getItem(key);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n if (localValue) {\r\n value = localValue === 'true';\r\n }\r\n else if (defaultValue !== undefined) value = defaultValue;\r\n\r\n return value;\r\n }\r\n\r\n function getInt(key, defaultValue) {\r\n var int;\r\n try {\r\n int = Number(localStorage.getItem(key));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n if (int > 0) return int;\r\n else if (defaultValue !== undefined) return defaultValue;\r\n\r\n return null;\r\n }\r\n\r\n function getValue(key, defaultValue) {\r\n var val;\r\n try {\r\n val = JSON.parse(localStorage.getItem(key));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n if (!val) return defaultValue;\r\n\r\n return val;\r\n }\r\n\r\n function setValue(key, val) {\r\n try {\r\n localStorage.setItem(key, JSON.stringify(val));\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n function removeValue(key) {\r\n try {\r\n localStorage.removeItem(key);\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n return {\r\n getBool: getBool,\r\n getInt: getInt,\r\n getValue: getValue,\r\n setValue: setValue,\r\n removeValue: removeValue\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'currentUserService';\r\n var app = angular.module('app');\r\n var appApi = undefined;\r\n\r\n app.service(serviceId, [\r\n '$rootScope', '$q', 'locationService', 'appService',\r\n 'legacyClientService', 'requestHelper', 'logger', 'accessService',\r\n function ($rootScope, $q, locationService, appService,\r\n legacyClientService, requestHelper, logger, accessService) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n var baseUrl = 'api/user/current';\r\n var userPromise = null;\r\n\r\n function getUser(/*bool*/ forceUpdate) {\r\n\r\n log.debug('Getting current user');\r\n\r\n if (forceUpdate) {\r\n userPromise = null;\r\n }\r\n\r\n if (userPromise) {\r\n return userPromise.promise;\r\n }\r\n\r\n userPromise = $q.defer();\r\n\r\n if (!$rootScope.appInitialized || forceUpdate) {\r\n requestHelper.get(baseUrl, '').then(function (staff) {\r\n\r\n log.debug('Current user fetched', staff);\r\n\r\n if (staff) {\r\n $rootScope.user = new CurrentUser({ serverData: staff, rootScope: $rootScope });\r\n\r\n Chainer.all([initApis, initSystemTypes, initSystemData, initSystemMetaData, initCurrentUser]).then(function (results) {\r\n $rootScope.appInitialized = true;\r\n\r\n log.debug('User initialized', $rootScope.user);\r\n log.debug('$rootScope', $rootScope);\r\n $rootScope.$broadcast('user.initialized');\r\n\r\n if (locationService.getPath() === '/') {\r\n redirectUserToStartView();\r\n }\r\n\r\n userPromise.resolve($rootScope.user);\r\n }, function (error) {\r\n log.error(error);\r\n $rootScope.appInitialized = false;\r\n userPromise.reject(null);\r\n });\r\n\r\n } else {\r\n $rootScope.appInitialized = true;\r\n\r\n userPromise.resolve(null);\r\n }\r\n },\r\n function (error) {\r\n log.error(error);\r\n $rootScope.appInitialized = false;\r\n userPromise.reject(null);\r\n });\r\n }\r\n else {\r\n log.debug('Current user', $rootScope.user);\r\n\r\n userPromise.resolve($rootScope.user);\r\n }\r\n\r\n return userPromise.promise;\r\n };\r\n\r\n var initApis = function () {\r\n return appService.initApis().then(() => {\r\n appApi = appService.getApi('app');\r\n });\r\n }\r\n\r\n var initSystemTypes = function () {\r\n return appService.getSystemTypes().then(function (systemTypes) {\r\n $rootScope.systemTypes = systemTypes;\r\n\r\n Object.keys($rootScope.systemTypes).forEach(function (systemTypeKey) {\r\n var item = $rootScope.systemTypes[systemTypeKey];\r\n if (!Array.isArray(item)) {\r\n let values = Object.values(item);\r\n switch (systemTypeKey) {\r\n case 'scheduleRowTypes':\r\n case 'scheduleRowMiscStatuses':\r\n //if (hasItems(values) && values[0].hasOwnProperty('name')) {\r\n $rootScope.systemTypes[systemTypeKey].values = values.sort((a, b) => a.name.localeCompare(b.name));\r\n //}\r\n break;\r\n default:\r\n $rootScope.systemTypes[systemTypeKey].values = values;\r\n break;\r\n }\r\n }\r\n\r\n switch (systemTypeKey) {\r\n case 'scheduleRowTypes':\r\n case 'scheduleRowMiscStatuses':\r\n case 'scheduleRowTemporaryExtensionLevels':\r\n $rootScope.systemTypes[systemTypeKey].byCodeName = {};\r\n $rootScope.systemTypes[systemTypeKey].values.forEach(function (value) {\r\n $rootScope.systemTypes[systemTypeKey].byCodeName[value.codeName] = value;\r\n });\r\n break;\r\n case 'clientTimeReportTypes':\r\n $rootScope.systemTypes[systemTypeKey].byCodeNameLowerCase = {};\r\n $rootScope.systemTypes[systemTypeKey].values.forEach(function (value) {\r\n $rootScope.systemTypes[systemTypeKey].byCodeNameLowerCase[value.codeName.toLowerCase()] = value;\r\n });\r\n break;\r\n case 'roles':\r\n $rootScope.systemTypes['rolesByCodeName'] = {};\r\n $rootScope.systemTypes[systemTypeKey].values.forEach(function (role) {\r\n $rootScope.systemTypes['rolesByCodeName'][role.codeName] = role;\r\n });\r\n\r\n $rootScope.systemTypes[systemTypeKey].selectable = $rootScope.systemTypes[systemTypeKey].values.filter(function (role) {\r\n switch (role.codeName) {\r\n case 'None':\r\n case 'RemoteWorkleader':\r\n case 'Sysowner':\r\n case 'Client':\r\n return false;\r\n default:\r\n return true;\r\n }\r\n });\r\n break;\r\n case 'daysOfWeek':\r\n // Ensure that Sunday is the last day of the week\r\n $rootScope.systemTypes[systemTypeKey].values.push($rootScope.systemTypes[systemTypeKey].values.shift());\r\n break;\r\n }\r\n });\r\n\r\n log.debug('System types:', $rootScope.systemTypes);\r\n\r\n return systemTypes;\r\n })\r\n }\r\n\r\n var initSystemData = function () {\r\n return appApi.get({ endpointName: 'getSystemData' })\r\n .then(function (systemData) {\r\n $rootScope.systemData = systemData;\r\n\r\n Object.keys($rootScope.systemData).forEach(function (systemDataKey) {\r\n var item = $rootScope.systemData[systemDataKey];\r\n if (!Array.isArray(item)) {\r\n $rootScope.systemData[systemDataKey].values = Object.values(item);\r\n }\r\n });\r\n\r\n $rootScope.municipalities = _.filter($rootScope.systemData.externalOrganizations, function (org) {\r\n return org.typeId === 3;\r\n });\r\n\r\n return systemData;\r\n })\r\n }\r\n\r\n var initSystemMetaData = function () {\r\n\r\n return appApi.get({ endpointName: 'getSystemMetaData' }).then(function (systemMetaData) {\r\n $rootScope.systemMetaData = systemMetaData;\r\n\r\n Object.keys($rootScope.systemMetaData).forEach(function (systemMetaDataKey) {\r\n var item = $rootScope.systemMetaData[systemMetaDataKey];\r\n if (!Array.isArray(item)) {\r\n $rootScope.systemMetaData[systemMetaDataKey].values = Object.values(item);\r\n }\r\n });\r\n\r\n return systemMetaData;\r\n });\r\n }\r\n\r\n var initCurrentUser = function () {\r\n\r\n log.debug('Setting global user variables');\r\n\r\n $rootScope.userHasClientAccess = accessService.hasClientAccess();\r\n $rootScope.userHasBasicClientAccess = accessService.hasBasicClientAccess();\r\n $rootScope.userHasClientScheduleAdminAccess = $rootScope.userHasClientAccess;\r\n $rootScope.userHasClientScheduleAccess = $rootScope.userHasClientScheduleAdminAccess;\r\n $rootScope.userHasStaffAccess = accessService.hasStaffAccess();\r\n $rootScope.userHasReportingAccess = accessService.hasReportingAccess();\r\n\r\n $rootScope.isSysowner = accessService.isSysowner();\r\n $rootScope.userIsStaff = $rootScope.user.userType === 0;\r\n $rootScope.userIsClient = $rootScope.user.userType === 1;\r\n $rootScope.userIsAssistant = $rootScope.userIsStaff && accessService.userHasRole('Assistant');\r\n $rootScope.userIsAssistantOnly = $rootScope.userIsStaff && $rootScope.user.roles === accessService.getRoleId('Assistant');\r\n $rootScope.userIsWorkleader = $rootScope.userIsStaff && accessService.userHasRole('Workleader');\r\n $rootScope.userIsWorkleaderOrAbove = $rootScope.userIsWorkleader || $rootScope.user.isAdministrator;\r\n $rootScope.userIsAdministrator = $rootScope.userIsStaff && $rootScope.user.isAdministrator;\r\n $rootScope.userIsSysadmin = $rootScope.userIsStaff && accessService.userHasRole('Sysadmin');\r\n $rootScope.userHasSideNavAccess = !$rootScope.userIsAssistantOnly;\r\n\r\n if ($rootScope.user.userType === 0 && ($rootScope.userHasClientAccess || $rootScope.userHasBasicClientAccess)) {\r\n\r\n return updateCurrentUserClients().then(function (result) {\r\n\r\n log.debug('Clients set', result);\r\n\r\n if ($rootScope.user.clients && $rootScope.user.clients.length > 0) {\r\n\r\n if ($rootScope.user.clients.length === 1 && !$rootScope.currentClient) {\r\n legacyClientService.setCurrent($rootScope.user.clients[0]);\r\n } else {\r\n $rootScope.$broadcast('client.notselected');\r\n }\r\n }\r\n return updateImpersonationStatus().then(function () {\r\n return $q.resolve($rootScope.user);\r\n })\r\n });\r\n\r\n } else if ($rootScope.user.userType === 1) {\r\n legacyClientService.setCurrent($rootScope.user);\r\n return updateImpersonationStatus().then(function () {\r\n return $q.resolve($rootScope.user);\r\n })\r\n }\r\n }\r\n\r\n var updateCurrentUserClients = function () {\r\n return legacyClientService.getByCurrentUser().then(function (clients) {\r\n $rootScope.user.clients = clients;\r\n\r\n return clients;\r\n });\r\n };\r\n\r\n var updateImpersonationStatus = function () {\r\n return isImpersonating().then(function (impersonating) {\r\n log.debug(\"Impersonating\", impersonating);\r\n $rootScope.isImpersonating = impersonating === true;\r\n\r\n return impersonating;\r\n })\r\n }\r\n\r\n var redirectUserToStartView = function () {\r\n if (!$rootScope.user.hasDashboardAccess) {\r\n if ($rootScope.userIsAssistant) {\r\n locationService.setPath('/staff/user/shifts');\r\n } else if ($rootScope.userIsClient) {\r\n locationService.setPath('/client/schedule/' + $rootScope.user.id);\r\n } else if ($rootScope.user.hasActiveLegalRepresentativeRelations) {\r\n if ($rootScope.user.productFeatures.newClientTimeReportsBeta.available) {\r\n locationService.setPath('/staff/user/client/reports/time/invoices');\r\n } else {\r\n locationService.setPath('/staff/user/e-rak-reports');\r\n }\r\n } else {\r\n locationService.setPath('/staff/user/profile');\r\n }\r\n }\r\n }\r\n\r\n function getEmail() {\r\n return requestHelper.get(baseUrl, 'email');\r\n }\r\n\r\n function updateStaff(model) {\r\n return requestHelper.put(baseUrl, 'staff/update', model);\r\n }\r\n\r\n function changePassword(model) {\r\n return requestHelper.put(baseUrl, 'changepassword', model);\r\n }\r\n\r\n function changeUsername(model) {\r\n return requestHelper.put(baseUrl, 'changeusername', model);\r\n }\r\n\r\n function changeEmail(model) {\r\n return requestHelper.put(baseUrl, 'changeemail', model);\r\n }\r\n\r\n function isImpersonating() {\r\n return requestHelper.get(baseUrl, 'impersonating');\r\n }\r\n\r\n $rootScope.$on('staff.updated', function (e, staff) {\r\n if ($rootScope.user != null && (staff.id == $rootScope.user.id)) {\r\n getUser(true);\r\n }\r\n });\r\n\r\n $rootScope.$on('client.updated', function () {\r\n getUser(true);\r\n });\r\n\r\n $rootScope.$on('client.created', function (__, client) {\r\n updateCurrentUserClients();\r\n });\r\n\r\n $rootScope.$on('client.removed', function (__, clientId) {\r\n var index = _.findIndex($rootScope.user.clients, function (client) {\r\n return client.id === clientId;\r\n });\r\n if (index != -1) {\r\n $rootScope.user.clients.splice(index, 1);\r\n }\r\n });\r\n\r\n return {\r\n getUser: getUser,\r\n getEmail: getEmail,\r\n updateStaff: updateStaff,\r\n changePassword: changePassword,\r\n changeUsername: changeUsername,\r\n changeEmail: changeEmail,\r\n isImpersonating: isImpersonating,\r\n redirectUserToStartView: redirectUserToStartView\r\n };\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'userImpersonationService';\r\n var app = angular.module('app');\r\n\r\n app.service(serviceId, [\r\n 'requestHelper',\r\n function (requestHelper) {\r\n\r\n var baseUrl = 'api/userimpersonation';\r\n\r\n function getUsers(/*int*/ customerId, params) {\r\n return requestHelper.get(baseUrl, 'users/' + customerId, params);\r\n }\r\n\r\n function impersonateUser(/*string*/ userId) {\r\n return requestHelper.post(baseUrl, 'impersonate/' + userId);\r\n }\r\n\r\n return {\r\n getUsers: getUsers,\r\n impersonateUser: impersonateUser,\r\n };\r\n }]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'directiveService';\r\n angular.module('app').factory(serviceId, [\r\n '$parse',\r\n '$timeout',\r\n 'logger',\r\n function ($parse, $timeout, logger) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n var initializeObjParam = function (scope, attrs, attrName, param, defaults, callback) {\r\n if ($parse(attrs[attrName]).assign) { // is parameter assignable?\r\n //log.debug('Assignable:', param);\r\n \r\n merge(param, defaults);\r\n scope[attrName] = param;\r\n } else {\r\n //log.debug('Not assignable:', param);\r\n var obj = {};\r\n _.assign(obj, param);\r\n merge(obj, defaults);\r\n scope[attrName] = obj;\r\n }\r\n\r\n if (callback && angular.isFunction(callback)) callback();\r\n }\r\n\r\n return {\r\n initializeObjParam: initializeObjParam\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'locationService';\r\n angular.module('app').factory(serviceId, [\r\n '$location',\r\n function ($location) {\r\n\r\n var getUrl = function () {\r\n return $location.url();\r\n }\r\n\r\n var setUrl = function (url, replace) {\r\n $location.url(url);\r\n\r\n if (replace === true) {\r\n $location.replace();\r\n }\r\n }\r\n\r\n var getAbsoluteUrl = function (stripQueryString) {\r\n\r\n var absUrl = $location.absUrl();\r\n\r\n if (stripQueryString === true) {\r\n var queryStringIndex = absUrl.lastIndexOf('?');\r\n\r\n if (queryStringIndex !== -1) {\r\n absUrl = absUrl.substring(0, queryStringIndex);\r\n }\r\n }\r\n\r\n return absUrl;\r\n }\r\n\r\n var getHost = function () {\r\n return $location.host();\r\n }\r\n\r\n var getHostUrl = function () {\r\n return $location.protocol() + '://' + $location.host() + (hasExplicitPortNumber() && $location.port() ? ':' + $location.port() : '');\r\n }\r\n\r\n var getAbsolutePath = function (path) {\r\n return getHostUrl() + path\r\n }\r\n\r\n var getPath = function () {\r\n return $location.$$path;\r\n }\r\n\r\n var setPath = function (path) {\r\n $location.path(path);\r\n }\r\n\r\n var getQueryParam = function (key) {\r\n return $location.search()[key]\r\n }\r\n\r\n var getBooleanQueryParam = function (key) {\r\n var value = $location.search()[key]\r\n\r\n return value === 'true';\r\n }\r\n\r\n var setQueryParam = function (key, value) {\r\n // Update search parameter\r\n $location.search(key, value);\r\n\r\n // Replace the URL without triggering a route change\r\n $location.replace();\r\n }\r\n\r\n var removeQueryParam = function (key) {\r\n setQueryParam(key, null);\r\n }\r\n\r\n var getHash = function () {\r\n return $location.hash();\r\n }\r\n\r\n var setHash = function (hash) {\r\n $location.hash(hash);\r\n }\r\n\r\n var hasExplicitPortNumber = function () {\r\n return $location.absUrl().includes(':' + $location.port());\r\n }\r\n\r\n return {\r\n getUrl: getUrl,\r\n setUrl: setUrl,\r\n getAbsoluteUrl: getAbsoluteUrl,\r\n getHost: getHost,\r\n getHostUrl: getHostUrl,\r\n getAbsolutePath: getAbsolutePath,\r\n getPath: getPath,\r\n setPath: setPath,\r\n getQueryParam: getQueryParam,\r\n setQueryParam: setQueryParam,\r\n getBooleanQueryParam: getBooleanQueryParam,\r\n removeQueryParam: removeQueryParam,\r\n getHash: getHash,\r\n setHash: setHash\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'modalDialogService';\r\n angular.module('app').factory(serviceId, [\r\n '$timeout', 'logger',\r\n function ($timeout, logger) {\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n var openModal = function (id) {\r\n $timeout(\r\n function () {\r\n $('#' + id).modal({ show: true, backdrop: 'static' });\r\n\r\n log.debug('Modal \"' + id + '\" opened');\r\n });\r\n }\r\n\r\n var closeModal = function (id) {\r\n $timeout(\r\n function () {\r\n $('#' + id).modal('hide')\r\n\r\n log.debug('Modal \"' + id + '\" closed');\r\n });\r\n }\r\n\r\n return {\r\n openModal: openModal,\r\n closeModal: closeModal\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'publicCustomerService';\r\n angular.module('app').factory(serviceId, [\r\n 'requestHelper', 'logger',\r\n function (requestHelper, logger) {\r\n\r\n function getBaseApiUrl() {\r\n return 'api/customers/public';\r\n }\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n var getCustomer = function (customerGuid) {\r\n return requestHelper.get(getBaseApiUrl(), customerGuid);\r\n };\r\n\r\n return {\r\n getCustomer: getCustomer\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userAvatarDropdownMenu';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<',\r\n options: '<'\r\n },\r\n templateUrl:\r\n '/client/public/components/users/user-avatar-dropdown-menu.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'userNameDropdownMenu';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n user: '<',\r\n date: '<',\r\n options: '<'\r\n },\r\n templateUrl:\r\n '/client/public/components/users/user-name-dropdown-menu.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'fullCalendar';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n onInit: '&',\r\n onDatesSet: '&',\r\n onLoading: '&',\r\n onSelectedEventsChanged: '&',\r\n onEventsSelected: '&',\r\n onEventsDeselected: '&',\r\n onViewSet: '&',\r\n onEditableChanged: '&',\r\n onSelectModeChanged: '&',\r\n options: '<'\r\n },\r\n require: {\r\n $dropdown: '?^^dropdown'\r\n },\r\n template: '
',\r\n controller: ['$scope', '$rootScope', '$q', '$element', '$timeout', '$transclude', '$compile', 'logger', 'toHoursMinutesFilter',\r\n function ($scope, $rootScope, $q, $element, $timeout, $transclude, $compile, logger, toHoursMinutesFilter) {\r\n\r\n // #region Private fields\r\n\r\n let ctrl = this;\r\n\r\n let log = logger.getLogger(componentId);\r\n\r\n let defaultOptions = {\r\n views: [\r\n //{\r\n // id: 'multiMonthYear',\r\n // name: 'År',\r\n // icon: 'far fa-calendar-alt',\r\n // type: 'year'\r\n //},\r\n {\r\n id: 'dayGridMonth',\r\n name: 'Månad',\r\n icon: 'far fa-calendar-alt',\r\n type: 'month'\r\n },\r\n {\r\n id: 'dayGridWeek',\r\n name: 'Vecka',\r\n icon: 'far fa-calendar-day',\r\n type: 'week'\r\n },\r\n {\r\n id: 'dayGridDay',\r\n name: 'Dag',\r\n icon: 'far fa-calendar-day',\r\n type: 'date'\r\n },\r\n {\r\n id: 'timeGridWeek',\r\n name: 'Vecka (timmar)',\r\n icon: 'far fa-calendar-week',\r\n subIcon: 'far fa-clock',\r\n type: 'week'\r\n },\r\n {\r\n id: 'timeGridDay',\r\n name: 'Dag (timmar)',\r\n icon: 'far fa-calendar-day',\r\n subIcon: 'far fa-clock',\r\n type: 'date'\r\n },\r\n {\r\n id: 'listWeek',\r\n name: 'Vecka (lista)',\r\n icon: 'far fa-list',\r\n type: 'week'\r\n },\r\n {\r\n id: 'listMonth',\r\n name: 'Månad (lista)',\r\n icon: 'far fa-list',\r\n type: 'month'\r\n }\r\n ],\r\n initialView: 'dayGridMonth',\r\n defaultDayView: 'timeGridDay',\r\n defaultWeekView: 'timeGridWeek',\r\n initialDate: undefined,\r\n editable: false,\r\n selectable: false,\r\n };\r\n\r\n let calendar;\r\n let calendarElement = $element[0].firstChild;\r\n let selectedEvents = {};\r\n let temporaryEvents = [];\r\n const selectedClass = 'fc-event-selected';\r\n const selectedEventsGroupId = 'selected';\r\n\r\n let eventSources = {};\r\n let eventTemplates = {};\r\n let eventScopes = {};\r\n let eventElements = {};\r\n let eventIdsPendingMount = {};\r\n let eventsIdsPendingRender = {};\r\n let multiDayEventIdsPendingRender = {};\r\n let eventRightClickedEventHandlers = {};\r\n\r\n let state = {\r\n debug: false,\r\n activeEventSource: undefined,\r\n selectMode: false,\r\n listView: false,\r\n yearView: false\r\n };\r\n\r\n let debugState = {\r\n numCreatedScopes: 0,\r\n numRemovedScopes: 0,\r\n numVisibleEvents: 0\r\n }\r\n\r\n ctrl.debugState = debugState;\r\n\r\n let defaultEventTemplate = `
\r\n
\r\n
{{event.start | date:'HH:mm'}}–{{event.end | date:'HH:mm'}}
\r\n
\r\n
{{event.title}}
\r\n
\r\n
\r\n
`;\r\n\r\n // #endregion\r\n\r\n // #region Component lifecycle hooks\r\n\r\n ctrl.$onInit = function () {\r\n\r\n ctrl.onInit({ calendar: ctrl });\r\n\r\n var calendarOptions = {};\r\n initLocalizationOptions(calendarOptions);\r\n initGeneralOptions(calendarOptions);\r\n initCallbacks(calendarOptions);\r\n\r\n calendar = new FullCalendar.Calendar(calendarElement, calendarOptions);\r\n\r\n render();\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n\r\n if (!isValidView(ctrl.options.initialView)) {\r\n ctrl.options.initialView = defaultOptions.initialView;\r\n }\r\n }\r\n }\r\n\r\n ctrl.$onDestroy = function () {\r\n\r\n // Clear any pending timeouts\r\n if (removeTemporaryEventsTimeoutPromise) {\r\n $timeout.cancel(removeTemporaryEventsTimeoutPromise);\r\n }\r\n\r\n calendar.destroy()\r\n\r\n // Remove event scopes\r\n Object.keys(eventScopes).forEach(id => removeEventScope(null, id));\r\n\r\n // Clear all objects and arrays\r\n eventScopes = {};\r\n eventElements = {};\r\n eventTemplates = {};\r\n eventIdsPendingMount = {};\r\n eventsIdsPendingRender = {};\r\n multiDayEventIdsPendingRender = {};\r\n eventRightClickedEventHandlers = {};\r\n selectedEvents = {};\r\n temporaryEvents = [];\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Calendar init\r\n\r\n function initLocalizationOptions(calendarOptions) {\r\n\r\n Object.assign(calendarOptions, {\r\n locale: 'sv',\r\n buttonText: {\r\n today: 'Idag',\r\n month: 'Månad',\r\n week: 'Vecka',\r\n day: 'Dag',\r\n list: 'Lista'\r\n },\r\n weekText: 'v.',\r\n weekTextLong: 'vecka',\r\n allDayContent: 'heldag',\r\n noEventsContent: 'Inga händelser att visa',\r\n moreLinkContent: function (arg) {\r\n return `${arg.num} händelse${arg.num > 1 ? 'r' : ''}`;\r\n },\r\n });\r\n }\r\n\r\n function initGeneralOptions(calendarOptions) {\r\n\r\n Object.assign(calendarOptions, {\r\n // settings\r\n initialView: ctrl.options.initialView,\r\n initialDate: ctrl.options.initialDate,\r\n headerToolbar: false,\r\n height: 'auto',\r\n //contentHeight: 'auto',\r\n firstDay: 1,\r\n weekNumbers: true,\r\n editable: ctrl.options.editable,\r\n selectable: ctrl.options.selectable,\r\n eventResizableFromStart: true,\r\n dayMaxEvents: false,\r\n nowIndicator: true,\r\n selectMirror: true,\r\n navLinks: true,\r\n eventDisplay: 'block',\r\n selectMinDistance: 15, // prevents simple clicks from creating events\r\n multiMonthMaxColumns: 3,\r\n slotEventOverlap: false,\r\n lazyFetching: false,\r\n forceEventDuration: true,\r\n allDayMaintainDuration: true, // maintain duration when converting to/from all-day\r\n //height: '100%',\r\n //expandRows: true,\r\n //rerenderDelay: 500,\r\n });\r\n }\r\n\r\n function initCallbacks(calendarOptions) {\r\n Object.assign(calendarOptions, {\r\n // callbacks\r\n viewClassNames: viewClassNames,\r\n viewWillUnmount: viewWillUnmount,\r\n viewDidMount: viewDidMount,\r\n datesSet: datesSet,\r\n loading: loading,\r\n eventSourceFailure: eventSourceFailure,\r\n //dayHeaderContent: dayHeaderContent,\r\n eventsSet: eventsSet,\r\n eventChange: eventChange,\r\n eventDataTransform: eventDataTransform,\r\n eventClassNames: eventClassNames,\r\n eventContent: eventContent,\r\n eventDidMount: eventDidMount,\r\n eventWillUnmount: eventWillUnmount,\r\n eventClick: eventClick,\r\n eventResize: eventResize,\r\n eventResizeStop: eventResizeStop,\r\n eventDragStart: eventDragStart,\r\n eventOverlap: eventOverlap,\r\n eventDragStop: eventDragStop,\r\n eventDrop: eventDrop,\r\n select: select,\r\n dateClick: dateClick,\r\n navLinkDayClick: navLinkDayClick,\r\n navLinkWeekClick: navLinkWeekClick,\r\n selectAllow: selectAllow,\r\n });\r\n\r\n angular.forEach(calendarOptions, function (value, key) {\r\n if (typeof value === 'function') {\r\n calendarOptions[key] = wrapFunctionWithScopeApply(calendarOptions[key]);\r\n }\r\n });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Public methods\r\n\r\n // #region Event sources\r\n\r\n ctrl.addEventSource = function (source) {\r\n if (!eventSources[source.id]) {\r\n eventSources[source.id] = source;\r\n calendar.addEventSource(source);\r\n }\r\n }\r\n\r\n ctrl.removeEventSource = function (sourceId) {\r\n let source = calendar.getEventSourceById(sourceId);\r\n\r\n if (source) {\r\n source.remove();\r\n\r\n if (eventSources[source.id]) {\r\n delete eventSources[source.id];\r\n }\r\n }\r\n }\r\n\r\n ctrl.setActiveEventSource = function (sourceId) {\r\n\r\n resetSelectedEvents();\r\n\r\n state.activeEventSource = eventSources[sourceId];\r\n\r\n if (!state.activeEventSource.selectable) {\r\n ctrl.setSelectMode(false);\r\n }\r\n\r\n if (state.activeEventSource.readOnly || !hasValue(state.activeEventSource.callbacks)) {\r\n ctrl.setEditable(false);\r\n }\r\n\r\n updateEditableEvents();\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Navigation \r\n\r\n ctrl.prev = function () {\r\n calendar.prev();\r\n }\r\n\r\n ctrl.next = function () {\r\n calendar.next();\r\n }\r\n\r\n ctrl.today = function () {\r\n calendar.today();\r\n }\r\n\r\n ctrl.goToDate = function (date) {\r\n calendar.gotoDate(date);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Events\r\n\r\n ctrl.addEvent = addEvent;\r\n\r\n ctrl.removeSelectedEvents = function () {\r\n Object.values(selectedEvents).forEach(event => event.remove());\r\n\r\n resetSelectedEvents();\r\n }\r\n\r\n ctrl.removeEvent = function (eventSourceId, eventId) {\r\n var event = getEventByExternalId(eventSourceId, eventId);\r\n\r\n if (event) {\r\n event.remove();\r\n resetSelectedEvents();\r\n\r\n return event.extendedProps;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n ctrl.removeEvents = function (eventSourceId, eventIds) {\r\n let removedEvents = [];\r\n calendar.batchRendering(() => {\r\n eventIds.forEach(eventId => {\r\n let removedEvent = ctrl.removeEvent(eventSourceId, eventId);\r\n\r\n if (removedEvent) {\r\n removedEvents.push(removedEvent);\r\n }\r\n });\r\n })\r\n\r\n return removedEvents;\r\n }\r\n\r\n ctrl.setEventDates = function (eventSourceId, eventId, start, end) {\r\n var event = getEventByExternalId(eventSourceId, eventId);\r\n\r\n if (event) {\r\n setEventDates(event, start, end);\r\n }\r\n }\r\n\r\n ctrl.updateEvent = function (updatedEvent) {\r\n var calendarEvent = calendar.getEventById(updatedEvent.id);\r\n\r\n var updatedProperties = getUpdatedProperties(calendarEvent, updatedEvent);\r\n\r\n if (Object.keys(updatedProperties).length > 0) {\r\n calendar.batchRendering(function () {\r\n updateEvent(calendarEvent, updatedProperties);\r\n });\r\n }\r\n }\r\n\r\n ctrl.updateEvents = function (updatedEventDataItems) {\r\n\r\n let events = {};\r\n\r\n updatedEventDataItems.forEach(updatedItem => { \r\n var calendarEvent = calendar.getEventById(updatedItem.id);\r\n\r\n events[updatedItem.id] = {\r\n calendarEvent: calendarEvent,\r\n originalGroupId: calendarEvent.groupId,\r\n groupIdReset: false\r\n }\r\n });\r\n\r\n calendar.batchRendering(() => {\r\n updatedEventDataItems.forEach(updatedEventDataItem => {\r\n var eventInfo = events[updatedEventDataItem.id];\r\n var calendarEvent = eventInfo.calendarEvent;\r\n\r\n var updatedProperties = getUpdatedProperties(calendarEvent, updatedEventDataItem);\r\n\r\n if (Object.keys(updatedProperties).length > 0) {\r\n resetEventGroup(calendarEvent);\r\n eventInfo.groupIdReset = true;\r\n updateEvent(calendarEvent, updatedProperties);\r\n }\r\n });\r\n\r\n Object.values(events).forEach(e => {\r\n if (e.originalGroupId && e.groupIdReset) {\r\n setEventGroup(e.calendarEvent, e.originalGroupId);\r\n }\r\n })\r\n })\r\n }\r\n\r\n // #region Event selection\r\n\r\n ctrl.selectEvent = function (eventSourceId, eventId) {\r\n\r\n let fullCalendarEventId = FullCalendarEvent.getInternalEventId(eventSourceId, eventId);\r\n\r\n if (!selectedEvents[fullCalendarEventId]) {\r\n var event = calendar.getEventById(fullCalendarEventId);\r\n\r\n addSelectedEvent(event);\r\n }\r\n }\r\n\r\n ctrl.setEventEditable = function (eventSourceId, eventId, editable) {\r\n var event = getEventByExternalId(eventSourceId, eventId);\r\n\r\n if (event) {\r\n setEventEditable(event, editable);\r\n }\r\n }\r\n\r\n ctrl.selectAllEvents = selectAllEvents;\r\n\r\n ctrl.resetSelectedEvents = resetSelectedEvents;\r\n\r\n // #endregion\r\n\r\n // #endregion\r\n\r\n // #region Calendar state\r\n\r\n ctrl.refresh = function (eventSourceId) {\r\n resetSelectedEvents();\r\n\r\n if (eventSourceId) {\r\n calendar.getEventSourceById(eventSourceId).refetch();\r\n } else {\r\n calendar.refetchEvents();\r\n }\r\n }\r\n\r\n ctrl.changeView = function (viewId, date) {\r\n if (isValidView(viewId)) {\r\n calendar.changeView(viewId, date);\r\n }\r\n }\r\n\r\n ctrl.setEditable = function (editable) {\r\n calendar.setOption('editable', editable);\r\n\r\n updateEditableEvents();\r\n\r\n ctrl.onEditableChanged({ editable: editable });\r\n }\r\n\r\n ctrl.setSelectable = function (selectable) {\r\n calendar.setOption('selectable', selectable);\r\n }\r\n\r\n ctrl.setSelectMode = function (enable) {\r\n state.selectMode = enable;\r\n\r\n if (enable) {\r\n calendarElement.classList.add('fc-select-mode');\r\n } else {\r\n calendarElement.classList.remove('fc-select-mode');\r\n }\r\n\r\n ctrl.onSelectModeChanged({ enable: enable });\r\n }\r\n\r\n ctrl.updateSize = function () {\r\n calendar.updateSize();\r\n }\r\n\r\n ctrl.isEditable = isEditable;\r\n\r\n // #endregion\r\n\r\n let rerenderPending = false;\r\n ctrl.eventRendered = function (eventId, multiDay) {\r\n\r\n requireEventId(eventId);\r\n\r\n if (multiDay && multiDayEventIdsPendingRender[eventId]) {\r\n delete multiDayEventIdsPendingRender[eventId];\r\n\r\n if (Object.keys(multiDayEventIdsPendingRender).length === 0) {\r\n rerenderPending = true;\r\n }\r\n }\r\n\r\n if (eventsIdsPendingRender[eventId]) {\r\n delete eventsIdsPendingRender[eventId];\r\n\r\n if (Object.keys(eventsIdsPendingRender).length === 0) {\r\n\r\n //if (rerenderPending) {\r\n // debug('Executing render() to fix multi-day event rendering');\r\n\r\n // Seems like we need to call this everytime for calendar (month view) to align properly\r\n $timeout(() => render());\r\n // rerenderPending = false;\r\n //}\r\n\r\n // removed any orphaned scopes (usually created for events visible both before and after navigation)\r\n if (debugState.numCreatedScopes > (debugState.numRemovedScopes + debugState.numVisibleEvents)) {\r\n $timeout(() => cleanupOrphanedEventScopes(), 500);\r\n }\r\n\r\n debug('Render complete');\r\n }\r\n }\r\n }\r\n\r\n function cleanupOrphanedEventScopes() {\r\n let currentEventIds = {};\r\n Array.from($element[0].querySelectorAll('.fc-event')).map(e => e.id).forEach(eid => currentEventIds[eid] = eid);\r\n\r\n Object.keys(eventScopes).forEach(id => {\r\n if (!currentEventIds[id]) {\r\n\r\n let orphanedEventId = eventScopes[id].$event.id;\r\n\r\n // If present, remove event ID from pending mount dictionary since it will never be mounted\r\n // This situation occurs when the event has a calendar-generated ID that changes when the view changes \r\n // and the event is visible in calendar both before and after the view change (date change or view type change)\r\n if (eventIdsPendingMount[orphanedEventId]) {\r\n delete eventIdsPendingMount[orphanedEventId];\r\n debug(`cleanupOrphanedEventScopes:eventIdsPendingMount-`, orphanedEventId, Object.keys(eventIdsPendingMount).length);\r\n }\r\n\r\n removeEventScope(orphanedEventId, id);\r\n }\r\n })\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Calendar callbacks\r\n\r\n function eventSourceFailure(errorObj) {\r\n log.error(errorObj);\r\n }\r\n\r\n function loading(isLoading) {\r\n ctrl.onLoading({ isLoading: isLoading });\r\n }\r\n\r\n function eventsSet(events) {\r\n debugState.numVisibleEvents = events.length;\r\n }\r\n\r\n function datesSet(dateInfo) {\r\n\r\n ctrl.title = dateInfo.view.title;\r\n debug('datesSet');\r\n if (hasSelectedEvents()) {\r\n resetSelectedEvents();\r\n }\r\n\r\n ctrl.onDatesSet({\r\n dates: {\r\n start: dateInfo.start,\r\n end: dateInfo.end,\r\n view: {\r\n currentStart: dateInfo.view.currentStart,\r\n currentEnd: dateInfo.view.currentEnd\r\n }\r\n },\r\n title: dateInfo.view.title\r\n });\r\n }\r\n\r\n // #region Calendar view lifecycle\r\n\r\n function viewClassNames(arg) {\r\n debug('viewClassNames')\r\n\r\n state.listView = arg.view.type.startsWith('list');\r\n state.yearView = arg.view.type.toLowerCase().includes('year');\r\n //updateViewState(arg.view);\r\n\r\n ctrl.onViewSet({ view: ctrl.options.views.find((v) => v.id === arg.view.type) });\r\n }\r\n\r\n function viewWillUnmount(arg) {\r\n debug('viewWillUnmount')\r\n }\r\n\r\n function viewDidMount(arg) {\r\n debug('viewDidMount')\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Day & time display\r\n\r\n //function dayHeaderContent(arg) {\r\n\r\n // let elem = document.createElement('div');\r\n // elem.className = 'fc-day-header-content';\r\n\r\n // elem.innerHTML = arg.text;\r\n\r\n // return { domNodes: [elem] }\r\n //}\r\n\r\n // #endregion\r\n\r\n // #region Event lifecycle\r\n\r\n function eventDataTransform(eventData) {\r\n if (!eventData.id) {\r\n eventData.id = generateGUID();\r\n }\r\n\r\n eventData.editable = isEditable();\r\n }\r\n\r\n function eventClassNames(arg) {\r\n\r\n //debug('eventClassNames', arg.event.id);\r\n\r\n let classNames = [];\r\n\r\n if (arg.event.groupId == selectedEventsGroupId /*&& !arg.view.type.startsWith('list')*/) {\r\n classNames.push(selectedClass);\r\n }\r\n\r\n if (state.activeEventSource && arg.event.source && arg.event.source.id !== state.activeEventSource.id) {\r\n classNames.push('inactive-event-source');\r\n }\r\n\r\n return classNames;\r\n }\r\n\r\n function eventContent(info) {\r\n\r\n var event = info.event;\r\n var eventProps = event.extendedProps;\r\n\r\n let eventElementId = getEventElementId(info.event, info.view);\r\n\r\n debug('eventContent', { eventId: info.event.id, eventElementId: eventElementId });\r\n\r\n // Measure start time\r\n let startTime = undefined;\r\n\r\n if (state.debug) {\r\n startTime = performance.now();\r\n }\r\n\r\n if (event.source && event.source.id) {\r\n\r\n requireEventId(event.id);\r\n\r\n if (!eventScopes[eventElementId]) {\r\n createEventScope(event, eventElementId, info.view.type, info.isResizing);\r\n } else {\r\n updateEventScope(eventScopes[eventElementId], event, eventElementId, info.isResizing)\r\n }\r\n\r\n eventIdsPendingMount[event.id] = eventElementId;\r\n debug(`eventIdsPendingMount+`, event.id, Object.keys(eventIdsPendingMount).length);\r\n\r\n if (eventProps.hasBgPattern) {\r\n if (state.listView) {\r\n eventElements[eventElementId].style.backgroundColor = null;\r\n } else {\r\n eventElements[eventElementId].style.backgroundColor = event.backgroundColor;\r\n }\r\n }\r\n\r\n if (startTime) {\r\n // Calculate elapsed time\r\n var elapsedTime = performance.now() - startTime;\r\n\r\n //debug(`Rendered event ${event.id} in ${elapsedTime} ms`);\r\n }\r\n\r\n return { domNodes: [eventElements[eventElementId]] };\r\n }\r\n else {\r\n return {\r\n html: `
\r\n
\r\n
${dateToHHMM(event.start)}–${dateToHHMM(event.end)}
\r\n
(${toHoursMinutesFilter(event.end - event.start)})
\r\n
\r\n
`\r\n };\r\n }\r\n }\r\n\r\n function eventDidMount(info) {\r\n var event = info.event;\r\n var eventProps = event.extendedProps;\r\n\r\n if (info.event.id && eventIdsPendingMount[info.event.id]) {\r\n info.el.id = eventIdsPendingMount[info.event.id];\r\n delete eventIdsPendingMount[info.event.id];\r\n debug(`eventIdsPendingMount-`, info.event.id, Object.keys(eventIdsPendingMount).length);\r\n }\r\n\r\n debug('eventDidMount', { eventId: info.event.id, elementId: info.el.id }, getViewState(info.view), info.el);\r\n\r\n if (state.listView && eventProps.hasBgPattern) {\r\n var dotEl = info.el.getElementsByClassName('fc-list-event-dot')[0];\r\n\r\n let childElement = document.createElement('div')\r\n childElement.className = 'fc-list-event-dot-bg-color';\r\n childElement.style.borderColor = event.borderColor;\r\n childElement.style.backgroundColor = event.backgroundColor;\r\n\r\n dotEl.appendChild(childElement);\r\n }\r\n\r\n if (info.el.id) {\r\n var eventRightClicked = createEventRightClickEventHandler(event, info.el);\r\n\r\n eventRightClickedEventHandlers[info.el.id] = eventRightClicked;\r\n\r\n info.el.addEventListener('contextmenu', eventRightClicked, false);\r\n }\r\n\r\n if (state.debug) {\r\n countScopes();\r\n }\r\n }\r\n\r\n function eventWillUnmount(info) {\r\n\r\n let eventElementId = info.el.id;\r\n debug('eventWillUnmount', { eventId: info.event.id, eventElementId: eventElementId }, getViewState(info.view), info.el);\r\n\r\n removeEventScope(info.event.id, eventElementId, info.el);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Event interaction\r\n\r\n function eventClick(info) {\r\n\r\n debug('eventClick', info);\r\n\r\n info.jsEvent.preventDefault();\r\n info.jsEvent.stopPropagation();\r\n\r\n let event = info.event;\r\n\r\n if (event.url && !state.selectMode) {\r\n window.open(event.url);\r\n } else {\r\n if ((state.selectMode || isCtrlKeyPressed(info))) {\r\n // Do nothing if event is not selectable\r\n if (isEventSelectable(event)) {\r\n if (selectedEvents[event.id]) {\r\n removeSelectedEvent(event);\r\n } else {\r\n addSelectedEvent(event)\r\n }\r\n }\r\n } else {\r\n if (hasSelectedEvents()) {\r\n resetSelectedEvents();\r\n } else {\r\n executeCallbackOnEventSourceWithId(event.source.id, 'eventClicked', { eventId: event.extendedProps.id, eventStart: event.start, eventEnd: event.end, target: info.el });\r\n }\r\n }\r\n }\r\n }\r\n\r\n // #region Event drag and drop\r\n\r\n function eventDragStart(info) {\r\n\r\n if (isAltKeyPressed(info) && activeEventSourceHasCallback('copyEvents')) {\r\n\r\n var draggedEvent = info.event;\r\n\r\n if (hasSelectedEvents() && selectedEvents[draggedEvent.id]) {\r\n calendar.batchRendering(() => {\r\n Object.values(selectedEvents).forEach(selectedEvent => {\r\n addTemporaryEvent(selectedEvent);\r\n })\r\n });\r\n } else {\r\n addTemporaryEvent(draggedEvent);\r\n }\r\n }\r\n }\r\n\r\n function eventOverlap(stillEvent, movingEvent) {\r\n\r\n var overlap = executeCallbackOnActiveEventSource('eventOverlap', stillEvent, movingEvent);\r\n\r\n return _.isBoolean(overlap) ? overlap : true;\r\n }\r\n\r\n var removeTemporaryEventsTimeoutPromise = null;\r\n\r\n function eventDragStop(info) {\r\n debug('eventDragStop', info);\r\n if (hasTemporaryEvents()) {\r\n // Delay removal of temporary events created when copying events on eventDragStart to allow eventDrop to be called first\r\n // If eventDrop is never called it means that the drop was not allowed (due to overlap etc) and we can clean up the temporary events here\r\n // If eventDrop is called it is better UX to let the temporary events remain until copy is complete by letting eventDrop handler take care of the removal\r\n removeTemporaryEventsTimeoutPromise = $timeout(removeTemporaryEvents, 100);\r\n }\r\n \r\n executeRemovedEventScopeWorkaround(info.event, info.el, info.view.type);\r\n }\r\n\r\n function eventDrop(eventDropInfo) {\r\n\r\n // If necessary, cancel removal of temporary events initiated by eventDragStop handler and remove temporary events after the drop operation completes instead\r\n if (removeTemporaryEventsTimeoutPromise) {\r\n $timeout.cancel(removeTemporaryEventsTimeoutPromise);\r\n removeTemporaryEventsTimeoutPromise = null;\r\n }\r\n\r\n var event = eventDropInfo.event;\r\n\r\n var droppedEvents = [{ id: event.extendedProps.id, start: event.start, end: event.end, sourceId: event.source.id }];\r\n\r\n eventDropInfo.relatedEvents.forEach(relatedEvent => {\r\n droppedEvents.push({ id: relatedEvent.extendedProps.id, start: relatedEvent.start, end: relatedEvent.end, sourceId: event.source.id });\r\n });\r\n\r\n if (isAltKeyPressed(eventDropInfo)) {\r\n\r\n $q.all(executeEventCallbackByEventSource('copyEvents', droppedEvents)).then(\r\n results => {\r\n removeTemporaryEvents();\r\n eventDropInfo.revert();\r\n\r\n resetSelectedEvents();\r\n\r\n calendar.batchRendering(() => {\r\n\r\n let createdEventCopies = [];\r\n\r\n results.forEach(eventSourceResult => {\r\n if (Array.isArray(eventSourceResult)) {\r\n eventSourceResult.forEach((eventCopy) => createdEventCopies.push(addEvent(eventCopy, eventDropInfo.event.source.id)));\r\n } else {\r\n createdEventCopies.push(addEvent(eventSourceResult, eventDropInfo.event.source.id));\r\n }\r\n });\r\n\r\n addSelectedEvents(createdEventCopies, true);\r\n })\r\n\r\n return results\r\n },\r\n error => {\r\n removeTemporaryEvents();\r\n eventDropInfo.revert();\r\n\r\n throw error;\r\n });\r\n } else {\r\n\r\n removeTemporaryEvents();\r\n\r\n $q.all(executeEventCallbackByEventSource('moveEvents', droppedEvents)).then(\r\n results => {\r\n return results\r\n },\r\n error => {\r\n eventDropInfo.revert();\r\n\r\n throw error;\r\n });\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n function eventResize(eventResizeInfo) {\r\n\r\n var event = eventResizeInfo.event;\r\n\r\n var events = [{ id: event.extendedProps.id, start: event.start, end: event.end, sourceId: event.source.id }];\r\n\r\n eventResizeInfo.relatedEvents.forEach(relatedEvent => {\r\n events.push({ id: relatedEvent.extendedProps.id, start: relatedEvent.start, end: relatedEvent.end, sourceId: relatedEvent.source.id });\r\n });\r\n\r\n $q.all(executeEventCallbackByEventSource('resizeEvents', events)).then(function (resizedEvents) {\r\n\r\n resetSelectedEvents();\r\n\r\n return resizedEvents;\r\n }, function (error) {\r\n eventResizeInfo.revert();\r\n render();\r\n\r\n throw error;\r\n })\r\n }\r\n\r\n function eventResizeStop(info) {\r\n debug('eventResizeStop', info);\r\n\r\n executeRemovedEventScopeWorkaround(info.event, info.el, info.view.type);\r\n }\r\n\r\n function eventChange(changeInfo) {\r\n debug('eventChange', changeInfo);\r\n }\r\n\r\n function select(info) {\r\n info.jsEvent.preventDefault();\r\n info.jsEvent.stopPropagation();\r\n\r\n if (isEditable()) {\r\n\r\n if (isAltKeyPressed(info) || state.selectMode) {\r\n\r\n var eventsInSelection = calendar.getEvents().filter((e) => isEventSelectable(e) && e.start >= info.start && e.end <= info.end);\r\n\r\n calendar.batchRendering(() => {\r\n\r\n resetSelectedEvents();\r\n\r\n addSelectedEvents(eventsInSelection, true);\r\n\r\n calendar.unselect();\r\n });\r\n\r\n onSelectedEventsChanged();\r\n }\r\n else {\r\n executeCallbackOnActiveEventSource('createEvent', { start: info.start, end: info.end }).then(createdEvent => {\r\n addEvent(createdEvent, state.activeEventSource.id);\r\n\r\n calendar.unselect()\r\n });\r\n }\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Navigation\r\n\r\n function dateClick(info) {\r\n\r\n info.jsEvent.preventDefault();\r\n info.jsEvent.stopPropagation();\r\n\r\n if (!isAltKeyPressed(info)) { // if alt key is pressed we have just selected a day in month view\r\n if (hasSelectedEvents()) {\r\n resetSelectedEvents();\r\n } else {\r\n executeCallbackOnActiveEventSource('dateClicked', { date: info.date, allDay: info.allDay, target: info.dayEl })\r\n }\r\n }\r\n }\r\n\r\n function navLinkDayClick(date, jsEvent) {\r\n jsEvent.preventDefault();\r\n jsEvent.stopPropagation();\r\n\r\n ctrl.changeView(ctrl.options.defaultDayView, date);\r\n }\r\n\r\n function navLinkWeekClick(date, jsEvent) {\r\n jsEvent.preventDefault();\r\n jsEvent.stopPropagation();\r\n\r\n ctrl.changeView(ctrl.options.defaultWeekView, date);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Selection\r\n\r\n function selectAllow(selectInfo) {\r\n return true;\r\n }\r\n\r\n // #endregion\r\n\r\n // #endregion\r\n\r\n // #region Event rendering\r\n\r\n function getViewId(view) {\r\n return `${view.type}_${view.activeStart.toISOString()}-${view.activeEnd.toISOString()}`;\r\n }\r\n\r\n function getEventElementId(event, view) {\r\n return `${getViewId(view)}_${event.id}_${event._instance.instanceId}_${event._instance.defId}`;\r\n }\r\n\r\n function createEventScope(event, eventElementId, viewType, eventIsResizing) {\r\n\r\n let scope = $scope.$new(true);\r\n scope.$event = createEventViewModel(event, eventIsResizing);\r\n\r\n eventsIdsPendingRender[scope.$event.id] = true;\r\n if (scope.$event.multiDay) {\r\n multiDayEventIdsPendingRender[scope.$event.id] = true;\r\n }\r\n\r\n let eventTemplate = getEventTemplate(event, eventElementId, viewType);\r\n\r\n eventElements[eventElementId] = $compile(eventTemplate)(scope)[0];\r\n eventScopes[eventElementId] = scope;\r\n\r\n debug('Created event scope', { eventId: event.id, eventScopeId: scope.$id, eventElementId: eventElementId })\r\n\r\n debugState.numCreatedScopes++;\r\n }\r\n\r\n //function recreateEventScope(event, element, viewType) {\r\n\r\n // let eventElementId = element.id;\r\n\r\n // let scope = $scope.$new(true);\r\n // scope.$event = createEventViewModel(event, false);\r\n\r\n // if (scope.$event.multiDay) {\r\n // multiDayEventIdsPendingRender[scope.$event.id] = true;\r\n // }\r\n\r\n // let eventTemplate = getEventTemplate(event, eventElementId, viewType);\r\n\r\n // let fcEventMain = element.querySelector('.fc-event-main');\r\n // fcEventMain.innerHTML = eventTemplate;\r\n\r\n // eventElements[eventElementId] = $compile(element)(scope)[0];\r\n // eventScopes[eventElementId] = scope;\r\n\r\n // debug('Recreated event scope', { eventId: event.id, eventScopeId: scope.$id, eventElementId: eventElementId })\r\n\r\n // debugState.numCreatedScopes++;\r\n //}\r\n\r\n function updateEventScope(scope, event, eventElementId, eventIsResizing) {\r\n let updatedEventViewModel = createEventViewModel(event, eventIsResizing);\r\n\r\n let updatedProps = getUpdatedProperties(scope.$event, updatedEventViewModel);\r\n\r\n let numUpdatedProps = Object.keys(updatedProps).length;\r\n if (numUpdatedProps > 0) {\r\n\r\n if (updatedProps.hasOwnProperty('selected') /*|| updatedProps.hasOwnProperty('editable')*/) {\r\n\r\n } else {\r\n Object.assign(scope.$event, updatedEventViewModel);\r\n scope.timestamp = new Date().getTime();\r\n\r\n debug('Updated event scope', { eventId: event.id, eventScopeId: scope.$id, eventElementId: eventElementId })\r\n }\r\n }\r\n }\r\n\r\n function removeEventScope(eventId, eventElementId, element) {\r\n let eventRightClicked = eventRightClickedEventHandlers[eventElementId];\r\n if (eventRightClicked) {\r\n if (element) {\r\n element.removeEventListener('contextmenu', eventRightClicked);\r\n }\r\n delete eventRightClickedEventHandlers[eventElementId];\r\n }\r\n\r\n if (eventTemplates[eventElementId]) {\r\n delete eventTemplates[eventElementId];\r\n }\r\n\r\n let eventElement = eventElements[eventElementId];\r\n if (eventElement) {\r\n eventElement.remove();\r\n delete eventElements[eventElementId];\r\n }\r\n\r\n let eventScope = eventScopes[eventElementId];\r\n if (eventScope) {\r\n eventScope.$destroy()\r\n delete eventScopes[eventElementId];\r\n debug(`Removed event scope`, { eventId: eventId, scopeId: eventScope.$id, eventElementId: eventElementId })\r\n debugState.numRemovedScopes++;\r\n }\r\n\r\n if (state.debug) {\r\n countScopes();\r\n }\r\n }\r\n\r\n function createEventViewModel(event, isResizing) {\r\n return new FullCalendarEventViewModel({\r\n event: event,\r\n isResizing: isResizing,\r\n selected: event.groupId === selectedEventsGroupId,\r\n calendarState: state\r\n });\r\n }\r\n\r\n function getEventTemplate(event, eventElementId, viewType) {\r\n if (!eventTemplates[eventElementId]) {\r\n\r\n var eventSource = eventSources[event.source.id];\r\n\r\n if (eventSource) {\r\n\r\n // check for view specific template\r\n eventTemplate = eventSource.eventTemplates[viewType];\r\n\r\n if (!eventTemplate) {\r\n // check for default template\r\n eventTemplate = eventSource.eventTemplates['default'];\r\n }\r\n }\r\n\r\n if (!eventTemplate) {\r\n // set default template\r\n eventTemplate = defaultEventTemplate;\r\n }\r\n\r\n eventTemplates[eventElementId] = eventTemplate;\r\n }\r\n\r\n return eventTemplates[eventElementId];\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Events\r\n\r\n function addEvent(event, eventSourceId) {\r\n event.editable = isEditable();\r\n return calendar.addEvent(event, eventSourceId);\r\n }\r\n\r\n function updateEvent(calendarEvent, updatedProperties) {\r\n debug('Updating event properties', updatedProperties);\r\n\r\n let groupId = resetEventGroup(calendarEvent);\r\n\r\n if (updatedProperties['allDay'] !== undefined) {\r\n // Workaround: since FullCalendar resets start and end dates to 00:00:00\r\n // when allDay is set to false we need to set this property first\r\n setEventAllday(calendarEvent, updatedProperties['allDay']);\r\n delete updatedProperties['allDay'];\r\n }\r\n\r\n for (var updatedPropName in updatedProperties) {\r\n var updatedPropValue = updatedProperties[updatedPropName];\r\n\r\n switch (updatedPropName) {\r\n case 'start':\r\n setEventStart(calendarEvent, updatedPropValue);\r\n break;\r\n case 'end':\r\n setEventEnd(calendarEvent, updatedPropValue);\r\n break;\r\n case 'extendedProps':\r\n Object.keys(updatedPropValue).forEach((updatedExtendedPropName) => {\r\n var updatedExtendedPropValue = updatedPropValue[updatedExtendedPropName];\r\n if (!_.isEqual(updatedExtendedPropValue, calendarEvent.extendedProps[updatedExtendedPropName])) {\r\n setEventExtendedProp(calendarEvent, updatedExtendedPropName, updatedExtendedPropValue);\r\n } else {\r\n delete updatedPropValue[updatedExtendedPropName];\r\n }\r\n });\r\n break;\r\n default:\r\n setEventProp(calendarEvent, updatedPropName, updatedPropValue);\r\n break;\r\n }\r\n }\r\n\r\n if (groupId) {\r\n setEventGroup(calendarEvent, groupId);\r\n }\r\n }\r\n\r\n function removeEventsFromCalendar(eventSourceId) {\r\n calendar.batchRendering(() => {\r\n calendar.getEvents().filter((e) => e.source.id === eventSourceId).forEach(e => e.remove());\r\n })\r\n }\r\n\r\n function removeAllEventsFromCalendar() {\r\n calendar.batchRendering(() => {\r\n calendar.getEvents().forEach(e => e.remove());\r\n })\r\n }\r\n\r\n function createEventRightClickEventHandler(event, targetElement) {\r\n return function (e) {\r\n e.preventDefault();\r\n\r\n if (hasSelectedEvents() && !selectedEvents[event.id]) {\r\n resetSelectedEvents();\r\n }\r\n\r\n $timeout(() => {\r\n executeCallbackOnEventSourceWithId(event.source.id, 'eventRightClicked', { eventId: event.extendedProps.id, eventStart: event.start, eventEnd: event.end, target: targetElement });\r\n });\r\n\r\n return false;\r\n }\r\n }\r\n\r\n // #region Event getters\r\n\r\n function getEventByExternalId(eventSourceId, eventId) {\r\n return calendar.getEventById(FullCalendarEvent.getInternalEventId(eventSourceId, eventId));\r\n }\r\n\r\n function getEventIdsGroupedBySourceId(events) {\r\n var groupedEvents = {};\r\n\r\n events.forEach(function (event) {\r\n if (event.sourceId) {\r\n var sourceId = event.sourceId;\r\n\r\n if (!groupedEvents[sourceId]) {\r\n groupedEvents[sourceId] = [];\r\n }\r\n\r\n groupedEvents[sourceId].push(event.extendedProps.id);\r\n }\r\n });\r\n\r\n return groupedEvents;\r\n }\r\n\r\n function getEventsGroupedBySourceId(events) {\r\n var groupedEvents = {};\r\n\r\n events.forEach(function (event) {\r\n if (event.sourceId) {\r\n var sourceId = event.sourceId;\r\n\r\n if (!groupedEvents[sourceId]) {\r\n groupedEvents[sourceId] = [];\r\n }\r\n\r\n groupedEvents[sourceId].push(event);\r\n }\r\n });\r\n\r\n return groupedEvents;\r\n }\r\n\r\n function getEventCopy(evt) {\r\n return {\r\n id: generateGUID(),\r\n start: evt.start,\r\n end: evt.end,\r\n textColor: evt.textColor,\r\n backgroundColor: evt.backgroundColor,\r\n borderColor: evt.borderColor,\r\n classNames: angular.copy(evt.classNames),\r\n extendedProps: angular.copy(evt.extendedProps)\r\n }\r\n }\r\n\r\n function getUpdatedProperties(calendarEvent, updatedEvent) {\r\n var updatedTopLevelProperties = {};\r\n\r\n for (var prop in updatedEvent) {\r\n if (updatedEvent.hasOwnProperty(prop) && calendarEvent[prop] !== undefined) {\r\n if (!_.isEqual(updatedEvent[prop], calendarEvent[prop])) {\r\n updatedTopLevelProperties[prop] = updatedEvent[prop];\r\n }\r\n }\r\n }\r\n\r\n return updatedTopLevelProperties;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Event setters\r\n\r\n function setEventStart(event, start) {\r\n event.setStart(start);\r\n debug(`Set event start = ${start} on event ${event.id}`);\r\n }\r\n\r\n function setEventEnd(event, end) {\r\n event.setEnd(end);\r\n debug(`Set event end = ${end} on event ${event.id}`);\r\n }\r\n\r\n function setEventAllday(event, allday) {\r\n event.setAllDay(allday/*, { maintainDuration: true }*/);\r\n debug(`Set event allDay = ${allday} on event ${event.id}`);\r\n }\r\n\r\n function setEventDates(event, start, end) {\r\n event.setDates(start, end);\r\n debug(`Set event dates ${start} - ${end} on event ${event.id}`);\r\n }\r\n\r\n function setEventProp(event, propName, value) {\r\n event.setProp(propName, value);\r\n debug(`Set event property '${propName}' = ${value} on event ${event.id}`);\r\n }\r\n\r\n function setEventExtendedProp(event, propName, value) {\r\n event.setExtendedProp(propName, value);\r\n debug(`Set event extended property '${propName}' = ${value} on event ${event.id}`);\r\n }\r\n\r\n function setEventGroup(event, groupId) {\r\n setEventProp(event, 'groupId', groupId);\r\n }\r\n\r\n function resetEventGroup(event) {\r\n let groupId = event.groupId;\r\n if (groupId) {\r\n setEventGroup(event, '');\r\n }\r\n\r\n return groupId;\r\n }\r\n\r\n function setEventEditable(event, editable) {\r\n setEventProp(event, 'editable', editable);\r\n }\r\n\r\n function updateEditableEvents() {\r\n let eventSourcesToUpdate = Object.values(eventSources).filter(es => hasValue(es.callbacks));\r\n let calendarEditable = isEditable();\r\n if (eventSourcesToUpdate.length > 0) {\r\n calendar.batchRendering(() => {\r\n let events = calendar.getEvents();\r\n\r\n eventSourcesToUpdate.forEach(es => {\r\n let esEvents = events.filter(e => e.source.id == es.id);\r\n let esActive = es.id === state.activeEventSource.id;\r\n let display = esActive ? 'auto' : 'background';\r\n\r\n esEvents.forEach(e => {\r\n if (es.backgroundEventsWhenNotActive) {\r\n setEventProp(e, 'display', display)\r\n }\r\n\r\n setEventEditable(e, esActive && calendarEditable && !e.extendedProps.readOnly);\r\n });\r\n })\r\n })\r\n }\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Event selection\r\n\r\n function addSelectedEvent(event) {\r\n setEventGroup(event, selectedEventsGroupId);\r\n selectedEvents[event.id] = event;\r\n\r\n ctrl.onEventsSelected({ events: getEventsById([event.extendedProps]) });\r\n\r\n onSelectedEventsChanged();\r\n }\r\n\r\n function addSelectedEvents(events, skipBatchRendering) {\r\n\r\n if (skipBatchRendering) {\r\n events.forEach(event => {\r\n setEventGroup(event, selectedEventsGroupId);\r\n selectedEvents[event.id] = event;\r\n });\r\n } else {\r\n calendar.batchRendering(() => {\r\n events.forEach(event => {\r\n setEventGroup(event, selectedEventsGroupId);\r\n selectedEvents[event.id] = event;\r\n });\r\n });\r\n }\r\n\r\n ctrl.onEventsSelected({ events: getEventsById(getSelectedEvents()) });\r\n\r\n onSelectedEventsChanged();\r\n }\r\n\r\n function removeSelectedEvent(event) {\r\n calendar.batchRendering(() => {\r\n setEventGroup(event, '');\r\n\r\n delete selectedEvents[event.id];\r\n\r\n Object.values(selectedEvents).forEach(event => {\r\n setEventGroup(event, selectedEventsGroupId);\r\n });\r\n });\r\n\r\n ctrl.onEventsDeselected({ events: getEventsById([event.extendedProps]) });\r\n\r\n onSelectedEventsChanged();\r\n }\r\n\r\n function resetSelectedEvents() {\r\n \r\n if (hasSelectedEvents()) {\r\n let deselectedEventsById = {};\r\n\r\n calendar.batchRendering(() => {\r\n Object.keys(selectedEvents).forEach(selectedEventId => {\r\n var event = calendar.getEventById(selectedEventId);\r\n if (event) {\r\n setEventGroup(event, '');\r\n //removeEventClassName(event, selectedClass);\r\n }\r\n });\r\n\r\n deselectedEventsById = getEventsById(getSelectedEvents());\r\n selectedEvents = {};\r\n });\r\n\r\n ctrl.onEventsDeselected({ events: deselectedEventsById });\r\n\r\n onSelectedEventsChanged();\r\n }\r\n }\r\n\r\n function selectAllEvents() {\r\n addSelectedEvents(calendar.getEvents().filter(e => isEventSelectable(e)));\r\n }\r\n\r\n function onSelectedEventsChanged() {\r\n\r\n let selectedEvents = getSelectedEvents();\r\n\r\n let selectedEventsById = getEventsById(selectedEvents);\r\n\r\n ctrl.onSelectedEventsChanged({ events: selectedEventsById });\r\n\r\n let selectedEventIdsBySourceId = getEventIdsGroupedBySourceId(selectedEvents);\r\n\r\n Object.values(eventSources).forEach(eventSource =>\r\n executeCallbackOnEventSource(eventSource, 'eventsSelected', selectedEventIdsBySourceId[eventSource.id] ? selectedEventIdsBySourceId[eventSource.id] : [])\r\n );\r\n }\r\n\r\n function hasSelectedEvents() {\r\n return Object.keys(selectedEvents).length > 0;\r\n }\r\n\r\n function getSelectedEvents() {\r\n return Object.values(selectedEvents).map((event) => {\r\n return {\r\n id: event.extendedProps.id,\r\n start: event.start,\r\n end: event.end,\r\n //textColor: event.textColor,\r\n //backgroundColor: event.backgroundColor,\r\n //borderColor: event.borderColor,\r\n //classNames: angular.copy(event.classNames),\r\n sourceId: event.source.id,\r\n extendedProps: angular.copy(event.extendedProps)\r\n }\r\n });\r\n }\r\n\r\n function getEventsById(events) {\r\n return events.reduce((acc, e) => {\r\n acc[e.id] = e; return acc;\r\n }, {});\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Misc event helpers\r\n\r\n function requireEventId(eventId) {\r\n if (!hasValue(eventId)) {\r\n throw new Error('eventId not set');\r\n }\r\n }\r\n\r\n function isEventEditable(event) {\r\n return isEditable() && (event.startEditable || event.durationEditable);\r\n }\r\n\r\n function isEventSelectable(event) {\r\n\r\n if (!isEditable()) return false;\r\n\r\n var eventSource = eventSources[event.source.id];\r\n\r\n return eventSource && eventSource.id == state.activeEventSource.id && eventSource.selectable &&\r\n event.extendedProps.selectable !== false;\r\n }\r\n\r\n function addTemporaryEvent(eventToCopy, sourceId) {\r\n temporaryEvents.push(addEvent(getEventCopy(calendar.getEventById(eventToCopy.id)), eventToCopy.source.id));\r\n }\r\n\r\n function removeTemporaryEvents() {\r\n if (hasTemporaryEvents()) {\r\n calendar.batchRendering(() => {\r\n temporaryEvents.forEach((tmpEvent) => {\r\n tmpEvent.remove();\r\n });\r\n temporaryEvents = [];\r\n });\r\n }\r\n }\r\n\r\n function hasTemporaryEvents() {\r\n return temporaryEvents.length > 0;\r\n }\r\n\r\n // #endregion\r\n\r\n // #endregion\r\n\r\n // #region Event sources\r\n\r\n function activeEventSourceHasCallback(callbackName) {\r\n return eventSourceHasCallback(state.activeEventSource, callbackName);\r\n }\r\n\r\n function eventSourceHasCallback(eventSource, callbackName) {\r\n return eventSource && eventSource.callbacks && eventSource.callbacks[callbackName];\r\n }\r\n\r\n function executeCallbackOnEventSource(eventSource, callbackName) {\r\n if (eventSourceHasCallback(eventSource, callbackName)) {\r\n return eventSource.callbacks[callbackName].apply(this, Object.values(arguments).slice(2));\r\n }\r\n }\r\n\r\n function executeCallbackOnEventSourceWithId(eventSourceId, callbackName) {\r\n\r\n let args = [eventSources[eventSourceId], callbackName].concat(Object.values(arguments).slice(2));\r\n\r\n return executeCallbackOnEventSource.apply(this, args);\r\n }\r\n\r\n function executeCallbackOnActiveEventSource(callbackName) {\r\n let args = [state.activeEventSource, callbackName].concat(Object.values(arguments).slice(1));\r\n\r\n return executeCallbackOnEventSource.apply(this, args);\r\n }\r\n\r\n function executeCallbackOnEventSources(callbackName) {\r\n let results = [];\r\n\r\n Object.values(eventSources).forEach(eventSource => {\r\n let args = [eventSource, callbackName].concat(Object.values(arguments).slice(1));\r\n\r\n var result = executeCallbackOnEventSource.apply(this, args);\r\n if (result !== undefined) {\r\n results.push(result);\r\n }\r\n });\r\n\r\n return results;\r\n }\r\n\r\n function executeEventCallbackByEventSource(callbackName, events) {\r\n\r\n let results = [];\r\n let eventsBySourceId = getEventsGroupedBySourceId(events);\r\n\r\n Object.keys(eventsBySourceId).forEach(eventSourceId => {\r\n var result = executeCallbackOnEventSourceWithId(eventSourceId, callbackName, eventsBySourceId[eventSourceId]);\r\n if (result !== undefined) {\r\n results.push(result);\r\n }\r\n });\r\n\r\n return results;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Calendar helpers\r\n\r\n function render() {\r\n debug('render()');\r\n calendar.render();\r\n }\r\n\r\n function isEditable() {\r\n return calendar.getOption('editable');\r\n }\r\n\r\n function isValidView(viewId) {\r\n return ctrl.options.views.find((v) => v.id === viewId);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region AngularJS helpers\r\n\r\n function wrapFunctionWithScopeApply(functionToWrap) {\r\n return function () {\r\n // This may happen outside of angular context, so create one if outside.\r\n if ($scope.$root.$$phase) {\r\n return functionToWrap.apply(this, arguments);\r\n }\r\n\r\n var args = arguments;\r\n var that = this;\r\n return $scope.$root.$apply(\r\n function () {\r\n return functionToWrap.apply(that, args);\r\n }\r\n );\r\n };\r\n }\r\n\r\n function countScopes() {\r\n var totalScopes = 0;\r\n\r\n // Function to recursively count scopes\r\n function countScopesRecursive(scope) {\r\n totalScopes++;\r\n if (scope.$$childHead) {\r\n countScopesRecursive(scope.$$childHead);\r\n }\r\n if (scope.$$nextSibling) {\r\n countScopesRecursive(scope.$$nextSibling);\r\n }\r\n }\r\n\r\n // Start counting from the root scope\r\n var rootElement = document.querySelector('[ng-app]');\r\n var rootScope = angular.element(rootElement).scope();\r\n\r\n countScopesRecursive(rootScope);\r\n debug('Total scopes:', totalScopes);\r\n }\r\n\r\n // #endregion\r\n\r\n // #region JS event helpers\r\n\r\n function isAltKeyPressed(info) {\r\n return info.jsEvent.altKey;\r\n }\r\n\r\n function isCtrlKeyPressed(info) {\r\n return info.jsEvent.ctrlKey;\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Workarounds\r\n\r\n function executeRemovedEventScopeWorkaround(event, element, viewType) {\r\n // Workaround to handle the fact that FullCalendar calls eventWillUnmount() but NOT eventContent()\r\n // if events remain unchanged after a drag or resize operation (i.e. ends up the same length and in the same position).\r\n // Event scope is destroyed in eventWillUnmount() and not recreated again resulting in blank events with no content.\r\n // By calling render() we force the calendar to re-render the events.\r\n // There may be a better solution but this should work for now.\r\n $timeout(() => {\r\n if (!eventScopes[element.id]) {\r\n //recreateEventScope(event, element, viewType);\r\n render();\r\n }\r\n });\r\n }\r\n\r\n // #endregion\r\n\r\n // #region Debugging\r\n\r\n function debug() {\r\n if (state.debug) {\r\n console.debug.apply(this, ['[fullCalendar]'].concat(Object.values(arguments)));\r\n }\r\n }\r\n\r\n function getViewState(view) {\r\n return {\r\n type: view.type,\r\n start: view.activeStart.toISOString(),\r\n end: view.activeEnd.toISOString()\r\n }\r\n }\r\n\r\n // #endregion\r\n }]\r\n });\r\n})();\r\n","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'whistleblowerReportService';\r\n angular.module('app').factory(serviceId, [\r\n 'requestHelper', 'logger',\r\n function (requestHelper, logger) {\r\n\r\n var getBaseApiUrl = function() {\r\n return 'api/whistleblowerreports';\r\n }\r\n\r\n var log = logger.getLogger(serviceId);\r\n var isProductFeatureEnabled = function (customerGuid) {\r\n return requestHelper.get(getBaseApiUrl(), customerGuid + '/isproductfeatureenabled');\r\n };\r\n\r\n var createReport = function (customerGuid, params) {\r\n return requestHelper.post(getBaseApiUrl(), customerGuid, params);\r\n };\r\n\r\n var getReport = function (customerGuid, publicGuid) {\r\n return requestHelper.get(getBaseApiUrl(), customerGuid + '/' + publicGuid);\r\n };\r\n\r\n return {\r\n getBaseApiUrl: getBaseApiUrl,\r\n isProductFeatureEnabled: isProductFeatureEnabled,\r\n createReport: createReport,\r\n getReport: getReport\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportAuthor';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n author: '<',\r\n date: '<'\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/whistleblower-report-author.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportSubmitForm';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n body: '?reportBody'\r\n },\r\n bindings: {\r\n customerGuid: '<',\r\n options: '<',\r\n onSubmitted: '&',\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/whistleblower-report-submit-form.component.html',\r\n controller: ['$scope', '$timeout', 'logger', 'whistleblowerReportService',\r\n function ($scope, $timeout, logger, whistleblowerReportService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n ctrl.modelDefaults = {\r\n title: undefined,\r\n description: undefined,\r\n submittedBy: {}\r\n };\r\n\r\n $scope.model = {};\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n $scope.report = undefined;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n ctrl.options = merge(ctrl.options, defaultOptions);\r\n }\r\n }\r\n\r\n ctrl.init = function (formCtrl) {\r\n\r\n }\r\n\r\n ctrl.submit = function (model) {\r\n\r\n if (!model.submittedBy.email) {\r\n delete model.submittedBy;\r\n }\r\n\r\n return whistleblowerReportService.createReport(ctrl.customerGuid, { model: model })\r\n .then(function (response) {\r\n log.success('Anmälan skickad');\r\n\r\n $scope.report = response;\r\n\r\n ctrl.onSubmitted({ data: $scope.report });\r\n });\r\n }\r\n\r\n ctrl.onPropertyChanged = function (propName, value) {\r\n $scope.model[propName] = value;\r\n }\r\n\r\n ctrl.changeAnonymity = function (e) {\r\n\r\n if ($scope.model.submittedBy &&\r\n ($scope.model.submittedBy.firstName ||\r\n $scope.model.submittedBy.lastName ||\r\n $scope.model.submittedBy.email ||\r\n $scope.model.submittedBy.phone)) {\r\n confirmFormSectionRemoval(e, $scope.model.submittedBy);\r\n }\r\n };\r\n\r\n ctrl.onAnonymityChanged = function (e) {\r\n\r\n $timeout(function () {\r\n\r\n if ($scope.model.submittedBy.anonymous === true) {\r\n delete $scope.model.submittedBy.firstName;\r\n delete $scope.model.submittedBy.lastName;\r\n delete $scope.model.submittedBy.email;\r\n delete $scope.model.submittedBy.phone;\r\n }\r\n });\r\n };\r\n\r\n function confirmFormSectionRemoval(e, section) {\r\n if (e.target.tagName === 'INPUT' && section && !confirm('Är du säker? Ifylld information i detta avsnitt går förlorad.')) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReport';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n publicGuid: '<',\r\n customerGuid: '<',\r\n options: '<',\r\n onLoaded: '&',\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/whistleblower-report.component.html',\r\n controller: ['$scope', 'logger', 'whistleblowerReportService',\r\n function ($scope, logger, whistleblowerReportService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n\r\n ctrl.report = undefined;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n\r\n if (changes.publicGuid) {\r\n loadData();\r\n }\r\n }\r\n\r\n ctrl.refresh = function () {\r\n loadData();\r\n }\r\n\r\n function loadData() {\r\n if (ctrl.customerGuid && ctrl.publicGuid) {\r\n busy(true);\r\n return whistleblowerReportService.getReport(ctrl.customerGuid, ctrl.publicGuid).then(function (response) {\r\n ctrl.report = response;\r\n\r\n ctrl.onLoaded({ data: ctrl.report });\r\n\r\n busy(false);\r\n }, handleError);\r\n }\r\n }\r\n\r\n function busy(busy, busyText) {\r\n $scope.busy = busy;\r\n $scope.busyText = busyText;\r\n }\r\n\r\n var handleError = function (error) {\r\n busy(false);\r\n\r\n throw error;\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'whistleblowerReportHeaderCtrl';\r\n\r\n angular.module('app').controller(controllerId, [\r\n '$scope', '$rootScope', '$routeParams', 'logger', 'publicCustomerService',\r\n function ($scope, $rootScope, $routeParams, logger, publicCustomerService) {\r\n\r\n var log = logger.getLogger(controllerId);\r\n\r\n $scope.$on('$routeChangeSuccess', function (next, current) {\r\n\r\n $scope.customerGuid = $routeParams.customerGuid;\r\n\r\n if ($scope.customerGuid) {\r\n publicCustomerService.getCustomer($scope.customerGuid).then(function (response) {\r\n $scope.customer = response;\r\n })\r\n }\r\n \r\n });\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'whistleblowerReportSubmitCtrl';\r\n\r\n angular.module('app').controller(controllerId, [\r\n '$scope', '$rootScope', '$routeParams', 'locationService', 'logger', 'whistleblowerReportService',\r\n function ($scope, $rootScope, $routeParams, locationService, logger, whistleblowerReportService) {\r\n\r\n var log = logger.getLogger(controllerId);\r\n\r\n $scope.whistleblowerReportCaseType = {\r\n id: 2,\r\n name: \"Visselblåsaranmälan\",\r\n abbreviation: \"VB\",\r\n }\r\n\r\n $scope.onSubmitted = function (data) {\r\n $scope.report = data;\r\n\r\n $scope.reportUrl = locationService.getAbsolutePath('/whistleblowerreports/' + $scope.customerGuid + '/' + $scope.report.publicGuid);\r\n }\r\n\r\n $scope.customerGuid = $routeParams.customerGuid;\r\n\r\n whistleblowerReportService.isProductFeatureEnabled($scope.customerGuid).then(function (response) {\r\n $scope.productFeatureEnabled = response;\r\n });\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var controllerId = 'whistleblowerReportCtrl';\r\n\r\n angular.module('app').controller(controllerId, [\r\n '$scope', '$rootScope', '$routeParams', 'logger', 'whistleblowerReportService',\r\n function ($scope, $rootScope, $routeParams, logger, whistleblowerReportService) {\r\n\r\n var log = logger.getLogger(controllerId);\r\n\r\n $scope.onLoaded = function (data) {\r\n $scope.report = data;\r\n }\r\n\r\n $scope.customerGuid = $routeParams.customerGuid;\r\n $scope.publicGuid = $routeParams.publicReportGuid;\r\n\r\n whistleblowerReportService.isProductFeatureEnabled($scope.customerGuid).then(function (response) {\r\n $scope.productFeatureEnabled = response;\r\n });\r\n }\r\n ]);\r\n})();","(function () {\r\n 'use strict';\r\n\r\n var serviceId = 'whistleblowerReportCommentService';\r\n angular.module('app').factory(serviceId, [\r\n 'requestHelper', 'logger',\r\n function (requestHelper, logger) {\r\n\r\n var getBaseApiUrl = function (customerGuid, publicGuid) {\r\n return 'api/whistleblowerreports/' + customerGuid + '/' + publicGuid + '/comments';\r\n }\r\n\r\n var log = logger.getLogger(serviceId);\r\n\r\n var getUserAccess = function (customerGuid, publicGuid) {\r\n return requestHelper.get(getBaseApiUrl(customerGuid, publicGuid), 'useraccess');\r\n };\r\n\r\n var addComment = function (customerGuid, publicGuid, params) {\r\n return requestHelper.post(getBaseApiUrl(customerGuid, publicGuid), '', params);\r\n };\r\n\r\n var getCommentFilters = function (customerGuid, publicGuid) {\r\n return requestHelper.get(getBaseApiUrl(customerGuid, publicGuid), 'filters');\r\n };\r\n\r\n var getComments = function (customerGuid, publicGuid, params) {\r\n return requestHelper.get(getBaseApiUrl(customerGuid, publicGuid), '', params);\r\n };\r\n\r\n var getComment = function (customerGuid, publicGuid, commentId) {\r\n return requestHelper.get(getBaseApiUrl(customerGuid, publicGuid), commentId);\r\n };\r\n\r\n var updateComment = function (customerGuid, publicGuid, commentId, updateModel) {\r\n return requestHelper.put(getBaseApiUrl(customerGuid, publicGuid), commentId, updateModel);\r\n }\r\n\r\n var removeComment = function (customerGuid, publicGuid, commentId) {\r\n return requestHelper.remove(getBaseApiUrl(customerGuid, publicGuid), commentId);\r\n }\r\n\r\n return {\r\n getBaseApiUrl: getBaseApiUrl,\r\n getUserAccess: getUserAccess,\r\n addComment: addComment,\r\n getCommentFilters: getCommentFilters,\r\n getComments: getComments,\r\n getComment: getComment,\r\n updateComment: updateComment,\r\n removeComment: removeComment\r\n };\r\n }\r\n ]);\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportCommentAddForm';\r\n\r\n app.component(componentId, {\r\n require: {\r\n 'dropdownCtrl': '?^dropdown'\r\n },\r\n bindings: {\r\n customerGuid: '<',\r\n reportGuid: '<',\r\n replyToComment: '<',\r\n options: '<',\r\n onAdded: '&',\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/comments/whistleblower-report-comment-add-form.component.html',\r\n controller: ['$scope', '$transclude', '$timeout', 'logger', 'whistleblowerReportCommentService',\r\n function ($scope, $transclude, $timeout, logger, whistleblowerReportCommentService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n ctrl.modelDefaults = {\r\n subject: undefined,\r\n body: undefined\r\n };\r\n\r\n $scope.model = {};\r\n\r\n $scope.$on('commentList.refresh', function () {\r\n ctrl.formCtrl.reset();\r\n });\r\n\r\n var defaultOptions = {\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n setupOptions();\r\n\r\n setupReplyToCommentId();\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n setupOptions();\r\n }\r\n\r\n if (changes.replyToComment) {\r\n setupReplyToCommentId();\r\n }\r\n }\r\n\r\n ctrl.init = function (formCtrl) {\r\n ctrl.formCtrl = formCtrl;\r\n }\r\n\r\n ctrl.onPropertyChanged = function (propName, value) {\r\n $scope.model[propName] = value;\r\n }\r\n\r\n ctrl.submit = function (model) {\r\n return whistleblowerReportCommentService.addComment(\r\n ctrl.customerGuid,\r\n ctrl.reportGuid,\r\n { model: model }\r\n )\r\n .then(function (response) {\r\n log.success('Kommentaren sparades');\r\n\r\n $scope.comment = response;\r\n\r\n ctrl.onAdded({ comment: $scope.comment });\r\n });\r\n }\r\n\r\n var setupOptions = function () {\r\n if (ctrl.options) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n\r\n var setupReplyToCommentId = function () {\r\n if (ctrl.replyToComment) {\r\n $scope.model.replyToCommentId = ctrl.replyToComment.id;\r\n } else {\r\n $scope.model.replyToCommentId = undefined;\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportCommentAuthor';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n comment: '<',\r\n options: '<'\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/comments/whistleblower-report-comment-author.component.html',\r\n controller: ['$scope',\r\n function ($scope) {\r\n\r\n var ctrl = this;\r\n\r\n var defaultOptions = {\r\n \r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportCommentListItem';\r\n\r\n app.component(componentId, {\r\n bindings: {\r\n customerGuid: '<',\r\n reportGuid: '<',\r\n comment: '<',\r\n userAccess: '<',\r\n options: '<',\r\n onReply: '&',\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/comments/whistleblower-report-comment-list-item.component.html',\r\n controller: ['$scope', '$transclude', 'logger',\r\n function ($scope, $transclude, logger) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n var defaultOptions = {\r\n readOnly: false,\r\n repliesCollapsed: true\r\n };\r\n\r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n\r\n ctrl.repliesCollapsed = ctrl.options.repliesCollapsed;\r\n\r\n $scope.data = undefined;\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }\r\n\r\n ctrl.reply = function (comment) {\r\n ctrl.onReply({ comment: comment });\r\n }\r\n }]\r\n });\r\n})();","(function () {\r\n var app = angular.module('app');\r\n\r\n var componentId = 'whistleblowerReportCommentList';\r\n\r\n app.component(componentId, {\r\n transclude: {\r\n header: '?whistleblowerReportCommentListHeader'\r\n },\r\n bindings: {\r\n customerGuid: '<',\r\n reportGuid: '<',\r\n user: '<',\r\n options: '<'\r\n },\r\n templateUrl:\r\n '/client/public/components/cases/whistleblower-reports/comments/whistleblower-report-comment-list.component.html',\r\n controller: ['$scope', '$transclude', 'logger', 'locationService', 'whistleblowerReportCommentService',\r\n function ($scope, $transclude, logger, locationService, whistleblowerReportCommentService) {\r\n\r\n var ctrl = this;\r\n\r\n var log = logger.getLogger(componentId);\r\n\r\n $scope.headerSlotFilled = $transclude.isSlotFilled('header');\r\n\r\n var defaultOptions = {\r\n defaultPageSize: 15\r\n };\r\n\r\n ctrl.onCommentListInit = function (listCtrl) {\r\n ctrl.commentListCtrl = listCtrl;\r\n\r\n whistleblowerReportCommentService.getUserAccess(ctrl.customerGuid, ctrl.reportGuid).then(function (response) {\r\n ctrl.userAccess = response;\r\n }, ctrl.commentListCtrl.handleError);\r\n\r\n var hash = locationService.getHash();\r\n if (hash && hash.startsWith('comment_')) {\r\n ctrl.commentListCtrl.scrollToElement(hash);\r\n }\r\n }\r\n\r\n ctrl.getCommentFilters = function (params) {\r\n return whistleblowerReportCommentService.getCommentFilters(ctrl.customerGuid, ctrl.reportGuid);\r\n }\r\n\r\n ctrl.getComments = function (params) {\r\n return whistleblowerReportCommentService.getComments(ctrl.customerGuid, ctrl.reportGuid, params);\r\n }\r\n\r\n ctrl.onDataLoaded = function ( data, params, fullReload ) {\r\n log.debug('Data received', data);\r\n }\r\n \r\n ctrl.$onInit = function () {\r\n\r\n if (!ctrl.options) {\r\n ctrl.options = defaultOptions;\r\n }\r\n };\r\n\r\n ctrl.$onChanges = function (changes) {\r\n\r\n if (changes.options) {\r\n if (changes.options.currentValue) {\r\n _.defaultsDeep(ctrl.options, defaultOptions);\r\n } else {\r\n ctrl.options = defaultOptions;\r\n }\r\n }\r\n }\r\n\r\n ctrl.onCommentAdded = function (comment) {\r\n ctrl.commentListCtrl.refresh().then(function () {\r\n ctrl.commentListCtrl.scrollToElement('comment_' + comment.id);\r\n });\r\n }\r\n\r\n ctrl.onCommentUpdated = function (comment) {\r\n ctrl.commentListCtrl.refresh();\r\n }\r\n }]\r\n });\r\n})();"]}