Compare commits

..

No commits in common. "master" and "0.18.1" have entirely different histories.

180 changed files with 3232 additions and 8484 deletions

6
.github/FUNDING.yml vendored
View File

@ -1,6 +1,2 @@
github: [fabiocaccamo] github: [fabiocaccamo]
polar: fabiocaccamo custom: ['https://www.paypal.me/fabiocaccamo']
ko_fi: fabiocaccamo
liberapay: fabiocaccamo
tidelift: pypi/django-admin-interface
custom: ["https://www.buymeacoffee.com/fabiocaccamo", "https://www.paypal.me/fabiocaccamo"]

View File

@ -6,3 +6,5 @@ labels: enhancement
assignees: fabiocaccamo assignees: fabiocaccamo
--- ---

View File

@ -1,14 +0,0 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "monthly"
open-pull-requests-limit: 100
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
open-pull-requests-limit: 100

View File

@ -1,17 +0,0 @@
---
name: Pull request
about: Submit a pull request for this project
assignees: fabiocaccamo
---
**Describe your changes**
?
**Related issue**
?
**Checklist before requesting a review**
- [ ] I have performed a self-review of my code.
- [ ] I have added tests for the proposed changes.
- [ ] I have run the tests and there are not errors.

View File

@ -13,10 +13,10 @@ name: "CodeQL"
on: on:
push: push:
branches: [ main ] branches: [ master ]
pull_request: pull_request:
# The branches below must be a subset of the branches above # The branches below must be a subset of the branches above
branches: [ main ] branches: [ master ]
schedule: schedule:
- cron: '26 21 * * 0' - cron: '26 21 * * 0'
@ -39,11 +39,11 @@ jobs:
steps: steps:
- name: Checkout repository - name: Checkout repository
uses: actions/checkout@v4 uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning. # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/init@v3 uses: github/codeql-action/init@v1
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file. # If you wish to specify custom queries, you can do so here or in a config file.
@ -54,7 +54,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # 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) # If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild - name: Autobuild
uses: github/codeql-action/autobuild@v3 uses: github/codeql-action/autobuild@v1
# Command-line programs to run using the OS shell. # Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl # 📚 https://git.io/JvXDl
@ -68,4 +68,4 @@ jobs:
# make release # make release
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3 uses: github/codeql-action/analyze@v1

View File

