2021-01-02 01:13:34 +01:00
< app-page-header title = "Settings" i18n-title >
2022-09-21 23:17:24 -07:00
< button class = "btn btn-sm btn-outline-primary" ( click )=" tourService . start ()" >< ng-container i18n > Start tour</ ng-container ></ button >
2022-11-10 21:04:29 -08:00
< a class = "btn btn-sm btn-primary ms-3" href = "admin/" target = "_blank" >
< ng-container i18n > Open Django Admin</ ng-container >
< svg class = "sidebaricon ms-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#arrow-up-right" />
</ svg >
</ a >
2020-10-27 01:10:18 +01:00
</ app-page-header >
2020-11-04 19:28:08 +01:00
< form [ formGroup ]=" settingsForm " ( ngSubmit )=" saveSettings ()" >
2022-11-18 20:23:40 -08:00
< ul ngbNav # nav = "ngbNav" ( navChange )=" onNavChange ($ event )" [( activeId )]=" activeNavID " class = "nav-tabs" >
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . General " >
2022-04-17 00:36:47 -07:00
< a ngbNavLink i18n > General</ a >
2020-11-04 19:28:08 +01:00
< ng-template ngbNavContent >
2020-12-27 23:05:19 -08:00
< h4 i18n > Appearance</ h4 >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-15 12:50:34 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Display language</ span >
</ div >
< div class = "col" >
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "displayLanguage" >
2021-01-25 23:16:18 -08:00
< option * ngFor = "let lang of displayLanguageOptions" [ ngValue ]=" lang . code " > {{lang.name}}< span * ngIf = "lang.code && currentLocale != 'en-US'" > - {{lang.englishName}}</ span ></ option >
2021-01-15 12:50:34 +01:00
</ select >
2022-05-25 16:06:59 -07:00
< small * ngIf = "displayLanguageIsDirty" class = "form-text text-primary" i18n > You need to reload the page after applying a new language.</ small >
2021-01-15 12:50:34 +01:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-17 00:15:45 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Date display</ span >
</ div >
< div class = "col" >
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "dateLocale" >
2021-02-17 12:15:22 +01:00
< option * ngFor = "let lang of dateLocaleOptions" [ ngValue ]=" lang . code " > {{lang.name}}< span * ngIf = "lang.code" > - {{today | customDate:'shortDate':null:lang.code}}</ span ></ option >
2021-01-17 00:15:45 +01:00
</ select >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-17 00:15:45 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Date format</ span >
</ div >
< div class = "col" >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatShort" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "shortDate" >
< label class = "form-check-label" for = "dateFormatShort" i18n > Short: {{today | customDate:'shortDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatMedium" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "mediumDate" >
< label class = "form-check-label" for = "dateFormatMedium" i18n > Medium: {{today | customDate:'mediumDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check" >
< input type = "radio" id = "dateFormatLong" name = "dateFormat" class = "form-check-input" formControlName = "dateFormat" value = "longDate" >
< label class = "form-check-label" for = "dateFormatLong" i18n > Long: {{today | customDate:'longDate':null:computedDateLocale}}</ label >
2021-01-17 00:15:45 +01:00
</ div >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-11-04 19:28:08 +01:00
< div class = "col-md-3 col-form-label" >
2020-12-23 15:09:39 +01:00
< span i18n > Items per page</ span >
2020-11-04 19:28:08 +01:00
</ div >
< div class = "col" >
2020-12-27 23:05:19 -08:00
2022-03-01 12:25:22 -08:00
< select class = "form-select" formControlName = "documentListItemPerPage" >
2020-11-04 19:28:08 +01:00
< option [ ngValue ]=" 10 " > 10</ option >
< option [ ngValue ]=" 25 " > 25</ option >
< option [ ngValue ]=" 50 " > 50</ option >
< option [ ngValue ]=" 100 " > 100</ option >
</ select >
2020-12-27 23:05:19 -08:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2021-01-14 13:35:21 +01:00
< div class = "col-md-3 col-form-label" >
< span i18n > Document editor</ span >
</ div >
< div class = "col" >
< app-input-check i18n-title title = "Use PDF viewer provided by the browser" i18n-hint hint = "This is usually faster for displaying large PDF documents, but it might not work on some browsers." formControlName = "useNativePdfViewer" ></ app-input-check >
</ div >
</ div >
2022-09-12 15:26:34 -07:00
< div class = "row mb-3" >
< div class = "col-md-3 col-form-label" >
< span i18n > Sidebar</ span >
</ div >
< div class = "col" >
< app-input-check i18n-title title = "Use 'slim' sidebar (icons only)" formControlName = "slimSidebarEnabled" ></ app-input-check >
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-27 23:05:19 -08:00
< div class = "col-md-3 col-form-label" >
< span i18n > Dark mode</ span >
</ div >
< div class = "col" >
2021-01-14 13:35:21 +01:00
< app-input-check i18n-title title = "Use system settings" formControlName = "darkModeUseSystem" ></ app-input-check >
< app-input-check [ hidden ]=" settingsForm . value . darkModeUseSystem " i18n-title title = "Enable dark mode" formControlName = "darkModeEnabled" ></ app-input-check >
2021-02-28 12:42:46 +01:00
< app-input-check i18n-title title = "Invert thumbnails in dark mode" formControlName = "darkModeInvertThumbs" ></ app-input-check >
2020-11-04 19:28:08 +01:00
</ div >
</ div >
2022-03-09 14:12:28 -08:00
< div class = "row mb-3" >
< div class = "col-md-3 col-form-label" >
< span i18n > Theme Color</ span >
</ div >
2022-04-17 00:36:47 -07:00
< div class = "col col-md-3" >
2022-03-09 15:34:26 -08:00
< app-input-color i18n-title formControlName = "themeColor" [ error ]=" error ?. color " ></ app-input-color >
2022-03-09 14:12:28 -08:00
</ div >
< div class = "col-2" >
< button class = "btn btn-link btn-sm pt-2 ps-0" [ disabled ]="! this . settingsForm . get (' themeColor '). value " ( click )=" clearThemeColor ()" >
< svg width = "1em" height = "1em" viewBox = "0 0 16 16" class = "bi bi-x me-1" fill = "currentColor" xmlns = "http://www.w3.org/2000/svg" >
< path fill-rule = "evenodd" d = "M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z" />
</ svg >< ng-container i18n > Reset</ ng-container >
</ button >
</ div >
</ div >
2022-09-30 12:30:23 -07:00
< h4 class = "mt-4" id = "update-checking" i18n > Update checking</ h4 >
< div class = "row mb-3" >
< div class = "offset-md-3 col" >
< p i18n >
Update checking works by pinging the the public < a href = "https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest" target = "_blank" rel = "noopener noreferrer" > Github API</ a > for the latest release to determine whether a new version is available.< br />
Actual updating of the app must still be performed manually.
</ p >
< p i18n >
< em > No tracking data is collected by the app in any way.</ em >
</ p >
< app-input-check i18n-title title = "Enable update checking" formControlName = "updateCheckingEnabled" i18n-hint hint = "Note that for users of thirdy-party containers e.g. linuxserver.io this notification may be 'ahead' of the current third-party release." ></ app-input-check >
</ div >
</ div >
2020-12-29 16:58:19 -08:00
< h4 class = "mt-4" i18n > Bulk editing</ h4 >
2020-12-29 17:09:07 +01:00
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-29 16:58:19 -08:00
< div class = "offset-md-3 col" >
< app-input-check i18n-title title = "Show confirmation dialogs" formControlName = "bulkEditConfirmationDialogs" i18n-hint hint = "Deleting documents will always ask for confirmation." ></ app-input-check >
< app-input-check i18n-title title = "Apply on close" formControlName = "bulkEditApplyOnClose" ></ app-input-check >
</ div >
2022-08-07 15:05:58 -07:00
</ div >
< h4 class = "mt-4" i18n > Comments</ h4 >
< div class = "row mb-3" >
< div class = "offset-md-3 col" >
< app-input-check i18n-title title = "Enable comments" formControlName = "commentsEnabled" ></ app-input-check >
</ div >
2020-12-29 16:58:19 -08:00
</ div >
2020-12-29 17:09:07 +01:00
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2021-03-06 14:50:38 -08:00
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . Notifications " >
2021-02-02 14:06:16 +01:00
< a ngbNavLink i18n > Notifications</ a >
< ng-template ngbNavContent >
2021-03-06 14:50:38 -08:00
2021-02-02 14:06:16 +01:00
< h4 i18n > Document processing</ h4 >
2020-12-29 17:09:07 +01:00
2022-02-19 23:34:32 -08:00
< div class = "row mb-3" >
2020-12-29 16:58:19 -08:00
< div class = "offset-md-3 col" >
2021-02-02 14:06:16 +01:00
< app-input-check i18n-title title = "Show notifications when new documents are detected" formControlName = "notificationsConsumerNewDocument" ></ app-input-check >
< app-input-check i18n-title title = "Show notifications when document processing completes successfully" formControlName = "notificationsConsumerSuccess" ></ app-input-check >
< app-input-check i18n-title title = "Show notifications when document processing fails" formControlName = "notificationsConsumerFailed" ></ app-input-check >
< app-input-check i18n-title title = "Suppress notifications on dashboard" formControlName = "notificationsConsumerSuppressOnDashboard" i18n-hint hint = "This will suppress all messages about document processing status on the dashboard." ></ app-input-check >
2020-12-29 16:58:19 -08:00
</ div >
</ div >
2020-12-29 17:09:07 +01:00
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2021-02-02 14:06:16 +01:00
2022-11-12 14:46:57 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . SavedViews " ( mouseover )=" maybeInitializeTab ( SettingsNavIDs . SavedViews )" ( focusin )=" maybeInitializeTab ( SettingsNavIDs . SavedViews )" >
2020-12-23 15:09:39 +01:00
< a ngbNavLink i18n > Saved views</ a >
2020-11-04 19:28:08 +01:00
< ng-template ngbNavContent >
2020-12-15 02:35:04 +01:00
< div formGroupName = "savedViews" >
2020-12-27 23:05:19 -08:00
2022-02-19 23:34:32 -08:00
< div * ngFor = "let view of savedViews" [ formGroupName ]=" view . id " class = "row" >
2022-02-20 01:32:24 -08:00
< div class = "mb-3 col" >
2022-02-19 23:34:32 -08:00
< label class = "form-label" for = "name_{{view.id}}" i18n > Name</ label >
2020-12-15 02:35:04 +01:00
< input type = "text" class = "form-control" formControlName = "name" id = "name_{{view.id}}" >
</ div >
2022-02-20 01:32:24 -08:00
< div class = "mb-2 col" >
2022-02-19 23:34:32 -08:00
< label class = "form-label" for = "show_on_dashboard_{{view.id}}" i18n > Appears on</ label >
< div class = "form-check form-switch" >
< input type = "checkbox" class = "form-check-input" id = "show_on_dashboard_{{view.id}}" formControlName = "show_on_dashboard" >
< label class = "form-check-label" for = "show_on_dashboard_{{view.id}}" i18n > Show on dashboard</ label >
2020-12-15 02:35:04 +01:00
</ div >
2022-02-19 23:34:32 -08:00
< div class = "form-check form-switch" >
< input type = "checkbox" class = "form-check-input" id = "show_in_sidebar_{{view.id}}" formControlName = "show_in_sidebar" >
< label class = "form-check-label" for = "show_in_sidebar_{{view.id}}" i18n > Show in sidebar</ label >
2020-12-15 02:35:04 +01:00
</ div >
</ div >
2022-02-19 23:34:32 -08:00
< div class = "mb-2 col-auto" >
< label class = "form-label" for = "name_{{view.id}}" i18n > Actions</ label >
2020-12-23 15:09:39 +01:00
< button type = "button" class = "btn btn-sm btn-outline-danger form-control" ( click )=" deleteSavedView ( view )" i18n > Delete</ button >
2020-12-15 02:35:04 +01:00
</ div >
</ div >
2022-11-12 14:46:57 -08:00
< div * ngIf = "savedViews && savedViews.length == 0" i18n > No saved views defined.</ div >
< div * ngIf = "!savedViews" >
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" ></ div >
< div class = "visually-hidden" i18n > Loading...</ div >
</ div >
2020-12-27 23:05:19 -08:00
2020-12-15 02:35:04 +01:00
</ div >
2020-11-04 19:28:08 +01:00
</ ng-template >
</ li >
2022-11-08 03:39:54 -08:00
2022-11-12 15:14:58 -08:00
< li [ ngbNavItem ]=" SettingsNavIDs . Mail " ( mouseover )=" maybeInitializeTab ( SettingsNavIDs . Mail )" ( focusin )=" maybeInitializeTab ( SettingsNavIDs . Mail )" >
2022-11-10 21:04:29 -08:00
< a ngbNavLink i18n > Mail</ a >
2022-11-08 03:39:54 -08:00
< ng-template ngbNavContent >
2022-11-09 19:59:35 -08:00
< ng-container * ngIf = "mailAccounts && mailRules" >
< h4 >
< ng-container i18n > Mail accounts</ ng-container >
2022-11-18 17:11:15 -08:00
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editMailAccount ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add Account</ ng-container >
</ button >
2022-11-09 19:59:35 -08:00
</ h4 >
< ul class = "list-group" formGroupName = "mailAccounts" >
2022-11-08 03:39:54 -08:00
2022-11-12 15:14:58 -08:00
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Name</ div >
< div class = "col" i18n > Server</ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
2022-11-08 11:11:35 -08:00
2022-11-09 19:59:35 -08:00
< li * ngFor = "let account of mailAccounts" class = "list-group-item" [ formGroupName ]=" account . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editMailAccount ( account )" > {{account.name}}</ button ></ div >
< div class = "col d-flex align-items-center" > {{account.imap_server}}</ div >
< div class = "col" >
< div class = "btn-group" >
< button class = "btn btn-sm btn-primary" type = "button" ( click )=" editMailAccount ( account )" i18n > Edit</ button >
< button class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteMailAccount ( account )" i18n > Delete</ button >
</ div >
2022-11-08 12:09:16 -08:00
</ div >
</ div >
2022-11-12 15:14:58 -08:00
</ li >
2022-11-08 03:39:54 -08:00
2022-11-12 15:14:58 -08:00
< div * ngIf = "mailAccounts.length == 0" i18n > No mail accounts defined.</ div >
</ ul >
2022-11-08 03:39:54 -08:00
2022-11-09 19:59:35 -08:00
< h4 class = "mt-4" >
< ng-container i18n > Mail rules</ ng-container >
2022-11-18 17:11:15 -08:00
< button type = "button" class = "btn btn-sm btn-primary ms-4" ( click )=" editMailRule ()" >
< svg class = "sidebaricon me-1" fill = "currentColor" >
< use xlink:href = "assets/bootstrap-icons.svg#plus-circle" />
</ svg >
< ng-container i18n > Add Rule</ ng-container >
</ button >
2022-11-09 19:59:35 -08:00
</ h4 >
< ul class = "list-group" formGroupName = "mailRules" >
2022-11-08 03:39:54 -08:00
2022-11-12 15:14:58 -08:00
< li class = "list-group-item" >
< div class = "row" >
< div class = "col" i18n > Name</ div >
< div class = "col" i18n > Account</ div >
< div class = "col" i18n > Actions</ div >
</ div >
</ li >
2022-11-08 11:11:35 -08:00
2022-11-09 19:59:35 -08:00
< li * ngFor = "let rule of mailRules" class = "list-group-item" [ formGroupName ]=" rule . id " >
< div class = "row" >
< div class = "col d-flex align-items-center" >< button class = "btn btn-link p-0" type = "button" ( click )=" editMailRule ( rule )" > {{rule.name}}</ button ></ div >
< div class = "col d-flex align-items-center" > {{(mailAccountService.getCached(rule.account) | async)?.name}}</ div >
< div class = "col" >
< div class = "btn-group" >
< button class = "btn btn-sm btn-primary" type = "button" ( click )=" editMailRule ( rule )" i18n > Edit</ button >
< button class = "btn btn-sm btn-outline-danger" type = "button" ( click )=" deleteMailRule ( rule )" i18n > Delete</ button >
</ div >
2022-11-08 12:09:16 -08:00
</ div >
</ div >
2022-11-12 15:14:58 -08:00
</ li >
2022-11-08 03:39:54 -08:00
2022-11-12 15:14:58 -08:00
< div * ngIf = "mailRules.length == 0" i18n > No mail rules defined.</ div >
</ ul >
</ ng-container >
< div * ngIf = "!mailAccounts || !mailRules" >
< div class = "spinner-border spinner-border-sm fw-normal ms-2 me-auto" role = "status" ></ div >
< div class = "visually-hidden" i18n > Loading...</ div >
</ div >
2022-11-08 03:39:54 -08:00
</ ng-template >
</ li >
2020-11-04 19:28:08 +01:00
</ ul >
2022-02-20 01:21:30 +01:00
< div [ ngbNavOutlet ]=" nav " class = "border-start border-end border-bottom p-3 mb-3 shadow-sm" ></ div >
2020-11-04 19:28:08 +01:00
2022-09-30 14:03:59 -07:00
< button type = "submit" class = "btn btn-primary mb-2" [ disabled ]="!( isDirty $ | async )" i18n > Save</ button >
2020-12-27 23:05:19 -08:00
</ form >