From c503543a80300f464981a51c49a7c2384ad5d0d4 Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Wed, 12 Nov 2025 12:25:37 -0600 Subject: [PATCH 1/3] Switch to a more flexible banner format --- site/lib/src/components/layout/banner.dart | 44 ++-------------------- site/lib/src/layouts/doc_layout.dart | 5 ++- src/data/banner.yml | 7 ---- src/data/site.yml | 7 ++++ 4 files changed, 13 insertions(+), 50 deletions(-) delete mode 100644 src/data/banner.yml diff --git a/site/lib/src/components/layout/banner.dart b/site/lib/src/components/layout/banner.dart index 6e5f0797705..6a5cf3f902a 100644 --- a/site/lib/src/components/layout/banner.dart +++ b/site/lib/src/components/layout/banner.dart @@ -4,43 +4,11 @@ import 'package:jaspr/jaspr.dart'; -/// The information to display in the site banner, -/// as configured in the `src/data/banner.yml` file. -@immutable -final class BannerContent { - final String text; - final String linkText; - final String linkUri; - final bool newTab; - - const BannerContent({ - required this.text, - required this.linkText, - required this.linkUri, - this.newTab = false, - }); - - factory BannerContent.fromMap(Map bannerData) { - final text = bannerData['text'] as String; - final link = bannerData['link'] as Map; - final linkText = link['text'] as String; - final linkUri = link['url'] as String; - final newTab = link['newTab'] as bool? ?? false; - - return BannerContent( - text: text, - linkText: linkText, - linkUri: linkUri, - newTab: newTab, - ); - } -} - /// The site-wide banner. class DashBanner extends StatelessComponent { - const DashBanner(this.content, {super.key}); + const DashBanner(this.inlineHtmlContent, {super.key}); - final BannerContent content; + final String inlineHtmlContent; @override Component build(BuildContext context) => div( @@ -48,13 +16,7 @@ class DashBanner extends StatelessComponent { attributes: {'role': 'alert'}, [ p([ - text(content.text), - text(' '), - a( - href: content.linkUri, - target: content.newTab ? Target.blank : null, - [text(content.linkText)], - ), + raw(inlineHtmlContent), ]), ], ); diff --git a/site/lib/src/layouts/doc_layout.dart b/site/lib/src/layouts/doc_layout.dart index 437c2d5d7e3..e4cddf58918 100644 --- a/site/lib/src/layouts/doc_layout.dart +++ b/site/lib/src/layouts/doc_layout.dart @@ -47,8 +47,9 @@ class DocLayout extends FlutterDocsLayout { currentTitle: pageTitle, ), if (showBanner) - if (page.data['banner'] case final Map bannerData) - DashBanner(BannerContent.fromMap(bannerData)), + if (siteData['bannerHtml'] case final String bannerHtml + when bannerHtml.trim().isNotEmpty) + DashBanner(bannerHtml), div(classes: 'after-leading-content', [ if (tocData != null) aside(id: 'side-menu', [ diff --git a/src/data/banner.yml b/src/data/banner.yml deleted file mode 100644 index 84b162489f6..00000000000 --- a/src/data/banner.yml +++ /dev/null @@ -1,7 +0,0 @@ -text: >- - Don't miss the live Flutter and Dart - live Q & A happening Wednesday, Nov 12 at 11am PST. -link: - text: "Be there!" - url: "https://www.youtube.com/watch?v=RTb3gP4p5bw" - newTab: true diff --git a/src/data/site.yml b/src/data/site.yml index 03edddfbceb..1c9d1bdb769 100644 --- a/src/data/site.yml +++ b/src/data/site.yml @@ -5,6 +5,13 @@ email: flutter-dev@googlegroups.com showBanner: true +# The raw, inline HTML to display in the banner. +# Is automatically wrapped in a paragraph tag. +bannerHtml: >- + Don't miss the live Flutter and Dart Q&A happening + today, November 12 at 11am PST. + Join us! + branch: main repo: organization: https://github.com/flutter From 3226e683ce48a7fc3bdbecc184e9d211e44cfb6f Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Wed, 12 Nov 2025 12:37:47 -0600 Subject: [PATCH 2/3] Add ref=noopener --- src/data/site.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/site.yml b/src/data/site.yml index 1c9d1bdb769..1879764509f 100644 --- a/src/data/site.yml +++ b/src/data/site.yml @@ -10,7 +10,7 @@ showBanner: true bannerHtml: >- Don't miss the live Flutter and Dart Q&A happening today, November 12 at 11am PST. - Join us! + Join us! branch: main repo: From c9df52c0cf94a020711f406bad6816dc62c16101 Mon Sep 17 00:00:00 2001 From: Parker Lougheed Date: Wed, 12 Nov 2025 12:38:26 -0600 Subject: [PATCH 3/3] Add a doc comment --- site/lib/src/components/layout/banner.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/site/lib/src/components/layout/banner.dart b/site/lib/src/components/layout/banner.dart index 6a5cf3f902a..78e02d176f4 100644 --- a/site/lib/src/components/layout/banner.dart +++ b/site/lib/src/components/layout/banner.dart @@ -8,6 +8,10 @@ import 'package:jaspr/jaspr.dart'; class DashBanner extends StatelessComponent { const DashBanner(this.inlineHtmlContent, {super.key}); + /// The raw, inline HTML content to render in the banner. + /// + /// This should only be sourced from managed content, + /// such as our checked-in data files. final String inlineHtmlContent; @override