@ -1,45 +0,0 @@
name: Create release
on:
push:
tags:
- '*.*.*'
jobs:
build:
runs-on: ubuntu-latest
# environment: release
permissions:
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Extract release notes
id: extract-release-notes
uses: ffurrer2/extract-release-notes@v2
- name: Create release
uses: ncipollo/release-action@v1
with:
body: ${{ steps.extract-release-notes.outputs.release_notes }}
token: ${{ secrets.WORKFLOWS_CREATE_RELEASE_TOKEN }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
cache: 'pip'
- name: Build Package
run: |
pip install pip --upgrade
pip install build
python -m build
- name: Publish on PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist/
# password: ${{ secrets.WORKFLOWS_PUBLISH_TO_PYPI_TOKEN }}

View File

@ -1,25 +0,0 @@
name: Pre-commit auto-update
on:
# every month
schedule:
- cron: "0 0 1 * *"
# on demand
workflow_dispatch:
jobs:
auto-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.x'
- uses: browniebroke/pre-commit-autoupdate-action@main
- uses: peter-evans/create-pull-request@v6
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: update/pre-commit-hooks
title: Update pre-commit hooks
commit-message: "Update pre-commit hooks."
body: Update versions of pre-commit hooks to latest version.

View File

@ -1,125 +0,0 @@
name: Test package
on:
push:
pull_request:
workflow_dispatch:
jobs:
prepare:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Create matrix
uses: fabiocaccamo/create-matrix-action@v4
id: create_matrix
with:
matrix: |
python-version {3.8}, django-version {3.0, 3.1, 3.2, 4.0, 4.1, 4.2}, database {sqlite, postgres}
python-version {3.9}, django-version {3.0, 3.1, 3.2, 4.0, 4.1, 4.2}, database {sqlite, postgres}
python-version {3.10}, django-version {3.2, 4.0, 4.1, 4.2, 5.0}, database {sqlite, postgres}
python-version {3.11}, django-version {4.1, 4.2, 5.0}, database {sqlite, postgres}
python-version {3.12}, django-version {4.2, 5.0}, database {sqlite, postgres}
outputs:
matrix: ${{ steps.create_matrix.outputs.matrix }}
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
cache: 'pip'
- name: Install tools needed
run: |
sudo apt install gettext
python -m pip install --upgrade pip
pip install tox
- name: Check migrations
run: |
tox -e migrations
- name: Check translations
run: |
tox -e translations
test:
needs: [prepare]
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include: ${{fromJson(needs.prepare.outputs.matrix)}}
services:
postgres:
image: postgres:latest
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432:5432
# needed because the postgres container does not provide a healthcheck
options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
steps:
- uses: actions/checkout@v4
- name: Install psycopg2 prerequisites
run: sudo apt install libpq-dev
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'
- name: Upgrade pip version
run: |
pip install pip --upgrade
- name: Install django
run: |
pip install "Django == ${{ matrix.django-version }}.*"
- name: Install requirements
run: |
pip install -r requirements.txt
pip install -r requirements-test.txt
- name: Run pre-commit
run: |
pre-commit run --all-files --show-diff-on-failure --verbose
- name: Run tests
env:
DATABASE_ENGINE: ${{ matrix.database }}
run: |
coverage run --append --source=admin_interface runtests.py
coverage report --show-missing
coverage xml -o ./coverage.xml
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: false
files: ./coverage.xml
flags: unittests
verbose: true

6
.gitignore vendored
View File

@ -5,10 +5,6 @@ __pycache__/
# C extensions # C extensions
*.so *.so
## Local setup
.vscode/
.venv/
# Distribution / packaging # Distribution / packaging
.Python .Python
env/ env/
@ -60,5 +56,3 @@ docs/_build/
target/ target/
screenshots screenshots
TODO.txt TODO.txt
.idea/

View File

@ -1,32 +0,0 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/asottile/pyupgrade
rev: v3.15.2
hooks:
- id: pyupgrade
args: ["--py38-plus"]
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.16.0
hooks:
- id: django-upgrade
args: ["--target-version", "3.0"]
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.3.4
hooks:
- id: ruff
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
hooks:
- id: fix-encoding-pragma
args: [--remove]
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files

171
.travis.yml 100644
View File

@ -0,0 +1,171 @@
os: linux
dist: xenial
language: python
cache: pip
jobs:
include:
- python: "2.7"
env: TOX_ENV=py27-dj17-sqlite
- python: "2.7"
env: TOX_ENV=py27-dj17-postgres
- python: "2.7"
env: TOX_ENV=py27-dj18-sqlite
- python: "2.7"
env: TOX_ENV=py27-dj18-postgres
- python: "2.7"
env: TOX_ENV=py27-dj19-sqlite
- python: "2.7"
env: TOX_ENV=py27-dj19-postgres
- python: "2.7"
env: TOX_ENV=py27-dj110-sqlite
- python: "2.7"
env: TOX_ENV=py27-dj110-postgres
- python: "2.7"
env: TOX_ENV=py27-dj111-sqlite
- python: "2.7"
env: TOX_ENV=py27-dj111-postgres
- python: "3.5"
env: TOX_ENV=py35-dj18-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj18-postgres
- python: "3.5"
env: TOX_ENV=py35-dj19-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj19-postgres
- python: "3.5"
env: TOX_ENV=py35-dj110-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj110-postgres
- python: "3.5"
env: TOX_ENV=py35-dj111-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj111-postgres
- python: "3.5"
env: TOX_ENV=py35-dj20-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj20-postgres
- python: "3.5"
env: TOX_ENV=py35-dj21-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj21-postgres
# - python: "3.5"
# env: TOX_ENV=py35-dj22-sqlite
- python: "3.5"
env: TOX_ENV=py35-dj22-postgres
- python: "3.6"
env: TOX_ENV=py36-dj111-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj111-postgres
- python: "3.6"
env: TOX_ENV=py36-dj20-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj20-postgres
- python: "3.6"
env: TOX_ENV=py36-dj21-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj21-postgres
- python: "3.6"
env: TOX_ENV=py36-dj22-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj22-postgres
- python: "3.6"
env: TOX_ENV=py36-dj30-sqlite
- python: "3.6"
env: TOX_ENV=py36-dj30-postgres
- python: "3.6"
env: TOX_ENV=py36-dj31-sqlite
- python: "3.6"
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"
env: TOX_ENV=py36-djmaster-sqlite
- python: "3.6"
env: TOX_ENV=py36-djmaster-postgres
- python: "3.7"
env: TOX_ENV=py37-dj20-sqlite
- python: "3.7"
env: TOX_ENV=py37-dj20-postgres
- python: "3.7"
env: TOX_ENV=py37-dj21-sqlite
- python: "3.7"
env: TOX_ENV=py37-dj21-postgres
- python: "3.7"
env: TOX_ENV=py37-dj22-sqlite
- python: "3.7"
env: TOX_ENV=py37-dj22-postgres
- python: "3.7"
env: TOX_ENV=py37-dj30-sqlite
- python: "3.7"
env: TOX_ENV=py37-dj30-postgres
- python: "3.7"
env: TOX_ENV=py37-dj31-sqlite
- python: "3.7"
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"
env: TOX_ENV=py37-djmaster-sqlite
- python: "3.7"
env: TOX_ENV=py37-djmaster-postgres
- python: "3.8"
env: TOX_ENV=py38-dj22-sqlite
- python: "3.8"
env: TOX_ENV=py38-dj22-postgres
- python: "3.8"
env: TOX_ENV=py38-dj30-sqlite
- python: "3.8"
env: TOX_ENV=py38-dj30-postgres
- python: "3.8"
env: TOX_ENV=py38-dj31-sqlite
- python: "3.8"
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"
env: TOX_ENV=py38-djmaster-sqlite
- python: "3.8"
env: TOX_ENV=py38-djmaster-postgres
- python: "3.9"
env: TOX_ENV=py39-dj22-sqlite
- python: "3.9"
env: TOX_ENV=py39-dj22-postgres
- python: "3.9"
env: TOX_ENV=py39-dj30-sqlite
- python: "3.9"
env: TOX_ENV=py39-dj30-postgres
- python: "3.9"
env: TOX_ENV=py39-dj31-sqlite
- python: "3.9"
env: TOX_ENV=py39-dj31-postgres
- python: "3.9"
env: TOX_ENV=py39-dj32-sqlite
- python: "3.9"
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:
- env: TOX_ENV=py36-djmaster-sqlite
- env: TOX_ENV=py36-djmaster-postgres
- env: TOX_ENV=py37-djmaster-sqlite
- env: TOX_ENV=py37-djmaster-postgres
- env: TOX_ENV=py38-djmaster-sqlite
- env: TOX_ENV=py38-djmaster-postgres
- env: TOX_ENV=py39-djmaster-sqlite
- env: TOX_ENV=py39-djmaster-postgres
install:
- pip install tox
services:
- postgresql
before_script:
- psql -c 'create database admin_interface;' -U postgres
script:
- tox -e $TOX_ENV

View File

@ -4,335 +4,136 @@ 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.28.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.6) - 2024-03-07
- [python] Fix date hierarchy params. #374 (by [@jeroenpeters1986](https://github.com/jeroenpeters1986) in #375)
- [js] Open any link with `_popup=1` query-string parameter in a modal window.
- [ci] Bump requirements.
- [ci] Bump `pre-commit` hooks.
## [0.28.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.5) - 2024-01-30
- [css] Fix related widget height and buttons alignment when there is a multiline label.
- [css] Fix inputs height when there is a multiline label.
## [0.28.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.4) - 2024-01-29
- [css] Fix header logo not displayed correctly.
## [0.28.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.3) - 2024-01-08
- [css] Fix help text horizontal alignment when using `show-fieldsets-as-tabs` / `show-inlines-as-tabs` theme options. #317
- [css] Fix file-upload widget margin-left.
- [css] Fix related widget links add button position on `many-to-many` selector.
- [css] Fix related widget links margin from `select2` (`autocomplete_fields`).
- [css] Reduce paginator vertical padding.
## [0.28.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.2) - 2024-01-08
- [css] Fix related widget icon alignment. #348 #350
## [0.28.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.1) - 2023-12-28
- [python] Fix `TemplateDoesNotExist` when using `django-nested-admin` by returning custom template for other third-party packages. #341 (by [@markdrrr](https://github.com/markdrrr) in #342)
- [html] Display language chooser language name uppercase.
- [css] Move save buttons to right in change form.
- [css] Fix related widget links icons size and vertical alignment.
- [css] Fix admin `raw_id_fields` appearance.
- [css] Fix `autocomplete_fields` appearance.
- [ci] Bump requirements.
### Contributors
- [@markdrrr](https://github.com/markdrrr)
## [0.28.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.28.0) - 2023-12-21
- [html] Remove old `flat-theme` body class.
- [html] Remove `type="text/css"` and `type="text/javascript"` attributes.
- [css] Fix filter input fields collapsing on different layouts. #338
- [css] Fix paginator buttons height.
- [css] Fix `foldable-apps` +/- button vertical alignment.
- [css] Split `admin-interface-fix.css` CSS file into multiple files for easier debugging.
- [css] Rename `form-controls.css` to `sticky-form-controls.css`.
- [css] Move third-party compatibility CSS files to a `third-party` folder.
- [css] Move `related-modal.css` to related-modal plugin folder.
- [third-party] Update compatibility with `django-streamfield`.
- [ci] Replace `Black` and `isort` with `Ruff-format`.
- [ci] Bump `pre-commit` hooks.
## [0.27.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.27.0) - 2023-12-05
- Add `Python 3.12` support.
- Add `Django 5.0` support.
- Fix broken language-chooser with `i18n_patterns(..., prefix_default_language=False)`. #327 (by [@julianwachholz](https://github.com/julianwachholz) in #328)
- Simplify language-chooser. #327 (by [@julianwachholz](https://github.com/julianwachholz) in #328)
- Speed-up test workflow.
- Bump requirements.
- Bump `pre-commit` hooks.
### Contributors
- [@julianwachholz](https://github.com/julianwachholz)
## [0.26.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.26.1) - 2023-09-05
- Fix logout and theme buttons style. #246
- Add Russian translation. (by [@rustzzdevel](https://github.com/rustzzdevel) in #295)
- Update Italian translations.
- Update Spanish translations. (by [@smunoz-ml](https://github.com/smunoz-ml) in #307)
- Prevent multiple `.collapse-toggle` button.
- Bump requirements.
- Bump `pre-commit` hooks.
## [0.26.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.26.0) - 2023-05-11
- Add options for collapsible inlines. #263 (by [@fabiocaccamo](https://github.com/fabiocaccamo) in #282)
- Bump requirements.
- Bump `pre-commit` hooks.
## [0.25.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.25.0) - 2023-04-18
- Add `Django 4.2` support.
- Drop `Django 2.2` support.
- Fix `date_hierarchy` with multiple fields (`ForeignKey`). #244
- Fix tabs not working with non-ASCII alphanumeric characters. #237
- Fix multidb tests.
- Add `css_generic_link_active_color` field to use on active tab (tabbed changeform). #232
- Replace `flake8` with `Ruff`.
- Switch from `setup.py` to `pyproject.toml`.
- Add `pyupgrade` to `pre-commit` config.
- Add `django-upgrade` to `pre-commit` hooks.
- Upgrade syntax for `Python >= 3.8`.
- Run `pre-commit` also with `tox`.
- Reformat migrations.
- Bump requirements.
- Bump `pre-commit` hooks.
- Pin test requirements.
- Add pull request template.
- Add `CODE_OF_CONDUCT.md`. #238
- Rename default branch from `master` to `main`.
## [0.24.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.24.2) - 2022-12-19
- Fix modal and popup opening at the same time. #228
- Make `Theme.get_active_theme` class method a manager method. (by [@MounirMesselmeni](https://github.com/MounirMesselmeni) in #230)
## [0.24.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.24.1) - 2022-12-14
- Fix modal opener buttons not working when added to the DOM asynchronously. #228
- [css] Improve changelist filter margins.
## [0.24.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.24.0) - 2022-12-11
- Drop `Python < 3.8` and `Django < 2.2` versions support. (by [@merwok](https://github.com/merwok) in #220)
- Replace `str.format` with `f-strings`.
- Remove `post_migrate` signal handler and multi db test.
- Add german translation. (by [@derzinn](https://github.com/derzinn) in #222)
- Include date hierarchy in quick removal links (by [@merwok](https://github.com/merwok) in #218)
- Fix broken tabbed inline name. (by [@VaZark](https://github.com/VaZark) in #221)
- Minor cleanups. (by [@merwok](https://github.com/merwok) in #225)
- Bump actions and requirements.
- [css] Fix inlines vertical alignement. (by [@VaZark](https://github.com/VaZark) in #201)
- [css] Fix tabbed changeform tabs text color on focus. (by [@VaZark](https://github.com/VaZark) in #223)
- [CI] Add Farsi language to `tests.settings.LANGUAGES`. (by [@merwok](https://github.com/merwok))
- [CI] Update `pre-commit` config.
- [CI] Automate package build and publish on PyPI.
## [0.23.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.23.0) - 2022-11-30
- Add `Python 3.11` support.
- Add tabbed changeform support. (by [@VaZark](https://github.com/VaZark) in #211)
- Fix #208 / Do not assume active DB when not specified. (by [@VaZark](https://github.com/VaZark) in #210)
- Update translations.
- Bump actions and requirements.
- [css] Adjust list filter dropdown vertical margins.
- [css] Improve nav filter style. #214
- [css] Improve language chooser style.
- [css] Reduce secondary scrollbars size.
- [CI] Update `dependabot.yml`
- [CI] Add `pre-commit-autoupdate.yml` workflow.
- [CI] Update `pre-commit` hooks.
## [0.22.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.22.2) - 2022-11-18
- [CI] Add `django 4.1` to tests.
- [CI] Add `pre-commit` with `black`, `isort` and `flake8`.
- Respect `using` in signals. #199 (by [@VaZark](https://github.com/VaZark) in #200)
- Remove translations line numbers to avoid `lint` step failures.
## [0.22.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.22.1) - 2022-10-13
- Fix `KeyError` raised by `django-rangefilter`.
- [css] Add `django-rangefilter` style optimizations.
- [css] Fix list-filter dropdown vertical margins.
- [css] Fix calendar prev/next arrows style.
## [0.22.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.22.0) - 2022-10-12
- Add CI checks for migrations and translations. #184 (by [@merwok](https://github.com/merwok) in #186)
- Add option for list filter quick remove. #181 (by [@merwok](https://github.com/merwok) in #183)
- [css] Fix left/right scrolling broken with django-import-export. #165
- [html] Fix duplicated welcome message. #185
## [0.21.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.21.0) - 2022-10-06
- Add language chooser control option (default select, minimal select). #136
- Add option to make active list filters more visible. #174 (by [@merwok](https://github.com/merwok) in #178)
- Add support for collapsible fieldsets that start expanded. #173 (by [@merwok](https://github.com/merwok) in #177)
- [js] Fix modal window not closing on save with `django >= 4.0`. #169
- [css] Move `language-chooser` style to its own CSS file.
- [css] Fix sticky list filter scrolling. #175
- [css] Fix paginator missing `border-top` on mobile.
## [0.20.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.20.0) - 2022-08-25
- Add `django-streamfield` compatibility.
## [0.19.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.19.2) - 2022-08-04
- Fix `hashlib` compatibility with `FIPS` enabled systems. #167 (by [@jonlev1n](https://github.com/jonlev1n) in #168)
## [0.19.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.19.1) - 2022-05-14
- [css] Fixed dashboard alignment when recent-actions are not visible.
## [0.19.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.19.0) - 2022-03-08
- Converted dynamic inline CSS to external static CSS using CSS variables. #157 #93 (thanks to [@Mustafa-Abu-Ghazy](https://github.com/Mustafa-Abu-Ghazy))
## [0.18.7](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.7) - 2022-02-24
- Removed public disclosures of the lib's version. #154 (thanks to [@mintyPT](https://github.com/mintyPT))
- Reformatted code with **Black**.
## [0.18.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.6) - 2022-02-04
- Added polish (`pl`) localization by [paduszyk](https://github.com/paduszyk). #152
- Fixed login logo `max-width` and title `color`.
## [0.18.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.5) - 2022-01-21
- Added portuguese brazil (`pt_BR`) localization by [leandromsd](https://github.com/leandromsd). #149
- Fixed body scroll reset to top when opening related modal. #150
## [0.18.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.4) - 2022-01-05
- Added official django 4.0 support.
- Added link to admin home page on logo and title. #147
- Fixed collapsed inlines rounded bottom borders.
- Fixed missing comma in tests settings `MIDDLEWARE_CLASSES`. #145
## [0.18.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.3) - 2021-12-07
- Added official python 3.10 support.
- Replaced travis with GitHub action workflow. #142
- Fixed `check_installed_apps` checks.
- Fixed django default appconfig deprecation warning. #141
## [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 ## [0.18.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.1) - 2021-10-25
- Removed wrong migration. - Removed wrong migration.
## [0.18.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.0) - 2021-10-24 ## [0.18.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.18.0) - 2021-10-24
- Added foldable apps support. #117 - Added foldable apps support. #117
- Removed `css` field from `Theme` model. - Removed `css` field from `Theme` model.
## [0.17.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.17.3) - 2021-10-12 ## [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. - 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 ## [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. - 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 ## [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 `TemplateDoesNotExist` error on `django==4.0.a1` removing checking condition for `colorfield` package. #134
- Fixed favicon fetching incompatible with `django-storages` `S3`. #128 - 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 ## [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 - 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 ## [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 `0020_module_selected_colors` migration for multiple dbs. #132
- Fixed sticky pagination `width` and `border-bottom`. - Fixed sticky pagination `width` and `border-bottom`.
- Fixed inlines vertical overlow. - Fixed inlines vertical overlow.
- Improved header elements vertical alignment. - Improved header elements vertical alignment.
## [0.16.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.3) - 2021-04-26 ## [0.16.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.3) - 2021-04-26
- Added `compat` module. - Added `compat` module.
- Added missing `0021_file_extension_validator` migration. #126 - Added missing `0021_file_extension_validator` migration. #126
- Formatted migrations. - Formatted migrations.
## [0.16.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.2) - 2021-04-23 ## [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 `python 3.9` and `django 3.2` to CI.
- Added `FileExtensionValidator` to `logo` and `favicon` fields. #112 - Added `FileExtensionValidator` to `logo` and `favicon` fields. #112
- Fixed `models.W042` warning on `django 3.2`. - Fixed `models.W042` warning on `django 3.2`.
- Fixed header `min-height`. - Fixed header `min-height`.
- Fixed selects `min-width`. - Fixed selects `min-width`.
- Fixed changelist search, actions and submit button horizontal margins. - Fixed changelist search, actions and submit button horizontal margins.
- Fixed related widget wrapper margin/padding with normal select and in inlines. - Fixed related widget wrapper margin/padding with normal select and in inlines.
- Fixed tabular inlines horizontal scroll. - Fixed tabular inlines horizontal scroll.
## [0.16.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.16.1) - 2021-04-07 ## [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 - Fixed style of "Delete" and "Save" buttons in the delete confirmation page. #123
- Overridden dark-mode css variables introduced in `django 3.2`. #124 - 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
- Updated `vazir-font` version to `27.2.2`. #98 - Updated `vazir-font` version to `27.2.2`. #98
## [0.15.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.6) - 2021-03-26 ## [0.15.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.6) - 2021-03-26
- Fixed `show_change_link` related modal support. #120 - Fixed `show_change_link` related modal support. #120
- Fixed inline changelink style. - Fixed inline changelink style.
- Made globally available `presentRelatedObjectModal` and `presentRelatedObjectModalOnClickOn` js functions. - Made globally available `presentRelatedObjectModal` and `presentRelatedObjectModalOnClickOn` js functions.
## [0.15.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.5) - 2021-03-02 ## [0.15.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.5) - 2021-03-02
- Fixed sticky submit and pagination `z-index` issue with related modal. - Fixed sticky submit and pagination `z-index` issue with related modal.
## [0.15.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.4) - 2021-03-01 ## [0.15.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.4) - 2021-03-01
- Fixed sticky submit and pagination `z-index` issue with sticky `list_filter` and `django-json-widget`. - Fixed sticky submit and pagination `z-index` issue with sticky `list_filter` and `django-json-widget`.
## [0.15.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.3) - 2021-02-08 ## [0.15.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.3) - 2021-02-08
- Fixed sticky submit and pagination width when `admin.site.enable_nav_sidebar = False`. #113 - Fixed sticky submit and pagination width when `admin.site.enable_nav_sidebar = False`. #113
## [0.15.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.2) - 2021-02-03 ## [0.15.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.2) - 2021-02-03
- Fixed body classes template rendering. - Fixed body classes template rendering.
- Improved sticky submit and pagination backward compatibility. - Improved sticky submit and pagination backward compatibility.
## [0.15.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.1) - 2021-02-03 ## [0.15.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.1) - 2021-02-03
- Fixed and improved sticky form controls and pagination style. - Fixed and improved sticky form controls and pagination style.
## [0.15.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.0) - 2021-02-03 ## [0.15.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.15.0) - 2021-02-03
- Added sticky form controls and pagination options. #110 - Added sticky form controls and pagination options. #110
- Added support to 4-digit language code in language chooser. #111 - Added support to 4-digit language code in language chooser. #111
- Added theme css variables for third-party libraries. - Added theme css variables for third-party libraries.
- Fixed app module section link hover color. - Fixed app module section link hover color.
## [0.14.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.2) - 2021-01-04 ## [0.14.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.2) - 2021-01-04
- Fixed tabular inline scroll bar. #101 - Fixed tabular inline scroll bar. #101
- Fixed module header selected link color. #102 - Fixed module header selected link color. #102
- Fixed main content width when `admin.site.enable_nav_sidebar = False`. #105 - Fixed main content width when `admin.site.enable_nav_sidebar = False`. #105
## [0.14.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.1) - 2020-11-12 ## [0.14.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.1) - 2020-11-12
- Fixed sticky list-filter floating. #100 - Fixed sticky list-filter floating. #100
## [0.14.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.0) - 2020-10-15 ## [0.14.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.14.0) - 2020-10-15
- Added list filter sticky option (only for `django >= 3.1.2`). - Added list filter sticky option (only for `django >= 3.1.2`).
- Enabled list filter dropdown by default. - Enabled list filter dropdown by default.
- Fixed changelist searchbar style. - Fixed changelist searchbar style.
## [0.13.7](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.7) - 2020-10-14 ## [0.13.7](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.7) - 2020-10-14
- Improved responsive widgets style. - Improved responsive widgets style.
- Prevented body horizontal scroll. - Prevented body horizontal scroll.
- Fixed tabular inline horizontal scroll. - Fixed tabular inline horizontal scroll.
- Fixed changelist filter min-width. - Fixed changelist filter min-width.
- Fixed changelist and toolbar theme rounded corners. - Fixed changelist and toolbar theme rounded corners.
- Fixed calendar and timelist buttons theme color. - Fixed calendar and timelist buttons theme color.
- Fixed list filter select size. - Fixed list filter select size.
- Fixed content max-width with `django >= 3.1`. - Fixed content max-width with `django >= 3.1`.
## [0.13.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.6) - 2020-10-14 ## [0.13.6](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.6) - 2020-10-14
- Added persian language. #98 - Added persian language. #98
- Fixed logo max-width on small screens. - Fixed logo max-width on small screens.
- Fixed content max-width when nav-sidebar is collapsed. - Fixed content max-width when nav-sidebar is collapsed.
- Fixed changelist max-width on medium screens. - Fixed changelist max-width on medium screens.
## [0.13.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.5) - 2020-09-15 ## [0.13.5](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.5) - 2020-09-15
- Fixed loaddata error with initial_data.json fixture. #97 - Fixed loaddata error with initial_data.json fixture. #97
- Fixed tests warning (admin.W411). - Fixed tests warning (admin.W411).
- Fixed changelist thead links color. - Fixed changelist thead links color.
- Fixed changelist filter links hover color. - Fixed changelist filter links hover color.
## [0.13.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.4) - 2020-09-04 ## [0.13.4](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.4) - 2020-09-04
- Added conditional imports to avoid Django deprecation warnings. #92 - Added conditional imports to avoid Django deprecation warnings. #92
- Changed admin header content vertical align to top. - Changed admin header content vertical align to top.
## [0.13.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.3) - 2020-09-02 ## [0.13.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.3) - 2020-09-02
- Added `django-json-widget` theming support. - Added `django-json-widget` theming support.
## [0.13.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.2) - 2020-08-21 ## [0.13.2](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.2) - 2020-08-21
- Fixed related modal not closing on edit save and create with django 3.1 - #96 - Fixed related modal not closing on edit save and create with django 3.1 - #96
## [0.13.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.1) - 2020-08-18 ## [0.13.1](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.1) - 2020-08-18
- Improved header and nav-sidebar style. - Improved header and nav-sidebar style.
- Added `max-width` to logo. - Added `max-width` to logo.
- Added `requirements-dev.txt` - Added `requirements-dev.txt`
## [0.13.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.0) - 2020-08-05 ## [0.13.0](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.13.0) - 2020-08-05
- Improved nav-sidebar style (`django>=3.1` support). - Improved nav-sidebar style (`django>=3.1` support).
- Improved header style. - Improved header style.
## [0.12.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.12.3) - 2020-07-20 ## [0.12.3](https://github.com/fabiocaccamo/django-admin-interface/releases/tag/0.12.3) - 2020-07-20
- Fixed unreadable text in autocomplete multi-selects. #83 - Fixed unreadable text in autocomplete multi-selects. #83

View File

@ -1,128 +0,0 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
fabio.caccamo@gmail.com.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@ -1,4 +1,4 @@
include LICENSE.txt include LICENSE.txt
include README.md include README.md
recursive-include admin_interface * recursive-include admin_interface *
recursive-exclude * *.pyc __pycache__ .DS_Store recursive-exclude * *.pyc __pycache__ .DS_Store

247
README.md
View File

@ -2,17 +2,16 @@
[![](https://img.shields.io/pypi/djversions/django-admin-interface?color=0C4B33&logo=django&logoColor=white&label=django)](https://www.djangoproject.com/) [![](https://img.shields.io/pypi/djversions/django-admin-interface?color=0C4B33&logo=django&logoColor=white&label=django)](https://www.djangoproject.com/)
[![](https://img.shields.io/pypi/v/django-admin-interface.svg?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/django-admin-interface/) [![](https://img.shields.io/pypi/v/django-admin-interface.svg?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/django-admin-interface/)
[![](https://static.pepy.tech/badge/django-admin-interface/month)](https://pepy.tech/project/django-admin-interface) [![](https://pepy.tech/badge/django-admin-interface)](https://pepy.tech/project/django-admin-interface)
[![](https://img.shields.io/github/stars/fabiocaccamo/django-admin-interface?logo=github&style=flat)](https://github.com/fabiocaccamo/django-admin-interface/stargazers) [![](https://img.shields.io/github/stars/fabiocaccamo/django-admin-interface?logo=github)](https://github.com/fabiocaccamo/django-admin-interface/)
[![](https://img.shields.io/pypi/l/django-admin-interface.svg?color=blue)](https://github.com/fabiocaccamo/django-admin-interface/blob/main/LICENSE.txt) [![](https://badges.pufler.dev/visits/fabiocaccamo/django-admin-interface?label=visitors&color=blue)](https://badges.pufler.dev)
[![](https://img.shields.io/pypi/l/django-admin-interface.svg?color=blue)](https://github.com/fabiocaccamo/django-admin-interface/blob/master/LICENSE.txt)
[![](https://results.pre-commit.ci/badge/github/fabiocaccamo/django-admin-interface/main.svg)](https://results.pre-commit.ci/latest/github/fabiocaccamo/django-admin-interface/main) [![](https://img.shields.io/travis/fabiocaccamo/django-admin-interface?logo=travis&label=build)](https://travis-ci.org/fabiocaccamo/django-admin-interface)
[![](https://img.shields.io/github/actions/workflow/status/fabiocaccamo/django-admin-interface/test-package.yml?branch=main&label=build&logo=github)](https://github.com/fabiocaccamo/django-admin-interface)
[![](https://img.shields.io/codecov/c/gh/fabiocaccamo/django-admin-interface?logo=codecov)](https://codecov.io/gh/fabiocaccamo/django-admin-interface) [![](https://img.shields.io/codecov/c/gh/fabiocaccamo/django-admin-interface?logo=codecov)](https://codecov.io/gh/fabiocaccamo/django-admin-interface)
[![](https://img.shields.io/codacy/grade/21cb657283c04e70b56fb935277a1ad1?logo=codacy)](https://www.codacy.com/app/fabiocaccamo/django-admin-interface) [![](https://img.shields.io/codacy/grade/21cb657283c04e70b56fb935277a1ad1?logo=codacy)](https://www.codacy.com/app/fabiocaccamo/django-admin-interface)
[![](https://img.shields.io/codeclimate/maintainability/fabiocaccamo/django-admin-interface?logo=code-climate)](https://codeclimate.com/github/fabiocaccamo/django-admin-interface/) [![](https://img.shields.io/codeclimate/maintainability/fabiocaccamo/django-admin-interface?logo=code-climate)](https://codeclimate.com/github/fabiocaccamo/django-admin-interface/)
[![](https://img.shields.io/badge/code%20style-black-000000.svg?logo=python&logoColor=black)](https://github.com/psf/black) [![](https://requires.io/github/fabiocaccamo/django-admin-interface/requirements.svg?branch=master)](https://requires.io/github/fabiocaccamo/django-admin-interface/requirements/?branch=master)
[![](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
# django-admin-interface # django-admin-interface
django-admin-interface is a modern **responsive flat admin interface customizable by the admin itself**. django-admin-interface is a modern **responsive flat admin interface customizable by the admin itself**.
@ -26,134 +25,101 @@ django-admin-interface is a modern **responsive flat admin interface customizabl
- Related modal *(instead of the old popup window)* - Related modal *(instead of the old popup window)*
- Environment name/marker - Environment name/marker
- Language chooser - Language chooser
- Foldable apps *(accordions in the navigation bar)*
- [Collapsible fieldsets](https://docs.djangoproject.com/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.fieldsets) can have their initial state expanded instead of collapsed
- `NEW` Collapsible inlines
- `NEW` Tabbed fieldsets and inlines
- `NEW` List filter removal links
- `NEW` List filter highlight selected options
- List filter dropdown - List filter dropdown
- List filter sticky - `NEW` **Foldable apps** *(accordions in the navigation bar)*
- Form controls sticky *(pagination and save/delete buttons)* - `NEW` **List filter sticky**
- Compatibility / style optimizations for: - `NEW` **Form controls sticky** *(pagination and save/delete buttons)*
- Compatibility / Style optimizations for:
- `django-ckeditor` - `django-ckeditor`
- `django-dynamic-raw-id` - `django-dynamic-raw-id`
- `django-json-widget` - `django-json-widget`
- `django-modeltranslation` - `django-modeltranslation`
- `django-rangefilter`
- `django-streamfield`
- `django-tabbed-admin` - `django-tabbed-admin`
- `sorl-thumbnail` - `sorl-thumbnail`
- Translated in many languages: `de`, `es`, `fa`, `fr`, `it`, `pl`, `pt_BR`, `ru`, `tr`
## Installation ## Installation
- Run `pip install django-admin-interface` - Run `pip install django-admin-interface`
- Add `admin_interface` and `colorfield` to `settings.INSTALLED_APPS` **before** `django.contrib.admin` - Add `admin_interface`, `flat_responsive`, `flat` and `colorfield` to `settings.INSTALLED_APPS` **before** `django.contrib.admin`
```python ```python
INSTALLED_APPS = ( INSTALLED_APPS = (
#... #...
"admin_interface", 'admin_interface',
"colorfield", 'flat_responsive', # only if django version < 2.0
'flat', # only if django version < 1.9
'colorfield',
#... #...
"django.contrib.admin", 'django.contrib.admin',
#... #...
) )
X_FRAME_OPTIONS = "SAMEORIGIN" # only if django version >= 3.0
SILENCED_SYSTEM_CHECKS = ["security.W019"] X_FRAME_OPTIONS = 'SAMEORIGIN'
SILENCED_SYSTEM_CHECKS = ['security.W019']
``` ```
- Run `python manage.py migrate` - Run ``python manage.py migrate``
- Run `python manage.py collectstatic --clear` - Run ``python manage.py collectstatic``
- Restart your application server - Restart your application server
> [!WARNING] #### Upgrade
> if you want use modals instead of popup windows, ensure to add `X_FRAME_OPTIONS = "SAMEORIGIN"` setting. - Run `pip install django-admin-interface --upgrade`
- Run ``python manage.py migrate`` *(add* ``--fake-initial`` *if you are upgrading from 0.1.0 version)*
### Optional features - Run ``python manage.py collectstatic --clear``
To make a fieldset start expanded with a `Hide` button to collapse, add the class `"expanded"` to its classes: - Restart your application server
```python
class MyModelAdmin(admin.ModelAdmin):
# ...
fieldsets = [
("Section title", {
"classes": ("collapse", "expanded"),
"fields": (...),
}),
]
# ...
```
## Optional themes ## Optional themes
This package ships with optional themes as fixtures, they can be installed using the [loaddata admin command](https://docs.djangoproject.com/en/1.11/ref/django-admin/#django-admin-loaddata). Optional themes are activated on installation. This package ships with optional themes as fixtures, they can be installed using the [loaddata admin command](https://docs.djangoproject.com/en/1.11/ref/django-admin/#django-admin-loaddata). Optional themes are activated on installation.
##### [Django](https://www.djangoproject.com/) theme (default): ##### [Django](https://www.djangoproject.com/) theme (default):
Run `python manage.py loaddata admin_interface_theme_django.json` Run ``python manage.py loaddata admin_interface_theme_django.json``
##### [Bootstrap](http://getbootstrap.com/) theme: ##### [Bootstrap](http://getbootstrap.com/) theme:
Run `python manage.py loaddata admin_interface_theme_bootstrap.json` Run ``python manage.py loaddata admin_interface_theme_bootstrap.json``
##### [Foundation](http://foundation.zurb.com/) theme: ##### [Foundation](http://foundation.zurb.com/) theme:
Run `python manage.py loaddata admin_interface_theme_foundation.json` Run ``python manage.py loaddata admin_interface_theme_foundation.json``
##### [U.S. Web Design Standards](https://standards.usa.gov/) theme: ##### [U.S. Web Design Standards](https://standards.usa.gov/) theme:
Run `python manage.py loaddata admin_interface_theme_uswds.json` Run ``python manage.py loaddata admin_interface_theme_uswds.json``
### Add more themes ### Add more themes
You can add a theme you've created through the admin to this repository by [sending us a PR](http://makeapullrequest.com/). Here are the steps to follow to add: You can add a theme you've created through the admin to this repository by [sending us a PR](http://makeapullrequest.com/). Here are the steps to follow to add:
1. Export your exact theme as fixture using the `dumpdata` admin command: 1. Export your exact theme as fixture using the `dumpdata` admin command:
`python manage.py dumpdata admin_interface.Theme --indent 4 -o admin_interface_theme_{{name}}.json --pks=N` ``python manage.py dumpdata admin_interface.Theme --indent 4 -o admin_interface_theme_{{name}}.json --pks=N``
2. Copy the generated json file into the fixtures folder *(making sure its name starts with* `admin_interface_theme_` *to avoid clashes with fixtures that might be provided by other third party apps)*. 2. Copy the generated json file into the fixtures folder *(making sure its name starts with* `admin_interface_theme_` *to avoid clashes with fixtures that might be provided by other third party apps)*.
3. Remove the `pk` from the fixture and make sure the `active` field is set to `true` *(in this way a theme is automatically activated when installed)*. 3. Remove the `"pk"` from the fixture and make sure the `active` field is set to `true` *(in this way a theme is automatically activated when installed)*.
4. Edit the section above to document your theme. 4. Edit the section above to document your theme.
### Add theme support to third-party libraries ### Add theme support to third-party libraries
You can add **theme support to existing third-party libraries** using the following **CSS variables**: You can add **theme support to existing third-party libraries** using the following **css variables**:
#### Header - `--admin-interface-title-color`
- `--admin-interface-logo-color`
- `--admin-interface-header-background-color` - `--admin-interface-env-color`
- `--admin-interface-header-background-color:`
- `--admin-interface-header-text-color` - `--admin-interface-header-text-color`
- `--admin-interface-header-link-color` - `--admin-interface-header-link-color`
- `--admin-interface-header-link_hover-color` - `--admin-interface-header-link_hover-color`
- `--admin-interface-title-color`
- `--admin-interface-env-color`
#### Logo
- `--admin-interface-logo-color`
- `--admin-interface-logo-default-background-image`
- `--admin-interface-logo-max-width`
- `--admin-interface-logo-max-height`
#### Modules / Links
- `--admin-interface-module-background-color` - `--admin-interface-module-background-color`
- `--admin-interface-module-background-selected-color` - `--admin-interface-module-background-selected-color`
- `--admin-interface-module-border-radius`
- `--admin-interface-module-text-color` - `--admin-interface-module-text-color`
- `--admin-interface-module-link-color` - `--admin-interface-module-link-color`
- `--admin-interface-module-link-selected-color` - `--admin-interface-module-link-selected-color`
- `--admin-interface-module-link-hover-color` - `--admin-interface-module-link-hover-color`
- `--admin-interface-generic-link-color` - `--admin-interface-generic-link-color`
- `--admin-interface-generic-link-hover-color` - `--admin-interface-generic-link-hover-color`
- `--admin-interface-generic-link-active-color`
#### Buttons
- `--admin-interface-save-button-background-color` - `--admin-interface-save-button-background-color`
- `--admin-interface-save-button-background-hover-color` - `--admin-interface-save-button-background-hover-color`
- `--admin-interface-save-button-text-color` - `--admin-interface-save-button-text-color`
- `--admin-interface-delete-button-background-color` - `--admin-interface-delete-button-background-color`
- `--admin-interface-delete-button-background-hover-color` - `--admin-interface-delete-button-background-hover-color`
- `--admin-interface-delete-button-text-color` - `--admin-interface-delete-button-text-color`
#### Related Modal
- `--admin-interface-related-modal-background-color` - `--admin-interface-related-modal-background-color`
- `--admin-interface-related-modal-background-opacity` - `--admin-interface-related-modal-background-opacity`
- `--admin-interface-related-modal-border-radius`
- `--admin-interface-related-modal-close-button-display`
## Screenshots ## Screenshots
###### Admin login ###### Admin login
@ -168,134 +134,33 @@ You can add **theme support to existing third-party libraries** using the follow
###### Admin theme customization ###### Admin theme customization
![django-admin-interface_theme_customization](https://cloud.githubusercontent.com/assets/1035294/11240250/7350d942-8df1-11e5-9b28-f2f54c333cdc.gif) ![django-admin-interface_theme_customization](https://cloud.githubusercontent.com/assets/1035294/11240250/7350d942-8df1-11e5-9b28-f2f54c333cdc.gif)
## Localization
At the moment, this package has been translated into the following languages: `de`, `es`, `fa`, `fr`, `it`, `pl`, `pt_BR`, `tr`.
### Translate into another language
- Run `python -m django makemessages --ignore ".tox" --ignore "venv" --add-location "file" --extension "html,py" --locale "it"` *(example for Italian localization)*
- Update translations in `admin_interface/locale/it/LC_MESSAGES/django.po`
- Run `python -m django compilemessages --ignore ".tox" --ignore "venv"`
### Update translations
If you do some changes to the project, remember to update translations, because if the translations files are not up-to-date, the `lint` step in the CI will fail:
- Run `tox -e translations`
## Caching
This package uses caching to improve theme load time and overall performance.
You can customise the app caching options using `settings.CACHES["admin_interface"]` setting, otherwise the `"default"` cache will be used:
```python
CACHES = {
# ...
"admin_interface": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
"TIMEOUT": 60 * 5,
},
# ...
}
```
> [!WARNING]
> There is a [known compatibility issue](https://github.com/fabiocaccamo/django-admin-interface/issues/356) when using this package with `django-redis`, more specifically, using the `JSONSerializer` the following error is raised: `TypeError: Object of type Theme is not JSON serializable`, to mitigate this problem, simply use a specific cache for this app that does not use any `json` serializer.
## FAQ ## FAQ
- #### I already have a custom `base_site.html`, how can I make it work?
### Custom `base-site.html`
> I already have a custom `base_site.html`, how can I make it work?
You can use [django-apptemplates](https://github.com/bittner/django-apptemplates), then add `{% extends "admin_interface:admin/base_site.html" %}` to your `base_site.html` You can use [django-apptemplates](https://github.com/bittner/django-apptemplates), then add `{% extends "admin_interface:admin/base_site.html" %}` to your `base_site.html`
### Custom `LocaleMiddleware` warning
> I'm using a `django.middleware.locale.LocaleMiddleware` subclass, but I see an unnecessary warning for missing `django.middleware.locale.LocaleMiddleware`, what can I do?
You can simply ignore the warning (this has been discussed [here](https://github.com/fabiocaccamo/django-admin-interface/issues/354))
```python
import warnings
warnings.filterwarnings("ignore", module="admin_interface.templatetags.admin_interface_tags")
```
### Language Chooser not showing
> I have enabled the **Language Chooser**, but it is not visible in the admin, what should I do?
You must configure multilanguage `settings` and `urls` correctly:
```python
LANGUAGES = (
("en", _("English")),
("it", _("Italiano")),
("fr", _("Français")),
# more than one language is expected here
)
LANGUAGE_CODE = "en"
USE_I18N = True
MIDDLEWARE = [
# ...
"django.middleware.locale.LocaleMiddleware",
# ...
]
```
```python
from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.urls import include, path
# ...
urlpatterns = [
path("i18n/", include("django.conf.urls.i18n")),
]
urlpatterns += i18n_patterns(path("admin/", admin.site.urls))
```
### Open any url in modal window
> I have an application with some cross-links in the admin and I would like to open them in modal windows instead of same/new window, how can I do?
You just need to add `_popup=1` query-string parameter to the urls:
```python
url = reverse(f"admin:myapp_mymodel_change", args=[mymodel_instance.pk])
url = f"{url}?_popup=1"
```
## Testing ## Testing
```bash ```bash
# clone repository # create python virtual environment
git clone https://github.com/fabiocaccamo/django-admin-interface.git && cd django-admin-interface virtualenv testing_django_admin_interface
# create virtualenv and activate it # activate virtualenv
python -m venv venv && . venv/bin/activate cd testing_django_admin_interface && . bin/activate
# upgrade pip # clone repo
python -m pip install --upgrade pip git clone https://github.com/fabiocaccamo/django-admin-interface.git src && cd src
# install requirements # install dependencies
pip install -r requirements.txt -r requirements-test.txt pip install -r requirements.txt
# install pre-commit to run formatters and linters
pre-commit install --install-hooks
# run tests # run tests
tox tox
# or # or
python runtests.py python setup.py test
# or # or
python -m django test --settings "tests.settings" python -m django test --settings "tests.settings"
``` ```
## Contributing
Contributions are always welcome, please follow these steps for submitting good quality PRs:
- :exclamation: **Open an issue**, please don't submit any PR that doesn't refer to an existing issue.
- :computer: **Work on changes**, changes should *preferably* be covered by tests to avoid regressions in the future.
- :globe_with_meridians: **Update the translations** files.
- :test_tube: **Run tests** ensuring that there are no errors.
- :inbox_tray: **Submit a pull-request** and mark it as **"Ready for review"** only if it passes the `CI`.
## License ## License
Released under [MIT License](LICENSE.txt). Released under [MIT License](LICENSE.txt).
@ -303,10 +168,16 @@ Released under [MIT License](LICENSE.txt).
## Supporting ## Supporting
- :star: Star this project on [GitHub](https://github.com/fabiocaccamo/django-admin-interface) I would like to spend more time on this project, especially to improve it and adding new features.
- :octocat: Follow me on [GitHub](https://github.com/fabiocaccamo)
- :blue_heart: Follow me on [Twitter](https://twitter.com/fabiocaccamo) As everyone knows open-source projects takes up a lot of time that is unpaid. :money_with_wings:
- :moneybag: Sponsor me on [Github](https://github.com/sponsors/fabiocaccamo)
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)
- [PayPal](https://www.paypal.me/fabiocaccamo)
- BTC: bc1q2t0pv8z3udpyuvfnx5kskhqdad4dcvtfuzmvjw
- ETH: 0x8B55Fb7798b5A9F797A4455C00821B6e53daca74
## See also ## See also
@ -324,6 +195,4 @@ Released under [MIT License](LICENSE.txt).
- [`python-codicefiscale`](https://github.com/fabiocaccamo/python-codicefiscale) - encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. 🇮🇹 💳 - [`python-codicefiscale`](https://github.com/fabiocaccamo/python-codicefiscale) - encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. 🇮🇹 💳
- [`python-fontbro`](https://github.com/fabiocaccamo/python-fontbro) - friendly font operations. 🧢
- [`python-fsutil`](https://github.com/fabiocaccamo/python-fsutil) - file-system utilities for lazy devs. 🧟‍♂️ - [`python-fsutil`](https://github.com/fabiocaccamo/python-fsutil) - file-system utilities for lazy devs. 🧟‍♂️

View File

@ -1,14 +0,0 @@
# Security Policy
## Supported Versions
Keep this library updated to the latest version.
| Version | Supported |
| ------- | ------------------ |
| latest | :white_check_mark: |
| oldest | :x: |
## Reporting a Vulnerability
Open an issue.

View File

@ -1,17 +1,3 @@
from admin_interface.metadata import ( # -*- coding: utf-8 -*-
__author__,
__copyright__,
__description__,
__license__,
__title__,
__version__,
)
__all__ = [ default_app_config = 'admin_interface.apps.AdminInterfaceConfig'
"__author__",
"__copyright__",
"__description__",
"__license__",
"__title__",
"__version__",
]

View File

@ -1,224 +1,142 @@
# -*- coding: utf-8 -*-
from admin_interface.compat import gettext_lazy as _
from admin_interface.models import Theme
from django.contrib import admin from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from admin_interface.models import Theme, UserTheme
# from .import_tema.admin import ImportMixin
class UserInline(admin.TabularInline):
model = UserTheme
extra = 0
autocomplete_fields = ('user', )
@admin.register(Theme)
#class ThemeAdmin(ImportMixin, admin.ModelAdmin):
class ThemeAdmin(admin.ModelAdmin): class ThemeAdmin(admin.ModelAdmin):
inlines = [UserInline, ]
list_display = ( list_display = ('name', 'active', )
"name", list_editable = ('active', )
"active",
"demo",
"default",
)
list_editable = ("active",)
list_per_page = 100 list_per_page = 100
show_full_result_count = False show_full_result_count = False
fieldsets = ( fieldsets = (
( (None, {
None, 'classes': ('wide', ),
{ 'fields': ('name', 'active', )
"classes": ("wide",), }),
"fields": ( (_('Environment'), {
"name", 'classes': ('wide', ),
"active", 'fields': (
"demo", 'env_name',
"default", 'env_color',
), 'env_visible_in_header',
}, 'env_visible_in_favicon',
), )
( }),
_("Environment"), (_('Language chooser'), {
{ 'classes': ('wide', ),
"classes": ("wide",), 'fields': (
"fields": ( 'language_chooser_active',
"env_name", 'language_chooser_display',
"env_color", )
"env_visible_in_header", }),
"env_visible_in_favicon", (_('Logo'), {
), 'classes': ('wide', ),
}, 'fields': (
), 'logo',
( 'logo_max_width',
_("Language chooser"), 'logo_max_height',
{ 'logo_color',
"classes": ("wide",), 'logo_visible',
"fields": ( )
"language_chooser_active", }),
"language_chooser_control", (_('Favicon'), {
"language_chooser_display", 'classes': ('wide', ),
), 'fields': ('favicon', )
}, }),
), (_('Title'), {
( 'classes': ('wide', ),
_("Logo"), 'fields': (
{ 'title',
"classes": ("wide",), 'title_color',
"fields": ( 'title_visible',
"logo", )
"logo_max_width", }),
"logo_max_height", (_('Header'), {
"logo_color", 'classes': ('wide', ),
"logo_visible", 'fields': (
), 'css_header_background_color',
}, 'css_header_text_color',
), 'css_header_link_color',
(_("Favicon"), {"classes": ("wide",), "fields": ("favicon",)}), 'css_header_link_hover_color',
( )
_("Title"), }),
{ (_('Breadcrumbs / Module headers'), {
"classes": ("wide",), 'classes': ('wide', ),
"fields": ( 'fields': (
"title", 'css_module_background_color',
"title_color", 'css_module_background_selected_color',
"title_visible", 'css_module_text_color',
), 'css_module_link_color',
}, 'css_module_link_selected_color',
), 'css_module_link_hover_color',
( 'css_module_rounded_corners',
_("Header"), )
{ }),
"classes": ("wide",), (_('Generic Links'), {
"fields": ( 'classes': ('wide', ),
"css_header_background_color", 'fields': (
"css_header_text_color", 'css_generic_link_color',
"css_header_link_color", 'css_generic_link_hover_color',
"css_header_link_hover_color", )
), }),
}, (_('Save Buttons'), {
), 'classes': ('wide', ),
( 'fields': (
_("Breadcrumbs / Module headers"), 'css_save_button_background_color',
{ 'css_save_button_background_hover_color',
"classes": ("wide",), 'css_save_button_text_color',
"fields": ( )
"css_module_background_color", }),
"css_module_background_selected_color", (_('Delete Buttons'), {
"css_module_text_color", 'classes': ('wide', ),
"css_module_link_color", 'fields': (
"css_module_link_selected_color", 'css_delete_button_background_color',
"css_module_link_hover_color", 'css_delete_button_background_hover_color',
"css_module_rounded_corners", 'css_delete_button_text_color',
), )
}, }),
), (_('Navigation Bar'), {
( 'classes': ('wide', ),
_("Generic Links"), 'fields': (
{ 'foldable_apps',
"classes": ("wide",), )
"fields": ( }),
"css_generic_link_color", (_('Related Modal'), {
"css_generic_link_hover_color", 'classes': ('wide', ),
"css_generic_link_active_color", 'fields': (
), 'related_modal_active',
}, 'related_modal_background_color',
), 'related_modal_background_opacity',
( 'related_modal_rounded_corners',
_("Save Buttons"), 'related_modal_close_button_visible',
{ )
"classes": ("wide",), }),
"fields": ( (_('Form Controls'), {
"css_save_button_background_color", 'classes': ('wide', ),
"css_save_button_background_hover_color", 'fields': (
"css_save_button_text_color", 'form_submit_sticky',
), 'form_pagination_sticky',
}, )
), }),
( (_('List Filter'), {
_("Delete Buttons"), 'classes': ('wide', ),
{ 'fields': (
"classes": ("wide",), 'list_filter_dropdown',
"fields": ( 'list_filter_sticky',
"css_delete_button_background_color", )
"css_delete_button_background_hover_color", }),
"css_delete_button_text_color", (_('Recent Actions'), {
), 'classes': ('wide', ),
}, 'fields': ('recent_actions_visible', )
), }),
(
_("Navigation Bar"),
{
"classes": ("wide",),
"fields": ("foldable_apps",),
},
),
(
_("Related Modal"),
{
"classes": ("wide",),
"fields": (
"related_modal_active",
"related_modal_background_color",
"related_modal_background_opacity",
"related_modal_rounded_corners",
"related_modal_close_button_visible",
),
},
),
(
_("Form Controls"),
{
"classes": ("wide",),
"fields": (
"form_submit_sticky",
"form_pagination_sticky",
),
},
),
(
_("List Filter"),
{
"classes": ("wide",),
"fields": (
"list_filter_highlight",
"list_filter_dropdown",
"list_filter_sticky",
"list_filter_removal_links",
),
},
),
(
_("Change Form"),
{
"classes": ("wide",),
"fields": (
"show_fieldsets_as_tabs",
"show_inlines_as_tabs",
),
},
),
(
_("Inlines"),
{
"classes": ("wide",),
"fields": (
"collapsible_stacked_inlines",
"collapsible_stacked_inlines_collapsed",
"collapsible_tabular_inlines",
"collapsible_tabular_inlines_collapsed",
),
},
),
(
_("Recent Actions"),
{
"classes": ("wide",),
"fields": ("recent_actions_visible",),
},
),
) )
save_on_top = True save_on_top = True
admin.site.register(Theme, ThemeAdmin)

View File

@ -1,13 +1,22 @@
# -*- coding: utf-8 -*-
from admin_interface.compat import gettext_lazy as _
from django.apps import AppConfig from django.apps import AppConfig
from django.utils.translation import gettext_lazy as _ from django.db.models.signals import post_migrate
class AdminInterfaceConfig(AppConfig): class AdminInterfaceConfig(AppConfig):
name = "admin_interface"
verbose_name = _("Admin Interface") name = 'admin_interface'
default_auto_field = "django.db.models.AutoField" verbose_name = _('Admin Interface')
default_auto_field = 'django.db.models.AutoField'
def ready(self): def ready(self):
from admin_interface import settings from admin_interface import settings
from admin_interface.models import Theme
settings.check_installed_apps() settings.check_installed_apps()
post_migrate.connect(
Theme.post_migrate_handler, sender=self)

View File

@ -1,18 +1,20 @@
# -*- coding: utf-8 -*-
from django.conf import settings from django.conf import settings
from django.core.cache import cache, caches from django.core.cache import cache, caches
def app_cache(): def app_cache():
return caches["admin_interface"] if "admin_interface" in settings.CACHES else cache return caches['admin_interface'] if 'admin_interface' in settings.CACHES else cache
def del_cached_active_theme(): def del_cached_active_theme():
app_cache().delete("admin_interface_theme") app_cache().delete('admin_interface_theme')
def get_cached_active_theme(): def get_cached_active_theme():
return app_cache().get("admin_interface_theme", None) return app_cache().get('admin_interface_theme', None)
def set_cached_active_theme(theme): def set_cached_active_theme(theme):
app_cache().set("admin_interface_theme", theme) app_cache().set('admin_interface_theme', theme)

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

View File

@ -1,35 +0,0 @@
from .models import Theme, UserTheme
def get_active_theme(request):
objs_manager = Theme.objects
user_theme_manager = UserTheme.objects
objs_active_qs = objs_manager.filter(active=True)
objs_active_ls = list(objs_active_qs)
objs_active_count = len(objs_active_ls)
if objs_active_count == 0:
obj = objs_manager.first()
if obj:
obj.set_active()
# else:
# obj = objs_manager.create()
elif objs_active_count == 1:
obj = objs_active_ls[0]
elif objs_active_count > 1:
user = request.user
try:
obj = user_theme_manager.filter(user=user, theme__active=True).first().theme
except:
objs_default_qs = objs_active_qs.filter(default=True)
if len(objs_default_qs) == 0:
obj = objs_active_qs.first()
if obj:
obj.set_default()
else:
obj = objs_default_qs.first()
return {
'theme': obj,
}

View File

@ -27,6 +27,7 @@
"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,
@ -35,4 +36,4 @@
"recent_actions_visible": true "recent_actions_visible": true
} }
} }
] ]

View File

@ -27,6 +27,7 @@
"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,
@ -35,4 +36,4 @@
"recent_actions_visible": true "recent_actions_visible": true
} }
} }
] ]

View File

@ -27,6 +27,7 @@
"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,
@ -35,4 +36,4 @@
"recent_actions_visible": true "recent_actions_visible": true
} }
} }
] ]

View File

@ -27,6 +27,7 @@
"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,

View File

@ -27,6 +27,7 @@
"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,
@ -35,4 +36,4 @@
"recent_actions_visible": true "recent_actions_visible": true
} }
} }
] ]

View File

@ -1,156 +0,0 @@
import json
import os
import tempfile
import zipfile
import django
from django import forms
from django.conf import settings
from django.contrib import admin, messages
from django.contrib.auth import get_permission_codename
from django.core.exceptions import PermissionDenied
from django.core.files.storage import default_storage
from django.http import HttpResponseRedirect
from django.template.response import TemplateResponse
from django.urls import path, reverse
from django.utils.translation import gettext_lazy as _
from .. import models
from .forms import ImportForm
class ImportMixin(admin.ModelAdmin):
"""
Import mixin.
This is intended to be mixed with django.contrib.admin.ModelAdmin
https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#modeladmin-objects
"""
#: template for change_list view
change_list_template = 'admin/import_export/change_list_import.html'
#: template for import view
import_template_name = 'admin/import_export/import.html'
def get_model_info(self):
app_label = self.model._meta.app_label
return (self.model._meta.app_label, self.model._meta.model_name)
def has_import_permission(self, request):
"""
Returns whether a request has import permission.
"""
IMPORT_PERMISSION_CODE = getattr(settings, 'IMPORT_EXPORT_IMPORT_PERMISSION_CODE', None)
if IMPORT_PERMISSION_CODE is None:
return True
opts = self.opts
codename = get_permission_codename(IMPORT_PERMISSION_CODE, opts)
return request.user.has_perm("%s.%s" % (opts.app_label, codename))
def get_urls(self):
urls = super().get_urls()
info = self.get_model_info()
my_urls = [
path('import/',
self.admin_site.admin_view(self.import_action),
name='%s_%s_import' % info),
]
return my_urls + urls
def get_import_context_data(self, **kwargs):
return self.get_context_data(**kwargs)
def get_context_data(self, **kwargs):
return {}
def get_form_kwargs(self, form, *args, **kwargs):
"""
Prepare/returns kwargs for the import form.
To distinguish between import and confirm import forms,
the following approach may be used:
if isinstance(form, ImportForm):
# your code here for the import form kwargs
# e.g. update.kwargs({...})
elif isinstance(form, ConfirmImportForm):
# your code here for the confirm import form kwargs
# e.g. update.kwargs({...})
...
"""
return kwargs
def import_action(self, request, *args, **kwargs):
"""
Perform a dry_run of the import to make sure the import will not
result in errors. If there where no error, save the user
uploaded file to a local temp file that will be used by
'process_import' for the actual import.
"""
if not self.has_import_permission(request):
raise PermissionDenied
context = self.get_import_context_data()
form_type = ImportForm
form_kwargs = self.get_form_kwargs(form_type, *args, **kwargs)
form = form_type(request.POST or None,
request.FILES or None,
**form_kwargs)
if request.POST and form.is_valid():
import_file_tema = form.cleaned_data['tema']
if zipfile.is_zipfile(import_file_tema):
with zipfile.ZipFile(import_file_tema, 'r') as zip_ref:
with tempfile.TemporaryDirectory() as tempdir:
zip_ref.extractall(tempdir)
lst = os.listdir(tempdir)
allowed_extensions=[".gif", ".jpg", ".jpeg", ".png", ".svg"]
try:
tema_json = [s for s in os.listdir(f'{tempdir}/{lst[0]}') if '.json' in s][0]
logo = [s for s in os.listdir(f'{tempdir}/{lst[0]}/logo') if any(ele in s for ele in allowed_extensions)][0]
favicon = [s for s in os.listdir(f'{tempdir}/{lst[0]}/favicon') if any(ele in s for ele in allowed_extensions)][0]
with open(f'{tempdir}/{lst[0]}/{tema_json}', 'r') as temporary_file:
result = json.loads(temporary_file.read())
with open(f'{tempdir}/{lst[0]}/logo/{logo}', 'rb') as temporary_file:
default_storage.save(f"admin-interface/logo/{temporary_file.name.split('/')[-1]}", temporary_file)
with open(f'{tempdir}/{lst[0]}/favicon/{favicon}', 'rb') as temporary_file:
default_storage.save(f"admin-interface/favicon/{temporary_file.name.split('/')[-1]}", temporary_file)
skip_result = False
except FileNotFoundError as e:
messages.error(request, 'Struttura del file .zip errata.')
skip_result = True
if not skip_result:
try:
new_theme = models.Theme(
**result[0]['fields']
)
new_theme.save()
messages.success(request, _('Import finished'))
except:
messages.error(request, 'Struttura del file .json errata.')
else:
messages.error(request, 'È richiesto un file .zip')
url = reverse('admin:%s_%s_changelist' % self.get_model_info(),
current_app=self.admin_site.name)
return HttpResponseRedirect(url)
else:
context.update(self.admin_site.each_context(request))
context['title'] = _("Import")
context['form'] = form
context['opts'] = self.model._meta
request.current_app = self.admin_site.name
return TemplateResponse(request, [self.import_template_name],
context)
def changelist_view(self, request, extra_context=None):
if extra_context is None:
extra_context = {}
extra_context['has_import_permission'] = self.has_import_permission(request)
return super().changelist_view(request, extra_context)

View File

@ -1,11 +0,0 @@
import os.path
from django import forms
from django.contrib.admin.helpers import ActionForm
from django.utils.translation import gettext_lazy as _
class ImportForm(forms.Form):
tema = forms.FileField(
label='Zip'
)

View File

@ -1,139 +0,0 @@
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Christian Galeffi <chri@gallochri.com>, 2015.
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-06-04 09:27+0200\n"
"PO-Revision-Date: 2015-08-30 20:32+0100\n"
"Last-Translator: Christian Galeffi <chri@gallochri.com>\n"
"Language-Team: Italian <kde-i18n-it@kde.org>\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
#: admin.py:194
#, python-format
msgid "%s through import_export"
msgstr ""
#: admin.py:200
msgid "Import finished, with {} new and {} updated {}."
msgstr ""
#: admin.py:298
#, python-format
msgid "<h1>Imported file has a wrong encoding: %s</h1>"
msgstr ""
#: admin.py:300
#, python-format
msgid "<h1>%s encountered while trying to read file: %s</h1>"
msgstr ""
#: admin.py:331 templates/admin/import_export/change_list_import_item.html:5
#: templates/admin/import_export/import.html:10
msgid "Import"
msgstr "Importare"
#: admin.py:496 templates/admin/import_export/change_list_export_item.html:5
#: templates/admin/import_export/export.html:7
msgid "Export"
msgstr "Esportare"
#: admin.py:554
msgid "You must select an export format."
msgstr "Devi selezionare un formato di esportazione."
#: admin.py:567
#, python-format
msgid "Export selected %(verbose_name_plural)s"
msgstr "Esporta selezionati %(verbose_name_plural)s"
#: forms.py:10
msgid "File to import"
msgstr "File da importare"
#: forms.py:13 forms.py:41 forms.py:66
msgid "Format"
msgstr "Formato"
#: templates/admin/import_export/base.html:11
msgid "Home"
msgstr "Home"
#: templates/admin/import_export/export.html:31
#: templates/admin/import_export/import.html:52
msgid "Submit"
msgstr "Inviare"
#: templates/admin/import_export/import.html:20
msgid ""
"Below is a preview of data to be imported. If you are satisfied with the "
"results, click 'Confirm import'"
msgstr ""
"Questa è un'anteprima dei dati che saranno importati. Se il risultato è "
"soddisfacente, premi 'Conferma importazione'"
#: templates/admin/import_export/import.html:23
msgid "Confirm import"
msgstr "Conferma importazione"
#: templates/admin/import_export/import.html:31
msgid "This importer will import the following fields: "
msgstr "Verranno importati i seguenti campi:"
#: templates/admin/import_export/import.html:61
#: templates/admin/import_export/import.html:90
msgid "Errors"
msgstr "Errori"
#: templates/admin/import_export/import.html:72
msgid "Line number"
msgstr "Numero linea"
#: templates/admin/import_export/import.html:82
msgid "Some rows failed to validate"
msgstr ""
#: templates/admin/import_export/import.html:84
msgid ""
"Please correct these errors in your data where possible, then reupload it "
"using the form above."
msgstr ""
#: templates/admin/import_export/import.html:89
msgid "Row"
msgstr ""
#: templates/admin/import_export/import.html:116
msgid "Non field specific"
msgstr ""
#: templates/admin/import_export/import.html:137
msgid "Preview"
msgstr "Anteprima"
#: templates/admin/import_export/import.html:152
msgid "New"
msgstr "Nuovo"
#: templates/admin/import_export/import.html:154
msgid "Skipped"
msgstr "Salta"
#: templates/admin/import_export/import.html:156
msgid "Delete"
msgstr "Cancella"
#: templates/admin/import_export/import.html:158
msgid "Update"
msgstr "Aggiorna"
#~ msgid "Import finished"
#~ msgstr "Importazione terminata"

View File

@ -1,81 +0,0 @@
.import-preview .errors {
position: relative;
}
.validation-error-count {
display: inline-block;
background-color: #e40000;
border-radius: 6px;
color: white;
font-size: 0.9em;
position: relative;
font-weight: bold;
margin-top: -2px;
padding: 0.2em 0.4em;
}
.validation-error-container {
position: absolute;
opacity: 0;
pointer-events: none;
background-color: #ffc1c1;
padding: 14px 15px 10px;
top: 25px;
margin: 0 0 20px 0;
width: 200px;
z-index: 2;
}
table.import-preview tr.skip {
background-color: #d2d2d2;
}
table.import-preview tr.new {
background-color: #bdd8b2;
}
table.import-preview tr.delete {
background-color: #f9bebf;
}
table.import-preview tr.update {
background-color: #fdfdcf;
}
.import-preview td:hover .validation-error-count {
z-index: 3;
}
.import-preview td:hover .validation-error-container {
opacity: 1;
pointer-events: auto;
}
.validation-error-list {
margin: 0;
padding: 0;
}
.validation-error-list li {
list-style: none;
margin: 0;
}
.validation-error-list > li > ul {
margin: 8px 0;
padding: 0;
}
.validation-error-list > li > ul > li {
padding: 0;
margin: 0 0 10px;
line-height: 1.28em;
}
.validation-error-field-label {
display: block;
border-bottom: 1px solid #e40000;
color: #e40000;
text-transform: uppercase;
font-weight: bold;
font-size: 0.85em;
}

View File

@ -1,17 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_modify %}
{% load admin_urls %}
{% load static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}" />{% endblock %}
{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
&rsaquo; <a href="{% url 'admin:app_list' app_label=opts.app_label %}">{{ opts.app_config.verbose_name }}</a>
&rsaquo; <a href="{% url opts|admin_urlname:'changelist' %}">{{ opts.verbose_name_plural|capfirst }}</a>
&rsaquo; {% block breadcrumbs_last %}{% endblock %}
</div>
{% endblock %}
{% endif %}

View File

@ -1,13 +0,0 @@
{% extends "admin/change_list.html" %}
{# Original template renders object-tools only when has_add_permission is True. #}
{# This hack allows sub templates to add to object-tools #}
{% block object-tools %}
<ul class="object-tools">
{% block object-tools-items %}
{% if has_add_permission %}
{{ block.super }}
{% endif %}
{% endblock %}
</ul>
{% endblock %}

View File

@ -1,6 +0,0 @@
{% extends "admin/import_export/change_list.html" %}
{% block object-tools-items %}
{% include "admin/import_export/change_list_import_item.html" %}
{{ block.super }}
{% endblock %}

View File

@ -1,171 +0,0 @@
{% extends "admin/import_export/base.html" %}
{% load i18n %}
{% load admin_urls %}
{% load import_export_tags %}
{% load static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "import_export/import.css" %}" />{% endblock %}
{% block breadcrumbs_last %}
{% trans "Import" %}
{% endblock %}
{% block content %}
{% if confirm_form %}
<form action="{% url opts|admin_urlname:"process_import" %}" method="POST">
{% csrf_token %}
{{ confirm_form.as_p }}
<p>
{% trans "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %}
</p>
<div class="submit-row">
<input type="submit" class="default" name="confirm" value="{% trans "Confirm import" %}">
</div>
</form>
{% else %}
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>
{% trans "This importer will import the following fields: " %}
<code>{{ fields|join:", " }}</code>
</p>
<fieldset class="module aligned">
{% for field in form %}
<div class="form-row">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
{% if field.field.help_text %}
<p class="help">{{ field.field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
</fieldset>
<div class="submit-row">
<input type="submit" class="default" value="{% trans "Submit" %}">
</div>
</form>
{% endif %}
{% if result %}
{% if result.has_errors %}
<h2>{% trans "Errors" %}</h2>
<ul>
{% for error in result.base_errors %}
<li>
{{ error.error }}
<div class="traceback">{{ error.traceback|linebreaks }}</div>
</li>
{% endfor %}
{% for line, errors in result.row_errors %}
{% for error in errors %}
<li>
{% trans "Line number" %}: {{ line }} - {{ error.error }}
<div><code>{{ error.row.values|join:", " }}</code></div>
<div class="traceback">{{ error.traceback|linebreaks }}</div>
</li>
{% endfor %}
{% endfor %}
</ul>
{% elif result.has_validation_errors %}
<h2>{% trans "Some rows failed to validate" %}</h2>
<p>{% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}</p>
<table class="import-preview">
<thead>
<tr>
<th>{% trans "Row" %}</th>
<th>{% trans "Errors" %}</th>
{% for field in result.diff_headers %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for row in result.invalid_rows %}
<tr>
<td>{{ row.number }} </td>
<td class="errors">
<span class="validation-error-count">{{ row.error_count }}</span>
<div class="validation-error-container">
<ul class="validation-error-list">
{% for field_name, error_list in row.field_specific_errors.items %}
<li>
<span class="validation-error-field-label">{{ field_name }}</span>
<ul>
{% for error in error_list %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</li>
{% endfor %}
{% if row.non_field_specific_errors %}
<li>
<span class="validation-error-field-label">{% trans "Non field specific" %}</span>
<ul>
{% for error in row.non_field_specific_errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
</li>
{% endif %}
</ul>
</div>
</td>
{% for field in row.values %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<h2>{% trans "Preview" %}</h2>
<table class="import-preview">
<thead>
<tr>
<th></th>
{% for field in result.diff_headers %}
<th>{{ field }}</th>
{% endfor %}
</tr>
</thead>
{% for row in result.valid_rows %}
<tr class="{{ row.import_type }}">
<td class="import-type">
{% if row.import_type == 'new' %}
{% trans "New" %}
{% elif row.import_type == 'skip' %}
{% trans "Skipped" %}
{% elif row.import_type == 'delete' %}
{% trans "Delete" %}
{% elif row.import_type == 'update' %}
{% trans "Update" %}
{% endif %}
</td>
{% for field in row.diff %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -1,316 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py
msgid "Environment"
msgstr "Umgebung"
#: admin_interface/admin.py
msgid "Language chooser"
msgstr "Sprachauswahl"
#: admin_interface/admin.py
msgid "Logo"
msgstr "Logo"
#: admin_interface/admin.py
msgid "Favicon"
msgstr "Favicon"
#: admin_interface/admin.py
msgid "Title"
msgstr "Titel"
#: admin_interface/admin.py
msgid "Header"
msgstr "Header"
#: admin_interface/admin.py
msgid "Breadcrumbs / Module headers"
msgstr "Breadcrumbs / Modul-Header"
#: admin_interface/admin.py
msgid "Generic Links"
msgstr "Generische Links"
#: admin_interface/admin.py
msgid "Save Buttons"
msgstr "Speichern-Buttons"
#: admin_interface/admin.py
msgid "Delete Buttons"
msgstr "Löschen-Buttons"
#: admin_interface/admin.py
msgid "Navigation Bar"
msgstr "Navigationsleiste"
#: admin_interface/admin.py
msgid "Related Modal"
msgstr "Modal für verwandte Objekte"
#: admin_interface/admin.py
msgid "Form Controls"
msgstr "Formularsteuerung"
#: admin_interface/admin.py
msgid "List Filter"
msgstr "Filteranzeige"
#: admin_interface/admin.py
msgid "Change Form"
msgstr "Änderungsformular"
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions"
msgstr "Neueste Aktionen"
#: admin_interface/apps.py
msgid "Admin Interface"
msgstr "Admin-Oberfläche"
#: admin_interface/models.py
msgid "name"
msgstr "Name"
#: admin_interface/models.py
msgid "active"
msgstr "aktiv"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html
msgid "Django administration"
msgstr "Django-Administration"
#: admin_interface/models.py
msgid "title"
msgstr "Titel"
#: admin_interface/models.py
msgid "color"
msgstr "Farbe"
#: admin_interface/models.py
msgid "visible"
msgstr "sichtbar"
#: admin_interface/models.py
msgid "Leave blank to use the default Django logo"
msgstr "Dieses Feld leer lassen um das Django Standard Logo zu benutzen"
#: admin_interface/models.py
msgid "logo"
msgstr "Logo"
#: admin_interface/models.py
msgid "max width"
msgstr "maximale Breite"
#: admin_interface/models.py
msgid "max height"
msgstr "maximale Höhe"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(.ico|.png|.gif - 16x16|32x32 px)"
#: admin_interface/models.py
msgid "favicon"
msgstr "Favicon"
#: admin_interface/models.py
msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)"
msgstr ""
"(rot: #E74C3C, orange: #E67E22, gelb: #F1C40F, grün: #2ECC71, blau: #3498DB)"
#: admin_interface/models.py
msgid "visible in header (marker and name)"
msgstr "sichtbar im Header (Marker und Name)"
#: admin_interface/models.py
msgid "visible in favicon (marker)"
msgstr "sichtbar im Favicon (Marker)"
#: admin_interface/models.py
msgid "Default Select"
msgstr "normale Auswahl"
#: admin_interface/models.py
msgid "Minimal Select"
msgstr "minimale Auswahl"
#: admin_interface/models.py
msgid "control"
msgstr "Regler"
#: admin_interface/models.py
msgid "code"
msgstr "Code"
#: admin_interface/models.py
msgid "display"
msgstr "Anzeige"
#: admin_interface/models.py
msgid "background color"
msgstr "Hintergrundfarbe"
#: admin_interface/models.py
msgid "text color"
msgstr "Textfarbe"
#: admin_interface/models.py
msgid "link color"
msgstr "Linkfarbe"
#: admin_interface/models.py
msgid "link hover color"
msgstr "Linkfarbe beim Überfahren"
#: admin_interface/models.py
msgid "background selected color"
msgstr "Hintergrundfarbe bei Auswahl"
#: admin_interface/models.py
msgid "link selected color"
msgstr "Linkfarbe bei Auswahl"
#: admin_interface/models.py
msgid "rounded corners"
msgstr "abgerundete Ecken"
#: admin_interface/models.py
msgid "link active color"
msgstr "Linkfarbe beim aktiv"
#: admin_interface/models.py
msgid "background hover color"
msgstr "Hintergrundfarbe beim Überfahren"
#: admin_interface/models.py
msgid "background opacity"
msgstr "Deckkraft des Hintergrunds"
#: admin_interface/models.py
msgid "close button visible"
msgstr "Schließen-Schalter sichtbar"
#: admin_interface/models.py
msgid "highlight active"
msgstr "Aktiv hervorheben"
#: admin_interface/models.py
msgid "use dropdown"
msgstr "Dropdown-Liste nutzen"
#: admin_interface/models.py
msgid "sticky position"
msgstr "angeheftete Position"
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr "Schnellentfernung für aktive Filter oben in der Seitenleiste"
#: admin_interface/models.py
msgid "foldable apps"
msgstr "einklappbare Apps"
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr "Fieldsets als Tabs"
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr "Inlines als Tabs"
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr "angeheftete Schaltfläche"
#: admin_interface/models.py
msgid "sticky pagination"
msgstr "angeheftete Seitennummerierung"
#: admin_interface/models.py
msgid "Theme"
msgstr "Thema"
#: admin_interface/models.py
msgid "Themes"
msgstr "Themen"
#: admin_interface/templates/admin/change_list.html
msgid "Filter"
msgstr ""
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format
msgid " By %(filter_title)s "
msgstr ""
#: admin_interface/templates/admin/popup_response.html
msgid "Popup closing..."
msgstr "Popup schließen..."

View File

@ -3,16 +3,15 @@
# #
# Translators: # Translators:
# Martin Vuelta <martin.vuelta@softbutterfly.io>, 2018 # Martin Vuelta <martin.vuelta@softbutterfly.io>, 2018
# Santiago Muñoz <smunoz@mythologylabs.com.uy>, 2023
# #
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n" "POT-Creation-Date: 2019-09-04 09:18+0000\n"
"PO-Revision-Date: 2023-08-04 11:52-0300\n" "PO-Revision-Date: 2018-12-30 19:13-0500\n"
"Last-Translator: Santiago Muñoz <smunoz@mythologylabs.com.uy>\n" "Last-Translator: Martin Vuelta <martin.vuelta@softbutterfly.io>\n"
"Language-Team: Spanish <dev@softbutterfly.io>\n" "Language-Team: Spanish <dev@softbutterfly.io>\n"
"Language: Spanish \n" "Language: Spanish \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -20,304 +19,188 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Ambiente" msgstr "Ambiente"
#: admin_interface/admin.py #: admin_interface/admin.py:30
msgid "Language chooser" msgid "Language chooser"
msgstr "Selección de idioma" msgstr ""
#: admin_interface/admin.py #: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Título" msgstr "Título"
#: admin_interface/admin.py #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Encabezado" msgstr "Encabezado"
#: admin_interface/admin.py #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Breadcrumbs / Encabezados de módulos" msgstr "Breadcrumbs / Encabezados de módulos"
#: admin_interface/admin.py #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Enlaces genéricos" msgstr "Enlaces genéricos"
#: admin_interface/admin.py #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Botones de guardar" msgstr "Botones de guardar"
#: admin_interface/admin.py #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Botones de borrar" msgstr "Botones de borrar"
#: admin_interface/admin.py #: admin_interface/admin.py:99
msgid "Navigation Bar"
msgstr "Barra de navegación"
#: admin_interface/admin.py
msgid "Related Modal" msgid "Related Modal"
msgstr "Modal para objetos relacionados" msgstr "Modal para objetos relacionados"
#: admin_interface/admin.py #: admin_interface/admin.py:109
msgid "Form Controls"
msgstr "Controles del formulario"
#: admin_interface/admin.py
msgid "List Filter" msgid "List Filter"
msgstr "Lista de filtros" msgstr "Lista de filtros"
#: admin_interface/admin.py #: admin_interface/admin.py:113
msgid "Change Form"
msgstr "Cambiar Formulario"
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Acciones recientes" msgstr "Acciones recientes"
#: admin_interface/apps.py #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interfaz de administración" msgstr "Interfaz de administración"
#: admin_interface/models.py #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "nombre" msgstr "Nombre"
#: admin_interface/models.py #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "activo" msgstr "Activo"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Administración de Django" msgstr "Administración de Django"
#: admin_interface/models.py #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "Título" msgstr "Título"
#: admin_interface/models.py #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:122
#, fuzzy
#| msgid "logo color"
msgid "color" msgid "color"
msgstr "color" msgstr "color de logo"
#: admin_interface/models.py #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "visible" msgstr "Visible"
#: admin_interface/models.py #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Dejar en blanco para usar el logo por defecto de Django" msgstr "Dejar en blanco para usaer el logo por defecto de Django"
#: admin_interface/models.py #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py #: admin_interface/models.py:110
msgid "max width"
msgstr "ancho máximo"
#: admin_interface/models.py
msgid "max height"
msgstr "altura máxima"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "Formatos ico, png o gif. Tamaños de 16x16 o 32x32 pixeles" msgstr "Formatos ico, png o gif. Tamaños de 16x16 o 32x32 pixeles"
#: admin_interface/models.py #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
msgstr "" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "visible en el encabezado (marcador y nombre)" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "visible en el favicon (marcador)" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:134
msgid "Default Select"
msgstr "Selección por defecto"
#: admin_interface/models.py
msgid "Minimal Select"
msgstr "Selección mínima"
#: admin_interface/models.py
msgid "control"
msgstr "control"
#: admin_interface/models.py
msgid "code" msgid "code"
msgstr "código" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:141
msgid "display" msgid "display"
msgstr "mostrar" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "color de fondo" msgstr "color de fondo"
#: admin_interface/models.py #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "color de texto" msgstr "color de texto"
#: admin_interface/models.py #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "color de enlace" msgstr "color de enlace"
#: admin_interface/models.py #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "color de enlace (hover)" msgstr "color de enlace (hover)"
#: admin_interface/models.py #: admin_interface/models.py:194 admin_interface/models.py:279
#, fuzzy
#| msgid "background color"
msgid "background selected color"
msgstr "color de fondo"
#: admin_interface/models.py
#, fuzzy
#| msgid "link color"
msgid "link selected color"
msgstr "color de enlace"
#: admin_interface/models.py
msgid "rounded corners" msgid "rounded corners"
msgstr "esquinas redondas" msgstr "esquinas redondas"
#: admin_interface/models.py #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "link active color"
msgstr "color de enlace (active)"
#: admin_interface/models.py
msgid "background hover color" msgid "background hover color"
msgstr "color de fondo (hover)" msgstr "color de fondo (hover)"
#: admin_interface/models.py #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacidad de fondo" msgstr "opacidad de fondo"
#: admin_interface/models.py #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "mostrar botón de cerrar" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:286
msgid "highlight active"
msgstr "destacar activo"
#: admin_interface/models.py
msgid "use dropdown" msgid "use dropdown"
msgstr "Usar lista desplegable" msgstr "Usar lista desplegable"
#: admin_interface/models.py #: admin_interface/models.py:298
msgid "sticky position"
msgstr "anclar posición"
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr "remover enlaces para filtros activos en la parte superior de la barra lateral"
#: admin_interface/models.py
msgid "foldable apps"
msgstr "aplicaciones plegables"
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr "campos como pestañas"
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr "inlines como pestañas"
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr "inlines apilados plegables"
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr "inlines apilados plegables colapsados"
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr "inlines tabulares plegables"
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr "inlines tabulares plegables colapsados"
#: admin_interface/models.py
msgid "sticky submit"
msgstr "anclar botón de guardar"
#: admin_interface/models.py
msgid "sticky pagination"
msgstr "anclar paginación"
#: admin_interface/models.py
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
#: admin_interface/models.py #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Temas" msgstr "Temas"
#: admin_interface/templates/admin/change_list.html #: admin_interface/templates/admin/filter.html:13
#, fuzzy #: admin_interface/templates/admin_interface/dropdown_filter.html:4
#| msgid "List Filter"
msgid "Filter"
msgstr "Lista de filtros"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format #, python-format
msgid " By %(filter_title)s " msgid " By %(filter_title)s "
msgstr " Por %(filter_title)s " msgstr " Por %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html #: admin_interface/templates/admin/popup_response.html:3
msgid "Popup closing..." msgid "Popup closing..."
msgstr "Cerando popup..." msgstr "Cerando popup..."

View File

@ -8,314 +8,198 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n" "POT-Creation-Date: 2020-10-12 19:23+0330\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Amir Ajorloo <amirajorloo@gmail.com>\n" "Last-Translator: Amir Ajorloo <amirajorloo@gmail.com>\n"
"Language-Team: Farsi <LL@li.org>\n" "Language-Team: Farsi <LL@li.org>\n"
"Language: FarsiMIME-Version: 1.0\n" "Language: Farsi"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: admin_interface/admin.py #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "محیط" msgstr "محیط"
#: admin_interface/admin.py #: admin_interface/admin.py:30
msgid "Language chooser" msgid "Language chooser"
msgstr "انتخاب زبان" msgstr "انتخاب زبان"
#: admin_interface/admin.py #: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "لوگو" msgstr "لوگو"
#: admin_interface/admin.py #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "آیکون تب" msgstr "آیکون تب"
#: admin_interface/admin.py #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "عنوان" msgstr "عنوان"
#: admin_interface/admin.py #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "هدر" msgstr "هدر"
#: admin_interface/admin.py #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "مسیر صفحه" msgstr "مسیر صفحه"
#: admin_interface/admin.py #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "لینکهای عمومی" msgstr "لینکهای عمومی"
#: admin_interface/admin.py #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "دکمههای ذخیره" msgstr "دکمههای ذخیره"
#: admin_interface/admin.py #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "دکمههای حذف" msgstr "دکمههای حذف"
#: admin_interface/admin.py #: admin_interface/admin.py:99
msgid "Navigation Bar"
msgstr ""
#: admin_interface/admin.py
msgid "Related Modal" msgid "Related Modal"
msgstr "مدلهای مرتبط" msgstr "مدل‌های مرتبط"
#: admin_interface/admin.py #: admin_interface/admin.py:109
msgid "Form Controls"
msgstr ""
#: admin_interface/admin.py
msgid "List Filter" msgid "List Filter"
msgstr "فیلترهای لیست" msgstr "فیلتر‌های لیست"
#: admin_interface/admin.py #: admin_interface/admin.py:113
msgid "Change Form"
msgstr ""
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions" msgid "Recent Actions"
msgstr "فعالیتهای اخیر" msgstr "فعالیت‌های اخیر"
#: admin_interface/apps.py #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "ظاهر ادمین" msgstr "ظاهر ادمین"
#: admin_interface/models.py #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "نام" msgstr "نام"
#: admin_interface/models.py #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "فعال" msgstr "فعال"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "مدیریت جنگو" msgstr "مدیریت جنگو"
#: admin_interface/models.py #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "عنوان" msgstr "عنوان"
#: admin_interface/models.py #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "رنگ" msgstr "رنگ"
#: admin_interface/models.py #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "نمایان" msgstr "نمایان"
#: admin_interface/models.py #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "برای نمایش لوگوی پیش فرض، خالی بگذارید." msgstr "برای نمایش لوگوی پیش فرض، خالی بگذارید."
#: admin_interface/models.py #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "لوگو" msgstr "لوگو"
#: admin_interface/models.py #: admin_interface/models.py:110
msgid "max width"
msgstr ""
#: admin_interface/models.py
msgid "max height"
msgstr ""
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(.ico|.png|.gif - 16x16|32x32 px)" msgstr "(.ico|.png|.gif - 16x16|32x32 px)"
#: admin_interface/models.py #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "آیکون تب" msgstr "آیکون تب"
#: admin_interface/models.py #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
msgstr "" msgstr ""
"(قرمز: #E74C3C, نارنجی: #E67E22, زرد: #F1C40F, سبز: #2ECC71, آبی: #3498DB)" "(قرمز: #E74C3C, نارنجی: #E67E22, زرد: #F1C40F, سبز: #2ECC71, آبی: "
"#3498DB)"
#: admin_interface/models.py #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "نمایان در هدر" msgstr "نمایان در هدر"
#: admin_interface/models.py #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "نمایان در آیکون تب" msgstr "نمایان در آیکون تب"
#: admin_interface/models.py #: admin_interface/models.py:134
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
msgid "control"
msgstr ""
#: admin_interface/models.py
msgid "code" msgid "code"
msgstr "کد" msgstr "کد"
#: admin_interface/models.py #: admin_interface/models.py:141
msgid "display" msgid "display"
msgstr "نمایش" msgstr "نمایش"
#: admin_interface/models.py #: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "رنگ پسزمینه" msgstr "رنگ پس‌زمینه"
#: admin_interface/models.py #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "رنگ متن" msgstr "رنگ متن"
#: admin_interface/models.py #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "رنگ لینک" msgstr "رنگ لینک"
#: admin_interface/models.py #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "رنگ لینک در حالت هاور" msgstr "رنگ لینک در حالت هاور"
#: admin_interface/models.py #: admin_interface/models.py:194 admin_interface/models.py:279
#, fuzzy
#| msgid "background color"
msgid "background selected color"
msgstr "رنگ پسزمینه"
#: admin_interface/models.py
#, fuzzy
#| msgid "link color"
msgid "link selected color"
msgstr "رنگ لینک"
#: admin_interface/models.py
msgid "rounded corners" msgid "rounded corners"
msgstr "گوشههای خمیده" msgstr "گوشه‌های خمیده"
#: admin_interface/models.py #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "link active color"
msgstr "رنگ فعال پیوند"
#: admin_interface/models.py
msgid "background hover color" msgid "background hover color"
msgstr "رنگ پسزمینه در حالت هاور" msgstr "رنگ پس‌زمینه در حالت هاور"
#: admin_interface/models.py #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "شفافیت بکگراند" msgstr "شفافیت بکگراند"
#: admin_interface/models.py #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "دکمه بستن نمایان باشد" msgstr "دکمه بستن نمایان باشد"
#: admin_interface/models.py #: admin_interface/models.py:286
msgid "highlight active"
msgstr ""
#: admin_interface/models.py
msgid "use dropdown" msgid "use dropdown"
msgstr "استفاده از دراپ داون" msgstr "استفاده از دراپ داون"
#: admin_interface/models.py #: admin_interface/models.py:298
msgid "sticky position"
msgstr ""
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr ""
#: admin_interface/models.py
msgid "foldable apps"
msgstr ""
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr ""
#: admin_interface/models.py
msgid "sticky pagination"
msgstr ""
#: admin_interface/models.py
msgid "Theme" msgid "Theme"
msgstr "تم" msgstr "تم"
#: admin_interface/models.py #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "تمها" msgstr "تم‌ها"
#: admin_interface/templates/admin/change_list.html #: admin_interface/templates/admin/filter.html:13
#, fuzzy #: admin_interface/templates/admin_interface/dropdown_filter.html:4
#| msgid "List Filter"
msgid "Filter"
msgstr "فیلترهای لیست"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format #, python-format
msgid " By %(filter_title)s " msgid " By %(filter_title)s "
msgstr " توسط %(filter_title)s " msgstr " توسط %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html #: admin_interface/templates/admin/popup_response.html:3
msgid "Popup closing..." msgid "Popup closing..."
msgstr "پاپ آپ در حال بسته شدن..." msgstr "پاپ آپ در حال بسته شدن..."

View File

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n" "POT-Creation-Date: 2019-09-04 09:18+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,127 +18,109 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: admin_interface/admin.py #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Environnement" msgstr "Environnment"
#: admin_interface/admin.py #: admin_interface/admin.py:30
msgid "Language chooser" msgid "Language chooser"
msgstr "Sélecteur de langue" msgstr ""
#: admin_interface/admin.py #: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Titre" msgstr "Titre"
#: admin_interface/admin.py #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Bannière" msgstr "Bannière"
#: admin_interface/admin.py #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Fil d'ariane / en-têtes de module" msgstr "Fil d'ariane / en-têtes de module"
#: admin_interface/admin.py #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Liens génériques" msgstr "Liens génériques"
#: admin_interface/admin.py #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Boutons sauvegarder" msgstr "Boutons sauvegarder"
#: admin_interface/admin.py #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Boutons supprimer" msgstr "Boutons supprimer"
#: admin_interface/admin.py #: admin_interface/admin.py:99
msgid "Navigation Bar"
msgstr "Barre de navigation"
#: admin_interface/admin.py
msgid "Related Modal" msgid "Related Modal"
msgstr "Modale pour objet reliés" msgstr "Modale pour objet reliés"
#: admin_interface/admin.py #: admin_interface/admin.py:109
msgid "Form Controls"
msgstr "Contrôles de formulaires"
#: admin_interface/admin.py
msgid "List Filter" msgid "List Filter"
msgstr "Filtre de liste" msgstr "Filtre de liste"
#: admin_interface/admin.py #: admin_interface/admin.py:113
msgid "Change Form"
msgstr ""
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Actions récentes" msgstr "Actions récentes"
#: admin_interface/apps.py #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interface Admin" msgstr "Interface Admin"
#: admin_interface/models.py #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: admin_interface/models.py #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "actif" msgstr "actif"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Administration Django" msgstr "Administration Django"
#: admin_interface/models.py #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "titre" msgstr "titre"
#: admin_interface/models.py #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "couleur" msgstr "couleur"
#: admin_interface/models.py #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "visible" msgstr "visible"
#: admin_interface/models.py #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Laisser vide pour utiliser le logo Django par défaut" msgstr "Laisser vide pour utiliser le logo Django par défaut"
#: admin_interface/models.py #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py #: admin_interface/models.py:110
msgid "max width"
msgstr "largeur max"
#: admin_interface/models.py
msgid "max height"
msgstr "hauteur max"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(.ico|.png|.gif - 16x16|32x32 px)" msgstr "(.ico|.png|.gif - 16x16|32x32 px)"
#: admin_interface/models.py #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
@ -146,173 +128,78 @@ msgstr ""
"(rouge: #E74C3C, orange: #E67E22, jaune: #F1C40F, vert: #2ECC71, bleu: " "(rouge: #E74C3C, orange: #E67E22, jaune: #F1C40F, vert: #2ECC71, bleu: "
"#3498DB)" "#3498DB)"
#: admin_interface/models.py #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "visible dans len-tête (marqueur et nom)" msgstr "visible dans len-tête (marqueur et nom)"
#: admin_interface/models.py #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "visible dans la favicon (marqueur)" msgstr "visible dans la favicon (marqueur)"
#: admin_interface/models.py #: admin_interface/models.py:134
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
msgid "control"
msgstr "contrôle"
#: admin_interface/models.py
msgid "code" msgid "code"
msgstr "code" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:141
msgid "display" msgid "display"
msgstr "affichage" msgstr ""
#: admin_interface/models.py #: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "couleur d'arrière-plan" msgstr "couleur d'arrière-plan"
#: admin_interface/models.py #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "couleur du texte" msgstr "couleur du texte"
#: admin_interface/models.py #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "couleur de lien" msgstr "couleur de lien"
#: admin_interface/models.py #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "couleur de lien au survol" msgstr "couleur de lien au survol"
#: admin_interface/models.py #: admin_interface/models.py:194 admin_interface/models.py:279
msgid "background selected color"
msgstr "couleur d'arrière-plan choisi"
#: admin_interface/models.py
msgid "link selected color"
msgstr "couleur de lien choisi"
#: admin_interface/models.py
msgid "rounded corners" msgid "rounded corners"
msgstr "coins arrondis" msgstr "coins arrondis"
#: admin_interface/models.py #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "link active color"
msgstr "couleur de lien actif"
#: admin_interface/models.py
msgid "background hover color" msgid "background hover color"
msgstr "couleur de fond au survol" msgstr "couleur de fond au survol"
#: admin_interface/models.py #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacité de l'arrière-plan" msgstr "opacité de l'arrière-plan"
#: admin_interface/models.py #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "bouton fermer visible" msgstr "bouton fermer visible"
#: admin_interface/models.py #: admin_interface/models.py:286
msgid "highlight active"
msgstr "mise en valeur active"
#: admin_interface/models.py
msgid "use dropdown" msgid "use dropdown"
msgstr "utiliser un menu déroulant" msgstr "utiliser un menu déroulant"
#: admin_interface/models.py #: admin_interface/models.py:298
msgid "sticky position"
msgstr "position adhérente (sticky)"
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr ""
"liens de suppression pour les filtres actifs en haut de la barre latérale"
#: admin_interface/models.py
msgid "foldable apps"
msgstr "apps repliables"
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr "envoi adhérent (sticky)"
#: admin_interface/models.py
msgid "sticky pagination"
msgstr "pagination adhérente (sticky)"
#: admin_interface/models.py
msgid "Theme" msgid "Theme"
msgstr "Thème" msgstr "Thème"
#: admin_interface/models.py #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Thèmes" msgstr "Thèmes"
#: admin_interface/templates/admin/change_list.html #: admin_interface/templates/admin/filter.html:13
msgid "Filter" #: admin_interface/templates/admin_interface/dropdown_filter.html:4
msgstr "Filtre"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format #, python-format
msgid " By %(filter_title)s " msgid " By %(filter_title)s "
msgstr " Par %(filter_title)s " msgstr " Par %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html #: admin_interface/templates/admin/popup_response.html:3
msgid "Popup closing..." msgid "Popup closing..."
msgstr "Fermeture de la modale..." msgstr "Fermeture de la modale..."

View File

@ -9,7 +9,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n" "POT-Creation-Date: 2019-09-04 09:19+0000\n"
"PO-Revision-Date: 2018-12-30 19:13-0500\n" "PO-Revision-Date: 2018-12-30 19:13-0500\n"
"Last-Translator: Fabio Caccamo <fabio.caccamo@gmail.com>\n" "Last-Translator: Fabio Caccamo <fabio.caccamo@gmail.com>\n"
"Language-Team: Italian <LL@li.org>\n" "Language-Team: Italian <LL@li.org>\n"
@ -19,127 +19,109 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Ambiente" msgstr "Ambiente"
#: admin_interface/admin.py #: admin_interface/admin.py:30
msgid "Language chooser" msgid "Language chooser"
msgstr "Selettore di lingua" msgstr "Selettore di lingua"
#: admin_interface/admin.py #: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Titolo" msgstr "Titolo"
#: admin_interface/admin.py #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Header" msgstr "Header"
#: admin_interface/admin.py #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Breadcrumbs / Header dei moduli" msgstr "Breadcrumbs / Header dei moduli"
#: admin_interface/admin.py #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Link generici" msgstr "Link generici"
#: admin_interface/admin.py #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Pulsanti per salvare" msgstr "Pulsanti per salvare"
#: admin_interface/admin.py #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Pulsanti per eliminare" msgstr "Pulsanti per eliminare"
#: admin_interface/admin.py #: admin_interface/admin.py:99
msgid "Navigation Bar"
msgstr "Barra di Navigazione"
#: admin_interface/admin.py
msgid "Related Modal" msgid "Related Modal"
msgstr "Modale per gli oggetti correlati" msgstr "Modale per gli oggetti correlati"
#: admin_interface/admin.py #: admin_interface/admin.py:109
msgid "Form Controls"
msgstr "Controlli dei form"
#: admin_interface/admin.py
msgid "List Filter" msgid "List Filter"
msgstr "Filtro listato" msgstr "Filtro listato"
#: admin_interface/admin.py #: admin_interface/admin.py:113
msgid "Change Form"
msgstr "Form di modifica"
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Azioni recenti" msgstr "Azioni recenti"
#: admin_interface/apps.py #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Interfaccia di amministrazione" msgstr "Interfaccia di amministrazione"
#: admin_interface/models.py #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "nome" msgstr "nome"
#: admin_interface/models.py #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "attivo" msgstr "attivo"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Amministrazione di Django" msgstr "Amministrazione di Django"
#: admin_interface/models.py #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "titolo" msgstr "titolo"
#: admin_interface/models.py #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "colore" msgstr "colore"
#: admin_interface/models.py #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "visibile" msgstr "visibile"
#: admin_interface/models.py #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Lasciare vuoto per usare il logo Django di default" msgstr "Lasciare vuoto per usare il logo Django di default"
#: admin_interface/models.py #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py #: admin_interface/models.py:110
msgid "max width"
msgstr "larghezza massima"
#: admin_interface/models.py
msgid "max height"
msgstr "altezza massima"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(formato ico, png o gif - dimensioni 16x16 o 32x32 px)" msgstr "(formato ico, png o gif - dimensioni 16x16 o 32x32 px)"
#: admin_interface/models.py #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
@ -147,178 +129,78 @@ msgstr ""
"(rosso: #E74C3C, arancione: #E67E22, giallo: #F1C40F, verde: #2ECC71, blu: " "(rosso: #E74C3C, arancione: #E67E22, giallo: #F1C40F, verde: #2ECC71, blu: "
"#3498DB)" "#3498DB)"
#: admin_interface/models.py #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "visibile nell'header (marker e nome)" msgstr "visibile nell'header (marker e nome)"
#: admin_interface/models.py #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "visibile nella favicon (marker)" msgstr "visibile nella favicon (marker)"
#: admin_interface/models.py #: admin_interface/models.py:134
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
msgid "control"
msgstr ""
#: admin_interface/models.py
msgid "code" msgid "code"
msgstr "codice" msgstr "codice"
#: admin_interface/models.py #: admin_interface/models.py:141
msgid "display" msgid "display"
msgstr "visualizzazione" msgstr "visualizzazione"
#: admin_interface/models.py #: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "colore di sfondo" msgstr "colore di sfondo"
#: admin_interface/models.py #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "colore del testo" msgstr "colore del testo"
#: admin_interface/models.py #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "colore dei link" msgstr "colore dei link"
#: admin_interface/models.py #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "colore dei link in hover" msgstr "colore dei link in hover"
#: admin_interface/models.py #: admin_interface/models.py:194 admin_interface/models.py:279
#, fuzzy
#| msgid "background color"
msgid "background selected color"
msgstr "colore di sfondo"
#: admin_interface/models.py
#, fuzzy
#| msgid "link color"
msgid "link selected color"
msgstr "colore dei link"
#: admin_interface/models.py
msgid "rounded corners" msgid "rounded corners"
msgstr "bordi arrotondati" msgstr "bordi arrotondati"
#: admin_interface/models.py #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "link active color"
msgstr "colore dei link attivi"
#: admin_interface/models.py
msgid "background hover color" msgid "background hover color"
msgstr "colore di sfondo in hover" msgstr "colore di sfondo in hover"
#: admin_interface/models.py #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "opacità dello sfondo" msgstr "opacità dello sfondo"
#: admin_interface/models.py #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "pulsante chiudi visibile" msgstr "pulsante chiudi visibile"
#: admin_interface/models.py #: admin_interface/models.py:286
msgid "highlight active"
msgstr ""
#: admin_interface/models.py
msgid "use dropdown" msgid "use dropdown"
msgstr "usa dropdown" msgstr "usa dropdown"
#: admin_interface/models.py #: admin_interface/models.py:298
msgid "sticky position"
msgstr ""
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr "links di rimozione rapida dei filtri attivi in alto nella sidebar"
#: admin_interface/models.py
msgid "foldable apps"
msgstr ""
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr ""
#: admin_interface/models.py
msgid "sticky pagination"
msgstr ""
#: admin_interface/models.py
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
#: admin_interface/models.py #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Temi" msgstr "Temi"
#: admin_interface/templates/admin/change_list.html #: admin_interface/templates/admin/filter.html:13
#, fuzzy #: admin_interface/templates/admin_interface/dropdown_filter.html:4
#| msgid "List Filter"
msgid "Filter"
msgstr "Filtro listato"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr "Cancella tutti i filtri"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr "Modifica"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr "Visualizza"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr "Visualizza sul sito"
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr "Eliminare?"
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format #, python-format
msgid " By %(filter_title)s " msgid " By %(filter_title)s "
msgstr " Per %(filter_title)s " msgstr " Per %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html #: admin_interface/templates/admin/popup_response.html:3
msgid "Popup closing..." msgid "Popup closing..."
msgstr "Chiusura popup..." msgstr "Chiusura popup..."

View File

@ -1,324 +0,0 @@
# This file is distributed under the same license as the
# django-admin-interface package.
#
# Translators:
# Kamil Paduszyński <kpaduszy@gmail.com>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n"
"PO-Revision-Date: 2022-02-04 19:13-0500\n"
"Last-Translator: Kamil Paduszyński <kpaduszy@gmail.com>\n"
"Language-Team: Polish <LL@li.org>\n"
"Language: Polish \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: admin_interface/admin.py
msgid "Environment"
msgstr "Środowisko"
#: admin_interface/admin.py
msgid "Language chooser"
msgstr "Wybór wersji językowej"
#: admin_interface/admin.py
msgid "Logo"
msgstr "Logo"
#: admin_interface/admin.py
msgid "Favicon"
msgstr "Ikonka"
#: admin_interface/admin.py
msgid "Title"
msgstr "Tytuł"
#: admin_interface/admin.py
msgid "Header"
msgstr "Nagłówek"
#: admin_interface/admin.py
msgid "Breadcrumbs / Module headers"
msgstr "Pasek nawigacyjny / nagłówki modułów"
#: admin_interface/admin.py
msgid "Generic Links"
msgstr "Zwykłe linki"
#: admin_interface/admin.py
msgid "Save Buttons"
msgstr "Przyciski zapisywania"
#: admin_interface/admin.py
msgid "Delete Buttons"
msgstr "Przyciski usuwania"
#: admin_interface/admin.py
msgid "Navigation Bar"
msgstr ""
#: admin_interface/admin.py
msgid "Related Modal"
msgstr "Okno dialogowe"
#: admin_interface/admin.py
msgid "Form Controls"
msgstr ""
#: admin_interface/admin.py
msgid "List Filter"
msgstr "Filtry"
#: admin_interface/admin.py
msgid "Change Form"
msgstr ""
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions"
msgstr "Ostatnie działania"
#: admin_interface/apps.py
msgid "Admin Interface"
msgstr "Wygląd panelu administracyjnego"
#: admin_interface/models.py
msgid "name"
msgstr "nazwa"
#: admin_interface/models.py
msgid "active"
msgstr "aktywny"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html
msgid "Django administration"
msgstr "Administracja Django"
#: admin_interface/models.py
msgid "title"
msgstr "tytuł"
#: admin_interface/models.py
msgid "color"
msgstr "kolor"
#: admin_interface/models.py
msgid "visible"
msgstr "widoczny"
#: admin_interface/models.py
msgid "Leave blank to use the default Django logo"
msgstr "Puste ustawia domyślne logo Django"
#: admin_interface/models.py
msgid "logo"
msgstr "logo"
#: admin_interface/models.py
msgid "max width"
msgstr ""
#: admin_interface/models.py
msgid "max height"
msgstr ""
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(Format pliku: .ico, .png, .gif; wymiary: 16 x 16 lub 32 x 32 px)."
#: admin_interface/models.py
msgid "favicon"
msgstr "ikonka"
#: admin_interface/models.py
msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)"
msgstr ""
"(czerwony: #E74C3C, pomarańczowy: #E67E22, żółty: #F1C40F, zielony: #2ECC71, "
"niebieski: #3498DB)"
#: admin_interface/models.py
msgid "visible in header (marker and name)"
msgstr "widoczne w nagłówku (znacznik i nazwa)"
#: admin_interface/models.py
msgid "visible in favicon (marker)"
msgstr "widoczne przy ikonce (znacznik)"
#: admin_interface/models.py
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
msgid "control"
msgstr ""
#: admin_interface/models.py
msgid "code"
msgstr "kod"
#: admin_interface/models.py
msgid "display"
msgstr "wyświetlaj"
#: admin_interface/models.py
msgid "background color"
msgstr "kolor tła"
#: admin_interface/models.py
msgid "text color"
msgstr "kolor tekstu"
#: admin_interface/models.py
msgid "link color"
msgstr "kolor linku"
#: admin_interface/models.py
msgid "link hover color"
msgstr "kolor wskazywanego linku"
#: admin_interface/models.py
#, fuzzy
#| msgid "background color"
msgid "background selected color"
msgstr "kolor tła"
#: admin_interface/models.py
#, fuzzy
#| msgid "link color"
msgid "link selected color"
msgstr "kolor linku"
#: admin_interface/models.py
msgid "rounded corners"
msgstr "zaokrąglenie narożników"
#: admin_interface/models.py
msgid "link active color"
msgstr "kolor aktywny linku"
#: admin_interface/models.py
msgid "background hover color"
msgstr "kolor tła wskazywanego przycisku"
#: admin_interface/models.py
msgid "background opacity"
msgstr "przeźroczystość tła"
#: admin_interface/models.py
msgid "close button visible"
msgstr "pokaż przycisk zamykania"
#: admin_interface/models.py
msgid "highlight active"
msgstr ""
#: admin_interface/models.py
msgid "use dropdown"
msgstr "zastosuj listy rozwijane"
#: admin_interface/models.py
msgid "sticky position"
msgstr ""
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr ""
#: admin_interface/models.py
msgid "foldable apps"
msgstr ""
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr ""
#: admin_interface/models.py
msgid "sticky pagination"
msgstr ""
#: admin_interface/models.py
msgid "Theme"
msgstr "Schemat"
#: admin_interface/models.py
msgid "Themes"
msgstr "Schematy"
#: admin_interface/templates/admin/change_list.html
#, fuzzy
#| msgid "List Filter"
msgid "Filter"
msgstr "Filtry"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format
msgid " By %(filter_title)s "
msgstr " po %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html
msgid "Popup closing..."
msgstr "Zamykanie..."

View File

@ -1,321 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: admin_interface/admin.py
msgid "Environment"
msgstr "Ambiente"
#: admin_interface/admin.py
msgid "Language chooser"
msgstr "Seletor de idioma"
#: admin_interface/admin.py
msgid "Logo"
msgstr "Logo"
#: admin_interface/admin.py
msgid "Favicon"
msgstr "Favicon"
#: admin_interface/admin.py
msgid "Title"
msgstr "Título"
#: admin_interface/admin.py
msgid "Header"
msgstr "Cabeçalho"
#: admin_interface/admin.py
msgid "Breadcrumbs / Module headers"
msgstr "Cabeçalhos de módulo"
#: admin_interface/admin.py
msgid "Generic Links"
msgstr "Links Genéricos"
#: admin_interface/admin.py
msgid "Save Buttons"
msgstr "Botões Salvar"
#: admin_interface/admin.py
msgid "Delete Buttons"
msgstr "Botões Deletar"
#: admin_interface/admin.py
msgid "Navigation Bar"
msgstr "Barra de Navegação"
#: admin_interface/admin.py
msgid "Related Modal"
msgstr "Modal Relacionado"
#: admin_interface/admin.py
msgid "Form Controls"
msgstr "Controles de Formulário"
#: admin_interface/admin.py
msgid "List Filter"
msgstr "Filtro de lista"
#: admin_interface/admin.py
msgid "Change Form"
msgstr ""
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions"
msgstr "Ações recentes"
#: admin_interface/apps.py
msgid "Admin Interface"
msgstr "Interface do administrador"
#: admin_interface/models.py
msgid "name"
msgstr "nome"
#: admin_interface/models.py
msgid "active"
msgstr "ativo"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html
msgid "Django administration"
msgstr "Administração do Django"
#: admin_interface/models.py
msgid "title"
msgstr "título"
#: admin_interface/models.py
msgid "color"
msgstr "cor"
#: admin_interface/models.py
msgid "visible"
msgstr "visível"
#: admin_interface/models.py
msgid "Leave blank to use the default Django logo"
msgstr "Deixe em branco para usar o logotipo padrão do Django"
#: admin_interface/models.py
msgid "logo"
msgstr "logo"
#: admin_interface/models.py
msgid "max width"
msgstr "largura máxima"
#: admin_interface/models.py
msgid "max height"
msgstr "altura máxima"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "(.ico|.png|.gif - 16x16|32x32 px)"
#: admin_interface/models.py
msgid "favicon"
msgstr "favicon"
#: admin_interface/models.py
msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)"
msgstr ""
"(vermelho: #E74C3C, laranja: #E67E22, amarelo: #F1C40F, verde: #2ECC71, "
"azul: #3498DB)"
#: admin_interface/models.py
msgid "visible in header (marker and name)"
msgstr "visível no cabeçalho (marcador e nome)"
#: admin_interface/models.py
msgid "visible in favicon (marker)"
msgstr "visível no favicon (marcador)"
#: admin_interface/models.py
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
#, fuzzy
#| msgid "Form Controls"
msgid "control"
msgstr "Controles de Formulário"
#: admin_interface/models.py
msgid "code"
msgstr "código"
#: admin_interface/models.py
msgid "display"
msgstr "exibição"
#: admin_interface/models.py
msgid "background color"
msgstr "cor de fundo"
#: admin_interface/models.py
msgid "text color"
msgstr "cor do texto"
#: admin_interface/models.py
msgid "link color"
msgstr "cor do link"
#: admin_interface/models.py
msgid "link hover color"
msgstr "cor de foco do link"
#: admin_interface/models.py
msgid "background selected color"
msgstr "cor de fundo selecionada"
#: admin_interface/models.py
msgid "link selected color"
msgstr "link cor selecionada"
#: admin_interface/models.py
msgid "rounded corners"
msgstr "cantos arredondados"
#: admin_interface/models.py
msgid "link active color"
msgstr "cor de ativação do link"
#: admin_interface/models.py
msgid "background hover color"
msgstr "cor de fundo do foco"
#: admin_interface/models.py
msgid "background opacity"
msgstr "opacidade de fundo"
#: admin_interface/models.py
msgid "close button visible"
msgstr "botão fechar visível"
#: admin_interface/models.py
msgid "highlight active"
msgstr ""
#: admin_interface/models.py
msgid "use dropdown"
msgstr "usar menu suspenso"
#: admin_interface/models.py
msgid "sticky position"
msgstr "posição sticky"
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr ""
#: admin_interface/models.py
msgid "foldable apps"
msgstr "aplicativos dobráveis"
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr "envio fixo"
#: admin_interface/models.py
msgid "sticky pagination"
msgstr "paginação fixa"
#: admin_interface/models.py
msgid "Theme"
msgstr "Tema"
#: admin_interface/models.py
msgid "Themes"
msgstr "Temas"
#: admin_interface/templates/admin/change_list.html
#, fuzzy
#| msgid "List Filter"
msgid "Filter"
msgstr "Filtro de lista"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format
msgid " By %(filter_title)s "
msgstr " por %(filter_title)s "
#: admin_interface/templates/admin/popup_response.html
msgid "Popup closing..."
msgstr "Pop-up fechando..."

View File

@ -1,320 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-06-23 16:28-0500\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || "
"(n%100>=11 && n%100<=14)? 2 : 3);\n"
#: admin_interface/admin.py
msgid "Environment"
msgstr "Окружение"
#: admin_interface/admin.py
msgid "Language chooser"
msgstr "Вид выбора языка"
#: admin_interface/admin.py
msgid "Logo"
msgstr "Логотип"
#: admin_interface/admin.py
msgid "Favicon"
msgstr "Иконка адресной строки"
#: admin_interface/admin.py
msgid "Title"
msgstr "Заголовок"
#: admin_interface/admin.py
msgid "Header"
msgstr "Шапка"
#: admin_interface/admin.py
msgid "Breadcrumbs / Module headers"
msgstr "Шапки модулей"
#: admin_interface/admin.py
msgid "Generic Links"
msgstr "Общие ссылки"
#: admin_interface/admin.py
msgid "Save Buttons"
msgstr "Кнопки сохранения"
#: admin_interface/admin.py
msgid "Delete Buttons"
msgstr "Кнопки удаления"
#: admin_interface/admin.py
msgid "Navigation Bar"
msgstr "Строка навигации"
#: admin_interface/admin.py
msgid "Related Modal"
msgstr "Модаль для связанных объектов"
#: admin_interface/admin.py
msgid "Form Controls"
msgstr "Управление формами"
#: admin_interface/admin.py
msgid "List Filter"
msgstr "Вид списка фильтров"
#: admin_interface/admin.py
msgid "Change Form"
msgstr "Вид формы изменения"
#: admin_interface/admin.py
msgid "Inlines"
msgstr "Вид вставок"
#: admin_interface/admin.py
msgid "Recent Actions"
msgstr "Недавние действия"
#: admin_interface/apps.py
msgid "Admin Interface"
msgstr "Интерфейс администрирования"
#: admin_interface/models.py
msgid "name"
msgstr "название"
#: admin_interface/models.py
msgid "active"
msgstr "активный"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html
msgid "Django administration"
msgstr "Администрирование Django"
#: admin_interface/models.py
msgid "title"
msgstr "заголовок"
#: admin_interface/models.py
msgid "color"
msgstr "цвет"
#: admin_interface/models.py
msgid "visible"
msgstr "видимый"
#: admin_interface/models.py
msgid "Leave blank to use the default Django logo"
msgstr "Оставьте пустым, чтобы по умолчанию использовать логотип Django"
#: admin_interface/models.py
msgid "logo"
msgstr "логотип"
#: admin_interface/models.py
msgid "max width"
msgstr "максимальная ширина"
#: admin_interface/models.py
msgid "max height"
msgstr "максимальная высота"
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr ""
#: admin_interface/models.py
msgid "favicon"
msgstr "иконка в адресной строке"
#: admin_interface/models.py
msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)"
msgstr ""
"(красный: #E74C3C, оранжевый: #E67E22, желтый: #F1C40F, зеленый: #2ECC71, "
"синий: #3498DB"
#: admin_interface/models.py
msgid "visible in header (marker and name)"
msgstr "видимый в шапке (метка и название)"
#: admin_interface/models.py
msgid "visible in favicon (marker)"
msgstr "видимый в иконке адресной строки (метка)"
#: admin_interface/models.py
msgid "Default Select"
msgstr "Выбор по умолчанию"
#: admin_interface/models.py
msgid "Minimal Select"
msgstr "Минимальный выбор"
#: admin_interface/models.py
msgid "control"
msgstr "контроль"
#: admin_interface/models.py
msgid "code"
msgstr "код"
#: admin_interface/models.py
msgid "display"
msgstr "отображение"
#: admin_interface/models.py
msgid "background color"
msgstr "цвет заднего фона"
#: admin_interface/models.py
msgid "text color"
msgstr "цвет текста"
#: admin_interface/models.py
msgid "link color"
msgstr "цвет ссылки"
#: admin_interface/models.py
msgid "link hover color"
msgstr "цвет ссылки при наведении"
#: admin_interface/models.py
msgid "background selected color"
msgstr "цвет заднего фона выбранного объекта"
#: admin_interface/models.py
msgid "link selected color"
msgstr "цвет ссылки выбранного объекта"
#: admin_interface/models.py
msgid "rounded corners"
msgstr "закругленные края"
#: admin_interface/models.py
msgid "link active color"
msgstr "цвет активной ссылки"
#: admin_interface/models.py
msgid "background hover color"
msgstr "цвет заднего фона при наведении"
#: admin_interface/models.py
msgid "background opacity"
msgstr "прозрачность заднего фона"
#: admin_interface/models.py
msgid "close button visible"
msgstr "видимость кнопки закрытия"
#: admin_interface/models.py
msgid "highlight active"
msgstr "подсвечивать активное"
#: admin_interface/models.py
msgid "use dropdown"
msgstr "использовать выпадающий список"
#: admin_interface/models.py
msgid "sticky position"
msgstr "устойчивое положение"
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr "быстро удалять ссылки для активных фильтров сверху боковой панели"
#: admin_interface/models.py
msgid "foldable apps"
msgstr "складные приложения"
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr "набор полей в виде вкладок"
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr "вставки как вкладки"
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr "разборные уложенные вставки"
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr "сворачивающиеся уложенные вкладки свернуты"
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr "сворачивающиеся табличные вставки"
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr "сворачивающиеся табличные вставки свернуты"
#: admin_interface/models.py
msgid "sticky submit"
msgstr "устойчивая отправка"
#: admin_interface/models.py
msgid "sticky pagination"
msgstr "устойчивая разбивка"
#: admin_interface/models.py
msgid "Theme"
msgstr "Тема"
#: admin_interface/models.py
msgid "Themes"
msgstr "Темы"
#: admin_interface/templates/admin/change_list.html
msgid "Filter"
msgstr "Фильтр"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr "Очистить все фильтры"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr "Изменить"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr "Посмотреть"
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr "Посмотреть на сайте"
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr "Удалить?"
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, fuzzy, python-format
#| msgid " By %(filter_title)s "
msgid " By %(filter_title)s "
msgstr " По %(filter_title)ы "
#: admin_interface/templates/admin/popup_response.html
msgid "Popup closing..."
msgstr "Закрытие всплывающего окна..."

View File

@ -8,319 +8,201 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django-admin-interface\n" "Project-Id-Version: django-admin-interface\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-10 18:20-0500\n" "POT-Creation-Date: 2020-01-24 06:07+0300\n"
"PO-Revision-Date: 2020-01-29 04:53+0300\n" "PO-Revision-Date: 2020-01-29 04:53+0300\n"
"Last-Translator: Ishak Okutan <ishak.oktn@gmail.com>\n" "Last-Translator: Ishak Okutan <ishak.oktn@gmail.com>\n"
"Language-Team: \n" "Language-Team: \n"
"Language: tr\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 2.2.4\n" "X-Generator: Poedit 2.2.4\n"
#: admin_interface/admin.py #: admin_interface/admin.py:21
msgid "Environment" msgid "Environment"
msgstr "Ortam" msgstr "Ortam"
#: admin_interface/admin.py #: admin_interface/admin.py:30
msgid "Language chooser" msgid "Language chooser"
msgstr "Dil seçimi" msgstr "Dil seçimi"
#: admin_interface/admin.py #: admin_interface/admin.py:37
msgid "Logo" msgid "Logo"
msgstr "Logo" msgstr "Logo"
#: admin_interface/admin.py #: admin_interface/admin.py:45
msgid "Favicon" msgid "Favicon"
msgstr "Favicon" msgstr "Favicon"
#: admin_interface/admin.py #: admin_interface/admin.py:49
msgid "Title" msgid "Title"
msgstr "Başlık" msgstr "Başlık"
#: admin_interface/admin.py #: admin_interface/admin.py:57
msgid "Header" msgid "Header"
msgstr "Üst Kısım" msgstr "Üst Kısım"
#: admin_interface/admin.py #: admin_interface/admin.py:66
msgid "Breadcrumbs / Module headers" msgid "Breadcrumbs / Module headers"
msgstr "Link alanı / Modül başlıkları" msgstr "Link alanı / Modül başlıkları"
#: admin_interface/admin.py #: admin_interface/admin.py:76
msgid "Generic Links" msgid "Generic Links"
msgstr "Genel Bağlantılar" msgstr "Genel Bağlantılar"
#: admin_interface/admin.py #: admin_interface/admin.py:83
msgid "Save Buttons" msgid "Save Buttons"
msgstr "Kaydet Butonları" msgstr "Kaydet Butonları"
#: admin_interface/admin.py #: admin_interface/admin.py:91
msgid "Delete Buttons" msgid "Delete Buttons"
msgstr "Kaldır Butonları" msgstr "Kaldır Butonları"
#: admin_interface/admin.py #: admin_interface/admin.py:99
msgid "Navigation Bar"
msgstr ""
#: admin_interface/admin.py
msgid "Related Modal" msgid "Related Modal"
msgstr "İlgili Modal" msgstr "İlgili Modal"
#: admin_interface/admin.py #: admin_interface/admin.py:109
msgid "Form Controls"
msgstr ""
#: admin_interface/admin.py
msgid "List Filter" msgid "List Filter"
msgstr "Liste Filtresi" msgstr "Liste Filtresi"
#: admin_interface/admin.py #: admin_interface/admin.py:113
msgid "Change Form"
msgstr ""
#: admin_interface/admin.py
msgid "Inlines"
msgstr ""
#: admin_interface/admin.py
msgid "Recent Actions" msgid "Recent Actions"
msgstr "Son İşlemler" msgstr "Son İşlemler"
#: admin_interface/apps.py #: admin_interface/apps.py:11
msgid "Admin Interface" msgid "Admin Interface"
msgstr "Yönetici Arayüzü" msgstr "Yönetici Arayüzü"
#: admin_interface/models.py #: admin_interface/models.py:72 admin_interface/models.py:116
#: admin_interface/models.py:135
msgid "name" msgid "name"
msgstr "adı" msgstr "adı"
#: admin_interface/models.py #: admin_interface/models.py:75 admin_interface/models.py:132
#: admin_interface/models.py:253
msgid "active" msgid "active"
msgstr "aktif" msgstr "aktif"
#: admin_interface/models.py admin_interface/templates/admin/base_site.html #: admin_interface/models.py:79
#: admin_interface/templates/admin/base_site.html:6
#: admin_interface/templates/admin/base_site.html:60
msgid "Django administration" msgid "Django administration"
msgstr "Django yönetimi" msgstr "Django yönetimi"
#: admin_interface/models.py #: admin_interface/models.py:81
msgid "title" msgid "title"
msgstr "başlık" msgstr "başlık"
#: admin_interface/models.py #: admin_interface/models.py:87 admin_interface/models.py:102
#: admin_interface/models.py:122
msgid "color" msgid "color"
msgstr "renk" msgstr "renk"
#: admin_interface/models.py #: admin_interface/models.py:90 admin_interface/models.py:105
#: admin_interface/models.py:289
msgid "visible" msgid "visible"
msgstr "göster" msgstr "göster"
#: admin_interface/models.py #: admin_interface/models.py:95
msgid "Leave blank to use the default Django logo" msgid "Leave blank to use the default Django logo"
msgstr "Varsayılan Django logosunu kullanmak için boş bırakın" msgstr "Varsayılan Django logosunu kullanmak için boş bırakın"
#: admin_interface/models.py #: admin_interface/models.py:96
msgid "logo" msgid "logo"
msgstr "logo" msgstr "logo"
#: admin_interface/models.py #: admin_interface/models.py:110
msgid "max width"
msgstr ""
#: admin_interface/models.py
msgid "max height"
msgstr ""
#: admin_interface/models.py
msgid "(.ico|.png|.gif - 16x16|32x32 px)" msgid "(.ico|.png|.gif - 16x16|32x32 px)"
msgstr "" msgstr ""
"(favicon simgesi, png veya (GIF 16x16) veya (32x32) piksel boyutlarında " "(favicon simgesi, png veya (GIF 16x16) veya (32x32) piksel "
"olmalıdır)" "boyutlarında olmalıdır)"
#: admin_interface/models.py #: admin_interface/models.py:111
msgid "favicon" msgid "favicon"
msgstr "favicon" msgstr "favicon"
#: admin_interface/models.py #: admin_interface/models.py:120
msgid "" msgid ""
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: " "(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: "
"#3498DB)" "#3498DB)"
msgstr "" msgstr ""
"(kırmızı: # E74C3C, turuncu: # E67E22, sarı: # F1C40F, yeşil: # 2ECC71, " "(kırmızı: # E74C3C, turuncu: # E67E22, sarı: # F1C40F, yeşil: # "
"mavi: # 3498DB)" "2ECC71, mavi: # 3498DB)"
#: admin_interface/models.py #: admin_interface/models.py:125
msgid "visible in header (marker and name)" msgid "visible in header (marker and name)"
msgstr "üst kısım da görünsün (yuvarlak işaret ve ad)" msgstr "üst kısım da görünsün (yuvarlak işaret ve ad)"
#: admin_interface/models.py #: admin_interface/models.py:128
msgid "visible in favicon (marker)" msgid "visible in favicon (marker)"
msgstr "faviconda görünsün (yuvarlak işaret)" msgstr "faviconda görünsün (yuvarlak işaret)"
#: admin_interface/models.py #: admin_interface/models.py:134
msgid "Default Select"
msgstr ""
#: admin_interface/models.py
msgid "Minimal Select"
msgstr ""
#: admin_interface/models.py
msgid "control"
msgstr ""
#: admin_interface/models.py
msgid "code" msgid "code"
msgstr "kod" msgstr "kod"
#: admin_interface/models.py #: admin_interface/models.py:141
msgid "display" msgid "display"
msgstr "görüntüle" msgstr "görüntüle"
#: admin_interface/models.py #: admin_interface/models.py:148 admin_interface/models.py:173
#: admin_interface/models.py:214 admin_interface/models.py:233
#: admin_interface/models.py:259
msgid "background color" msgid "background color"
msgstr "arka plan rengi" msgstr "arka plan rengi"
#: admin_interface/models.py #: admin_interface/models.py:154 admin_interface/models.py:179
#: admin_interface/models.py:226 admin_interface/models.py:245
#: admin_interface/models.py:249
msgid "text color" msgid "text color"
msgstr "metin rengi" msgstr "metin rengi"
#: admin_interface/models.py #: admin_interface/models.py:160 admin_interface/models.py:185
#: admin_interface/models.py:201
msgid "link color" msgid "link color"
msgstr "bağlantı rengi" msgstr "bağlantı rengi"
#: admin_interface/models.py #: admin_interface/models.py:166 admin_interface/models.py:191
#: admin_interface/models.py:207
msgid "link hover color" msgid "link hover color"
msgstr "bağlantı üzerine gelindiğindeki rengi" msgstr "bağlantı üzerine gelindiğindeki rengi"
#: admin_interface/models.py #: admin_interface/models.py:194 admin_interface/models.py:279
#, fuzzy
#| msgid "background color"
msgid "background selected color"
msgstr "arka plan rengi"
#: admin_interface/models.py
#, fuzzy
#| msgid "link color"
msgid "link selected color"
msgstr "bağlantı rengi"
#: admin_interface/models.py
msgid "rounded corners" msgid "rounded corners"
msgstr "köşeleri ovalleştir" msgstr "köşeleri ovalleştir"
#: admin_interface/models.py #: admin_interface/models.py:220 admin_interface/models.py:239
msgid "link active color"
msgstr "bağlantı aktif gelindiğindeki rengi"
#: admin_interface/models.py
msgid "background hover color" msgid "background hover color"
msgstr "arka planın üzerine gelindiğindeki renk" msgstr "arka planın üzerine gelindiğindeki renk"
#: admin_interface/models.py #: admin_interface/models.py:276
msgid "background opacity" msgid "background opacity"
msgstr "arka plan şeffaflığı" msgstr "arka plan şeffaflığı"
#: admin_interface/models.py #: admin_interface/models.py:282
msgid "close button visible" msgid "close button visible"
msgstr "kapat düğmesi görünsün" msgstr "kapat düğmesi görünsün"
#: admin_interface/models.py #: admin_interface/models.py:286
msgid "highlight active"
msgstr ""
#: admin_interface/models.py
msgid "use dropdown" msgid "use dropdown"
msgstr "açılır listeyi kullan" msgstr "açılır listeyi kullan"
#: admin_interface/models.py #: admin_interface/models.py:298
msgid "sticky position"
msgstr ""
#: admin_interface/models.py
msgid "quick remove links for active filters at top of sidebar"
msgstr ""
#: admin_interface/models.py
msgid "foldable apps"
msgstr ""
#: admin_interface/models.py
msgid "fieldsets as tabs"
msgstr ""
#: admin_interface/models.py
msgid "inlines as tabs"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible stacked inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines"
msgstr ""
#: admin_interface/models.py
msgid "collapsible tabular inlines collapsed"
msgstr ""
#: admin_interface/models.py
msgid "sticky submit"
msgstr ""
#: admin_interface/models.py
msgid "sticky pagination"
msgstr ""
#: admin_interface/models.py
msgid "Theme" msgid "Theme"
msgstr "Tema" msgstr "Tema"
#: admin_interface/models.py #: admin_interface/models.py:299
msgid "Themes" msgid "Themes"
msgstr "Temalar" msgstr "Temalar"
#: admin_interface/templates/admin/change_list.html #: admin_interface/templates/admin/filter.html:13
#, fuzzy #: admin_interface/templates/admin_interface/dropdown_filter.html:4
#| msgid "List Filter"
msgid "Filter"
msgstr "Liste Filtresi"
#. Translators: don't translate this, the django catalog already contains it
#: admin_interface/templates/admin/change_list.html
msgid "Clear all filters"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Change"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_stacked.html
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "View on site"
msgstr ""
#: admin_interface/templates/admin/edit_inline/headerless_tabular.html
msgid "Delete?"
msgstr ""
#: admin_interface/templates/admin/filter.html
#: admin_interface/templates/admin_interface/dropdown_filter.html
#, python-format #, python-format
msgid " By %(filter_title)s " msgid " By %(filter_title)s "
msgstr " %(filter_title)s tarafından " msgstr " %(filter_title)s tarafından "
#: admin_interface/templates/admin/popup_response.html #: admin_interface/templates/admin/popup_response.html:3
msgid "Popup closing..." msgid "Popup closing..."
msgstr "Popup kapanıyor..." msgstr "Popup kapanıyor..."

View File

@ -1,10 +0,0 @@
__author__ = "Fabio Caccamo"
__copyright__ = "Copyright (c) 2016-present Fabio Caccamo"
__description__ = (
"django's default admin interface with superpowers - "
"customizable themes, popup windows replaced by modals and many other features."
)
__email__ = "fabio.caccamo@gmail.com"
__license__ = "MIT"
__title__ = "django-admin-interface"
__version__ = "0.28.6"

View File

@ -1,258 +1,184 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import colorfield.fields import colorfield.fields
from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = []
dependencies = [
]
operations = [ operations = [
migrations.CreateModel( migrations.CreateModel(
name="Theme", name='Theme',
fields=[ fields=[
( ('id',
"id",
models.AutoField( models.AutoField(
verbose_name="ID", verbose_name='ID',
serialize=False, serialize=False,
auto_created=True, auto_created=True,
primary_key=True, primary_key=True)),
), ('name',
),
(
"name",
models.CharField( models.CharField(
default="Django", default=b'Django',
max_length=50)),
('active',
models.BooleanField(
default=True)),
('title',
models.CharField(
default=b'Django administration',
max_length=50, max_length=50,
), blank=True)),
), ('title_visible',
(
"active",
models.BooleanField( models.BooleanField(
default=True, default=True,
), verbose_name=b'visible')),
), ('logo',
(
"title",
models.CharField(
default="Django administration",
max_length=50,
blank=True,
),
),
(
"title_visible",
models.BooleanField(
default=True,
verbose_name="visible",
),
),
(
"logo",
models.FileField( models.FileField(
upload_to="admin-interface/logo/", upload_to=b'admin-interface/logo/',
blank=True, blank=True)),
), ('logo_visible',
),
(
"logo_visible",
models.BooleanField( models.BooleanField(
default=True, default=True,
verbose_name="visible", verbose_name=b'visible')),
), ('css_header_background_color',
),
(
"css_header_background_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#0C4B33", default=b'#0C4B33',
help_text="#0C4B33", help_text=b'#0C4B33',
max_length=10, max_length=10,
verbose_name="background color", verbose_name=b'background color',
blank=True, blank=True)),
), ('css_header_title_color',
),
(
"css_header_title_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#F5DD5D", default=b'#F5DD5D',
help_text="#F5DD5D", help_text=b'#F5DD5D',
max_length=10, max_length=10,
verbose_name="title color", verbose_name=b'title color',
blank=True, blank=True)),
), ('css_header_text_color',
),
(
"css_header_text_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#44B78B", default=b'#44B78B',
help_text="#44B78B", help_text=b'#44B78B',
max_length=10, max_length=10,
verbose_name="text color", verbose_name=b'text color',
blank=True, blank=True)),
), ('css_header_link_color',
),
(
"css_header_link_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#FFFFFF", default=b'#FFFFFF',
help_text="#FFFFFF", help_text=b'#FFFFFF',
max_length=10, max_length=10,
verbose_name="link color", verbose_name=b'link color',
blank=True, blank=True)),
), ('css_header_link_hover_color',
),
(
"css_header_link_hover_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#C9F0DD", default=b'#C9F0DD',
help_text="#C9F0DD", help_text=b'#C9F0DD',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name=b'link hover color',
blank=True, blank=True)),
), ('css_module_background_color',
),
(
"css_module_background_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#44B78B", default=b'#44B78B',
help_text="#44B78B", help_text=b'#44B78B',
max_length=10, max_length=10,
verbose_name="background color", verbose_name=b'background color',
blank=True, blank=True)),
), ('css_module_text_color',
),
(
"css_module_text_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#FFFFFF", default=b'#FFFFFF',
help_text="#FFFFFF", help_text=b'#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name=b'text color',
blank=True, blank=True)),
), ('css_module_link_color',
),
(
"css_module_link_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#FFFFFF", default=b'#FFFFFF',
help_text="#FFFFFF", help_text=b'#FFFFFF',
max_length=10, max_length=10,
verbose_name="link color", verbose_name=b'link color',
blank=True, blank=True)),
), ('css_module_link_hover_color',
),
(
"css_module_link_hover_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#C9F0DD", default=b'#C9F0DD',
help_text="#C9F0DD", help_text=b'#C9F0DD',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name=b'link hover color',
blank=True, blank=True)),
), ('css_module_rounded_corners',
),
(
"css_module_rounded_corners",
models.BooleanField( models.BooleanField(
default=True, default=True,
verbose_name="rounded corners", verbose_name=b'rounded corners')),
), ('css_generic_link_color',
),
(
"css_generic_link_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#0C3C26", default=b'#0C3C26',
help_text="#0C3C26", help_text=b'#0C3C26',
max_length=10, max_length=10,
verbose_name="link color", verbose_name=b'link color',
blank=True, blank=True)),
), ('css_generic_link_hover_color',
),
(
"css_generic_link_hover_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#156641", default=b'#156641',
help_text="#156641", help_text=b'#156641',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name=b'link hover color',
blank=True, blank=True)),
), ('css_save_button_background_color',
),
(
"css_save_button_background_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#0C4B33", default=b'#0C4B33',
help_text="#0C4B33", help_text=b'#0C4B33',
max_length=10, max_length=10,
verbose_name="background color", verbose_name=b'background color',
blank=True, blank=True)),
), ('css_save_button_background_hover_color',
),
(
"css_save_button_background_hover_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#0C3C26", default=b'#0C3C26',
help_text="#0C3C26", help_text=b'#0C3C26',
max_length=10, max_length=10,
verbose_name="background hover color", verbose_name=b'background hover color',
blank=True, blank=True)),
), ('css_save_button_text_color',
),
(
"css_save_button_text_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#FFFFFF", default=b'#FFFFFF',
help_text="#FFFFFF", help_text=b'#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name=b'text color',
blank=True, blank=True)),
), ('css_delete_button_background_color',
),
(
"css_delete_button_background_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#BA2121", default=b'#BA2121',
help_text="#BA2121", help_text=b'#BA2121',
max_length=10, max_length=10,
verbose_name="background color", verbose_name=b'background color',
blank=True, blank=True)),
), ('css_delete_button_background_hover_color',
),
(
"css_delete_button_background_hover_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#A41515", default=b'#A41515',
help_text="#A41515", help_text=b'#A41515',
max_length=10, max_length=10,
verbose_name="background hover color", verbose_name=b'background hover color',
blank=True, blank=True)),
), ('css_delete_button_text_color',
),
(
"css_delete_button_text_color",
colorfield.fields.ColorField( colorfield.fields.ColorField(
default="#FFFFFF", default=b'#FFFFFF',
help_text="#FFFFFF", help_text=b'#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name=b'text color',
blank=True, blank=True)),
), ('css',
),
(
"css",
models.TextField( models.TextField(
blank=True, blank=True)),
), ('list_filter_dropdown',
),
(
"list_filter_dropdown",
models.BooleanField( models.BooleanField(
default=False, default=False)),
),
),
], ],
options={ options={
"verbose_name": "Theme", 'verbose_name': 'Theme',
"verbose_name_plural": "Themes", 'verbose_name_plural': 'Themes',
}, },
), ),
] ]

View File

@ -1,66 +1,60 @@
import colorfield.fields # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
import colorfield.fields
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0001_initial"), ('admin_interface', '0001_initial'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="list_filter_dropdown", name='list_filter_dropdown',
field=models.BooleanField( field=models.BooleanField(
default=False, default=False,
verbose_name="use dropdown", verbose_name=b'use dropdown'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="related_modal_active", name='related_modal_active',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="active", verbose_name=b'active'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="related_modal_background_color", name='related_modal_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#000000", default=b'#000000',
help_text="#000000", help_text=b'#000000',
max_length=10, max_length=10,
verbose_name="background color", verbose_name=b'background color'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="related_modal_background_opacity", name='related_modal_background_opacity',
field=models.FloatField( field=models.FloatField(
choices=[ choices=[
(0.1, "10%"), (0.1, b'10%'), (0.2, b'20%'), (0.3, b'30%'),
(0.2, "20%"), (0.4, b'40%'), (0.5, b'50%'), (0.6, b'60%'),
(0.3, "30%"), (0.7, b'70%'), (0.8, b'80%'), (0.9, b'90%')],
(0.4, "40%"),
(0.5, "50%"),
(0.6, "60%"),
(0.7, "70%"),
(0.8, "80%"),
(0.9, "90%"),
],
default=0.2, default=0.2,
help_text="20%", help_text=b'20%',
verbose_name="background opacity", verbose_name=b'background opacity'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="related_modal_rounded_corners", name='related_modal_rounded_corners',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="rounded corners", verbose_name=b'rounded corners'),
),
), ),
] ]

View File

@ -1,31 +1,35 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import colorfield.fields import colorfield.fields
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0002_add_related_modal"), ('admin_interface', '0002_add_related_modal'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="logo_color", name='logo_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="logo color", verbose_name='logo color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="logo", name='logo',
field=models.FileField( field=models.FileField(
blank=True, blank=True,
help_text="(leave blank to use the default Django logo)", help_text='(leave blank to use the default Django logo)',
upload_to="admin-interface/logo/", upload_to='admin-interface/logo/'),
),
), ),
] ]

View File

@ -1,15 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0003_add_logo_color"), ('admin_interface', '0003_add_logo_color'),
] ]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name="theme", model_name='theme',
old_name="css_header_title_color", old_name='css_header_title_color',
new_name="title_color", new_name='title_color',
), ),
] ]

View File

@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0004_rename_title_color"), ('admin_interface', '0004_rename_title_color'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="recent_actions_visible", name='recent_actions_visible',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible", verbose_name='visible'),
),
), ),
] ]

View File

@ -1,294 +1,266 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import colorfield.fields import colorfield.fields
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0005_add_recent_actions_visible"), ('admin_interface', '0005_add_recent_actions_visible'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_delete_button_background_color", name='css_delete_button_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#BA2121", default='#BA2121',
help_text="#BA2121", help_text='#BA2121',
max_length=10, max_length=10,
verbose_name="background color", verbose_name='background color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_delete_button_background_hover_color", name='css_delete_button_background_hover_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#A41515", default='#A41515',
help_text="#A41515", help_text='#A41515',
max_length=10, max_length=10,
verbose_name="background hover color", verbose_name='background hover color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_delete_button_text_color", name='css_delete_button_text_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name='text color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_generic_link_color", name='css_generic_link_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#0C3C26", default='#0C3C26',
help_text="#0C3C26", help_text='#0C3C26',
max_length=10, max_length=10,
verbose_name="link color", verbose_name='link color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_generic_link_hover_color", name='css_generic_link_hover_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#156641", default='#156641',
help_text="#156641", help_text='#156641',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name='link hover color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_header_background_color", name='css_header_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#0C4B33", default='#0C4B33',
help_text="#0C4B33", help_text='#0C4B33',
max_length=10, max_length=10,
verbose_name="background color", verbose_name='background color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_header_link_color", name='css_header_link_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="link color", verbose_name='link color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_header_link_hover_color", name='css_header_link_hover_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#C9F0DD", default='#C9F0DD',
help_text="#C9F0DD", help_text='#C9F0DD',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name='link hover color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_header_text_color", name='css_header_text_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#44B78B", default='#44B78B',
help_text="#44B78B", help_text='#44B78B',
max_length=10, max_length=10,
verbose_name="text color", verbose_name='text color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_module_background_color", name='css_module_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#44B78B", default='#44B78B',
help_text="#44B78B", help_text='#44B78B',
max_length=10, max_length=10,
verbose_name="background color", verbose_name='background color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_module_link_color", name='css_module_link_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="link color", verbose_name='link color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_module_link_hover_color", name='css_module_link_hover_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#C9F0DD", default='#C9F0DD',
help_text="#C9F0DD", help_text='#C9F0DD',
max_length=10, max_length=10,
verbose_name="link hover color", verbose_name='link hover color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_module_rounded_corners", name='css_module_rounded_corners',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="rounded corners", verbose_name='rounded corners'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_module_text_color", name='css_module_text_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name='text color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_save_button_background_color", name='css_save_button_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#0C4B33", default='#0C4B33',
help_text="#0C4B33", help_text='#0C4B33',
max_length=10, max_length=10,
verbose_name="background color", verbose_name='background color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_save_button_background_hover_color", name='css_save_button_background_hover_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#0C3C26", default='#0C3C26',
help_text="#0C3C26", help_text='#0C3C26',
max_length=10, max_length=10,
verbose_name="background hover color", verbose_name='background hover color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css_save_button_text_color", name='css_save_button_text_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="text color", verbose_name='text color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="list_filter_dropdown", name='list_filter_dropdown',
field=models.BooleanField( field=models.BooleanField(
default=False, default=False,
verbose_name="use dropdown", verbose_name='use dropdown'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="logo_visible", name='logo_visible',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible", verbose_name='visible'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="name", name='name',
field=models.CharField( field=models.CharField(
default="Django", default='Django',
max_length=50, max_length=50),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="related_modal_active", name='related_modal_active',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="active", verbose_name='active'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="related_modal_background_color", name='related_modal_background_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#000000", default='#000000',
help_text="#000000", help_text='#000000',
max_length=10, max_length=10,
verbose_name="background color", verbose_name='background color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="related_modal_background_opacity", name='related_modal_background_opacity',
field=models.FloatField( field=models.FloatField(
choices=[ choices=[
(0.1, "10%"), (0.1, '10%'), (0.2, '20%'), (0.3, '30%'),
(0.2, "20%"), (0.4, '40%'), (0.5, '50%'), (0.6, '60%'),
(0.3, "30%"), (0.7, '70%'), (0.8, '80%'), (0.9, '90%')],
(0.4, "40%"),
(0.5, "50%"),
(0.6, "60%"),
(0.7, "70%"),
(0.8, "80%"),
(0.9, "90%"),
],
default=0.2, default=0.2,
help_text="20%", help_text='20%',
verbose_name="background opacity", verbose_name='background opacity'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="related_modal_rounded_corners", name='related_modal_rounded_corners',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="rounded corners", verbose_name='rounded corners'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="title", name='title',
field=models.CharField( field=models.CharField(
blank=True, blank=True,
default="Django administration", default='Django administration',
max_length=50, max_length=50),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="title_color", name='title_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#F5DD5D", default='#F5DD5D',
help_text="#F5DD5D", help_text='#F5DD5D',
max_length=10, max_length=10,
verbose_name="title color", verbose_name='title color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="title_visible", name='title_visible',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible", verbose_name='visible'),
),
), ),
] ]

View File

@ -1,20 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0006_bytes_to_str"), ('admin_interface', '0006_bytes_to_str'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="favicon", name='favicon',
field=models.FileField( field=models.FileField(
blank=True, blank=True,
help_text="(.ico|.png|.gif - 16x16|32x32 px)", help_text='(.ico|.png|.gif - 16x16|32x32 px)',
upload_to="admin-interface/favicon/", upload_to='admin-interface/favicon/',
verbose_name="favicon", verbose_name='favicon'),
),
), ),
] ]

