Merge remote-tracking branch 'paperless/dev' into feature-consume-eml
| @@ -1,10 +1,10 @@ | ||||
| FROM python:3.5.1 | ||||
|  | ||||
| # Install Sphinx and Pygments | ||||
| RUN pip install Sphinx Pygments | ||||
| RUN pip install --no-cache-dir Sphinx Pygments \ | ||||
|   # Setup directories, copy data | ||||
|   && mkdir /build | ||||
|  | ||||
| # Setup directories, copy data | ||||
| RUN mkdir /build | ||||
| COPY . /build | ||||
| WORKDIR /build/docs | ||||
|  | ||||
|   | ||||
							
								
								
									
										592
									
								
								docs/_static/css/custom.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,592 @@ | ||||
| /* Variables */ | ||||
| :root { | ||||
|   --color-text-body: #5c5962; | ||||
|   --color-text-body-light: #fcfcfc; | ||||
|   --color-text-anchor: #7253ed; | ||||
|   --color-text-alt: rgba(0, 0, 0, 0.3); | ||||
|   --color-text-title: #27262b; | ||||
|   --color-text-code-inline: #e74c3c; | ||||
|   --color-text-code-nt: #062873; | ||||
|   --color-text-selection: #b19eff; | ||||
|   --color-bg-body: #fcfcfc; | ||||
|   --color-bg-body-alt: #f3f6f6; | ||||
|   --color-bg-side-nav: #f5f6fa; | ||||
|   --color-bg-side-nav-hover: #ebedf5; | ||||
|   --color-bg-code-block: var(--color-bg-side-nav); | ||||
|   --color-border: #eeebee; | ||||
|   --color-btn-neutral-bg: #f3f6f6; | ||||
|   --color-btn-neutral-bg-hover: #e5ebeb; | ||||
|   --color-success-title: #1abc9c; | ||||
|   --color-success-body: #dbfaf4; | ||||
|   --color-warning-title: #f0b37e; | ||||
|   --color-warning-body: #ffedcc; | ||||
|   --color-danger-title: #f29f97; | ||||
|   --color-danger-body: #fdf3f2; | ||||
|   --color-info-title: #6ab0de; | ||||
|   --color-info-body: #e7f2fa; | ||||
| } | ||||
|  | ||||
| .dark-mode { | ||||
|   --color-text-body: #abb2bf; | ||||
|   --color-text-body-light: #9499a2; | ||||
|   --color-text-alt: rgba(0255, 255, 255, 0.5); | ||||
|   --color-text-title: var(--color-text-anchor); | ||||
|   --color-text-code-inline: #abb2bf; | ||||
|   --color-text-code-nt: #2063f3; | ||||
|   --color-text-selection: #030303; | ||||
|   --color-bg-body: #1d1d20 !important; | ||||
|   --color-bg-body-alt: #131315; | ||||
|   --color-bg-side-nav: #18181a; | ||||
|   --color-bg-side-nav-hover: #101216; | ||||
|   --color-bg-code-block: #101216; | ||||
|   --color-border: #47494f; | ||||
|   --color-btn-neutral-bg: #242529; | ||||
|   --color-btn-neutral-bg-hover: #101216; | ||||
|   --color-success-title: #02120f; | ||||
|   --color-success-body: #041b17; | ||||
|   --color-warning-title: #1b0e03; | ||||
|   --color-warning-body: #371d06; | ||||
|   --color-danger-title: #120902; | ||||
|   --color-danger-body: #1b0503; | ||||
|   --color-info-title: #020608; | ||||
|   --color-info-body: #06141e; | ||||
| } | ||||
|  | ||||
| * { | ||||
|   transition: background-color 0.3s ease, border-color 0.3s ease; | ||||
| } | ||||
|  | ||||
| /* Typography */ | ||||
| body { | ||||
|   font-family: system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; | ||||
|   font-size: inherit; | ||||
|   line-height: 1.4; | ||||
|   color: var(--color-text-body); | ||||
| } | ||||
|  | ||||
| h1, h2, h3, h4, h5, h6 { | ||||
|   font-family: inherit; | ||||
| } | ||||
|  | ||||
| .rst-content .toctree-wrapper>p.caption, .rst-content h1, .rst-content h2, .rst-content h3, .rst-content h4, .rst-content h5, .rst-content h6 { | ||||
|   padding-top: .5em; | ||||
| } | ||||
|  | ||||
| p, .main-content-wrap, .rst-content .section ul, .rst-content .toctree-wrapper ul, .rst-content section ul, .wy-plain-list-disc, article ul { | ||||
|   line-height: 1.6; | ||||
| } | ||||
|  | ||||
| pre, .code, .rst-content .linenodiv pre, .rst-content div[class^=highlight] pre, .rst-content pre.literal-block { | ||||
|   font-family: "SFMono-Regular", Menlo,Consolas, Monospace; | ||||
|   font-size: 0.75em; | ||||
|   line-height: 1.8; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4 { | ||||
|   font-size: 1rem | ||||
| } | ||||
|  | ||||
| .rst-versions { | ||||
|   font-family: inherit; | ||||
|   line-height: 1; | ||||
| } | ||||
|  | ||||
| footer, footer p { | ||||
|   font-size: .8rem; | ||||
| } | ||||
|  | ||||
| footer .rst-footer-buttons { | ||||
|   font-size: 1rem; | ||||
| } | ||||
|  | ||||
| @media (max-width: 400px) { | ||||
|   /* break code lines on mobile */ | ||||
|   pre, code { | ||||
|     word-break: break-word; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Layout */ | ||||
| .wy-side-nav-search, .wy-menu-vertical { | ||||
|   width: auto; | ||||
| } | ||||
|  | ||||
| .wy-nav-side { | ||||
|   z-index: 0; | ||||
|   display: flex; | ||||
|   flex-wrap: wrap; | ||||
|   background-color: var(--color-bg-side-nav); | ||||
| } | ||||
|  | ||||
| .wy-side-scroll { | ||||
|   width: 100%; | ||||
|   overflow-y: auto; | ||||
| } | ||||
|  | ||||
| @media (min-width: 66.5rem) { | ||||
|   .wy-side-scroll { | ||||
|       width:264px | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media (min-width: 50rem) { | ||||
|   .wy-nav-side { | ||||
|       flex-wrap: nowrap; | ||||
|       position: fixed; | ||||
|       width: 248px; | ||||
|       height: 100%; | ||||
|       flex-direction: column; | ||||
|       border-right: 1px solid var(--color-border); | ||||
|       align-items:flex-end | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media (min-width: 66.5rem) { | ||||
|   .wy-nav-side { | ||||
|       width: calc((100% - 1064px) / 2 + 264px); | ||||
|       min-width:264px | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media (min-width: 50rem) { | ||||
|   .wy-nav-content-wrap { | ||||
|       position: relative; | ||||
|       max-width: 800px; | ||||
|       margin-left:248px | ||||
|   } | ||||
| } | ||||
|  | ||||
| @media (min-width: 66.5rem) { | ||||
|   .wy-nav-content-wrap { | ||||
|       margin-left:calc((100% - 1064px) / 2 + 264px) | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Colors */ | ||||
| body.wy-body-for-nav, | ||||
| .wy-nav-content { | ||||
|   background: var(--color-bg-body); | ||||
| } | ||||
|  | ||||
| .wy-nav-side { | ||||
|   border-right: 1px solid var(--color-border); | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search, .wy-nav-top { | ||||
|   background: var(--color-bg-side-nav); | ||||
|   border-bottom: 1px solid var(--color-border); | ||||
| } | ||||
|  | ||||
| .wy-nav-content-wrap { | ||||
|   background: inherit; | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search > a, .wy-nav-top a, .wy-nav-top i { | ||||
|   color: var(--color-text-title); | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search > a:hover, .wy-nav-top a:hover { | ||||
|   background: transparent; | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search > div.version { | ||||
|   color: var(--color-text-alt) | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search > div[role="search"] { | ||||
|   border-top: 1px solid var(--color-border); | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.toctree-l2.current>a, .wy-menu-vertical li.toctree-l2.current li.toctree-l3>a, | ||||
| .wy-menu-vertical li.toctree-l3.current>a, .wy-menu-vertical li.toctree-l3.current li.toctree-l4>a { | ||||
|   background: var(--color-bg-side-nav); | ||||
| } | ||||
|  | ||||
| .rst-content .highlighted { | ||||
|   background: #eedd85; | ||||
|   box-shadow: 0 0 0 2px #eedd85; | ||||
|   font-weight: 600; | ||||
| } | ||||
|  | ||||
| .wy-side-nav-search input[type=text], | ||||
| html.writer-html5 .rst-content table.docutils th { | ||||
|   color: var(--color-text-body); | ||||
| } | ||||
|  | ||||
| .rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td, | ||||
| .wy-table-backed, | ||||
| .wy-table-odd td, | ||||
| .wy-table-striped tr:nth-child(2n-1) td { | ||||
|   background-color: var(--color-bg-body-alt); | ||||
| } | ||||
|  | ||||
| .rst-content table.docutils, | ||||
| .wy-table-bordered-all, | ||||
| html.writer-html5 .rst-content table.docutils th, | ||||
| .rst-content table.docutils td, | ||||
| .wy-table-bordered-all td, | ||||
| hr { | ||||
|   border-color: var(--color-border) !important; | ||||
| } | ||||
|  | ||||
| ::selection { | ||||
|   background: var(--color-text-selection); | ||||
| } | ||||
|  | ||||
| /* Ridiculous rules are taken from sphinx_rtd */ | ||||
| .rst-content .admonition-title, | ||||
| .wy-alert-title { | ||||
|   color: var(--color-text-body-light); | ||||
| } | ||||
|  | ||||
| .rst-content .hint, | ||||
| .rst-content .important, | ||||
| .rst-content .tip, | ||||
| .rst-content .wy-alert-success, | ||||
| .wy-alert.wy-alert-success { | ||||
|   background: var(--color-success-body); | ||||
| } | ||||
|  | ||||
| .rst-content .hint .admonition-title, | ||||
| .rst-content .hint .wy-alert-title, | ||||
| .rst-content .important .admonition-title, | ||||
| .rst-content .important .wy-alert-title, | ||||
| .rst-content .tip .admonition-title, | ||||
| .rst-content .tip .wy-alert-title, | ||||
| .rst-content .wy-alert-success .admonition-title, | ||||
| .rst-content .wy-alert-success .wy-alert-title, | ||||
| .wy-alert.wy-alert-success .rst-content .admonition-title, | ||||
| .wy-alert.wy-alert-success .wy-alert-title { | ||||
|   background-color: var(--color-success-title); | ||||
| } | ||||
|  | ||||
| .rst-content .admonition-todo, | ||||
| .rst-content .attention, | ||||
| .rst-content .caution, | ||||
| .rst-content .warning, | ||||
| .rst-content .wy-alert-warning, | ||||
| .wy-alert.wy-alert-warning { | ||||
|   background: var(--color-warning-body); | ||||
| } | ||||
|  | ||||
| .rst-content .admonition-todo .admonition-title, | ||||
| .rst-content .admonition-todo .wy-alert-title, | ||||
| .rst-content .attention .admonition-title, | ||||
| .rst-content .attention .wy-alert-title, | ||||
| .rst-content .caution .admonition-title, | ||||
| .rst-content .caution .wy-alert-title, | ||||
| .rst-content .warning .admonition-title, | ||||
| .rst-content .warning .wy-alert-title, | ||||
| .rst-content .wy-alert-warning .admonition-title, | ||||
| .rst-content .wy-alert-warning .wy-alert-title, | ||||
| .rst-content .wy-alert.wy-alert-warning .admonition-title, | ||||
| .wy-alert.wy-alert-warning .rst-content .admonition-title, | ||||
| .wy-alert.wy-alert-warning .wy-alert-title { | ||||
|   background: var(--color-warning-title); | ||||
| } | ||||
|  | ||||
| .rst-content .danger, | ||||
| .rst-content .error, | ||||
| .rst-content .wy-alert-danger, | ||||
| .wy-alert.wy-alert-danger { | ||||
|   background: var(--color-danger-body); | ||||
| } | ||||
|  | ||||
| .rst-content .danger .admonition-title, | ||||
| .rst-content .danger .wy-alert-title, | ||||
| .rst-content .error .admonition-title, | ||||
| .rst-content .error .wy-alert-title, | ||||
| .rst-content .wy-alert-danger .admonition-title, | ||||
| .rst-content .wy-alert-danger .wy-alert-title, | ||||
| .wy-alert.wy-alert-danger .rst-content .admonition-title, | ||||
| .wy-alert.wy-alert-danger .wy-alert-title { | ||||
|   background: var(--color-danger-title); | ||||
| } | ||||
|  | ||||
| .rst-content .note, | ||||
| .rst-content .seealso, | ||||
| .rst-content .wy-alert-info, | ||||
| .wy-alert.wy-alert-info { | ||||
|   background: var(--color-info-body); | ||||
| } | ||||
|  | ||||
| .rst-content .note .admonition-title, | ||||
| .rst-content .note .wy-alert-title, | ||||
| .rst-content .seealso .admonition-title, | ||||
| .rst-content .seealso .wy-alert-title, | ||||
| .rst-content .wy-alert-info .admonition-title, | ||||
| .rst-content .wy-alert-info .wy-alert-title, | ||||
| .wy-alert.wy-alert-info .rst-content .admonition-title, | ||||
| .wy-alert.wy-alert-info .wy-alert-title { | ||||
|   background: var(--color-info-title); | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| /* Links */ | ||||
| a, a:visited, | ||||
| .wy-menu-vertical a, | ||||
| a.icon.icon-home, | ||||
| .wy-menu-vertical li.toctree-l1.current > a.current { | ||||
|   color: var(--color-text-anchor); | ||||
|   text-decoration: none; | ||||
| } | ||||
|  | ||||
| a:hover, .wy-breadcrumbs-aside a { | ||||
|   color: var(--color-text-anchor); /* reset */ | ||||
| } | ||||
|  | ||||
| .rst-versions a, .rst-versions .rst-current-version { | ||||
|   color: #var(--color-text-anchor); | ||||
| } | ||||
|  | ||||
| .wy-nav-content a.reference, .wy-nav-content a:not([class]) { | ||||
|   background-image: linear-gradient(var(--color-border) 0%, var(--color-border) 100%); | ||||
|   background-repeat: repeat-x; | ||||
|   background-position: 0 100%; | ||||
|   background-size: 1px 1px; | ||||
| } | ||||
|  | ||||
| .wy-nav-content a.reference:hover, .wy-nav-content a:not([class]):hover { | ||||
|   background-image: linear-gradient(rgba(114,83,237,0.45) 0%, rgba(114,83,237,0.45) 100%); | ||||
|   background-size: 1px 1px; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical a:hover, | ||||
| .wy-menu-vertical li.current a:hover, | ||||
| .wy-menu-vertical a:active { | ||||
|   background: var(--color-bg-side-nav-hover) !important; | ||||
|   color: var(--color-text-body); | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.toctree-l1.current>a, | ||||
| .wy-menu-vertical li.current>a, | ||||
| .wy-menu-vertical li.on a { | ||||
|   background-color: var(--color-bg-side-nav-hover); | ||||
|   border: none; | ||||
|   font-weight: normal; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.current { | ||||
|   background-color: inherit; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.current a { | ||||
|   border-right: none; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.toctree-l2 a, | ||||
| .wy-menu-vertical li.toctree-l3 a, | ||||
| .wy-menu-vertical li.toctree-l4 a, | ||||
| .wy-menu-vertical li.toctree-l5 a, | ||||
| .wy-menu-vertical li.toctree-l6 a, | ||||
| .wy-menu-vertical li.toctree-l7 a, | ||||
| .wy-menu-vertical li.toctree-l8 a, | ||||
| .wy-menu-vertical li.toctree-l9 a, | ||||
| .wy-menu-vertical li.toctree-l10 a { | ||||
|   color: var(--color-text-body); | ||||
| } | ||||
|  | ||||
| a.image-reference, a.image-reference:hover { | ||||
|   background: none !important; | ||||
| } | ||||
|  | ||||
| a.image-reference img { | ||||
|   cursor: zoom-in; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Code blocks */ | ||||
| .rst-content code, .rst-content tt, code { | ||||
|   padding: 0.25em; | ||||
|   font-weight: 400; | ||||
|   background-color: var(--color-bg-code-block); | ||||
|   border: 1px solid var(--color-border); | ||||
|   border-radius: 4px; | ||||
| } | ||||
|  | ||||
| .rst-content div[class^=highlight], .rst-content pre.literal-block { | ||||
|   padding: 0.7rem; | ||||
|   margin-top: 0; | ||||
|   margin-bottom: 0.75rem; | ||||
|   overflow-x: auto; | ||||
|   background-color: var(--color-bg-side-nav); | ||||
|   border-color: var(--color-border); | ||||
|   border-radius: 4px; | ||||
|   box-shadow: none; | ||||
| } | ||||
|  | ||||
| .rst-content .admonition-title, | ||||
| .rst-content div.admonition, | ||||
| .wy-alert-title { | ||||
|   padding: 10px 12px; | ||||
|   border-top-left-radius: 4px; | ||||
|   border-top-right-radius: 4px; | ||||
| } | ||||
|  | ||||
| .highlight .go { | ||||
|   color: inherit; | ||||
| } | ||||
|  | ||||
| .highlight .nt { | ||||
|   color: var(--color-text-code-nt); | ||||
| } | ||||
|  | ||||
| .rst-content code.literal, | ||||
| .rst-content tt.literal { | ||||
|   border-color: var(--color-border); | ||||
|   background-color: var(--color-border); | ||||
|   color: var(--color-text-code-inline) | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Search */ | ||||
| .wy-side-nav-search input[type=text] { | ||||
|   border: none; | ||||
|   border-radius: 0; | ||||
|   background-color: transparent; | ||||
|   font-family: inherit; | ||||
|   font-size: .85rem; | ||||
|   box-shadow: none; | ||||
|   padding: .7rem 1rem .7rem 2.8rem; | ||||
|   margin: 0; | ||||
| } | ||||
|  | ||||
| #rtd-search-form { | ||||
|   position: relative; | ||||
| } | ||||
|  | ||||
| #rtd-search-form:before { | ||||
|   font: normal normal normal 14px/1 FontAwesome; | ||||
|   font-size: inherit; | ||||
|   text-rendering: auto; | ||||
|   -webkit-font-smoothing: antialiased; | ||||
|   -moz-osx-font-smoothing: grayscale; | ||||
|   content: "\f002"; | ||||
|   color: var(--color-text-alt); | ||||
|   position: absolute; | ||||
|   left: 1.5rem; | ||||
|   top: .7rem; | ||||
| } | ||||
|  | ||||
| /* Side nav */ | ||||
| .wy-side-nav-search { | ||||
|   padding: 1rem 0 0 0; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li a button.toctree-expand { | ||||
|   float: right; | ||||
|   margin-right: -1.5em; | ||||
|   padding: 0 .5em; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical a, | ||||
| .wy-menu-vertical li.current>a, | ||||
| .wy-menu-vertical li.current li>a { | ||||
|   padding-right: 1.5em !important; | ||||
| } | ||||
|  | ||||
| .wy-menu-vertical li.current li>a.current { | ||||
|   font-weight: 600; | ||||
| } | ||||
|  | ||||
| /* Misc spacing */ | ||||
| .rst-content .admonition-title, .wy-alert-title { | ||||
|   padding: 10px 12px; | ||||
| } | ||||
|  | ||||
| /* Buttons */ | ||||
| .btn { | ||||
|   display: inline-block; | ||||
|   box-sizing: border-box; | ||||
|   padding: 0.3em 1em; | ||||
|   margin: 0; | ||||
|   font-family: inherit; | ||||
|   font-size: inherit; | ||||
|   font-weight: 500; | ||||
|   line-height: 1.5; | ||||
|   color: #var(--color-text-anchor); | ||||
|   text-decoration: none; | ||||
|   vertical-align: baseline; | ||||
|   background-color: #f7f7f7; | ||||
|   border-width: 0; | ||||
|   border-radius: 4px; | ||||
|   box-shadow: 0 1px 2px rgba(0,0,0,0.12),0 3px 10px rgba(0,0,0,0.08); | ||||
|   appearance: none; | ||||
| } | ||||
|  | ||||
| .btn:active { | ||||
|   padding: 0.3em 1em; | ||||
| } | ||||
|  | ||||
| .rst-content .btn:focus { | ||||
|   outline: 1px solid #ccc; | ||||
| } | ||||
|  | ||||
| .rst-content .btn-neutral, .rst-content .btn span.fa { | ||||
|   color: var(--color-text-body) !important; | ||||
| } | ||||
|  | ||||
| .btn-neutral { | ||||
|   background-color: var(--color-btn-neutral-bg) !important; | ||||
|   color: var(--color-btn-neutral-text) !important; | ||||
|   border: 1px solid var(--color-btn-neutral-bg); | ||||
| } | ||||
|  | ||||
| .btn:hover, .btn-neutral:hover { | ||||
|   background-color: var(--color-btn-neutral-bg-hover) !important; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Icon overrides */ | ||||
| .wy-side-nav-search a.icon-home:before { | ||||
|   display: none; | ||||
| } | ||||
|  | ||||
| .fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before { | ||||
|   content: "\f106"; /* fa-angle-up */ | ||||
| } | ||||
|  | ||||
| .fa-plus-square-o:before, .wy-menu-vertical li button.toctree-expand:before { | ||||
|   content: "\f107"; /* fa-angle-down */ | ||||
| } | ||||
|  | ||||
|  | ||||
| /* Misc */ | ||||
| .wy-nav-top { | ||||
|   line-height: 36px; | ||||
| } | ||||
|  | ||||
| .wy-nav-top > i { | ||||
|   font-size: 24px; | ||||
|   padding: 8px 0 0 2px; | ||||
|   color:#var(--color-text-anchor); | ||||
| } | ||||
|  | ||||
| .rst-content table.docutils td, | ||||
| .rst-content table.docutils th, | ||||
| .rst-content table.field-list td, | ||||
| .rst-content table.field-list th, | ||||
| .wy-table td, | ||||
| .wy-table th { | ||||
|   padding: 8px 14px; | ||||
| } | ||||
|  | ||||
| .dark-mode-toggle { | ||||
|   position: absolute; | ||||
|   top: 14px; | ||||
|   right: 12px; | ||||
|   height: 20px; | ||||
|   width: 24px; | ||||
|   z-index: 10; | ||||
|   border: none; | ||||
|   background-color: transparent; | ||||
|   color: inherit; | ||||
|   opacity: 0.7; | ||||
| } | ||||
|  | ||||
| .wy-nav-content-wrap { | ||||
|   z-index: 20; | ||||
| } | ||||
							
								
								
									
										14
									
								
								docs/_static/custom.css
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -1,14 +0,0 @@ | ||||
| /* override table width restrictions */ | ||||
| @media screen and (min-width: 767px) { | ||||
|  | ||||
|   .wy-table-responsive table td { | ||||
|     /* !important prevents the common CSS stylesheets from | ||||
|        overriding this as on RTD they are loaded after this stylesheet */ | ||||
|     white-space: normal !important; | ||||
|   } | ||||
|  | ||||
|   .wy-table-responsive { | ||||
|     overflow: visible !important; | ||||
|   } | ||||
|  | ||||
| } | ||||
							
								
								
									
										47
									
								
								docs/_static/js/darkmode.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,47 @@ | ||||
| let toggleButton; | ||||
| let icon; | ||||
|  | ||||
| function load() { | ||||
| 	"use strict"; | ||||
|  | ||||
| 	toggleButton = document.createElement("button"); | ||||
| 	toggleButton.setAttribute("title", "Toggle dark mode"); | ||||
| 	toggleButton.classList.add("dark-mode-toggle"); | ||||
| 	icon = document.createElement("i"); | ||||
| 	icon.classList.add("fa", darkModeState ? "fa-sun-o" : "fa-moon-o"); | ||||
| 	toggleButton.appendChild(icon); | ||||
| 	document.body.prepend(toggleButton); | ||||
|  | ||||
| 	// Listen for changes in the OS settings | ||||
| 	// addListener is used because older versions of Safari don't support addEventListener | ||||
| 	// prefersDarkQuery set in <head> | ||||
| 	if (prefersDarkQuery) { | ||||
| 		prefersDarkQuery.addListener(function (evt) { | ||||
| 			toggleDarkMode(evt.matches); | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	// Initial setting depending on the prefers-color-mode or localstorage | ||||
| 	// darkModeState should be set in the document <head> to prevent flash | ||||
| 	if (darkModeState == undefined) darkModeState = false; | ||||
| 	toggleDarkMode(darkModeState); | ||||
|  | ||||
| 	// Toggles the "dark-mode" class on click and sets localStorage state | ||||
| 	toggleButton.addEventListener("click", () => { | ||||
| 		darkModeState = !darkModeState; | ||||
|  | ||||
| 		toggleDarkMode(darkModeState); | ||||
| 		localStorage.setItem("dark-mode", darkModeState); | ||||
| 	}); | ||||
| } | ||||
|  | ||||
| function toggleDarkMode(state) { | ||||
| 	document.documentElement.classList.toggle("dark-mode", state); | ||||
| 	document.documentElement.classList.toggle("light-mode", !state); | ||||
| 	icon.classList.remove("fa-sun-o"); | ||||
| 	icon.classList.remove("fa-moon-o"); | ||||
| 	icon.classList.add(state ? "fa-sun-o" : "fa-moon-o"); | ||||
| 	darkModeState = state; | ||||
| } | ||||
|  | ||||
| document.addEventListener("DOMContentLoaded", load); | ||||
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshot.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 445 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/bulk-edit.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 661 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/correspondents.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 457 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/dashboard.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 167 KiB After Width: | Height: | Size: 436 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/documents-filter.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 462 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/documents-largecards.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 306 KiB After Width: | Height: | Size: 608 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/documents-smallcards-dark.png
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 698 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/documents-smallcards.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 410 KiB After Width: | Height: | Size: 706 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/documents-table.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 137 KiB After Width: | Height: | Size: 480 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/editing.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 293 KiB After Width: | Height: | Size: 848 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/logs.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 703 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/mobile.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 158 KiB After Width: | Height: | Size: 388 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/new-tag.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 26 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/search-preview.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 54 KiB | 
							
								
								
									
										
											BIN
										
									
								
								docs/_static/screenshots/search-results.png
									
									
									
									
										vendored
									
									
								
							
							
						
						| Before Width: | Height: | Size: 261 KiB After Width: | Height: | Size: 517 KiB | 
							
								
								
									
										13
									
								
								docs/_templates/layout.html
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,13 @@ | ||||
| {% extends "!layout.html" %} | ||||
| {% block extrahead %} | ||||
|     <script> | ||||
|         // MediaQueryList object | ||||
|         const prefersDarkQuery = window.matchMedia("(prefers-color-scheme: dark)"); | ||||
|         const lsDark = localStorage.getItem("dark-mode"); | ||||
|         let darkModeState = lsDark !== null ? lsDark == "true" : prefersDarkQuery.matches; | ||||
|  | ||||
|         document.documentElement.classList.toggle("dark-mode", darkModeState); | ||||
|         document.documentElement.classList.toggle("light-mode", !darkModeState); | ||||
|     </script> | ||||
|     {{ super() }} | ||||
| {% endblock %} | ||||
| @@ -369,7 +369,7 @@ the naming scheme. | ||||
|  | ||||
| .. warning:: | ||||
|  | ||||
|     Since this command moves you documents around alot, it is advised to to | ||||
|     Since this command moves you documents around a lot, it is advised to to | ||||
|     a backup before. The renaming logic is robust and will never overwrite | ||||
|     or delete a file, but you can't ever be careful enough. | ||||
|  | ||||
|   | ||||
| @@ -243,7 +243,7 @@ will create a directory structure as follows: | ||||
|     last filename a document was stored as. If you do rename a file, paperless will | ||||
|     report your files as missing and won't be able to find them. | ||||
|  | ||||
| Paperless provides the following placeholders withing filenames: | ||||
| Paperless provides the following placeholders within filenames: | ||||
|  | ||||
| * ``{asn}``: The archive serial number of the document, or "none". | ||||
| * ``{correspondent}``: The name of the correspondent, or "none". | ||||
|   | ||||
| @@ -5,6 +5,87 @@ | ||||
| Changelog | ||||
| ********* | ||||
|  | ||||
| paperless-ngx 1.7.0 | ||||
| ################### | ||||
|  | ||||
| Breaking Changes | ||||
|  | ||||
| * ``PAPERLESS_URL`` is now required when using a reverse proxy. See `#674`_. | ||||
|  | ||||
| Features | ||||
|  | ||||
| * Allow setting more than one tag in mail rules `@jonasc`_ (#270) | ||||
| * global drag'n'drop `@shamoon`_ (#283). | ||||
| * Fix: download buttons should disable while waiting `@shamoon`_ (#630). | ||||
| * Update checker `@shamoon`_ (#591). | ||||
| * Show prompt on password-protected pdfs `@shamoon`_ (#564). | ||||
| * Filtering query params aka browser navigation for filtering `@shamoon`_ (#540). | ||||
| * Clickable tags in dashboard widgets `@shamoon`_ (#515). | ||||
| * Add bottom pagination `@shamoon`_ (#372). | ||||
| * Feature barcode splitter `@gador`_ (#532). | ||||
| * App loading screen `@shamoon`_ (#298). | ||||
| * Use progress bar for delayed buttons `@shamoon`_ (#415). | ||||
| * Add minimum length for documents text filter `@shamoon`_ (#401). | ||||
| * Added nav buttons in the document detail view `@GruberViktor`_ (#273). | ||||
| * Improve date keyboard input `@shamoon`_ (#253). | ||||
| * Color theming `@shamoon`_ (#243). | ||||
| * Parse dates when entered without separators `@GruberViktor`_ (#250). | ||||
|  | ||||
| Bug Fixes | ||||
|  | ||||
| * add "localhost" to ALLOWED_HOSTS `@gador`_ (#700). | ||||
| * Fix: scanners table `@qcasey`_ (#690). | ||||
| * Adds wait for file before consuming `@stumpylog`_ (#483). | ||||
| * Fix: frontend document editing erases time data `@shamoon`_ (#654). | ||||
| * Increase length of SavedViewFilterRule `@stumpylog`_ (#612). | ||||
| * Fixes attachment filename matching during mail fetching `@stumpylog`_ (#680). | ||||
| * Add ``PAPERLESS_URL`` env variable & CSRF var `@shamoon`_ (#674). | ||||
| * Fix: download buttons should disable while waiting `@shamoon`_ (#630). | ||||
| * Fixes downloaded filename, add more consumer ignore settings `@stumpylog`_ (#599). | ||||
| * FIX BUG: case-sensitive matching was not possible `@danielBreitlauch`_ (#594). | ||||
| * uses shutil.move instead of rename `@gador`_ (#617). | ||||
| * Fix npm deps 01.02.22 2 `@shamoon`_ (#610). | ||||
| * Fix npm dependencies 01.02.22 `@shamoon`_ (#600). | ||||
| * fix issue 416: implement PAPERLESS_OCR_MAX_IMAGE_PIXELS `@hacker-h`_ (#441). | ||||
| * fix: exclude cypress from build in Dockerfile `@FrankStrieter`_ (#526). | ||||
| * Corrections to pass pre-commit hooks `@schnuffle`_ (#454). | ||||
| * Fix 311 unable to click checkboxes in document list `@shamoon`_ (#313). | ||||
| * Fix imap tools bug `@stumpylog`_ (#393). | ||||
| * Fix filterable dropdown buttons arent translated `@shamoon`_ (#366). | ||||
| * Fix 224: "Auto-detected date is day before receipt date" `@a17t`_ (#246). | ||||
| * Fix minor sphinx errors `@shamoon`_ (#322). | ||||
| * Fix page links hidden `@shamoon`_ (#314). | ||||
| * Fix: Include excluded items in dropdown count `@shamoon`_ (#263). | ||||
|  | ||||
| Translation | ||||
|  | ||||
| * `@miku323`_ contributed to Slovenian translation. | ||||
| * `@FaintGhost`_ contributed to Chinese Simplified translation. | ||||
| * `@DarkoBG79`_ contributed to Serbian translation. | ||||
| * `Kemal Secer`_ contributed to Turkish translation. | ||||
| * `@Prominence`_ contributed to Belarusian translation. | ||||
|  | ||||
| Documentation | ||||
|  | ||||
| * Fix: scanners table `@qcasey`_ (#690). | ||||
| * Add `PAPERLESS_URL` env variable & CSRF var `@shamoon`_ (#674). | ||||
| * Fixes downloaded filename, add more consumer ignore settings `@stumpylog`_ (#599). | ||||
| * fix issue 416: implement ``PAPERLESS_OCR_MAX_IMAGE_PIXELS`` `@hacker-h`_ (#441). | ||||
| * Fix minor sphinx errors `@shamoon`_ (#322). | ||||
|  | ||||
| Maintenance | ||||
|  | ||||
| * Add ``PAPERLESS_URL`` env variable & CSRF var `@shamoon`_ (#674). | ||||
| * Chore: Implement release-drafter action for Changelogs `@qcasey`_ (#669). | ||||
| * Chore: Add CODEOWNERS `@qcasey`_ (#667). | ||||
| * Support docker-compose v2 in install `@stumpylog`_ (#611). | ||||
| * Add Belarusian localization `@shamoon`_ (#588). | ||||
| * Add Turkish localization `@shamoon`_ (#536). | ||||
| * Add Serbian localization `@shamoon`_ (#504). | ||||
| * Create PULL_REQUEST_TEMPLATE.md `@shamoon`_ (#304). | ||||
| * Add Chinese localization `@shamoon`_ (#247). | ||||
| * Add Slovenian language for frontend `@shamoon`_ (#315). | ||||
|  | ||||
| paperless-ngx 1.6.0 | ||||
| ################### | ||||
|  | ||||
| @@ -35,6 +116,10 @@ Version 1.6.0 merges several pending PRs from jonaswinkler's repo and includes n | ||||
| * `@shamoon`_ created a slick new logo (#165). | ||||
| * `@tim-vogel`_ fixed exports missing groups (#193). | ||||
|  | ||||
| Known issues: | ||||
|  | ||||
| * 1.6.0 included a malformed package-lock.json, as a result users who want to build the docker image themselves need to change line 6 of the ``Dockerfile`` to ``RUN npm update npm -g && npm install --legacy-peer-deps``. | ||||
|  | ||||
| Thank you to the following people for their documentation updates, fixes, and comprehensive testing: | ||||
|  | ||||
| `@m0veax`_, `@a17t`_, `@fignew`_, `@muued`_, `@bauerj`_, `@isigmund`_, `@denilsonsa`_, `@mweimerskirch`_, `@alexander-bauer`_, `@apeltzer`_, `@tribut`_, `@yschroeder`_, `@gador`_, `@sAksham-Ar`_, `@sbrunner`_, `@philpagel`_, `@davemachado`_, `@2600box`_, `@qcasey`_, `@Nicarim`_, `@kpj`_, `@filcuk`_, `@Timoms`_, `@mattlamb99`_, `@padraigkitterick`_, `@ajkavanagh`_, `@Tooa`_, `@Unkn0wnCat`_, `@pewter77`_, `@stumpylog`_, `@Toxix`_, `@azapater`_, `@jschpp`_ | ||||
| @@ -140,7 +225,7 @@ paperless-ng 1.4.0 | ||||
|  | ||||
|   * New URL pattern for accessing documents by ASN directly (http://<paperless>/asn/123) | ||||
|  | ||||
|   * Added logging when executing pre- and post-consume scripts. | ||||
|   * Added logging when executing pre* and post-consume scripts. | ||||
|  | ||||
|   * Better error logging during document consumption. | ||||
|  | ||||
| @@ -1576,6 +1661,16 @@ bulk of the work on this big change. | ||||
| .. _@azapater: https://github.com/azapater | ||||
| .. _@tim-vogel: https://github.com/tim-vogel | ||||
| .. _@jschpp: https://github.com/jschpp | ||||
| .. _@schnuffle: https://github.com/schnuffle | ||||
| .. _@GruberViktor: https://github.com/gruberviktor | ||||
| .. _@hacker-h: https://github.com/hacker-h | ||||
| .. _@danielBreitlauch: https://github.com/danielbreitlauch | ||||
| .. _@miku323: https://github.com/miku323 | ||||
| .. _@FaintGhost: https://github.com/FaintGhost | ||||
| .. _@DarkoBG79: https://github.com/DarkoBG79 | ||||
| .. _Kemal Secer: https://crowdin.com/profile/kemal.secer | ||||
| .. _@Prominence: https://github.com/Prominence | ||||
| .. _@jonasc: https://github.com/jonasc | ||||
|  | ||||
| .. _#20: https://github.com/the-paperless-project/paperless/issues/20 | ||||
| .. _#44: https://github.com/the-paperless-project/paperless/issues/44 | ||||
| @@ -1684,6 +1779,7 @@ bulk of the work on this big change. | ||||
| .. _#488: https://github.com/the-paperless-project/paperless/pull/488 | ||||
| .. _#489: https://github.com/the-paperless-project/paperless/pull/489 | ||||
| .. _#492: https://github.com/the-paperless-project/paperless/pull/492 | ||||
| .. _#674: https://github.com/paperless-ngx/paperless-ngx/pull/674 | ||||
|  | ||||
| .. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/ | ||||
| .. _optipng: http://optipng.sourceforge.net/ | ||||
|   | ||||
							
								
								
									
										12
									
								
								docs/conf.py
									
									
									
									
									
								
							
							
						
						| @@ -15,7 +15,7 @@ extensions = [ | ||||
| ] | ||||
|  | ||||
| # Add any paths that contain templates here, relative to this directory. | ||||
| # templates_path = ['_templates'] | ||||
| templates_path = ["_templates"] | ||||
|  | ||||
| # The suffix of source filenames. | ||||
| source_suffix = ".rst" | ||||
| @@ -119,6 +119,16 @@ html_theme_path = [] | ||||
| # so a file named "default.css" will overwrite the builtin "default.css". | ||||
| html_static_path = ["_static"] | ||||
|  | ||||
| # These paths are either relative to html_static_path | ||||
| # or fully qualified paths (eg. https://...) | ||||
| html_css_files = [ | ||||
|     "css/custom.css", | ||||
| ] | ||||
|  | ||||
| html_js_files = [ | ||||
|     "js/darkmode.js", | ||||
| ] | ||||
|  | ||||
| # Add any extra paths that contain custom files (such as robots.txt or | ||||
| # .htaccess) here, relative to this directory. These files are copied | ||||
| # directly to the root of the documentation. | ||||
|   | ||||
| @@ -130,6 +130,8 @@ PAPERLESS_LOGROTATE_MAX_BACKUPS=<num> | ||||
|  | ||||
|     Defaults to 20. | ||||
|  | ||||
| .. _hosting-and-security: | ||||
|  | ||||
| Hosting & Security | ||||
| ################## | ||||
|  | ||||
| @@ -170,6 +172,9 @@ PAPERLESS_ALLOWED_HOSTS=<comma-separated-list> | ||||
|  | ||||
|     Can also be set using PAPERLESS_URL (see above). | ||||
|  | ||||
|     If manually set, please remember to include "localhost". Otherwise docker | ||||
|     healthcheck will fail. | ||||
|  | ||||
|     Defaults to "*", which is all hosts. | ||||
|  | ||||
| PAPERLESS_CORS_ALLOWED_HOSTS=<comma-separated-list> | ||||
| @@ -206,7 +211,7 @@ PAPERLESS_AUTO_LOGIN_USERNAME=<username> | ||||
| PAPERLESS_ADMIN_USER=<username> | ||||
|     If this environment variable is specified, Paperless automatically creates | ||||
|     a superuser with the provided username at start. This is useful in cases | ||||
|     where you can not run the `createsuperuser` command seperately, such as Kubernetes | ||||
|     where you can not run the `createsuperuser` command separately, such as Kubernetes | ||||
|     or AWS ECS. | ||||
|  | ||||
|     Requires `PAPERLESS_ADMIN_PASSWORD` to be set. | ||||
| @@ -624,8 +629,19 @@ PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool> | ||||
|     If no barcodes are detected in the uploaded file, no page separation | ||||
|     will happen. | ||||
|  | ||||
|     The original document will be removed and the separated pages will be | ||||
|     saved as pdf. | ||||
|  | ||||
|     Defaults to false. | ||||
|  | ||||
| PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool> | ||||
|     Whether TIFF image files should be scanned for barcodes. | ||||
|     This will automatically convert any TIFF image(s) to pdfs for later | ||||
|     processing. | ||||
|     This only has an effect, if PAPERLESS_CONSUMER_ENABLE_BARCODES has been | ||||
|     enabled. | ||||
|  | ||||
|     Defaults to false. | ||||
|  | ||||
| PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT | ||||
|   Defines the string to be detected as a separator barcode. | ||||
|   | ||||
| @@ -7,7 +7,7 @@ Frequently asked questions | ||||
|  | ||||
| **A:** While Paperless-ngx is already considered largely "feature-complete" it is a community-driven | ||||
| project and development will be guided in this way. New features can be submitted via | ||||
| GitHub discussions and "up-voted" by the community but this is not a garauntee the feature | ||||
| GitHub discussions and "up-voted" by the community but this is not a guarantee the feature | ||||
| will be implemented. This project will always be open to collaboration in the form of PRs, | ||||
| ideas etc. | ||||
|  | ||||
|   | ||||
| @@ -4,41 +4,60 @@ | ||||
| Screenshots | ||||
| *********** | ||||
|  | ||||
| This is what paperless-ngx looks like. You shouldn't use paperless to index | ||||
| research papers though, its a horrible tool for that job. | ||||
| This is what Paperless-ngx looks like. | ||||
|  | ||||
| The dashboard shows customizable views on your document and allows document uploads: | ||||
|  | ||||
| .. image:: _static/screenshots/dashboard.png | ||||
|     :target: _static/screenshots/dashboard.png | ||||
|  | ||||
| The document list provides three different styles to scroll through your documents: | ||||
|  | ||||
| .. image:: _static/screenshots/documents-table.png | ||||
|     :target: _static/screenshots/documents-table.png | ||||
| .. image:: _static/screenshots/documents-smallcards.png | ||||
|     :target: _static/screenshots/documents-smallcards.png | ||||
| .. image:: _static/screenshots/documents-largecards.png | ||||
|     :target: _static/screenshots/documents-largecards.png | ||||
|  | ||||
| Paperless-ngx also supports "dark mode": | ||||
|  | ||||
| .. image:: _static/screenshots/documents-smallcards-dark.png | ||||
|     :target: _static/screenshots/documents-smallcards-dark.png | ||||
|  | ||||
| Extensive filtering mechanisms: | ||||
|  | ||||
| .. image:: _static/screenshots/documents-filter.png | ||||
|     :target: _static/screenshots/documents-filter.png | ||||
|  | ||||
| Side-by-side editing of documents. Optimized for 1080p. | ||||
| Bulk editing of document tags, correspondents, etc.: | ||||
|  | ||||
| .. image:: _static/screenshots/bulk-edit.png | ||||
|     :target: _static/screenshots/bulk-edit.png | ||||
|  | ||||
| Side-by-side editing of documents: | ||||
|  | ||||
| .. image:: _static/screenshots/editing.png | ||||
|     :target: _static/screenshots/editing.png | ||||
|  | ||||
| Tag editing. This looks about the same for correspondents and document types. | ||||
|  | ||||
| .. image:: _static/screenshots/new-tag.png | ||||
|     :target: _static/screenshots/new-tag.png | ||||
|  | ||||
| Searching provides auto complete and highlights the results. | ||||
|  | ||||
| .. image:: _static/screenshots/search-preview.png | ||||
|     :target: _static/screenshots/search-preview.png | ||||
| .. image:: _static/screenshots/search-results.png | ||||
|     :target: _static/screenshots/search-results.png | ||||
|  | ||||
| Fancy mail filters! | ||||
|  | ||||
| .. image:: _static/screenshots/mail-rules-edited.png | ||||
|     :target: _static/screenshots/mail-rules-edited.png | ||||
|  | ||||
| Mobile support in the future? This kinda works, however some layouts are still | ||||
| too wide. | ||||
| Mobile devices are supported. | ||||
|  | ||||
| .. image:: _static/screenshots/mobile.png | ||||
|     :target: _static/screenshots/mobile.png | ||||
|   | ||||
| @@ -291,12 +291,14 @@ writing. Windows is not and will never be supported. | ||||
|     *   ``libpq-dev`` for PostgreSQL | ||||
|     *   ``libmagic-dev`` for mime type detection | ||||
|     *   ``mime-support`` for mime type detection | ||||
|     *   ``libzbar0`` for barcode detection | ||||
|     *   ``poppler-utils`` for barcode detection | ||||
|  | ||||
|     Use this list for your preferred package management: | ||||
|  | ||||
|     .. code:: | ||||
|  | ||||
|         python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support | ||||
|         python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support libzbar0 poppler-utils | ||||
|  | ||||
|     These dependencies are required for OCRmyPDF, which is used for text recognition. | ||||
|  | ||||
| @@ -345,6 +347,8 @@ writing. Windows is not and will never be supported. | ||||
|         paperless stores its data. If you like, you can point both to the same directory. | ||||
|     *   ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure | ||||
|         to do so allows third parties to forge authentication credentials. | ||||
|     *   ``PAPERLESS_URL`` if you are behind a reverse proxy. This should point to your domain. Please see  | ||||
|         :ref:`configuration` for more information. | ||||
|  | ||||
|     Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended | ||||
|     for everyone: | ||||
| @@ -784,4 +788,6 @@ the following configuration is required for paperless to operate: | ||||
|         } | ||||
|     } | ||||
|  | ||||
| The ``PAPERLESS_URL`` configuration variable is also required when using a reverse proxy. Please refer to the :ref:`hosting-and-security` docs. | ||||
|  | ||||
| Also read `this <https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu>`__, towards the end of the section. | ||||
|   | ||||
| @@ -62,7 +62,7 @@ your documents: | ||||
|  | ||||
| 1.  OCR the document, if it has no text. Digital documents usually have text, | ||||
|     and this step will be skipped for those documents. | ||||
| 2.  Paperless will create an archiveable PDF/A document from your document. | ||||
| 2.  Paperless will create an archivable PDF/A document from your document. | ||||
|     If this document is coming from your scanner, it will have embedded selectable text. | ||||
| 3.  Paperless performs automatic matching of tags, correspondents and types on the | ||||
|     document before storing it in the database. | ||||
| @@ -102,12 +102,14 @@ files from the scanner.  Typically, you're looking at an FTP server like | ||||
|  | ||||
| .. TODO: hyperref to configuration of the location of this magic folder. | ||||
|  | ||||
| Dashboard upload | ||||
| ================ | ||||
| Web UI Upload | ||||
| ============= | ||||
|  | ||||
| The dashboard has a file drop field to upload documents to paperless. Simply drag a file | ||||
| onto this field or select a file with the file dialog. Multiple files are supported. | ||||
|  | ||||
| You can also upload documents on any other page of the web UI by dragging-and-dropping | ||||
| files into your browser window. | ||||
|  | ||||
| .. _usage-mobile_upload: | ||||
|  | ||||
| @@ -182,9 +184,10 @@ These are as follows: | ||||
|  | ||||
|     When defining a mail rule with a folder, you may need to try different characters to | ||||
|     define how the sub-folders are separated.  Common values include ".", "/" or "|", but | ||||
|     this varies by the mail server.  Unfortunately, this isn't a value we can determine | ||||
|     automatically.  Either check the documentation for your mail server, or check for | ||||
|     errors in the logs and try different folder separator values. | ||||
|     this varies by the mail server.  Check the documentation for your mail server.  In the | ||||
|     event of an error fetching mail from a certain folder, check the Paperless logs.  When | ||||
|     a folder is not located, Paperless will attempt to list all folders found in the account | ||||
|     to the Paperless logs. | ||||
|  | ||||
| .. note:: | ||||
|  | ||||
|   | ||||
 phail
					phail