govuk_publishing_components 21.57.0 → 21.60.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +31 -6
  3. data/app/assets/javascripts/component_guide/accessibility-test.js +21 -21
  4. data/app/assets/javascripts/component_guide/filter-components.js +19 -19
  5. data/app/assets/javascripts/component_guide/visual-regression.js +38 -37
  6. data/app/assets/javascripts/govuk_publishing_components/components/checkboxes.js +2 -2
  7. data/app/assets/javascripts/govuk_publishing_components/components/details.js +6 -4
  8. data/app/assets/javascripts/govuk_publishing_components/components/step-by-step-nav.js +4 -4
  9. data/app/assets/javascripts/govuk_publishing_components/lib/auto-track-event.js +31 -0
  10. data/app/assets/javascripts/govuk_publishing_components/lib/cookie-functions.js +24 -24
  11. data/app/assets/javascripts/govuk_publishing_components/lib/govspeak/youtube-link-enhancement.js +17 -17
  12. data/app/assets/stylesheets/component_guide/application.scss +15 -15
  13. data/app/assets/stylesheets/govuk_publishing_components/components/_action-link.scss +1 -9
  14. data/app/assets/stylesheets/govuk_publishing_components/components/_breadcrumbs.scss +1 -1
  15. data/app/assets/stylesheets/govuk_publishing_components/components/_checkboxes.scss +4 -0
  16. data/app/assets/stylesheets/govuk_publishing_components/components/_cookie-banner.scss +1 -8
  17. data/app/assets/stylesheets/govuk_publishing_components/components/_feedback.scss +0 -1
  18. data/app/assets/stylesheets/govuk_publishing_components/components/_govspeak-html-publication.scss +4 -5
  19. data/app/assets/stylesheets/govuk_publishing_components/components/_heading.scss +3 -8
  20. data/app/assets/stylesheets/govuk_publishing_components/components/_image-card.scss +1 -1
  21. data/app/assets/stylesheets/govuk_publishing_components/components/_input.scss +1 -1
  22. data/app/assets/stylesheets/govuk_publishing_components/components/_inverse-header.scss +5 -8
  23. data/app/assets/stylesheets/govuk_publishing_components/components/_list.scss +1 -0
  24. data/app/assets/stylesheets/govuk_publishing_components/components/_radio.scss +4 -0
  25. data/app/assets/stylesheets/govuk_publishing_components/components/_related-navigation.scss +2 -2
  26. data/app/assets/stylesheets/govuk_publishing_components/components/_search.scss +7 -3
  27. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-header.scss +0 -5
  28. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav-related.scss +1 -4
  29. data/app/assets/stylesheets/govuk_publishing_components/components/_step-by-step-nav.scss +8 -12
  30. data/app/assets/stylesheets/govuk_publishing_components/components/_table.scss +21 -24
  31. data/app/assets/stylesheets/govuk_publishing_components/components/_tabs.scss +4 -8
  32. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_attachment.scss +2 -0
  33. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_button.scss +1 -4
  34. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_charts.scss +6 -6
  35. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_contact.scss +2 -0
  36. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_footnotes.scss +2 -0
  37. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_highlight-answer.scss +2 -0
  38. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_place.scss +1 -1
  39. data/app/assets/stylesheets/govuk_publishing_components/components/govspeak/_typography.scss +2 -0
  40. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_markdown-typography.scss +1 -1
  41. data/app/assets/stylesheets/govuk_publishing_components/components/print/_govspeak.scss +2 -0
  42. data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav-header.scss +0 -4
  43. data/app/assets/stylesheets/govuk_publishing_components/components/print/_step-by-step-nav.scss +2 -10
  44. data/app/controllers/govuk_publishing_components/audit_controller.rb +52 -0
  45. data/app/controllers/govuk_publishing_components/component_guide_controller.rb +2 -1
  46. data/app/models/govuk_publishing_components/audit_applications.rb +105 -0
  47. data/app/models/govuk_publishing_components/audit_comparer.rb +185 -0
  48. data/app/models/govuk_publishing_components/audit_components.rb +158 -0
  49. data/app/views/govuk_publishing_components/audit/show.html.erb +229 -0
  50. data/app/views/govuk_publishing_components/component_guide/index.html.erb +9 -4
  51. data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +1 -1
  52. data/app/views/govuk_publishing_components/components/_list.html.erb +26 -0
  53. data/app/views/govuk_publishing_components/components/_machine_readable_metadata.html.erb +1 -1
  54. data/app/views/govuk_publishing_components/components/_radio.html.erb +13 -5
  55. data/app/views/govuk_publishing_components/components/_step_by_step_nav_header.html.erb +2 -2
  56. data/app/views/govuk_publishing_components/components/docs/checkboxes.yml +4 -0
  57. data/app/views/govuk_publishing_components/components/docs/govspeak.yml +45 -0
  58. data/app/views/govuk_publishing_components/components/docs/heading.yml +6 -3
  59. data/app/views/govuk_publishing_components/components/docs/list.yml +64 -0
  60. data/app/views/govuk_publishing_components/components/docs/radio.yml +4 -0
  61. data/config/routes.rb +1 -0
  62. data/lib/govuk_publishing_components/presenters/checkboxes_helper.rb +15 -7
  63. data/lib/govuk_publishing_components/presenters/heading_helper.rb +21 -1
  64. data/lib/govuk_publishing_components/version.rb +1 -1
  65. data/node_modules/axe-core/package.json +145 -220
  66. data/node_modules/govuk-frontend/govuk/all.js +160 -57
  67. data/node_modules/govuk-frontend/govuk/components/character-count/character-count.js +16 -8
  68. data/node_modules/govuk-frontend/govuk/components/character-count/macro-options.json +6 -0
  69. data/node_modules/govuk-frontend/govuk/components/character-count/template.njk +1 -0
  70. data/node_modules/govuk-frontend/govuk/components/checkboxes/_index.scss +6 -5
  71. data/node_modules/govuk-frontend/govuk/components/checkboxes/checkboxes.js +68 -21
  72. data/node_modules/govuk-frontend/govuk/components/date-input/macro-options.json +1 -1
  73. data/node_modules/govuk-frontend/govuk/components/file-upload/_index.scss +0 -27
  74. data/node_modules/govuk-frontend/govuk/components/footer/_index.scss +0 -3
  75. data/node_modules/govuk-frontend/govuk/components/footer/template.njk +1 -1
  76. data/node_modules/govuk-frontend/govuk/components/header/template.njk +1 -1
  77. data/node_modules/govuk-frontend/govuk/components/hint/_index.scss +2 -2
  78. data/node_modules/govuk-frontend/govuk/components/hint/template.njk +2 -2
  79. data/node_modules/govuk-frontend/govuk/components/input/_index.scss +0 -3
  80. data/node_modules/govuk-frontend/govuk/components/input/macro-options.json +6 -0
  81. data/node_modules/govuk-frontend/govuk/components/input/template.njk +1 -0
  82. data/node_modules/govuk-frontend/govuk/components/radios/radios.js +76 -28
  83. data/node_modules/govuk-frontend/govuk/components/select/_index.scss +0 -3
  84. data/node_modules/govuk-frontend/govuk/components/skip-link/_index.scss +1 -0
  85. data/node_modules/govuk-frontend/govuk/components/textarea/_index.scss +0 -3
  86. data/node_modules/govuk-frontend/govuk/components/textarea/macro-options.json +6 -0
  87. data/node_modules/govuk-frontend/govuk/components/textarea/template.njk +1 -0
  88. data/node_modules/govuk-frontend/govuk/components/warning-text/_index.scss +4 -2
  89. data/node_modules/govuk-frontend/govuk/helpers/_colour.scss +1 -1
  90. data/node_modules/govuk-frontend/govuk/settings/_colours-applied.scss +2 -2
  91. data/node_modules/govuk-frontend/govuk/settings/_colours-palette.scss +1 -1
  92. data/node_modules/govuk-frontend/govuk/settings/_measurements.scss +4 -1
  93. data/node_modules/govuk-frontend/package.json +14 -81
  94. data/node_modules/jquery/package.json +44 -116
  95. metadata +46 -66
  96. data/Rakefile +0 -32
