mirror of
https://github.com/Hopiu/djLint.git
synced 2026-05-02 19:04:51 +00:00
feat(formatter): added options to format css and js using jsbeautifier
This commit is contained in:
parent
2f8533f190
commit
99b5ee2c1f
19 changed files with 332 additions and 51 deletions
14
bin/index.js
14
bin/index.js
|
|
@ -127,6 +127,16 @@ function run(stdin) {
|
||||||
describe: 'Use .gitignore file to extend excludes.',
|
describe: 'Use .gitignore file to extend excludes.',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
demandOption: false,
|
demandOption: false,
|
||||||
|
})
|
||||||
|
.option('format-css', {
|
||||||
|
describe: 'Also format contents of <style> tags.',
|
||||||
|
type: 'boolean',
|
||||||
|
demandOption: false,
|
||||||
|
})
|
||||||
|
.option('format-js', {
|
||||||
|
describe: 'Also format contents of <script> tags.',
|
||||||
|
type: 'boolean',
|
||||||
|
demandOption: false,
|
||||||
}).argv;
|
}).argv;
|
||||||
|
|
||||||
// Set flags
|
// Set flags
|
||||||
|
|
@ -142,6 +152,8 @@ function run(stdin) {
|
||||||
const use_gitignore = options['use-gitignore']
|
const use_gitignore = options['use-gitignore']
|
||||||
? '--use-gitignore'
|
? '--use-gitignore'
|
||||||
: undefined;
|
: undefined;
|
||||||
|
const format_css = options['format-css'] ? '--format-css' : undefined;
|
||||||
|
const format_js = options['format-js'] ? '--format-js' : undefined;
|
||||||
const has_stdin = stdin === '' ? options._[0] : '-';
|
const has_stdin = stdin === '' ? options._[0] : '-';
|
||||||
|
|
||||||
// Set variables
|
// Set variables
|
||||||
|
|
@ -164,6 +176,8 @@ function run(stdin) {
|
||||||
indent,
|
indent,
|
||||||
profile,
|
profile,
|
||||||
ignore,
|
ignore,
|
||||||
|
format_css,
|
||||||
|
format_js,
|
||||||
].filter((x) => {
|
].filter((x) => {
|
||||||
return x !== undefined;
|
return x !== undefined;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -340,5 +340,41 @@
|
||||||
"value": "\"per-file-ignores\": {\n \"file.html\": \"H026,H025\",\n \"file_two.html\":\"H001\"\n }"
|
"value": "\"per-file-ignores\": {\n \"file.html\": \"H026,H025\",\n \"file_two.html\":\"H001\"\n }"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "format_js",
|
||||||
|
"description": {
|
||||||
|
"en": "Format contents of `script` tags using `js-beautify`. See [js-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/jsbeautifier/javascript/options.py) for all configuration options. Template syntax is not [fully supported](https://github.com/beautify-web/js-beautify/issues) in supported.",
|
||||||
|
"ru": "Форматирование содержимого тегов `script` с помощью `js-beautify`. Все параметры конфигурации см. в [js-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/jsbeautifier/javascript/options.py). Синтаксис шаблона не [полностью поддерживается](https://github.com/beautify-web/js-beautify/issues) в поддерживается.",
|
||||||
|
"fr": "Formate le contenu des balises `script` en utilisant `js-beautify`. Voir [js-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/jsbeautifier/javascript/options.py) pour toutes les options de configuration. La syntaxe des modèles n'est pas [entièrement prise en charge] (https://github.com/beautify-web/js-beautify/issues) dans pris en charge."
|
||||||
|
},
|
||||||
|
"usage": [
|
||||||
|
{
|
||||||
|
"name": "pyproject.toml",
|
||||||
|
"value": "[tool.djlint]\nformat_js=true\n\n[tool.djlint.js]\nindent_size=5\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": ".djlintrc",
|
||||||
|
"value": "\"format_js\": true\n\"js\": {\n \"indent_size\": 5\n }"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "format_css",
|
||||||
|
"description": {
|
||||||
|
"en": "Format contents of `script` tags using `css-beautify`. See [css-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/cssbeautifier/css/options.py) for all configuration options. Template syntax is not [fully supported](https://github.com/beautify-web/js-beautify/issues) in supported.",
|
||||||
|
"ru": "Форматирование содержимого тегов `script` с помощью `css-beautify`. Все параметры конфигурации см. в [css-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/cssbeautifier/css/options.py). Синтаксис шаблона не [полностью поддерживается](https://github.com/beautify-web/js-beautify/issues) в поддерживается.",
|
||||||
|
"fr": "Formate le contenu des balises `script` en utilisant `css-beautify`. Voir [css-beautify](https://github.com/beautify-web/js-beautify/blob/main/python/cssbeautifier/css/options.py) pour toutes les options de configuration. La syntaxe des modèles n'est pas [entièrement prise en charge] (https://github.com/beautify-web/js-beautify/issues) dans pris en charge."
|
||||||
|
},
|
||||||
|
"usage": [
|
||||||
|
{
|
||||||
|
"name": "pyproject.toml",
|
||||||
|
"value": "[tool.djlint]\nformat_css=true\n\n[tool.djlint.css]\nindent_size=5\n"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": ".djlintrc",
|
||||||
|
"value": "\"format_css\": true\n\"css\": {\n \"indent_size\": 5\n }"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@ To format the code and update files run:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
djlint . --reformat
|
djlint . --reformat
|
||||||
|
|
||||||
|
# how about formatting scripts and styles?
|
||||||
|
djlint . --reformat --format-css --format-js
|
||||||
```
|
```
|
||||||
|
|
||||||
<div class="box notification is-info is-light">
|
<div class="box notification is-info is-light">
|
||||||
|
|
|
||||||
|
|
@ -30,24 +30,26 @@ Usage: djlint [OPTIONS] SRC ...
|
||||||
djLint · lint and reformat HTML templates.
|
djLint · lint and reformat HTML templates.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--version Show the version and exit.
|
--version Show the version and exit.
|
||||||
-e, --extension TEXT File extension to check [default: html]
|
-e, --extension TEXT File extension to check [default: html]
|
||||||
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
||||||
--reformat Reformat the file(s).
|
--reformat Reformat the file(s).
|
||||||
--check Check formatting on the file(s).
|
--check Check formatting on the file(s).
|
||||||
--indent INTEGER Indent spacing. [default: 4]
|
--indent INTEGER Indent spacing. [default: 4]
|
||||||
--quiet Do not print diff when reformatting.
|
--quiet Do not print diff when reformatting.
|
||||||
--profile TEXT Enable defaults by template language. ops: django,
|
--profile TEXT Enable defaults by template language. ops: django,
|
||||||
jinja, nunjucks, handlebars, golang, angular,
|
jinja, nunjucks, handlebars, golang, angular,
|
||||||
html [default: html]
|
html [default: html]
|
||||||
--require-pragma Only format or lint files that starts with a comment
|
--require-pragma Only format or lint files that starts with a comment
|
||||||
with the text 'djlint:on'
|
with the text 'djlint:on'
|
||||||
--lint Lint for common issues. [default option]
|
--lint Lint for common issues. [default option]
|
||||||
--use-gitignore Use .gitignore file to extend excludes.
|
--use-gitignore Use .gitignore file to extend excludes.
|
||||||
--warn Return errors as warnings.
|
--warn Return errors as warnings.
|
||||||
--preserve-leading-space Attempt to preserve leading space on text.
|
--preserve-leading-space Attempt to preserve leading space on text.
|
||||||
--preserve-blank-lines Attempt to preserve blank lines.
|
--preserve-blank-lines Attempt to preserve blank lines.
|
||||||
-h, --help Show this message and exit.
|
--format-css Also format contents of <style> tags.
|
||||||
|
--format-js Also format contents of <script> tags.
|
||||||
|
-h, --help Show this message and exit.
|
||||||
```
|
```
|
||||||
|
|
||||||
{% admonition
|
{% admonition
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@ Pour formater le code et exécuter les fichiers de mise à jour :
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
djlint . --reformat
|
djlint . --reformat
|
||||||
|
|
||||||
|
# qu'en est-il des scripts et des styles de mise en forme ?
|
||||||
|
djlint . --reformat --format-css --format-js
|
||||||
```
|
```
|
||||||
|
|
||||||
<div class="box notification is-info is-light">
|
<div class="box notification is-info is-light">
|
||||||
|
|
|
||||||
|
|
@ -30,24 +30,26 @@ Usage: djlint [OPTIONS] SRC ...
|
||||||
djLint · lint and reformat HTML templates.
|
djLint · lint and reformat HTML templates.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--version Show the version and exit.
|
--version Show the version and exit.
|
||||||
-e, --extension TEXT File extension to check [default: html]
|
-e, --extension TEXT File extension to check [default: html]
|
||||||
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
||||||
--reformat Reformat the file(s).
|
--reformat Reformat the file(s).
|
||||||
--check Check formatting on the file(s).
|
--check Check formatting on the file(s).
|
||||||
--indent INTEGER Indent spacing. [default: 4]
|
--indent INTEGER Indent spacing. [default: 4]
|
||||||
--quiet Do not print diff when reformatting.
|
--quiet Do not print diff when reformatting.
|
||||||
--profile TEXT Enable defaults by template language. ops: django,
|
--profile TEXT Enable defaults by template language. ops: django,
|
||||||
jinja, nunjucks, handlebars, golang, angular,
|
jinja, nunjucks, handlebars, golang, angular,
|
||||||
html [default: html]
|
html [default: html]
|
||||||
--require-pragma Only format or lint files that starts with a comment
|
--require-pragma Only format or lint files that starts with a comment
|
||||||
with the text 'djlint:on'
|
with the text 'djlint:on'
|
||||||
--lint Lint for common issues. [default option]
|
--lint Lint for common issues. [default option]
|
||||||
--use-gitignore Use .gitignore file to extend excludes.
|
--use-gitignore Use .gitignore file to extend excludes.
|
||||||
--warn Return errors as warnings.
|
--warn Return errors as warnings.
|
||||||
--preserve-leading-space Attempt to preserve leading space on text.
|
--preserve-leading-space Attempt to preserve leading space on text.
|
||||||
--preserve-blank-lines Attempt to preserve blank lines.
|
--preserve-blank-lines Attempt to preserve blank lines.
|
||||||
-h, --help Show this message and exit.
|
--format-css Also format contents of <style> tags.
|
||||||
|
--format-js Also format contents of <script> tags.
|
||||||
|
-h, --help Show this message and exit.
|
||||||
```
|
```
|
||||||
|
|
||||||
{% admonition
|
{% admonition
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@ djlint . --check
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
djlint . --reformat
|
djlint . --reformat
|
||||||
|
|
||||||
|
# как насчет скриптов и стилей форматирования?
|
||||||
|
djlint . --reformat --format-css --format-js
|
||||||
```
|
```
|
||||||
|
|
||||||
<div class="box notification is-info is-light">
|
<div class="box notification is-info is-light">
|
||||||
|
|
|
||||||
|
|
@ -30,24 +30,26 @@ Usage: djlint [OPTIONS] SRC ...
|
||||||
djLint · lint and reformat HTML templates.
|
djLint · lint and reformat HTML templates.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
--version Show the version and exit.
|
--version Show the version and exit.
|
||||||
-e, --extension TEXT File extension to check [default: html]
|
-e, --extension TEXT File extension to check [default: html]
|
||||||
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
-i, --ignore TEXT Codes to ignore. ex: "H014,H017"
|
||||||
--reformat Reformat the file(s).
|
--reformat Reformat the file(s).
|
||||||
--check Check formatting on the file(s).
|
--check Check formatting on the file(s).
|
||||||
--indent INTEGER Indent spacing. [default: 4]
|
--indent INTEGER Indent spacing. [default: 4]
|
||||||
--quiet Do not print diff when reformatting.
|
--quiet Do not print diff when reformatting.
|
||||||
--profile TEXT Enable defaults by template language. ops: django,
|
--profile TEXT Enable defaults by template language. ops: django,
|
||||||
jinja, nunjucks, handlebars, golang, angular,
|
jinja, nunjucks, handlebars, golang, angular,
|
||||||
html [default: html]
|
html [default: html]
|
||||||
--require-pragma Only format or lint files that starts with a comment
|
--require-pragma Only format or lint files that starts with a comment
|
||||||
with the text 'djlint:on'
|
with the text 'djlint:on'
|
||||||
--lint Lint for common issues. [default option]
|
--lint Lint for common issues. [default option]
|
||||||
--use-gitignore Use .gitignore file to extend excludes.
|
--use-gitignore Use .gitignore file to extend excludes.
|
||||||
--warn Return errors as warnings.
|
--warn Return errors as warnings.
|
||||||
--preserve-leading-space Attempt to preserve leading space on text.
|
--preserve-leading-space Attempt to preserve leading space on text.
|
||||||
--preserve-blank-lines Attempt to preserve blank lines.
|
--preserve-blank-lines Attempt to preserve blank lines.
|
||||||
-h, --help Show this message and exit.
|
--format-css Also format contents of <style> tags.
|
||||||
|
--format-js Also format contents of <script> tags.
|
||||||
|
-h, --help Show this message and exit.
|
||||||
```
|
```
|
||||||
|
|
||||||
{% admonition
|
{% admonition
|
||||||
|
|
|
||||||
57
poetry.lock
generated
57
poetry.lock
generated
|
|
@ -77,6 +77,27 @@ tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.1
|
||||||
[package.extras]
|
[package.extras]
|
||||||
toml = ["tomli"]
|
toml = ["tomli"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cssbeautifier"
|
||||||
|
version = "1.14.4"
|
||||||
|
description = "CSS unobfuscator and beautifier."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
editorconfig = ">=0.12.2"
|
||||||
|
jsbeautifier = "*"
|
||||||
|
six = ">=1.13.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "editorconfig"
|
||||||
|
version = "0.12.3"
|
||||||
|
description = "EditorConfig File Locator and Interpreter for Python"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "execnet"
|
name = "execnet"
|
||||||
version = "1.9.0"
|
version = "1.9.0"
|
||||||
|
|
@ -143,6 +164,18 @@ requirements_deprecated_finder = ["pipreqs", "pip-api"]
|
||||||
colors = ["colorama (>=0.4.3,<0.5.0)"]
|
colors = ["colorama (>=0.4.3,<0.5.0)"]
|
||||||
plugins = ["setuptools"]
|
plugins = ["setuptools"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsbeautifier"
|
||||||
|
version = "1.14.4"
|
||||||
|
description = "JavaScript unobfuscator and beautifier."
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
editorconfig = ">=0.12.2"
|
||||||
|
six = ">=1.13.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mypy-extensions"
|
name = "mypy-extensions"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
|
|
@ -299,6 +332,14 @@ category = "main"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "six"
|
||||||
|
version = "1.16.0"
|
||||||
|
description = "Python 2 and 3 compatibility utilities"
|
||||||
|
category = "main"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tomli"
|
name = "tomli"
|
||||||
version = "2.0.1"
|
version = "2.0.1"
|
||||||
|
|
@ -354,7 +395,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-
|
||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "1.1"
|
lock-version = "1.1"
|
||||||
python-versions = "^3.7,<4.0"
|
python-versions = "^3.7,<4.0"
|
||||||
content-hash = "9e46ab4d8e14c063f669ba48e3f0bb696067b5bdfc916679597e1449f1454eb9"
|
content-hash = "2c02767bc8b9ddc8b1b693082fc2660d2dbeb4d188b108499dd0e923628ef396"
|
||||||
|
|
||||||
[metadata.files]
|
[metadata.files]
|
||||||
atomicwrites = [
|
atomicwrites = [
|
||||||
|
|
@ -441,6 +482,13 @@ coverage = [
|
||||||
{file = "coverage-6.4.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97"},
|
{file = "coverage-6.4.2-pp36.pp37.pp38-none-any.whl", hash = "sha256:e2618cb2cf5a7cc8d698306e42ebcacd02fb7ef8cfc18485c59394152c70be97"},
|
||||||
{file = "coverage-6.4.2.tar.gz", hash = "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe"},
|
{file = "coverage-6.4.2.tar.gz", hash = "sha256:6c3ccfe89c36f3e5b9837b9ee507472310164f352c9fe332120b764c9d60adbe"},
|
||||||
]
|
]
|
||||||
|
cssbeautifier = [
|
||||||
|
{file = "cssbeautifier-1.14.4.tar.gz", hash = "sha256:107eb1408cd5770361f9044e107102aa1ec03f2a547908a37bf1777000d3b18b"},
|
||||||
|
]
|
||||||
|
editorconfig = [
|
||||||
|
{file = "EditorConfig-0.12.3-py3-none-any.whl", hash = "sha256:6b0851425aa875b08b16789ee0eeadbd4ab59666e9ebe728e526314c4a2e52c1"},
|
||||||
|
{file = "EditorConfig-0.12.3.tar.gz", hash = "sha256:57f8ce78afcba15c8b18d46b5170848c88d56fd38f05c2ec60dbbfcb8996e89e"},
|
||||||
|
]
|
||||||
execnet = [
|
execnet = [
|
||||||
{file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
|
{file = "execnet-1.9.0-py2.py3-none-any.whl", hash = "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142"},
|
||||||
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
|
{file = "execnet-1.9.0.tar.gz", hash = "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5"},
|
||||||
|
|
@ -465,6 +513,9 @@ isort = [
|
||||||
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
|
{file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"},
|
||||||
{file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
|
{file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"},
|
||||||
]
|
]
|
||||||
|
jsbeautifier = [
|
||||||
|
{file = "jsbeautifier-1.14.4.tar.gz", hash = "sha256:729fa6c0fe935b2666f3fead7ec576f911ae6e8d7bdf578f9b2fb92ba377bbb3"},
|
||||||
|
]
|
||||||
mypy-extensions = [
|
mypy-extensions = [
|
||||||
{file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
|
{file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
|
||||||
{file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
|
{file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
|
||||||
|
|
@ -620,6 +671,10 @@ regex = [
|
||||||
{file = "regex-2022.1.18-cp39-cp39-win_amd64.whl", hash = "sha256:ebaeb93f90c0903233b11ce913a7cb8f6ee069158406e056f884854c737d2442"},
|
{file = "regex-2022.1.18-cp39-cp39-win_amd64.whl", hash = "sha256:ebaeb93f90c0903233b11ce913a7cb8f6ee069158406e056f884854c737d2442"},
|
||||||
{file = "regex-2022.1.18.tar.gz", hash = "sha256:97f32dc03a8054a4c4a5ab5d761ed4861e828b2c200febd4e46857069a483916"},
|
{file = "regex-2022.1.18.tar.gz", hash = "sha256:97f32dc03a8054a4c4a5ab5d761ed4861e828b2c200febd4e46857069a483916"},
|
||||||
]
|
]
|
||||||
|
six = [
|
||||||
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
|
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||||
|
]
|
||||||
tomli = [
|
tomli = [
|
||||||
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
{file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
|
||||||
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
{file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,8 @@ pathspec = "^0.9.0"
|
||||||
importlib-metadata = "^4.11.0"
|
importlib-metadata = "^4.11.0"
|
||||||
html-void-elements = "^0.1.0"
|
html-void-elements = "^0.1.0"
|
||||||
html-tag-names = "^0.1.2"
|
html-tag-names = "^0.1.2"
|
||||||
|
jsbeautifier = "^1.14.4"
|
||||||
|
cssbeautifier = "^1.14.4"
|
||||||
|
|
||||||
[tool.poetry.dev-dependencies]
|
[tool.poetry.dev-dependencies]
|
||||||
black = "^22.1.0"
|
black = "^22.1.0"
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,16 @@ from .src import get_src
|
||||||
is_flag=True,
|
is_flag=True,
|
||||||
help="Attempt to preserve blank lines.",
|
help="Attempt to preserve blank lines.",
|
||||||
)
|
)
|
||||||
|
@click.option(
|
||||||
|
"--format-css",
|
||||||
|
is_flag=True,
|
||||||
|
help="Also format contents of <style> tags.",
|
||||||
|
)
|
||||||
|
@click.option(
|
||||||
|
"--format-js",
|
||||||
|
is_flag=True,
|
||||||
|
help="Also format contents of <script> tags.",
|
||||||
|
)
|
||||||
@colorama_text(autoreset=True)
|
@colorama_text(autoreset=True)
|
||||||
def main(
|
def main(
|
||||||
src: List[str],
|
src: List[str],
|
||||||
|
|
@ -120,6 +130,8 @@ def main(
|
||||||
warn: bool,
|
warn: bool,
|
||||||
preserve_leading_space: bool,
|
preserve_leading_space: bool,
|
||||||
preserve_blank_lines: bool,
|
preserve_blank_lines: bool,
|
||||||
|
format_css: bool,
|
||||||
|
format_js: bool,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""djLint · HTML template linter and formatter."""
|
"""djLint · HTML template linter and formatter."""
|
||||||
config = Config(
|
config = Config(
|
||||||
|
|
@ -137,6 +149,8 @@ def main(
|
||||||
warn=warn,
|
warn=warn,
|
||||||
preserve_leading_space=preserve_leading_space,
|
preserve_leading_space=preserve_leading_space,
|
||||||
preserve_blank_lines=preserve_blank_lines,
|
preserve_blank_lines=preserve_blank_lines,
|
||||||
|
format_css=format_css,
|
||||||
|
format_js=format_js,
|
||||||
)
|
)
|
||||||
|
|
||||||
temp_file = None
|
temp_file = None
|
||||||
|
|
|
||||||
38
src/djlint/formatter/css.py
Normal file
38
src/djlint/formatter/css.py
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
"""djLint function to call cssbeautify."""
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
|
import cssbeautifier
|
||||||
|
import regex as re
|
||||||
|
from jsbeautifier.javascript.options import BeautifierOptions
|
||||||
|
|
||||||
|
from ..settings import Config
|
||||||
|
|
||||||
|
|
||||||
|
def format_css(html: str, config: Config) -> str:
|
||||||
|
"""Format css inside <style> tags."""
|
||||||
|
|
||||||
|
def launch_formatter(config: Config, match: re.Match) -> str:
|
||||||
|
"""Add break after if not in ignored block."""
|
||||||
|
indent = len(match.group(1)) * " "
|
||||||
|
inner_indent = indent + config.indent
|
||||||
|
opts = BeautifierOptions(config.css_config)
|
||||||
|
beautified = (
|
||||||
|
"\n"
|
||||||
|
+ inner_indent
|
||||||
|
+ ("\n" + inner_indent).join(
|
||||||
|
cssbeautifier.beautify(match.group(3), opts).splitlines()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return match.group(1) + match.group(2) + beautified + "\n" + indent
|
||||||
|
|
||||||
|
func = partial(launch_formatter, config)
|
||||||
|
|
||||||
|
return re.sub(
|
||||||
|
re.compile(
|
||||||
|
r"([ ]*?)(<style\b.*?>)(.+?)(?=</style>)",
|
||||||
|
re.IGNORECASE | re.DOTALL,
|
||||||
|
),
|
||||||
|
func,
|
||||||
|
html,
|
||||||
|
)
|
||||||
39
src/djlint/formatter/js.py
Normal file
39
src/djlint/formatter/js.py
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
"""djLint function to call jsbeautify."""
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
|
import jsbeautifier
|
||||||
|
import regex as re
|
||||||
|
from jsbeautifier.javascript.options import BeautifierOptions
|
||||||
|
|
||||||
|
from ..settings import Config
|
||||||
|
|
||||||
|
|
||||||
|
def format_js(html: str, config: Config) -> str:
|
||||||
|
"""Format javascript inside <script> tags."""
|
||||||
|
|
||||||
|
def launch_formatter(config: Config, match: re.Match) -> str:
|
||||||
|
"""Add break after if not in ignored block."""
|
||||||
|
indent = len(match.group(1)) * " "
|
||||||
|
inner_indent = indent + config.indent
|
||||||
|
opts = BeautifierOptions(config.js_config)
|
||||||
|
|
||||||
|
beautified = (
|
||||||
|
"\n"
|
||||||
|
+ inner_indent
|
||||||
|
+ ("\n" + inner_indent).join(
|
||||||
|
jsbeautifier.beautify(match.group(3), opts).splitlines()
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return match.group(1) + match.group(2) + beautified + "\n" + indent
|
||||||
|
|
||||||
|
func = partial(launch_formatter, config)
|
||||||
|
|
||||||
|
return re.sub(
|
||||||
|
re.compile(
|
||||||
|
r"([ ]*?)(<script\b.*?>)(.+?)(?=</script>)",
|
||||||
|
re.IGNORECASE | re.DOTALL,
|
||||||
|
),
|
||||||
|
func,
|
||||||
|
html,
|
||||||
|
)
|
||||||
|
|
@ -8,8 +8,10 @@ from pathlib import Path
|
||||||
|
|
||||||
from .formatter.compress import compress_html
|
from .formatter.compress import compress_html
|
||||||
from .formatter.condense import condense_html
|
from .formatter.condense import condense_html
|
||||||
|
from .formatter.css import format_css
|
||||||
from .formatter.expand import expand_html
|
from .formatter.expand import expand_html
|
||||||
from .formatter.indent import indent_html
|
from .formatter.indent import indent_html
|
||||||
|
from .formatter.js import format_js
|
||||||
from .settings import Config
|
from .settings import Config
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -23,9 +25,13 @@ def reformat_file(config: Config, this_file: Path) -> dict:
|
||||||
|
|
||||||
condensed = condense_html(expanded, config)
|
condensed = condense_html(expanded, config)
|
||||||
|
|
||||||
indented = indent_html(condensed, config)
|
beautified_code = indent_html(condensed, config)
|
||||||
|
|
||||||
beautified_code = indented
|
if config.format_css:
|
||||||
|
beautified_code = format_css(beautified_code, config)
|
||||||
|
|
||||||
|
if config.format_js:
|
||||||
|
beautified_code = format_js(beautified_code, config)
|
||||||
|
|
||||||
if config.check is not True:
|
if config.check is not True:
|
||||||
# update the file
|
# update the file
|
||||||
|
|
|
||||||
|
|
@ -193,6 +193,8 @@ class Config:
|
||||||
warn: bool = False,
|
warn: bool = False,
|
||||||
preserve_leading_space: bool = False,
|
preserve_leading_space: bool = False,
|
||||||
preserve_blank_lines: bool = False,
|
preserve_blank_lines: bool = False,
|
||||||
|
format_css: bool = False,
|
||||||
|
format_js: bool = False,
|
||||||
):
|
):
|
||||||
|
|
||||||
self.reformat = reformat
|
self.reformat = reformat
|
||||||
|
|
@ -239,6 +241,13 @@ class Config:
|
||||||
"preserve_blank_lines", False
|
"preserve_blank_lines", False
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.format_js: bool = format_js or djlint_settings.get("format_js", False)
|
||||||
|
|
||||||
|
self.js_config = djlint_settings.get("js")
|
||||||
|
self.css_config = djlint_settings.get("css")
|
||||||
|
|
||||||
|
self.format_css: bool = format_css or djlint_settings.get("format_css", False)
|
||||||
|
|
||||||
# ignore is based on input and also profile
|
# ignore is based on input and also profile
|
||||||
self.ignore: str = str(ignore or djlint_settings.get("ignore", ""))
|
self.ignore: str = str(ignore or djlint_settings.get("ignore", ""))
|
||||||
|
|
||||||
|
|
|
||||||
0
tests/test_config/test_scripts_styles/__init__.py
Normal file
0
tests/test_config/test_scripts_styles/__init__.py
Normal file
17
tests/test_config/test_scripts_styles/html.html
Normal file
17
tests/test_config/test_scripts_styles/html.html
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
<div>
|
||||||
|
<script>
|
||||||
|
__jsnlog_configure = function(JL) {
|
||||||
|
JL.setOptions({
|
||||||
|
"defaultAjaxUrl": "/analytics/trace"
|
||||||
|
})
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
__jsnlog_configure(JL);
|
||||||
|
} catch (e) {};
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<style>
|
||||||
|
.body {
|
||||||
|
width: 12px
|
||||||
|
}
|
||||||
|
</style>
|
||||||
9
tests/test_config/test_scripts_styles/pyproject.toml
Normal file
9
tests/test_config/test_scripts_styles/pyproject.toml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
[tool.djlint]
|
||||||
|
format_js = true
|
||||||
|
format_css = true
|
||||||
|
|
||||||
|
[tool.djlint.js]
|
||||||
|
indent_size = 5
|
||||||
|
|
||||||
|
[tool.djlint.css]
|
||||||
|
indent_size = 3
|
||||||
27
tests/test_config/test_scripts_styles/test_config.py
Normal file
27
tests/test_config/test_scripts_styles/test_config.py
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
"""Djlint tests specific to .djlintrc configuration.
|
||||||
|
|
||||||
|
run::
|
||||||
|
|
||||||
|
pytest tests/test_config/test_json/test_config.py --cov=src/djlint --cov-branch \
|
||||||
|
--cov-report xml:coverage.xml --cov-report term-missing
|
||||||
|
|
||||||
|
pytest tests/test_config/test_json/test_config.py::test_config
|
||||||
|
|
||||||
|
"""
|
||||||
|
# pylint: disable=C0116
|
||||||
|
|
||||||
|
from click.testing import CliRunner
|
||||||
|
|
||||||
|
from src.djlint import main as djlint
|
||||||
|
|
||||||
|
|
||||||
|
def test_config(runner: CliRunner) -> None:
|
||||||
|
result = runner.invoke(
|
||||||
|
djlint,
|
||||||
|
[
|
||||||
|
"tests/test_config/test_scripts_styles/html.html",
|
||||||
|
"--check",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
print(result.output)
|
||||||
|
assert result.exit_code == 0
|
||||||
Loading…
Reference in a new issue