View File

@ -1,35 +1,32 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0007_add_favicon"), ('admin_interface', '0007_add_favicon'),
] ]
operations = [ operations = [
migrations.RemoveField( migrations.RemoveField(
model_name="theme", model_name='theme',
name="related_modal_background_opacity", name='related_modal_background_opacity'
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="related_modal_background_opacity", name='related_modal_background_opacity',
field=models.CharField( field=models.CharField(
choices=[ choices=[
("0.1", "10%"), ('0.1', '10%'), ('0.2', '20%'), ('0.3', '30%'),
("0.2", "20%"), ('0.4', '40%'), ('0.5', '50%'), ('0.6', '60%'),
("0.3", "30%"), ('0.7', '70%'), ('0.8', '80%'), ('0.9', '90%')],
("0.4", "40%"), default='0.3',
("0.5", "50%"), help_text='20%',
("0.6", "60%"),
("0.7", "70%"),
("0.8", "80%"),
("0.9", "90%"),
],
default="0.3",
help_text="20%",
max_length=5, max_length=5,
verbose_name="background opacity", verbose_name='background opacity'),
),
), ),
] ]

View File

@ -1,33 +1,35 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0008_change_related_modal_background_opacity_type"), ('admin_interface', '0008_change_related_modal_background_opacity_type'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="env", name='env',
field=models.CharField( field=models.CharField(
choices=[ choices=[
("development", "Development"), ('development', 'Development'),
("testing", "Testing"), ('testing', 'Testing'),
("staging", "Staging"), ('staging', 'Staging'),
("production", "Production"), ('production', 'Production')],
], default='development',
default="development",
max_length=50, max_length=50,
verbose_name="enviroment", verbose_name='enviroment'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="env_visible", name='env_visible',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible", verbose_name='visible'),
),
), ),
] ]

