Compare commits

...

49 Commits

Author SHA1 Message Date
Fabio Caccamo 520dceaa97 Updated CHANGELOG and version. 2021-11-25 11:58:11 +01:00
Fabio Caccamo 2fa85eb964 Fixed migration error. 2021-11-25 11:58:00 +01:00
Fabio Caccamo 3bc6e6fe3b Revert "Removed wrong migration."
This reverts commit 8ded8e160b.
2021-11-25 11:55:57 +01:00
Fabio Caccamo 3dc31df5f1 Updated CHANGELOG and version. 2021-11-25 11:49:22 +01:00
Fabio Caccamo 8ded8e160b Removed wrong migration. 2021-11-25 11:49:13 +01:00
Fabio Caccamo f4e5662e49 Updated README.md. [ci skip] 2021-11-24 18:49:47 +01:00
Fabio Caccamo dba9c35ac8 Updated CHANGELOG and version. 2021-11-24 18:47:05 +01:00
Fabio Caccamo 3431565f74 Removed theme css field. 2021-11-24 18:44:28 +01:00
Fabio Caccamo 6a42df67b1 Updated migration code generated by django. 2021-11-24 18:44:15 +01:00
Fabio Caccamo 593709808f Added foldable apps support. #117 2021-11-23 22:32:01 +01:00
Fabio Caccamo 3a2b59f7cc Create codeql-analysis.yml 2021-10-14 12:23:34 +02:00
Fabio Caccamo b7d9b969b4 Updated CHANGELOG and version. 2021-10-12 10:28:36 +02:00
Fabio Caccamo cacf0e0534 Fixed FileExtensionValidator TypeError on django < 1.11. 2021-10-12 10:28:19 +02:00
Fabio Caccamo e2239dcb99 Updated CHANGELOG and version. 2021-10-08 16:57:29 +02:00
Fabio Caccamo c769a449f2 Fixed FileExtensionValidator TypeError on django < 1.11. 2021-10-08 16:29:44 +02:00
Fabio Caccamo 3cff729a8a Updated CHANGELOG and version. 2021-09-24 09:08:05 +02:00
Fabio Caccamo c44db23b31 Fixed favicon fetching incompatible with django-storages S3. #128 2021-09-24 09:07:53 +02:00
Robert Durica 485f5400db Removed: Checking condition for colorfield package (#134) 2021-09-22 23:27:56 +02:00
Fabio Caccamo a2329fdae5 Updated CHANGELOG and version. 2021-09-16 15:48:16 +02:00
Fabio Caccamo a388ec234c Added logo_max_width and logo_max_height. #127 2021-09-16 15:47:14 +02:00
Fabio Caccamo a3b3f8922d Update CHANGELOG.md 2021-09-16 14:35:26 +02:00
Fabio Caccamo 6b6eed3aa0 Updated CHANGELOG and version. 2021-09-16 14:33:53 +02:00
Mason Neipp fd48e5ca97 Fixed 0020 migration for multiple dbs. #132 2021-09-04 14:45:49 +02:00
Fabio Caccamo fbc29246ff Improved header elements vertical alignment. 2021-05-06 23:34:49 +02:00
Fabio Caccamo 1569828c67 Updated README Installation section. [ci skip] 2021-05-02 10:39:56 +02:00
Fabio Caccamo bb73fafeff Fixed inlines vertical overlow. 2021-04-26 15:29:46 +02:00
Fabio Caccamo f76a41ff14 Fixed sticky pagination width and border-bottom. 2021-04-26 11:51:06 +02:00
Fabio Caccamo 4351751193 Updated CHANGELOG and version. 2021-04-26 10:18:58 +02:00
Fabio Caccamo 044ad518e0 Formatted migrations. 2021-04-26 10:16:03 +02:00
Fabio Caccamo 5b976adb1d Added missing 0021_file_extension_validator migration. #126 2021-04-26 10:15:24 +02:00
Fabio Caccamo 74732ec9a9 Added compat module. 2021-04-26 10:14:36 +02:00
Fabio Caccamo 5c85dc9cd4 Updated version and CHANGELOG. 2021-04-23 15:00:26 +02:00
Fabio Caccamo 66966501f8 Added FileExtensionValidator to logo and favicon fields. #112 2021-04-23 14:53:02 +02:00
Fabio Caccamo 30af685edf Improved selects min-width. 2021-04-21 11:30:30 +02:00
Fabio Caccamo 96d1568c13 Added min-width to selects. 2021-04-20 16:54:29 +02:00
Fabio Caccamo 7c04b35b44 Fixed related widget wrapper margin/padding with normal select. 2021-04-20 16:54:13 +02:00
Fabio Caccamo 004cd5fbcb Improved tabular inlines horizontal scroll. 2021-04-20 15:04:51 +02:00
Fabio Caccamo 8e37cdd218 Fixed related widget wrapper margin/padding in inlines. 2021-04-20 15:04:30 +02:00
Fabio Caccamo ba6807b7f3 Fixed changelist search and actions horizontal margins. 2021-04-16 12:33:21 +02:00
Fabio Caccamo 59a8b4d2d7 Removed invalid property. 2021-04-16 12:32:36 +02:00
Fabio Caccamo f72aac8848 Fixed changelist submit button margin left (with html minified). 2021-04-14 16:03:52 +02:00
Fabio Caccamo 41c6d5b7f1 Fixed header min-height. 2021-04-14 11:31:38 +02:00
Fabio Caccamo 554d8d27b7 Fixed models.W042 warning on django 3.2. 2021-04-14 11:18:58 +02:00
Fabio Caccamo c337c21a03 Added python 3.9 and django 3.2 to tox and travis. 2021-04-12 10:00:22 +02:00
Fabio Caccamo 0f9d502e4f Updated CHANGELOG and version. 2021-04-07 15:16:36 +02:00
Fabio Caccamo c961de3391 Overridden dark-mode css variables introduced in django 3.2. #124 2021-04-07 15:14:36 +02:00
Fabio Caccamo aec7ede184 Fixed delete confirmation styles selector prefix. 2021-04-07 15:13:23 +02:00
Natán d338e5914e Added custom style for the "Delete" and "Save" buttons from the delete confirmation page. (#123)
![Confirmation page](https://i.imgur.com/h4hflxu.png)
2021-04-07 15:09:20 +02:00
Fabio Caccamo 36971ad662 Fixed README links. [ci skip] 2021-03-30 18:17:29 +02:00
40 changed files with 683 additions and 124 deletions
+71
View File
@@ -0,0 +1,71 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '26 21 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript', 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+34 -18
View File
@@ -76,6 +76,10 @@ jobs:
env: TOX_ENV=py36-dj31-sqlite env: TOX_ENV=py36-dj31-sqlite
- python: "3.6" - python: "3.6"
env: TOX_ENV=py36-dj31-postgres env: TOX_ENV=py36-dj31-postgres
- python: "3.6"
env: TOX_ENV=py36-dj32-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj32-postgres
- python: "3.6" - python: "3.6"
env: TOX_ENV=py36-djmaster-sqlite env: TOX_ENV=py36-djmaster-sqlite
- python: "3.6" - python: "3.6"
@@ -100,6 +104,10 @@ jobs:
env: TOX_ENV=py37-dj31-sqlite env: TOX_ENV=py37-dj31-sqlite
- python: "3.7" - python: "3.7"
env: TOX_ENV=py37-dj31-postgres env: TOX_ENV=py37-dj31-postgres
- python: "3.7"
env: TOX_ENV=py37-dj32-sqlite
- python: "3.7"
env: TOX_ENV=py37-dj32-postgres
- python: "3.7" - python: "3.7"
env: TOX_ENV=py37-djmaster-sqlite env: TOX_ENV=py37-djmaster-sqlite
- python: "3.7" - python: "3.7"
@@ -116,26 +124,34 @@ jobs:
env: TOX_ENV=py38-dj31-sqlite env: TOX_ENV=py38-dj31-sqlite
- python: "3.8" - python: "3.8"
env: TOX_ENV=py38-dj31-postgres env: TOX_ENV=py38-dj31-postgres
- python: "3.8"
env: TOX_ENV=py38-dj32-sqlite
- python: "3.8"
env: TOX_ENV=py38-dj32-postgres
- python: "3.8" - python: "3.8"
env: TOX_ENV=py38-djmaster-sqlite env: TOX_ENV=py38-djmaster-sqlite
- python: "3.8" - python: "3.8"
env: TOX_ENV=py38-djmaster-postgres env: TOX_ENV=py38-djmaster-postgres
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj22-sqlite env: TOX_ENV=py39-dj22-sqlite
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj22-postgres env: TOX_ENV=py39-dj22-postgres
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj30-sqlite env: TOX_ENV=py39-dj30-sqlite
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj30-postgres env: TOX_ENV=py39-dj30-postgres
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj31-sqlite env: TOX_ENV=py39-dj31-sqlite
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-dj31-postgres env: TOX_ENV=py39-dj31-postgres
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-djmaster-sqlite env: TOX_ENV=py39-dj32-sqlite
# - python: "3.9" - python: "3.9"
# env: TOX_ENV=py39-djmaster-postgres env: TOX_ENV=py39-dj32-postgres
- python: "3.9"
env: TOX_ENV=py39-djmaster-sqlite
- python: "3.9"
env: TOX_ENV=py39-djmaster-postgres
allow_failures: allow_failures:
- env: TOX_ENV=py36-djmaster-sqlite - env: TOX_ENV=py36-djmaster-sqlite
- env: TOX_ENV=py36-djmaster-postgres - env: TOX_ENV=py36-djmaster-postgres
@@ -143,8 +159,8 @@ jobs:
- env: TOX_ENV=py37-djmaster-postgres - env: TOX_ENV=py37-djmaster-postgres
- env: TOX_ENV=py38-djmaster-sqlite - env: TOX_ENV=py38-djmaster-sqlite
- env: TOX_ENV=py38-djmaster-postgres - env: TOX_ENV=py38-djmaster-postgres
# - env: TOX_ENV=py39-djmaster-sqlite - env: TOX_ENV=py39-djmaster-sqlite
# - env: TOX_ENV=py39-djmaster-postgres - env: TOX_ENV=py39-djmaster-postgres
install: install:
- pip install tox - pip install tox
services: services:
+48
View File
@@ -4,6 +4,54 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.18.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.2) - 2021-10-25
- Fixed migration error.
## [0.18.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.1) - 2021-10-25
- Removed wrong migration.
## [0.18.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.0) - 2021-10-24
- Added foldable apps support. #117
- Removed `css` field from `Theme` model.
## [0.17.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.17.3) - 2021-10-12
- Fixed `FileExtensionValidator` `TypeError` on django < 1.11.
## [0.17.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.17.2) - 2021-10-08
- Fixed `FileExtensionValidator` `TypeError` on django < 1.11.
## [0.17.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.17.1) - 2021-09-24
- Fixed `TemplateDoesNotExist` error on `django==4.0.a1` removing checking condition for `colorfield` package. #134
- Fixed favicon fetching incompatible with `django-storages` `S3`. #128
## [0.17.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.17.0) - 2021-09-16
- Added `logo_max_width` and `logo_max_height`. #127
## [0.16.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.4) - 2021-09-04
- Fixed `0020_module_selected_colors` migration for multiple dbs. #132
- Fixed sticky pagination `width` and `border-bottom`.
- Fixed inlines vertical overlow.
- Improved header elements vertical alignment.
## [0.16.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.3) - 2021-04-26
- Added `compat` module.
- Added missing `0021_file_extension_validator` migration. #126
- Formatted migrations.
## [0.16.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.2) - 2021-04-23
- Added `python 3.9` and `django 3.2` to CI.
- Added `FileExtensionValidator` to `logo` and `favicon` fields. #112
- Fixed `models.W042` warning on `django 3.2`.
- Fixed header `min-height`.
- Fixed selects `min-width`.
- Fixed changelist search, actions and submit button horizontal margins.
- Fixed related widget wrapper margin/padding with normal select and in inlines.
- Fixed tabular inlines horizontal scroll.
## [0.16.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.1) - 2021-04-07
- Fixed style of "Delete" and "Save" buttons in the delete confirmation page. #123
- Overridden dark-mode css variables introduced in `django 3.2`. #124
## [0.16.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.0) - 2021-03-30 ## [0.16.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.0) - 2021-03-30
- Added customizable colors for selected apps and models in dashboard. #122 - Added customizable colors for selected apps and models in dashboard. #122
- Added `responsive_rtl.css` stylesheet. #98 - Added `responsive_rtl.css` stylesheet. #98
+6 -3
View File
@@ -26,6 +26,7 @@ django-admin-interface is a modern **responsive flat admin interface customizabl
- Environment name/marker - Environment name/marker
- Language chooser - Language chooser
- List filter dropdown - List filter dropdown
- `NEW` **Foldable apps** *(accordions in the navigation bar)*
- `NEW` **List filter sticky** - `NEW` **List filter sticky**
- `NEW` **Form controls sticky** *(pagination and save/delete buttons)* - `NEW` **Form controls sticky** *(pagination and save/delete buttons)*
- Compatibility / Style optimizations for: - Compatibility / Style optimizations for:
@@ -51,7 +52,9 @@ INSTALLED_APPS = (
#... #...
) )
X_FRAME_OPTIONS='SAMEORIGIN' # only if django version >= 3.0 # only if django version >= 3.0
X_FRAME_OPTIONS = 'SAMEORIGIN'
SILENCED_SYSTEM_CHECKS = ['security.W019']
``` ```
- Run ``python manage.py migrate`` - Run ``python manage.py migrate``
- Run ``python manage.py collectstatic`` - Run ``python manage.py collectstatic``
@@ -171,8 +174,8 @@ As everyone knows open-source projects takes up a lot of time that is unpaid. :m
If you are using this package in commercial project(s), please consider the idea to become a sponsor or donating once: If you are using this package in commercial project(s), please consider the idea to become a sponsor or donating once:
- ![GitHub Sponsor](https://github.com/sponsors/fabiocaccamo) - [GitHub Sponsor](https://github.com/sponsors/fabiocaccamo)
- ![PayPal](https://www.paypal.me/fabiocaccamo) - [PayPal](https://www.paypal.me/fabiocaccamo)
- BTC: bc1q2t0pv8z3udpyuvfnx5kskhqdad4dcvtfuzmvjw - BTC: bc1q2t0pv8z3udpyuvfnx5kskhqdad4dcvtfuzmvjw
- ETH: 0x8B55Fb7798b5A9F797A4455C00821B6e53daca74 - ETH: 0x8B55Fb7798b5A9F797A4455C00821B6e53daca74
+9 -5
View File
@@ -1,13 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from admin_interface.compat import gettext_lazy as _
from admin_interface.models import Theme from admin_interface.models import Theme
import django
from django.contrib import admin from django.contrib import admin
if django.VERSION < (2, 0):
from django.utils.translation import ugettext_lazy as _
else:
from django.utils.translation import gettext_lazy as _
class ThemeAdmin(admin.ModelAdmin): class ThemeAdmin(admin.ModelAdmin):
@@ -42,6 +38,8 @@ class ThemeAdmin(admin.ModelAdmin):
'classes': ('wide', ), 'classes': ('wide', ),
'fields': ( 'fields': (
'logo', 'logo',
'logo_max_width',
'logo_max_height',
'logo_color', 'logo_color',
'logo_visible', 'logo_visible',
) )
@@ -102,6 +100,12 @@ class ThemeAdmin(admin.ModelAdmin):
'css_delete_button_text_color', 'css_delete_button_text_color',
) )
}), }),
(_('Navigation Bar'), {
'classes': ('wide', ),
'fields': (
'foldable_apps',
)
}),
(_('Related Modal'), { (_('Related Modal'), {
'classes': ('wide', ), 'classes': ('wide', ),
'fields': ( 'fields': (
+3 -5
View File
@@ -1,18 +1,16 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import django from admin_interface.compat import gettext_lazy as _
from django.apps import AppConfig from django.apps import AppConfig
from django.db.models.signals import post_migrate from django.db.models.signals import post_migrate
if django.VERSION < (2, 0):
from django.utils.translation import ugettext_lazy as _
else:
from django.utils.translation import gettext_lazy as _
class AdminInterfaceConfig(AppConfig): class AdminInterfaceConfig(AppConfig):
name = 'admin_interface' name = 'admin_interface'
verbose_name = _('Admin Interface') verbose_name = _('Admin Interface')
default_auto_field = 'django.db.models.AutoField'
def ready(self): def ready(self):
+18
View File
@@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
import django
if django.VERSION < (2, 0):
from django.utils.encoding import force_text as force_str
from django.utils.translation import ugettext_lazy as gettext_lazy
else:
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy
if django.VERSION >= (1, 11):
from django.core.validators import FileExtensionValidator
else:
def FileExtensionValidator(*args, **kwargs):
def noop(*args, **kwargs):
pass
return noop
@@ -27,7 +27,6 @@
"css_delete_button_background_color": "#D9534F", "css_delete_button_background_color": "#D9534F",
"css_delete_button_background_hover_color": "#C9302C", "css_delete_button_background_hover_color": "#C9302C",
"css_delete_button_text_color": "#FFFFFF", "css_delete_button_text_color": "#FFFFFF",
"css": "",
"related_modal_active": true, "related_modal_active": true,
"related_modal_background_color": "#503873", "related_modal_background_color": "#503873",
"related_modal_background_opacity": 0.2, "related_modal_background_opacity": 0.2,
@@ -27,7 +27,6 @@
"css_delete_button_background_color": "#BA2121", "css_delete_button_background_color": "#BA2121",
"css_delete_button_background_hover_color": "#A41515", "css_delete_button_background_hover_color": "#A41515",
"css_delete_button_text_color": "#FFFFFF", "css_delete_button_text_color": "#FFFFFF",
"css": "",
"related_modal_active": true, "related_modal_active": true,
"related_modal_background_color": "#000000", "related_modal_background_color": "#000000",
"related_modal_background_opacity": 0.2, "related_modal_background_opacity": 0.2,
@@ -27,7 +27,6 @@
"css_delete_button_background_color": "#CC4B37", "css_delete_button_background_color": "#CC4B37",
"css_delete_button_background_hover_color": "#BF4634", "css_delete_button_background_hover_color": "#BF4634",
"css_delete_button_text_color": "#FFFFFF", "css_delete_button_text_color": "#FFFFFF",
"css": "",
"related_modal_active": true, "related_modal_active": true,
"related_modal_background_color": "#000000", "related_modal_background_color": "#000000",
"related_modal_background_opacity": 0.2, "related_modal_background_opacity": 0.2,
@@ -27,7 +27,6 @@
"css_delete_button_background_color": "#CD2026", "css_delete_button_background_color": "#CD2026",
"css_delete_button_background_hover_color": "#981B1E", "css_delete_button_background_hover_color": "#981B1E",
"css_delete_button_text_color": "#FFFFFF", "css_delete_button_text_color": "#FFFFFF",
"css": "",
"related_modal_active": true, "related_modal_active": true,
"related_modal_background_color": "#000000", "related_modal_background_color": "#000000",
"related_modal_background_opacity": 0.8, "related_modal_background_opacity": 0.8,
@@ -27,7 +27,6 @@
"css_delete_button_background_color": "#BA2121", "css_delete_button_background_color": "#BA2121",
"css_delete_button_background_hover_color": "#A41515", "css_delete_button_background_hover_color": "#A41515",
"css_delete_button_text_color": "#FFFFFF", "css_delete_button_text_color": "#FFFFFF",
"css": "",
"related_modal_active": true, "related_modal_active": true,
"related_modal_background_color": "#000000", "related_modal_background_color": "#000000",
"related_modal_background_opacity": 0.2, "related_modal_background_opacity": 0.2,
@@ -15,11 +15,21 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='env', name='env',
field=models.CharField(choices=[('development', 'Development'), ('testing', 'Testing'), ('staging', 'Staging'), ('production', 'Production')], default='development', max_length=50, verbose_name='enviroment'), field=models.CharField(
choices=[
('development', 'Development'),
('testing', 'Testing'),
('staging', 'Staging'),
('production', 'Production')],
default='development',
max_length=50,
verbose_name='enviroment'),
), ),
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='env_visible', name='env_visible',
field=models.BooleanField(default=True, verbose_name='visible'), field=models.BooleanField(
default=True,
verbose_name='visible'),
), ),
] ]
@@ -15,31 +15,55 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='active', name='active',
field=models.BooleanField(default=True, verbose_name='active'), field=models.BooleanField(
default=True,
verbose_name='active'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='css', name='css',
field=models.TextField(blank=True, verbose_name='text color'), field=models.TextField(
blank=True,
verbose_name='text color'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='env', name='env',
field=models.CharField(choices=[('development', 'Development'), ('testing', 'Testing'), ('staging', 'Staging'), ('production', 'Production')], default='development', max_length=50, verbose_name='environment'), field=models.CharField(
choices=[
('development', 'Development'),
('testing', 'Testing'),
('staging', 'Staging'),
('production', 'Production')
],
default='development',
max_length=50,
verbose_name='environment'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='logo', name='logo',
field=models.FileField(blank=True, help_text='Leave blank to use the default Django logo', upload_to='admin-interface/logo/', verbose_name='logo'), field=models.FileField(
blank=True,
help_text='Leave blank to use the default Django logo',
upload_to='admin-interface/logo/',
verbose_name='logo'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='name', name='name',
field=models.CharField(default='Django', max_length=50, verbose_name='name'), field=models.CharField(
default='Django',
max_length=50,
verbose_name='name'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='title', name='title',
field=models.CharField(blank=True, default='Django administration', max_length=50, verbose_name='title'), field=models.CharField(
blank=True,
default='Django administration',
max_length=50,
verbose_name='title'),
), ),
] ]
@@ -17,11 +17,21 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='logo_color', name='logo_color',
field=colorfield.fields.ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', max_length=10, verbose_name='color'), field=colorfield.fields.ColorField(
blank=True,
default='#FFFFFF',
help_text='#FFFFFF',
max_length=10,
verbose_name='color'),
), ),
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='title_color', name='title_color',
field=colorfield.fields.ColorField(blank=True, default='#F5DD5D', help_text='#F5DD5D', max_length=10, verbose_name='color'), field=colorfield.fields.ColorField(
blank=True,
default='#F5DD5D',
help_text='#F5DD5D',
max_length=10,
verbose_name='color'),
), ),
] ]
@@ -15,6 +15,8 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='related_modal_close_button_visible', name='related_modal_close_button_visible',
field=models.BooleanField(default=True, verbose_name='close button visible'), field=models.BooleanField(
default=True,
verbose_name='close button visible'),
), ),
] ]
@@ -15,6 +15,10 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='name', name='name',
field=models.CharField(default='Django', max_length=50, unique=True, verbose_name='name'), field=models.CharField(
default='Django',
max_length=50,
unique=True,
verbose_name='name'),
), ),
] ]
@@ -15,6 +15,8 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='language_chooser_active', name='language_chooser_active',
field=models.BooleanField(default=True, verbose_name='active'), field=models.BooleanField(
default=True,
verbose_name='active'),
), ),
] ]
@@ -15,6 +15,13 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='language_chooser_display', name='language_chooser_display',
field=models.CharField(choices=[('code', 'code'), ('name', 'name')], default='code', max_length=10, verbose_name='display'), field=models.CharField(
choices=[
('code', 'code'),
('name', 'name')
],
default='code',
max_length=10,
verbose_name='display'),
), ),
] ]
@@ -15,6 +15,8 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='theme', model_name='theme',
name='list_filter_dropdown', name='list_filter_dropdown',
field=models.BooleanField(default=True, verbose_name='use dropdown'), field=models.BooleanField(
default=True,
verbose_name='use dropdown'),
), ),
] ]
@@ -15,6 +15,8 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='list_filter_sticky', name='list_filter_sticky',
field=models.BooleanField(default=True, verbose_name='sticky position'), field=models.BooleanField(
default=True,
verbose_name='sticky position'),
), ),
] ]
@@ -1,4 +1,6 @@
# Generated by Django 3.1.5 on 2021-01-29 20:29 # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
@@ -13,11 +15,15 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='form_pagination_sticky', name='form_pagination_sticky',
field=models.BooleanField(default=False, verbose_name='sticky pagination'), field=models.BooleanField(
default=False,
verbose_name='sticky pagination'),
), ),
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='form_submit_sticky', name='form_submit_sticky',
field=models.BooleanField(default=False, verbose_name='sticky submit'), field=models.BooleanField(
default=False,
verbose_name='sticky submit'),
), ),
] ]
@@ -1,10 +1,19 @@
import colorfield.fields # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
from django.db.models import F from django.db.models import F
import colorfield.fields
def default_link_selected(apps, schema_editor): def default_link_selected(apps, schema_editor):
Theme = apps.get_model("admin_interface", "Theme") Theme = apps.get_model("admin_interface", "Theme")
Theme.objects.update(css_module_link_selected_color=F('css_module_link_color')) db_alias = schema_editor.connection.alias
Theme.objects.using(db_alias).update(
css_module_link_selected_color=F('css_module_link_color'))
class Migration(migrations.Migration): class Migration(migrations.Migration):
@@ -16,12 +25,22 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='css_module_background_selected_color', name='css_module_background_selected_color',
field=colorfield.fields.ColorField(blank=True, default='#FFFFCC', help_text='#FFFFCC', max_length=10, verbose_name='background selected color'), field=colorfield.fields.ColorField(
blank=True,
default='#FFFFCC',
help_text='#FFFFCC',
max_length=10,
verbose_name='background selected color'),
), ),
migrations.AddField( migrations.AddField(
model_name='theme', model_name='theme',
name='css_module_link_selected_color', name='css_module_link_selected_color',
field=colorfield.fields.ColorField(blank=True, default='#FFFFFF', help_text='#FFFFFF', max_length=10, verbose_name='link selected color'), field=colorfield.fields.ColorField(
blank=True,
default='#FFFFFF',
help_text='#FFFFFF',
max_length=10,
verbose_name='link selected color'),
), ),
migrations.RunPython(default_link_selected), migrations.RunPython(default_link_selected),
] ]
@@ -0,0 +1,45 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from admin_interface.compat import FileExtensionValidator
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0020_module_selected_colors'),
]
operations = [
migrations.AlterField(
model_name='theme',
name='favicon',
field=models.FileField(
blank=True,
help_text='(.ico|.png|.gif - 16x16|32x32 px)',
upload_to='admin-interface/favicon/',
validators=[
FileExtensionValidator(allowed_extensions=[
'gif', 'ico', 'jpg', 'jpeg', 'png', 'svg'
])
],
verbose_name='favicon'),
),
migrations.AlterField(
model_name='theme',
name='logo',
field=models.FileField(
blank=True,
help_text='Leave blank to use the default Django logo',
upload_to='admin-interface/logo/',
validators=[
FileExtensionValidator(allowed_extensions=[
'gif', 'jpg', 'jpeg', 'png', 'svg'
])
],
verbose_name='logo'),
),
]
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0021_file_extension_validator'),
]
operations = [
migrations.AddField(
model_name='theme',
name='logo_max_height',
field=models.PositiveSmallIntegerField(blank=True, default=100, verbose_name='max height'),
),
migrations.AddField(
model_name='theme',
name='logo_max_width',
field=models.PositiveSmallIntegerField(blank=True, default=400, verbose_name='max width'),
),
]
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0022_add_logo_max_width_and_height'),
]
operations = [
migrations.AddField(
model_name='theme',
name='foldable_apps',
field=models.BooleanField(default=True, verbose_name='foldable apps'),
),
]
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0023_theme_foldable_apps'),
]
operations = [
migrations.RemoveField(
model_name='theme',
name='css',
),
]
+17 -11
View File
@@ -3,18 +3,12 @@
from __future__ import unicode_literals from __future__ import unicode_literals
from admin_interface.cache import del_cached_active_theme from admin_interface.cache import del_cached_active_theme
from admin_interface.compat import FileExtensionValidator, force_str, gettext_lazy as _
from colorfield.fields import ColorField from colorfield.fields import ColorField
import django
from django.db import models from django.db import models
from django.db.models.signals import post_delete, post_save, pre_save from django.db.models.signals import post_delete, post_save, pre_save
if django.VERSION < (2, 0):
from django.utils.encoding import force_text as force_str
from django.utils.translation import ugettext_lazy as _
else:
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from six import python_2_unicode_compatible from six import python_2_unicode_compatible
@@ -99,6 +93,8 @@ class Theme(models.Model):
logo = models.FileField( logo = models.FileField(
upload_to='admin-interface/logo/', upload_to='admin-interface/logo/',
blank=True, blank=True,
validators=[FileExtensionValidator(
allowed_extensions=['gif', 'jpg', 'jpeg', 'png', 'svg'])],
help_text=_('Leave blank to use the default Django logo'), help_text=_('Leave blank to use the default Django logo'),
verbose_name=_('logo')) verbose_name=_('logo'))
logo_color = ColorField( logo_color = ColorField(
@@ -107,6 +103,14 @@ class Theme(models.Model):
help_text='#FFFFFF', help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_('color')) verbose_name=_('color'))
logo_max_width = models.PositiveSmallIntegerField(
blank=True,
default=400,
verbose_name=_('max width'))
logo_max_height = models.PositiveSmallIntegerField(
blank=True,
default=100,
verbose_name=_('max height'))
logo_visible = models.BooleanField( logo_visible = models.BooleanField(
default=True, default=True,
verbose_name=_('visible')) verbose_name=_('visible'))
@@ -114,6 +118,8 @@ class Theme(models.Model):
favicon = models.FileField( favicon = models.FileField(
upload_to='admin-interface/favicon/', upload_to='admin-interface/favicon/',
blank=True, blank=True,
validators=[FileExtensionValidator(
allowed_extensions=['gif', 'ico', 'jpg', 'jpeg', 'png', 'svg'])],
help_text=_('(.ico|.png|.gif - 16x16|32x32 px)'), help_text=_('(.ico|.png|.gif - 16x16|32x32 px)'),
verbose_name=_('favicon')) verbose_name=_('favicon'))
@@ -263,10 +269,6 @@ class Theme(models.Model):
max_length=10, max_length=10,
verbose_name=_('text color')) verbose_name=_('text color'))
css = models.TextField(
blank=True,
verbose_name=_('text color'))
related_modal_active = models.BooleanField( related_modal_active = models.BooleanField(
default=True, default=True,
verbose_name=_('active')) verbose_name=_('active'))
@@ -307,6 +309,10 @@ class Theme(models.Model):
default=True, default=True,
verbose_name=_('sticky position')) verbose_name=_('sticky position'))
foldable_apps = models.BooleanField(
default=True,
verbose_name=_('foldable apps'))
recent_actions_visible = models.BooleanField( recent_actions_visible = models.BooleanField(
default=True, default=True,
verbose_name=_('visible')) verbose_name=_('visible'))
-1
View File
@@ -23,6 +23,5 @@ def check_installed_app(app, app_dj_version_limit):
def check_installed_apps(): def check_installed_apps():
check_installed_app('colorfield', (4, 0))
check_installed_app('flat', (1, 9)) check_installed_app('flat', (1, 9))
check_installed_app('flat_responsive', (2, 0)) check_installed_app('flat_responsive', (2, 0))
@@ -0,0 +1,70 @@
.admin-interface.foldable-apps [class^="app-"].module {
visibility: hidden;
}
.admin-interface.foldable-apps [class^="app-"].module.foldable-apps-ready {
visibility: visible;
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption {
position: relative;
z-index: 0;
/* pointer-events: none; */
cursor: pointer;
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently supported by Chrome and Opera */
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption > a {
display: inline-block;
/* pointer-events: all !important; */
margin-right: 30px;
}
.admin-interface.foldable-apps [class^="app-"].module > table > caption::after {
position: absolute;
top: 0;
right: 0;
z-index: 10;
width: auto;
height: 100%;
content: "";
font-size: 16px;
font-weight: lighter;
text-align: center;
padding-left: 10px;
padding-right: 10px;
cursor: pointer;
pointer-events: all !important;
display: flex;
flex-direction: column;
justify-content: center;
}
@media (min-width: 1024px) {
.admin-interface.foldable-apps [class^="app-"].module > table > caption::after {
padding-left: 15px;
padding-right: 15px;
}
}
.admin-interface.foldable-apps [class^="app-"].module > table {
display: table;
width: 100%;
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed {
margin-bottom: 10px;
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed > table > caption::after {
content: "+";
}
.admin-interface.foldable-apps [class^="app-"].module.collapsed > table > tbody {
display: none;
}
@@ -0,0 +1,35 @@
(function() {
window.onload = function() {
for (let moduleEl of document.querySelectorAll('.admin-interface.foldable-apps [class^="app-"].module')) {
// apply collapsed value from localstorage value
let moduleAppClass = null;
let moduleCollapsedClass = 'collapsed';
moduleEl.classList.forEach(function(className) {
if (className.startsWith('app-')) {
moduleAppClass = className;
}
});
if (moduleAppClass) {
let moduleAppKey = 'admin-interface.foldable-apps_' + moduleAppClass + '_collapsed';
let moduleCollapsed = Boolean(parseInt((localStorage.getItem(moduleAppKey) || 0)) || 0);
if (moduleCollapsed === true) {
moduleEl.classList.add(moduleCollapsedClass);
} else {
moduleEl.classList.remove(moduleCollapsedClass);
}
// attach click for togggle collapsed class
for (let captionEl of moduleEl.querySelectorAll('caption')) {
captionEl.onclick = function(event) {
// only when not clicking on the app name link
if (event.target.tagName.toLowerCase() === 'caption') {
moduleEl.classList.toggle(moduleCollapsedClass);
moduleCollapsed = moduleEl.classList.contains(moduleCollapsedClass);
localStorage.setItem(moduleAppKey, (moduleCollapsed ? 1 : 0));
}
};
}
}
moduleEl.classList.add('foldable-apps-ready');
}
};
})();
+13 -6
View File
@@ -29,11 +29,6 @@ https://github.com/fabiocaccamo/django-admin-interface
{% include "admin_interface/css/tinymce.css" %} {% include "admin_interface/css/tinymce.css" %}
{% include "admin_interface/css/json-widget.css" %} {% include "admin_interface/css/json-widget.css" %}
{% include "admin_interface/css/rtl.css" %} {% include "admin_interface/css/rtl.css" %}
{% if theme.css %}
{{ theme.css|safe }}
{% endif %}
</style> </style>
{% if current_lang == 'fa' %} {% if current_lang == 'fa' %}
@@ -51,10 +46,22 @@ https://github.com/fabiocaccamo/django-admin-interface
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/responsive.css' %}?v={{ version }}"> <link rel="stylesheet" type="text/css" href="{% static 'admin/css/responsive.css' %}?v={{ version }}">
<link rel="stylesheet" type="text/css" href="{% static 'admin/css/responsive_rtl.css' %}?v={{ version }}" /> <link rel="stylesheet" type="text/css" href="{% static 'admin/css/responsive_rtl.css' %}?v={{ version }}" />
{% include "admin_interface/favicon.html" %} {% include "admin_interface/favicon.html" %}
{% include "admin_interface/foldable-apps.html" %}
{% include "admin_interface/related-modal.html" %} {% include "admin_interface/related-modal.html" %}
{% endblock %} {% endblock %}
{% block bodyclass %}admin-interface flat-theme {% get_admin_interface_theme as theme %}{% if theme.name %}{{ theme.name|slugify }}-theme{% endif %}{% if theme.form_submit_sticky %} sticky-submit {% endif %}{% if theme.form_pagination_sticky %} sticky-pagination {% endif %}{% endblock %} {% block extrahead %}
{{ block.super }}
{% endblock %}
{% block bodyclass %}
{% get_admin_interface_theme as theme %}
flat-theme admin-interface
{% if theme.name %} {{ theme.name|slugify }}-theme {% endif %}
{% if theme.foldable_apps %} foldable-apps {% endif %}
{% if theme.form_submit_sticky %} sticky-submit {% endif %}
{% if theme.form_pagination_sticky %} sticky-pagination {% endif %}
{% endblock %}
{% block branding %} {% block branding %}
{% get_admin_interface_theme as theme %} {% get_admin_interface_theme as theme %}
@@ -23,6 +23,7 @@
} }
.admin-interface.login #header { .admin-interface.login #header {
min-height: auto;
padding: 10px 30px; padding: 10px 30px;
line-height: 30px; line-height: 30px;
align-items: flex-start; align-items: flex-start;
@@ -40,7 +41,6 @@
.admin-interface.login #header #branding h1 img.logo+span { .admin-interface.login #header #branding h1 img.logo+span {
display: block; display: block;
margin-bottom: 5px;
} }
.admin-interface.login #login-form { .admin-interface.login #login-form {
@@ -72,22 +72,21 @@
/* end login fix*/ /* end login fix*/
.admin-interface #header { .admin-interface #header {
height:auto; height: auto;
min-height:40px; min-height: 55px;
box-sizing: border-box;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: start; align-items: center;
} }
@media (max-width:1024px) { @media (max-width:1024px) {
.admin-interface #header { .admin-interface #header {
align-items: flex-start; align-items: center;
} }
} }
.admin-interface #branding h1 img.logo { .admin-interface #branding h1 img.logo {
max-width: 400px;
max-height:100px;
margin-top:10px; margin-top:10px;
margin-bottom:10px; margin-bottom:10px;
margin-right:15px; margin-right:15px;
@@ -102,13 +101,28 @@
.admin-interface #branding h1 span { .admin-interface #branding h1 span {
display: inline-block; display: inline-block;
margin-bottom: 5px;
} }
.admin-interface #branding h1 img.logo+span { .admin-interface #branding h1 img.logo+span {
white-space:nowrap; white-space:nowrap;
} }
.admin-interface #user-tools {
margin-top: 10px;
margin-bottom: 10px;
white-space: nowrap;
align-self: flex-start;
}
.admin-interface #user-tools br {
display: none;
}
@media (max-width: 768px) {
.admin-interface #user-tools br {
display: block;
}
}
.admin-interface fieldset.collapse { .admin-interface fieldset.collapse {
border: 1px solid transparent; border: 1px solid transparent;
} }
@@ -122,6 +136,13 @@
padding: 0 1px; padding: 0 1px;
} }
@media (min-width: 1024px) {
.admin-interface #changelist .actions .button,
.admin-interface #changelist .actions .action-counter {
margin-left: 8px;
}
}
.admin-interface #changelist .paginator { .admin-interface #changelist .paginator {
margin-top:-1px; /* merge 2 borders into 1 */ margin-top:-1px; /* merge 2 borders into 1 */
line-height:42px; line-height:42px;
@@ -184,7 +205,6 @@ body.admin-interface .paginator a.showall:visited {
.admin-interface form .form-row p.file-upload .clearable-file-input { .admin-interface form .form-row p.file-upload .clearable-file-input {
display:inline-block; display:inline-block;
margin-left:
} }
.admin-interface form .form-row p.file-upload .clearable-file-input label { .admin-interface form .form-row p.file-upload .clearable-file-input label {
@@ -303,16 +323,13 @@ body.admin-interface .paginator a.showall:visited {
} }
/* end fix */ /* end fix */
/* begin fix issue #10 - Related widget broken in long tabular inline */
.admin-interface .inline-group .tabular .related-widget-wrapper {
white-space:nowrap;
}
/* end fix */
/* begin fix tabular inlines horizontal scroll */ /* begin fix tabular inlines horizontal scroll */
.admin-interface .inline-related.tabular {
overflow-x: scroll;
overflow-y: hidden;
}
.admin-interface .inline-related.tabular fieldset.module { .admin-interface .inline-related.tabular fieldset.module {
display: contents; display: contents;
overflow-x: scroll;
width: 100%; width: 100%;
white-space: nowrap; white-space: nowrap;
position: relative; position: relative;
@@ -458,17 +475,31 @@ body.admin-interface .paginator a.showall:visited {
} }
/* fixed related widget and select2 */ /* fixed related widget and select2 */
.admin-interface .aligned .form-row .related-widget-wrapper { /* begin fix issue #10 - Related widget broken in long tabular inline */
.admin-interface .related-widget-wrapper {
white-space: nowrap; white-space: nowrap;
} }
/* end fix */
.admin-interface .aligned .form-row .related-widget-wrapper .select2-container ~ .related-widget-wrapper-link { .admin-interface .related-widget-wrapper select + .related-widget-wrapper-link,
margin-left: 0; .admin-interface .related-widget-wrapper .select2-container + .related-widget-wrapper-link {
padding: 4px 8px 6px 8px; margin-left: 12px !important;
} }
.admin-interface .aligned .form-row .related-widget-wrapper .select2-container + .related-widget-wrapper-link { @media (min-width: 768px) {
margin-left: 5px !important; .admin-interface.change-form select {
min-width: 150px;
}
}
@media (min-width: 1024px) {
.admin-interface.change-form select {
min-width: 200px;
}
}
.admin-interface.change-form .inline-related.tabular select {
min-width: auto !important;
} }
/* fixed time widget header border radius */ /* fixed time widget header border radius */
@@ -482,6 +513,18 @@ body.admin-interface .paginator a.showall:visited {
padding: 2px 5px 3px 5px; padding: 2px 5px 3px 5px;
} }
@media (min-width: 1024px) {
.admin-interface #changelist #changelist-search #searchbar,
.admin-interface #changelist #changelist-search input[type="submit"],
.admin-interface #changelist #changelist-search .quiet {
margin-left: 8px;
}
.admin-interface #changelist #changelist-search label img {
vertical-align: text-top;
margin-right: 0px;
}
}
@media (max-width: 1024px) { @media (max-width: 1024px) {
.admin-interface #changelist #toolbar { .admin-interface #changelist #toolbar {
border-top: 1px solid #eee; border-top: 1px solid #eee;
File diff suppressed because one or more lines are too long
@@ -42,7 +42,7 @@
@media (min-width:1280px) { @media (min-width:1280px) {
.admin-interface.sticky-pagination.change-list:not(.popup) #main.shifted > #nav-sidebar + .content .paginator { .admin-interface.sticky-pagination.change-list:not(.popup) #main.shifted > #nav-sidebar + .content .paginator {
width: calc(100% - 359px); width: calc(100% - 360px);
} }
} }
@@ -66,7 +66,7 @@
text-overflow: ellipsis; text-overflow: ellipsis;
border-radius: 0; border-radius: 0;
border-top: 1px solid #EEEEEE; border-top: 1px solid #EEEEEE;
border-bottom: none; border-bottom: none !important;
margin: 0; margin: 0;
} }
@@ -1,7 +1,7 @@
{% load static %} {% load static %}
{% if theme.favicon %} {% if theme.favicon %}
<link rel="icon" href="{{ theme.favicon.url }}?v={{ version }}"> <link rel="icon" href="{{ theme.favicon.url }}">
{% if theme.env_visible_in_favicon %} {% if theme.env_visible_in_favicon %}
<script type="text/javascript" src="{% static 'admin_interface/favico/favico-0.3.10-patched.min.js' %}?v={{ version }}"></script> <script type="text/javascript" src="{% static 'admin_interface/favico/favico-0.3.10-patched.min.js' %}?v={{ version }}"></script>
<script type="text/javascript"> <script type="text/javascript">
@@ -0,0 +1,6 @@
{% load static %}
{% if theme.foldable_apps %}
<link rel="stylesheet" type="text/css" href="{% static 'admin_interface/foldable-apps/foldable-apps.css' %}?v={{ version }}">
<script type="text/javascript" src="{% static 'admin_interface/foldable-apps/foldable-apps.js' %}?v={{ version }}"></script>
{% endif %}
+1 -1
View File
@@ -1,3 +1,3 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
__version__ = '0.16.0' __version__ = '0.18.2'
+1
View File
@@ -55,6 +55,7 @@ setup(
'Framework :: Django :: 2.2', 'Framework :: Django :: 2.2',
'Framework :: Django :: 3.0', 'Framework :: Django :: 3.0',
'Framework :: Django :: 3.1', 'Framework :: Django :: 3.1',
'Framework :: Django :: 3.2',
'Intended Audience :: Developers', 'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License', 'License :: OSI Approved :: MIT License',
'Natural Language :: English', 'Natural Language :: English',
+5 -4
View File
@@ -2,10 +2,10 @@
envlist = envlist =
py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres}, py27-{dj17,dj18,dj19,dj110,dj111}-{sqlite,postgres},
py35-{dj18,dj19,dj110,dj111,dj20,dj21,dj22}-{sqlite,postgres}, py35-{dj18,dj19,dj110,dj111,dj20,dj21,dj22}-{sqlite,postgres},
py36-{dj18,dj19,dj110,dj111,dj20,dj21,dj22,dj30,dj31,djmaster}-{sqlite,postgres}, py36-{dj18,dj19,dj110,dj111,dj20,dj21,dj22,dj30,dj31,dj32,djmaster}-{sqlite,postgres},
py37-{dj20,dj21,dj22,dj30,dj31,djmaster}-{sqlite,postgres}, py37-{dj20,dj21,dj22,dj30,dj31,dj32,djmaster}-{sqlite,postgres},
py38-{dj22,dj30,dj31,djmaster}-{sqlite,postgres}, py38-{dj22,dj30,dj31,dj32,djmaster}-{sqlite,postgres},
py39-{dj22,dj30,dj31,djmaster}-{sqlite,postgres}, py39-{dj22,dj30,dj31,dj32,djmaster}-{sqlite,postgres},
[testenv] [testenv]
passenv = CI TRAVIS TRAVIS_* passenv = CI TRAVIS TRAVIS_*
deps = deps =
@@ -19,6 +19,7 @@ deps =
dj22: Django == 2.2.* dj22: Django == 2.2.*
dj30: Django == 3.0.* dj30: Django == 3.0.*
dj31: Django == 3.1.* dj31: Django == 3.1.*
dj32: Django == 3.2.*
djmaster: https://github.com/django/django/archive/master.tar.gz djmaster: https://github.com/django/django/archive/master.tar.gz
# mysql: mysqlclient # mysql: mysqlclient
postgres: psycopg2-binary postgres: psycopg2-binary