@@ -12,6 +12,7 @@
12
12
 
13
13
  .gem-c-step-nav-related__links {
14
14
  @include govuk-font(16);
15
+ list-style: none;
15
16
  margin: 0;
16
17
  padding: 0;
17
18
  }
@@ -42,10 +43,6 @@
42
43
  }
43
44
  }
44
45
 
45
- .gem-c-step-nav-related__links {
46
- list-style: none;
47
- }
48
-
49
46
  .gem-c-step-nav-related__link-item {
50
47
  margin-top: govuk-spacing(3);
51
48
  }
@@ -29,7 +29,7 @@ $top-border: solid 2px govuk-colour("mid-grey", $legacy: "grey-3");
29
29
  // we want to ensure that both large and small step navs have the same size font on mobile
30
30
  // this will stop text resizing if compatibility mode is turned off
31
31
  @mixin step-nav-font($size, $tablet-size: $size, $weight: normal, $line-height: 1.3, $tablet-line-height: $line-height) {
32
- @include govuk-typography-common();
32
+ @include govuk-typography-common;
33
33
  font-size: $size + px;
34
34
  font-weight: $weight;
35
35
  line-height: $line-height;
@@ -122,7 +122,7 @@ $top-border: solid 2px govuk-colour("mid-grey", $legacy: "grey-3");
122
122
  @include govuk-media-query($from: tablet) {
123
123
  padding-left: govuk-spacing(9);
124
124
 
125
- &:after {
125
+ &:after { // stylelint-disable-line max-nesting-depth
126
126
  @include step-nav-line-position-large;
127
127
  top: govuk-spacing(6);
128
128
  }
@@ -145,12 +145,8 @@ $top-border: solid 2px govuk-colour("mid-grey", $legacy: "grey-3");
145
145
  }
146
146
 
147
147
  &:after {
148
- // scss-lint:disable DuplicateProperty
149
- // sass-lint:disable no-duplicate-properties
150
148
  height: -webkit-calc(100% - #{govuk-spacing(3)}); // fallback for iphone 4
151
149
  height: calc(100% - #{govuk-spacing(3)});
152
- // sass-lint:enable no-duplicate-properties
153
- // scss-lint:enable DuplicateProperty
154
150
  }
155
151
 
156
152
  .gem-c-step-nav__help:after {
@@ -322,12 +318,6 @@ $top-border: solid 2px govuk-colour("mid-grey", $legacy: "grey-3");
322
318
 
323
319
  + .gem-c-step-nav__list {
324
320
  margin-top: -5px;
325
-
326
- .gem-c-step-nav--large & {
327
- @include govuk-media-query($from: tablet) {
328
- margin-top: -govuk-spacing(3);
329
- }
330
- }
331
321
  }
332
322
 
333
323
  .gem-c-step-nav--large & {
@@ -335,6 +325,12 @@ $top-border: solid 2px govuk-colour("mid-grey", $legacy: "grey-3");
335
325
  padding-bottom: govuk-spacing(6);
336
326
  }
337
327
  }
328
+
329
+ .gem-c-step-nav--large & + .gem-c-step-nav__list {
330
+ @include govuk-media-query($from: tablet) {
331
+ margin-top: -govuk-spacing(3);
332
+ }
333
+ }
338
334
  }
339
335
 
340
336
  .gem-c-step-nav__list {
@@ -37,28 +37,26 @@ $table-row-even-background-colour: govuk-colour("light-grey", $legacy: "grey-4")
37
37
  padding-right: $sort-link-arrow-size;
38
38
  color: $govuk-link-colour;
39
39
  text-decoration: none;
40
+ }
40
41
 
41
- &:focus {
42
- @include govuk-focused-text;
43
- }
44
-
45
- &::after {
46
- content: "";
47
- position: absolute;
48
- top: 5px;
49
- right: 0;
50
-
51
- @include govuk-shape-arrow($direction: up, $base: $sort-link-arrow-size-small, $display: block);
52
- }
42
+ .app-table__sort-link:focus {
43
+ @include govuk-focused-text;
44
+ }
53
45
 
54
- &::before {
55
- content: "";
56
- position: absolute;
57
- top: 13px;
58
- right: 0;
46
+ .app-table__sort-link:after {
47
+ content: "";
48
+ position: absolute;
49
+ top: 5px;
50
+ right: 0;
51
+ @include govuk-shape-arrow($direction: up, $base: $sort-link-arrow-size-small, $display: block);
52
+ }
59
53
 
60
- @include govuk-shape-arrow($direction: down, $base: $sort-link-arrow-size-small, $display: block);
61
- }
54
+ .app-table__sort-link:before {
55
+ content: "";
56
+ position: absolute;
57
+ top: 13px;
58
+ right: 0;
59
+ @include govuk-shape-arrow($direction: down, $base: $sort-link-arrow-size-small, $display: block);
62
60
  }
63
61
  }
64
62
 
@@ -81,12 +79,12 @@ $table-row-even-background-colour: govuk-colour("light-grey", $legacy: "grey-4")
81
79
  }
82
80
  }
