diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 000000000..f5a7765dd --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,5 @@ +files: + - source: /src/locale/en-us/LC_MESSAGES/django.po + translation: /src/locale/%two_letters_code%/LC_MESSAGES/django.po + - source: /src-ui/messages.xlf + translation: /src-ui/src/locale/messages.%two_letters_code%.xlf diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 8e1a21757..5919b14aa 100644 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -79,7 +79,11 @@ initialize() { fi done + echo "creating directory /tmp/paperless" + mkdir -p /tmp/paperless + chown -R paperless:paperless ../ + chown -R paperless:paperless /tmp/paperless migrations diff --git a/docs/changelog.rst b/docs/changelog.rst index 721e9520e..28bcc00e6 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,7 +5,6 @@ Changelog ********* - paperless-ng 1.0.0 ################## @@ -25,7 +24,8 @@ Nothing special about this release, but since there are relatively few bug repor * Added a language selector to the settings. * Added date format options to the settings. * Range selection with shift clicking is now possible in the document list. - + * Filtering correspondent, type and tag management pages by name. + * Focus "Name" field in dialogs by default. paperless-ng 0.9.14 diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html index fbba66818..0bcfd4500 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.html @@ -29,15 +29,22 @@
- +
+
+ Use + + + + + click to exclude items. +
diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.scss b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.scss index a937291f3..51c42b859 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.scss +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.scss @@ -35,3 +35,15 @@ .btn-group > label.disabled { filter: brightness(0.5); } + +small > svg { + margin-top: -2px; +} + +.list-group-item-note { + line-height: 1; + + small { + font-size: 70%; + } +} diff --git a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts index a63183575..090385fac 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts +++ b/src-ui/src/app/components/common/filterable-dropdown/filterable-dropdown.component.ts @@ -45,6 +45,10 @@ export class FilterableDropdownSelectionModel { return this.items.filter(i => this.temporarySelectionStates.get(i.id) == ToggleableItemState.Selected) } + getExcludedItems() { + return this.items.filter(i => this.temporarySelectionStates.get(i.id) == ToggleableItemState.Excluded) + } + set(id: number, state: ToggleableItemState, fireEvent = true) { if (state == ToggleableItemState.NotSelected) { this.temporarySelectionStates.delete(id) @@ -58,9 +62,9 @@ export class FilterableDropdownSelectionModel { toggle(id: number, fireEvent = true) { let state = this.temporarySelectionStates.get(id) - if (state == null || state != ToggleableItemState.Selected) { + if (state == null || (state != ToggleableItemState.Selected && state != ToggleableItemState.Excluded)) { this.temporarySelectionStates.set(id, ToggleableItemState.Selected) - } else if (state == ToggleableItemState.Selected) { + } else if (state == ToggleableItemState.Selected || state == ToggleableItemState.Excluded) { this.temporarySelectionStates.delete(id) } @@ -85,7 +89,27 @@ export class FilterableDropdownSelectionModel { if (fireEvent) { this.changed.next(this) } + } + exclude(id: number, fireEvent:boolean = true) { + let state = this.temporarySelectionStates.get(id) + if (state == null || state != ToggleableItemState.Excluded) { + this.temporarySelectionStates.set(id, ToggleableItemState.Excluded) + } else if (state == ToggleableItemState.Excluded) { + this.temporarySelectionStates.delete(id) + } + + if (!this.multiple) { + for (let key of this.temporarySelectionStates.keys()) { + if (key != id) { + this.temporarySelectionStates.delete(key) + } + } + } + + if (fireEvent) { + this.changed.next(this) + } } private getNonTemporary(id: number) { @@ -287,4 +311,12 @@ export class FilterableDropdownComponent { } } } + + excludeClicked(itemID: number) { + if (this.editing) { + this.selectionModel.toggle(itemID) + } else { + this.selectionModel.exclude(itemID) + } + } } diff --git a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html index 404ea9d4d..b020a3c34 100644 --- a/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html +++ b/src-ui/src/app/components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component.html @@ -1,4 +1,4 @@ -