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/thumbnails/* | ||||
| media/documents/originals/* | ||||
| media/overrides.css | ||||
| media/overrides.js | ||||
|  | ||||
| # Sqlite database | ||||
| db.sqlite3 | ||||
|   | ||||
| @@ -14,6 +14,11 @@ Changelog | ||||
|      doing active development on Paperless using the Docker environment: | ||||
|      `#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 | ||||
| ===== | ||||
| @@ -445,6 +450,7 @@ bulk of the work on this big change. | ||||
| .. _thinkjk: https://github.com/thinkjk | ||||
| .. _mcronce: https://github.com/mcronce | ||||
| .. _Enno Lohmeier: https://github.com/elohmeier | ||||
| .. _Mark McFate: https://github.com/SummittDweller | ||||
|  | ||||
| .. _#20: https://github.com/danielquinn/paperless/issues/20 | ||||
| .. _#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 | ||||
| .. _#352: https://github.com/danielquinn/paperless/pull/352 | ||||
| .. _#354: https://github.com/danielquinn/paperless/issues/354 | ||||
| .. _#371: https://github.com/danielquinn/paperless/issues/371 | ||||
| .. _#374: https://github.com/danielquinn/paperless/pull/374 | ||||
| .. _#375: https://github.com/danielquinn/paperless/pull/375 | ||||
| .. _#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 | ||||
|    guesswork | ||||
|    migrating | ||||
|    customising | ||||
|    extending | ||||
|    troubleshooting | ||||
|    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", | ||||
|     "paperless_tesseract.apps.PaperlessTesseractConfig", | ||||
|  | ||||
|     "flat_responsive", | ||||
|     "flat_responsive",  # TODO: Remove as of Django 2.x | ||||
|     "django.contrib.admin", | ||||
|  | ||||
|     "rest_framework", | ||||
|     "crispy_forms", | ||||
|     "django_filters" | ||||
|     "django_filters", | ||||
|  | ||||
| ] | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Daniel Quinn
					Daniel Quinn