mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Support css & js overrides
This commit is contained in:
		
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -61,6 +61,8 @@ target/ | |||||||
| media/documents/*.gpg | media/documents/*.gpg | ||||||
| media/documents/thumbnails/* | media/documents/thumbnails/* | ||||||
| media/documents/originals/* | media/documents/originals/* | ||||||
|  | media/overrides.css | ||||||
|  | media/overrides.js | ||||||
|  |  | ||||||
| # Sqlite database | # Sqlite database | ||||||
| db.sqlite3 | db.sqlite3 | ||||||
|   | |||||||
| @@ -14,6 +14,11 @@ Changelog | |||||||
|      doing active development on Paperless using the Docker environment: |      doing active development on Paperless using the Docker environment: | ||||||
|      `#376`_. |      `#376`_. | ||||||
|  |  | ||||||
|  | * You now also have the ability to customise the interface to your heart's | ||||||
|  |   content by creating a file called ``overrides.css`` and/or ``overrides.js`` | ||||||
|  |   in the root of your media directory.  Thanks to `Mark McFate`_ for this | ||||||
|  |   idea: `#371`_ | ||||||
|  |  | ||||||
|  |  | ||||||
| 2.0.0 | 2.0.0 | ||||||
| ===== | ===== | ||||||
| @@ -445,6 +450,7 @@ bulk of the work on this big change. | |||||||
| .. _thinkjk: https://github.com/thinkjk | .. _thinkjk: https://github.com/thinkjk | ||||||
| .. _mcronce: https://github.com/mcronce | .. _mcronce: https://github.com/mcronce | ||||||
| .. _Enno Lohmeier: https://github.com/elohmeier | .. _Enno Lohmeier: https://github.com/elohmeier | ||||||
|  | .. _Mark McFate: https://github.com/SummittDweller | ||||||
|  |  | ||||||
| .. _#20: https://github.com/danielquinn/paperless/issues/20 | .. _#20: https://github.com/danielquinn/paperless/issues/20 | ||||||
| .. _#44: https://github.com/danielquinn/paperless/issues/44 | .. _#44: https://github.com/danielquinn/paperless/issues/44 | ||||||
| @@ -515,6 +521,7 @@ bulk of the work on this big change. | |||||||
| .. _#351: https://github.com/danielquinn/paperless/pull/351 | .. _#351: https://github.com/danielquinn/paperless/pull/351 | ||||||
| .. _#352: https://github.com/danielquinn/paperless/pull/352 | .. _#352: https://github.com/danielquinn/paperless/pull/352 | ||||||
| .. _#354: https://github.com/danielquinn/paperless/issues/354 | .. _#354: https://github.com/danielquinn/paperless/issues/354 | ||||||
|  | .. _#371: https://github.com/danielquinn/paperless/issues/371 | ||||||
| .. _#374: https://github.com/danielquinn/paperless/pull/374 | .. _#374: https://github.com/danielquinn/paperless/pull/374 | ||||||
| .. _#375: https://github.com/danielquinn/paperless/pull/375 | .. _#375: https://github.com/danielquinn/paperless/pull/375 | ||||||
| .. _#376: https://github.com/danielquinn/paperless/pull/376 | .. _#376: https://github.com/danielquinn/paperless/pull/376 | ||||||
|   | |||||||
							
								
								
									
										27
									
								
								docs/customising.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								docs/customising.rst
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | .. _customising: | ||||||
|  |  | ||||||
|  | Customising Paperless | ||||||
|  | ##################### | ||||||
|  |  | ||||||
|  | Currently, the Paperless' interface is just the default Django admin, which | ||||||
|  | while powerful, is rather boring.  If you'd like to give the site a bit of a | ||||||
|  | face-lift, or if you simply want to adjust the colours, contrast, or font size | ||||||
|  | to make things easier to read, you can do that by adding your own CSS or | ||||||
|  | Javascript quite easily. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | .. _customising-overrides: | ||||||
|  |  | ||||||
|  | Overrides | ||||||
|  | ========= | ||||||
|  |  | ||||||
|  | On every page load, Paperless looks for two files in your media root directory | ||||||
|  | (the directory defined by your ``PAPERLESS_MEDIADIR`` configuration variable or | ||||||
|  | the default, ``<project root>/media/``) for two files: | ||||||
|  |  | ||||||
|  | * ``overrides.css`` | ||||||
|  | * ``overrides.js`` | ||||||
|  |  | ||||||
|  | If it finds either or both of those files, they'll be loaded into the page: the | ||||||
|  | CSS in the ``<head>``, and the Javascript stuffed into the last line of the | ||||||
|  | ``<body>``. | ||||||
| @@ -40,6 +40,7 @@ Contents | |||||||
|    utilities |    utilities | ||||||
|    guesswork |    guesswork | ||||||
|    migrating |    migrating | ||||||
|  |    customising | ||||||
|    extending |    extending | ||||||
|    troubleshooting |    troubleshooting | ||||||
|    scanners |    scanners | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								src/documents/templates/admin/base_site.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/documents/templates/admin/base_site.html
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | |||||||
|  | {% extends 'admin/base_site.html' %} | ||||||
|  |  | ||||||
|  | {# NOTE: This should probably be extending base.html.  See CSS comment below details. #} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {% load custom_css from customisation %} | ||||||
|  | {% load custom_js from customisation %} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {% block blockbots %} | ||||||
|  |  | ||||||
|  | 	{% comment %} | ||||||
|  | 		This really should be extending `extrastyle`, but the the | ||||||
|  | 		django-flat-responsive package decided that it wanted to put its CSS in | ||||||
|  | 		this block, so to make sure that overrides are in fact overriding | ||||||
|  | 		everything else, we have to do the Wrong Thing here. | ||||||
|  |  | ||||||
|  | 		Once we switch to Django 2.x and drop django-flat-responsive, we should | ||||||
|  | 		switch this to `extrastyle` where it should be. | ||||||
|  | 	{% endcomment %} | ||||||
|  |  | ||||||
|  | 	{{ block.super }} | ||||||
|  |  | ||||||
|  | 	{% custom_css %} | ||||||
|  |  | ||||||
|  | {% endblock blockbots %} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | {% block footer %} | ||||||
|  |  | ||||||
|  | 	{% comment %} | ||||||
|  | 		The Django admin doesn't have a block for Javascript you'd want placed in | ||||||
|  | 		the footer, so we have to use this one instead. | ||||||
|  | 	{% endcomment %} | ||||||
|  |  | ||||||
|  | 	{{ block.super }} | ||||||
|  |  | ||||||
|  | 	{% custom_js %} | ||||||
|  |  | ||||||
|  | {% endblock footer %} | ||||||
							
								
								
									
										37
									
								
								src/documents/templatetags/customisation.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								src/documents/templatetags/customisation.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,37 @@ | |||||||
|  | import os | ||||||
|  |  | ||||||
|  | from django import template | ||||||
|  | from django.conf import settings | ||||||
|  | from django.utils.safestring import mark_safe | ||||||
|  |  | ||||||
|  | register = template.Library() | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @register.simple_tag() | ||||||
|  | def custom_css(): | ||||||
|  |     theme_path = os.path.join( | ||||||
|  |         settings.MEDIA_ROOT, | ||||||
|  |         "overrides.css" | ||||||
|  |     ) | ||||||
|  |     if os.path.exists(theme_path): | ||||||
|  |         return mark_safe( | ||||||
|  |             '<link rel="stylesheet" type="text/css" href="{}" />'.format( | ||||||
|  |                 os.path.join(settings.MEDIA_URL, "overrides.css") | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |     return "" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | @register.simple_tag() | ||||||
|  | def custom_js(): | ||||||
|  |     theme_path = os.path.join( | ||||||
|  |         settings.MEDIA_ROOT, | ||||||
|  |         "overrides.js" | ||||||
|  |     ) | ||||||
|  |     if os.path.exists(theme_path): | ||||||
|  |         return mark_safe( | ||||||
|  |             '<script src="{}"></script>'.format( | ||||||
|  |                 os.path.join(settings.MEDIA_URL, "overrides.js") | ||||||
|  |             ) | ||||||
|  |         ) | ||||||
|  |     return "" | ||||||
| @@ -67,12 +67,12 @@ INSTALLED_APPS = [ | |||||||
|     "reminders.apps.RemindersConfig", |     "reminders.apps.RemindersConfig", | ||||||
|     "paperless_tesseract.apps.PaperlessTesseractConfig", |     "paperless_tesseract.apps.PaperlessTesseractConfig", | ||||||
|  |  | ||||||
|     "flat_responsive", |     "flat_responsive",  # TODO: Remove as of Django 2.x | ||||||
|     "django.contrib.admin", |     "django.contrib.admin", | ||||||
|  |  | ||||||
|     "rest_framework", |     "rest_framework", | ||||||
|     "crispy_forms", |     "crispy_forms", | ||||||
|     "django_filters" |     "django_filters", | ||||||
|  |  | ||||||
| ] | ] | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Daniel Quinn
					Daniel Quinn