govuk_publishing_components 34.10.1 → 34.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-core.js +123 -10
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-ecommerce-tracker.js +17 -92
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-form-tracker.js +8 -2
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-link-tracker.js +12 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-schemas.js +16 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-smart-answer-results-tracker.js +57 -0
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4/ga4-specialist-link-tracker.js +2 -2
- data/app/assets/javascripts/govuk_publishing_components/analytics-ga4.js +1 -0
- data/app/assets/javascripts/govuk_publishing_components/components/layout-super-navigation-header.js +0 -22
- data/app/assets/javascripts/govuk_publishing_components/lib/trigger-event.js +1 -0
- data/app/assets/stylesheets/govuk_publishing_components/components/_layout-super-navigation-header.scss +42 -94
- data/app/models/govuk_publishing_components/audit_components.rb +55 -1
- data/app/views/govuk_publishing_components/audit/_components.html.erb +46 -1
- data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +1 -1
- data/app/views/govuk_publishing_components/components/_layout_super_navigation_header.html.erb +210 -221
- data/app/views/govuk_publishing_components/components/docs/breadcrumbs.yml +1 -1
- data/app/views/govuk_publishing_components/components/docs/related_navigation.yml +20 -0
- data/app/views/govuk_publishing_components/components/related_navigation/_section.html.erb +23 -13
- data/config/locales/en.yml +1 -1
- data/lib/govuk_publishing_components/presenters/breadcrumbs.rb +6 -0
- data/lib/govuk_publishing_components/presenters/related_navigation_helper.rb +14 -9
- data/lib/govuk_publishing_components/version.rb +1 -1
- metadata +4 -3
@@ -91,8 +91,22 @@ $after-button-padding-left: govuk-spacing(4);
|
|
91
91
|
|
92
92
|
.gem-c-layout-super-navigation-header__container {
|
93
93
|
position: relative;
|
94
|
+
}
|
94
95
|
|
95
|
-
|
96
|
+
.gem-c-layout-super-navigation-header__button-width-container {
|
97
|
+
position: relative;
|
98
|
+
}
|
99
|
+
|
100
|
+
.gem-c-layout-super-navigation-header__button-container {
|
101
|
+
@include govuk-media-query($until: "tablet") {
|
102
|
+
margin-right: govuk-spacing(-3);
|
103
|
+
}
|
104
|
+
|
105
|
+
top: -$black-bar-height;
|
106
|
+
position: absolute;
|
107
|
+
right: 0;
|
108
|
+
|
109
|
+
@include govuk-media-query($until: 300px) {
|
96
110
|
position: static;
|
97
111
|
}
|
98
112
|
}
|
@@ -105,47 +119,13 @@ $after-button-padding-left: govuk-spacing(4);
|
|
105
119
|
}
|
106
120
|
|
107
121
|
.gem-c-layout-super-navigation-header__content {
|
108
|
-
|
109
|
-
margin-right: govuk-spacing(-3);
|
110
|
-
}
|
111
|
-
|
112
|
-
display: inline-block;
|
113
|
-
float: right;
|
122
|
+
width: 100%;
|
114
123
|
}
|
115
124
|
|
116
125
|
.gem-c-layout-super-navigation-header__navigation-toggle-wrapper {
|
117
126
|
position: relative;
|
118
127
|
}
|
119
128
|
|
120
|
-
// Top level navigation and search.
|
121
|
-
.gem-c-layout-super-navigation-header__navigation-items,
|
122
|
-
.gem-c-layout-super-navigation-header__search-items {
|
123
|
-
display: block;
|
124
|
-
float: left;
|
125
|
-
list-style: none;
|
126
|
-
padding: 0;
|
127
|
-
margin: 0;
|
128
|
-
}
|
129
|
-
|
130
|
-
.gem-c-layout-super-navigation-header__navigation-items {
|
131
|
-
border-bottom: 1px solid $govuk-border-colour;
|
132
|
-
|
133
|
-
.js-module-initialised & {
|
134
|
-
&:last-child {
|
135
|
-
border-bottom: none;
|
136
|
-
}
|
137
|
-
}
|
138
|
-
|
139
|
-
@include govuk-media-query($from: "desktop") {
|
140
|
-
border-bottom: 0;
|
141
|
-
padding: 0;
|
142
|
-
|
143
|
-
&:first-of-type {
|
144
|
-
margin-right: -1px;
|
145
|
-
}
|
146
|
-
}
|
147
|
-
}
|
148
|
-
|
149
129
|
.gem-c-layout-super-navigation-header__navigation-item,
|
150
130
|
.gem-c-layout-super-navigation-header__search-item {
|
151
131
|
background: govuk-colour("black");
|
@@ -165,7 +145,7 @@ $after-button-padding-left: govuk-spacing(4);
|
|
165
145
|
font-size: 19px;
|
166
146
|
font-size: govuk-px-to-rem(19px);
|
167
147
|
font-weight: bold;
|
168
|
-
|
148
|
+
padding: govuk-spacing(3) 0;
|
169
149
|
position: relative;
|
170
150
|
|
171
151
|
@include govuk-media-query($from: "desktop") {
|
@@ -204,7 +184,7 @@ $after-button-padding-left: govuk-spacing(4);
|
|
204
184
|
|
205
185
|
&:after {
|
206
186
|
@include make-selectable-area-bigger;
|
207
|
-
@include pseudo-underline($left: $after-link-padding, $right: $after-link-padding
|
187
|
+
@include pseudo-underline($left: $after-link-padding, $right: $after-link-padding);
|
208
188
|
}
|
209
189
|
|
210
190
|
// stylelint-disable max-nesting-depth
|
@@ -413,7 +393,7 @@ $after-button-padding-left: govuk-spacing(4);
|
|
413
393
|
height: $black-bar-height;
|
414
394
|
padding: 0;
|
415
395
|
position: relative;
|
416
|
-
margin: 0
|
396
|
+
margin: 0;
|
417
397
|
vertical-align: top;
|
418
398
|
|
419
399
|
@include govuk-media-query($from: "desktop") {
|
@@ -566,7 +546,7 @@ $after-button-padding-left: govuk-spacing(4);
|
|
566
546
|
// Styles for search toggle button.
|
567
547
|
.gem-c-layout-super-navigation-header__search-toggle-button {
|
568
548
|
@include govuk-font($size: 19, $weight: "bold", $line-height: 20px);
|
569
|
-
background:
|
549
|
+
background: none;
|
570
550
|
border: 0;
|
571
551
|
color: govuk-colour("white");
|
572
552
|
cursor: pointer;
|
@@ -657,25 +637,22 @@ $after-button-padding-left: govuk-spacing(4);
|
|
657
637
|
}
|
658
638
|
}
|
659
639
|
|
640
|
+
.gem-c-layout-super-navigation-header__search-container {
|
641
|
+
padding-bottom: govuk-spacing(3);
|
642
|
+
}
|
643
|
+
|
660
644
|
// Dropdown menu.
|
661
645
|
.gem-c-layout-super-navigation-header__navigation-dropdown-menu {
|
646
|
+
@include govuk-media-query($until: 300px) {
|
647
|
+
padding-top: 80px;
|
648
|
+
}
|
649
|
+
|
662
650
|
background: govuk-colour("light-grey");
|
663
651
|
border-bottom: 1px govuk-colour("mid-grey") solid;
|
664
|
-
top: govuk-spacing(
|
665
|
-
left: govuk-spacing(-3);
|
666
|
-
padding: 0 govuk-spacing(3);
|
667
|
-
position: absolute;
|
668
|
-
right: govuk-spacing(-3);
|
669
|
-
|
670
|
-
@include govuk-media-query($from: "tablet") {
|
671
|
-
padding: 0 govuk-spacing(6);
|
672
|
-
left: govuk-spacing(-6);
|
673
|
-
right: govuk-spacing(-6);
|
674
|
-
}
|
652
|
+
padding-top: govuk-spacing(6);
|
675
653
|
|
676
654
|
@include govuk-media-query($from: "desktop") {
|
677
|
-
|
678
|
-
right: 0;
|
655
|
+
padding-top: govuk-spacing(5);
|
679
656
|
}
|
680
657
|
}
|
681
658
|
|
@@ -692,31 +669,24 @@ $after-button-padding-left: govuk-spacing(4);
|
|
692
669
|
// Dropdown menu items.
|
693
670
|
.gem-c-layout-super-navigation-header__dropdown-list-item {
|
694
671
|
box-sizing: border-box;
|
695
|
-
padding: 0 0 govuk-spacing(
|
672
|
+
padding: 0 0 govuk-spacing(3) 0;
|
696
673
|
position: relative;
|
674
|
+
margin: 0 0 govuk-spacing(2) 0;
|
697
675
|
@include govuk-media-query($from: "desktop") {
|
698
|
-
padding: 0 0 govuk-spacing(
|
676
|
+
padding: 0 0 govuk-spacing(3) 0;
|
677
|
+
margin: 0 govuk-spacing(3) govuk-spacing(1) govuk-spacing(3);
|
699
678
|
}
|
700
679
|
}
|
701
680
|
|
702
681
|
// Navigation menu items.
|
703
682
|
.gem-c-layout-super-navigation-header__navigation-second-items {
|
704
|
-
|
705
683
|
list-style: none;
|
706
684
|
margin: 0;
|
707
685
|
padding: govuk-spacing(3) govuk-spacing(5) govuk-spacing(5) 0;
|
708
686
|
|
709
|
-
& > li {
|
710
|
-
margin: 0;
|
711
|
-
}
|
712
|
-
|
713
687
|
@include govuk-media-query($from: "desktop") {
|
714
688
|
margin: 0 (0 - govuk-spacing(3)) govuk-spacing(9);
|
715
689
|
padding: govuk-spacing(2) 0 0 0;
|
716
|
-
|
717
|
-
& > li {
|
718
|
-
margin: 0 govuk-spacing(3);
|
719
|
-
}
|
720
690
|
}
|
721
691
|
}
|
722
692
|
|
@@ -743,11 +713,15 @@ $after-button-padding-left: govuk-spacing(4);
|
|
743
713
|
font-size: govuk-px-to-rem(16px);
|
744
714
|
font-weight: bold;
|
745
715
|
|
716
|
+
&:after {
|
717
|
+
@include make-selectable-area-bigger;
|
718
|
+
}
|
719
|
+
|
746
720
|
@include govuk-media-query($from: "desktop") {
|
747
721
|
padding: 0;
|
748
722
|
|
749
723
|
&:after {
|
750
|
-
|
724
|
+
@include make-selectable-area-bigger;
|
751
725
|
}
|
752
726
|
}
|
753
727
|
}
|
@@ -771,29 +745,8 @@ $after-button-padding-left: govuk-spacing(4);
|
|
771
745
|
margin: govuk-spacing(1) 0 0 0;
|
772
746
|
}
|
773
747
|
|
774
|
-
// Search dropdown.
|
775
|
-
.gem-c-layout-super-navigation-header__search-items {
|
776
|
-
.js-module-initialised & {
|
777
|
-
margin: 0 (0 - govuk-spacing(3));
|
778
|
-
position: absolute;
|
779
|
-
|
780
|
-
@include govuk-media-query($from: "tablet") {
|
781
|
-
margin: 0 (0 - govuk-spacing(6));
|
782
|
-
}
|
783
|
-
}
|
784
|
-
|
785
|
-
background: govuk-colour("light-grey");
|
786
|
-
left: 0;
|
787
|
-
right: 0;
|
788
|
-
z-index: 999;
|
789
|
-
|
790
|
-
@include govuk-media-query($from: "desktop") {
|
791
|
-
margin: 0;
|
792
|
-
}
|
793
|
-
}
|
794
|
-
|
795
748
|
.gem-c-layout-super-navigation-header__search-form {
|
796
|
-
padding: govuk-spacing(
|
749
|
+
padding: govuk-spacing(2) 0 govuk-spacing(6) 0;
|
797
750
|
}
|
798
751
|
|
799
752
|
// Popular links.
|
@@ -811,12 +764,6 @@ $after-button-padding-left: govuk-spacing(4);
|
|
811
764
|
&:after {
|
812
765
|
@include make-selectable-area-bigger;
|
813
766
|
}
|
814
|
-
|
815
|
-
@include govuk-media-query($from: "desktop") {
|
816
|
-
&:after {
|
817
|
-
content: none;
|
818
|
-
}
|
819
|
-
}
|
820
767
|
}
|
821
768
|
|
822
769
|
.gem-c-layout-super-navigation-header__width-container {
|
@@ -826,8 +773,9 @@ $after-button-padding-left: govuk-spacing(4);
|
|
826
773
|
}
|
827
774
|
|
828
775
|
@include govuk-media-query($from: "desktop") {
|
829
|
-
margin:
|
776
|
+
margin: 0 auto;
|
830
777
|
max-width: 960px;
|
778
|
+
padding: govuk-spacing(5);
|
831
779
|
}
|
832
780
|
}
|
833
781
|
|
@@ -34,12 +34,19 @@ module GovukPublishingComponents
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def compile_data(path)
|
37
|
+
component_file_details = get_component_file_details(path)
|
38
|
+
helper_usage = get_helper_usage(component_file_details)
|
39
|
+
|
40
|
+
# remove the template file reference as not needed
|
41
|
+
component_file_details.map { |detail| detail.delete(:template_file) }
|
42
|
+
|
37
43
|
{
|
38
44
|
gem_found: true,
|
39
45
|
component_code: clean_files(@all_templates, @templates_full_path).sort,
|
40
46
|
components_containing_components: find_all_partials_in(@all_templates),
|
41
|
-
component_file_details:
|
47
|
+
component_file_details: component_file_details,
|
42
48
|
component_numbers: @component_numbers,
|
49
|
+
helper_usage: helper_usage,
|
43
50
|
}
|
44
51
|
end
|
45
52
|
|
@@ -96,6 +103,8 @@ module GovukPublishingComponents
|
|
96
103
|
type = detail[:type]
|
97
104
|
file = detail[:file]
|
98
105
|
details["#{type}_exists".to_sym] = false
|
106
|
+
# save the location of the template to later grep for helper use
|
107
|
+
details["#{type}_file".to_sym] = file if type == "template"
|
99
108
|
if File.file?(file)
|
100
109
|
# we don't have separate print stylesheets anymore
|
101
110
|
# so check the main stylesheet for print styles
|
@@ -215,5 +224,50 @@ module GovukPublishingComponents
|
|
215
224
|
|
216
225
|
link
|
217
226
|
end
|
227
|
+
|
228
|
+
def get_helper_usage(components)
|
229
|
+
helpers = [
|
230
|
+
{
|
231
|
+
name: "Brand helper",
|
232
|
+
link: "lib/govuk_publishing_components/app_helpers/brand_helper.rb",
|
233
|
+
match: /(GovukPublishingComponents::AppHelpers::BrandHelper.new)/,
|
234
|
+
used_by: [],
|
235
|
+
},
|
236
|
+
{
|
237
|
+
name: "Component wrapper helper",
|
238
|
+
link: "lib/govuk_publishing_components/presenters/component_wrapper_helper.rb",
|
239
|
+
match: /(GovukPublishingComponents::Presenters::ComponentWrapperHelper.new)/,
|
240
|
+
used_by: [],
|
241
|
+
},
|
242
|
+
{
|
243
|
+
name: "Heading helper",
|
244
|
+
link: "lib/govuk_publishing_components/presenters/heading_helper.rb",
|
245
|
+
match: /(GovukPublishingComponents::Presenters::HeadingHelper.new)/,
|
246
|
+
used_by: [],
|
247
|
+
},
|
248
|
+
{
|
249
|
+
name: "Shared helper",
|
250
|
+
link: "lib/govuk_publishing_components/presenters/shared_helper.rb",
|
251
|
+
match: /(GovukPublishingComponents::Presenters::SharedHelper.new)/,
|
252
|
+
used_by: [],
|
253
|
+
},
|
254
|
+
]
|
255
|
+
|
256
|
+
components.each do |component|
|
257
|
+
file = component[:template_file]
|
258
|
+
next unless File.file?(file)
|
259
|
+
|
260
|
+
helpers.each do |helper|
|
261
|
+
next unless File.foreach(file).grep(helper[:match]).present?
|
262
|
+
|
263
|
+
helper[:used_by] << {
|
264
|
+
name: component[:name],
|
265
|
+
link: component[:template_file].split("/components/")[1],
|
266
|
+
}
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
helpers
|
271
|
+
end
|
218
272
|
end
|
219
273
|
end
|
@@ -63,9 +63,54 @@
|
|
63
63
|
items: component_items
|
64
64
|
%>
|
65
65
|
|
66
|
+
<% helpers_by_component = capture do %>
|
67
|
+
<dl class="govuk-summary-list">
|
68
|
+
<% @components[:helper_usage].each do |helper| %>
|
69
|
+
<div class="govuk-summary-list__row">
|
70
|
+
<dt class="govuk-summary-list__key">
|
71
|
+
<a href="https://github.com/alphagov/govuk_publishing_components/blob/main/<%= helper[:link] %>" class="govuk-link"><%= helper[:name] %></a>
|
72
|
+
</dt>
|
73
|
+
<dd class="govuk-summary-list__value">
|
74
|
+
<details class="govuk-details" data-module="govuk-details">
|
75
|
+
<summary class="govuk-details__summary">
|
76
|
+
<span class="govuk-details__summary-text">
|
77
|
+
Used by <%= helper[:used_by].length %> components
|
78
|
+
</span>
|
79
|
+
</summary>
|
80
|
+
<div class="govuk-details__text">
|
81
|
+
<ul class="govuk-list govuk-list--bullet">
|
82
|
+
<% helper[:used_by].each do |component| %>
|
83
|
+
<% github_link = 'https://github.com/alphagov/govuk_publishing_components/tree/main/app/views/govuk_publishing_components/components/' %>
|
84
|
+
<li>
|
85
|
+
<a href="<%= github_link %><%= component[:link] %>" class="govuk-link"><%= component[:name] %></a>
|
86
|
+
</li>
|
87
|
+
<% end %>
|
88
|
+
</ul>
|
89
|
+
</div>
|
90
|
+
</details>
|
91
|
+
</dd>
|
92
|
+
</div>
|
93
|
+
<% end %>
|
94
|
+
</dl>
|
95
|
+
<% end %>
|
96
|
+
|
97
|
+
<%
|
98
|
+
component_items << {
|
99
|
+
heading: {
|
100
|
+
text: "Helpers by component",
|
101
|
+
},
|
102
|
+
summary: {
|
103
|
+
text: "Shows which components use common helpers",
|
104
|
+
},
|
105
|
+
content: {
|
106
|
+
html: helpers_by_component
|
107
|
+
},
|
108
|
+
}
|
109
|
+
%>
|
110
|
+
|
66
111
|
<%= render 'items_in_applications',
|
67
112
|
heading: 'Helpers by application',
|
68
|
-
summary: 'Shows any applications that use
|
113
|
+
summary: 'Shows any applications that use helpers from the components gem',
|
69
114
|
content: @components[:helpers_used_by_applications],
|
70
115
|
items: component_items
|
71
116
|
%>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
component_helper = GovukPublishingComponents::Presenters::ComponentWrapperHelper.new(local_assigns)
|
15
15
|
component_helper.add_class(classes.join(" "))
|
16
|
-
component_helper.add_data_attribute({ module: "gem-track-click" })
|
16
|
+
component_helper.add_data_attribute({ module: "gem-track-click ga4-link-tracker" })
|
17
17
|
%>
|
18
18
|
|
19
19
|
<script type="application/ld+json">
|