@gouvfr/dsfr-roller 1.0.6 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/env/local/env.json +1 -0
  2. package/env/prod/env.json +1 -0
  3. package/env/staging/env.json +1 -0
  4. package/package.json +3 -2
  5. package/src/component/components/button.js +2 -2
  6. package/src/component/components/header.js +1 -1
  7. package/src/component/components/sidemenu.js +1 -0
  8. package/src/integration/bundler.js +14 -2
  9. package/src/node/directive/{doc → components/accordion}/accordion-container-directive.js +4 -4
  10. package/src/node/directive/{doc → components/accordion}/accordions-group-container-directive.js +1 -1
  11. package/src/node/directive/{doc → components/button}/button-leaf-directive.js +3 -3
  12. package/src/node/directive/components/card/card-container-directive.js +114 -0
  13. package/src/node/directive/{doc → components/table}/table-container-directive.js +7 -7
  14. package/src/node/directive/{doc → components/tabs}/tab-container-directive.js +1 -1
  15. package/src/node/directive/{doc → components/tabs}/tabs-container-directive.js +1 -1
  16. package/src/node/directive/components/tile/tile-container-directive.js +135 -0
  17. package/src/node/directive/core/grid-container-directive.js +15 -0
  18. package/src/node/directive/doc/{anatomy-container-directive.js → guidance/anatomy-container-directive.js} +2 -2
  19. package/src/node/directive/doc/{guideline-container-directive.js → guidance/guideline-container-directive.js} +3 -3
  20. package/src/node/directive/doc/{guidelines-container-directive.js → guidance/guidelines-container-directive.js} +1 -1
  21. package/src/node/directive/doc/{pin-leaf-directive.js → guidance/pin-leaf-directive.js} +1 -1
  22. package/src/node/directive/doc/page-item-card-container-directive.js +53 -0
  23. package/src/node/directive/doc/page-item-list-leaf-directive.js +33 -0
  24. package/src/node/directive/doc/tab-navigation-container-directive.js +1 -1
  25. package/src/node/directive/doc/video-leaf-directive.js +44 -0
  26. package/src/node/directive/home/hp-analytics-container-directive.js +67 -0
  27. package/src/node/directive/home/hp-community-container-directive.js +78 -0
  28. package/src/node/directive/home/hp-community-tile-container-directive.js +57 -0
  29. package/src/node/directive/home/hp-discover-container-directive.js +41 -0
  30. package/src/node/directive/home/hp-discover-tile-container-directive.js +81 -0
  31. package/src/node/directive/home/hp-faq-container-directive.js +60 -0
  32. package/src/node/directive/home/hp-goals-container-directive.js +37 -0
  33. package/src/node/directive/home/hp-hero-container-directive.js +54 -0
  34. package/src/node/directive/home/hp-news-container-directive.js +53 -0
  35. package/src/node/directive/home/hp-showcase-card-container-directive.js +81 -0
  36. package/src/node/directive/home/hp-showcase-container-directive.js +55 -0
  37. package/src/node/directive/home/hp-slice-video-container-directive.js +246 -0
  38. package/src/node/generic/link-node.js +1 -1
  39. package/src/node/node-factory.js +45 -11
  40. package/src/page/head/head.js +3 -0
  41. package/src/page/head/resource.js +17 -0
  42. package/src/page/head/share.js +23 -5
  43. package/src/page/head/stylesheets.js +2 -1
  44. package/src/page/page.js +3 -1
  45. package/src/page/scripts/scripts.js +2 -1
  46. package/src/script/home/index.js +10 -0
  47. package/src/script/home/inject-svg.js +28 -0
  48. package/src/script/home/show-on-scroll.js +24 -0
  49. package/src/script/home/stop-video-on-close.js +20 -0
  50. package/src/script/main/cmp/index.js +72 -0
  51. package/src/script/main/cmp/tarteaucitron/config.js +34 -0
  52. package/src/script/main/cmp/tarteaucitron/lang.js +14 -0
  53. package/src/script/main/cmp/tarteaucitron/services.js +9142 -0
  54. package/src/script/main/cmp/tarteaucitron/tarteaucitron.js +3301 -0
  55. package/src/script/main/core/element.js +7 -3
  56. package/src/script/main/core/get-current-repo.js +6 -0
  57. package/src/script/main/core/get-query.js +12 -0
  58. package/src/script/main/core/replace-fragments.js +4 -0
  59. package/src/script/main/elements/pagination/index.js +23 -0
  60. package/src/script/main/elements/pagination/pagination-item.js +94 -0
  61. package/src/script/main/elements/pagination/pagination-list.js +131 -0
  62. package/src/script/main/elements/search-bar/index.js +64 -0
  63. package/src/script/main/elements/search-bar/results/result-item.js +13 -0
  64. package/src/script/main/elements/search-bar/results/results-button.js +20 -0
  65. package/src/script/main/elements/search-bar/results/results-dropdown.js +48 -0
  66. package/src/script/main/elements/search-bar/results/results-empty.js +21 -0
  67. package/src/script/main/elements/search-bar/results/results-list.js +19 -0
  68. package/src/script/main/index.js +11 -5
  69. package/src/script/main/minisearch/index.js +46 -0
  70. package/src/script/search/elements/result-card.js +46 -0
  71. package/src/script/search/elements/results-count.js +21 -0
  72. package/src/script/search/elements/results-empty.js +21 -0
  73. package/src/script/search/elements/results-list.js +25 -0
  74. package/src/script/search/elements/search-page.js +44 -0
  75. package/src/script/search/index.js +9 -0
  76. package/src/style/home/_analytics.scss +105 -0
  77. package/src/style/home/_community.scss +222 -0
  78. package/src/style/home/_discover.scss +208 -0
  79. package/src/style/home/_faq.scss +24 -0
  80. package/src/style/home/_goals.scss +53 -0
  81. package/src/style/home/_hero.scss +135 -0
  82. package/src/style/home/_news.scss +26 -0
  83. package/src/style/home/_showcase.scss +129 -0
  84. package/src/style/home/_slice-video.scss +168 -0
  85. package/src/style/home/index.scss +13 -0
  86. package/src/style/main/components/_dsfr-doc-pagination.scss +4 -0
  87. package/src/style/main/components/_dsfr-doc-searchbar.scss +54 -0
  88. package/src/style/main/components/_index.scss +3 -1
  89. package/src/style/search/_search-page.scss +0 -0
  90. package/src/style/search/index.scss +1 -0
  91. package/src/template/templates/home-template.js +4 -3
  92. package/src/template/templates/search-template.js +15 -8
  93. package/static/img/placeholder.16x9.png +0 -0
  94. package/src/script/main/elements/searchbar.js +0 -18
