diff --git a/src/e2e/CareLeavers.E2ETests/src/pages/BasePage.ts b/src/e2e/CareLeavers.E2ETests/src/pages/BasePage.ts index 9a4973d..0e6931a 100644 --- a/src/e2e/CareLeavers.E2ETests/src/pages/BasePage.ts +++ b/src/e2e/CareLeavers.E2ETests/src/pages/BasePage.ts @@ -67,7 +67,7 @@ export class BasePage { // Locators for social media share buttons this.shareButtonsContainer = page.locator('.sharethis-inline-share-buttons'); - this.printShareButton = page.locator('[data-network="print"]'); + this.printShareButton = page.locator('#print-link'); // Locators for Metadata definitions this.metadataDefinitions = page.locator('.gem-c-metadata__definition'); diff --git a/src/web/CareLeavers.Web/AssetSrc/assets/icon-print.png b/src/web/CareLeavers.Web/AssetSrc/assets/icon-print.png new file mode 100644 index 0000000..5a879f9 Binary files /dev/null and b/src/web/CareLeavers.Web/AssetSrc/assets/icon-print.png differ diff --git a/src/web/CareLeavers.Web/AssetSrc/scss/metadata.scss b/src/web/CareLeavers.Web/AssetSrc/scss/metadata.scss index dfc02c3..f970bdd 100644 --- a/src/web/CareLeavers.Web/AssetSrc/scss/metadata.scss +++ b/src/web/CareLeavers.Web/AssetSrc/scss/metadata.scss @@ -201,3 +201,18 @@ color: #000 !important } } + +.gem-c-print-link__button { + display: block; + border: 1px solid #505a5f; + color: #1d70b8; + cursor: pointer; + margin: 0; +} + +.gem-c-print-link__link, .gem-c-print-link__button { + background: url('/assets/icon-print.png') no-repeat 10px 50%; + background-size: 16px 18px; + padding: 10px 10px 10px 36px; + text-decoration: none; +} diff --git a/src/web/CareLeavers.Web/CareLeavers.Web.csproj b/src/web/CareLeavers.Web/CareLeavers.Web.csproj index e39ffb9..4c3dcf3 100644 --- a/src/web/CareLeavers.Web/CareLeavers.Web.csproj +++ b/src/web/CareLeavers.Web/CareLeavers.Web.csproj @@ -10,21 +10,21 @@ - - .dockerignore - + + .dockerignore + - - - - - - - - - + + + + + + + + + diff --git a/src/web/CareLeavers.Web/ContentfulRenderers/GDSEntityLinkContentRenderer.cs b/src/web/CareLeavers.Web/ContentfulRenderers/GDSEntityLinkContentRenderer.cs index 7e4c92c..f31c1b0 100644 --- a/src/web/CareLeavers.Web/ContentfulRenderers/GDSEntityLinkContentRenderer.cs +++ b/src/web/CareLeavers.Web/ContentfulRenderers/GDSEntityLinkContentRenderer.cs @@ -18,24 +18,53 @@ public bool SupportsContent(IContent content) }; } + if (content is Hyperlink) + { + return true; + } + return false; } public async Task RenderAsync(IContent content) { - var link = (content as EntryStructure); var tb = new TagBuilder("a"); - tb.AddCssClass("govuk-hyperlink"); - switch (link?.Data.Target) + tb.AddCssClass("govuk-link"); + + if (content is Hyperlink) { - case Page p: - tb.Attributes["href"] = p.Slug; + var link = (content as Hyperlink); + tb.Attributes["href"] = link.Data.Uri; + if (link.Content.Any()) + { foreach (var subContent in link.Content) { var renderer = rendererCollection.GetRendererForContent(subContent); tb.InnerHtml.AppendHtml(await renderer.RenderAsync(subContent)); } - break; + } + else + { + tb.InnerHtml.Append(link.Data.Title); + } + } + else + { + + var link = (content as EntryStructure); + + switch (link?.Data.Target) + { + case Page p: + tb.Attributes["href"] = p.Slug; + foreach (var subContent in link.Content) + { + var renderer = rendererCollection.GetRendererForContent(subContent); + tb.InnerHtml.AppendHtml(await renderer.RenderAsync(subContent)); + } + + break; + } } return tb.HasInnerHtml ? tb.ToHtmlString() : string.Empty; diff --git a/src/web/CareLeavers.Web/Gulpfile.js b/src/web/CareLeavers.Web/Gulpfile.js index 1ab022c..313d959 100644 --- a/src/web/CareLeavers.Web/Gulpfile.js +++ b/src/web/CareLeavers.Web/Gulpfile.js @@ -24,11 +24,6 @@ gulp.task('dfe-assets', function() { .pipe(gulp.dest(paths.dist + 'assets')); }); -gulp.task('gov-assets', function() { - return gulp.src('node_modules/dfe-frontend/packages/assets/**/*', {encoding:false}) - .pipe(gulp.dest(paths.dist + 'assets')); -}); - gulp.task("sass", function () { return gulp.src(paths.src + '/scss/**/*.scss') .pipe(sass({ @@ -38,11 +33,17 @@ gulp.task("sass", function () { // .pipe(connect.reload()); }); +gulp.task("images", function() { + return gulp.src(paths.src + '/assets/**/*', {encoding:false}) + .pipe(gulp.dest(paths.dist + 'assets')); +}) + gulp.task("dev", gulp.series( "dfe-js", "dfe-css", "dfe-assets", + "images", "sass" ) ); diff --git a/src/web/CareLeavers.Web/Models/Content/Card.cs b/src/web/CareLeavers.Web/Models/Content/Card.cs index 9a2de9f..5174554 100644 --- a/src/web/CareLeavers.Web/Models/Content/Card.cs +++ b/src/web/CareLeavers.Web/Models/Content/Card.cs @@ -16,5 +16,4 @@ public class Card : ContentfulContent public List Types { get; set; } = new(); - public int Position { get; set; } = 0; } \ No newline at end of file diff --git a/src/web/CareLeavers.Web/Views/Contentful/Page.cshtml b/src/web/CareLeavers.Web/Views/Contentful/Page.cshtml index 98a9a33..696d910 100644 --- a/src/web/CareLeavers.Web/Views/Contentful/Page.cshtml +++ b/src/web/CareLeavers.Web/Views/Contentful/Page.cshtml @@ -1,10 +1,13 @@ @using System.Globalization @using CareLeavers.Web.Configuration @using CareLeavers.Web.Models.Enums +@using Joonasw.AspNetCore.SecurityHeaders.Csp @using Microsoft.AspNetCore.Mvc.TagHelpers @model CareLeavers.Web.Models.Content.Page @inject IContentfulConfiguration ContentfulConfiguration +@inject ICspNonceService CspNonceService + @{ ViewBag.Title = Model.Title; @@ -45,26 +48,25 @@ } - @if (Model.Width == PageWidth.FullWidth) - { - - } - @if (Model.ShowLastUpdated) {
- + } + @if (Model.Width == PageWidth.TwoThirds) {
+   +
+
@if (Model.SecondaryContent != null) { +
} -
} @@ -83,3 +85,26 @@ } } + +@section Scripts +{ + @if (Model.ShowShareThis) + { + + } +} diff --git a/src/web/CareLeavers.Web/Views/Shared/Banner.cshtml b/src/web/CareLeavers.Web/Views/Shared/Banner.cshtml index a1c59df..e1cd191 100644 --- a/src/web/CareLeavers.Web/Views/Shared/Banner.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/Banner.cshtml @@ -24,7 +24,7 @@