View File

@ -1,70 +1,69 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0009_add_enviroment"), ('admin_interface', '0009_add_enviroment'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="active", name='active',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="active", verbose_name='active'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="css", name='css',
field=models.TextField( field=models.TextField(
blank=True, blank=True,
verbose_name="text color", verbose_name='text color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="env", name='env',
field=models.CharField( field=models.CharField(
choices=[ choices=[
("development", "Development"), ('development', 'Development'),
("testing", "Testing"), ('testing', 'Testing'),
("staging", "Staging"), ('staging', 'Staging'),
("production", "Production"), ('production', 'Production')
], ],
default="development", default='development',
max_length=50, max_length=50,
verbose_name="environment", verbose_name='environment'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="logo", name='logo',
field=models.FileField( field=models.FileField(
blank=True, blank=True,
help_text="Leave blank to use the default Django logo", help_text='Leave blank to use the default Django logo',
upload_to="admin-interface/logo/", upload_to='admin-interface/logo/',
verbose_name="logo", verbose_name='logo'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="name", name='name',
field=models.CharField( field=models.CharField(
default="Django", default='Django',
max_length=50, max_length=50,
verbose_name="name", verbose_name='name'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="title", name='title',
field=models.CharField( field=models.CharField(
blank=True, blank=True,
default="Django administration", default='Django administration',
max_length=50, max_length=50,
verbose_name="title", verbose_name='title'),
),
), ),
] ]

View File

@ -1,60 +1,59 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import colorfield.fields import colorfield.fields
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0010_add_localization"), ('admin_interface', '0010_add_localization'),
] ]
operations = [ operations = [
migrations.RenameField( migrations.RenameField(
model_name="theme", model_name='theme',
old_name="env", old_name='env',
new_name="env_name", new_name='env_name',
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="env_name", name='env_name',
field=models.CharField( field=models.CharField(
blank=True, blank=True,
max_length=50, max_length=50,
verbose_name="name", verbose_name='name'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="env_color", name='env_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#E74C3C", default='#E74C3C',
help_text=( help_text='(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: #3498DB)',
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, "
"green: #2ECC71, blue: #3498DB)"
),
max_length=10, max_length=10,
verbose_name="color", verbose_name='color'),
),
), ),
migrations.RenameField( migrations.RenameField(
model_name="theme", model_name='theme',
old_name="env_visible", old_name='env_visible',
new_name="env_visible_in_header", new_name='env_visible_in_header',
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="env_visible_in_header", name='env_visible_in_header',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible in header (marker and name)", verbose_name='visible in header (marker and name)'),
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="env_visible_in_favicon", name='env_visible_in_favicon',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="visible in favicon (marker)", verbose_name='visible in favicon (marker)'),
),
), ),
] ]