83
81
 
84
- .app-table__sort-link--ascending::before,
85
- .app-table__sort-link--descending::before {
82
+ .app-table__sort-link--ascending:before,
83
+ .app-table__sort-link--descending:before {
86
84
  content: none;
87
85
  }
88
86
 
89
- .app-table__sort-link--ascending::after {
87
+ .app-table__sort-link--ascending:after {
90
88
  content: "";
91
89
  position: absolute;
92
90
  top: $sort-link-arrow-spacing;
@@ -96,7 +94,7 @@ $table-row-even-background-colour: govuk-colour("light-grey", $legacy: "grey-4")
96
94
  @include govuk-shape-arrow($direction: up, $base: $sort-link-arrow-size, $display: inline-block);
97
95
  }
98
96
 
99
- .app-table__sort-link--descending::after {
97
+ .app-table__sort-link--descending:after {
100
98
  content: "";
101
99
  position: absolute;
102
100
  top: $sort-link-arrow-spacing;
@@ -105,7 +103,6 @@ $table-row-even-background-colour: govuk-colour("light-grey", $legacy: "grey-4")
105
103
 
106
104
  @include govuk-shape-arrow($direction: down, $base: $sort-link-arrow-size, $display: inline-block);
107
105
  }
108
-
109
106
  }
110
107
 
111
108
  .govuk-table__row {
@@ -11,25 +11,21 @@
11
11
  // We have some styles within GOVUK (.content-block) which can leak into the list styles for this component.
12
12
  // These styles are defined in Static: https://github.com/alphagov/static/blob/a815620cada7ea1c65428c1c3b3ac4dbe28977bf/app/assets/stylesheets/helpers/_text.scss
13
13
  // This sets more specific selectors so those unwanted styles are overidden
14
- // scss-lint:disable QualifyingElement
15
- // sass-lint:disable no-qualifying-elements
16
- ul.govuk-tabs__list {
14
+ ul.govuk-tabs__list { // stylelint-disable-line selector-no-qualifying-type
17
15
  margin: 0;
18
16
  padding: 0;
19
17
  list-style: none;
20
18
  @include govuk-responsive-margin(6, "bottom");
21
19
  }
22
20
 
23
- li.govuk-tabs__list-item {
21
+ li.govuk-tabs__list-item { // stylelint-disable-line selector-no-qualifying-type
24
22
  margin-left: govuk-spacing(5);
25
23
  }
26
24
 
27
- .js-enabled {
25
+ .js-enabled { // stylelint-disable-line no-duplicate-selectors
28
26
  @include govuk-media-query($from: tablet) {
29
- ul.govuk-tabs__list {
27
+ ul.govuk-tabs__list { // stylelint-disable-line selector-no-qualifying-type
30
28
  margin-bottom: 0;
31
29
  }
32
30
  }
33
31
  }
34
- // scss-lint:enable QualifyingElement
35
- // sass-lint:enable no-qualifying-elements
@@ -5,6 +5,8 @@
5
5
  // - alphagov/whitehall: ✔︎
6
6
  // - alphagov/govspeak: ✔︎
7
7
 
8
+ // stylelint-disable max-nesting-depth
9
+
8
10
  .gem-c-govspeak {
9
11
 
10
12
  // Scope attachment and attachment-link component styles to gem-c-govspeak
@@ -1,7 +1,6 @@
1
1
  @import "govuk/components/button/button";
2
2
 
3
- // scss-lint:disable PlaceholderInExtend
4
- // sass-lint:disable placeholder-in-extend
3
+ // stylelint-disable scss/at-extend-no-missing-placeholder
5
4
  .gem-c-govspeak {
6
5
  .gem-c-button {
7
6
  @extend .govuk-button;
@@ -11,5 +10,3 @@
11
10
  @extend .govuk-button--start;
12
11
  }
13
12
  }
14
- // sass-lint:enable placeholder-in-extend
15
- // scss-lint:enable PlaceholderInExtend
@@ -9,6 +9,8 @@
9
9
  // adapted from magna-charta example stylesheet
10
10
  // https://github.com/alphagov/magna-charta/blob/master/demo/stylesheets/magna-charta.css
11
11
 
12
+ // stylelint-disable max-nesting-depth
13
+
12
14
  .gem-c-govspeak {
13
15
  // DEFAULT CHART STYLES
14
16
 
@@ -27,8 +29,9 @@
27
29
  $chart-border: govuk-colour("white"); // Chart border colour
28
30
  $key-border: govuk-colour("white"); // Key border colour
29
31
  $bar-colours: govuk-colour("blue"), govuk-colour("turquoise"), govuk-colour("green"), govuk-colour("light-green"), govuk-colour("yellow"), govuk-colour("orange"), govuk-colour("red"), govuk-colour("bright-purple", $legacy: "bright-red");
30
- $bar-cell-colour: #ebebeb;
31
- $bar-outdented-colour: #111111;
32
+ $bar-text-colours: govuk-colour("white"), govuk-colour("black"), govuk-colour("white"), govuk-colour("black"), govuk-colour("black"), govuk-colour("black"), govuk-colour("white"), govuk-colour("white");
33
+ $bar-cell-colour: govuk-colour("black");
34
+ $bar-outdented-colour: govuk-colour("black");
32
35
 
33
36
  // CHART STYLES
34
37
  .mc-chart {
@@ -138,6 +141,7 @@
138
141
  @for $i from 0 to length($bar-colours) {
139
142
  .mc-bar-#{$i + 1} {
140
143
  background-color: nth($bar-colours, $i + 1);
144
+ color: nth($bar-text-colours, $i + 1);
141
145
  }
142
146
  }
143
147
 
@@ -266,10 +270,6 @@
266
270
  text-align: left;
267
271
  }
268
272
 
269
- .mc-chart.mc-negative .mc-td.mc-key-cell {
270
- padding-right: 25px;
271
- }
272
-
273
273
  .mc-toggle-link {
274
274
  display: block;
275
275
  margin-top: 30px;
@@ -5,6 +5,8 @@
5
5
  // - alphagov/whitehall: ✔︎
6
6
  // - alphagov/govspeak: ✔︎
7
7
 
8
+ // stylelint-disable max-nesting-depth
9
+
8
10
  .gem-c-govspeak {
9
11
  // .address is used by the `$A` markdown pattern
10
12
  .address,
@@ -9,6 +9,8 @@
9
9
  // - alphagov/whitehall: ✔︎
10
10
  // - alphagov/govspeak: ✔︎
11
11
 
12
+ // stylelint-disable max-nesting-depth
13
+
12
14
  .gem-c-govspeak {
13
15
  .footnotes {
14
16
  border-top: 1px solid govuk-colour("mid-grey", $legacy: "grey-2");
@@ -1,3 +1,5 @@
1
+ // stylelint-disable max-nesting-depth
2
+
1
3
  $highlight-answer-bg-color: govuk-colour("green");
2
4
  $highlight-answer-color: govuk-colour("white");
3
5
 
@@ -1,4 +1,4 @@
1
- .gem-c-govspeak .place {
1
+ .gem-c-govspeak .place {
2
2
  margin: 1.5em 0;
3
3
  border-bottom: solid 1px govuk-colour("mid-grey", $legacy: "grey-2");
4
4
  padding-bottom: 1.5em;
@@ -9,6 +9,8 @@
9
9
  // - alphagov/whitehall: ✔︎
10
10
  // - alphagov/govspeak: ✔︎
11
11
 
12
+ // stylelint-disable max-nesting-depth
13
+
12
14
  .gem-c-govspeak {
13
15
  @include markdown-typography;
14
16
 
@@ -105,7 +105,7 @@
105
105
  }
106
106
 
107
107
  li {
108
- margin: 0 0 5px 0;
108
+ margin: 0 0 5px;
109
109
  padding: 0;
110
110
 
111
111
  p {
@@ -1,3 +1,5 @@
1
+ // stylelint-disable max-nesting-depth
2
+
1
3
  .gem-c-govspeak {
2
4
  .media-player {
3
5
  display: none;
@@ -1,5 +1,3 @@
1
- // scss-lint:disable SelectorFormat
2
-
3
1
  .gem-c-step-nav-header__part-of {
4
2
  display: block;
5
3
  }
@@ -11,5 +9,3 @@
11
9
  .gem-c-step-nav-header__skip-link {
12
10
  display: none;
13
11
  }
14
-
15
- // scss-lint:enable SelectorFormat
@@ -1,5 +1,3 @@
1
- // scss-lint:disable SelectorFormat
2
-
3
1
  $grey-2: #bfc1c3;
4
2
  $white: #ffffff;
5
3
  $number-circle-size: 35px;
@@ -40,6 +38,7 @@ $stroke-width: 3px;
40
38
  }
41
39
 
42
40
  .gem-c-step-nav__step {
41
+ padding-left: 60px;
43
42
  position: relative;
44
43
  }
45
44
 
@@ -74,14 +73,9 @@ $stroke-width: 3px;
74
73
  padding-bottom: 1em;
75
74
  }
76
75
 
77
- .gem-c-step-nav__step {
78
- position: relative;
79
- padding-left: 60px;
80
- }
81
-
82
76
  .gem-c-step-nav__title {
83
77
  @include govuk-font(19, $weight: bold);
84
- margin: 0 0 .5em 0;
78
+ margin: 0 0 .5em;
85
79
  padding: 0;
86
80
  }
87
81
 
@@ -120,5 +114,3 @@ $stroke-width: 3px;
120
114
  .gem-c-step-nav__circle-step-colon {
121
115
  display: none;
122
116
  }
123
-
124
- // scss-lint:enable SelectorFormat
@@ -0,0 +1,52 @@
1
+ module GovukPublishingComponents
2
+ class AuditController < GovukPublishingComponents::ApplicationController
3
+ def show
4
+ path = Dir.pwd
5
+
6
+ components = AuditComponents.new(path)
7
+ applications = analyse_applications(File.expand_path("..", path))
8
+ compared_data = AuditComparer.new(components.data, applications)
9
+
10
+ @applications = compared_data.applications_data || []
11
+ @components = compared_data.gem_data || []
12
+ end
13
+
14
+ private
15
+
16
+ def analyse_applications(path)
17
+ results = []
18
+ applications = %w[
19
+ calculators
20
+ collections
21
+ collections-publisher
22
+ content-data-admin
23
+ content-publisher
24
+ email-alert-frontend
25
+ feedback
26
+ finder-frontend
27
+ frontend
28
+ government-frontend
29
+ govspeak-preview
30
+ info-frontend
31
+ licence-finder
32
+ manuals-frontend
33
+ release
34
+ search-admin
35
+ service-manual-frontend
36
+ signon
37
+ smart-answers
38
+ static
39
+ travel-advice-publisher
40
+ whitehall
41
+ ].sort
42
+
43
+ applications.each do |application|
44
+ application_path = [path, application].join("/")
45
+ app = AuditApplications.new(application_path, application)
46
+ results << app.data
47
+ end
48
+
49
+ results
50
+ end
51
+ end
52
+ end
@@ -83,8 +83,9 @@ module GovukPublishingComponents
83
83
  def components_in_use
84
84
  matches = []
85
85
 
86
- files = Dir["#{@application_path}/app/views/**/*.html.erb"]
86
+ files = Dir["#{@application_path}/app/views/**/*.erb"]
87
87
  files.concat Dir["#{@application_path}/app/**/*.rb"]
88
+ files.concat Dir["#{@application_path}/lib/**/*.{rb,erb}"]
88
89
 
89
90
  files.each do |file|
90
91
  data = File.read(file)
@@ -0,0 +1,105 @@
1
+ module GovukPublishingComponents
2
+ class AuditApplications
3
+ attr_reader :data
4
+
5
+ def initialize(path, name)
6
+ templates = Dir["#{path}/app/views/**/*.erb"]
7
+ stylesheets = Dir["#{path}/app/assets/stylesheets/**/*.scss"]
8
+ javascripts = Dir["#{path}/app/assets/javascripts/**/*.js"]
9
+
10
+ find_components = /(?<=govuk_publishing_components\/components\/)[\/a-zA-Z_-]+(?=['"])/
11
+
12
+ @find_all_stylesheets = /@import ["']{1}govuk_publishing_components\/all_components/
13
+ find_stylesheets = /(?<=@import ["']{1}govuk_publishing_components\/components\/)(?!print\/)+[a-zA-Z_-]+(?=['"])/
14
+
15
+ @find_all_print_stylesheets = /@import ["']{1}govuk_publishing_components\/all_components_print/
16
+ find_print_stylesheets = /(?<=@import ["']{1}govuk_publishing_components\/components\/print\/)[a-zA-Z_-]+(?=['"])/
17
+
18
+ @find_all_javascripts = /\/\/[ ]*= require govuk_publishing_components\/all_components/
19
+ find_javascripts = /(?<=require govuk_publishing_components\/components\/)[a-zA-Z_-]+/
20
+
21
+ components_in_templates = find_components(templates, find_components, "templates") || []
22
+ components_in_stylesheets = find_components(stylesheets, find_stylesheets, "stylesheets") || []
23
+ components_in_print_stylesheets = find_components(stylesheets, find_print_stylesheets, "print_stylesheets") || []
24
+ components_in_javascripts = find_components(javascripts, find_javascripts, "javascripts") || []
25
+
26
+ ruby_paths = %w[/app/helpers/ /app/presenters/ /lib/]
27
+ components_in_ruby = []
28
+ ruby_paths.each do |ruby_path|
29
+ components_in_ruby << find_components(Dir["#{path}#{ruby_path}**/*.{rb,erb}"], find_components, "ruby") || []
30
+ end
31
+ components_in_ruby = components_in_ruby.flatten.uniq
32
+
33
+ application_found = application_exists(path)
34
+ components_found = []
35
+
36
+ if application_found
37
+ components_found = [
38
+ {
39
+ location: "templates",
40
+ components: components_in_templates,
41
+ },
42
+ {
43
+ location: "stylesheets",
44
+ components: components_in_stylesheets,
45
+ },
46
+ {
47
+ location: "print_stylesheets",
48
+ components: components_in_print_stylesheets,
49
+ },
50
+ {
51
+ location: "javascripts",
52
+ components: components_in_javascripts,
53
+ },
54
+ {
55
+ location: "ruby",
56
+ components: components_in_ruby,
57
+ },
58
+ ]
59
+ end
60
+
61
+ @data = {
62
+ name: name,
63
+ application_found: application_found,
64
+ components_found: components_found,
65
+ }
66
+ end
67
+
68
+ private
69
+
70
+ def find_components(files, find, type)
71
+ components_found = []
72
+
73
+ files.each do |file|
74
+ src = File.read(file)
75
+ components_found << find_match(find, src, type)
76
+ rescue StandardError
77
+ puts "File #{file} not found"
78
+ end
79
+
80
+ components_found.flatten.uniq.sort
81
+ end
82
+
83
+ def find_match(find, src, type)
84
+ return %w[all] if src.match(@find_all_stylesheets) && type == "stylesheets"
85
+ return %w[all] if src.match(@find_all_print_stylesheets) && type == "print_stylesheets"
86
+ return %w[all] if src.match(@find_all_javascripts) && type == "javascripts"
87
+
88
+ matches = src.scan(find)
89
+ all_matches = []
90
+ matches.each do |match|
91
+ all_matches << clean_file_name(match.tr('[])\'"', ""))
92
+ end
93
+
94
+ all_matches
95
+ end
96
+
97
+ def clean_file_name(name)
98
+ name.tr("_-", " ").strip
99
+ end
100
+
101
+ def application_exists(directory)
102
+ File.directory?(directory)
103
+ end
104
+ end
105
+ end