@Model?.Title

@Model?.Text

- @Model?.LinkText + @Model?.LinkText

diff --git a/src/web/CareLeavers.Web/Views/Shared/Grid.cshtml b/src/web/CareLeavers.Web/Views/Shared/Grid.cshtml index 8b7d31b..070ee5a 100644 --- a/src/web/CareLeavers.Web/Views/Shared/Grid.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/Grid.cshtml @@ -25,12 +25,9 @@
@if (Model.Content != null && Model.Content.Any()) { - var position = -1; foreach (var content in Model.Content) { - position++; var card = (Card)content; - card.Position = position; } } diff --git a/src/web/CareLeavers.Web/Views/Shared/Grid/AlternatingImageAndText.cshtml b/src/web/CareLeavers.Web/Views/Shared/Grid/AlternatingImageAndText.cshtml index 879fc4b..5537175 100644 --- a/src/web/CareLeavers.Web/Views/Shared/Grid/AlternatingImageAndText.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/Grid/AlternatingImageAndText.cshtml @@ -6,7 +6,7 @@
@@ -15,7 +15,7 @@ { @Model.Types.FirstOrDefault() } -

@Model.Title

+

@Model.Title

@Model.Text

diff --git a/src/web/CareLeavers.Web/Views/Shared/Grid/Card.cshtml b/src/web/CareLeavers.Web/Views/Shared/Grid/Card.cshtml index b983b3c..842988e 100644 --- a/src/web/CareLeavers.Web/Views/Shared/Grid/Card.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/Grid/Card.cshtml @@ -5,7 +5,7 @@ }
- +
diff --git a/src/web/CareLeavers.Web/Views/Shared/Grid/ExternalAgency.cshtml b/src/web/CareLeavers.Web/Views/Shared/Grid/ExternalAgency.cshtml index 241d4b6..4721fbe 100644 --- a/src/web/CareLeavers.Web/Views/Shared/Grid/ExternalAgency.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/Grid/ExternalAgency.cshtml @@ -8,7 +8,7 @@ }
-

