diff --git a/app/__init__.py b/app/__init__.py
index e3ec26fce..790a3130d 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -720,7 +720,7 @@ def init_jinja(application):
repo_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
template_folders = [
os.path.join(repo_root, 'app/templates'),
- os.path.join(repo_root, 'node_modules/govuk-frontend'),
+ os.path.join(repo_root, 'app/templates/vendor/govuk-frontend'),
]
jinja_loader = jinja2.FileSystemLoader(template_folders)
application.jinja_loader = jinja_loader
diff --git a/app/templates/vendor/govuk-frontend/components/footer/macro.njk b/app/templates/vendor/govuk-frontend/components/footer/macro.njk
new file mode 100644
index 000000000..22e58680c
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/footer/macro.njk
@@ -0,0 +1,3 @@
+{% macro govukFooter(params) %}
+ {%- include "./template.njk" -%}
+{% endmacro %}
diff --git a/app/templates/vendor/govuk-frontend/components/footer/template.njk b/app/templates/vendor/govuk-frontend/components/footer/template.njk
new file mode 100644
index 000000000..1e797312a
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/footer/template.njk
@@ -0,0 +1,87 @@
+
diff --git a/app/templates/vendor/govuk-frontend/components/header/macro.njk b/app/templates/vendor/govuk-frontend/components/header/macro.njk
new file mode 100644
index 000000000..d863b7831
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/header/macro.njk
@@ -0,0 +1,3 @@
+{% macro govukHeader(params) %}
+ {%- include "./template.njk" -%}
+{% endmacro %}
diff --git a/app/templates/vendor/govuk-frontend/components/header/template.njk b/app/templates/vendor/govuk-frontend/components/header/template.njk
new file mode 100644
index 000000000..b7f27efa7
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/header/template.njk
@@ -0,0 +1,84 @@
+
diff --git a/app/templates/vendor/govuk-frontend/components/skip-link/macro.njk b/app/templates/vendor/govuk-frontend/components/skip-link/macro.njk
new file mode 100644
index 000000000..b5afb0c4e
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/skip-link/macro.njk
@@ -0,0 +1,3 @@
+{% macro govukSkipLink(params) %}
+ {%- include "./template.njk" -%}
+{% endmacro %}
diff --git a/app/templates/vendor/govuk-frontend/components/skip-link/template.njk b/app/templates/vendor/govuk-frontend/components/skip-link/template.njk
new file mode 100644
index 000000000..b78695eae
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/components/skip-link/template.njk
@@ -0,0 +1,3 @@
+
+ {{- params.html | safe if params.html else params.text -}}
+
diff --git a/app/templates/vendor/govuk-frontend/template.njk b/app/templates/vendor/govuk-frontend/template.njk
new file mode 100644
index 000000000..f6b27c794
--- /dev/null
+++ b/app/templates/vendor/govuk-frontend/template.njk
@@ -0,0 +1,60 @@
+{% from "./components/skip-link/macro.njk" import govukSkipLink -%}
+{% from "./components/header/macro.njk" import govukHeader -%}
+{% from "./components/footer/macro.njk" import govukFooter -%}
+{# specify absolute url for the static assets folder e.g. http://wwww.domain.com/assets #}
+{%- set assetUrl = assetUrl | default(assetPath) -%}
+
+
+
+
+ {% block pageTitle %}GOV.UK - The best place to find government services and information{% endblock %}
+
+ {# Hardcoded value of $govuk-black #}
+ {# Ensure that older IE versions always render with the correct rendering engine #}
+
+
+ {% block headIcons %}
+
+ {# Hardcoded value of $govuk-black #}
+
+
+
+
+ {% endblock %}
+
+ {% block head %}{% endblock %}
+ {# The default og:image is added below head so that scrapers see any custom metatags first, and this is just a fallback #}
+ {# image url needs to be absolute e.g. http://wwww.domain.com/.../govuk-opengraph-image.png #}
+
+
+
+
+ {% block bodyStart %}{% endblock %}
+
+ {% block skipLink %}
+ {{ govukSkipLink({
+ href: '#main-content',
+ text: 'Skip to main content'
+ }) }}
+ {% endblock %}
+
+ {% block header %}
+ {{ govukHeader({}) }}
+ {% endblock %}
+
+ {% block main %}
+
+ {% block beforeContent %}{% endblock %}
+
+ {% block content %}{% endblock %}
+
+
+ {% endblock %}
+
+ {% block footer %}
+ {{ govukFooter({}) }}
+ {% endblock %}
+
+ {% block bodyEnd %}{% endblock %}
+
+
diff --git a/gulpfile.js b/gulpfile.js
index 16b2a843d..50cb424f0 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -49,6 +49,42 @@ const copy = {
fonts: () => {
return src(paths.govuk_frontend + 'assets/fonts/**/*')
.pipe(dest(paths.dist + 'fonts/'));
+ },
+ templates: (cb) => {
+ // Put names of GOVUK Frontend templates here
+ const _templates = [
+ 'template',
+ 'skip-link',
+ 'header',
+ 'footer'
+ ];
+ let done = 0;
+
+ // Copy the templates for each component across, preserving their folder structure
+ _templates.forEach(name => {
+ let _src = [
+ paths.govuk_frontend + 'components/' + name + '/macro.njk',
+ paths.govuk_frontend + 'components/' + name + '/template.njk'
+ ];
+ let _dest = paths.templates + 'vendor/govuk-frontend/components/' + name;
+
+ // template.njk isn't a component
+ if (name === 'template') {
+ _src = paths.govuk_frontend + 'template.njk';
+ _dest = paths.templates + 'vendor/govuk-frontend';
+ }
+
+ src(_src)
+ .pipe(
+ dest(_dest)
+ .on('end', () => { // resolve promise if all copied
+ done = done + 1;
+ if (done === _templates.length) {
+ cb();
+ }
+ })
+ )
+ });
}
}
};
@@ -207,8 +243,9 @@ const lint = {
// Default: compile everything
const defaultTask = parallel(
- series(
+ parallel(
copy.govuk_frontend.fonts,
+ copy.govuk_frontend.templates,
images
),
series(