djlint 1.28.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/.coveragerc +9 -0
  2. package/.editorconfig +21 -0
  3. package/.flake8 +0 -0
  4. package/.github/FUNDING.yml +2 -0
  5. package/.github/ISSUE_TEMPLATE/config.yml +6 -0
  6. package/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  7. package/.github/ISSUE_TEMPLATE/formatter_but_report.md +30 -0
  8. package/.github/ISSUE_TEMPLATE/linter_bug_report.md +34 -0
  9. package/.github/ISSUE_TEMPLATE/translation.md +14 -0
  10. package/.github/config.yml +4 -0
  11. package/.github/pull_request_template.md +10 -0
  12. package/.github/workflows/cancel.yml +17 -0
  13. package/.github/workflows/demo.yml +98 -0
  14. package/.github/workflows/issues.yml +23 -0
  15. package/.github/workflows/linkcheck.yaml +21 -0
  16. package/.github/workflows/lint.yml +25 -0
  17. package/.github/workflows/release.yml +57 -0
  18. package/.github/workflows/test.yml +85 -0
  19. package/.pre-commit-config.yaml +45 -0
  20. package/.pre-commit-hooks.yaml +71 -0
  21. package/.prettierignore +7 -0
  22. package/.prettierrc +11 -0
  23. package/.releaserc +16 -0
  24. package/CHANGELOG.md +13 -0
  25. package/MANIFEST.in +2 -0
  26. package/build_demo.sh +17 -0
  27. package/docs/.eleventy.js +425 -0
  28. package/docs/.eleventyignore +2 -0
  29. package/docs/.prettierignore +3 -0
  30. package/docs/.prettierrc +11 -0
  31. package/docs/package.json +73 -0
  32. package/docs/readme.md +17 -0
  33. package/docs/src/_data/configuration.json +646 -0
  34. package/docs/src/_data/eleventyComputed.js +22 -0
  35. package/docs/src/_data/i18n/index.js +159 -0
  36. package/docs/src/_data/js.js +7 -0
  37. package/docs/src/_data/locales.js +17 -0
  38. package/docs/src/_data/site.json +8 -0
  39. package/docs/src/_includes/demo.njk +157 -0
  40. package/docs/src/_includes/docs_layout.njk +34 -0
  41. package/docs/src/_includes/foot.njk +26 -0
  42. package/docs/src/_includes/index.njk +187 -0
  43. package/docs/src/_includes/languages_layout.njk +11 -0
  44. package/docs/src/_includes/layout.njk +111 -0
  45. package/docs/src/_includes/nav.njk +85 -0
  46. package/docs/src/_utils/minify-html.js +14 -0
  47. package/docs/src/_utils/rollupper.js +91 -0
  48. package/docs/src/_utils/scripts.11ty.js +27 -0
  49. package/docs/src/demo.njk +4 -0
  50. package/docs/src/docs/best-practices.md +78 -0
  51. package/docs/src/docs/changelog.md +452 -0
  52. package/docs/src/docs/configuration.md +145 -0
  53. package/docs/src/docs/docs.json +4 -0
  54. package/docs/src/docs/formatter.md +82 -0
  55. package/docs/src/docs/getting-started.md +126 -0
  56. package/docs/src/docs/ignoring-code.md +75 -0
  57. package/docs/src/docs/integrations.md +120 -0
  58. package/docs/src/docs/languages/angular.md +31 -0
  59. package/docs/src/docs/languages/django.md +40 -0
  60. package/docs/src/docs/languages/golang.md +31 -0
  61. package/docs/src/docs/languages/handlebars.md +31 -0
  62. package/docs/src/docs/languages/jinja.md +39 -0
  63. package/docs/src/docs/languages/languages.json +3 -0
  64. package/docs/src/docs/languages/mustache.md +31 -0
  65. package/docs/src/docs/languages/nunjucks.md +39 -0
  66. package/docs/src/docs/languages/twig.md +41 -0
  67. package/docs/src/docs/linter.md +199 -0
  68. package/docs/src/fr/demo.njk +4 -0
  69. package/docs/src/fr/docs/best-practices.md +78 -0
  70. package/docs/src/fr/docs/changelog.md +452 -0
  71. package/docs/src/fr/docs/configuration.md +144 -0
  72. package/docs/src/fr/docs/docs.json +3 -0
  73. package/docs/src/fr/docs/formatter.md +83 -0
  74. package/docs/src/fr/docs/getting-started.md +127 -0
  75. package/docs/src/fr/docs/ignoring-code.md +75 -0
  76. package/docs/src/fr/docs/integrations.md +100 -0
  77. package/docs/src/fr/docs/languages/angular.md +31 -0
  78. package/docs/src/fr/docs/languages/django.md +31 -0
  79. package/docs/src/fr/docs/languages/golang.md +31 -0
  80. package/docs/src/fr/docs/languages/handlebars.md +31 -0
  81. package/docs/src/fr/docs/languages/jinja.md +31 -0
  82. package/docs/src/fr/docs/languages/languages.json +3 -0
  83. package/docs/src/fr/docs/languages/mustache.md +31 -0
  84. package/docs/src/fr/docs/languages/nunjucks.md +31 -0
  85. package/docs/src/fr/docs/languages/twig.md +31 -0
  86. package/docs/src/fr/docs/linter.md +207 -0
  87. package/docs/src/fr/fr.json +4 -0
  88. package/docs/src/fr/index.njk +4 -0
  89. package/docs/src/index.njk +4 -0
  90. package/docs/src/lib/generate-content-hash.js +13 -0
  91. package/docs/src/robots.txt +4 -0
  92. package/docs/src/ru/demo.njk +4 -0
  93. package/docs/src/ru/docs/best-practices.md +78 -0
  94. package/docs/src/ru/docs/changelog.md +453 -0
  95. package/docs/src/ru/docs/configuration.md +142 -0
  96. package/docs/src/ru/docs/docs.json +3 -0
  97. package/docs/src/ru/docs/formatter.md +82 -0
  98. package/docs/src/ru/docs/getting-started.md +127 -0
  99. package/docs/src/ru/docs/ignoring-code.md +75 -0
  100. package/docs/src/ru/docs/integrations.md +100 -0
  101. package/docs/src/ru/docs/languages/angular.md +31 -0
  102. package/docs/src/ru/docs/languages/django.md +31 -0
  103. package/docs/src/ru/docs/languages/golang.md +31 -0
  104. package/docs/src/ru/docs/languages/handlebars.md +31 -0
  105. package/docs/src/ru/docs/languages/jinja.md +31 -0
  106. package/docs/src/ru/docs/languages/languages.json +3 -0
  107. package/docs/src/ru/docs/languages/mustache.md +31 -0
  108. package/docs/src/ru/docs/languages/nunjucks.md +31 -0
  109. package/docs/src/ru/docs/languages/twig.md +31 -0
  110. package/docs/src/ru/docs/linter.md +126 -0
  111. package/docs/src/ru/index.njk +4 -0
  112. package/docs/src/ru/ru.json +4 -0
  113. package/docs/src/sitemap.njk +16 -0
  114. package/docs/src/static/css/site.scss +467 -0
  115. package/docs/src/static/font/fontawesome/stylesheet.scss +78 -0
  116. package/docs/src/static/img/apple-touch-icon.png +0 -0
  117. package/docs/src/static/img/demo-min.gif +0 -0
  118. package/docs/src/static/img/demo.gif +0 -0
  119. package/docs/src/static/img/demo.webm +0 -0
  120. package/docs/src/static/img/favicon-16x16.png +0 -0
  121. package/docs/src/static/img/favicon-32x32.png +0 -0
  122. package/docs/src/static/img/favicon.ico +0 -0
  123. package/docs/src/static/img/icon-square.indd +0 -0
  124. package/docs/src/static/img/icon-square.png +0 -0
  125. package/docs/src/static/img/icon.png +0 -0
  126. package/docs/src/static/img/logo-192x192.png +0 -0
  127. package/docs/src/static/img/logo-512x512.png +0 -0
  128. package/docs/src/static/img/logos/angular.png +0 -0
  129. package/docs/src/static/img/logos/django.png +0 -0
  130. package/docs/src/static/img/logos/golang.png +0 -0
  131. package/docs/src/static/img/logos/handlebars.png +0 -0
  132. package/docs/src/static/img/logos/jinja.png +0 -0
  133. package/docs/src/static/img/logos/mustache.png +0 -0
  134. package/docs/src/static/img/logos/nunjucks.png +0 -0
  135. package/docs/src/static/img/logos/twig.png +0 -0
  136. package/docs/src/static/img/old_demo.gif +0 -0
  137. package/docs/src/static/img/style.css +122 -0
  138. package/docs/src/static/js/animate.js +69 -0
  139. package/docs/src/static/js/editor.js +171 -0
  140. package/docs/src/static/js/hamburger.js +19 -0
  141. package/docs/src/static/js/modal.js +47 -0
  142. package/docs/src/static/js/worker.js +142 -0
  143. package/docs/src/static/py/EditorConfig-99-py3-none-any.whl +0 -0
  144. package/docs/src/static/py/PyYAML-99-py3-none-any.whl +0 -0
  145. package/docs/src/static/py/click-99-py3-none-any.whl +0 -0
  146. package/docs/src/static/py/colorama-99-py3-none-any.whl +0 -0
  147. package/docs/src/static/py/cssbeautifier-99-py3-none-any.whl +0 -0
  148. package/docs/src/static/py/djlint-99-py3-none-any.whl +0 -0
  149. package/docs/src/static/py/html_tag_names-99-py3-none-any.whl +0 -0
  150. package/docs/src/static/py/html_void_elements-99-py3-none-any.whl +0 -0
  151. package/docs/src/static/py/jsbeautifier-99-py3-none-any.whl +0 -0
  152. package/docs/src/static/py/json5-99-py3-none-any.whl +0 -0
  153. package/docs/src/static/py/pathspec-99-py3-none-any.whl +0 -0
  154. package/docs/src/static/py/regex-2023.5.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl +0 -0
  155. package/docs/src/static/py/six-1.16.0-py2.py3-none-any.whl +0 -0
  156. package/docs/src/static/py/tomli-2.0.1-py3-none-any.whl +0 -0
  157. package/docs/src/static/py/tqdm-4.65.0-py3-none-any.whl +0 -0
  158. package/icon.xcf +0 -0
  159. package/package.json +4 -33
  160. package/poetry.lock +835 -0
  161. package/pyproject.toml +100 -0
  162. package/renovate.json +44 -0
  163. package/scripts/updateVersion.js +16 -0
  164. package/src/djlint/__init__.py +451 -0
  165. package/src/djlint/__main__.py +4 -0
  166. package/src/djlint/formatter/__init__.py +1 -0
  167. package/src/djlint/formatter/attributes.py +212 -0
  168. package/src/djlint/formatter/compress.py +64 -0
  169. package/src/djlint/formatter/condense.py +221 -0
  170. package/src/djlint/formatter/css.py +60 -0
  171. package/src/djlint/formatter/expand.py +111 -0
  172. package/src/djlint/formatter/indent.py +418 -0
  173. package/src/djlint/formatter/js.py +58 -0
  174. package/src/djlint/helpers.py +321 -0
  175. package/src/djlint/lint.py +128 -0
  176. package/src/djlint/output.py +220 -0
  177. package/src/djlint/reformat.py +63 -0
  178. package/src/djlint/rules/H025.py +65 -0
  179. package/src/djlint/rules.yaml +279 -0
  180. package/src/djlint/settings.py +969 -0
  181. package/src/djlint/src.py +91 -0
  182. package/tests/__init__.py +0 -0
  183. package/tests/conftest.py +239 -0
  184. package/tests/test_cli.py +71 -0
  185. package/tests/test_config/__init__.py +0 -0
  186. package/tests/test_config/test_blank_line_after_tag.py +135 -0
  187. package/tests/test_config/test_blank_line_before_tag.py +141 -0
  188. package/tests/test_config/test_close_void_tags.py +31 -0
  189. package/tests/test_config/test_custom_blocks.py +56 -0
  190. package/tests/test_config/test_custom_html.py +45 -0
  191. package/tests/test_config/test_djlintrc/.djlintrc +38 -0
  192. package/tests/test_config/test_djlintrc/__init__.py +0 -0
  193. package/tests/test_config/test_djlintrc/test_config.py +44 -0
  194. package/tests/test_config/test_djlintrc_custom/.djlint-cust +38 -0
  195. package/tests/test_config/test_djlintrc_custom/.djlintrc +2 -0
  196. package/tests/test_config/test_djlintrc_custom/__init__.py +0 -0
  197. package/tests/test_config/test_djlintrc_custom/test_config.py +48 -0
  198. package/tests/test_config/test_excludes/__init__.py +0 -0
  199. package/tests/test_config/test_excludes/excluded.html +1 -0
  200. package/tests/test_config/test_excludes/foo/excluded.html +1 -0
  201. package/tests/test_config/test_excludes/html.html +1 -0
  202. package/tests/test_config/test_excludes/pyproject.toml +3 -0
  203. package/tests/test_config/test_excludes/test_config.py +30 -0
  204. package/tests/test_config/test_extension/__init__.py +0 -0
  205. package/tests/test_config/test_extension/html.test +1 -0
  206. package/tests/test_config/test_extension/pyproject.toml +3 -0
  207. package/tests/test_config/test_extension/test_config.py +27 -0
  208. package/tests/test_config/test_files/.djlintrc_global +9 -0
  209. package/tests/test_config/test_files/test.html +3 -0
  210. package/tests/test_config/test_files/test_config.py +123 -0
  211. package/tests/test_config/test_files/test_two.html +1 -0
  212. package/tests/test_config/test_format_attribute_template_tags.py +280 -0
  213. package/tests/test_config/test_format_css.py +197 -0
  214. package/tests/test_config/test_format_js.py +220 -0
  215. package/tests/test_config/test_gitignore/__init__.py +0 -0
  216. package/tests/test_config/test_gitignore/html_one.html +1 -0
  217. package/tests/test_config/test_gitignore/html_two.html +1 -0
  218. package/tests/test_config/test_gitignore/test_config.py +142 -0
  219. package/tests/test_config/test_ignore/__init__.py +0 -0
  220. package/tests/test_config/test_ignore/html.html +1 -0
  221. package/tests/test_config/test_ignore/html_two.html +12 -0
  222. package/tests/test_config/test_ignore/pyproject.toml +3 -0
  223. package/tests/test_config/test_ignore/test_config.py +32 -0
  224. package/tests/test_config/test_ignore_blocks.py +45 -0
  225. package/tests/test_config/test_ignore_case.py +39 -0
  226. package/tests/test_config/test_indent.py +63 -0
  227. package/tests/test_config/test_linter_output_format/__init__.py +0 -0
  228. package/tests/test_config/test_linter_output_format/html-one.html +1 -0
  229. package/tests/test_config/test_linter_output_format/html-two.html +1 -0
  230. package/tests/test_config/test_linter_output_format/pyproject.toml +3 -0
  231. package/tests/test_config/test_linter_output_format/test_config.py +34 -0
  232. package/tests/test_config/test_max_attribute_length.py +100 -0
  233. package/tests/test_config/test_max_line_length.py +94 -0
  234. package/tests/test_config/test_per_file_ignores/__init__.py +0 -0
  235. package/tests/test_config/test_per_file_ignores/html.html +2 -0
  236. package/tests/test_config/test_per_file_ignores/pyproject.toml +2 -0
  237. package/tests/test_config/test_per_file_ignores/test_config.py +25 -0
  238. package/tests/test_config/test_pragmas/__init__.py +0 -0
  239. package/tests/test_config/test_pragmas/html_five.html +2 -0
  240. package/tests/test_config/test_pragmas/html_four.html +5 -0
  241. package/tests/test_config/test_pragmas/html_one.html +1 -0
  242. package/tests/test_config/test_pragmas/html_six.html +2 -0
  243. package/tests/test_config/test_pragmas/html_three.html +4 -0
  244. package/tests/test_config/test_pragmas/html_two.html +2 -0
  245. package/tests/test_config/test_pragmas/pyproject.toml +3 -0
  246. package/tests/test_config/test_pragmas/test_config.py +142 -0
  247. package/tests/test_config/test_preserve_blank_lines.py +109 -0
  248. package/tests/test_config/test_preserve_leading_space.py +159 -0
  249. package/tests/test_config/test_profile/__init__.py +0 -0
  250. package/tests/test_config/test_profile/html.html +2 -0
  251. package/tests/test_config/test_profile/pyproject.toml +3 -0
  252. package/tests/test_config/test_profile/test_config.py +64 -0
  253. package/tests/test_config/test_pyproject/__init__.py +0 -0
  254. package/tests/test_config/test_pyproject/blank.html +0 -0
  255. package/tests/test_config/test_pyproject/pyproject.toml +36 -0
  256. package/tests/test_config/test_pyproject/test_config.py +44 -0
  257. package/tests/test_django/__init__.py +0 -0
  258. package/tests/test_django/test_asset.py +32 -0
  259. package/tests/test_django/test_autoescape.py +25 -0
  260. package/tests/test_django/test_block.py +29 -0
  261. package/tests/test_django/test_blocktrans.py +236 -0
  262. package/tests/test_django/test_blocktrans_trimmed.py +283 -0
  263. package/tests/test_django/test_comments.py +164 -0
  264. package/tests/test_django/test_filter.py +30 -0
  265. package/tests/test_django/test_for.py +34 -0
  266. package/tests/test_django/test_if.py +34 -0
  267. package/tests/test_django/test_ifchanged.py +37 -0
  268. package/tests/test_django/test_include.py +24 -0
  269. package/tests/test_django/test_load.py +24 -0
  270. package/tests/test_django/test_quoted.py +34 -0
  271. package/tests/test_django/test_spaceless.py +30 -0
  272. package/tests/test_django/test_tag_spaces.py +35 -0
  273. package/tests/test_django/test_templatetag.py +40 -0
  274. package/tests/test_django/test_verbatim.py +24 -0
  275. package/tests/test_django/test_with.py +32 -0
  276. package/tests/test_djlint/-.html +1 -0
  277. package/tests/test_djlint/__init__.py +0 -0
  278. package/tests/test_djlint/bad.html +6 -0
  279. package/tests/test_djlint/bad.html.dj +23 -0
  280. package/tests/test_djlint/bad.html.dj2 +2 -0
  281. package/tests/test_djlint/multiple_files/a/a.html +1 -0
  282. package/tests/test_djlint/multiple_files/b/b1.html +1 -0
  283. package/tests/test_djlint/multiple_files/b/b2.html +1 -0
  284. package/tests/test_djlint/test_djlint.py +242 -0
  285. package/tests/test_golang/__init__.py +0 -0
  286. package/tests/test_golang/test_if.py +24 -0
  287. package/tests/test_golang/test_range.py +24 -0
  288. package/tests/test_handlebars/__init__.py +0 -0
  289. package/tests/test_handlebars/test_each.py +34 -0
  290. package/tests/test_handlebars/test_else.py +24 -0
  291. package/tests/test_handlebars/test_with.py +24 -0
  292. package/tests/test_html/__init__.py +0 -0
  293. package/tests/test_html/test_alpinejs.py +65 -0
  294. package/tests/test_html/test_attributes.py +935 -0
  295. package/tests/test_html/test_aurelia.py +24 -0
  296. package/tests/test_html/test_basics.py +905 -0
  297. package/tests/test_html/test_bracket_same_line.py +177 -0
  298. package/tests/test_html/test_case.py +81 -0
  299. package/tests/test_html/test_cdata.py +34 -0
  300. package/tests/test_html/test_comments.py +333 -0
  301. package/tests/test_html/test_css.py +193 -0
  302. package/tests/test_html/test_doctype_declarations.py +202 -0
  303. package/tests/test_html/test_ignored.py +193 -0
  304. package/tests/test_html/test_interpolation.py +56 -0
  305. package/tests/test_html/test_line_break_after_multiline_tag.py +95 -0
  306. package/tests/test_html/test_next_line_empty.py +53 -0
  307. package/tests/test_html/test_selfclosing.py +55 -0
  308. package/tests/test_html/test_single_attribute_per_line.py +87 -0
  309. package/tests/test_html/test_srcset.py +43 -0
  310. package/tests/test_html/test_svg.py +104 -0
  311. package/tests/test_html/test_symbol_entities.py +34 -0
  312. package/tests/test_html/test_tag_code.py +24 -0
  313. package/tests/test_html/test_tag_dd.py +24 -0
  314. package/tests/test_html/test_tag_details_summary.py +24 -0
  315. package/tests/test_html/test_tag_dt.py +24 -0
  316. package/tests/test_html/test_tag_fig_caption.py +29 -0
  317. package/tests/test_html/test_tag_hr.py +29 -0
  318. package/tests/test_html/test_tag_picture.py +32 -0
  319. package/tests/test_html/test_tag_pre.py +45 -0
  320. package/tests/test_html/test_tag_script.py +516 -0
  321. package/tests/test_html/test_tag_small.py +24 -0
  322. package/tests/test_html/test_tag_span.py +119 -0
  323. package/tests/test_html/test_tag_textarea.py +82 -0
  324. package/tests/test_html/test_tags.py +842 -0
  325. package/tests/test_html/test_text.py +34 -0
  326. package/tests/test_html/test_whitespace.py +477 -0
  327. package/tests/test_html/test_yaml.py +156 -0
  328. package/tests/test_jinja/__init__.py +0 -0
  329. package/tests/test_jinja/test_call.py +34 -0
  330. package/tests/test_jinja/test_parenthesis.py +24 -0
  331. package/tests/test_linter/__init__.py +0 -0
  332. package/tests/test_linter/test_custom_rules/.djlint_rules.yaml +6 -0
  333. package/tests/test_linter/test_custom_rules/__init__.py +0 -0
  334. package/tests/test_linter/test_custom_rules/html.html +1 -0
  335. package/tests/test_linter/test_custom_rules/pyproject.toml +1 -0
  336. package/tests/test_linter/test_custom_rules/test_linter.py +29 -0
  337. package/tests/test_linter/test_custom_rules_bad/.djlint_rules.yaml +24 -0
  338. package/tests/test_linter/test_custom_rules_bad/__init__.py +0 -0
  339. package/tests/test_linter/test_custom_rules_bad/html.html +1 -0
  340. package/tests/test_linter/test_custom_rules_bad/pyproject.toml +1 -0
  341. package/tests/test_linter/test_custom_rules_bad/test_linter.py +29 -0
  342. package/tests/test_linter/test_django_linter.py +476 -0
  343. package/tests/test_linter/test_h005.py +45 -0
  344. package/tests/test_linter/test_h006.py +81 -0
  345. package/tests/test_linter/test_h007.py +45 -0
  346. package/tests/test_linter/test_h008.py +60 -0
  347. package/tests/test_linter/test_h009.py +45 -0
  348. package/tests/test_linter/test_h010.py +44 -0
  349. package/tests/test_linter/test_h037.py +150 -0
  350. package/tests/test_linter/test_ignore_rules.py +45 -0
  351. package/tests/test_linter/test_jinja_linter.py +227 -0
  352. package/tests/test_linter/test_linter.py +691 -0
  353. package/tests/test_linter/test_nunjucks_linter.py +59 -0
  354. package/tests/test_linter/test_python_module_rules/.djlint_rules.yaml +4 -0
  355. package/tests/test_linter/test_python_module_rules/__init__.py +0 -0
  356. package/tests/test_linter/test_python_module_rules/html_bad.html +3 -0
  357. package/tests/test_linter/test_python_module_rules/html_ok.html +3 -0
  358. package/tests/test_linter/test_python_module_rules/my_module.py +32 -0
  359. package/tests/test_linter/test_python_module_rules/pyproject.toml +1 -0
  360. package/tests/test_linter/test_python_module_rules/test_linter.py +26 -0
  361. package/tests/test_nunjucks/__init__.py +0 -0
  362. package/tests/test_nunjucks/test_functions.py +94 -0
  363. package/tests/test_nunjucks/test_macros.py +41 -0
  364. package/tests/test_nunjucks/test_set.py +206 -0
  365. package/tests/test_nunjucks/test_spaceless.py +24 -0
  366. package/tests/test_twig/__init__.py +0 -0
  367. package/tests/test_twig/test_comments.py +51 -0
  368. package/tox.ini +48 -0