View File

@ -1,33 +1,37 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import colorfield.fields import colorfield.fields
from django.db import migrations from django.db import migrations
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0011_add_environment_options"), ('admin_interface', '0011_add_environment_options'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="logo_color", name='logo_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="color", verbose_name='color'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="title_color", name='title_color',
field=colorfield.fields.ColorField( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#F5DD5D", default='#F5DD5D',
help_text="#F5DD5D", help_text='#F5DD5D',
max_length=10, max_length=10,
verbose_name="color", verbose_name='color'),
),
), ),
] ]

View File

@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0012_update_verbose_names"), ('admin_interface', '0012_update_verbose_names'),
] ]
operations = [ operations = [
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( field=models.BooleanField(
default=True, default=True,
verbose_name="close button visible", verbose_name='close button visible'),
),
), ),
] ]

View File

@ -1,20 +1,24 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0013_add_related_modal_close_button"), ('admin_interface', '0013_add_related_modal_close_button'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="name", name='name',
field=models.CharField( field=models.CharField(
default="Django", default='Django',
max_length=50, max_length=50,
unique=True, unique=True,
verbose_name="name", verbose_name='name'),
),
), ),
] ]

View File

@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0014_name_unique"), ('admin_interface', '0014_name_unique'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="language_chooser_active", name='language_chooser_active',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="active", verbose_name='active'),
),
), ),
] ]