@Model.Name (Opens in a new tab)

+

@Model.Name (Opens in a new tab)

@Model.Description

Call: @Model.Call

Opening times: @Model.OpeningTimes

diff --git a/src/web/CareLeavers.Web/Views/Shared/_LastUpdated.cshtml b/src/web/CareLeavers.Web/Views/Shared/LastUpdated.cshtml similarity index 61% rename from src/web/CareLeavers.Web/Views/Shared/_LastUpdated.cshtml rename to src/web/CareLeavers.Web/Views/Shared/LastUpdated.cshtml index ccaa927..e894a8f 100644 --- a/src/web/CareLeavers.Web/Views/Shared/_LastUpdated.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/LastUpdated.cshtml @@ -1,10 +1,10 @@ @using System.Globalization -@model Contentful.Core.Models.SystemProperties +@model CareLeavers.Web.Models.Content.Page
diff --git a/src/web/CareLeavers.Web/Views/Shared/ShareThis.cshtml b/src/web/CareLeavers.Web/Views/Shared/ShareThis.cshtml index e9a2957..51fcb0e 100644 --- a/src/web/CareLeavers.Web/Views/Shared/ShareThis.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/ShareThis.cshtml @@ -4,6 +4,7 @@ {
+

Share this page

diff --git a/src/web/CareLeavers.Web/Views/Shared/_Layout.cshtml b/src/web/CareLeavers.Web/Views/Shared/_Layout.cshtml index 6ceabdc..83687e9 100644 --- a/src/web/CareLeavers.Web/Views/Shared/_Layout.cshtml +++ b/src/web/CareLeavers.Web/Views/Shared/_Layout.cshtml @@ -1,4 +1,5 @@ -@using CareLeavers.Web.Configuration +@using System.Globalization +@using CareLeavers.Web.Configuration @using GovUk.Frontend.AspNetCore @using GovUk.Frontend.AspNetCore.TagHelpers @using Joonasw.AspNetCore.SecurityHeaders.Csp diff --git a/src/web/tests/CareLeavers.Integration.Tests/Tests/SnapshotTests/Output/ComponentTest.html b/src/web/tests/CareLeavers.Integration.Tests/Tests/SnapshotTests/Output/ComponentTest.html index 23088a8..ab1c761 100644 --- a/src/web/tests/CareLeavers.Integration.Tests/Tests/SnapshotTests/Output/ComponentTest.html +++ b/src/web/tests/CareLeavers.Integration.Tests/Tests/SnapshotTests/Output/ComponentTest.html @@ -154,7 +154,7 @@

After you leave care

- External Agency Test + External Agency Test (Opens in a new tab)

Test test

@@ -174,16 +174,11 @@

-
-
-
-
-

+
+
+

Share this page

+
+
+
@@ -245,6 +249,23 @@

Support links

+