@@ -0,0 +1,126 @@
1
+ ---
2
+ description: djLint HTML Template linter включает более 30 правил! Найти определения можно здесь. Легко расширить, включив пользовательские правила!
3
+ title: Правила Линтера
4
+ keywords: облицовка шаблонов, форматер шаблонов, djLint, HTML, шаблоны, форматер, линтер, использование, правила
5
+ ---
6
+
7
+ # Использование вкладышей
8
+
9
+ djLint включает в себя множество правил для проверки стиля и валидности ваших шаблонов. Используйте все преимущества линтера, настроив его на использование предустановленного профиля для выбранного вами языка шаблонов.
10
+
11
+ ```bash
12
+ djlint /path/to/templates --lint
13
+
14
+ # with custom extensions
15
+ djlint /path/to/templates -e html.dj --profile=django
16
+
17
+ # or to file
18
+ djlint /path/to/this.html.j2 --profile=jinja
19
+ ```
20
+
21
+ <div class="box notification is-info is-light">
22
+ <span class="icon is-large"><i class="fas fa-2x fa-circle-arrow-right"></i></span><div class="my-auto ml-3 is-inline-block"><a href="/ru/docs/configuration/">Ознакомьтесь с руководством по настройке, чтобы узнать обо всех возможностях!</a></div>
23
+ </div>
24
+
25
+ ## Включение или отключение правил
26
+
27
+ Большинство правил включены по умолчанию. Правила могут быть отключены в командной строке с помощью флага `--ignore`. Правила могут быть включены с помощью флага `--include`.
28
+
29
+ Например:
30
+
31
+ ```bash
32
+ djlint . --lint --include=H017,H035 --ignore=H013,H015
33
+ ```
34
+
35
+ Это также можно сделать через [{{ "configuration" | i18n }}]({{ "lang_code_url" | i18n }}/docs/configuration) файл.
36
+
37
+ ## Правила
38
+
39
+ | Код | Значение | По умолчанию |
40
+ | ---- | ------------------------------------------------------------------------------------------------------------------------- | ------------ |
41
+ | D004 | (Django) Статические урлы должны следовать шаблону {% raw %}`{% static path/to/file %}`{% endraw %}. | ✔️ |
42
+ | D018 | (Django) Внутренние ссылки должны использовать шаблон {% raw %}`{% url ... %}`{% endraw %}. | ✔️ |
43
+ | H005 | Html-тег должен иметь атрибут `lang`. | ✔️ |
44
+ | H006 | Тег `img` должен иметь атрибуты `height` и `width`. | ✔️ |
45
+ | H007 | `<!DOCTYPE ... >` должен присутствовать перед тегом html. | ✔️ |
46
+ | H008 | Атрибуты должны быть заключены в двойные кавычки. | ✔️ |
47
+ | H009 | Имена тегов должны быть в нижнем регистре. | ✔️ |
48
+ | H010 | Имена атрибутов должны быть в нижнем регистре. | ✔️ |
49
+ | H011 | Значения атрибутов должны быть заключены в кавычки. | ✔️ |
50
+ | H012 | Вокруг атрибута `=` не должно быть пробелов. | ✔️ |
51
+ | H013 | Тег `img` должен иметь атрибуты alt. | ✔️ |
52
+ | H014 | Более 2 пустых строк. | ✔️ |
53
+ | H015 | После тегов `h` следует перевод строки. | ✔️ |
54
+ | H016 | Отсутствие тега `title` в html. | ✔️ |
55
+ | H017 | Метки пустоты должны быть самозакрывающимися. | - |
56
+ | H019 | Замените `javascript:abc()` на событие `on_` и реальный url. | ✔️ |
57
+ | H020 | Найдена пустая пара тегов. Рассмотрите возможность удаления. | ✔️ |
58
+ | H021 | Следует избегать инлайн-стилей. | ✔️ |
59
+ | H022 | Используйте HTTPS для внешних ссылок. | ✔️ |
60
+ | H023 | Не используйте ссылки на сущности. | ✔️ |
61
+ | H024 | Опускайте тип в скриптах и стилях. | ✔️ |
62
+ | H025 | Тег кажется бесхозным. | ✔️ |
63
+ | H026 | Пустые теги id и class могут быть удалены. | ✔️ |
64
+ | H029 | Рассмотрите возможность использования строчных значений метода формы. | ✔️ |
65
+ | H030 | Рассмотрите возможность добавления мета-описания. | ✔️ |
66
+ | H031 | Рассмотрите возможность добавления мета-ключевых слов. | ✔️ |
67
+ | H033 | В действии формы обнаружен лишний пробел. | ✔️ |
68
+ | J004 | (Jinja) Статические урлы должны следовать шаблону {% raw %}`{{ url_for('static'...)}}`{% endraw %}. | ✔️ |
69
+ | J018 | (Jinja) Внутренние ссылки должны использовать шаблон {% raw %}`{% url ... %}`{% endraw %}. | ✔️ |
70
+ | T001 | Переменные должны быть заключены в один пробел. Например: {% raw %}`{{ this }}`{% endraw %} | ✔️ |
71
+ | T002 | В тегах следует использовать двойные кавычки. Ex {% raw %}`{% extends "this.html" %}`{% endraw %} | ✔️ |
72
+ | T003 | Конечный блок должен иметь имя. Например: {% raw %}`{% endblock body %}`{% endraw %}. | ✔️ |
73
+ | T027 | В синтаксисе шаблона найдена незакрытая строка. | ✔️ |
74
+ | T028 | Рассмотрите возможность использования тегов без пробелов внутри значений атрибутов. {% raw %}`{%- if/for -%}`{% endraw %} | ✔️ |
75
+ | T032 | В тегах шаблона обнаружены лишние пробелы. | ✔️ |
76
+ | T034 | Вы намеревались использовать {% raw %}{% ... %} вместо {% ... }%? {% endraw %} | ✔️ |
77
+ | H035 | Meta должны быть самозакрывающимися. | - |
78
+ | H036 | Избегайте использования тегов <br>. | - |
79
+ | H037 | Найдено дублирование атрибута. | ✔️ |
80
+
81
+ ### Кодовые шаблоны
82
+
83
+ Первая буква кода соответствует схеме:
84
+
85
+ ::: content
86
+
87
+ - D: применяется специально для Django
88
+ - H: применяется к html
89
+ - J: применяется специально для Jinja
90
+ - M: применяется специально для Handlebars
91
+ - N: применяется специально для Nunjucks
92
+ - T: применяется в целом к шаблонам
93
+ :::
94
+
95
+ ### Добавление правил
96
+
97
+ Мы приветствуем запросы с новыми правилами!
98
+
99
+ Хорошее правило состоит из
100
+
101
+ ::: content
102
+
103
+ - Name
104
+ - Code
105
+ - Message - Сообщение для отображения при обнаружении ошибки.
106
+ - Flags - Флаги регекса. По умолчанию используется re.DOTALL. например: re.I|re.M
107
+ - Patterns - regex-выражения, которые найдут ошибку.
108
+ - Exclude - Необязательный список профилей, из которых нужно исключить правило.
109
+ :::
110
+
111
+ Пожалуйста, включите тест для проверки правила.
112
+
113
+ ## Пользовательские правила
114
+
115
+ Создайте файл `.djlint_rules.yaml` рядом с вашим `pyproject.toml`. Правила могут быть добавлены в этот файл, и djLint подхватит их.
116
+
117
+ Хорошее правило выглядит следующим образом:
118
+
119
+ ```yaml
120
+ - rule:
121
+ name: T001
122
+ message: Найти трихотилломанию
123
+ flags: re.DOTALL|re.I
124
+ patterns:
125
+ - трихотилломанию
126
+ ```
@@ -0,0 +1,4 @@
1
+ ---
2
+ layout: index.njk
3
+ date: Last Modified
4
+ ---
@@ -0,0 +1,4 @@
1
+ {
2
+ "dir": "ltr",
3
+ "locale": "ru"
4
+ }
@@ -0,0 +1,16 @@
1
+ ---
2
+ permalink: /sitemap.xml
3
+ eleventyExcludeFromCollections: true
4
+ ---
5
+ <?xml version="1.0" encoding="utf-8"?>
6
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
7
+ {%- for page in collections.all -%}
8
+ {%- if not page.data.draft %}
9
+ <url>
10
+ <loc>{{ site.url }}{{ page.url | url }}</loc>
11
+ <lastmod>{{ page.date.toISOString() }}</lastmod>
12
+ <changefreq>{{ page.data.changeFreq if page.data.changeFreq else "weekly" }}</changefreq>
13
+ </url>
14
+ {%- endif -%}
15
+ {%- endfor -%}
16
+ </urlset>
@@ -0,0 +1,467 @@
1
+ @use '../../../node_modules/@fontsource/inter/scss/mixins' as Inter;
2
+ @use '../../../node_modules/@fontsource/rasa/scss/mixins' as Rasa;
3
+ @use '../../../node_modules/@fontsource/crimson-pro/scss/mixins' as Crimson;
4
+ $link-hover: hsl(207, 61%, 44%);
5
+ $link: hsl(207, 61%, 44%);
6
+
7
+ @import '../../../node_modules/bulma/bulma';
8
+ @import '../../../node_modules/bulma-pricingtable/src/sass/index';
9
+ @import '../../../node_modules/@creativebulma/bulma-divider/src/sass/index';
10
+
11
+ $use-all: true;
12
+ $use-slideInDown: true;
13
+ @import '../../../node_modules/animate-sass/animate';
14
+
15
+ @import '../font/fontawesome/stylesheet';
16
+
17
+ /* purgecss start ignore */
18
+
19
+ pre .tag {
20
+ align-items: unset;
21
+ background-color: unset;
22
+ border-radius: unset;
23
+ color: unset;
24
+ display: unset;
25
+ font-size: unset;
26
+ height: unset;
27
+ justify-content: unset;
28
+ line-height: unset;
29
+ padding-left: unset;
30
+ padding-right: unset;
31
+ white-space: unset;
32
+ }
33
+ pre .section {
34
+ padding: unset;
35
+ }
36
+
37
+ @import '../../../node_modules/prismjs/themes/prism-tomorrow';
38
+
39
+ @include Inter.faces(
40
+ $family: Inter,
41
+ $weights: (
42
+ 400,
43
+ 600,
44
+ 700,
45
+ ),
46
+ $display: swap,
47
+ $subsets: latin,
48
+ $directory: '/static/font/inter/files/'
49
+ );
50
+
51
+ @include Rasa.faces(
52
+ $family: Rasa,
53
+ $weights: (
54
+ 300,
55
+ 500,
56
+ 600,
57
+ 700,
58
+ ),
59
+ $display: swap,
60
+ $subsets: latin,
61
+ $directory: '/static/font/rasa/files/'
62
+ );
63
+
64
+ @include Crimson.faces(
65
+ $family: 'Crimson Pro',
66
+ $weights: 400,
67
+ $display: swap,
68
+ $subsets: latin,
69
+ $directory: '/static/font/crimson-pro/files/'
70
+ );
71
+
72
+ html {
73
+ height: 100%;
74
+ }
75
+
76
+ body {
77
+ font-family: 'Inter', Arial, Verdana, Tahoma, sans-serif;
78
+ display: flex;
79
+ flex-direction: column;
80
+ min-height: 100%;
81
+ }
82
+
83
+ .title {
84
+ font-family: 'Rasa', Georgia, 'Times New Roman', Times, serif;
85
+ }
86
+ .huge {
87
+ font-size: 100px;
88
+ }
89
+
90
+ .djlint-nav {
91
+ padding-left: 15px;
92
+ }
93
+ .djlint-nav .navbar-brand a {
94
+ margin-top: auto;
95
+ margin-bottom: auto;
96
+ }
97
+
98
+ body.has-navbar-fixed-top,
99
+ html.has-navbar-fixed-top {
100
+ padding-top: 118px;
101
+ }
102
+ .djlint-nav .navbar-brand img {
103
+ width: auto;
104
+ height: 40px !important;
105
+ margin-top: 6px;
106
+ margin-bottom: -2px;
107
+ }
108
+
109
+ .is-flex-widescreen {
110
+ display: none !important;
111
+ }
112
+ @media screen and (min-width: $widescreen) {
113
+ .djlint-nav {
114
+ padding: 15px 0;
115
+ }
116
+
117
+ .djlint-nav .navbar-brand img {
118
+ height: 56px !important;
119
+ }
120
+
121
+ .is-flex-widescreen {
122
+ display: flex !important;
123
+ }
124
+ }
125
+
126
+ .image.brand {
127
+ height: 200px;
128
+ display: flex;
129
+ justify-content: center;
130
+ align-items: center;
131
+ }
132
+ .image.brand img {
133
+ max-width: 200px;
134
+ max-height: 200px;
135
+ }
136
+
137
+ a.navbar-item:hover,
138
+ a.navbar-link:hover,
139
+ .navbar-item.has-dropdown:hover .navbar-link {
140
+ background: transparent;
141
+ }
142
+
143
+ .hero-body {
144
+ background-color: rgba(167, 200, 204, 0.7);
145
+ }
146
+
147
+ .hero-two {
148
+ background-color: rgba(0, 68, 106, 0.08);
149
+ }
150
+
151
+ h1 {
152
+ font-size: 50px;
153
+ }
154
+
155
+ h2 {
156
+ font-size: 25px;
157
+ }
158
+
159
+ .is-nav-icon .fa-2x {
160
+ font-size: 1.6em;
161
+ }
162
+
163
+ /* fix for prism in bulma */
164
+ pre .number {
165
+ background-color: inherit;
166
+ font: inherit;
167
+ padding: 0;
168
+ margin: 0;
169
+ height: inherit;
170
+ min-width: inherit;
171
+ text-align: inherit;
172
+ vertical-align: inherit;
173
+ }
174
+
175
+ .navbar-item.button {
176
+ margin: 13px;
177
+ margin-top: auto;
178
+ margin-bottom: auto;
179
+ }
180
+
181
+ .mail-icon > img {
182
+ margin-top: 3px;
183
+ }
184
+ /* comparison */
185
+ .plan-item .icon {
186
+ height: auto;
187
+ }
188
+ .plan-item .icon svg {
189
+ height: 15px;
190
+ width: 15px;
191
+ }
192
+
193
+ .pricing-table .pricing-plan .plan-group {
194
+ align-content: center;
195
+ background-color: #fff;
196
+ color: #4a4a4a;
197
+ font-size: $size-6;
198
+ font-weight: 600;
199
+ padding: 0.75em;
200
+ text-align: center;
201
+ }
202
+
203
+ .pricing-table .pricing-plan .plan-header {
204
+ font-size: $size-6;
205
+ }
206
+
207
+ .icon.is-huge {
208
+ height: 2.5em;
209
+ width: 2.5em;
210
+ }
211
+
212
+ .story {
213
+ font-family: Crimson Pro, Georgia, serif;
214
+ font-size: 24px;
215
+ font-weight: 400;
216
+ line-height: 1.6666666667;
217
+ max-width: 800px;
218
+ margin-left: auto;
219
+ margin-right: auto;
220
+ }
221
+
222
+ // tabs
223
+
224
+ .tab-container {
225
+ @extend %block;
226
+ }
227
+ .tab-container .tab {
228
+ display: none;
229
+ }
230
+
231
+ .tab-container .tab.is-active {
232
+ display: initial;
233
+ }
234
+
235
+ // admonitions
236
+ .message-header .icon svg {
237
+ height: $size-6;
238
+ padding-right: 10px;
239
+ }
240
+
241
+ .message.note {
242
+ border-width: $message-body-border-width;
243
+ border-style: solid;
244
+ border-color: $info;
245
+ background-color: $white;
246
+ padding: 0;
247
+ }
248
+ .message.hint {
249
+ border-width: $message-body-border-width;
250
+ border-style: solid;
251
+ border-color: $success;
252
+ background-color: $white;
253
+ padding: 0;
254
+ }
255
+ .message.alert {
256
+ border-width: $message-body-border-width;
257
+ border-style: solid;
258
+ border-color: $danger;
259
+ background-color: $white;
260
+ padding: 0;
261
+ }
262
+ .message.note .message-header {
263
+ color: $text;
264
+ background-color: $info-light;
265
+ }
266
+
267
+ .message.hint .message-header {
268
+ color: $text;
269
+ background-color: $success-light;
270
+ }
271
+
272
+ .message.alert .message-header {
273
+ color: $text;
274
+ background-color: $danger-light;
275
+ }
276
+
277
+ .message.note .message-body,
278
+ .message.hint .message-body,
279
+ .message.alert .message-body {
280
+ color: $text;
281
+ }
282
+
283
+ .image.is-35x35 {
284
+ height: 35px;
285
+ width: 35px;
286
+ }
287
+ /* menu collapse */
288
+
289
+ .is-collapsible,
290
+ .is-collapsible.is-active {
291
+ transition: max-height 0.2s ease-out;
292
+ }
293
+
294
+ .is-collapsible {
295
+ max-height: 0;
296
+ overflow: hidden;
297
+ margin-top: 0;
298
+ margin-bottom: 0;
299
+ }
300
+
301
+ .is-collapsible-menu {
302
+ height: 0;
303
+ overflow: hidden;
304
+ margin-top: 0;
305
+ margin-bottom: 0;
306
+ }
307
+ .is-collapsible-menu.is-active {
308
+ height: auto;
309
+ }
310
+
311
+ .is-collapsible-menu:not(.is-active) {
312
+ margin-top: 0 !important;
313
+ margin-bottom: 0 !important;
314
+ }
315
+
316
+ .is-collapsible-menu .is-collapsible-menu {
317
+ margin-bottom: 0 !important;
318
+ }
319
+
320
+ .menu .menu-label {
321
+ font-weight: 600;
322
+ font-size: unset;
323
+ color: $grey-dark;
324
+ }
325
+
326
+ .menu li a.is-active {
327
+ background: unset;
328
+ color: unset;
329
+ font-weight: 700;
330
+ }
331
+
332
+ .menu li.head > a {
333
+ font-weight: 600;
334
+ }
335
+
336
+ .menu-list li.head ul {
337
+ margin-left: 3px;
338
+ padding-left: 20px;
339
+ }
340
+
341
+ .menu-list a:hover,
342
+ .menu li a:hover {
343
+ background-color: unset;
344
+ }
345
+
346
+ pre:not(.CodeMirror-line) {
347
+ margin-bottom: 1.5rem !important;
348
+ }
349
+
350
+ .column:not(.is-narrow) {
351
+ min-width: 0px;
352
+ }
353
+
354
+ .is-inlineblock {
355
+ display: inline-block !important;
356
+ }
357
+
358
+ .is-radius > img {
359
+ border-radius: $radius;
360
+ }
361
+
362
+ .is-framed {
363
+ max-width: 800px;
364
+ border: 8px solid $grey-lightest;
365
+ border-radius: 4px;
366
+ border-top: 24px solid $grey-lightest;
367
+ box-shadow: 0 0.5em 1em -0.125em #0a0a0a1a, 0 0 0 1px #0a0a0a05;
368
+ position: relative;
369
+ }
370
+
371
+ .is-framed::before {
372
+ border-radius: 10px;
373
+ content: '';
374
+ height: 15px;
375
+ left: 0px;
376
+ position: absolute;
377
+ top: -19px;
378
+ width: 15px;
379
+ background: $grey-light;
380
+ }
381
+
382
+ .is-framed::after {
383
+ border-radius: 10px;
384
+ content: '';
385
+ height: 15px;
386
+ left: 20px;
387
+ position: absolute;
388
+ top: -19px;
389
+ width: 15px;
390
+ background: $grey-light;
391
+ }
392
+
393
+ .hero.is-white .hero-body {
394
+ background-color: $white;
395
+ }
396
+
397
+ .hero {
398
+ position: relative;
399
+ }
400
+
401
+ a.card:hover {
402
+ box-shadow: 0 0.5em 2em -0.125em #0a0a0a1a, 0 0 0 1px #0a0a0a05;
403
+ }
404
+
405
+ .title {
406
+ color: $grey-darker;
407
+ }
408
+ @media screen and (min-width: $tablet) {
409
+ .is-sticky {
410
+ position: sticky;
411
+ top: 118px;
412
+ bottom: 0;
413
+ max-height: calc(100vh - 118px);
414
+ overflow-y: scroll;
415
+ }
416
+ }
417
+ @media screen and (min-width: $desktop) {
418
+ .navbar.is-transparent a.is-info.navbar-item:hover {
419
+ background-color: $info-dark !important;
420
+ }
421
+ }
422
+ .navbar-item.button.is-white:hover {
423
+ background: transparent !important;
424
+ }
425
+ .is-256x256 {
426
+ max-height: 256px;
427
+ max-width: 256px;
428
+ }
429
+ @media screen and (max-width: $tablet) {
430
+ .main {
431
+ padding: 0 15px;
432
+ }
433
+ }
434
+ .animated[data-animate] {
435
+ visibility: hidden;
436
+ }
437
+
438
+ .navbar-item .media img {
439
+ max-height: unset !important;
440
+ }
441
+
442
+ .icon.is-5x {
443
+ height: 6rem;
444
+ width: 6rem;
445
+ }
446
+
447
+ .is-transparent,
448
+ .is-transparent:hover {
449
+ background-color: transparent !important;
450
+ }
451
+ .is-rounded {
452
+ border-radius: $radius;
453
+ }
454
+
455
+ pre[class*='language'] {
456
+ border-radius: $radius;
457
+ }
458
+ /* purgecss end ignore */
459
+
460
+ .navbar-item.is-mega {
461
+ position: static;
462
+
463
+ .is-mega-menu-title {
464
+ margin-bottom: 0;
465
+ padding: 0.375rem 1rem;
466
+ }
467
+ }
@@ -0,0 +1,78 @@
1
+ @use 'sass:math';
2
+
3
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_functions';
4
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_variables';
5
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_mixins';
6
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_core';
7
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_sizing';
8
+ @import '../../../../node_modules/@fortawesome/fontawesome-free/scss/_animated';
9
+
10
+ $fa-font-path: '/static/font/fontawesome/webfonts';
11
+ @font-face {
12
+ font-family: 'Font Awesome 6 Brands';
13
+ font-style: normal;
14
+ font-weight: 400;
15
+ font-display: $fa-font-display;
16
+ src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'),
17
+ url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype');
18
+ }
19
+
20
+ @font-face {
21
+ font-family: 'Font Awesome 6 Free';
22
+ font-style: normal;
23
+ font-weight: 900;
24
+ font-display: $fa-font-display;
25
+ src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
26
+ url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype');
27
+ }
28
+
29
+ @font-face {
30
+ font-family: 'Font Awesome 6 Free';
31
+ font-style: normal;
32
+ font-weight: 400;
33
+ font-display: $fa-font-display;
34
+ src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
35
+ url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype');
36
+ }
37
+
38
+ .far,
39
+ .#{$fa-css-prefix}-regular {
40
+ font-family: 'Font Awesome 6 Free';
41
+ font-weight: 400;
42
+ }
43
+
44
+ .fas,
45
+ .#{$fa-css-prefix}-solid {
46
+ font-family: 'Font Awesome 6 Free';
47
+ font-weight: 900;
48
+ }
49
+
50
+ .fab,
51
+ .#{$fa-css-prefix}-brands {
52
+ font-family: 'Font Awesome 6 Brands';
53
+ font-weight: 400;
54
+ }
55
+
56
+ .#{$fa-css-prefix}-2_3x {
57
+ font-size: 2.3em;
58
+ }
59
+
60
+ /* build icon list */
61
+ $icons: (
62
+ infinity: $fa-var-infinity,
63
+ discord: $fa-var-discord,
64
+ github: $fa-var-github,
65
+ download: $fa-var-download,
66
+ pencil: $fa-var-pencil,
67
+ circle-arrow-right: $fa-var-circle-arrow-right,
68
+ globe: $fa-var-globe,
69
+ code-commit: $fa-var-code-commit,
70
+ spinner: $fa-var-spinner,
71
+ circle-question: $fa-var-circle-question,
72
+ );
73
+
74
+ @each $key, $value in $icons {
75
+ .#{$fa-css-prefix}-#{$key}:before {
76
+ content: fa-content($value);
77
+ }
78
+ }
Binary file
Binary file