View File

@ -1,23 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0015_add_language_chooser_active"), ('admin_interface', '0015_add_language_chooser_active'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="language_chooser_display", name='language_chooser_display',
field=models.CharField( field=models.CharField(
choices=[ choices=[
("code", "code"), ('code', 'code'),
("name", "name"), ('name', 'name')
], ],
default="code", default='code',
max_length=10, max_length=10,
verbose_name="display", verbose_name='display'),
),
), ),
] ]

View File

@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0016_add_language_chooser_display"), ('admin_interface', '0016_add_language_chooser_display'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="list_filter_dropdown", name='list_filter_dropdown',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="use dropdown", verbose_name='use dropdown'),
),
), ),
] ]

View File

@ -1,18 +1,22 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0017_change_list_filter_dropdown"), ('admin_interface', '0017_change_list_filter_dropdown'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="list_filter_sticky", name='list_filter_sticky',
field=models.BooleanField( field=models.BooleanField(
default=True, default=True,
verbose_name="sticky position", verbose_name='sticky position'),
),
), ),
] ]

View File

@ -1,26 +1,29 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0018_theme_list_filter_sticky"), ('admin_interface', '0018_theme_list_filter_sticky'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="form_pagination_sticky", name='form_pagination_sticky',
field=models.BooleanField( field=models.BooleanField(
default=False, default=False,
verbose_name="sticky pagination", 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( field=models.BooleanField(
default=False, default=False,
verbose_name="sticky submit", verbose_name='sticky submit'),
),
), ),
] ]

