diff --git a/.github/workflows/project_ci.yml b/.github/workflows/project_ci.yml index 22f59204..1b97d593 100644 --- a/.github/workflows/project_ci.yml +++ b/.github/workflows/project_ci.yml @@ -1,7 +1,7 @@ # In YAML, 'raw' and 'endraw' can't come at the beginning of a token or at the end of a quoted value, which is why they're in weird places. They are # needed to escape YAML templating variables, which still allowing cookiecutter to replace the value of the repository name. -# Instructions to clear caches: +# Instructions to clear all caches: # 1) List all caches for this repo using the Github CLI: gh api -H "Accept: application/vnd.github+json" /repos/Lightmatter/django-hydra/actions/caches # 2) Delete each cache id from the list, e.g.: gh api --method DELETE -H "Accept: application/vnd.github+json" /repos/Lightmatter/django-hydra/actions/caches/1 diff --git a/{{cookiecutter.repo_name}}/poetry.lock b/{{cookiecutter.repo_name}}/poetry.lock index b1026ce4..2deb04c3 100644 --- a/{{cookiecutter.repo_name}}/poetry.lock +++ b/{{cookiecutter.repo_name}}/poetry.lock @@ -256,18 +256,18 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "boto3" -version = "1.26.70" +version = "1.26.72" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.7" files = [ - {file = "boto3-1.26.70-py3-none-any.whl", hash = "sha256:5324c2a9dbc271d2b25eb79f7469b422de411665f9ab1c0b410e8ac820859b1a"}, - {file = "boto3-1.26.70.tar.gz", hash = "sha256:123cf34f3cc58772b4f806dfbb1ae9ffae47459de5088e971be9d3cd2b198975"}, + {file = "boto3-1.26.72-py3-none-any.whl", hash = "sha256:990997248716f12b296d7d30b3119a93347d73b7a4831c015e53aaebbd074a77"}, + {file = "boto3-1.26.72.tar.gz", hash = "sha256:5d6e19d148c4a9d5d85f0d96570d11264f23db610f1e3c9a8b7e8b6898424691"}, ] [package.dependencies] -botocore = ">=1.29.70,<1.30.0" +botocore = ">=1.29.72,<1.30.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.6.0,<0.7.0" @@ -276,14 +276,14 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.29.70" +version = "1.29.72" description = "Low-level, data-driven core of boto 3." category = "main" optional = false python-versions = ">= 3.7" files = [ - {file = "botocore-1.29.70-py3-none-any.whl", hash = "sha256:7d9abef42846c1c2f31dacaa559f8450f6fbda74c2c9e3dc6630e06e882ad026"}, - {file = "botocore-1.29.70.tar.gz", hash = "sha256:caaa144f49ef0d01b5e8812c9afa729def2c3358d9c4d9204789be2b56c5e849"}, + {file = "botocore-1.29.72-py3-none-any.whl", hash = "sha256:77fff109e1bdbf030d8400ccab9d28454c03c7be62c1696a239b21792b0873df"}, + {file = "botocore-1.29.72.tar.gz", hash = "sha256:8710f53af0e20f08f36a3bf434d18bc7ceba5d9835495b02aedbedd35df5de9a"}, ] [package.dependencies] @@ -750,8 +750,6 @@ files = [ {file = "cryptography-39.0.1-cp36-abi3-win32.whl", hash = "sha256:fe913f20024eb2cb2f323e42a64bdf2911bb9738a15dba7d3cce48151034e3a8"}, {file = "cryptography-39.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:ced4e447ae29ca194449a3f1ce132ded8fcab06971ef5f618605aacaa612beac"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:807ce09d4434881ca3a7594733669bd834f5b2c6d5c7e36f8c00f691887042ad"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c5caeb8188c24888c90b5108a441c106f7faa4c4c075a2bcae438c6e8ca73cef"}, - {file = "cryptography-39.0.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:4789d1e3e257965e960232345002262ede4d094d1a19f4d3b52e48d4d8f3b885"}, {file = "cryptography-39.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:96f1157a7c08b5b189b16b47bc9db2332269d6680a196341bf30046330d15388"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e422abdec8b5fa8462aa016786680720d78bdce7a30c652b7fadf83a4ba35336"}, {file = "cryptography-39.0.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:b0afd054cd42f3d213bf82c629efb1ee5f22eba35bf0eec88ea9ea7304f511a2"}, @@ -844,14 +842,14 @@ files = [ [[package]] name = "django" -version = "4.1.6" +version = "4.1.7" description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "Django-4.1.6-py3-none-any.whl", hash = "sha256:c6fe7ebe7c017fe59f1029821dae0acb5a2ddcd6c9a0138fd20a8bfefac914bc"}, - {file = "Django-4.1.6.tar.gz", hash = "sha256:bceb0fe1a386781af0788cae4108622756cd05e7775448deec04a71ddf87685d"}, + {file = "Django-4.1.7-py3-none-any.whl", hash = "sha256:f2f431e75adc40039ace496ad3b9f17227022e8b11566f4b363da44c7e44761e"}, + {file = "Django-4.1.7.tar.gz", hash = "sha256:44f714b81c5f190d9d2ddad01a532fe502fa01c4cb8faf1d081f4264ed15dcd8"}, ] [package.dependencies] @@ -1080,6 +1078,27 @@ files = [ [package.dependencies] Django = ">=3.2" +[[package]] +name = "django-pattern-library" +version = "1.0.0" +description = "A module for Django that allows to build pattern libraries for your projects." +category = "dev" +optional = false +python-versions = "^3.7" +files = [] +develop = false + +[package.dependencies] +Django = ">=3.2,<4.2" +Markdown = "^3.1" +PyYAML = ">=5.1,<7.0" + +[package.source] +type = "git" +url = "https://github.com/gone/django-pattern-library.git" +reference = "jinja" +resolved_reference = "555ad190f7ab5849d688ea6a70ec85a0e2fd6f73" + [[package]] name = "django-redis" version = "5.2.0" @@ -1272,14 +1291,14 @@ smmap = ">=3.0.1,<6" [[package]] name = "gitpython" -version = "3.1.30" -description = "GitPython is a python library used to interact with Git repositories" +version = "3.1.31" +description = "GitPython is a Python library used to interact with Git repositories" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "GitPython-3.1.30-py3-none-any.whl", hash = "sha256:cd455b0000615c60e286208ba540271af9fe531fa6a87cc590a7298785ab2882"}, - {file = "GitPython-3.1.30.tar.gz", hash = "sha256:769c2d83e13f5d938b7688479da374c4e3d49f71549aaf462b646db9602ea6f8"}, + {file = "GitPython-3.1.31-py3-none-any.whl", hash = "sha256:f04893614f6aa713a60cbbe1e6a97403ef633103cdd0ef5eb6efe0deb98dbe8d"}, + {file = "GitPython-3.1.31.tar.gz", hash = "sha256:8ce3bcf69adfdf7c7d503e78fd3b1c492af782d58893b650adb2ac8912ddd573"}, ] [package.dependencies] @@ -1829,6 +1848,21 @@ html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] source = ["Cython (>=0.29.7)"] +[[package]] +name = "markdown" +version = "3.4.1" +description = "Python implementation of Markdown." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Markdown-3.4.1-py3-none-any.whl", hash = "sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186"}, + {file = "Markdown-3.4.1.tar.gz", hash = "sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff"}, +] + +[package.extras] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "2.1.0" @@ -3061,14 +3095,14 @@ tornado = ["tornado (>=5)"] [[package]] name = "setuptools" -version = "67.2.0" +version = "67.3.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "setuptools-67.2.0-py3-none-any.whl", hash = "sha256:16ccf598aab3b506593c17378473978908a2734d7336755a8769b480906bec1c"}, - {file = "setuptools-67.2.0.tar.gz", hash = "sha256:b440ee5f7e607bb8c9de15259dba2583dd41a38879a7abc1d43a71c59524da48"}, + {file = "setuptools-67.3.2-py3-none-any.whl", hash = "sha256:bb6d8e508de562768f2027902929f8523932fcd1fb784e6d573d2cafac995a48"}, + {file = "setuptools-67.3.2.tar.gz", hash = "sha256:95f00380ef2ffa41d9bba85d95b27689d923c93dfbafed4aecd7cf988a25e012"}, ] [package.extras] @@ -3252,14 +3286,14 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.4.0" +version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, - {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, ] [[package]] @@ -3537,4 +3571,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "a86d7022d59c16b5969922fb91cb5c4d4ec0f07a55797cf3674ea3cfe4ddcd6b" +content-hash = "ebb56ce6603619857204bec8a8f15f238c1b3863ed34c1b3095e007825afcfc1" diff --git a/{{cookiecutter.repo_name}}/pyproject.toml b/{{cookiecutter.repo_name}}/pyproject.toml index e3f21c63..37d3f586 100644 --- a/{{cookiecutter.repo_name}}/pyproject.toml +++ b/{{cookiecutter.repo_name}}/pyproject.toml @@ -62,6 +62,7 @@ pydocstyle = "^6.3.0" pylint-django = "^2.5.3" pylint-celery = "^0.3" ruff = "^0.0.216" +django-pattern-library = { git = "https://github.com/gone/django-pattern-library.git", branch = "jinja" } [tool.poetry.group.test.dependencies] pytest = "^7.2.1" diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/base.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/base.py index 63831d0a..96d2b704 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/base.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/base.py @@ -79,6 +79,7 @@ "heroicons", "hijack", "hijack.contrib.admin", + "pattern_library", ] LOCAL_APPS = [ "{{cookiecutter.repo_name}}.home.apps.HomeConfig", @@ -221,6 +222,7 @@ "builtins": [ "django.templatetags.static", "{{cookiecutter.repo_name}}.util.templatetags.filters", + "pattern_library.loader_tags", ], # https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors "context_processors": CONTEXT_PROCESSORS, @@ -228,6 +230,30 @@ }, ] +PATTERN_LIBRARY = { + # Groups of templates for the pattern library navigation. The keys + # are the group titles and the values are lists of template name prefixes that will + # be searched to populate the groups. + "SECTIONS": ( + ("account", [("account/components"), "account/snippets"]), + ("forms", ["forms"]), + ("header", ["header"]), + ("components", ["components"]), + ("samples", ["samples"]), + ), + # Configure which files to detect as templates. + "TEMPLATE_SUFFIX": ".jinja", + # Set which template components should be rendered inside of, + # so they may use page-level component dependencies like CSS. + "PATTERN_BASE_TEMPLATE_NAME": "library_base.jinja", + # Any template in BASE_TEMPLATE_NAMES or any template that extends a template in + # BASE_TEMPLATE_NAMES is a "page" and will be rendered as-is without being wrapped. + "BASE_TEMPLATE_NAMES": [ + "patterns/base_page.jinja", + "account/account_base.jinja", + ], +} + # https://docs.djangoproject.com/en/dev/ref/settings/#form-renderer FORM_RENDERER = "django.forms.renderers.TemplatesSetting" diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/local.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/local.py index f5dd76f5..ad7dd086 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/local.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/settings/local.py @@ -44,6 +44,8 @@ # other middleware that modify the response. MIDDLEWARE.remove("corsheaders.middleware.CorsMiddleware") MIDDLEWARE.remove("csp.middleware.CSPMiddleware") +if DEBUG: + X_FRAME_OPTIONS = "SAMEORIGIN" # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html#middleware MIDDLEWARE = [ diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/urls.py b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/urls.py index f15ddd08..13b7275c 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/urls.py +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/config/urls.py @@ -1,10 +1,15 @@ # flake8: noqa: F811 +from django.apps import apps from django.conf import settings from django.conf.urls import handler400, handler403, handler404, handler500 from django.contrib import admin from django.urls import include, path - -from {{cookiecutter.repo_name}}.home.views import FourHundy, FourOhFour, FourOhThree, WorkedLocally +from {{cookiecutter.repo_name}}.home.views import ( + FourHundy, + FourOhFour, + FourOhThree, + WorkedLocally, +) handler400 = FourHundy handler403 = FourOhThree @@ -43,6 +48,11 @@ urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns + if apps.is_installed("pattern_library"): + urlpatterns += [ + path("pattern-library/", include("pattern_library.urls")), + ] + urlpatterns += [ path("account/", include("{{cookiecutter.repo_name}}.user.urls", namespace="user")), diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.jinja index 333f1b4e..1ed4881d 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.jinja @@ -1,18 +1,3 @@ -{% set default_title %} -Did YOU ever hear the Tragedy of Darth Plagueis the Wise? -{% endset %} -{% set default_content %} -