@@ -0,0 +1,67 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpAnalyticsContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const description = data.children[1];
11
+ const link = data.children[2];
12
+
13
+ return super.structure({
14
+ type: 'htmlContainer',
15
+ tagName: 'div',
16
+ classes: ['dsfr-doc-hp-analytics', 'fr-background-alt--blue-france'],
17
+ children: [
18
+ {
19
+ type: 'htmlContainer',
20
+ tagName: 'div',
21
+ classes: ['fr-container'],
22
+ children: [
23
+ {
24
+ type: 'htmlContainer',
25
+ tagName: 'div',
26
+ classes: ['dsfr-doc-hp-analytics__img'],
27
+ children: [
28
+ {
29
+ type: 'image',
30
+ classes: ['fr-responsive-img'],
31
+ tagName: 'img',
32
+ attributes: {
33
+ src: data.imgUrl,
34
+ alt: ''
35
+ }
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ type: 'htmlContainer',
41
+ tagName: 'div',
42
+ classes: ['dsfr-doc-hp-analytics__content'],
43
+ children: [
44
+ {
45
+ classes: ['dsfr-doc-hp-analytics__title'],
46
+ ...title
47
+ },
48
+ {
49
+ classes: ['dsfr-doc-hp-analytics__desc'],
50
+ ...description
51
+ },
52
+ {
53
+ classes: ['dsfr-doc-hp-analytics__link', 'fr-btn', 'fr-btn--secondary'],
54
+ ...link.children[0],
55
+ }
56
+ ]
57
+ }
58
+ ]
59
+ }
60
+ ]
61
+ });
62
+ }
63
+ }
64
+
65
+ HpAnalyticsContainerDirective.NAME = 'hp-analytics';
66
+
67
+ export { HpAnalyticsContainerDirective };
@@ -0,0 +1,78 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpCommunityContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const tiles = data.children.slice(1);
11
+
12
+ return super.structure({
13
+ type: 'htmlContainer',
14
+ tagName: 'div',
15
+ classes: ['dsfr-doc-hp-community'],
16
+ children: [
17
+ {
18
+ type: 'htmlContainer',
19
+ tagName: 'div',
20
+ classes: ['fr-container'],
21
+ children: [
22
+ {
23
+ classes: ['dsfr-doc-hp-community__title'],
24
+ ...title
25
+ },
26
+ {
27
+ type: 'htmlContainer',
28
+ tagName: 'div',
29
+ classes: ['dsfr-doc-hp-community__container'],
30
+ children: [
31
+ {
32
+ type: 'htmlContainer',
33
+ tagName: 'div',
34
+ classes: ['dsfr-doc-hp-community__img', 'dsfr-doc-hp-community__img--light'],
35
+ children: [
36
+ {
37
+ type: 'image',
38
+ classes: ['fr-responsive-img'],
39
+ attributes: {
40
+ src: data.imgUrl,
41
+ alt: ''
42
+ }
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ type: 'htmlContainer',
48
+ tagName: 'div',
49
+ classes: ['dsfr-doc-hp-community__img', 'dsfr-doc-hp-community__img--dark'],
50
+ children: [
51
+ {
52
+ type: 'image',
53
+ classes: ['fr-responsive-img'],
54
+ attributes: {
55
+ src: data.imgDarkUrl,
56
+ alt: ''
57
+ }
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ type: 'htmlContainer',
63
+ tagName: 'div',
64
+ classes: ['dsfr-doc-hp-community__tiles'],
65
+ children: tiles
66
+ }
67
+ ]
68
+ }
69
+ ]
70
+ }
71
+ ]
72
+ });
73
+ }
74
+ }
75
+
76
+ HpCommunityContainerDirective.NAME = 'hp-community';
77
+
78
+ export { HpCommunityContainerDirective };
@@ -0,0 +1,57 @@
1
+ import { Node } from '../../node.js'
2
+
3
+ class HpCommunityTileContainerDirective extends Node {
4
+ structure (data) {
5
+ const hasIcon = data.properties.icon !== undefined;
6
+ const contentTitle = data.children[0];
7
+ const contentDescription = data.children[1];
8
+ const contentLink = data.children.find(child => child.children[0].type === 'link');
9
+
10
+ return super.structure({
11
+ type: 'htmlContainer',
12
+ tagName: 'div',
13
+ classes: ['dsfr-doc-hp-community-tile'],
14
+ children: [
15
+ {
16
+ type: 'htmlContainer',
17
+ tagName: 'div',
18
+ classes: ['dsfr-doc-hp-community-tile__img', hasIcon ? `fr-icon-${data.properties.icon}` : ''],
19
+ children: [
20
+ data.imgUrl ? {
21
+ type: 'image',
22
+ attributes: {
23
+ src: data.imgUrl,
24
+ alt: ''
25
+ }
26
+ } : {}
27
+ ]
28
+ },
29
+ {
30
+ type: 'htmlContainer',
31
+ tagName: 'div',
32
+ classes: ['dsfr-doc-hp-community-tile__content'],
33
+ children: [
34
+ {
35
+ classes: ['dsfr-doc-hp-community-tile__title'],
36
+ ...contentTitle
37
+ },
38
+ {
39
+ classes: ['dsfr-doc-hp-community-tile__desc'],
40
+ ...contentDescription
41
+ },
42
+ {
43
+ classes: ['dsfr-doc-hp-community-tile__link', 'fr-link', 'fr-link--icon-right', 'fr-icon-arrow-right-line'],
44
+ ...contentLink.children[0]
45
+ }
46
+ ]
47
+ }
48
+ ]
49
+ });
50
+
51
+ }
52
+
53
+ }
54
+
55
+ HpCommunityTileContainerDirective.NAME = 'hp-community-tile';
56
+
57
+ export { HpCommunityTileContainerDirective };
@@ -0,0 +1,41 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpDiscoverContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const tiles = data.children.slice(1);
11
+
12
+ return super.structure({
13
+ type: 'htmlContainer',
14
+ tagName: 'div',
15
+ classes: ['dsfr-doc-hp-discover'],
16
+ children: [
17
+ {
18
+ type: 'htmlContainer',
19
+ tagName: 'div',
20
+ classes: ['fr-container'],
21
+ children: [
22
+ {
23
+ classes: ['dsfr-doc-hp-discover__title'],
24
+ ...title
25
+ },
26
+ {
27
+ type: 'htmlContainer',
28
+ tagName: 'div',
29
+ classes: ['dsfr-doc-hp-discover__tiles fr-grid-row fr-grid-row--gutters'],
30
+ children: tiles
31
+ }
32
+ ]
33
+ }
34
+ ]
35
+ });
36
+ }
37
+ }
38
+
39
+ HpDiscoverContainerDirective.NAME = 'hp-discover';
40
+
41
+ export { HpDiscoverContainerDirective };
@@ -0,0 +1,81 @@
1
+ import { Node } from '../../node.js'
2
+
3
+ class HpDiscoverTileContainerDirective extends Node {
4
+ structure (data) {
5
+ const image = Node.getImageChild(data);
6
+ const contentChildren = data.children.filter(child => !Node.getImageChild(child));
7
+ const contentTitle = contentChildren[0];
8
+ const contentDescription = contentChildren.slice(1).filter(child => child.children[0].type !== 'link');
9
+ const contentLink = contentChildren.find(child => child.children[0].type === 'link');
10
+
11
+ return super.structure({
12
+ type: 'htmlContainer',
13
+ tagName: 'div',
14
+ classes: ['fr-col-12', 'fr-col-sm-6', 'fr-col-lg-3'],
15
+ children: [
16
+ {
17
+ type: 'htmlContainer',
18
+ tagName: 'div',
19
+ classes: ['dsfr-doc-discover-tile'],
20
+ children: [
21
+ {
22
+ type: 'htmlContainer',
23
+ tagName: 'div',
24
+ classes: ['dsfr-doc-discover-tile__container'],
25
+ children: [
26
+ {
27
+ type: 'htmlContainer',
28
+ tagName: 'div',
29
+ classes: ['dsfr-doc-discover-tile__img'],
30
+ children: [
31
+ {
32
+ classes: ['dsfr-doc-discover-tile__img--light'],
33
+ ...image,
34
+ },
35
+ data.imgDarkUrl ? {
36
+ classes: ['dsfr-doc-discover-tile__img--dark'],
37
+ type: 'image',
38
+ attributes: {
39
+ src: data.imgDarkUrl,
40
+ alt: image.alt
41
+ }
42
+ } : {}
43
+ ]
44
+ },
45
+ {
46
+ type: 'htmlContainer',
47
+ tagName: 'div',
48
+ classes: ['dsfr-doc-discover-tile__content'],
49
+ children: [
50
+ {
51
+ ...contentTitle,
52
+ classes: ['fr-h4'],
53
+ },
54
+ ...contentDescription
55
+ ]
56
+ },
57
+ {
58
+ type: 'htmlContainer',
59
+ tagName: 'div',
60
+ classes: ['dsfr-doc-discover-tile__link'],
61
+ children: [
62
+ {
63
+ ...contentLink.children[0],
64
+ classes: ['fr-link', 'fr-link--icon-right', 'fr-icon-arrow-right-line']
65
+ }
66
+ ]
67
+ }
68
+ ]
69
+ },
70
+ ]
71
+ }
72
+ ]
73
+ });
74
+
75
+ }
76
+
77
+ }
78
+
79
+ HpDiscoverTileContainerDirective.NAME = 'hp-discover-tile';
80
+
81
+ export { HpDiscoverTileContainerDirective };
@@ -0,0 +1,60 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpFaqContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const link = data.children[1];
11
+ const accordions = data.children.filter(child => child.name === 'fr-accordions-group');
12
+
13
+ return super.structure({
14
+ type: 'htmlContainer',
15
+ tagName: 'div',
16
+ classes: ['dsfr-doc-hp-faq'],
17
+ children: [
18
+ {
19
+ type: 'htmlContainer',
20
+ tagName: 'div',
21
+ classes: ['fr-container'],
22
+ children: [
23
+ {
24
+ type: 'htmlContainer',
25
+ tagName: 'div',
26
+ classes: ['fr-grid-row fr-grid-row--gutters'],
27
+ children: [
28
+ {
29
+ type: 'htmlContainer',
30
+ tagName: 'div',
31
+ classes: ['dsfr-doc-hp-faq__content', 'fr-col-12', 'fr-col-lg-4'],
32
+ children: [
33
+ {
34
+ classes: ['dsfr-doc-hp-faq__title'],
35
+ ...title
36
+ },
37
+ {
38
+ classes: ['dsfr-doc-hp-faq__link', 'fr-link', 'fr-link--icon-right', 'fr-icon-arrow-right-line'],
39
+ ...link
40
+ }
41
+ ]
42
+ },
43
+ {
44
+ type: 'htmlContainer',
45
+ tagName: 'div',
46
+ classes: ['dsfr-doc-hp-faq__accordions', 'fr-col-12', 'fr-col-lg-8'],
47
+ children: accordions
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+ ]
54
+ });
55
+ }
56
+ }
57
+
58
+ HpFaqContainerDirective.NAME = 'hp-faq';
59
+
60
+ export { HpFaqContainerDirective };
@@ -0,0 +1,37 @@
1
+ import { Node } from '../../node.js'
2
+
3
+ class HpGoalsContainerDirective extends Node {
4
+ structure (data) {
5
+ const contentTitle = data.children[0];
6
+ const tiles = data.children.filter(child => child.name === 'fr-tile');
7
+
8
+ return super.structure({
9
+ type: 'htmlContainer',
10
+ tagName: 'div',
11
+ classes: ['dsfr-doc-hp-goals'],
12
+ children: [
13
+ {
14
+ type: 'htmlContainer',
15
+ tagName: 'div',
16
+ classes: ['fr-container'],
17
+ children: [
18
+ {
19
+ classes: ['dsfr-doc-hp-goals__title'],
20
+ ...contentTitle
21
+ },
22
+ {
23
+ type: 'htmlContainer',
24
+ tagName: 'div',
25
+ classes: ['dsfr-doc-hp-goals__tiles'],
26
+ children: tiles
27
+ }
28
+ ]
29
+ }
30
+ ]
31
+ });
32
+ }
33
+ }
34
+
35
+ HpGoalsContainerDirective.NAME = 'hp-goals';
36
+
37
+ export { HpGoalsContainerDirective };
@@ -0,0 +1,54 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpHeroContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ this.imgFirstUrl = data.imgFirstUrl;
7
+ this.imgMdUrl = data.imgMdUrl;
8
+ this.imgDarkFirstUrl = data.imgDarkFirstUrl;
9
+ this.imgDarkMdUrl = data.imgDarkMdUrl;
10
+ }
11
+
12
+ structure (data) {
13
+ const title = data.children[0];
14
+ const description = data.children[1];
15
+ const link = data.children[2];
16
+
17
+ return super.structure({
18
+ type: 'htmlContainer',
19
+ tagName: 'div',
20
+ classes: ['dsfr-doc-hp-hero__content'],
21
+ children: [
22
+ title,
23
+ description,
24
+ {
25
+ classes: ['dsfr-doc-hp-hero__link', 'fr-btn'],
26
+ ...link.children[0]
27
+ }
28
+ ]
29
+ });
30
+ }
31
+
32
+ async render () {
33
+ return `
34
+ <div class="dsfr-doc-hp-hero">
35
+ <div class="fr-container">
36
+ <div class="dsfr-doc-hp-hero__img">
37
+ <img class="fr-hidden-md" src="${this.imgFirstUrl}" alt="">
38
+ <img class="fr-hidden fr-unhidden-md" src="${this.imgMdUrl}" alt="">
39
+ </div>
40
+ <div class="dsfr-doc-hp-hero__img dsfr-doc-hp-hero__img--dark">
41
+ <img class="fr-hidden-md" src="${this.imgDarkFirstUrl}" alt="">
42
+ <img class="fr-hidden fr-unhidden-md" src="${this.imgDarkMdUrl}" alt="">
43
+ </div>
44
+
45
+ ${await super.render()}
46
+ </div>
47
+ </div>
48
+ `;
49
+ }
50
+ }
51
+
52
+ HpHeroContainerDirective.NAME = 'hp-hero';
53
+
54
+ export { HpHeroContainerDirective };
@@ -0,0 +1,53 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpNewsContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const link = data.children[data.children.length - 1];
11
+
12
+ return super.structure({
13
+ type: 'htmlContainer',
14
+ tagName: 'div',
15
+ classes: ['dsfr-doc-hp-news', 'fr-background-alt--grey'],
16
+ children: [
17
+ {
18
+ type: 'htmlContainer',
19
+ tagName: 'div',
20
+ classes: ['fr-container'],
21
+ children: [
22
+ {
23
+ type: 'htmlContainer',
24
+ tagName: 'h2',
25
+ classes: ['dsfr-doc-hp-news__title'],
26
+ children: title.children
27
+ },
28
+ {
29
+ type: 'htmlContainer',
30
+ tagName: 'div',
31
+ classes: ['dsfr-doc-hp-news__cards', 'fr-grid-row', 'fr-grid-row--gutters'],
32
+ children: [data.children[1]]
33
+ },
34
+ {
35
+ type: 'htmlContainer',
36
+ tagName: 'div',
37
+ classes: ['dsfr-doc-hp-news__link'],
38
+ children: [
39
+ {
40
+ ...link.children[0],
41
+ classes: ['fr-link', 'fr-link--icon-right', 'fr-icon-arrow-right-line']
42
+ }
43
+ ]
44
+ }
45
+ ]
46
+ }
47
+ ]
48
+ });
49
+ }
50
+ }
51
+ HpNewsContainerDirective.NAME = 'hp-news';
52
+
53
+ export { HpNewsContainerDirective };
@@ -0,0 +1,81 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpShowcaseCardContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ this._data = data;
10
+ this._image = Node.getImageChild(data);
11
+ this._links = data.children[0]?.children?.filter(child => child.type === 'link');
12
+ this._structureImgDark = this.structureImgDark;
13
+ this._structureLinks = this.structureLinks;
14
+
15
+ return super.structure({
16
+ type: 'htmlContainer',
17
+ tagName: 'div',
18
+ classes: ['dsfr-doc-hp-showcase-card'],
19
+ children: [
20
+ {
21
+ type: 'link',
22
+ classes: ['dsfr-doc-hp-showcase-card__img'],
23
+ url: this._links[0].url,
24
+ title: this._links[0].title || this._links[0].children[0].value || this._image.alt,
25
+ children: [
26
+ {
27
+ classes: ['fr-responsive-img', data.imgDarkUrl ? 'dsfr-doc-hp-showcase-card__img--light' : ''],
28
+ ...this._image
29
+ },
30
+ this._structureImgDark,
31
+ ]
32
+ },
33
+ this._structureLinks
34
+ ]
35
+ });
36
+ }
37
+
38
+ get structureImgDark() {
39
+ let structureImgDark = {};
40
+ if (this._data.imgDarkUrl) structureImgDark = {
41
+ classes: ['fr-responsive-img', 'dsfr-doc-hp-showcase-card__img--dark'],
42
+ type: 'image',
43
+ attributes: {
44
+ src: this._data.imgDarkUrl,
45
+ alt: this._image.alt
46
+ }
47
+ }
48
+ return structureImgDark;
49
+ }
50
+
51
+ get structureLinks() {
52
+ let structureLinks = {
53
+ ...this._links[0],
54
+ classes: ['dsfr-doc-hp-showcase-card__link', 'fr-link'],
55
+ };
56
+ if (this._links.length > 1) {
57
+ structureLinks = {
58
+ type: 'htmlContainer',
59
+ tagName: 'ul',
60
+ classes: ['dsfr-doc-hp-showcase-card__links-group'],
61
+ children: this._links.map(link => {
62
+ return {
63
+ type: 'htmlContainer',
64
+ tagName: 'li',
65
+ children: [
66
+ {
67
+ ...link,
68
+ classes: ['dsfr-doc-hp-showcase-card__link', 'fr-link', 'fr-link--icon-right', 'fr-icon-arrow-right-line'],
69
+ }
70
+ ]
71
+ }
72
+ })
73
+ }
74
+ }
75
+ return structureLinks;
76
+ }
77
+ }
78
+
79
+ HpShowcaseCardContainerDirective.NAME = 'hp-showcase-card';
80
+
81
+ export { HpShowcaseCardContainerDirective };
@@ -0,0 +1,55 @@
1
+ import { Node } from '../../node.js';
2
+
3
+ class HpShowcaseContainerDirective extends Node {
4
+ constructor (data) {
5
+ super(data);
6
+ }
7
+
8
+ structure (data) {
9
+ const title = data.children[0];
10
+ const showcaseCards = data.children.filter(child => child.name === 'hp-showcase-card');
11
+ const link = data.children.find(child => child.children[0].type === 'link');
12
+
13
+ return super.structure({
14
+ type: 'htmlContainer',
15
+ tagName: 'div',
16
+ classes: ['dsfr-doc-hp-showcase'],
17
+ children: [
18
+ {
19
+ type: 'htmlContainer',
20
+ tagName: 'div',
21
+ classes: ['fr-container'],
22
+ children: [
23
+ {
24
+ type: 'htmlContainer',
25
+ tagName: 'h2',
26
+ classes: ['dsfr-doc-hp-showcases__title'],
27
+ children: title.children
28
+ },
29
+ {
30
+ type: 'htmlContainer',
31
+ tagName: 'div',
32
+ classes: ['dsfr-doc-hp-showcase__container'],
33
+ children: showcaseCards
34
+ },
35
+ {
36
+ type: 'htmlContainer',
37
+ tagName: 'div',
38
+ classes: ['dsfr-doc-hp-showcase__link'],
39
+ children: [
40
+ {
41
+ classes: ['fr-btn', 'fr-btn--tertiary'],
42
+ ...link.children[0]
43
+ }
44
+ ]
45
+ }
46
+ ]
47
+ }
48
+ ]
49
+ });
50
+ }
51
+ }
52
+
53
+ HpShowcaseContainerDirective.NAME = 'hp-showcase';
54
+
55
+ export { HpShowcaseContainerDirective };