View File

@ -1,43 +1,46 @@
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")
db_alias = schema_editor.connection.alias db_alias = schema_editor.connection.alias
Theme.objects.using(db_alias).update( Theme.objects.using(db_alias).update(
css_module_link_selected_color=F("css_module_link_color") css_module_link_selected_color=F('css_module_link_color'))
)
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0019_add_form_sticky"), ('admin_interface', '0019_add_form_sticky'),
] ]
operations = [ operations = [
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( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFCC", default='#FFFFCC',
help_text="#FFFFCC", help_text='#FFFFCC',
max_length=10, max_length=10,
verbose_name="background selected color", 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( field=colorfield.fields.ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name="link selected color", verbose_name='link selected color'),
),
), ),
migrations.RunPython(default_link_selected), migrations.RunPython(default_link_selected),
] ]

View File

@ -1,41 +1,45 @@
from django.core.validators import FileExtensionValidator # -*- coding: utf-8 -*-
from __future__ import unicode_literals
from admin_interface.compat import FileExtensionValidator
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0020_module_selected_colors"), ('admin_interface', '0020_module_selected_colors'),
] ]
operations = [ operations = [
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="favicon", name='favicon',
field=models.FileField( field=models.FileField(
blank=True, blank=True,
help_text="(.ico|.png|.gif - 16x16|32x32 px)", help_text='(.ico|.png|.gif - 16x16|32x32 px)',
upload_to="admin-interface/favicon/", upload_to='admin-interface/favicon/',
validators=[ validators=[
FileExtensionValidator( FileExtensionValidator(allowed_extensions=[
allowed_extensions=["gif", "ico", "jpg", "jpeg", "png", "svg"] 'gif', 'ico', 'jpg', 'jpeg', 'png', 'svg'
) ])
], ],
verbose_name="favicon", verbose_name='favicon'),
),
), ),
migrations.AlterField( migrations.AlterField(
model_name="theme", model_name='theme',
name="logo", name='logo',
field=models.FileField( field=models.FileField(
blank=True, blank=True,
help_text="Leave blank to use the default Django logo", help_text='Leave blank to use the default Django logo',
upload_to="admin-interface/logo/", upload_to='admin-interface/logo/',
validators=[ validators=[
FileExtensionValidator( FileExtensionValidator(allowed_extensions=[
allowed_extensions=["gif", "jpg", "jpeg", "png", "svg"] 'gif', 'jpg', 'jpeg', 'png', 'svg'
) ])
], ],
verbose_name="logo", verbose_name='logo'),
),
), ),
] ]

View File

@ -1,28 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0021_file_extension_validator"), ('admin_interface', '0021_file_extension_validator'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="logo_max_height", name='logo_max_height',
field=models.PositiveSmallIntegerField( field=models.PositiveSmallIntegerField(blank=True, default=100, verbose_name='max height'),
blank=True,
default=100,
verbose_name="max height",
),
), ),
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="logo_max_width", name='logo_max_width',
field=models.PositiveSmallIntegerField( field=models.PositiveSmallIntegerField(blank=True, default=400, verbose_name='max width'),
blank=True,
default=400,
verbose_name="max width",
),
), ),
] ]

View File

@ -1,18 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
("admin_interface", "0022_add_logo_max_width_and_height"), ('admin_interface', '0022_add_logo_max_width_and_height'),
] ]
operations = [ operations = [
migrations.AddField( migrations.AddField(
model_name="theme", model_name='theme',
name="foldable_apps", name='foldable_apps',
field=models.BooleanField( field=models.BooleanField(default=True, verbose_name='foldable apps'),
default=True,
verbose_name="foldable apps",
),
), ),
] ]

View File

@ -1,14 +0,0 @@
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0023_theme_foldable_apps"),
]
operations = [
migrations.RemoveField(
model_name="theme",
name="css",
),
]

View File

@ -1,23 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0024_remove_theme_css"),
]
operations = [
migrations.AddField(
model_name="theme",
name="language_chooser_control",
field=models.CharField(
choices=[
("default-select", "Default Select"),
("minimal-select", "Minimal Select"),
],
default="default-select",
max_length=20,
verbose_name="control",
),
),
]

View File

@ -1,18 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0025_theme_language_chooser_control"),
]
operations = [
migrations.AddField(
model_name="theme",
name="list_filter_highlight",
field=models.BooleanField(
default=True,
verbose_name="highlight active",
),
),
]

View File

@ -1,18 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0026_theme_list_filter_highlight"),
]
operations = [
migrations.AddField(
model_name="theme",
name="list_filter_removal_links",
field=models.BooleanField(
default=False,
verbose_name="quick remove links for active filters at top of sidebar",
),
),
]

View File

@ -1,26 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0027_theme_list_filter_removal_links"),
]
operations = [
migrations.AddField(
model_name="theme",
name="show_fieldsets_as_tabs",
field=models.BooleanField(
default=False,
verbose_name="fieldsets as tabs",
),
),
migrations.AddField(
model_name="theme",
name="show_inlines_as_tabs",
field=models.BooleanField(
default=False,
verbose_name="inlines as tabs",
),
),
]

View File

@ -1,24 +0,0 @@
import colorfield.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0028_theme_show_fieldsets_as_tabs_and_more"),
]
operations = [
migrations.AddField(
model_name="theme",
name="css_generic_link_active_color",
field=colorfield.fields.ColorField(
blank=True,
default="#29B864",
help_text="#29B864",
image_field=None,
max_length=10,
samples=None,
verbose_name="link active color",
),
),
]

View File

@ -1,42 +0,0 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0029_theme_css_generic_link_active_color"),
]
operations = [
migrations.AddField(
model_name="theme",
name="collapsible_stacked_inlines",
field=models.BooleanField(
default=False,
verbose_name="collapsible stacked inlines",
),
),
migrations.AddField(
model_name="theme",
name="collapsible_stacked_inlines_collapsed",
field=models.BooleanField(
default=True,
verbose_name="collapsible stacked inlines collapsed",
),
),
migrations.AddField(
model_name="theme",
name="collapsible_tabular_inlines",
field=models.BooleanField(
default=False,
verbose_name="collapsible tabular inlines",
),
),
migrations.AddField(
model_name="theme",
name="collapsible_tabular_inlines_collapsed",
field=models.BooleanField(
default=True,
verbose_name="collapsible tabular inlines collapsed",
),
),
]

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0030_theme_collapsible_stacked_inlines_and_more"),
]
operations = [
migrations.AddField(
model_name="theme",
name="demo",
field=models.BooleanField(default=False, verbose_name="demo"),
),
]

View File

@ -1,20 +0,0 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("admin_interface", "0031_add_demo_option"),
]
operations = [
migrations.AddField(
model_name="theme",
name="user",
field=models.ForeignKey('auth.User', on_delete=models.CASCADE, null=True, blank=True, verbose_name="active for user"),
),
]

View File

@ -1,37 +0,0 @@
# Generated by Django 3.2.13 on 2022-04-28 16:03
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('admin_interface', '0032_add_user_option'),
]
operations = [
migrations.RemoveField(
model_name='theme',
name='user',
),
migrations.CreateModel(
name='UserTheme',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('theme', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='admin_interface.theme')),
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, unique=True)),
],
options={
'verbose_name': 'Users theme',
'verbose_name_plural': 'Users themes',
},
),
migrations.AddField(
model_name='theme',
name='users',
field=models.ManyToManyField(through='admin_interface.UserTheme', to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.0.4 on 2022-08-25 14:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0033_usertheme_m2m'),
]
operations = [
migrations.AlterField(
model_name='theme',
name='demo',
field=models.BooleanField(default=False, verbose_name='is demo'),
),
]

View File

@ -1,32 +0,0 @@
# Generated by Django 4.0.3 on 2022-10-25 13:59
from django.conf import settings
import django.db.models.deletion
from django.db import connection, migrations, models, transaction
def forward(apps, schema_editor):
Theme = apps.get_model("admin_interface", "Theme")
if len(Theme.objects.all()) == 1 and Theme.objects.first().name == 'Django':
with transaction.atomic():
cursor = connection.cursor()
cursor.execute("""truncate table "admin_interface_theme" restart identity;""")
def reverse(apps, schema_editor):
pass
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0034_alter_theme_demo'),
]
operations = [
migrations.RunPython(forward, reverse),
migrations.AlterField(
model_name='usertheme',
name='user',
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 4.0.3 on 2023-01-30 14:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('admin_interface', '0035_auto_20221025_1559'),
]
operations = [
migrations.AddField(
model_name='theme',
name='default',
field=models.BooleanField(default=False, verbose_name='default'),
),
]

View File

@ -1,482 +1,347 @@
import inspect # -*- coding: utf-8 -*-
from __future__ import unicode_literals
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
from django.core.validators import FileExtensionValidator
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
from django.dispatch import receiver
from django.utils.encoding import force_str
from django.utils.translation import gettext_lazy as _
from .cache import del_cached_active_theme from six import python_2_unicode_compatible
class UserTheme(models.Model): @python_2_unicode_compatible
class Meta: class Theme(models.Model):
verbose_name = 'Users theme'
verbose_name_plural = 'Users themes'
user = models.OneToOneField( @staticmethod
'auth.User', on_delete=models.CASCADE, null=True) def post_migrate_handler(**kwargs):
theme = models.ForeignKey('Theme', on_delete=models.CASCADE) del_cached_active_theme()
Theme.get_active_theme()
@staticmethod
def post_delete_handler(**kwargs):
del_cached_active_theme()
Theme.get_active_theme()
class ThemeQuerySet(models.QuerySet): @staticmethod
def get_active(self): def post_save_handler(instance, **kwargs):
user_theme_manager = UserTheme.objects del_cached_active_theme()
objs_active_qs = self.filter(active=True) if instance.active:
Theme.objects.exclude(pk=instance.pk).update(active=False)
Theme.get_active_theme()
@staticmethod
def pre_save_handler(instance, **kwargs):
if instance.pk is None:
try:
obj = Theme.objects.get(name=instance.name)
if obj:
instance.pk = obj.pk
except Theme.DoesNotExist:
pass
@staticmethod
def get_active_theme():
objs_manager = Theme.objects
objs_active_qs = objs_manager.filter(active=True)
objs_active_ls = list(objs_active_qs) objs_active_ls = list(objs_active_qs)
objs_active_count = len(objs_active_ls) objs_active_count = len(objs_active_ls)
if objs_active_count == 0: if objs_active_count == 0:
obj = self.all().first() obj = objs_manager.all().first()
if obj: if obj:
obj.set_active() obj.set_active()
# else: else:
# obj = self.create() obj = objs_manager.create()
elif objs_active_count == 1: elif objs_active_count == 1:
obj = objs_active_ls[0] obj = objs_active_ls[0]
elif objs_active_count > 1: elif objs_active_count > 1:
for frame_record in inspect.stack(): obj = objs_active_ls[-1]
if frame_record[3] == 'get_response': obj.set_active()
request = frame_record[0].f_locals['request']
user = request.user
break
else:
request = None
try:
return user_theme_manager.filter(user=user, theme__active=True).first().theme
except:
objs_default_qs = objs_active_qs.filter(default=True)
if len(objs_default_qs) == 0:
obj = objs_active_qs.first()
if obj:
obj.set_default()
else:
obj = objs_default_qs.first()
return obj return obj
class Theme(models.Model):
name = models.CharField( name = models.CharField(
unique=True, unique=True,
max_length=50, max_length=50,
default="Django", default='Django',
verbose_name=_("name"), verbose_name=_('name'))
)
active = models.BooleanField( active = models.BooleanField(
default=True, default=True,
verbose_name=_("active"), verbose_name=_('active'))
)
demo = models.BooleanField(default=False, verbose_name=_("is demo"))
default = models.BooleanField(default=False, verbose_name="default")
users = models.ManyToManyField('auth.User', through=UserTheme)
title = models.CharField( title = models.CharField(
max_length=50, max_length=50,
default=_("Django administration"), default=_('Django administration'),
blank=True, blank=True,
verbose_name=_("title"), verbose_name=_('title'))
)
title_color = ColorField( title_color = ColorField(
blank=True, blank=True,
default="#F5DD5D", default='#F5DD5D',
help_text="#F5DD5D", help_text='#F5DD5D',
max_length=10, max_length=10,
verbose_name=_("color"), verbose_name=_('color'))
)
title_visible = models.BooleanField( title_visible = models.BooleanField(
default=True, default=True,
verbose_name=_("visible"), verbose_name=_('visible'))
)
logo = models.FileField( logo = models.FileField(
upload_to="admin-interface/logo/", upload_to='admin-interface/logo/',
blank=True, blank=True,
validators=[ validators=[FileExtensionValidator(
FileExtensionValidator( allowed_extensions=['gif', 'jpg', 'jpeg', 'png', 'svg'])],
allowed_extensions=["gif", "jpg", "jpeg", "png", "svg"] help_text=_('Leave blank to use the default Django logo'),
) verbose_name=_('logo'))
],
help_text=_("Leave blank to use the default Django logo"),
verbose_name=_("logo"),
)
logo_color = ColorField( logo_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("color"), verbose_name=_('color'))
)
logo_max_width = models.PositiveSmallIntegerField( logo_max_width = models.PositiveSmallIntegerField(
blank=True, blank=True,
default=400, default=400,
verbose_name=_("max width"), verbose_name=_('max width'))
)
logo_max_height = models.PositiveSmallIntegerField( logo_max_height = models.PositiveSmallIntegerField(
blank=True, blank=True,
default=100, default=100,
verbose_name=_("max height"), verbose_name=_('max height'))
)
logo_visible = models.BooleanField( logo_visible = models.BooleanField(
default=True, default=True,
verbose_name=_("visible"), verbose_name=_('visible'))
)
favicon = models.FileField( favicon = models.FileField(
upload_to="admin-interface/favicon/", upload_to='admin-interface/favicon/',
blank=True, blank=True,
validators=[ validators=[FileExtensionValidator(
FileExtensionValidator( allowed_extensions=['gif', 'ico', 'jpg', 'jpeg', 'png', 'svg'])],
allowed_extensions=["gif", "ico", "jpg", "jpeg", "png", "svg"] help_text=_('(.ico|.png|.gif - 16x16|32x32 px)'),
) verbose_name=_('favicon'))
],
help_text=_("(.ico|.png|.gif - 16x16|32x32 px)"),
verbose_name=_("favicon"),
)
env_name = models.CharField( env_name = models.CharField(
blank=True, blank=True,
max_length=50, max_length=50,
verbose_name=_("name"), verbose_name=_('name'))
)
env_color = ColorField( env_color = ColorField(
blank=True, blank=True,
default="#E74C3C", default='#E74C3C',
help_text=_( help_text=_('(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, green: #2ECC71, blue: #3498DB)'),
"(red: #E74C3C, orange: #E67E22, yellow: #F1C40F, "
"green: #2ECC71, blue: #3498DB)"
),
max_length=10, max_length=10,
verbose_name=_("color"), verbose_name=_('color'))
)
env_visible_in_header = models.BooleanField( env_visible_in_header = models.BooleanField(
default=True, default=True,
verbose_name=_("visible in header (marker and name)"), verbose_name=_('visible in header (marker and name)'))
)
env_visible_in_favicon = models.BooleanField( env_visible_in_favicon = models.BooleanField(
default=True, default=True,
verbose_name=_("visible in favicon (marker)"), verbose_name=_('visible in favicon (marker)'))
)
language_chooser_active = models.BooleanField( language_chooser_active = models.BooleanField(
default=True, default=True,
verbose_name=_("active"), verbose_name=_('active'))
)
language_chooser_control_choices = (
("default-select", _("Default Select")),
("minimal-select", _("Minimal Select")),
)
language_chooser_control = models.CharField(
max_length=20,
choices=language_chooser_control_choices,
default="default-select",
verbose_name=_("control"),
)
language_chooser_display_choices = ( language_chooser_display_choices = (
("code", _("code")), ('code', _('code'), ),
("name", _("name")), ('name', _('name'), ),
) )
language_chooser_display = models.CharField( language_chooser_display = models.CharField(
max_length=10, max_length=10,
choices=language_chooser_display_choices, choices=language_chooser_display_choices,
default="code", default='code',
verbose_name=_("display"), verbose_name=_('display'))
)
css_header_background_color = ColorField( css_header_background_color = ColorField(
blank=True, blank=True,
default="#0C4B33", default='#0C4B33',
help_text="#0C4B33", help_text='#0C4B33',
max_length=10, max_length=10,
verbose_name=_("background color"), verbose_name=_('background color'))
)
css_header_text_color = ColorField( css_header_text_color = ColorField(
blank=True, blank=True,
default="#44B78B", default='#44B78B',
help_text="#44B78B", help_text='#44B78B',
max_length=10, max_length=10,
verbose_name=_("text color"), verbose_name=_('text color'))
)
css_header_link_color = ColorField( css_header_link_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("link color"), verbose_name=_('link color'))
)
css_header_link_hover_color = ColorField( css_header_link_hover_color = ColorField(
blank=True, blank=True,
default="#C9F0DD", default='#C9F0DD',
help_text="#C9F0DD", help_text='#C9F0DD',
max_length=10, max_length=10,
verbose_name=_("link hover color"), verbose_name=_('link hover color'))
)
css_module_background_color = ColorField( css_module_background_color = ColorField(
blank=True, blank=True,
default="#44B78B", default='#44B78B',
help_text="#44B78B", help_text='#44B78B',
max_length=10, max_length=10,
verbose_name=_("background color"), verbose_name=_('background color'))
)
css_module_background_selected_color = ColorField( css_module_background_selected_color = ColorField(
blank=True, blank=True,
default="#FFFFCC", default='#FFFFCC',
help_text="#FFFFCC", help_text='#FFFFCC',
max_length=10, max_length=10,
verbose_name=_("background selected color"), verbose_name=_('background selected color'))
)
css_module_text_color = ColorField( css_module_text_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("text color"), verbose_name=_('text color'))
)
css_module_link_color = ColorField( css_module_link_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("link color"), verbose_name=_('link color'))
)
css_module_link_selected_color = ColorField( css_module_link_selected_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("link selected color"), verbose_name=_('link selected color'))
)
css_module_link_hover_color = ColorField( css_module_link_hover_color = ColorField(
blank=True, blank=True,
default="#C9F0DD", default='#C9F0DD',
help_text="#C9F0DD", help_text='#C9F0DD',
max_length=10, max_length=10,
verbose_name=_("link hover color"), verbose_name=_('link hover color'))
)
css_module_rounded_corners = models.BooleanField( css_module_rounded_corners = models.BooleanField(
default=True, default=True,
verbose_name=_("rounded corners"), verbose_name=_('rounded corners'))
)
css_generic_link_color = ColorField( css_generic_link_color = ColorField(
blank=True, blank=True,
default="#0C3C26", default='#0C3C26',
help_text="#0C3C26", help_text='#0C3C26',
max_length=10, max_length=10,
verbose_name=_("link color"), verbose_name=_('link color'))
)
css_generic_link_hover_color = ColorField( css_generic_link_hover_color = ColorField(
blank=True, blank=True,
default="#156641", default='#156641',
help_text="#156641", help_text='#156641',
max_length=10, max_length=10,
verbose_name=_("link hover color"), verbose_name=_('link hover color'))
)
css_generic_link_active_color = ColorField(
blank=True,
default="#29B864",
help_text="#29B864",
max_length=10,
verbose_name=_("link active color"),
)
css_save_button_background_color = ColorField( css_save_button_background_color = ColorField(
blank=True, blank=True,
default="#0C4B33", default='#0C4B33',
help_text="#0C4B33", help_text='#0C4B33',
max_length=10, max_length=10,
verbose_name=_("background color"), verbose_name=_('background color'))
)
css_save_button_background_hover_color = ColorField( css_save_button_background_hover_color = ColorField(
blank=True, blank=True,
default="#0C3C26", default='#0C3C26',
help_text="#0C3C26", help_text='#0C3C26',
max_length=10, max_length=10,
verbose_name=_("background hover color"), verbose_name=_('background hover color'))
)
css_save_button_text_color = ColorField( css_save_button_text_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
max_length=10, max_length=10,
verbose_name=_("text color"), verbose_name=_('text color'))
)
css_delete_button_background_color = ColorField( css_delete_button_background_color = ColorField(
blank=True, blank=True,
default="#BA2121", default='#BA2121',
help_text="#BA2121", help_text='#BA2121',
max_length=10, max_length=10,
verbose_name=_("background color"), verbose_name=_('background color'))
)
css_delete_button_background_hover_color = ColorField( css_delete_button_background_hover_color = ColorField(
blank=True, blank=True,
default="#A41515", default='#A41515',
help_text="#A41515", help_text='#A41515',
max_length=10, max_length=10,
verbose_name=_("background hover color"), verbose_name=_('background hover color'))
)
css_delete_button_text_color = ColorField( css_delete_button_text_color = ColorField(
blank=True, blank=True,
default="#FFFFFF", default='#FFFFFF',
help_text="#FFFFFF", help_text='#FFFFFF',
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'))
)
related_modal_background_color = ColorField( related_modal_background_color = ColorField(
blank=True, blank=True,
default="#000000", default='#000000',
help_text="#000000", help_text='#000000',
max_length=10, max_length=10,
verbose_name=_("background color"), verbose_name=_('background color'))
)
related_modal_background_opacity_choices = ( related_modal_background_opacity_choices = (
("0.1", "10%"), ('0.1', '10%', ),
("0.2", "20%"), ('0.2', '20%', ),
("0.3", "30%"), ('0.3', '30%', ),
("0.4", "40%"), ('0.4', '40%', ),
("0.5", "50%"), ('0.5', '50%', ),
("0.6", "60%"), ('0.6', '60%', ),
("0.7", "70%"), ('0.7', '70%', ),
("0.8", "80%"), ('0.8', '80%', ),
("0.9", "90%"), ('0.9', '90%', ),
) )
related_modal_background_opacity = models.CharField( related_modal_background_opacity = models.CharField(
max_length=5, max_length=5,
choices=related_modal_background_opacity_choices, choices=related_modal_background_opacity_choices,
default="0.3", default='0.3',
help_text="20%", help_text='20%',
verbose_name=_("background opacity"), verbose_name=_('background opacity'))
)
related_modal_rounded_corners = models.BooleanField( related_modal_rounded_corners = models.BooleanField(
default=True, default=True,
verbose_name=_("rounded corners"), verbose_name=_('rounded corners'))
)
related_modal_close_button_visible = models.BooleanField( related_modal_close_button_visible = models.BooleanField(
default=True, default=True,
verbose_name=_("close button visible"), verbose_name=_('close button visible'))
)
list_filter_highlight = models.BooleanField(
default=True,
verbose_name=_("highlight active"),
)
list_filter_dropdown = models.BooleanField( list_filter_dropdown = models.BooleanField(
default=True, default=True,
verbose_name=_("use dropdown"), verbose_name=_('use dropdown'))
)
list_filter_sticky = models.BooleanField( list_filter_sticky = models.BooleanField(
default=True, default=True,
verbose_name=_("sticky position"), verbose_name=_('sticky position'))
)
list_filter_removal_links = models.BooleanField(
default=False,
verbose_name=_("quick remove links for active filters at top of sidebar"),
)
foldable_apps = models.BooleanField( foldable_apps = models.BooleanField(
default=True, default=True,
verbose_name=_("foldable apps"), verbose_name=_('foldable apps'))
)
show_fieldsets_as_tabs = models.BooleanField(
default=False,
verbose_name=_("fieldsets as tabs"),
)
show_inlines_as_tabs = models.BooleanField(
default=False,
verbose_name=_("inlines as tabs"),
)
collapsible_stacked_inlines = models.BooleanField(
default=False,
verbose_name=_("collapsible stacked inlines"),
)
collapsible_stacked_inlines_collapsed = models.BooleanField(
default=True,
verbose_name=_("collapsible stacked inlines collapsed"),
)
collapsible_tabular_inlines = models.BooleanField(
default=False,
verbose_name=_("collapsible tabular inlines"),
)
collapsible_tabular_inlines_collapsed = models.BooleanField(
default=True,
verbose_name=_("collapsible tabular inlines collapsed"),
)
recent_actions_visible = models.BooleanField( recent_actions_visible = models.BooleanField(
default=True, default=True,
verbose_name=_("visible"), verbose_name=_('visible'))
)
form_submit_sticky = models.BooleanField( form_submit_sticky = models.BooleanField(
default=False, default=False,
verbose_name=_("sticky submit"), verbose_name=_('sticky submit'))
)
form_pagination_sticky = models.BooleanField( form_pagination_sticky = models.BooleanField(
default=False, default=False,
verbose_name=_("sticky pagination"), verbose_name=_('sticky pagination'))
)
objects = ThemeQuerySet.as_manager()
def set_active(self): def set_active(self):
self.active = True self.active = True
self.save() self.save()
def set_default(self):
self.default = True
self.save()
def save(self):
if self.default:
Theme.objects.update(default=False)
super().save()
class Meta: class Meta:
app_label = "admin_interface" app_label = 'admin_interface'
verbose_name = _("Theme")
verbose_name_plural = _("Themes") verbose_name = _('Theme')
verbose_name_plural = _('Themes')
def __str__(self): def __str__(self):
return force_str(self.name) return force_str(self.name)
@receiver(post_delete, sender=Theme) post_delete.connect(Theme.post_delete_handler, sender=Theme)
def post_delete_handler(sender, instance, **kwargs): post_save.connect(Theme.post_save_handler, sender=Theme)
del_cached_active_theme() pre_save.connect(Theme.pre_save_handler, sender=Theme)
Theme.objects.get_active()
# @receiver(post_save, sender=Theme)
# def post_save_handler(sender, instance, **kwargs):
# del_cached_active_theme()
# if instance.active:
# Theme.objects.exclude(pk=instance.pk).update(active=False)
# Theme.objects.get_active()
# @receiver(pre_save, sender=Theme)
# def pre_save_handler(sender, instance, **kwargs):
# if instance.pk is None:
# try:
# obj = Theme.objects.get(name=instance.name)
# instance.pk = obj.pk
# except Theme.DoesNotExist:
# pass

View File

@ -1,29 +1,27 @@
# -*- coding: utf-8 -*-
import django import django
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
def check_installed_app(app, max_dj_version=None): def check_installed_app(app, app_dj_version_limit):
dj_version = django.VERSION dj_version = django.VERSION
installed_apps = settings.INSTALLED_APPS installed_apps = settings.INSTALLED_APPS
if max_dj_version is None: if dj_version < app_dj_version_limit:
if app not in installed_apps: if app not in installed_apps:
raise ImproperlyConfigured( raise ImproperlyConfigured(
"'{}' is required, " "add it to settings.INSTALLED_APPS.".format(app) '\'{}\' needed before django {}.{}, '
) 'add it to settings.INSTALLED_APPS.'.format(
elif dj_version < max_dj_version: app, *app_dj_version_limit))
if app not in installed_apps:
raise ImproperlyConfigured(
"'{}' is required before django {}.{}, "
"add it to settings.INSTALLED_APPS.".format(app, *max_dj_version)
)
else: else:
if app in installed_apps: if app in installed_apps:
raise ImproperlyConfigured( raise ImproperlyConfigured(
"'{}' is no more required since django {}.{}, " '\'{}\' not needed since django {}.{}, '
"remove it from settings.INSTALLED_APPS.".format(app, *max_dj_version) 'remove it from settings.INSTALLED_APPS.'.format(
) app, *app_dj_version_limit))
def check_installed_apps(): def check_installed_apps():
check_installed_app("colorfield") check_installed_app('flat', (1, 9))
check_installed_app('flat_responsive', (2, 0))

View File

@ -17,4 +17,4 @@ if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined') {
}); });
}); });
})(django.jQuery); })(django.jQuery);
} }