I thought not. It's not a story the Jedi would tell you.

-{% endset %} -{% set default_back %} - - {{ heroicon_solid("arrow-left", class="h-6 w-6 cursor-pointer") }} - -{% endset %} {% macro account_box(title=default_title, content=default_content, back=default_back ) %}
@@ -25,3 +10,7 @@ Did YOU ever hear the Tragedy of Darth Plagueis the Wise?
{% endmacro %} + +{% if is_pattern_library %} + {{ account_box(dpl_account_objects.title, dpl_account_objects.content, dpl_account_objects.back) }} +{% endif %} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.yaml b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.yaml new file mode 100644 index 00000000..dea8c2b7 --- /dev/null +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/account/components/account_box.yaml @@ -0,0 +1,11 @@ +context: + dpl_account_objects: + back: + Go Back + + title: Did YOU ever hear the Tragedy of Darth Plagueis the Wise? + content:

I thought not. It's not a story the Jedi would tell you.

diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/button/button.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/button/button.jinja index 99f88745..8c42b72d 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/button/button.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/button/button.jinja @@ -49,6 +49,11 @@ {% endif %} {% endmacro %} + +{% if is_pattern_library %} + {{ button() }} +{% endif %} + {# force tailwind to include these styles: text-primary-content bg-primary hover:bg-primary-focus border-primary bg-primary-content hover:text-primary-focus text-primary diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.jinja index 37d809bc..5afd0bdf 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.jinja @@ -17,3 +17,9 @@ {% endmacro %} + +{% if is_pattern_library %} + {% call flyout(button=default_button) %} + {{dpl_default_content}} + {% endcall %} +{% endif %} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.yaml b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.yaml new file mode 100644 index 00000000..bbc502ea --- /dev/null +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/flyout/flyout.yaml @@ -0,0 +1,5 @@ +context: + dpl_default_content:

Hello World

diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.jinja index 7fc9d943..04734350 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.jinja @@ -3,3 +3,7 @@ target="{{ target }}" class="text-blue-500; hover:text-blue-700; underline">{{ text }} {% endmacro %} + +{% if is_pattern_library %} + {{ link(jpl_url, jpl_text, jpl_target) }} +{% endif %} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.yaml b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.yaml new file mode 100644 index 00000000..295ac3d3 --- /dev/null +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/links/link.yaml @@ -0,0 +1,4 @@ +context: + jpl_url: "https://example.com/" + jpl_text: "Example Link" + jpl_target: "_blank" diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/modal/modal.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/modal/modal.jinja index c3650182..ce3d0399 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/modal/modal.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/modal/modal.jinja @@ -20,7 +20,7 @@ x-transition class="relative w-full bg-white rounded-xl shadow-lg overflow-y-auto {{width_class}}" > - + {# All header, body and footer content should be included within the macro block #} {{caller()}} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/toggle/toggle.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/toggle/toggle.jinja index 55b21a31..7ef7bf67 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/toggle/toggle.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/components/toggle/toggle.jinja @@ -8,7 +8,7 @@ :class="{ 'opacity-0 ease-out duration-100': on, 'opacity-100 ease-in duration-200': !(on) }"> {{ heroicon_outline("x-mark", class="h-3 w-3 text-gray-400") }} - + {# Enabled: "opacity-100 ease-in duration-200", Not Enabled: "opacity-0 ease-out duration-100" #} - + {# Primary Label #}

{{choice.label}}

diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/forms/select.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/forms/select.jinja index 36c51937..4016a98b 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/forms/select.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/forms/select.jinja @@ -39,3 +39,7 @@ {% macro widget_to_select(widget) %} {{select( name=widget.name, value=widget.value, optgroups=widget.optgroups, attrs=widget.attrs )}} {% endmacro %} + +{% if is_pattern_library %} + {{widget_to_select(jplwidget)}} +{% endif %} diff --git a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/header/desktop_center.jinja b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/header/desktop_center.jinja index c8fc92f3..014b62c6 100644 --- a/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/header/desktop_center.jinja +++ b/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/templates/header/desktop_center.jinja @@ -1,5 +1,5 @@