changed build system to poetry, added more dj tags, added pyproject.toml support, fixed #11, closed #12, closed #1

This commit is contained in:
Christopher Pickering 2021-09-08 10:46:40 +02:00
parent 94c1dd5958
commit 5495516c74
No known key found for this signature in database
GPG key ID: E14DB3B0A0FACF84
714 changed files with 1379 additions and 58893 deletions

View file

@ -22,15 +22,12 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v2
with:
python-version: '3.x'
python-version: 3.x
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install build
- name: Build package
run: python -m build
- name: Publish package
uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29
pip install poetry
- name: Build and publish package
users: JRubics/poetry-publish@v1.8
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}

View file

@ -1,9 +0,0 @@
# Changelog
## 0.0.8
Added rules.
## 0.0.1
Initial release.

View file

@ -1,19 +1,51 @@
![djLint Logo](https://raw.githubusercontent.com/Riverside-Healthcare/djlint/master/docs/_static/icon.png)
Simple html template linter and reformatter to find common formatting issues. djLint is intended as a django template linter and django template formatter.
Find common formatting issues and *reformat* HTML templates.
<style>
.types {
text-align: center;
font-size: 110%;
font-style: italic;
width: 100%;
position: relative;
}
.types::after {
position: absolute;
top: 11px;
left:0;
right:0;
border: 1px solid rgba(0,0,0,.2);
content: "";
z-index: -1;
}
.types span {
padding: 15px;
margin: 5px;
background: #fff;
z-index:1;
}
</style>
<p class="types">
<span>Django</span>
<span>Jinja</span>
<span>Nunjucks</span>
<span>Handlebars</span>
</p>
Ps, ```--check``` it out on Jinja and Handlebar templates as well!
[![codecov](https://codecov.io/gh/Riverside-Healthcare/djlint/branch/master/graph/badge.svg?token=eNTG721BAA)](https://codecov.io/gh/Riverside-Healthcare/djlint) [![test](https://github.com/Riverside-Healthcare/djlint/actions/workflows/test.yml/badge.svg)](https://github.com/Riverside-Healthcare/djlint/actions/workflows/test.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/dba6338b0e7a4de896b45b382574f369)](https://www.codacy.com/gh/Riverside-Healthcare/djlint/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Riverside-Healthcare/djlint&amp;utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/5febe4111a36c7e0d2ed/maintainability)](https://codeclimate.com/github/Riverside-Healthcare/djlint/maintainability) [![Downloads](https://pepy.tech/badge/djlint)](https://pepy.tech/project/djlint)
[![codecov](https://codecov.io/gh/Riverside-Healthcare/djlint/branch/master/graph/badge.svg?token=eNTG721BAA)](https://codecov.io/gh/Riverside-Healthcare/djlint) [![test](https://github.com/Riverside-Healthcare/djlint/actions/workflows/test.yml/badge.svg)](https://github.com/Riverside-Healthcare/djlint/actions/workflows/test.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/dba6338b0e7a4de896b45b382574f369)](https://www.codacy.com/gh/Riverside-Healthcare/djlint/dashboard?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=Riverside-Healthcare/djlint&amp;utm_campaign=Badge_Grade) [![Maintainability](https://api.codeclimate.com/v1/badges/5febe4111a36c7e0d2ed/maintainability)](https://codeclimate.com/github/Riverside-Healthcare/djlint/maintainability) [![Downloads](https://pepy.tech/badge/djlint)](https://pepy.tech/project/djlint)[![chat](https://img.shields.io/badge/chat-discord-green)](https://discord.gg/taghAqebzU)
## Documentation
Read the [documentation](https://djlint.readthedocs.io)
## Installation and Usage
djLint can be installed with `pip install djlint`, and is easy to run:
**djLint** can be installed with `pip install djlint`, and is easy to run:
```sh
# to lint a directory
@ -35,7 +67,7 @@ djlint /path --reformat --quiet
Add a badge to your projects ```readme.md```:
```md
[![Code style: black](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://github.com/Riverside-Healthcare/djlint)
[![Code style: djlint](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://github.com/Riverside-Healthcare/djlint)
```
Add a badge to your ```readme.rst```:
@ -49,6 +81,6 @@ Looks like this:
[![djlint](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://github.com/Riverside-Healthcare/djlint)
## Contributing - Please Help!
## Contributing
Checkout the [issue](https://github.com/Riverside-Healthcare/djlint/issues) list and help where you can!
Checkout the [issue](https://github.com/Riverside-Healthcare/djlint/issues) list and help where you can.

BIN
docs/_static/icon-square.indd vendored Normal file

Binary file not shown.

BIN
docs/_static/icon-square.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 705 KiB

View file

@ -12,7 +12,7 @@
project = "djlint"
copyright = "2021, Riverside Healthcare"
author = "Christopher Pickering"
release = "0.3.4"
release = "0.3.5"
version = release
# -- General configuration ---------------------------------------------------

41
docs/djlint/changelog.rst Normal file
View file

@ -0,0 +1,41 @@
Changelog
=========
0.3.5
-----
- Added support for more Django blocks
- Added support for custom blocks
- Added support for config in ``pyproject.toml``
0.3.4
-----
- Fixed Nunjucks spaceless tag ``-%}`` format
0.3.3
-----
- Allowed short ``div`` tags to be single line
0.3.2
-----
- Fixed Django comment formatting
- Ignored textarea from formatting
0.3.1
-----
- Updated attribute formatting regex
- Updated lint rule W010
0.3.0
-----
- Changed exit code to 1 if there were any formatting changes
- Added support for Jinja ``asset`` tags
0.2.9
-----
- Updated W018 regex
- Removed duplicate lint messages
- Updated E001 for Handlebars
0.2.8
-----
- Fixed progress bar error for old Click version

View file

@ -1,7 +1,10 @@
Configuration
=============
Linter rules can easily be ignored with the `-i` or `--ignore` flag.
Ignoring Linter Rules
---------------------
Linter rules can be ignored with the `-i` or `--ignore` flag.
For example:
@ -10,7 +13,15 @@ For example:
djlint src -i "W013,W014"
Help needed!
------------
Pyproject.toml Configuration
----------------------------
Ideally we'd also like to be able to ignore rules through pyproject.toml/tox.ini/setup.cfg.
Configuration options can also be added to your projects `pyproject.toml` file. Command line args will always override any settings in `pyproject.toml`.
.. code:: toml
[tool.djlint]
ignore = "W013"
extension = "html.dj"
custom_blocks = "toc,example" # custom code blocks {% toc %}...{% endtoc %}
indent = " " # change indentation level

View file

@ -3,11 +3,9 @@ Formatter
djLint's formatter will take sloppy html templates and make it look pretty nice!
For an example of what the output will be, check out the `/tests/ <https://github.com/Riverside-Healthcare/djlint/tree/master/tests>`_ folder to see over 300 **formatted** templates from the top django and flask projects.
Before
------
.. code :: html
.. code ::
{% load admin_list %} {% load i18n %}
<p class="paginator">

View file

@ -18,10 +18,10 @@ Linter Usage
# with custom extensions
djlint src -e html.dj
Reformatter Usage
Formatter Usage
-----------------
Reforamtting is a beta product. Check the output before applying changes.
Foramtting is a beta tool. ``--check`` the output before applying changes.
Reformatting does not work with long json/html embedded into attribute data.
@ -29,16 +29,16 @@ To check what may change in formatting run:
.. code:: sh
djlint src --check --ignore="W013,W014"
djlint . --check --ignore="W013,W014"
To reformat run:
To format code run:
.. code:: sh
djlint src --reformat
djlint . --reformat
CLI Args
-------------
--------
.. code:: sh

View file

@ -1,7 +1,7 @@
.. djlint documentation master file, created by
sphinx-quickstart on Tue Jul 27 15:28:35 2021.
Html Template Linter and Formatter
HTML Template Linter and Formatter
==================================
.. toctree::
@ -15,21 +15,57 @@ Html Template Linter and Formatter
djlint/rules
djlint/formatter
djlint/configuration
djlint/changelog
.. toctree::
:hidden:
GitHub ↪ <https://github.com/Riverside-Healthcare/djlint>
PyPI ↪ <https://pypi.org/project/djlint/>
Discord ↪ <https://discord.gg/taghAqebzU>
Simple html template linter and reformatter to find common formatting issues with and *reformat* django html templates
Find common formatting issues and *reformat* HTML templates.
Ps, ``--check`` it out on Jinja and Handlebar templates as well!
.. raw:: html
<style>
.types {
text-align: center;
font-size: 110%;
font-style: italic;
width: 100%;
position: relative;
}
.types::after {
position: absolute;
top: 11px;
left:0;
right:0;
border: 1px solid rgba(0,0,0,.2);
content: "";
z-index: -1;
}
.types span {
padding: 15px;
margin: 5px;
background: #fff;
z-index:1;
}
</style>
<p class="types">
<span>Django</span>
<span>Jinja</span>
<span>Nunjucks</span>
<span>Handlebars</span>
</p>
Ps, ``--check`` it out on other templates as well!
.. image:: /_static/demo.gif
|codecov| |test| |Codacy Badge| |Maintainability| |Downloads|
|codecov| |test| |Codacy Badge| |Maintainability| |Downloads| |chat|
.. note:: djLint is not an html parser or syntax validator.
@ -40,7 +76,7 @@ Add a badge to your projects `readme.md`:
.. code-block:: md
[![Code style: black](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://github.com/Riverside-Healthcare/djlint)
[![Code style: djlint](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://github.com/Riverside-Healthcare/djlint)
Add a badge to your `readme.rst`:
@ -72,3 +108,5 @@ Checkout the `issue <https://github.com/Riverside-Healthcare/djlint/issues>`_ li
:target: https://codeclimate.com/github/Riverside-Healthcare/djlint/maintainability
.. |Downloads| image:: https://img.shields.io/pypi/dm/djlint.svg
:target: https://pypi.org/project/djlint/
.. |chat| image:: https://discord.gg/taghAqebzU
:target: https://img.shields.io/badge/chat-discord-green

429
poetry.lock generated Normal file
View file

@ -0,0 +1,429 @@
[[package]]
name = "atomicwrites"
version = "1.4.0"
description = "Atomic file writes."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "attrs"
version = "21.2.0"
description = "Classes Without Boilerplate"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"]
docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"]
tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"]
tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"]
[[package]]
name = "click"
version = "8.0.1"
description = "Composable command line interface toolkit"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[[package]]
name = "colorama"
version = "0.4.4"
description = "Cross-platform colored terminal text."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "coverage"
version = "5.5"
description = "Code coverage measurement for Python"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
[package.extras]
toml = ["toml"]
[[package]]
name = "importlib-metadata"
version = "4.8.1"
description = "Read metadata from Python packages"
category = "main"
optional = false
python-versions = ">=3.6"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
perf = ["ipython"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
name = "iniconfig"
version = "1.1.1"
description = "iniconfig: brain-dead simple config-ini parsing"
category = "dev"
optional = false
python-versions = "*"
[[package]]
name = "packaging"
version = "21.0"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
pyparsing = ">=2.0.2"
[[package]]
name = "pluggy"
version = "1.0.0"
description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
testing = ["pytest", "pytest-benchmark"]
[[package]]
name = "py"
version = "1.10.0"
description = "library with cross-python path, ini-parsing, io, code, log facilities"
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
name = "pyparsing"
version = "2.4.7"
description = "Python parsing module"
category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "pytest"
version = "6.2.5"
description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=19.2.0"
colorama = {version = "*", markers = "sys_platform == \"win32\""}
importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<2.0"
py = ">=1.8.2"
toml = "*"
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
name = "pytest-cov"
version = "2.12.1"
description = "Pytest plugin for measuring coverage."
category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.dependencies]
coverage = ">=5.2.1"
pytest = ">=4.6"
toml = "*"
[package.extras]
testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"]
[[package]]
name = "pyyaml"
version = "5.4.1"
description = "YAML parser and emitter for Python"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
[[package]]
name = "regex"
version = "2021.8.28"
description = "Alternative regular expression module, to replace re."
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "toml"
version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language"
category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
name = "tomlkit"
version = "0.7.2"
description = "Style preserving TOML library"
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
name = "tqdm"
version = "4.62.2"
description = "Fast, Extensible Progress Meter"
category = "main"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7"
[package.dependencies]
colorama = {version = "*", markers = "platform_system == \"Windows\""}
[package.extras]
dev = ["py-make (>=0.1.0)", "twine", "wheel"]
notebook = ["ipywidgets (>=6)"]
telegram = ["requests"]
[[package]]
name = "typing-extensions"
version = "3.10.0.2"
description = "Backported and Experimental Type Hints for Python 3.5+"
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "zipp"
version = "3.5.0"
description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false
python-versions = ">=3.6"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
content-hash = "0acb2ff4e9339c8cbcb21b6be1c0da5c0356b582cc60766a9dfd3b7b7c718ca6"
[metadata.files]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
{file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"},
{file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"},
]
click = [
{file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"},
{file = "click-8.0.1.tar.gz", hash = "sha256:8c04c11192119b1ef78ea049e0a6f0463e4c48ef00a30160c704337586f3ad7a"},
]
colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
coverage = [
{file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"},
{file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"},
{file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"},
{file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"},
{file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"},
{file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"},
{file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"},
{file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"},
{file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"},
{file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"},
{file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"},
{file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"},
{file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"},
{file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"},
{file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"},
{file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"},
{file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"},
{file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"},
{file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"},
{file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"},
{file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"},
{file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"},
{file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"},
{file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"},
{file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"},
{file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"},
{file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"},
{file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"},
{file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"},
{file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"},
{file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"},
{file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"},
{file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"},
{file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"},
{file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"},
{file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"},
{file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"},
{file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"},
{file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"},
{file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"},
{file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"},
{file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"},
{file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"},
{file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"},
{file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"},
{file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"},
{file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"},
{file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"},
{file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"},
{file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"},
{file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"},
{file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"},
]
importlib-metadata = [
{file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"},
{file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
packaging = [
{file = "packaging-21.0-py3-none-any.whl", hash = "sha256:c86254f9220d55e31cc94d69bade760f0847da8000def4dfe1c6b872fd14ff14"},
{file = "packaging-21.0.tar.gz", hash = "sha256:7dc96269f53a4ccec5c0670940a4281106dd0bb343f47b7471f779df49c2fbe7"},
]
pluggy = [
{file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"},
{file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"},
]
py = [
{file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"},
{file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
]
pytest = [
{file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"},
{file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"},
]
pytest-cov = [
{file = "pytest-cov-2.12.1.tar.gz", hash = "sha256:261ceeb8c227b726249b376b8526b600f38667ee314f910353fa318caa01f4d7"},
{file = "pytest_cov-2.12.1-py2.py3-none-any.whl", hash = "sha256:261bb9e47e65bd099c89c3edf92972865210c36813f80ede5277dceb77a4a62a"},
]
pyyaml = [
{file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"},
{file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"},
{file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"},
{file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"},
{file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"},
{file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"},
{file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"},
{file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"},
{file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"},
{file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"},
{file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"},
{file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"},
{file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"},
{file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"},
{file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"},
{file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"},
{file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"},
{file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"},
{file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"},
{file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"},
{file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"},
]
regex = [
{file = "regex-2021.8.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d05ad5367c90814099000442b2125535e9d77581855b9bee8780f1b41f2b1a2"},
{file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3bf1bc02bc421047bfec3343729c4bbbea42605bcfd6d6bfe2c07ade8b12d2a"},
{file = "regex-2021.8.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f6a808044faae658f546dd5f525e921de9fa409de7a5570865467f03a626fc0"},
{file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a617593aeacc7a691cc4af4a4410031654f2909053bd8c8e7db837f179a630eb"},
{file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79aef6b5cd41feff359acaf98e040844613ff5298d0d19c455b3d9ae0bc8c35a"},
{file = "regex-2021.8.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fc1f8f06977c2d4f5e3d3f0d4a08089be783973fc6b6e278bde01f0544ff308"},
{file = "regex-2021.8.28-cp310-cp310-win32.whl", hash = "sha256:6eebf512aa90751d5ef6a7c2ac9d60113f32e86e5687326a50d7686e309f66ed"},
{file = "regex-2021.8.28-cp310-cp310-win_amd64.whl", hash = "sha256:ac88856a8cbccfc14f1b2d0b829af354cc1743cb375e7f04251ae73b2af6adf8"},
{file = "regex-2021.8.28-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c206587c83e795d417ed3adc8453a791f6d36b67c81416676cad053b4104152c"},
{file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8690ed94481f219a7a967c118abaf71ccc440f69acd583cab721b90eeedb77c"},
{file = "regex-2021.8.28-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:328a1fad67445550b982caa2a2a850da5989fd6595e858f02d04636e7f8b0b13"},
{file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c7cb4c512d2d3b0870e00fbbac2f291d4b4bf2634d59a31176a87afe2777c6f0"},
{file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66256b6391c057305e5ae9209941ef63c33a476b73772ca967d4a2df70520ec1"},
{file = "regex-2021.8.28-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e44769068d33e0ea6ccdf4b84d80c5afffe5207aa4d1881a629cf0ef3ec398f"},
{file = "regex-2021.8.28-cp36-cp36m-win32.whl", hash = "sha256:08d74bfaa4c7731b8dac0a992c63673a2782758f7cfad34cf9c1b9184f911354"},
{file = "regex-2021.8.28-cp36-cp36m-win_amd64.whl", hash = "sha256:abb48494d88e8a82601af905143e0de838c776c1241d92021e9256d5515b3645"},
{file = "regex-2021.8.28-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b4c220a1fe0d2c622493b0a1fd48f8f991998fb447d3cd368033a4b86cf1127a"},
{file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4a332404baa6665b54e5d283b4262f41f2103c255897084ec8f5487ce7b9e8e"},
{file = "regex-2021.8.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c61dcc1cf9fd165127a2853e2c31eb4fb961a4f26b394ac9fe5669c7a6592892"},
{file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ee329d0387b5b41a5dddbb6243a21cb7896587a651bebb957e2d2bb8b63c0791"},
{file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f60667673ff9c249709160529ab39667d1ae9fd38634e006bec95611f632e759"},
{file = "regex-2021.8.28-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b844fb09bd9936ed158ff9df0ab601e2045b316b17aa8b931857365ea8586906"},
{file = "regex-2021.8.28-cp37-cp37m-win32.whl", hash = "sha256:4cde065ab33bcaab774d84096fae266d9301d1a2f5519d7bd58fc55274afbf7a"},
{file = "regex-2021.8.28-cp37-cp37m-win_amd64.whl", hash = "sha256:1413b5022ed6ac0d504ba425ef02549a57d0f4276de58e3ab7e82437892704fc"},
{file = "regex-2021.8.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ed4b50355b066796dacdd1cf538f2ce57275d001838f9b132fab80b75e8c84dd"},
{file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28fc475f560d8f67cc8767b94db4c9440210f6958495aeae70fac8faec631797"},
{file = "regex-2021.8.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdc178caebd0f338d57ae445ef8e9b737ddf8fbc3ea187603f65aec5b041248f"},
{file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:999ad08220467b6ad4bd3dd34e65329dd5d0df9b31e47106105e407954965256"},
{file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:808ee5834e06f57978da3e003ad9d6292de69d2bf6263662a1a8ae30788e080b"},
{file = "regex-2021.8.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d5111d4c843d80202e62b4fdbb4920db1dcee4f9366d6b03294f45ed7b18b42e"},
{file = "regex-2021.8.28-cp38-cp38-win32.whl", hash = "sha256:473858730ef6d6ff7f7d5f19452184cd0caa062a20047f6d6f3e135a4648865d"},
{file = "regex-2021.8.28-cp38-cp38-win_amd64.whl", hash = "sha256:31a99a4796bf5aefc8351e98507b09e1b09115574f7c9dbb9cf2111f7220d2e2"},
{file = "regex-2021.8.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:04f6b9749e335bb0d2f68c707f23bb1773c3fb6ecd10edf0f04df12a8920d468"},
{file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b006628fe43aa69259ec04ca258d88ed19b64791693df59c422b607b6ece8bb"},
{file = "regex-2021.8.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:121f4b3185feaade3f85f70294aef3f777199e9b5c0c0245c774ae884b110a2d"},
{file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:a577a21de2ef8059b58f79ff76a4da81c45a75fe0bfb09bc8b7bb4293fa18983"},
{file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1743345e30917e8c574f273f51679c294effba6ad372db1967852f12c76759d8"},
{file = "regex-2021.8.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1e8406b895aba6caa63d9fd1b6b1700d7e4825f78ccb1e5260551d168db38ed"},
{file = "regex-2021.8.28-cp39-cp39-win32.whl", hash = "sha256:ed283ab3a01d8b53de3a05bfdf4473ae24e43caee7dcb5584e86f3f3e5ab4374"},
{file = "regex-2021.8.28-cp39-cp39-win_amd64.whl", hash = "sha256:610b690b406653c84b7cb6091facb3033500ee81089867ee7d59e675f9ca2b73"},
{file = "regex-2021.8.28.tar.gz", hash = "sha256:f585cbbeecb35f35609edccb95efd95a3e35824cd7752b586503f7e6087303f1"},
]
toml = [
{file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"},
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
tomlkit = [
{file = "tomlkit-0.7.2-py2.py3-none-any.whl", hash = "sha256:173ad840fa5d2aac140528ca1933c29791b79a374a0861a80347f42ec9328117"},
{file = "tomlkit-0.7.2.tar.gz", hash = "sha256:d7a454f319a7e9bd2e249f239168729327e4dd2d27b17dc68be264ad1ce36754"},
]
tqdm = [
{file = "tqdm-4.62.2-py2.py3-none-any.whl", hash = "sha256:80aead664e6c1672c4ae20dc50e1cdc5e20eeff9b14aa23ecd426375b28be588"},
{file = "tqdm-4.62.2.tar.gz", hash = "sha256:a4d6d112e507ef98513ac119ead1159d286deab17dffedd96921412c2d236ff5"},
]
typing-extensions = [
{file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"},
{file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"},
{file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"},
]
zipp = [
{file = "zipp-3.5.0-py3-none-any.whl", hash = "sha256:957cfda87797e389580cb8b9e3870841ca991e2125350677b2ca83a0e99390a3"},
{file = "zipp-3.5.0.tar.gz", hash = "sha256:f5812b1e007e48cff63449a5e9f4e7ebea716b4111f9c4f9a645f91d579bf0c4"},
]

View file

@ -1,15 +1,50 @@
[build-system]
requires = ["setuptools>=41.0", "setuptools-scm", "wheel"]
build-backend = "setuptools.build_meta"
requires = ["poetry_core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[tool]
[tool.poetry]
name="djlint"
version="0.3.5"
description="HTML Template Linter and Formatter"
license="GPL-3.0-or-later"
authors=["Christopher Pickering <cpickering@rhc.net>"]
maintainers=["Christopher Pickering <cpickering@rhc.net>"]
readme="README.md"
repository="https://github.com/Riverside-Healthcare/djlint"
documentation="https://djlint.readthedocs.io"
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
"Operating System :: OS Independent",
]
packages = [
{ include = "djlint", from = "src" },
]
include = ["rules.yaml"]
[tool.black]
max_line_length = 99
quiet = true
[tool.poetry.dependencies]
python = "^3.6"
click = "^8.0.1"
PyYAML = "^5.4.1"
colorama = "^0.4.4"
regex = "^2021.8.28"
tqdm = "^4.62.2"
tomlkit = "^0.7.2"
coverage = { version = "^5.5", optional = true }
pytest = { version = "^6.2.5", optional = true }
pytest-cov = { version = "^2.12.1", optional = true }
[tool.poetry.extras]
test = ["coverage", "pytest", "pytest-cov"]
[tool.poetry.scripts]
djlint = "djlint:main"
[tool.isort]
multi_line_output = 3
@ -22,4 +57,4 @@ quiet = true
[tool.pylint.messages_control]
disable = "E1120, R0914, E0401, R0912, R0916, R0913, W0104, R0801, W1404"
disable = "E1120, R0914, E0401, R0912, R0916, R0913, W0104, R0801, W1404, R0902, R0903"

View file

@ -1,65 +0,0 @@
"""Djlint setup."""
from pathlib import Path
from setuptools import find_packages, setup
project_path = Path(__file__).parent
__version__ = "0.3.4"
def long_description():
"""Build long description from readme and changelog."""
return (
(project_path / "README.md").read_text(encoding="utf8")
+ "\n\n"
+ (project_path / "CHANGELOG.md").read_text(encoding="utf8")
)
test_deps = ["coverage", "pytest", "pytest-xdist", "pytest-cov"]
extras = {
"test": test_deps,
}
setup(
name="djlint",
version=__version__,
author="Christopher Pickering",
author_email="cpickering@rhc.net",
description="Django Template Linter",
long_description=long_description(),
long_description_content_type="text/markdown",
project_urls={
"Documentation": "https://djlint.readthedocs.io",
"Source": "https://github.com/Riverside-Healthcare/djlint",
},
url="",
include_package_data=True,
package_data={"djlint": ["rules.yaml"]},
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
"Operating System :: OS Independent",
],
package_dir={"": "src"},
packages=find_packages(where="src"),
python_requires=">=3.6",
install_requires=[
"click>=7.1.2",
"pyyaml>=5.4.1",
"colorama>=0.4.3",
"regex>=2020.11.13",
"tqdm>=4.61.2",
],
test_suite="tests.test_djlint",
entry_points={
"console_scripts": [
"djlint=djlint:main",
]
},
tests_require=test_deps,
extras_require=extras,
)

View file

@ -0,0 +1 @@
{% example stuff %}<p>this is a long paragraph</p>{% endexample %}

View file

@ -0,0 +1,3 @@
[tool]
[tool.djlint]
custom_blocks = "toc,example"

View file

@ -0,0 +1 @@
<div></div>

View file

@ -0,0 +1,3 @@
[tool]
[tool.djlint]
extension = "test"

View file

@ -0,0 +1 @@
{{missing space}}

View file

@ -0,0 +1,3 @@
[tool]
[tool.djlint]
ignore = "E001"

View file

@ -0,0 +1 @@
<section><p><div><span></span></div></p></section>

View file

@ -0,0 +1,3 @@
[tool]
[tool.djlint]
indent = " "

View file

@ -1,18 +1,38 @@
"""Djlint test config."""
import os
import tempfile
from pathlib import Path
from typing import Generator, TextIO
import pytest
from click.testing import CliRunner
@pytest.fixture
def runner():
yield CliRunner()
from src.djlint import main as djlint
@pytest.fixture
def tmp_file():
@pytest.fixture()
def runner() -> CliRunner:
"""Click runner for djlint tests."""
return CliRunner()
@pytest.fixture()
def tmp_file() -> Generator:
"""Create a temp file for formatting."""
# pylint: disable=R1732
tmp = tempfile.NamedTemporaryFile(delete=False)
yield tmp
tmp.close()
os.unlink(tmp.name)
def write_to_file(the_file: str, the_text: bytes) -> None:
"""Shortcode for write some bytes to a file."""
with open(the_file, mode="w+b") as open_file:
open_file.write(the_text)
def reformat(the_file: TextIO, runner: CliRunner, the_text: bytes) -> dict:
write_to_file(the_file.name, the_text)
result = runner.invoke(djlint, [the_file.name, "--reformat"])
return {"text": Path(the_file.name).read_text(), "exit_code": result.exit_code}

View file

@ -1,11 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block title %}
{% translate 'Page not found' %}
{% endblock %}
{% block content %}
<h2>{% translate 'Page not found' %}</h2>
<p>
{% translate 'Were sorry, but the requested page could not be found.' %}
</p>
{% endblock %}

View file

@ -1,21 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Server error' %}
</div>
{% endblock %}
{% block title %}
{% translate 'Server error (500)' %}
{% endblock %}
{% block content %}
<h1>
{% translate 'Server Error
<em>(500)</em>
' %}
</h1>
<p>
{% translate 'Theres been an error. Its been reported to the site administrators via email and should be fixed shortly. Thanks for your patience.' %}
</p>
{% endblock %}

View file

@ -1,44 +0,0 @@
{% load i18n %}
<div class="actions">
{% block actions %}
{% block actions-form %}
{% for field in action_form %}
{% if field.label %}
<label>
{{ field.label }}
{% endif %}
{{ field }}
{% if field.label %}</label>{% endif %}
{% endfor %}
{% endblock %}
{% block actions-submit %}
<button type="submit"
class="button"
title="{% translate "
Run the selected action" %}" name="index"
value="{{ action_index|default:0 }}">
{% translate "Go" %}
</button>
{% endblock %}
{% block actions-counter %}
{% if actions_selection_counter %}
<span class="action-counter" data-actions-icnt="{{ cl.result_list|length }}">
{{ selection_note }}
</span>
{% if cl.result_count != cl.result_list|length %}
<span class="all hidden">{{ selection_note_all }}</span>
<span class="question hidden">
<a href="#" title="{% translate ">
{% blocktranslate with cl.result_count as total_count %}
Select all {{ total_count }} {{ module_name }}
{% endblocktranslate %}
</a>
</span>
<span class="clear hidden">
<a href="#">{% translate "Clear selection" %}</a>
</span>
{% endif %}
{% endif %}
{% endblock %}
{% endblock %}
</div>

View file

@ -1,13 +0,0 @@
{% extends "admin/index.html" %}
{% load i18n %}
{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo;
{% for app in app_list %}{{ app.name }}{% endfor %}
</div>
{% endblock %}
{% endif %}
{% block sidebar %}{% endblock %}

View file

@ -1,63 +0,0 @@
{% load i18n %}
{% if app_list %}
{% for app in app_list %}
<div class="app-{{ app.app_label }} module{% if app.app_url in request.path %}current-app{% endif %}">
<table>
<caption>
<a href="{{ app.app_url }}"
class="section"
title="{% blocktranslate with name=app.name %}Models in the {{ name }} application{% endblocktranslate %}">
{{ app.name }}
</a>
</caption>
{% for model in app.models %}
<tr class="model-{{ model.object_name|lower }}{% if model.admin_url in request.path %} current-model{% endif %}">
{% if model.admin_url %}
<th scope="row">
<a href="{{ model.admin_url }}"
{% if model.admin_url in request.path %}
aria-current="page"
{% endif %}
>
{{ model.name }}
</a>
</th>
{% else %}
<th scope="row">{{ model.name }}</th>
{% endif %}
{% if model.add_url %}
<td>
<a href="{{ model.add_url }}" class="addlink">
{% translate 'Add' %}
</a>
</td>
{% else %}
<td></td>
{% endif %}
{% if model.admin_url and show_changelinks %}
{% if model.view_only %}
<td>
<a href="{{ model.admin_url }}" class="viewlink">
{% translate 'View' %}
</a>
</td>
{% else %}
<td>
<a href="{{ model.admin_url }}" class="changelink">
{% translate 'Change' %}
</a>
</td>
{% endif %}
{% elif show_changelinks %}
<td></td>
{% endif %}
</tr>
{% endfor %}
</table>
</div>
{% endfor %}
{% else %}
<p>
{% translate 'You dont have permission to view or edit anything.' %}
</p>
{% endif %}

View file

@ -1,13 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block form_top %}
{% if not is_popup %}
<p>
{% translate 'First, enter a username and password. Then, youll be able to edit more user options.' %}
</p>
{% else %}
<p>
{% translate "Enter a username and password." %}
</p>
{% endif %}
{% endblock %}

View file

@ -1,85 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% load admin_urls %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static ">
{% endblock %}
{% block bodyclass %}
{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form
{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate '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;
<a href="{% url opts|admin_urlname:'change' original.pk|admin_urlquote %}">
{{ original|truncatewords:"18" }}
</a>
&rsaquo; {% translate 'Change password' %}
</div>
{% endblock %}
{% endif %}
{% block content %}
<div id="content-main">
<form
{% if form_url %}action="{{ form_url }}" {% endif %}
method="post" id="{{ opts.model_name }}_form">
{% csrf_token %}
{% block form_top %}{% endblock %}
<input type="text" name="username" value="{{ original.get_username }}" class="hidden">
<div>
{% if is_popup %}
<input type="hidden" name="{{ is_popup_var }}" value="1">
{% endif %}
{% if form.errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}
{% translate "Please correct the error below." %}
{% else %}
{% translate "Please correct the errors below." %}
{% endif %}
</p>
{% endif %}
<p>
{% blocktranslate with username=original %}
Enter a new password for the user
<strong>{{ username }}</strong>
.
{% endblocktranslate %}
</p>
<fieldset class="module aligned">
<div class="form-row">
{{ form.password1.errors }}
{{ form.password1.label_tag }} {{ form.password1 }}
{% if form.password1.help_text %}
<div class="help">
{{ form.password1.help_text|safe }}
</div>
{% endif %}
</div>
<div class="form-row">
{{ form.password2.errors }}
{{ form.password2.label_tag }} {{ form.password2 }}
{% if form.password2.help_text %}
<div class="help">
{{ form.password2.help_text|safe }}
</div>
{% endif %}
</div>
</fieldset>
<div class="submit-row">
<input type="submit" value="{% translate 'Change password' %}" class="default">
</div>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,118 +0,0 @@
{% load i18n static %}
<!DOCTYPE html>
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
<html lang="{{ LANGUAGE_CODE|default:"en-us" }}" dir="{{ LANGUAGE_BIDI|yesno:'rtl,ltr,auto' }}">
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href=" {% block stylesheet %} {% static "admin/css/base.css" %}
{% endblock %}
">
{% if not is_popup and is_nav_sidebar_enabled %}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/nav_sidebar.css" %}">
<script src="{% static 'admin/js/nav_sidebar.js' %}" defer></script>
{% endif %}
{% block extrastyle %}{% endblock %}
{% if LANGUAGE_BIDI %}
<link rel="stylesheet" type="text/css" href=" {% block stylesheet_rtl %} {% static "admin/css/rtl.css" %}
{% endblock %}
">
{% endif %}
{% block extrahead %}{% endblock %}
{% block responsive %}
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0">
<link rel="stylesheet" type="text/css" href="{% static "admin/css/responsive.css" %}">
{% if LANGUAGE_BIDI %}
<link rel="stylesheet" type="text/css" href="{% static ">
{% endif %}
{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE">{% endblock %}
</head>
<body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}"
data-admin-utc-offset="{% now ">
<!-- Container -->
<div id="container">
{% if not is_popup %}
<!-- Header -->
{% block header %}
<div id="header">
<div id="branding">
{% block branding %}{% endblock %}
</div>
{% block usertools %}
{% if has_permission %}
<div id="user-tools">
{% block welcome-msg %}
{% translate 'Welcome,' %}
<strong>{% firstof user.get_short_name user.get_username %}</strong>
.
{% endblock %}
{% block userlinks %}
{% if site_url %}
<a href="{{ site_url }}">{% translate 'View site' %}</a>
/
{% endif %}
{% if user.is_active and user.is_staff %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% translate 'Documentation' %}</a>
/
{% endif %}
{% endif %}
{% if user.has_usable_password %}
<a href="{% url 'admin:password_change' %}">{% translate 'Change password' %}</a>
/
{% endif %}
<a href="{% url 'admin:logout' %}">{% translate 'Log out' %}</a>
{% endblock %}
</div>
{% endif %}
{% endblock %}
{% block nav-global %}{% endblock %}</div>{% endblock %}
<!-- END Header -->
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
{% if title %}&rsaquo; {{ title }}{% endif %}
</div>
{% endblock %}{% endif %}
<div class="main" id="main">
{% if not is_popup and is_nav_sidebar_enabled %}
{% block nav-sidebar %}
{% include "admin/nav_sidebar.html" %}{% endblock %}{% endif %}
<div class="content">
{% block messages %}
{% if messages %}
<ul class="messagelist">
{% for message in messages %}
<li{% if message.tags %}class="{{ message.tags }}"{% endif %}>{{ message|capfirst }}
</li>
{% endfor %}
</ul>
{% endif %}
{% endblock messages %}
<!-- Content -->
<div id="content" class="{% block coltype %}colM{% endblock %}">
{% block pretitle %}{% endblock %}
{% block content_title %}{% if title %}
<h1>{{ title }}</h1>
{% endif %}{% endblock %}
{% block content_subtitle %}{% if subtitle %}
<h2>{{ subtitle }}</h2>
{% endif %}{% endblock %}
{% block content %}
{% block object-tools %}{% endblock %}
{{ content }}
{% endblock %}
{% block sidebar %}{% endblock %}
<br class="clear">
</div>
<!-- END Content -->
{% block footer %}
<div id="footer"></div>
{% endblock %}
</div>
</div>
</div>
<!-- END Container -->
</body>
</html>

View file

@ -1,13 +0,0 @@
{% extends "admin/base.html" %}
{% block title %}
{% if subtitle %}{{ subtitle }} |{% endif %}
{{ title }} | {{ site_title|default:_('Django site admin') }}
{% endblock %}
{% block branding %}
<h1 id="site-name">
<a href="{% url 'admin:index' %}">
{{ site_header|default:_('Django administration') }}
</a>
</h1>
{% endblock %}
{% block nav-global %}{% endblock %}

View file

@ -1,97 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_modify %}
{% block extrahead %}
{{ block.super }}
<script src="{% url 'admin:jsi18n' %}"></script>
{{ media }}
{% endblock %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endblock %}
{% block coltype %}colM{% endblock %}
{% block bodyclass %}
{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form
{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo;
<a href="{% url 'admin:app_list' app_label=opts.app_label %}">
{{ opts.app_config.verbose_name }}
</a>
&rsaquo;
{% if has_view_permission %}
<a href="{% url opts|admin_urlname:'changelist' %}">
{{ opts.verbose_name_plural|capfirst }}
</a>
{% else %}
{{ opts.verbose_name_plural|capfirst }}
{% endif %}
&rsaquo;
{% if add %}
{% blocktranslate with name=opts.verbose_name %}
Add {{ name }}
{% endblocktranslate %}
{% else %}
{{ original|truncatewords:"18" }}
{% endif %}
</div>
{% endblock %}{% endif %}
{% block content %}
<div id="content-main">
{% block object-tools %}
{% if change %}
{% if not is_popup %}
<ul class="object-tools">
{% block object-tools-items %}
{% change_form_object_tools %}
{% endblock %}
</ul>
{% endif %}
{% endif %}
{% endblock %}
<form {% if has_file_field %}enctype="multipart/form-data"
{% endif %} {% if form_url %}action="{{ form_url }}"
{% endif %} method="post"
id="{{ opts.model_name }}_form">
{% csrf_token %}{% block form_top %}{% endblock %}
<div>
{% if is_popup %}
<input type="hidden" name="{{ is_popup_var }}" value="1">
{% endif %}
{% if to_field %}
<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">
{% endif %}
{% if save_on_top %}
{% block submit_buttons_top %}
{% submit_row %}{% endblock %}{% endif %}
{% if errors %}
<p class="errornote">
{% if errors|length == 1 %}{% translate "Please correct the error below." %}{% else %}
{% translate "Please correct the errors below." %}{% endif %}
</p>
{{ adminform.form.non_field_errors }}
{% endif %}
{% block field_sets %}
{% for fieldset in adminform %}
{% include "admin/includes/fieldset.html" %}{% endfor %}
{% endblock %}
{% block after_field_sets %}{% endblock %}
{% block inline_field_sets %}
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}{% endfor %}
{% endblock %}
{% block after_related_objects %}{% endblock %}
{% block submit_buttons_bottom %}
{% submit_row %}{% endblock %}
{% block admin_change_form_document_ready %}
<script id="django-admin-form-add-constants" src="{% static 'admin/js/change_form.js' %}" {% if adminform and add %}data-model-name="{{ opts.model_name }}" {% endif %} async></script>
{% endblock %}
{# JavaScript for prepopulated fields #}
{% prepopulated_fields_js %}
</div>
</form>
</div>
{% endblock %}

View file

@ -1,16 +0,0 @@
{% load i18n admin_urls %}
{% block object-tools-items %}
<li>
{% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %}
<a href="{% add_preserved_filters history_url %}" class="historylink">
{% translate "History" %}
</a>
</li>
{% if has_absolute_url %}
<li>
<a href="{{ absolute_url }}" class="viewsitelink">
{% translate "View on site" %}
</a>
</li>
{% endif %}
{% endblock %}

View file

@ -1,111 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static admin_list %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/changelists.css" %}">
{% if cl.formset %}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endif %}
{% if cl.formset or action_form %}
<script src="{% url 'admin:jsi18n' %}"></script>
{% endif %}
{{ media.css }}
{% if not actions_on_top and not actions_on_bottom %}
<style>
#changelist table thead th:first-child {width: inherit}
</style>
{% endif %}
{% endblock %}
{% block extrahead %}
{{ block.super }}
{{ media.js }}
{% endblock %}
{% block bodyclass %}
{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list
{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo;
<a href="{% url 'admin:app_list' app_label=cl.opts.app_label %}">
{{ cl.opts.app_config.verbose_name }}
</a>
&rsaquo; {{ cl.opts.verbose_name_plural|capfirst }}
</div>
{% endblock %}
{% endif %}
{% block coltype %}{% endblock %}
{% block content %}
<div id="content-main">
{% block object-tools %}
<ul class="object-tools">
{% block object-tools-items %}
{% change_list_object_tools %}
{% endblock %}
</ul>
{% endblock %}
{% if cl.formset and cl.formset.errors %}
<p class="errornote">
{% if cl.formset.total_error_count == 1 %}
{% translate "Please correct the error below." %}
{% else %}
{% translate "Please correct the errors below." %}
{% endif %}
</p>
{{ cl.formset.non_form_errors }}
{% endif %}
<div class="module{% if cl.has_filters %}filtered{% endif %}" id="changelist">
<div class="changelist-form-container">
{% block search %}
{% search_form cl %}
{% endblock %}
{% block date_hierarchy %}
{% if cl.date_hierarchy %}
{% date_hierarchy cl %}
{% endif %}
{% endblock %}
<form id="changelist-form" method="post"
{% if cl.formset and cl.formset.is_multipart %}
enctype="multipart/form-data"
{% endif %}
novalidate>
{% csrf_token %}
{% if cl.formset %}
<div>
{{ cl.formset.management_form }}
</div>
{% endif %}
{% block result_list %}
{% if action_form and actions_on_top and cl.show_admin_actions %}
{% admin_actions %}
{% endif %}
{% result_list cl %}
{% if action_form and actions_on_bottom and cl.show_admin_actions %}
{% admin_actions %}
{% endif %}
{% endblock %}
{% block pagination %}
{% pagination cl %}
{% endblock %}
</form>
</div>
{% block filters %}
{% if cl.has_filters %}
<div id="changelist-filter">
<h2>{% translate 'Filter' %}</h2>
{% if cl.has_active_filters %}
<h3 id="changelist-filter-clear">
<a href="{{ cl.clear_all_filters_qs }}">&#10006; {% translate "Clear all filters" %}</a>
</h3>
{% endif %}
{% for spec in cl.filter_specs %}
{% admin_list_filter cl spec %}
{% endfor %}
</div>
{% endif %}
{% endblock %}
</div>
</div>
{% endblock %}

View file

@ -1,13 +0,0 @@
{% load i18n admin_urls %}
{% block object-tools-items %}
{% if has_add_permission %}
<li>
{% url cl.opts|admin_urlname:'add' as add_url %}
<a href="{% add_preserved_filters add_url is_popup to_field %}" class="addlink">
{% blocktranslate with cl.opts.verbose_name as name %}
Add {{ name }}
{% endblocktranslate %}
</a>
</li>
{% endif %}
{% endblock %}

View file

@ -1,57 +0,0 @@
{% load i18n %}
{% if result_hidden_fields %}
<div class="hiddenfields">
{# DIV for HTML validation #}
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
{% if results %}
<div class="results">
<table id="result_list">
<thead>
<tr>
{% for header in result_headers %}
<th scope="col"{{ header.class_attrib }}>
{% if header.sortable %}
{% if header.sort_priority > 0 %}
<div class="sortoptions">
<a class="sortremove" href="{{ header.url_remove }}" title="{% translate "></a>
{% if num_sorted_fields > 1 %}
<span class="sortpriority"
title="{% blocktranslate with priority_number=header.sort_priority %}Sorting priority: {{ priority_number }}{% endblocktranslate %}">
{{ header.sort_priority }}
</span>
{% endif %}
<a href="{{ header.url_toggle }}"
class="toggle {% if header.ascending %}ascending{% else %}descending{% endif %}"
title="{% translate "></a>
</div>
{% endif %}
{% endif %}
<div class="text">
{% if header.sortable %}
<a href="{{ header.url_primary }}">{{ header.text|capfirst }}</a>
{% else %}
<span>{{ header.text|capfirst }}</span>
{% endif %}
</div>
<div class="clear"></div>
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
{% if result.form and result.form.non_field_errors %}
<tr>
<td colspan="{{ result|length }}">{{ result.form.non_field_errors }}</td>
</tr>
{% endif %}
<tr>
{% for item in result %}{{ item }}{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}

View file

@ -1,25 +0,0 @@
{% if show %}
<div class="xfull">
<ul class="toplinks">
{% block date-hierarchy-toplinks %}
{% block date-hierarchy-back %}
{% if back %}
<li class="date-back">
<a href="{{ back.link }}">&lsaquo; {{ back.title }}</a>
</li>
{% endif %}
{% endblock %}
{% block date-hierarchy-choices %}
{% for choice in choices %}
<li>
{% if choice.link %}<a href="{{ choice.link }}">{% endif %}
{{ choice.title }}
{% if choice.link %}</a>{% endif %}
</li>
{% endfor %}
{% endblock %}
{% endblock %}
</ul>
<br class="clear">
</div>
{% endif %}

View file

@ -1,82 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls static %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script src="{% static 'admin/js/cancel.js' %}" async></script>
{% endblock %}
{% block bodyclass %}
{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate '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;
<a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">
{{ object|truncatewords:"18" }}
</a>
&rsaquo; {% translate 'Delete' %}
</div>
{% endblock %}
{% block content %}
{% if perms_lacking %}
<p>
{% blocktranslate with escaped_object=object %}
Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:
{% endblocktranslate %}
</p>
<ul>
{% for obj in perms_lacking %}
<li>
{{ obj }}
</li>
{% endfor %}
</ul>
{% elif protected %}
<p>
{% blocktranslate with escaped_object=object %}
Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:
{% endblocktranslate %}
</p>
<ul>
{% for obj in protected %}
<li>
{{ obj }}
</li>
{% endfor %}
</ul>
{% else %}
<p>
{% blocktranslate with escaped_object=object %}
Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:
{% endblocktranslate %}
</p>
{% include "admin/includes/object_delete_summary.html" %}
<h2>{% translate "Objects" %}</h2>
<ul>
{{ deleted_objects|unordered_list }}
</ul>
<form method="post">
{% csrf_token %}
<div>
<input type="hidden" name="post" value="yes">
{% if is_popup %}
<input type="hidden" name="{{ is_popup_var }}" value="1">
{% endif %}
{% if to_field %}
<input type="hidden" name="{{ to_field_var }}" value="{{ to_field }}">
{% endif %}
<input type="submit" value="{% translate 'Yes, Im sure' %}">
<a href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
</div>
</form>
{% endif %}
{% endblock %}

View file

@ -1,78 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n l10n admin_urls static %}
{% block extrahead %}
{{ block.super }}
{{ media }}
<script src="{% static 'admin/js/cancel.js' %}" async></script>
{% endblock %}
{% block bodyclass %}
{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate '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; {% translate 'Delete multiple objects' %}
</div>
{% endblock %}
{% block content %}
{% if perms_lacking %}
<p>
{% blocktranslate %}
Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:
{% endblocktranslate %}
</p>
<ul>
{% for obj in perms_lacking %}
<li>
{{ obj }}
</li>
{% endfor %}
</ul>
{% elif protected %}
<p>
{% blocktranslate %}
Deleting the selected {{ objects_name }} would require deleting the following protected related objects:
{% endblocktranslate %}
</p>
<ul>
{% for obj in protected %}
<li>
{{ obj }}
</li>
{% endfor %}
</ul>
{% else %}
<p>
{% blocktranslate %}
Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:
{% endblocktranslate %}
</p>
{% include "admin/includes/object_delete_summary.html" %}
<h2>{% translate "Objects" %}</h2>
{% for deletable_object in deletable_objects %}
<ul>
{{ deletable_object|unordered_list }}
</ul>
{% endfor %}
<form method="post">
{% csrf_token %}
<div>
{% for obj in queryset %}
<input type="hidden" name="{{ action_checkbox_name }}" value="{{ obj.pk|unlocalize }}">
{% endfor %}
<input type="hidden" name="action" value="delete_selected">
<input type="hidden" name="post" value="yes">
<input type="submit" value="{% translate 'Yes, Im sure' %}">
<a href="#" class="button cancel-link">{% translate "No, take me back" %}</a>
</div>
</form>
{% endif %}
{% endblock %}

View file

@ -1,53 +0,0 @@
{% load i18n admin_urls %}
<div class="js-inline-admin-formset inline-group"
id="{{ inline_admin_formset.formset.prefix }}-group"
data-inline-type="stacked"
data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
<fieldset class="module {{ inline_admin_formset.classes }}">
{% if inline_admin_formset.formset.max_num == 1 %}
<h2>{{ inline_admin_formset.opts.verbose_name|capfirst }}</h2>
{% else %}
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
{% endif %}
{{ inline_admin_formset.formset.management_form }}
{{ inline_admin_formset.formset.non_form_errors }}
{% for inline_admin_form in inline_admin_formset %}
<div class="inline-related{% if inline_admin_form.original or inline_admin_form.show_url %} has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form last-related{% endif %}"
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<h3>
<b>
{{ inline_admin_formset.opts.verbose_name|capfirst }}:
</b>
<span class="inline_label">
{% if inline_admin_form.original %}
{{ inline_admin_form.original }}
{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %}
<a href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}"
class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">
{% if inline_admin_formset.has_change_permission %}{% translate "Change" %}{% else %}{% translate "View" %}{% endif %}
</a>
{% endif %}
{% else %}
#{{ forloop.counter }}
{% endif %}
</span>
{% if inline_admin_form.show_url %}
<a href="{{ inline_admin_form.absolute_url }}">
{% translate "View on site" %}
</a>
{% endif %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %}
<span class="delete">
{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}
</span>
{% endif %}
</h3>
{% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
{% for fieldset in inline_admin_form %}
{% include "admin/includes/fieldset.html" %}{% endfor %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
</div>
{% endfor %}
</fieldset>
</div>

View file

@ -1,110 +0,0 @@
{% load i18n admin_urls static admin_modify %}
<div class="js-inline-admin-formset inline-group"
id="{{ inline_admin_formset.formset.prefix }}-group"
data-inline-type="tabular"
data-inline-formset="{{ inline_admin_formset.inline_formset_data }}">
<div class="tabular inline-related {% if forloop.last %}last-related{% endif %}">
{{ inline_admin_formset.formset.management_form }}
<fieldset class="module {{ inline_admin_formset.classes }}">
{% if inline_admin_formset.formset.max_num == 1 %}
<h2>{{ inline_admin_formset.opts.verbose_name|capfirst }}</h2>
{% else %}
<h2>{{ inline_admin_formset.opts.verbose_name_plural|capfirst }}</h2>
{% endif %}
{{ inline_admin_formset.formset.non_form_errors }}
<table>
<thead>
<tr>
<th class="original"></th>
{% for field in inline_admin_formset.fields %}
{% if not field.widget.is_hidden %}
<th class="column-{{ field.name }}{% if field.required %}required{% endif %}">
{{ field.label|capfirst }}
{% if field.help_text %}
<img src="{% static "
admin/img/icon-unknown.svg" %}" class="help help-tooltip"
width="10"
height="10"
alt="({{ field.help_text|striptags }})"
title="{{ field.help_text|striptags }}">
{% endif %}
</th>
{% endif %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
<th>{% translate "Delete?" %}</th>
{% endif %}
</tr>
</thead>
<tbody>
{% for inline_admin_form in inline_admin_formset %}
{% if inline_admin_form.form.non_field_errors %}
<tr class="row-form-errors">
<td colspan="{{ inline_admin_form|cell_count }}">
{{ inline_admin_form.form.non_field_errors }}
</td>
</tr>
{% endif %}
<tr class="form-row {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last and inline_admin_formset.has_add_permission %} empty-form{% endif %}"
id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<td class="original">
{% if inline_admin_form.original or inline_admin_form.show_url %}
<p>
{% if inline_admin_form.original %}
{{ inline_admin_form.original }}
{% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %}
<a href="{% url inline_admin_form.model_admin.opts|admin_urlname:'change' inline_admin_form.original.pk|admin_urlquote %}"
class="{% if inline_admin_formset.has_change_permission %}inlinechangelink{% else %}inlineviewlink{% endif %}">
{% if inline_admin_formset.has_change_permission %}{% translate "Change" %}{% else %}{% translate "View" %}{% endif %}
</a>
{% endif %}
{% endif %}
{% if inline_admin_form.show_url %}
<a href="{{ inline_admin_form.absolute_url }}">
{% translate "View on site" %}
</a>
{% endif %}
</p>
{% endif %}
{% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %}
{% spaceless %}
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if not field.is_readonly and field.field.is_hidden %}{{ field.field }}{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% endspaceless %}
</td>
{% for fieldset in inline_admin_form %}
{% for line in fieldset %}
{% for field in line %}
{% if field.is_readonly or not field.field.is_hidden %}
<td{% if field.field.name %}class="field-{{ field.field.name }}"{% endif %}>
{% if field.is_readonly %}
<p>
{{ field.contents }}
</p>
{% else %}
{{ field.field.errors.as_ul }}
{{ field.field }}
{% endif %}
</td>
{% endif %}
{% endfor %}
{% endfor %}
{% endfor %}
{% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission %}
<td class="delete">
{% if inline_admin_form.original %}{{ inline_admin_form.deletion_field.field }}{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</fieldset>
</div>
</div>

View file

@ -1,17 +0,0 @@
{% load i18n %}
<h3>
{% blocktranslate with filter_title=title %}
By {{ filter_title }}
{% endblocktranslate %}
</h3>
<ul>
{% for choice in choices %}
<li
{% if choice.selected %}class="selected" {% endif %}
>
<a href="{{ choice.query_string|iriencode }}" title="{{ choice.display }}">
{{ choice.display }}
</a>
</li>
{% endfor %}
</ul>

View file

@ -1,37 +0,0 @@
<fieldset class="module aligned {{ fieldset.classes }}">
{% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %}
{% if fieldset.description %}
<div class="description">
{{ fieldset.description|safe }}
</div>
{% endif %}
{% for line in fieldset %}
<div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% if not line.has_visible_field %}hidden{% endif %}{% for field in line %}{% if field.field.name %}field-{{ field.field.name }}{% endif %}{% endfor %}">
{% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %}
{% for field in line %}
<div
{% if not line.fields|length_is:'1' %}
class="fieldBox {% if field.field.name %}field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}{% if field.field.is_hidden %}hidden{% endif %}"{% elif field.is_checkbox %} class="checkbox-row"{% endif %}>
{% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %}
{% if field.is_checkbox %}
{{ field.field }}{{ field.label_tag }}
{% else %}
{{ field.label_tag }}
{% if field.is_readonly %}
<div class="readonly">
{{ field.contents }}
</div>
{% else %}
{{ field.field }}
{% endif %}
{% endif %}
{% if field.field.help_text %}
<div class="help">
{{ field.field.help_text|safe }}
</div>
{% endif %}
</div>
{% endfor %}
</div>
{% endfor %}
</fieldset>

View file

@ -1,9 +0,0 @@
{% load i18n %}
<h2>{% translate "Summary" %}</h2>
<ul>
{% for model_name, object_count in model_count %}
<li>
{{ model_name|capfirst }}: {{ object_count }}
</li>
{% endfor %}
</ul>

View file

@ -1,51 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}">
{% endblock %}
{% block coltype %}colMS{% endblock %}
{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
{% block breadcrumbs %}{% endblock %}
{% block nav-sidebar %}{% endblock %}
{% block content %}
<div id="content-main">
{% include "admin/app_list.html" with app_list=app_list show_changelinks=True %}
</div>
{% endblock %}
{% block sidebar %}
<div id="content-related">
<div class="module" id="recent-actions-module">
<h2>{% translate 'Recent actions' %}</h2>
<h3>{% translate 'My actions' %}</h3>
{% load log %}
{% get_admin_log 10 as admin_log for_user user %}
{% if not admin_log %}
<p>
{% translate 'None available' %}
</p>
{% else %}
<ul class="actionlist">
{% for entry in admin_log %}
<li class="{% if entry.is_addition %}addlink{% endif %}{% if entry.is_change %}changelink{% endif %}{% if entry.is_deletion %}deletelink{% endif %}">
{% if entry.is_deletion or not entry.get_admin_url %}
{{ entry.object_repr }}
{% else %}
<a href="{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
{% endif %}
<br>
{% if entry.content_type %}
<span class="mini quiet">
{% filter capfirst %}{{ entry.content_type.name }}
{% endfilter %}
</span>
{% else %}
<span class="mini quiet">{% translate 'Unknown content' %}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,13 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {{ title }}
</div>
{% endblock %}
{% block content %}
<p>
{% translate 'Somethings wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user.' %}
</p>
{% endblock %}

View file

@ -1,64 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}">
{{ form.media }}
{% endblock %}
{% block bodyclass %}{{ block.super }} login{% endblock %}
{% block usertools %}{% endblock %}
{% block nav-global %}{% endblock %}
{% block nav-sidebar %}{% endblock %}
{% block content_title %}{% endblock %}
{% block breadcrumbs %}{% endblock %}
{% block content %}
{% if form.errors and not form.non_field_errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}
{% translate "Please correct the error below." %}
{% else %}
{% translate "Please correct the errors below." %}
{% endif %}
</p>
{% endif %}
{% if form.non_field_errors %}
{% for error in form.non_field_errors %}
<p class="errornote">
{{ error }}
</p>
{% endfor %}
{% endif %}
<div id="content-main">
{% if user.is_authenticated %}
<p class="errornote">
{% blocktranslate trimmed %}
You are authenticated as {{ username }}, but are not authorized to
access this page. Would you like to login to a different account?
{% endblocktranslate %}
</p>
{% endif %}
<form action="{{ app_path }}" method="post" id="login-form">
{% csrf_token %}
<div class="form-row">
{{ form.username.errors }}
{{ form.username.label_tag }} {{ form.username }}
</div>
<div class="form-row">
{{ form.password.errors }}
{{ form.password.label_tag }} {{ form.password }}
<input type="hidden" name="next" value="{{ next }}">
</div>
{% url 'admin_password_reset' as password_reset_url %}
{% if password_reset_url %}
<div class="password-reset-link">
<a href="{{ password_reset_url }}">
{% translate 'Forgotten your password or username?' %}
</a>
</div>
{% endif %}
<div class="submit-row">
<input type="submit" value="{% translate 'Log in' %}">
</div>
</form>
</div>
{% endblock %}

View file

@ -1,11 +0,0 @@
{% load i18n %}
<button class="sticky toggle-nav-sidebar"
id="toggle-nav-sidebar"
aria-label="{% translate 'Toggle navigation' %}"></button>
<nav class="sticky" id="nav-sidebar">
<input type="search"
id="nav-filter"
placeholder="{% translate 'Start typing to filter...' %}"
aria-label="{% translate 'Filter navigation items' %}">
{% include 'admin/app_list.html' with app_list=available_apps show_changelinks=False %}
</nav>

View file

@ -1,53 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n admin_urls %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate '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' %}">
{{ module_name }}
</a>
&rsaquo;
<a href="{% url opts|admin_urlname:'change' object.pk|admin_urlquote %}">
{{ object|truncatewords:"18" }}
</a>
&rsaquo; {% translate 'History' %}
</div>
{% endblock %}
{% block content %}
<div id="content-main">
<div class="module">
{% if action_list %}
<table id="change-history">
<thead>
<tr>
<th scope="col">{% translate 'Date/time' %}</th>
<th scope="col">{% translate 'User' %}</th>
<th scope="col">{% translate 'Action' %}</th>
</tr>
</thead>
<tbody>
{% for action in action_list %}
<tr>
<th scope="row">{{ action.action_time|date:"DATETIME_FORMAT" }}</th>
<td>
{{ action.user.get_username }}
{% if action.user.get_full_name %}({{ action.user.get_full_name }}){% endif %}
</td>
<td>{{ action.get_change_message }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>
{% translate 'This object doesnt have a change history. It probably wasnt added via this admin site.' %}
</p>
{% endif %}
</div>
</div>
{% endblock %}

View file

@ -1,23 +0,0 @@
{% load admin_list %}
{% load i18n %}
<p class="paginator">
{% if pagination_required %}
{% for i in page_range %}
{% paginator_number cl i %}
{% endfor %}
{% endif %}
{{ cl.result_count }}
{% if cl.result_count == 1 %}
{{ cl.opts.verbose_name }}
{% else %}
{{ cl.opts.verbose_name_plural }}
{% endif %}
{% if show_all_url %}
<a href="{{ show_all_url }}" class="showall">
{% translate 'Show all' %}
</a>
{% endif %}
{% if cl.formset and cl.result_count %}
<input type="submit" name="_save" class="default" value="{% translate 'Save' %}">
{% endif %}
</p>

View file

@ -1,10 +0,0 @@
{% load i18n static %}
<!DOCTYPE html>
<html>
<head>
<title>{% translate 'Popup closing…' %}</title>
</head>
<body>
<script id="django-admin-popup-response-constants" src="{% static "admin/js/popup_response.js" %}" data-popup-response="{{ popup_response_data }}"></script>
</body>
</html>

View file

@ -1,2 +0,0 @@
{% load static %}
<script id="django-admin-prepopulated-fields-constants" src="{% static "admin/js/prepopulate_init.js" %}" data-prepopulated-fields="{{ prepopulated_fields_json }}"></script>

View file

@ -1,44 +0,0 @@
{% load i18n static %}
{% if cl.search_fields %}
<div id="toolbar">
<form id="changelist-search" method="get">
<div>
<!-- DIV needed for valid HTML -->
<label for="searchbar">
<img src="{% static "admin/img/search.svg" %}" alt="Search">
</label>
<input type="text" size="40" name="{{ search_var }}" value="{{ cl.query }}" id="searchbar">
<input type="submit" value="{% translate 'Search' %}">
{% if show_result_count %}
<span class="small quiet">
{% blocktranslate count counter=cl.result_count %}
{{ counter }} result{% plural %}{{ counter }} results
{% endblocktranslate %}
(
<a href="?{% if cl.is_popup %}{{ is_popup_var }}=1{% endif %}">
{% if cl.show_full_result_count %}
{% blocktranslate with full_result_count=cl.full_result_count %}
{{ full_result_count }} total
{% endblocktranslate %}
{% else %}
{% translate "Show all" %}
{% endif %}
</a>
)
</span>
{% endif %}
{% for pair in cl.params.items %}
{% if pair.0 != search_var %}
<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}">
{% endif %}
{% endfor %}
</div>
{% if cl.search_help_text %}
<br class="clear">
<div class="help">
{{ cl.search_help_text }}
</div>
{% endif %}
</form>
</div>
{% endif %}

View file

@ -1,32 +0,0 @@
{% load i18n admin_urls %}
<div class="submit-row">
{% block submit-row %}
{% if show_save %}
<input type="submit" value="{% translate 'Save' %}" class="default" name="_save">
{% endif %}
{% if show_delete_link and original %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<p class="deletelink-box">
<a href="{% add_preserved_filters delete_url %}" class="deletelink">
{% translate "Delete" %}
</a>
</p>
{% endif %}
{% if show_save_as_new %}
<input type="submit" value="{% translate 'Save as new' %}" name="_saveasnew">
{% endif %}
{% if show_save_and_add_another %}
<input type="submit" value="{% translate 'Save and add another' %}" name="_addanother">
{% endif %}
{% if show_save_and_continue %}
<input type="submit"
value="{% if can_change %} {% translate 'Save and continue editing' %}{% else %}{% translate 'Save and view' %}{% endif %}"
name="_continue">
{% endif %}
{% if show_close %}
<a href="{% url opts|admin_urlname:'changelist' %}" class="closelink">
{% translate 'Close' %}
</a>
{% endif %}
{% endblock %}
</div>

View file

@ -1,19 +0,0 @@
{% if widget.is_initial %}
<p class="file-upload">
{{ widget.initial_text }}:
<a href="{{ widget.value.url }}">{{ widget.value }}</a>
{% if not widget.required %}
<span class="clearable-file-input">
<input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}"
{% if widget.attrs.disabled %}disabled {% endif %}
>
<label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>
</span>
{% endif %}
<br>
{{ widget.input_text }}:
{% endif %}
<input type="{{ widget.type }}" name="{{ widget.name }}"
{% include "django/forms/widgets/attrs.html" %}
>
{% if widget.is_initial %}</p>{% endif %}

View file

@ -1,11 +0,0 @@
{% include 'django/forms/widgets/input.html' %}
{% if related_url %}
<a href="{{ related_url }}" class="related-lookup" id="lookup_id_{{ widget.name }}" title="{{ link_title }}"></a>
{% endif %}
{% if link_label %}
<strong>
{% if link_url %}<a href="{{ link_url }}">{% endif %}
{{ link_label }}
{% if link_url %}</a>{% endif %}
</strong>
{% endif %}

View file

@ -1 +0,0 @@
{% include 'admin/widgets/foreign_key_raw_id.html' %}

View file

@ -1 +0,0 @@
{% include "django/forms/widgets/multiple_input.html" %}

View file

@ -1,34 +0,0 @@
{% load i18n static %}
<div class="related-widget-wrapper">
{{ rendered_widget }}
{% block links %}
{% spaceless %}
{% if not is_hidden %}
{% if can_change_related %}
<a class="related-widget-wrapper-link change-related"
id="change_id_{{ name }}"
data-href-template="{{ change_related_template_url }}?{{ url_params }}"
title="{% blocktranslate %}Change selected {{ model }}{% endblocktranslate %}">
<img src="{% static 'admin/img/icon-changelink.svg' %}" alt="{% translate 'Change' %}">
</a>
{% endif %}
{% if can_add_related %}
<a class="related-widget-wrapper-link add-related"
id="add_id_{{ name }}"
href="{{ add_related_url }}?{{ url_params }}"
title="{% blocktranslate %}Add another {{ model }}{% endblocktranslate %}">
<img src="{% static 'admin/img/icon-addlink.svg' %}" alt="{% translate 'Add' %}">
</a>
{% endif %}
{% if can_delete_related %}
<a class="related-widget-wrapper-link delete-related"
id="delete_id_{{ name }}"
data-href-template="{{ delete_related_template_url }}?{{ url_params }}"
title="{% blocktranslate %}Delete selected {{ model }}{% endblocktranslate %}">
<img src="{% static 'admin/img/icon-deletelink.svg' %}" alt="{% translate 'Delete' %}">
</a>
{% endif %}
{% endif %}
{% endspaceless %}
{% endblock %}
</div>

View file

@ -1,11 +0,0 @@
<p class="datetime">
{{ date_label }}
{% with widget=widget.subwidgets.0 %}
{% include widget.template_name %}
{% endwith %}
<br>
{{ time_label }}
{% with widget=widget.subwidgets.1 %}
{% include widget.template_name %}
{% endwith %}
</p>

View file

@ -1,9 +0,0 @@
{% if url_valid %}
<p class="url">
{{ current_label }}
<a href="{{ widget.href }}">{{ widget.value }}</a>
<br>
{{ change_label }}
{% endif %}
{% include "django/forms/widgets/input.html" %}
{% if url_valid %}</p>{% endif %}

View file

@ -1,16 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
</div>
{% endblock %}
{% block nav-sidebar %}{% endblock %}
{% block content %}
<p>
{% translate "Thanks for spending some quality time with the Web site today." %}
</p>
<p>
<a href="{% url 'admin:index' %}">{% translate 'Log in again' %}</a>
</p>
{% endblock %}

View file

@ -1,22 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% translate 'Documentation' %}</a>
/
{% endif %}
{% translate 'Change password' %} /
<a href="{% url 'admin:logout' %}">{% translate 'Log out' %}</a>
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password change' %}
</div>
{% endblock %}
{% block content %}
<p>
{% translate 'Your password was changed.' %}
</p>
{% endblock %}

View file

@ -1,69 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endblock %}
{% block userlinks %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% translate 'Documentation' %}</a>
/
{% endif %}
{% translate 'Change password' %} /
<a href="{% url 'admin:logout' %}">{% translate 'Log out' %}</a>
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password change' %}
</div>
{% endblock %}
{% block content %}
<div id="content-main">
<form method="post">
{% csrf_token %}
<div>
{% if form.errors %}
<p class="errornote">
{% if form.errors.items|length == 1 %}
{% translate "Please correct the error below." %}
{% else %}
{% translate "Please correct the errors below." %}
{% endif %}
</p>
{% endif %}
<p>
{% translate 'Please enter your old password, for securitys sake, and then enter your new password twice so we can verify you typed it in correctly.' %}
</p>
<fieldset class="module aligned wide">
<div class="form-row">
{{ form.old_password.errors }}
{{ form.old_password.label_tag }} {{ form.old_password }}
</div>
<div class="form-row">
{{ form.new_password1.errors }}
{{ form.new_password1.label_tag }} {{ form.new_password1 }}
{% if form.new_password1.help_text %}
<div class="help">
{{ form.new_password1.help_text|safe }}
</div>
{% endif %}
</div>
<div class="form-row">
{{ form.new_password2.errors }}
{{ form.new_password2.label_tag }} {{ form.new_password2 }}
{% if form.new_password2.help_text %}
<div class="help">
{{ form.new_password2.help_text|safe }}
</div>
{% endif %}
</div>
</fieldset>
<div class="submit-row">
<input type="submit" value="{% translate 'Change my password' %}" class="default">
</div>
</div>
</form>
</div>
{% endblock %}

View file

@ -1,16 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password reset' %}
</div>
{% endblock %}
{% block content %}
<p>
{% translate "Your password has been set. You may go ahead and log in now." %}
</p>
<p>
<a href="{{ login_url }}">{% translate 'Log in' %}</a>
</p>
{% endblock %}

View file

@ -1,40 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password reset confirmation' %}
</div>
{% endblock %}
{% block content %}
{% if validlink %}
<p>
{% translate "Please enter your new password twice so we can verify you typed it in correctly." %}
</p>
<form method="post">
{% csrf_token %}
<fieldset class="module aligned">
<input class="hidden" autocomplete="username" value="{{ form.user.get_username }}">
<div class="form-row field-password1">
{{ form.new_password1.errors }}
<label for="id_new_password1">{% translate 'New password:' %}</label>
{{ form.new_password1 }}
</div>
<div class="form-row field-password2">
{{ form.new_password2.errors }}
<label for="id_new_password2">{% translate 'Confirm password:' %}</label>
{{ form.new_password2 }}
</div>
<input type="submit" value="{% translate 'Change my password' %}">
</fieldset>
</form>
{% else %}
<p>
{% translate "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}
</p>
{% endif %}
{% endblock %}

View file

@ -1,16 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password reset' %}
</div>
{% endblock %}
{% block content %}
<p>
{% translate 'Weve emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly.' %}
</p>
<p>
{% translate 'If you dont receive an email, please make sure youve entered the address you registered with, and check your spam folder.' %}
</p>
{% endblock %}

View file

@ -1,15 +0,0 @@
{% load i18n %}
{% autoescape off %}
{% blocktranslate %}
You're receiving this email because you requested a password reset for your user account at {{ site_name }}.
{% endblocktranslate %}
{% translate "Please go to the following page and choose a new password:" %}
{% block reset_link %}
{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
{% endblock %}
{% translate 'Your username, in case youve forgotten:' %} {{ user.get_username }}
{% translate "Thanks for using our site!" %}
{% blocktranslate %}
The {{ site_name }} team
{% endblocktranslate %}
{% endautoescape %}

View file

@ -1,28 +0,0 @@
{% extends "admin/base_site.html" %}
{% load i18n static %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
&rsaquo; {% translate 'Password reset' %}
</div>
{% endblock %}
{% block content %}
<p>
{% translate 'Forgotten your password? Enter your email address below, and well email instructions for setting a new one.' %}
</p>
<form method="post">
{% csrf_token %}
<fieldset class="module aligned">
<div class="form-row field-email">
{{ form.email.errors }}
<label for="id_email">{% translate 'Email address:' %}</label>
{{ form.email }}
</div>
<input type="submit" value="{% translate 'Reset my password' %}">
</fieldset>
</form>
{% endblock %}

View file

@ -1,17 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block submit_buttons_bottom %}
<div class="submit-row"
{% if is_popup %}style="overflow: auto;" {% endif %}
>
<input type="submit" name="_save" class="default" value="{% trans 'Save' %}"/>
{% if not add %}
<p class="deletelink-box">
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<a href="{% add_preserved_filters delete_url %}" class="deletelink">
{% trans "Delete" %}
</a>
</p>
{% endif %}
</div>
{% endblock %}

View file

@ -1,71 +0,0 @@
{% load i18n %}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head height="100%">
<title>{{ title }}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-Language" content="en-us" />
<style type="text/css">
html,
body,
.grid {
height: 100%;
}
.header {
margin-bottom: 40px;
}
.content {
padding: 28px;
font-family: Lucida Grande;
font-size: 12px;
}
.content h1 {
font-size: 20px;
font-weight: normal;
}
.content a,
.content a:active,
.content a:visited,
.content a:hover {
text-decoration: underline;
}
.data {
line-height: 24px;
}
</style>
</head>
<body topmargin="0" leftmargin="0" marginheight="0" marginwidth="0" height="100%">
<table border="0" cellpadding="0" cellspacing="0" width="100%" height="100%" class="grid">
<tr>
<td width="100%" class="content" valign="top">
<div class="header">
<h1>{{ title }}</h1>
{% block header %}{% endblock %}
</div>
{% block content %}{% endblock %}
</td>
</tr>
<tr>
<td class="content">
<p>
{% blocktrans %}
Log in to administration
<a href="{{ login_url }}">here</a>
.
{% endblocktrans %}
</p>
<p>
Generated by
<a href="https://www.django-cms.org">django cms</a>
{% now "d.m.Y H:i:s" %}.
</p>
</td>
</tr>
</table>
</body>
</html>

View file

@ -1,10 +0,0 @@
{% load i18n %}
{{ title }}
--------------
{% block header %}{% endblock %}
{% block content %}{% endblock %}
{% blocktrans %}Login url: {{ login_url }}{% endblocktrans %}
[Generated by: http://www.django-cms.org {% now "d.m.Y H:i:s" %}.]

View file

@ -1,14 +0,0 @@
{% extends 'admin/cms/mail/base.html' %}
{% load i18n %}
{% block content %}
<table>
<tr>
<td>{% trans 'Username:' %}</td>
<td>{{ user.username }}</td>
</tr>
<tr>
<td>{% trans 'Password:' %}</td>
<td>{{ password }}</td>
</tr>
</table>
{% endblock %}

View file

@ -1,7 +0,0 @@
{% extends 'admin/cms/mail/base.txt' %}
{% load i18n %}
{% block content %}
{% trans 'Username:' %} {{ user.username }}
{% trans 'Password:' %} {{ password }}
{% endblock %}

View file

@ -1,133 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n admin_urls static admin_modify admin_urls cms_admin cms_static %}
{% block title %}
{% if add %}
{% trans 'Add a page' %}
{% else %}
{% trans "Change a page" %}
{% endif %}
{% endblock %}
{% 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;
{% if has_change_permission %}
<a href="{% url opts|admin_urlname:'changelist' %}">
{{ opts.verbose_name_plural|capfirst }}
</a>
{% else %}
{{ opts.verbose_name_plural|capfirst }}
{% endif %}
&rsaquo;
{% if add %}
{% trans 'Add' %} {{ opts.verbose_name }}
{% else %}
{{ original|truncatewords:"18" }}
{% endif %}
</div>
{% endblock %}
{% block extrahead %}
<script src="{% static "admin/js/urlify.js" %}" type="text/javascript"></script>
<script src="{% static_with_version "cms/js/dist/bundle.admin.base.min.js" %}" type="text/javascript"></script>
<script src="{% static_with_version "cms/js/dist/bundle.admin.changeform.min.js" %}" type="text/javascript"></script>
<script type="text/javascript">
if (!window.jQuery) {
window.jQuery = CMS.$;
window.$ = window.jQuery;
}
</script>
{{ block.super }}
{% endblock %}
{% block content_title %}
{% if title %}<h1>{{ title }}</h1>{% endif %}
{% if not popup and not add %}
<ul class="object-tools hide-in-modal">
<li>
{% url opts|admin_urlname:'preview_page' page.id language as admin_url %}
<a href="{{ admin_url }}" target="_parent">{% trans "View on site" %}</a>
</li>
</ul>
{% endif %}
{% endblock %}
{% block content %}
<div id="content-main">
{% block object-tools %}{% endblock %}
<form {% if has_file_field %}enctype="multipart/form-data"
{% endif %}action="?language={{ language }}{% if request.GET.parent_node %}&amp;parent_node={{ request.GET.parent_node }}{% endif %}{% if request.GET.source %}&amp;source={{ request.GET.source }}{% endif %}"
method="post"
id="page_form">
{% csrf_token %}
{% block form_top %}{% endblock %}
<div style="display: none;"><input type="hidden"
name="language"
value="{{ language }}"
id="id_language"/></div>
{% if show_language_tabs and not show_permissions %}
<div id="page_form_lang_tabs">
{% for lang_code, lang_name in language_tabs %}
<input type="button"
onclick="CMS.API.changeLanguage('./?language={{ lang_code }}');"
class="language_button {% if lang_code == language %}selected{% else %}{% if not lang_code in filled_languages %} notfilled{% endif %}{% endif %}"
id="{{ lang_code }}button"
name="{{ lang_code }}"
value="{{ lang_name }}"/>
{% endfor %}
<div class="lang_tabs_line"></div>
</div>
{% endif %}
<div id="lang_tab_content">
{% if is_popup %}<input type="hidden" name="_popup" value="1" />{% endif %}
{% if save_on_top %}{% submit_row %}{% endif %}
{% if errors %}
<p class="errornote">
{% blocktrans count errors|length as counter %}Please correct the error below.{% plural %}Please correct the errors below.{% endblocktrans %}
</p>
<ul class="errorlist">{% for error in adminform.form.non_field_errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
{% for fieldset in adminform %}
{% include "admin/cms/page/includes/fieldset.html" %}{% endfor %}
{% for inline_admin_formset in inline_admin_formsets %}
{% include inline_admin_formset.opts.template %}{% endfor %}
{% if show_permissions %}
{% if CMS_PERMISSION and can_change_permissions %}
<div class="inline-group">
<div class="tabular inline-related">
<fieldset id="inherited_permissions" class="module aligned collapse">
<h2>{% trans 'All permissions' %}</h2>
<div class="loading"
rel="../permissions/">{% trans 'Loading...' %}</div>
</fieldset>
</div>
</div>
{% endif %}
{% endif %}
{% block after_related_objects %}{% endblock %}
{% if add %}
<div class="submit-row" {% if is_popup %} style="overflow: auto;">
<input type="submit" name="_save" class="default" value="{% trans 'Save' %}"/>
<input type="submit"
name="_continue"
value="{% trans 'Save and continue editing' %}"/>
</div>
{% else %}
{% page_submit_row %}
{% endif %}
</div>
</form>
</div>
{% block admin_change_form_document_ready %}
{{ block.super }}
{% endblock %}
{% for url in unihandecode_urls %}<script src="{{ url }}" type="text/javascript"></script>{% endfor %}
{% if unihandecode_urls %}
<script>
var UNIHANDECODER = unihandecode.Unihan('{{ unihandecode_lang }}');
</script>
{% endif %}
{# JavaScript for prepopulated fields #}
{% prepopulated_fields_js %}
{% endblock %}

View file

@ -1,37 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n l10n static cms_static %}
{% block title %}
{% trans "Change a page" %}
{% endblock %}
{% block content %}
{# trick for cms to understand that the plugin was actually correctly saved #}
<div class="messagelist">
<div class="success"></div>
</div>
<script>
window.CMS || window.parent.CMS || document.write(
'<script src="{% static_with_version "cms/js/dist/bundle.admin.base.min.js" %}" type="text/javascript"><\/script>'
);
</script>
<script>
// we have a special case here cause the CMS namespace
// can be either inside the current window or the parent
(function(Window) {
// the dataBridge is used to access plugin information from different resources
// Do NOT move this!!!
Window.CMS.API.Helpers.dataBridge = {{ plugin_data|safe }};
{% if plugin_structure %}
Window.CMS.API.Helpers.dataBridge.structure = {{ plugin_structure|safe }};
{% endif %}
Window.CMS.$(document).ready(function () {
// make sure we're doing after the "modal" mechanism kicked in
setTimeout(function () {
// save current plugin
Window.CMS.API.Helpers.onPluginSave();
}, 100);
});
})(window.parent || window);
</script>
{% endblock %}

View file

@ -1 +0,0 @@
{% extends "admin/includes/fieldset.html" %}

View file

@ -1,73 +0,0 @@
{% load i18n cms_admin cms_tags admin_urls %}
{% if rows %}
<table>
<thead>
<tr>
<th>{% trans "Page" %}</th>
<th>{% trans "User" %}</th>
<th>{% trans "Group" %}</th>
<th>{% trans "Can edit" %}</th>
<th>{% trans "Can add" %}</th>
<th>{% trans "Can delete" %}</th>
<th>{% trans "Can publish" %}</th>
<th>{% trans "Can change permissions" %}</th>
<th>{% trans "Can move" %}</th>
<th>{% trans "Can view" %}</th>
<th>{% trans "Grant on" %}</th>
</tr>
</thead>
<tbody>
{% for row in rows %}
{% with permission=row.permission %}
<tr class="{% cycle 'row1' 'row2' %}">
<td class="page">
{% if row.is_global %}
{% if row.can_change %}
<a href="{% cms_admin_url 'cms_globalpagepermission_change' permission.id %}">
{% trans "(global)" %}
</a>
{% else %}
{% trans "(global)" %}
{% endif %}
{% else %}
{% if permission.page_id == page.id %}
{% trans "(current)" %}
{% else %}
{% if row.can_change %}
<a href="{% url opts|admin_urlname:'change' permission.page_id %}">
{{ permission.page }}
</a>
{% else %}
{{ permission.page }}
{% endif %}
{% endif %}
{% endif %}
</td>
<td class="user">{{ permission.user|default_if_none:"-" }}</td>
<td class="group">{{ permission.group|default_if_none:"-" }}</td>
<td class="can_change">{{ permission.can_change|boolean_icon }}</td>
<td class="can_add">{{ permission.can_add|boolean_icon }}</td>
<td class="can_delete">{{ permission.can_delete|boolean_icon }}</td>
<td class="can_publish">{{ permission.can_publish|boolean_icon }}</td>
<td class="can_change_permissions">
{{ permission.can_change_permissions|boolean_icon }}
</td>
<td class="can_move_page">{{ permission.can_move_page|boolean_icon }}</td>
<td class="can_view">{{ permission.can_view|boolean_icon }}</td>
<td class="grant_on">
{% if row.is_global %}
{% trans "All" %}
{% else %}
{{ permission.get_grant_on_display }}
{% endif %}
</td>
</tr>
{% endwith %}
{% endfor %}
</tbody>
</table>
{% else %}
<p>
{% trans "Page doesn't inherit any permissions." %}
</p>
{% endif %}

View file

@ -1,16 +0,0 @@
{% extends "admin/change_form.html" %}
{% load cms_admin cms_static %}
{% block extrahead %}
{# in case plugins require widgets, they need to have bundle here #}
<script src="{% static_with_version "cms/js/dist/bundle.admin.base.min.js" %}" type="text/javascript"></script>
<script type="text/javascript">
if (!window.jQuery) {
window.jQuery = CMS.$;
window.$ = window.jQuery;
}
</script>
{{ block.super }}
{% endblock %}
{% block submit_buttons_bottom %}
{% submit_row_plugin %}
{% endblock %}

View file

@ -1 +0,0 @@
{% extends "admin/cms/page/close_frame.html" %}

View file

@ -1,3 +0,0 @@
{% extends "admin/delete_confirmation.html" %}
{% load i18n admin_urls cms_tags %}
{% block breadcrumbs %}{% endblock %}

View file

@ -1,17 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n l10n static %}
{% block title %}
{% trans "Edit model" %}
{% endblock %}
{% block content %}
<form action="." method="post" id="cmsplugin_form">
{% csrf_token %}
<div>
<fieldset class="module aligned ">
<div class="description">
{{ message }}
</div>
</fieldset>
</div>
</form>
{% endblock %}

View file

@ -1,22 +0,0 @@
{% load i18n admin_urls cms_tags %}
<div class="submit-row">
{% if show_save %}
<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />
{% endif %}
{% if show_delete_link %}
<p class="deletelink-box">
<a href="{% cms_admin_url "cms_page_delete_plugin" original.pk %}" class="deletelink">
{% trans "Delete" %}
</a>
</p>
{% endif %}
{% if show_save_as_new %}
<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />
{% endif %}
{% if show_save_and_add_another %}
<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />
{% endif %}
{% if show_save_and_continue %}
<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />
{% endif %}
</div>

View file

@ -1,32 +0,0 @@
{% load i18n cms_tags admin_urls %}
<div class="submit-row"
{% if is_popup %}style="overflow: auto;" {% endif %}
>
{% if show_save %}
<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" />
{% endif %}
<p class="deletelink-box">
{% if show_delete_link %}
<a href="delete/" class="deletelink">{% trans "Delete" %}</a>
{% endif %}
{% if show_buttons %}
<a href="{% url opts|admin_urlname:'change' object_id %}?language={{ language }}"
class="cms-btn-group{% if basic_info_active %}cms-btn-active{% endif %}">
{% trans "Basic Settings" %}
</a>
<a href="{% url opts|admin_urlname:'advanced' object_id %}?language={{ language }}"
class="cms-btn-group{% if advanced_settings_active %}cms-btn-active{% endif %}">
{% trans "Advanced Settings" %}
</a>
{% endif %}
</p>
{% if show_save_as_new %}
<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew" />
{% endif %}
{% if show_save_and_add_another %}
<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother" />
{% endif %}
{% if show_save_and_continue %}
<input type="submit" value="{% trans 'Save and continue editing' %}" name="_continue" />
{% endif %}
</div>

View file

@ -1,154 +0,0 @@
{% load i18n admin_urls %}
{% spaceless %}
<ul class="cms-pagetree-dropdown-menu-inner">
{% block actions %}
<li
{% if has_copy_page_permission %}
class="js-cms-tree-item-copy" data-id="{{ page.pk }}" data-node-id="{{ node.pk }}" data-apphook="{{ page.application_urls|default_if_none:"" }}"
{% endif %}
>
<a
{% if not has_copy_page_permission %}class="cms-pagetree-dropdown-item-disabled" {% endif %}
href="#" title="{% filter escapejs %}{% trans "Copy" %}
{% endfilter %}
">
<span class="cms-icon cms-icon-copy"></span>
<span>
{% filter escapejs %}{% trans "Copy" %}
{% endfilter %}
<span>
</a>
</li>
<li
{% if has_move_page_permission %}
class="js-cms-tree-item-cut" data-id="{{ page.pk }}" data-node-id="{{ node.pk }}"
{% endif %}
>
<a
{% if not has_move_page_permission %}class="cms-pagetree-dropdown-item-disabled" {% endif %}
href="#" title="{% filter escapejs %}{% trans "Cut" %}{% endfilter %}
">
<span class="cms-icon cms-icon-scissors"></span>
<span>
{% filter escapejs %}{% trans "Cut" %}{% endfilter %}
<span>
</a>
</li>
<li>
<a href="#"
data-id="{{ page.pk }}"
data-node-id="{{ node.pk }}"
class="{% if has_add_permission %}js-cms-tree-item-paste{% endif %} {% if not has_add_permission or not paste_enabled %} cms-pagetree-dropdown-item-disabled{% endif %}">
<span class="cms-icon cms-icon-alias"></span>
<span>{% filter escapejs %}{% trans "Paste" %}{% endfilter %}</span>
</a>
</li>
<li>
{% if has_delete_permission %}
<a href="{% url opts|admin_urlname:'delete' page.id %}?language={{ preview_language }}"
title="{% filter escapejs %}{% trans ">
{% else %}
<a href="#" class="cms-pagetree-dropdown-item-disabled">
{% endif %}
<span class="cms-icon cms-icon-bin"></span>
<span>{% filter escapejs %}{% trans "Delete" %}...{% endfilter %}</span>
</a>
</li>
{% if has_change_permission and page.is_potential_home %}
<li class="js-cms-tree-item-set-home">
<a href="{% url opts|admin_urlname:'set_home' page.id %}"
title="{% filter escapejs %}{% trans ">
<span class="cms-icon cms-icon-home"></span>
<span>{% filter escapejs %}{% trans "Set as home" %}{% endfilter %}</span>
</a>
</li>
{% else %}
<li class="js-cms-tree-item-set-home">
<a href="#" class="cms-pagetree-dropdown-item-disabled">
<span class="cms-icon cms-icon-home"></span>
<span>{% filter escapejs %}{% trans "Set as home" %}{% endfilter %}</span>
</a>
</li>
{% endif %}
<li>
{% if has_change_advanced_settings_permission %}
<a href="{% url opts|admin_urlname:'advanced' page.id %}"
title="{% filter escapejs %}{% trans ">
{% else %}
<a href="#" class="cms-pagetree-dropdown-item-disabled">
{% endif %}
<span class="cms-icon cms-icon-cogs"></span>
<span>{% filter escapejs %}{% trans "Advanced settings" %}{% endfilter %}</span>
</a>
</li>
{% if CMS_PERMISSION %}
<li>
{% if has_change_permissions_permission %}
<a href="{% url opts|admin_urlname:'permissions' page.id %}"
title="{% filter escapejs %}{% trans ">
{% else %}
<a href="#" class="cms-pagetree-dropdown-item-disabled">
{% endif %}
<span class="cms-icon cms-icon-lock"></span>
<span>{% filter escapejs %}{% trans "Permissions" %}{% endfilter %}</span>
</a>
</li>
{% endif %}
{% endblock actions %}
<li class="cms-pagetree-dropdown-separator">
&nbsp;
</li>
<li>
{% if page.publication_date %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "publication date" %}{% endfilter %}:</strong>
{{ page.publication_date|date:"Y-m-d" }}
</p>
{% endif %}
{% if page.publication_end_date %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "publication end date" %}{% endfilter %}:</strong>
{{ page.publication_end_date|date:"Y-m-d" }}
</p>
{% endif %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "is restricted" %}{% endfilter %}:</strong>
{% if page_is_restricted %}
{% filter escapejs %}{% trans "Yes" %}{% endfilter %}
{% else %}
{% filter escapejs %}{% trans "No" %}{% endfilter %}
{% endif %}
</p>
{% if page.changed_by %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "last change by" %}{% endfilter %}:</strong>
{{ page.changed_by }}
</p>
{% endif %}
{% if page.changed_date %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "last change on" %}{% endfilter %}:</strong>
{{ page.changed_date|date:"Y-m-d H:i:s" }}
</p>
{% endif %}
{% if page.get_template_display %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "template" %}{% endfilter %}:</strong>
{{ page.get_template_display }}
</p>
{% endif %}
{% if metadata %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "meta" %}{% endfilter %}:</strong>
{{ metadata }}
</p>
{% endif %}
{% if page.site %}
<p title="{% filter escapejs %}{% trans ">
<strong>{% filter escapejs %}{% trans "site" %}{% endfilter %}:</strong>
{{ page.site }}
</p>
{% endif %}
</li>
</ul>
{% endspaceless %}

View file

@ -1,182 +0,0 @@
{% extends "admin/change_list.html" %}
{% load i18n admin_list static admin_urls cms_admin cms_js_tags cms_static cms_tags %}
{# TODO might not need that #}
{% block title %}{% trans "List of pages" %}{% endblock %}
{% block bodyclass %}{{ block.super }} change-list cms-pagetree-wrapper{% endblock %}
{% block coltype %}flex{% endblock %}
{% block date_hierarchy %}{% endblock %}
{% block pagination %}{% endblock %}
{% block extrahead %}
{{ block.super }}
{# INFO: we need to add styles here instead of "extrastyle" to avoid conflicts with adminstyle #}
<link rel="stylesheet" href="{% static_with_version 'cms/css/cms.base.css' %}">
<link rel="stylesheet" href="{% static_with_version 'cms/css/cms.pagetree.css' %}">
<script src="{% static_with_version 'cms/js/dist/bundle.admin.base.min.js' %}"></script>
<script src="{% static_with_version 'cms/js/dist/bundle.admin.pagetree.min.js' %}"></script>
{% endblock extrahead %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs cms-pagetree-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;
{{ opts.verbose_name_plural|capfirst|escape }}
{# TODO might remove this or add reset #}
{% if request.GET.q or request.POST.q %}
&rsaquo; {% trans "Search" %}
{% endif %}
</div>
{% endblock %}
{% endif %}
{% block content_title %}{% endblock %}
{% block content %}
{% spaceless %}
<div id="content-main">
<div class="cms-pagetree-root module{% if tree.is_filtered %} filtered{% endif %}" id="changelist">
<div class="cms-pagetree cms-pagetree-header">
<div class="cms-pagetree-header-cell cms-pagetree-header-cell-fluid">
<div class="cms-pagetree-header-row cms-pagetree-search-container">
<div class="cms-pagetree-header-cell">
<div class="cms-pagetree-header-title">
<h1>
{% trans "Page Tree" %} <span>({{ tree.site.name }})</span>
</h1>
</div>
{% if tree.is_filtered or request.GET.q %}
{# INFO: show reset button when filtering is active #}
<a href="{% url opts|admin_urlname:'changelist' %}" class="cms-pagetree-header-cell cms-pagetree-header-search-reset">{% trans "Reset filter"|lower %}</a>
{% endif %}
</div>
<div class="cms-pagetree-header-cell cms-pagetree-header-cell-search">
{# INFO: visible search field with filtering #}
<form method="get" class="cms-pagetree-header-search js-cms-pagetree-header-search">
<label for="field-searchbar" class="cms-hidden">{% trans "Search" %}</label>
<div class="cms-pagetree-header-filter">
<input type="text" size="40" name="q" id="field-searchbar" value="{{ tree.query }}" placeholder="{% trans "Search" %}">
<div class="cms-pagetree-header-filter-trigger js-cms-pagetree-header-filter-trigger">
<a href="#"><span class="cms-icon cms-icon-arrow"></span></a>
</div>
<div class="cms-pagetree-header-filter-container js-cms-pagetree-header-filter-container">
{% for field in changelist_form.visible_fields %}
{% render_filter_field request field %}
{% endfor %}
<a href="#" class="cms-pagetree-header-search-close js-cms-pagetree-header-search-close">
<span class="cms-icon cms-icon-close"></span>
</a>
</div>
</div>
<button type="submit" class="cms-pagetree-header-search-btn">
<span class="cms-icon cms-icon-search"></span>
</button>
</form>
</div>
</div>
</div>
<div class="cms-pagetree-header-cell cms-pagetree-header-body">
{# INFO: hidden search field with dynamic content #}
<div class="js-cms-pagetree-header-search-copy cms-hidden">
<div id="toolbar">
<form id="changelist-search" method="get">
<div><!-- DIV needed for valid HTML -->
<label for="searchbar"><img src="{% static "admin/img/search.svg" %}" alt="Search" /></label>
<input type="text" size="40" name="{{ search_var }}" value="{{ tree.query }}" id="searchbar" autofocus />
<input type="submit" value="{% trans 'Search' %}" />
{% for pair in changelist_form.get_filter_items %}
{% if pair.0 != search_var %}<input type="hidden" name="{{ pair.0 }}" value="{{ pair.1 }}"/>{% endif %}
{% endfor %}
</div>
</form>
</div>
</div>
<div class="cms-clear-mobile"></div>
{# INFO: dropdown for changing sites and recover deleted pages #}
<div class="cms-pagetree-sites-list cms-pagetree-dropdown js-cms-pagetree-dropdown">
<a href="#" class="cms-pagetree-dropdown-trigger js-cms-pagetree-dropdown-trigger">
<span class="cms-icon cms-icon-squares"></span>
</a>
<div class="cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu-condensed cms-pagetree-dropdown-menu-arrow-top-right js-cms-pagetree-dropdown-menu">
<ul class="cms-pagetree-dropdown-menu-inner">
<li>
<span class="label">{% trans "Sites" %}</span>
</li>
{% for site in tree.sites %}
<li{% if site.pk == tree.site.pk %} class="active"{% endif %}>
<a href="#{{ site.pk }}" class="js-cms-pagetree-site-trigger" data-id="{{ site.pk }}">{{ site.name }}</a>
</li>
{% endfor %}
{% if has_recover_permission %}
<li class="cms-pagetree-dropdown-separator">&nbsp;</li>
<li>
<a href="{% url opts|admin_urlname:'recoverlist' %}" class="recoverlink">
{% blocktrans with opts.verbose_name_plural|escape as name %}
Restore deleted {{ name }}
{% endblocktrans %}
</a>
</li>
{% endif %}
</ul>
</div>
{# INFO: hidden site form when using the dropdown site switcher #}
<form method="post" class="js-cms-pagetree-site-form cms-hidden">
<select name="site">
{% for site in tree.sites %}
<option value="{{ site.pk }}">{{ site.name }}</option>
{% endfor %}
</select>
{% csrf_token %}
</form>
</div>
{# INFO: "new page" button #}
{% if has_add_permission %}
<a href="{% url opts|admin_urlname:'add' %}" class="cms-pagetree-header-create cms-btn cms-btn-toolbar cms-btn-action">
{% blocktrans with opts.verbose_name|title as name %}
New {{ name }}
{% endblocktrans %}
</a>
{% endif %}
</div>
</div>
<form id="changelist-form" action="" method="post" novalidate>{% csrf_token %}
<div class="cms-pagetree cms-pagetree-section">
<h2>{% trans "Main Navigation" %}</h2>
<div class="cms-pagetree-section-nav">
{% if has_add_permission %}
<div class="cms-pagetree-dropdown js-cms-pagetree-dropdown">
<a href="#root" data-node-id="#root" data-id="#root" class="js-cms-pagetree-dropdown-trigger js-cms-pagetree-options cms-pagetree-dropdown-trigger cms-btn cms-btn-default cms-btn-no-border cms-icon cms-icon-menu">
<span class="sr-only">{% trans "Options" %}</span>
</a>
<div class="js-cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu-arrow-right-top">
<ul class="cms-pagetree-dropdown-menu-inner">
<li>
<a href="#" data-node-id="#root" data-id="#root" class="js-cms-tree-item-paste cms-pagetree-dropdown-item-disabled">
<span class="cms-icon cms-icon-alias"></span>
<span>{% trans "Paste" %}</span>
</a>
</li>
</ul>
</div>
</div>
{% endif %}
</div>
</div>
{# INFO: javascript is loaded from cms.pagetree.js #}
</form>
{# INFO: used when copying nodes #}
<div class="cms-tree-dialog js-cms-tree-dialog"></div>
</div>
</div>
{% endspaceless %}
{% endblock content %}

View file

@ -1,16 +0,0 @@
{% load i18n %}
<div class="cms-dialog js-cms-dialog js-cms-dialog-{{ dialog_id }}">
<h1>{% trans "Copy options" %}</h1>
<p>
{% trans "Choose copy options" %}
</p>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<div class="submit-row">
<input type="submit" value="{% trans 'Save' %}" class="default submit">
<input type="submit" value="{% trans 'Close' %}" class="cancel">
</div>
</form>
</div>
<div class="cms-dialog-dimmer js-cms-dialog-dimmer"></div>

View file

@ -1,13 +0,0 @@
{% load i18n %}
<h3>{{ field.label }}</h3>
<ul>
{% for choice in choices %}
<li
{% if choice.selected %}class="selected" {% endif %}
>
<a href="{{ choice.query_string|iriencode }}">
{{ choice.display }}
</a>
</li>
{% endfor %}
</ul>

View file

@ -1,75 +0,0 @@
{% load i18n %}
{% spaceless %}
<div class="cms-pagetree cms-pagetree-section cms-pagetree-section-condensed cms-pagetree-legend">
<span class="cms-pagetree-dropdown js-cms-pagetree-dropdown">
<div class="js-cms-pagetree-dropdown-trigger cms-pagetree-legend-title-wrap">
<span class="cms-icon cms-icon-info"></span>
<span class="cms-pagetree-legend-title">{% trans "Legend" %}</span>
</div>
<div class="cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu-condensed cms-pagetree-dropdown-menu-arrow-right-bottom js-cms-pagetree-dropdown-menu">
<ul class="cms-pagetree-dropdown-menu-inner">
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-pagetree-node-state cms-pagetree-node-state-published"></span>
<span>{% trans "Published" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-pagetree-node-state cms-pagetree-node-state-dirty"></span>
<span>{% trans "Changed" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-pagetree-node-state cms-pagetree-node-state-unpublished"></span>
<span>{% trans "Unpublished" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-pagetree-node-state cms-pagetree-node-state-empty"></span>
<span>{% trans "Empty" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-check-square"></span>
<span>{% trans "In menu" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-minus-square"></span>
<span>{% trans "Not in menu" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-eye"></span>
<span>{% trans "View page" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-home"></span>
<span>{% trans "Home" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-sitemap"></span>
<span>{% trans "Softroot" %}</span>
</span>
</li>
<li>
<span class="cms-pagetree-dropdown-item">
<span class="cms-icon cms-icon-puzzle"></span>
<span>{% trans "Apphook" %}</span>
</span>
</li>
</ul>
</div>
</span>
</div>
{% endspaceless %}

View file

@ -1,282 +0,0 @@
{% load i18n cms_admin admin_urls %}
{# INFO: columns are defined in base.html options #}
{% spaceless %}
<li class="cms-tree-node {{ css_class }}
{% if follow_descendants %}{% if descendants %} jstree-open{% elif node.is_branch %} jstree-closed{% endif %}{% endif %}
{% if page.reverse_id == 'page_types' %} cms-tree-node-pagetype{% endif %}
{% if node.depth == 0 %} cms-tree-node-top{% endif %}
{% if filtered %} cms-tree-node-filtered{% endif %}
{% if has_add_permission %} cms-tree-node-root-allow-children{% endif %}
{% block extra_class %}
{% if is_shared_page %}
cms-tree-node-shared-true
{% else %}
cms-tree-node-shared-false
{% endif %}
{% endblock %}
"
{% if is_popup %}onclick="opener.dismissRelatedLookupPopup(window, {{ page.id }}); return false;"{% endif %}
data-id="{{ page.pk }}"
data-node-id="{{ node.pk }}"
data-slug="{{ page.get_slug }}"
data-is-home="{{ page.is_home|yesno:"true,false" }}"
data-move-permission="{{ has_move_page_permission|yesno:"true,false" }}"
data-add-permission="{{ has_add_page_permission|yesno:"true,false" }}"
{% block extra_data %}
{% if is_shared_page %}
data-shared-page="-true"
{% else %}
data-shared-page="-false"
{% endif %}
{% endblock %}
data-colview='
<div class="cms-tree-col">
<div class="cms-tree-item-wrapper">
{% block row_icon %}
{% if page.is_home %}
<div class="cms-tree-item cms-tree-item-icons">
<div class="cms-tree-item-inner">
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans 'Home' %}{% endautoescape %}">
<span class="cms-icon cms-icon-home"></span>
</div>
</div>
</div>
{% endif %}
{% if page.soft_root %}
<div class="cms-tree-item cms-tree-item-icons">
<div class="cms-tree-item-inner">
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans 'Softroot' %}{% endautoescape %}">
<a href="{% url opts|admin_urlname:'advanced' page.id %}">
<span class="cms-icon cms-icon-sitemap"></span>
</a>
</div>
</div>
</div>
{% endif %}
{% if page.application_urls %}
<div class="cms-tree-item cms-tree-item-icons">
<div class="cms-tree-item-inner">
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% blocktrans with page.application_urls as apphook%}Application: {{ apphook }}{% endblocktrans %}{% endautoescape %}">
<a href="{% url opts|admin_urlname:'advanced' page.id %}">
<span class="cms-icon cms-icon-puzzle"></span>
</a>
</div>
</div>
</div>
{% endif %}
{% endblock %}
</div>
</div>
'
data-colpreview='
<div class="cms-tree-col">
<div class="cms-tree-item cms-tree-item-preview
{# INFO: highlight active icon when in sidebar mode #}
{% if page.id|slugify == request.GET.page_id|slugify %} cms-tree-preview-active{% endif %}">
<div class="cms-tree-item-inner cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay" data-cms-tooltip="{% autoescape on %}{% trans "View on site" %}{% endautoescape %}">
<a class="js-cms-pagetree-page-view" href="{% url opts|admin_urlname:'preview_page' page.id lang %}"{% if lang in page_languages %} target="_top"{% endif %}">
<span class="sr-only">{% autoescape on %}{% trans "View on site" %}{% endautoescape %}</span>
</a>
</div>
</div>
</div>
'
{% for lang in site_languages %}
data-col{{ lang|lower|cut:'-' }}='
<div class="cms-tree-col">
<div class="cms-tree-item {% if is_shared_page or not has_publish_permission %} cms-tree-item-disabled{% endif %} cms-tree-item-lang">
<div class="cms-tree-item-inner cms-pagetree-dropdown{% if has_publish_permission %} js-cms-pagetree-dropdown{% endif %}">
{% if has_publish_permission %}
<a href="{% url opts|admin_urlname:'preview_page' page.id lang %}"
class="cms-pagetree-dropdown-trigger js-cms-pagetree-dropdown-trigger"
{# INFO: delegate click event to parent window when in sideframe #}
{% if lang in page_languages %} target="_top"{% endif %}>
{# INFO: renders <span class="{cls}" title="{title}"></span> #}
{% tree_publish_row page lang %}
</a>
<div class="cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu-arrow-right-top js-cms-pagetree-dropdown-menu">
<ul class="cms-pagetree-dropdown-menu-inner">
<li>
<a href="{% url opts|admin_urlname:'preview_page' page.id lang %}" class="js-cms-pagetree-page-view" target="_top">
<span class="cms-icon cms-icon-eye" title="{% autoescape on %}{% blocktrans with lang|upper as language %}Preview this page in {{ language }} {% endblocktrans %}{% endautoescape %}"></span>
<span>{% autoescape on %}{% trans "Preview" %}{% endautoescape %}</span>
</a>
</li>
{# hide if page is empty #}
{% if lang in page_languages %}
{% if ancestors|items_are_published:lang %}
{% if page|is_dirty:lang or not page|is_published:lang %}
<li>
<a href="{% url opts|admin_urlname:'publish_page' page.id lang %}?redirect_language={{ preview_language }}{% if request.GET.page_id %}&amp;redirect_page_id={{ request.GET.page_id }}{% endif %}" class="js-cms-tree-lang-trigger">
<span class="cms-icon cms-icon-check-o"></span>
<span>{% autoescape on %}{% trans "Publish" %}{% endautoescape %}</span>
</a>
</li>
{% endif %}
{% if page|is_published:lang %}
<li>
<a href="{% url opts|admin_urlname:'unpublish' page.id lang %}?redirect_language={{ preview_language }}{% if request.GET.page_id %}&amp;redirect_page_id={{ request.GET.page_id }}{% endif %}" class="js-cms-tree-lang-trigger">
<span class="cms-icon cms-icon-forbidden"></span>
<span>{% autoescape on %}{% trans "Unpublish" %}{% endautoescape %}</span>
</a>
</li>
{% endif %}
{% endif %}
{% else %}
<li>
<a href="{% url opts|admin_urlname:'change' page.id %}?language={{ lang }}">
<span class="cms-icon cms-icon-cogs"></span>
<span>{% autoescape on %}{% trans "Configure" %}{% endautoescape %}</span>
</a>
</li>
{% endif %}
</ul>
</div>
{% else %}
<span class="cms-tree-lang-container">
{% tree_publish_row page lang %}
</span>
{% endif %}
</div>
</div>
</div>
'
{% endfor %}
data-colmenu='
<div class="cms-tree-col">
<div class="cms-tree-item cms-tree-item-menu{% if not has_change_permission %} cms-tree-item-disabled{% endif %} js-cms-tree-item-menu">
<div class="cms-tree-item-inner">
{% if has_change_permission %}
<a href="{% url opts|admin_urlname:'change_innavigation' page.id %}?language={{ preview_language }}&amp;{{ page.id }}={{ page.in_navigation|yesno:"1,0" }}">
{% endif %}
{% if page.in_navigation %}
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans "in menu" %}{% endautoescape %}">
<span class="cms-icon cms-icon-check-square"></span>
</div>
{% else %}
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans "not in menu" %}{% endautoescape %}">
<span class="cms-icon cms-icon-minus-square"></span>
</div>
{% endif %}
{% if has_change_permission %}
</a>
{% endif %}
</div>
</div>
</div>
'
data-coloptions='
<div class="cms-tree-col cms-tree-col-padding-sm">
<div class="cms-tree-item-wrapper">
<div class="cms-tree-item cms-tree-item-button">
<div{% if has_change_permission and has_change_advanced_settings_permission %} class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans "Page settings (SHIFT click for advanced settings)" %}{% endautoescape %}"{% endif %}>
{% if has_change_permission or has_change_advanced_settings_permission %}
<a {% if has_change_permission %}href="{% url opts|admin_urlname:'change' page.id %}?language={{ preview_language }}" {% endif %}
class="cms-btn cms-btn-default js-cms-tree-advanced-settings cms-icon cms-icon-pencil"
{% if has_change_advanced_settings_permission %}
data-url="{% url opts|admin_urlname:'advanced' page.id %}"
{% endif %}
>
{% else %}
<span class="cms-btn cms-btn-default cms-btn-disabled js-cms-tree-advanced-settings cms-icon cms-icon-pencil">
{% endif %}
<span class="sr-only">{% autoescape on %}{% trans "Page settings (SHIFT click for advanced settings)" %}{% endautoescape %}</span>
{% if has_change_permission or has_change_advanced_settings_permission %}
</a>
{% endif %}
</div>
</div>
<div class="cms-tree-item cms-tree-item-button">
<div{% if has_add_page_permission %} class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% autoescape on %}{% trans 'New sub page' %}{% endautoescape %}"{% endif %}>
{% if has_add_page_permission %}
<a href="{% url opts|admin_urlname:'add' %}?parent_node={{ node.pk }}"
class="js-cms-pagetree-add-page cms-btn cms-btn-default cms-icon cms-icon-plus">
{% else %}
<span class="cms-btn cms-btn-default cms-btn-disabled cms-icon cms-icon-plus">
{% endif %}
<span class="sr-only">{% autoescape on %}{% trans 'New sub page' %}{% endautoescape %}</span>
{% if has_add_page_permission %}
</a>
{% else %}
</span>
{% endif %}
</div>
</div>
<div class="js-cms-pagetree-actions-dropdown cms-tree-item cms-tree-item-button cms-pagetree-dropdown js-cms-pagetree-dropdown" data-lazy-url="{% url opts|admin_urlname:'actions_menu' page.id %}">
<a data-node-id="{{ node.pk }}" data-id="{{ page.pk }}" href="#" class="js-cms-pagetree-dropdown-trigger js-cms-pagetree-options cms-pagetree-dropdown-trigger cms-btn cms-btn-default cms-btn-no-border cms-icon cms-icon-menu">
<span class="sr-only">{% autoescape on %}{% trans "Options" %}{% endautoescape %}</span>
</a>
<div class="js-cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu cms-pagetree-dropdown-menu-arrow-right-top">
<div class="js-cms-pagetree-dropdown-loader cms-pagetree-dropdown-loader">
</div>
{# dummy structure #}
<ul class="cms-pagetree-dropdown-menu-inner">
<li>
<a class="cms-pagetree-dropdown-item-disabled" href="#" title="{% autoescape on %}{% trans 'Copy' %}{% endautoescape %}">
<span class="cms-icon cms-icon-copy"></span>
<span>{% autoescape on %}{% trans 'Copy' %}{% endautoescape %}<span>
</a>
</li>
<li class="">
<a href="#" class="cms-pagetree-dropdown-item-disabled" title="{% autoescape on %}{% trans 'Cut' %}{% endautoescape %}">
<span class="cms-icon cms-icon-scissors"></span>
<span>{% autoescape on %}{% trans 'Cut' %}{% endautoescape %}<span>
</a>
</li>
<li>
<a href="#" data-node-id="{{ node.pk }}" data-id="{{ page.pk }}" class="cms-pagetree-dropdown-item-disabled">
<span class="cms-icon cms-icon-alias"></span>
<span>{% autoescape on %}{% trans "Paste" %}{% endautoescape %}</span>
</a>
</li>
<li>
<a class="cms-pagetree-dropdown-item-disabled" href="#" title="{% autoescape on %}{% trans 'Delete' %}{% endautoescape %}">
<span class="cms-icon cms-icon-bin"></span>
<span>{% autoescape on %}{% trans 'Delete' %}...{% endautoescape %}</span>
</a>
</li>
<li>
<a class="cms-pagetree-dropdown-item-disabled" href="#" title="{% autoescape on %}{% trans "Advanced settings" %}{% endautoescape %}">
<span class="cms-icon cms-icon-cogs"></span>
<span>{% autoescape on %}{% trans "Advanced settings" %}{% endautoescape %}</span>
</a>
</li>
{% if CMS_PERMISSION %}
<li>
<a href="#" class="cms-pagetree-dropdown-item-disabled">
<span class="cms-icon cms-icon-lock"></span>
<span>{% autoescape on %}{% trans "Permissions" %}{% endautoescape %}</span>
</a>
</li>
{% endif %}
</ul>
</div>
</div>
</div>
</div>
'
{% block extra_cols %}{% endblock %}
>
{% language LANGUAGE_CODE %}
{{ page.get_admin_tree_title }}
{% endlanguage %}
{# INFO render children #}
{% if descendants %}
<ul>
{% show_admin_menu_for_pages descendants depth=node.depth|add:1 %}
</ul>
{% endif %}
</li>
{% endspaceless %}

View file

@ -1,48 +0,0 @@
{% extends "admin/change_form.html" %}
{% load i18n cms_tags %}
{% block extrahead %}
{{ block.super }}
<script>
// we have to wait till the window is loaded, otherwise
// the sideframe code will override the url, because every time
// the iframe is loaded, it's current url is saved in the settings
window.onload = function () {
// we have to setTimeout here because the cms.sideframe load event
// fires after this one :(
setTimeout(function () {
var CMS = window.parent.CMS;
// we need to reload the parent window once "?reload_window" is defined and
// set the new url for the sideframe with the correct language specification
if (location.href.indexOf('reload_window') > -1 && CMS) {
// save url in settings
CMS.settings.sideframe.url = window.location.href.replace(/[?&]reload_window/, '');
CMS.settings = CMS.API.Helpers.setSettings(CMS.settings);
// reload everything
CMS.API.Helpers.reloadBrowser();
}
}, 0);
}
</script>
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% cms_admin_url 'index' %}">{% trans 'Home' %}</a>
&rsaquo;
<a href="{% cms_admin_url 'app_list' app_label=opts.app_label %}">
{{ app_label|capfirst|escape }}
</a>
&rsaquo; {{ opts.verbose_name_plural|capfirst }}
&rsaquo;
{% if add %}
{% trans 'Add' %} {{ opts.verbose_name }}
{% else %}
{{ original|truncatewords:"18" }}
{% endif %}
</div>
{% endblock %}
{% block object-tools %}{% endblock %}
{% block submit_buttons_bottom %}
<div class="submit-row">
<input type="submit" value="{% trans 'Save' %}" class="default" name="_save" {{ onclick_attrib }}/>
</div>
{% endblock %}

View file

@ -1 +0,0 @@
{{ content }}

View file

@ -1 +0,0 @@
{% extends template %}

View file

@ -1,4 +0,0 @@
{% load cms_alias_tags %}
{% if request and not instance.is_recursive %}
{% render_alias_plugin instance %}
{% endif %}

View file

@ -1,9 +0,0 @@
{% load i18n cms_admin %}
<div class="cms-clipboard" data-title="{% trans 'Clipboard' %}">
<div class="cms-plugins"></div>
<div class="cms-clipboard-containers cms-dragarea cms-draggables">
{% if clipboard_plugin %}
{% include cms_toolbar.templates.drag_item_template with clipboard="true" plugin=clipboard_plugin %}
{% endif %}
</div>
</div>

View file

@ -1,2 +0,0 @@
{% if edit and placeholder %}{{ placeholder }}{% endif %}
{{ content }}

View file

@ -1,66 +0,0 @@
{% load i18n l10n cms_tags %}
<div class="cms-dragbar cms-dragbar-{{ placeholder.pk|unlocalize }}">
<div class="cms-submenu-btn cms-submenu-add cms-btn">
<span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
</div>
<div class="cms-submenu-settings cms-submenu-btn cms-btn"></div>
<div class="cms-submenu-dropdown cms-submenu-dropdown-settings" data-touch-action="pan-y">
<div class="cms-dropdown-inner">
<div class="cms-submenu-item">
<a data-cms-icon="copy" data-rel="copy" href="#">
{% trans "Copy all" %}
</a>
</div>
{% for language in placeholder.get_filled_languages %}
{% if language.code != LANGUAGE_CODE %}
<div class="cms-submenu-item">
<a data-cms-icon="copy" data-rel="copy-lang" data-language="{{ language.code }}" href="#">
{% trans "Copy from" %} {% trans language.name %}
</a>
</div>
{% endif %}
{% endfor %}
<div class="cms-submenu-item">
<a data-cms-icon="paste" data-rel="paste" href="#">
{% trans "Paste" %}
</a>
</div>
<div class="cms-submenu-item">
<a data-cms-icon="bin"
data-rel="modal"
href="{{ placeholder.get_clear_url }}?language={{ LANGUAGE_CODE }}"
data-name="{{ placeholder.get_label }}">
{% trans "Empty all" %}
</a>
</div>
{% render_extra_menu_items placeholder %}
</div>
</div>
<div class="cms-plugin-picker" data-touch-action="pan-y">
<div class="cms-quicksearch">
<label>
<input type="text" placeholder="{% trans 'Filter plugins...' %}" />
</label>
</div>
{# plugin child classes here #}
</div>
<div class="cms-dragbar-title" title="{{ placeholder.get_label }}">
{{ placeholder.get_label }}
{% if placeholder.is_static %}
<span class="cms-hover-tooltip cms-hover-tooltip-right"
tabindex="-1"
data-cms-tooltip="{% trans 'This is a static placeholder' %}">
<span class="cms-icon cms-icon-pin cms-dragarea-static-icon"></span>
</span>
{% endif %}
<span class="cms-dragbar-toggler">
<a href="#" class="cms-dragbar-expand-all" tabindex="-1">
{% trans "Expand all" %}
</a>
<a href="#" class="cms-dragbar-collapse-all" tabindex="-1">
{% trans "Collapse all" %}
</a>
</span>
</div>
</div>

View file

@ -1,79 +0,0 @@
{% load i18n l10n cms_tags %}
{% with allow_children=plugin.get_plugin_class.allow_children disable_child_plugins=plugin.get_plugin_class.disable_child_plugins %}
<div class="cms-draggable cms-draggable-{{ plugin.pk|unlocalize }} {% if not allow_children %}cms-draggable-disabled{% endif %} {% if clipboard %}cms-draggable-from-clipboard{% endif %}">
<div class="cms-dragitem cms-dragitem-handler {% if plugin.child_plugin_instances %}cms-dragitem-collapsable{% endif %}">
{% if not disabled_child %}
<div class="cms-submenu-btn cms-submenu-edit cms-btn" data-rel="edit">
<span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
</div>
<div class="cms-submenu-btn cms-submenu-add cms-btn {% if not allow_children %}cms-btn-disabled{% endif %}">
{% if not allow_children %}
<span class="cms-hover-tooltip" data-cms-tooltip="{% trans "></span>
{% else %}
<span class="cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
{% endif %}
</div>
<div class="cms-submenu cms-submenu-settings cms-submenu-btn cms-btn"></div>
{% else %}
<div class="cms-hover-tooltip cms-hover-tooltip-left cms-plugin-disabled"
tabindex="-1"
data-cms-tooltip="{% trans ">
<span class="cms-icon cms-icon-lock"></span>
</div>
{% endif %}
<div class="cms-submenu-dropdown cms-submenu-dropdown-settings">
<div class="cms-dropdown-inner">
<div class="cms-submenu-item">
<a data-cms-icon="scissors" data-rel="cut" href="#">
{% trans "Cut" %}
</a>
</div>
<div class="cms-submenu-item">
<a data-cms-icon="copy" data-rel="copy" href="#">
{% trans "Copy" %}
</a>
</div>
<div class="cms-submenu-item">
<a data-cms-icon="paste" data-rel="paste" href="#">
{% trans "Paste" %}
</a>
<span class="cms-submenu-item-paste-tooltip cms-submenu-item-paste-tooltip-empty cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
<span class="cms-submenu-item-paste-tooltip cms-submenu-item-paste-tooltip-restricted cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
<span class="cms-submenu-item-paste-tooltip cms-submenu-item-paste-tooltip-disabled cms-hover-tooltip cms-hover-tooltip-left cms-hover-tooltip-delay"
data-cms-tooltip="{% trans "></span>
</div>
<div class="cms-submenu-item">
<a data-cms-icon="bin" data-rel="delete" href="#">
{% trans "Delete" %}
</a>
</div>
{% render_extra_menu_items plugin %}
</div>
</div>
{% if not clipboard %}
<div class="cms-plugin-picker" data-touch-action="pan-y">
<div class="cms-quicksearch">
<label>
<input type="text" placeholder="{% trans 'Filter plugins...' %}" />
</label>
</div>
{# plugin child classes here #}
</div>
{% endif %}
<span class="cms-dragitem-text" title="{{ plugin.plugin_type }} ID: {{ plugin.pk }}">
<strong>{{ plugin.get_plugin_name }}</strong>
{{ plugin.get_short_description }}
</span>
</div>
<div class="cms-collapsable-container cms-hidden {% if allow_children %}cms-draggables{% endif %}">
{% if plugin.child_plugin_instances %}
{% for child in plugin.child_plugin_instances %}
{% include cms_toolbar.templates.drag_item_template with plugin=child disabled_child=disable_child_plugins %}{% endfor %}
{% endif %}
</div>
</div>
{% endwith %}

View file

@ -1,20 +0,0 @@
{% load i18n %}
<div class="cms-submenu-item cms-submenu-item-highlight">
<a href="#" data-rel="highlight" data-cms-icon="highlight">
{{ plugin }}{% trans "Highlight" %}
</a>
</div>
{% for item in items %}
<div class="cms-submenu-item">
<a href="{{ item.url }}" data-rel="{{ item.action }}"
{% if item.data %}data-post="{{ item.data }}" {% endif %}
{% if question %}data-text="{{ question }}" {% endif %}
data-on-success="REFRESH_PAGE"
{% for key, attr in item.attributes.items %}
data-{{ key }}="{{ attr }}"
{% endfor %}
>
{{ item.name }}
</a>
</div>
{% endfor %}

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