View File

@ -1,49 +0,0 @@
/*global gettext*/
/* copied from django 4.0.7 */
'use strict';
{
window.addEventListener('load', function() {
// Add anchor tag for Show/Hide link
const fieldsets = document.querySelectorAll('fieldset.collapse');
for (const [i, elem] of fieldsets.entries()) {
// Don't hide if fields in this fieldset have errors
if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) {
const h2 = elem.querySelector('h2');
const link = document.createElement('a');
link.id = 'fieldsetcollapser' + i;
link.className = 'collapse-toggle';
link.href = '#';
// changed: can opt into starting visible
if (elem.classList.contains('expanded')) {
link.textContent = gettext('Hide');
} else {
link.textContent = gettext('Show');
elem.classList.add('collapsed');
}
h2.appendChild(document.createTextNode(' ('));
h2.appendChild(link);
h2.appendChild(document.createTextNode(')'));
}
}
// Add toggle to hide/show anchor tag
const toggleFunc = function(ev) {
if (ev.target.matches('.collapse-toggle')) {
ev.preventDefault();
ev.stopPropagation();
const fieldset = ev.target.closest('fieldset');
if (fieldset.classList.contains('collapsed')) {
// Show
ev.target.textContent = gettext('Hide');
fieldset.classList.remove('collapsed');
} else {
// Hide
ev.target.textContent = gettext('Show');
fieldset.classList.add('collapsed');
}
}
};
document.querySelectorAll('fieldset.module').forEach(function(el) {
el.addEventListener('click', toggleFunc);
});
});
}

View File

@ -3,7 +3,6 @@
'use strict'; 'use strict';
var windowRef = window; var windowRef = window;
var windowRefProxy;
var windowName, widgetName; var windowName, widgetName;
var openerRef = windowRef.opener; var openerRef = windowRef.opener;
if (!openerRef) { if (!openerRef) {
@ -15,14 +14,12 @@
// django < 3.1 compatibility // django < 3.1 compatibility
widgetName = openerRef.id_to_windowname(widgetName); widgetName = openerRef.id_to_windowname(widgetName);
} }
windowRefProxy = { windowRef = {
name: widgetName, name: widgetName,
location: windowRef.location,
close: function() { close: function() {
openerRef.dismissRelatedObjectModal(); openerRef.dismissRelatedObjectModal();
} }
}; };
windowRef = windowRefProxy;
} }
// default django popup_response.js // default django popup_response.js
@ -42,7 +39,11 @@
if (typeof(openerRef.dismissAddRelatedObjectPopup) === 'function') { if (typeof(openerRef.dismissAddRelatedObjectPopup) === 'function') {
openerRef.dismissAddRelatedObjectPopup(windowRef, initData.value, initData.obj); openerRef.dismissAddRelatedObjectPopup(windowRef, initData.value, initData.obj);
} }
else if (typeof(openerRef.dismissAddAnotherPopup) === 'function') {
// django 1.7 compatibility
openerRef.dismissAddAnotherPopup(windowRef, initData.value, initData.obj);
}
break; break;
} }
})(); })();

View File

@ -1,48 +0,0 @@
/** global: django */
if (typeof(django) !== 'undefined' && typeof(django.jQuery) !== 'undefined')
{
(function($) {
$(document).ready(function(){
function collapsibleInline(scope, collapsed) {
var fieldsetCollapsed = collapsed;
var fieldsetEl = $(scope).find('> fieldset.module');
fieldsetEl.addClass('collapse');
var fieldsetHasErrors = (fieldsetEl.children('.errors').length > 0);
if (fieldsetHasErrors === true) {
fieldsetCollapsed = false;
}
if (fieldsetCollapsed === true) {
fieldsetEl.addClass('collapsed');
}
var collapseToggleText = (fieldsetCollapsed ? gettext('Show') : gettext('Hide'));
var collapseToggleHTML = ' (<a class="collapse-toggle" href="#">' + collapseToggleText + '</a>)';
var headerEl = fieldsetEl.find('> h2,> h3');
if (headerEl.find(".collapse-toggle").length === 0) {
// don't add collapse toggle button if already present
headerEl.append(collapseToggleHTML);
}
}
var stackedInlinesOptionSel = '.admin-interface.collapsible-stacked-inlines';
var stackedInlinesSel = stackedInlinesOptionSel + ' .inline-group[data-inline-type="stacked"]';
var stackedInlinesCollapsed = $(stackedInlinesOptionSel).hasClass('collapsible-stacked-inlines-collapsed');
var tabularInlinesOptionSel = '.admin-interface.collapsible-tabular-inlines';
var tabularInlinesSel = tabularInlinesOptionSel + ' .inline-group[data-inline-type="tabular"] .inline-related.tabular';
var tabularInlinesCollapsed = $(stackedInlinesOptionSel).hasClass('collapsible-tabular-inlines-collapsed');
$(stackedInlinesSel).each(function() {
collapsibleInline(this, stackedInlinesCollapsed);
});
$(tabularInlinesSel).each(function() {
collapsibleInline(this, tabularInlinesCollapsed);
});
});
})(django.jQuery);
}

View File

@ -1,515 +0,0 @@
@media (prefers-color-scheme: dark) {
:root .admin-interface {
--primary: #79aec8;
--secondary: #417690;
--accent: #f5dd5d;
--primary-fg: #fff;
--body-fg: #333;
--body-bg: #fff;
--body-quiet-color: #666;
--body-loud-color: #000;
--header-color: #ffc;
--header-branding-color: var(--accent);
--header-bg: var(--secondary);
--header-link-color: var(--primary-fg);
--breadcrumbs-fg: #c4dce8;
--breadcrumbs-link-fg: var(--body-bg);
--breadcrumbs-bg: var(--primary);
--link-fg: #447e9b;
--link-hover-color: #036;
--link-selected-fg: #5b80b2;
--hairline-color: #e8e8e8;
--border-color: #ccc;
--error-fg: #ba2121;
--message-success-bg: #dfd;
--message-warning-bg: #ffc;
--message-error-bg: #ffefef;
--darkened-bg: #f8f8f8;
--selected-bg: #e4e4e4;
--selected-row: #ffc;
--button-fg: #fff;
--button-bg: var(--primary);
--button-hover-bg: #609ab6;
--default-button-bg: var(--secondary);
--default-button-hover-bg: #205067;
--close-button-bg: #888;
--close-button-hover-bg: #747474;
--delete-button-bg: #ba2121;
--delete-button-hover-bg: #a41515;
--object-tools-fg: var(--button-fg);
--object-tools-bg: var(--close-button-bg);
--object-tools-hover-bg: var(--close-button-hover-bg);
}
}
.admin-interface {
overflow-x: hidden;
}
.admin-interface #header {
background: var(--admin-interface-header-background-color);
color: var(--admin-interface-header-text-color);
}
.admin-interface #header + #main {
border-top: var(--admin-interface-main-border-top);
}
.admin-interface .environment-label {
}
.admin-interface .environment-label::before {
content: "";
display: inline-block;
width: 8px;
height: 8px;
background-color: var(--admin-interface-env-color);
border-radius: 100%;
margin-right: 6px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
.admin-interface .environment-label::after {
content: " - ";
}
@media (max-width: 1024px) {
.admin-interface .environment-label::after {
content: "";
}
}
.admin-interface .language-chooser {
display: inline-block;
position: absolute;
top: 15px;
right: 15px;
z-index: 10;
}
@media (min-width: 768px) {
.admin-interface .language-chooser {
right: 30px;
}
}
@media (min-width: 1024px) {
.admin-interface .language-chooser {
position: static;
float: right;
margin-left: 20px;
}
}
.admin-interface .language-chooser-hidden-form {
display: none;
}
.admin-interface .language-chooser-select-form {
display: inline-block;
}
.admin-interface #branding h1,
.admin-interface.login #header h1,
.admin-interface.login #header h1 a {
color: var(--admin-interface-title-color);
}
.admin-interface #branding h1 a {
color: inherit;
}
.admin-interface #branding h1 .logo.default {
background-color: transparent;
background-repeat: no-repeat;
background-position: center center;
background-size: 104px 36px;
background-image: var(--admin-interface-logo-default-background-image);
}
.admin-interface #branding h1 img.logo,
.admin-interface.login #header #branding h1 img.logo {
max-width: var(--admin-interface-logo-max-width);
max-height: var(--admin-interface-logo-max-height);
}
.admin-interface #header #user-tools a,
.admin-interface #header #user-tools #logout-form button {
color: var(--admin-interface-header-link-color);
}
.admin-interface #header #user-tools a:hover,
.admin-interface #header #user-tools a:active,
.admin-interface #header #user-tools #logout-form button:hover,
.admin-interface #header #user-tools #logout-form button:active {
color: var(--admin-interface-header-link-hover-color);
border-bottom-color: rgba(255, 255, 255, 0.5);
}
.admin-interface #header #user-tools button.theme-toggle svg {
color: transparent;
fill: var(--admin-interface-header-link-color);
}
.admin-interface #header #user-tools button.theme-toggle:hover svg,
.admin-interface #header #user-tools button.theme-toggle:active svg {
color: transparent;
fill: var(--admin-interface-header-link-hover-color);
}
.admin-interface #nav-sidebar .current-app .section:link,
.admin-interface #nav-sidebar .current-app .section:visited {
color: var(--admin-interface-module-link-selected-color);
font-weight: normal;
}
.admin-interface #nav-sidebar .current-app .section:focus,
.admin-interface #nav-sidebar .current-app .section:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface #nav-sidebar .current-model {
background: var(--admin-interface-module-background-selected-color);
}
.admin-interface #changelist table tbody tr.selected {
background-color: var(--admin-interface-module-background-selected-color);
}
.admin-interface .module h2,
.admin-interface .module caption,
.admin-interface .module.filtered h2 {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .module a.section:link,
.admin-interface .module a.section:visited {
color: var(--admin-interface-module-link-color);
}
.admin-interface .module a.section:active,
.admin-interface .module a.section:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface div.breadcrumbs {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface div.breadcrumbs a {
color: var(--admin-interface-module-link-color);
}
.admin-interface div.breadcrumbs a:active,
.admin-interface div.breadcrumbs a:focus,
.admin-interface div.breadcrumbs a:hover {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface fieldset.collapse a.collapse-toggle,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle {
color: var(--admin-interface-module-link-color);
}
.admin-interface fieldset.collapse a.collapse-toggle:hover,
.admin-interface fieldset.collapse a.collapse-toggle:active,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle:hover,
.admin-interface fieldset.collapse.collapsed a.collapse-toggle:active,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle:hover,
.admin-interface .inline-group .inline-related fieldset.module a.collapse-toggle:active,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle:hover,
.admin-interface .inline-group .inline-related fieldset.module.collapsed a.collapse-toggle:active {
color: var(--admin-interface-module-link-hover-color);
}
.admin-interface .inline-group h2 {
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .selector .selector-chosen h2 {
border-color: var(--admin-interface-module-background-color);
background: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface .selector .selector-available h2,
.admin-interface .selector .selector-chosen h2 {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.admin-interface .selector a.selector-chooseall:focus,
.admin-interface .selector a.selector-chooseall:hover,
.admin-interface .selector a.selector-clearall:focus,
.admin-interface .selector a.selector-clearall:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface a:link,
.admin-interface a:visited {
color: var(--admin-interface-generic-link-color);
}
.admin-interface a:hover {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface thead th a,
.admin-interface thead th a:link,
.admin-interface thead th a:visited,
.admin-interface thead th a:focus,
.admin-interface thead th a:hover {
color: #666666;
}
.admin-interface .button,
.admin-interface input[type=submit],
.admin-interface input[type=button],
.admin-interface .submit-row input,
.admin-interface a.button {
background: var(--admin-interface-save-button-background-color);
color: var(--admin-interface-save-button-text-color);
}
.admin-interface .button:active,
.admin-interface .button:focus,
.admin-interface .button:hover,
.admin-interface input[type=submit]:active,
.admin-interface input[type=submit]:focus,
.admin-interface input[type=submit]:hover,
.admin-interface input[type=button]:active,
.admin-interface input[type=button]:focus,
.admin-interface input[type=button]:hover {
background: var(--admin-interface-save-button-background-hover-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .button.default,
.admin-interface input[type=submit].default,
.admin-interface .submit-row input.default {
background: var(--admin-interface-save-button-background-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .button.default:active,
.admin-interface .button.default:focus,
.admin-interface .button.default:hover,
.admin-interface input[type=submit].default:active,
.admin-interface input[type=submit].default:focus,
.admin-interface input[type=submit].default:hover,
.admin-interface.delete-confirmation form .cancel-link:hover {
background: var(--admin-interface-save-button-background-hover-color);
color: var(--admin-interface-save-button-text-color);
outline: none;
}
.admin-interface .submit-row a.deletelink:link,
.admin-interface .submit-row a.deletelink:visited,
.admin-interface.delete-confirmation form input[type="submit"] {
background: var(--admin-interface-delete-button-background-color);
color: var(--admin-interface-delete-button-text-color);
}
.admin-interface .submit-row a.deletelink:hover,
.admin-interface.delete-confirmation form input[type="submit"]:hover {
background: var(--admin-interface-delete-button-background-hover-color);
color: var(--admin-interface-delete-button-text-color);
}
.admin-interface .paginator a,
.admin-interface .paginator a:link,
.admin-interface .paginator a:visited,
.admin-interface .paginator .this-page {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .paginator a,
.admin-interface .paginator a:link,
.admin-interface .paginator a:visited {
background-color: #FFFFFF;
color: var(--admin-interface-generic-link-color);
}
.admin-interface .paginator a:hover,
.admin-interface .paginator a:active {
background-color: #F8F8F8;
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .paginator .this-page {
background-color: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-link-color);
}
.admin-interface .paginator a.showall,
.admin-interface .paginator a.showall:link,
.admin-interface .paginator a.showall:visited {
color: var(--admin-interface-generic-link-color);
}
.admin-interface .paginator a.showall:hover,
.admin-interface .paginator a.showall:active {
color: var(--admin-interface-generic-link-hover-color);
}
/* list-filter sticky */
@media (min-width: 768px) {
.admin-interface.list-filter-sticky .module.filtered #changelist-filter {
position: sticky;
top: 30px;
float: right;
z-index: 30;
display: flex;
flex-direction: column;
overflow-y: auto;
scrollbar-width: thin;
height: 100%;
max-height: calc(100vh - 60px);
}
.admin-interface.list-filter-sticky.sticky-pagination .module.filtered #changelist-filter {
max-height: calc(100vh - 125px);
}
/* feature not available for django < 3.1.2 */
.admin-interface.list-filter-sticky .module.filtered #toolbar + #changelist-filter {
position: absolute;
top: 0px;
z-index: 30;
max-height: calc(100vh - 105px);
}
.admin-interface.list-filter-sticky.sticky-pagination .module.filtered #toolbar + #changelist-filter {
max-height: calc(100vh - 170px);
}
}
.admin-interface .module.filtered #changelist-filter {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .module.filtered #changelist-filter h3#changelist-filter-clear {
margin-bottom: 0;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a {
font-size: 13px;
margin: .3em 0;
padding: 0 15px;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a:focus,
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a:hover,
.admin-interface .module.filtered #changelist-filter #changelist-filter-clear a:focus,
.admin-interface .module.filtered #changelist-filter #changelist-filter-clear a:hover {
color: #666;
text-decoration: none;
}
.admin-interface .module.filtered #changelist-filter .changelist-filter-clear a span {
font-weight: bold;
}
.admin-interface .module.filtered #changelist-filter li a:focus,
.admin-interface .module.filtered #changelist-filter li a:hover {
color: #666;
text-decoration: none;
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter h3.active {
font-weight: bold;
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected {
color: var(--admin-interface-module-text-color);
background: var(--admin-interface-module-background-color);
margin-left: -10px;
padding-left: 5px;
margin-right: -10px;
border-left: 5px solid var(--admin-interface-module-background-color);
border-right: 5px solid var(--admin-interface-module-background-color);
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:link,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:visited,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:focus,
.admin-interface.list-filter-highlight .module.filtered #changelist-filter ul.active li.selected a:hover {
background: inherit;
color: inherit;
}
.admin-interface .module.filtered #changelist-filter li.selected a,
.admin-interface .module.filtered #changelist-filter li.selected a:link,
.admin-interface .module.filtered #changelist-filter li.selected a:visited,
.admin-interface .module.filtered #changelist-filter li.selected a:focus,
.admin-interface .module.filtered #changelist-filter li.selected a:hover {
color: var(--admin-interface-generic-link-hover-color);
}
/* begin fix issue #11 - Inline border bottom should not be rounded */
.admin-interface .module h2,
.admin-interface.dashboard .module caption,
.admin-interface #nav-sidebar .module th,
.admin-interface #nav-sidebar .module caption,
.admin-interface .module.filtered h2 {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .inline-group h2 {
border-bottom-left-radius: 0px;
border-bottom-right-radius: 0px;
}
.admin-interface .module.collapse.collapsed h2 {
/* fix collapsed inlines rounded bottom borders */
border-bottom-left-radius: var(--admin-interface-module-border-radius);
border-bottom-right-radius: var(--admin-interface-module-border-radius);
}
/* end fix */
.admin-interface #content-related {
border-radius: var(--admin-interface-module-border-radius);
}
.admin-interface .select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] {
background-color: var(--admin-interface-module-background-color);
color: var(--admin-interface-module-text-color);
}
.admin-interface #toggle-nav-sidebar {
border-top-right-radius: var(--admin-interface-module-border-radius);
border-bottom-right-radius: var(--admin-interface-module-border-radius);
color: var(--admin-interface-generic-link-color);
}
.admin-interface #toggle-nav-sidebar:focus,
.admin-interface #toggle-nav-sidebar:hover,
.admin-interface #toggle-nav-sidebar:active {
color: var(--admin-interface-generic-link-hover-color);
}
.admin-interface .calendar td.selected a,
.admin-interface .calendar td a:active,
.admin-interface .calendar td a:focus,
.admin-interface .calendar td a:hover,
.admin-interface .timelist a:active,
.admin-interface .timelist a:focus,
.admin-interface .timelist a:hover {
background: var(--admin-interface-module-background-color);
}
.admin-interface .calendarbox .calendarnav-previous,
.admin-interface .calendarbox .calendarnav-next {
transition: none;
filter: invert(100%);
}

View File

@ -1,34 +0,0 @@
/* fix form submit buttons alignemnt and ordering */
@media (min-width: 768px) {
.admin-interface .submit-row {
flex-direction: row-reverse;
}
.admin-interface .submit-row input[name="_save"] {
order: 1;
}
.admin-interface .submit-row input[name="_continue"] {
order: 2;
}
.admin-interface .submit-row input[name="_addanother"] {
order: 3;
}
.admin-interface .submit-row a.deletelink {
order: 4;
margin-left: 0;
margin-right: auto;
}
}
/* endfix */
/* fix help-text horizontal alignment when using show-fieldsets-as-tabs / show-inlines-as-tabs options - #317 */
.admin-interface.show-fieldsets-as-tabs fieldset > .form-row .help,
.admin-interface.show-inlines-as-tabs .inline-related > fieldset .help {
margin-left: 0;
padding-left: 0;
}
.admin-interface.show-fieldsets-as-tabs fieldset > .form-row div:has(.related-widget-wrapper .selector) + .help,
.admin-interface.show-inlines-as-tabs .inline-related > fieldset div:has(.related-widget-wrapper .selector) + .help {
display: flex;
width: 100%;
}
/* endfix */

Some files were not shown because too many files have changed in this diff Show More