@ndla/ui 35.1.2 → 36.0.0
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.
- package/es/Embed/RelatedContentEmbed.js +2 -2
- package/es/NDLAFilm/FilmContentCard.js +21 -11
- package/es/NDLAFilm/FilmMovieList.js +2 -2
- package/es/NDLAFilm/FilmSlideshow.js +169 -335
- package/es/RelatedArticleList/RelatedArticleV2.js +27 -6
- package/es/Search/ToggleSearchButton.js +7 -2
- package/es/locale/messages-en.js +1 -0
- package/es/locale/messages-nb.js +1 -0
- package/es/locale/messages-nn.js +1 -0
- package/es/locale/messages-se.js +1 -0
- package/es/locale/messages-sma.js +1 -0
- package/lib/Embed/RelatedContentEmbed.js +2 -2
- package/lib/NDLAFilm/FilmContentCard.d.ts +4 -2
- package/lib/NDLAFilm/FilmContentCard.js +21 -12
- package/lib/NDLAFilm/FilmMovieList.d.ts +1 -1
- package/lib/NDLAFilm/FilmMovieList.js +2 -2
- package/lib/NDLAFilm/FilmSlideshow.d.ts +11 -5
- package/lib/NDLAFilm/FilmSlideshow.js +169 -333
- package/lib/RelatedArticleList/RelatedArticleV2.d.ts +4 -3
- package/lib/RelatedArticleList/RelatedArticleV2.js +35 -14
- package/lib/Search/ToggleSearchButton.js +7 -2
- package/lib/locale/messages-en.d.ts +1 -0
- package/lib/locale/messages-en.js +1 -0
- package/lib/locale/messages-nb.d.ts +1 -0
- package/lib/locale/messages-nb.js +1 -0
- package/lib/locale/messages-nn.d.ts +1 -0
- package/lib/locale/messages-nn.js +1 -0
- package/lib/locale/messages-se.d.ts +1 -0
- package/lib/locale/messages-se.js +1 -0
- package/lib/locale/messages-sma.d.ts +1 -0
- package/lib/locale/messages-sma.js +1 -0
- package/package.json +5 -5
- package/src/Embed/AudioEmbed.stories.tsx +226 -0
- package/src/Embed/BrightcoveEmbed.stories.tsx +209 -0
- package/src/Embed/ConceptEmbed.stories.tsx +190 -0
- package/src/Embed/ImageEmbed.stories.tsx +106 -0
- package/src/Embed/RelatedContentEmbed.tsx +1 -1
- package/src/NDLAFilm/FilmContentCard.tsx +11 -9
- package/src/NDLAFilm/FilmMovieList.tsx +2 -2
- package/src/NDLAFilm/FilmSlideshow.tsx +178 -387
- package/src/RelatedArticleList/RelatedArticleV2.tsx +24 -7
- package/src/Search/ToggleSearchButton.tsx +5 -1
- package/src/locale/messages-en.ts +1 -0
- package/src/locale/messages-nb.ts +1 -0
- package/src/locale/messages-nn.ts +1 -0
- package/src/locale/messages-se.ts +1 -0
- package/src/locale/messages-sma.ts +1 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2023-present, NDLA.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import React from 'react';
|
|
10
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
11
|
+
import { BrightcoveData, BrightcoveEmbedData, BrightcoveMetaData } from '@ndla/types-embed';
|
|
12
|
+
import BrightcoveEmbed from './BrightcoveEmbed';
|
|
13
|
+
import { defaultParameters } from '../../../../stories/defaults';
|
|
14
|
+
|
|
15
|
+
const embedData: BrightcoveEmbedData = {
|
|
16
|
+
resource: 'brightcove',
|
|
17
|
+
videoid: '6326301948112',
|
|
18
|
+
caption: '',
|
|
19
|
+
account: '4806596774001',
|
|
20
|
+
player: 'BkLm8fT',
|
|
21
|
+
title: 'Hvordan skaffer jeg penger?',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const metaData: BrightcoveData = {
|
|
25
|
+
id: '6326301948112',
|
|
26
|
+
account_id: '4806596774001',
|
|
27
|
+
custom_fields: {
|
|
28
|
+
license: 'Navngivelse-Ikkekommersiell-Del på samme vilkår',
|
|
29
|
+
licenseinfo: 'Rettighetshaver: Innovasjon Norge',
|
|
30
|
+
},
|
|
31
|
+
description:
|
|
32
|
+
'Har du tenkt å starte bedrift? Har behovet for mer penger allerede meldt seg? Da må du trolig få hjelp av andre for å finansiere utvikling av ideen din.',
|
|
33
|
+
images: {
|
|
34
|
+
poster: {
|
|
35
|
+
src: 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/aa9cc6c9-d330-4969-9834-7406d2a4c777/1280x720/match/image.jpg',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
link: undefined,
|
|
39
|
+
long_description: null,
|
|
40
|
+
name: 'Hvordan skaffer jeg penger?',
|
|
41
|
+
published_at: '2023-04-27T10:27:03.747Z',
|
|
42
|
+
copyright: {
|
|
43
|
+
license: {
|
|
44
|
+
license: 'CC-BY-NC-SA-4.0',
|
|
45
|
+
description:
|
|
46
|
+
'Denne lisensen lar andre distribuere, endre, remixe, og bygge videre på ditt verk for ikke-kommersielle formål. Deres verk må navngi deg som den opprinnelige opphavspersonen og avledete verk må bære en tilsvarende lisens.',
|
|
47
|
+
url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.no',
|
|
48
|
+
},
|
|
49
|
+
creators: [],
|
|
50
|
+
processors: [],
|
|
51
|
+
rightsholders: [{ type: 'rightsholder', name: 'Innovasjon Norge' }],
|
|
52
|
+
},
|
|
53
|
+
sources: [
|
|
54
|
+
{
|
|
55
|
+
src: 'http://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/10s/master.m3u8?fastly_token=NjQ0YWRmNGRfMjcwZWQ0M2RhZTU0NTY3MmYyYzVmMGM4YzZiMDY3Mjk3ZjlhMjk0NGY0ZGNlZTdhM2ZmM2EzYzI4ZmM5OWFhOQ%3D%3D',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
src: 'https://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/10s/master.m3u8?fastly_token=NjQ0YWRmNGRfMjcwZWQ0M2RhZTU0NTY3MmYyYzVmMGM4YzZiMDY3Mjk3ZjlhMjk0NGY0ZGNlZTdhM2ZmM2EzYzI4ZmM5OWFhOQ%3D%3D',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
src: 'http://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/6s/manifest.mpd?fastly_token=NjQ0YWRmNGRfY2RiM2I0MzE4MzhkMTgwZTg2NGFmNGQyMzE4YmQyOTc3MTdhOWM0N2IyNGZhZGRhNTAxNzgyMzA5ZTRlZWUzZA%3D%3D',
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
src: 'https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/6s/manifest.mpd?fastly_token=NjQ0YWRmNGRfY2RiM2I0MzE4MzhkMTgwZTg2NGFmNGQyMzE4YmQyOTc3MTdhOWM0N2IyNGZhZGRhNTAxNzgyMzA5ZTRlZWUzZA%3D%3D',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
src: 'http://house-fastly-signed-eu-west-1-prod.brightcovecdn.com/media/v1/pmp4/static/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/b1f82598-d33e-4203-a11d-cc9faf0b266e/main.mp4?fastly_token=NjQ0YWRmNGRfZTNjZmNjMzJhOTJlMzg0NDE0NjFkNmRhMjM3YzQyNGVlMmQxYTljNTQxZjBmZTNkMTQ5NmVlMTY2NmYwNzhhM18vL2hvdXNlLWZhc3RseS1zaWduZWQtZXUtd2VzdC0xLXByb2QuYnJpZ2h0Y292ZWNkbi5jb20vbWVkaWEvdjEvcG1wNC9zdGF0aWMvY2xlYXIvNDgwNjU5Njc3NDAwMS9lZmFiM2Q0OC1kZTMwLTQzMzMtODU2OC1jZmJjODVkZmJkZGYvYjFmODI1OTgtZDMzZS00MjAzLWExMWQtY2M5ZmFmMGIyNjZlL21haW4ubXA0',
|
|
68
|
+
container: 'MP4',
|
|
69
|
+
height: 720,
|
|
70
|
+
width: 1280,
|
|
71
|
+
size: 20495275,
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
src: 'https://house-fastly-signed-eu-west-1-prod.brightcovecdn.com/media/v1/pmp4/static/clear/4806596774001/efab3d48-de30-4333-8568-cfbc85dfbddf/b1f82598-d33e-4203-a11d-cc9faf0b266e/main.mp4?fastly_token=NjQ0YWRmNGRfZTNjZmNjMzJhOTJlMzg0NDE0NjFkNmRhMjM3YzQyNGVlMmQxYTljNTQxZjBmZTNkMTQ5NmVlMTY2NmYwNzhhM18vL2hvdXNlLWZhc3RseS1zaWduZWQtZXUtd2VzdC0xLXByb2QuYnJpZ2h0Y292ZWNkbi5jb20vbWVkaWEvdjEvcG1wNC9zdGF0aWMvY2xlYXIvNDgwNjU5Njc3NDAwMS9lZmFiM2Q0OC1kZTMwLTQzMzMtODU2OC1jZmJjODVkZmJkZGYvYjFmODI1OTgtZDMzZS00MjAzLWExMWQtY2M5ZmFmMGIyNjZlL21haW4ubXA0',
|
|
75
|
+
container: 'MP4',
|
|
76
|
+
height: 720,
|
|
77
|
+
width: 1280,
|
|
78
|
+
size: 20495275,
|
|
79
|
+
},
|
|
80
|
+
],
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const visuallyInterpretedEmbedMetaData: BrightcoveMetaData = {
|
|
84
|
+
resource: 'brightcove',
|
|
85
|
+
seq: 3,
|
|
86
|
+
status: 'success',
|
|
87
|
+
embedData: {
|
|
88
|
+
resource: 'brightcove',
|
|
89
|
+
videoid: '6243811329001',
|
|
90
|
+
caption: '',
|
|
91
|
+
account: '4806596774001',
|
|
92
|
+
player: 'BkLm8fT',
|
|
93
|
+
title: 'Frivillighet i helse og omsorgstjenesten (synstolket)',
|
|
94
|
+
},
|
|
95
|
+
data: {
|
|
96
|
+
id: '6243811329001',
|
|
97
|
+
account_id: '4806596774001',
|
|
98
|
+
custom_fields: {
|
|
99
|
+
licenseinfo: 'Leverandør: film_konsulentene',
|
|
100
|
+
yt_privacy_status: 'unlisted',
|
|
101
|
+
license: 'Navngivelse-Ikkekommersiell-Del på samme vilkår',
|
|
102
|
+
},
|
|
103
|
+
description: null,
|
|
104
|
+
images: {
|
|
105
|
+
poster: {
|
|
106
|
+
src: 'https://cf-images.eu-west-1.prod.boltdns.net/v1/static/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/23f01e33-413e-418c-a4de-2c87c8b05c26/1280x720/match/image.jpg',
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
link: { text: '6242635463001' },
|
|
110
|
+
long_description: null,
|
|
111
|
+
name: 'Frivillighet i helse og omsorgstjenesten (synstolket)',
|
|
112
|
+
published_at: '2021-03-25T11:40:38.476Z',
|
|
113
|
+
copyright: {
|
|
114
|
+
license: {
|
|
115
|
+
license: 'CC-BY-NC-SA-4.0',
|
|
116
|
+
description:
|
|
117
|
+
'This license lets others remix, tweak, and build upon your work non-commercially, as long as they credit you and license their new creations under the identical terms.',
|
|
118
|
+
url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en',
|
|
119
|
+
},
|
|
120
|
+
creators: [],
|
|
121
|
+
processors: [],
|
|
122
|
+
rightsholders: [{ type: 'supplier', name: 'film_konsulentene' }],
|
|
123
|
+
},
|
|
124
|
+
sources: [
|
|
125
|
+
{
|
|
126
|
+
src: 'http://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/10s/master.m3u8?fastly_token=NjQ0YmMyY2JfMTBmN2ZlOGUxNTAwYzQ0YmUwNDIzMDY3YWE1MGVkNjNmY2U2MDJhMDRkYjRhNzljNjZiZDJkNTA1MDM1Njg5Yg%3D%3D',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
src: 'https://manifest.prod.boltdns.net/manifest/v1/hls/v4/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/10s/master.m3u8?fastly_token=NjQ0YmMyY2JfMTBmN2ZlOGUxNTAwYzQ0YmUwNDIzMDY3YWE1MGVkNjNmY2U2MDJhMDRkYjRhNzljNjZiZDJkNTA1MDM1Njg5Yg%3D%3D',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
src: 'http://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/6s/manifest.mpd?fastly_token=NjQ0YmMyY2JfZjhmNTUzZDc4MWI2YjdmNGEzOWUzOGMxYzkyYWU2NWVhZGVjZDY3ZWJiMmYxYjgzOThiNzQ1ZjMzOWRiZmRiYQ%3D%3D',
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
src: 'https://manifest.prod.boltdns.net/manifest/v1/dash/live-baseurl/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/6s/manifest.mpd?fastly_token=NjQ0YmMyY2JfZjhmNTUzZDc4MWI2YjdmNGEzOWUzOGMxYzkyYWU2NWVhZGVjZDY3ZWJiMmYxYjgzOThiNzQ1ZjMzOWRiZmRiYQ%3D%3D',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
src: 'http://house-fastly-signed-eu-west-1-prod.brightcovecdn.com/media/v1/pmp4/static/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/494f17bd-2cee-4c49-8f27-99c76f3720d5/main.mp4?fastly_token=NjQ0YmMyY2JfYjQzM2YwNzQxMTg5YzAwNjUyNzI2MGE0NWVhZmNhZTQ5Y2QwMzIyMGExOGMyMzFhMmNiNmU3NWY1YTY0ZWNmM18vL2hvdXNlLWZhc3RseS1zaWduZWQtZXUtd2VzdC0xLXByb2QuYnJpZ2h0Y292ZWNkbi5jb20vbWVkaWEvdjEvcG1wNC9zdGF0aWMvY2xlYXIvNDgwNjU5Njc3NDAwMS9hMDliY2I3Yi1mZmUxLTRjM2EtOThlYS1iZjk5NzM0MGE4Y2QvNDk0ZjE3YmQtMmNlZS00YzQ5LThmMjctOTljNzZmMzcyMGQ1L21haW4ubXA0',
|
|
139
|
+
container: 'MP4',
|
|
140
|
+
height: 720,
|
|
141
|
+
width: 1280,
|
|
142
|
+
size: 138996555,
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
src: 'https://house-fastly-signed-eu-west-1-prod.brightcovecdn.com/media/v1/pmp4/static/clear/4806596774001/a09bcb7b-ffe1-4c3a-98ea-bf997340a8cd/494f17bd-2cee-4c49-8f27-99c76f3720d5/main.mp4?fastly_token=NjQ0YmMyY2JfYjQzM2YwNzQxMTg5YzAwNjUyNzI2MGE0NWVhZmNhZTQ5Y2QwMzIyMGExOGMyMzFhMmNiNmU3NWY1YTY0ZWNmM18vL2hvdXNlLWZhc3RseS1zaWduZWQtZXUtd2VzdC0xLXByb2QuYnJpZ2h0Y292ZWNkbi5jb20vbWVkaWEvdjEvcG1wNC9zdGF0aWMvY2xlYXIvNDgwNjU5Njc3NDAwMS9hMDliY2I3Yi1mZmUxLTRjM2EtOThlYS1iZjk5NzM0MGE4Y2QvNDk0ZjE3YmQtMmNlZS00YzQ5LThmMjctOTljNzZmMzcyMGQ1L21haW4ubXA0',
|
|
146
|
+
container: 'MP4',
|
|
147
|
+
height: 720,
|
|
148
|
+
width: 1280,
|
|
149
|
+
size: 138996555,
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const meta: Meta<typeof BrightcoveEmbed> = {
|
|
156
|
+
title: 'Enkle komponenter/Embeds/BrightcoveEmbed',
|
|
157
|
+
component: BrightcoveEmbed,
|
|
158
|
+
tags: ['autodocs'],
|
|
159
|
+
args: {
|
|
160
|
+
isConcept: false,
|
|
161
|
+
},
|
|
162
|
+
decorators: [
|
|
163
|
+
(Story) => (
|
|
164
|
+
<div className="o-wrapper">
|
|
165
|
+
<article className="c-article c-article--clean">
|
|
166
|
+
<section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
|
|
167
|
+
<section>
|
|
168
|
+
<Story />
|
|
169
|
+
</section>
|
|
170
|
+
</section>
|
|
171
|
+
</article>
|
|
172
|
+
</div>
|
|
173
|
+
),
|
|
174
|
+
],
|
|
175
|
+
parameters: defaultParameters,
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export default meta;
|
|
179
|
+
|
|
180
|
+
export const BrightcoveEmbedStory: StoryObj<typeof BrightcoveEmbed> = {
|
|
181
|
+
args: {
|
|
182
|
+
embed: {
|
|
183
|
+
resource: 'brightcove',
|
|
184
|
+
status: 'success',
|
|
185
|
+
seq: 1,
|
|
186
|
+
embedData: embedData,
|
|
187
|
+
data: metaData,
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const VisuallyInterpreted: StoryObj<typeof BrightcoveEmbed> = {
|
|
193
|
+
args: {
|
|
194
|
+
embed: visuallyInterpretedEmbedMetaData,
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
export const BrightcoveFailed: StoryObj<typeof BrightcoveEmbed> = {
|
|
199
|
+
args: {
|
|
200
|
+
embed: {
|
|
201
|
+
resource: 'brightcove',
|
|
202
|
+
status: 'error',
|
|
203
|
+
seq: 1,
|
|
204
|
+
embedData: embedData,
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
BrightcoveEmbedStory.storyName = 'BrightcoveEmbed';
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2023-present, NDLA.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import React from 'react';
|
|
10
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
11
|
+
import { ConceptData, ConceptEmbedData } from '@ndla/types-embed';
|
|
12
|
+
import ConceptEmbed from './ConceptEmbed';
|
|
13
|
+
import { defaultParameters } from '../../../../stories/defaults';
|
|
14
|
+
|
|
15
|
+
const blockEmbedData: ConceptEmbedData = {
|
|
16
|
+
contentId: '35',
|
|
17
|
+
resource: 'concept',
|
|
18
|
+
type: 'block',
|
|
19
|
+
linkText: '',
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const inlineEmbedData: ConceptEmbedData = {
|
|
23
|
+
contentId: '2318',
|
|
24
|
+
linkText: 'forklaring',
|
|
25
|
+
resource: 'concept',
|
|
26
|
+
type: 'inline',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const conceptMetaData: ConceptData['concept'] = {
|
|
30
|
+
id: 110,
|
|
31
|
+
revision: 16,
|
|
32
|
+
title: { title: 'skin – formasjonsskade', language: 'nb' },
|
|
33
|
+
content: {
|
|
34
|
+
content:
|
|
35
|
+
'Ordet «skin» er engelsk og brukes om formasjonsskade som oppstår i boreprosessen i området som grenser inn til brønnen. Skaden er størst i området nærmest hullet, men den kan bre seg utover et stykke fra brønnen. Skin forteller om bergartens permeabilitet i reservoarsonen. \n\nHullveggen skades både av borekronen, små partikler og væsken som brukes i brønnen.\n\nSkaden i bergarten gir dårligere forhold for oljen som skal strømme til brønnen. Gangene i bergarten plugges, og det oppstår et trykkfall som reduserer produksjonstrykket i brønnen.\n\nDet er viktig å redusere omfanget av skaden ved å velge væsker som passer godt til bergartsegenskapene, og å bore med en borekrone som skader minst mulig.\n\nSkader som er dannet av borevæske, kan repareres ved å syrebehandle hullets overflate.\n',
|
|
36
|
+
language: 'nb',
|
|
37
|
+
},
|
|
38
|
+
copyright: {
|
|
39
|
+
license: {
|
|
40
|
+
license: 'CC-BY-SA-4.0',
|
|
41
|
+
description: 'Creative Commons Attribution-ShareAlike 4.0 International',
|
|
42
|
+
url: 'https://creativecommons.org/licenses/by-sa/4.0/',
|
|
43
|
+
},
|
|
44
|
+
creators: [{ type: 'Writer', name: 'Sissel Paaske' }],
|
|
45
|
+
processors: [
|
|
46
|
+
{ type: 'Processor', name: 'Totaltekst' },
|
|
47
|
+
{ type: 'Correction', name: 'Arbeidets art' },
|
|
48
|
+
],
|
|
49
|
+
rightsholders: [],
|
|
50
|
+
},
|
|
51
|
+
source: '',
|
|
52
|
+
metaImage: {
|
|
53
|
+
url: 'https://api.test.ndla.no/image-api/raw/id/52863',
|
|
54
|
+
alt: 'Eksempel på hvordan borevæsken kan trenge ut i formasjonen fra borehullet og skade formasjonens permeabilitet. Illustrasjon.',
|
|
55
|
+
language: 'nb',
|
|
56
|
+
},
|
|
57
|
+
tags: { tags: ['Brønn:Reservoar:'], language: 'nb' },
|
|
58
|
+
subjectIds: ['urn:subject:6'],
|
|
59
|
+
created: '2018-07-02T10:53:40Z',
|
|
60
|
+
updated: '2020-11-18T08:58:33Z',
|
|
61
|
+
updatedBy: ['sPHJn0BEtfxw2d2DUpIuS3iY', 'KBAJskRqPXZUv9LFjAbz8btB', 'eEIRDzflTh9oUp_3CgpuIMOg'],
|
|
62
|
+
supportedLanguages: ['nb', 'nn'],
|
|
63
|
+
articleIds: [],
|
|
64
|
+
status: { current: 'PUBLISHED', other: [] },
|
|
65
|
+
visualElement: {
|
|
66
|
+
visualElement:
|
|
67
|
+
'<ndlaembed data-resource="image" data-resource_id="52863" data-alt="Eksempel på hvordan borevæsken kan trenge ut i formasjonen fra borehullet og skade formasjonens permeabilitet. Illustrasjon." data-size="full" data-align="" data-url="https://api.test.ndla.no/image-api/v2/images/52863"></ndlaembed>',
|
|
68
|
+
language: 'nb',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const visualElementData: ConceptData['visualElement'] = {
|
|
73
|
+
resource: 'image',
|
|
74
|
+
status: 'success',
|
|
75
|
+
seq: 6,
|
|
76
|
+
embedData: {
|
|
77
|
+
resource: 'image',
|
|
78
|
+
resourceId: '52863',
|
|
79
|
+
alt: 'Eksempel på hvordan borevæsken kan trenge ut i formasjonen fra borehullet og skade formasjonens permeabilitet. Illustrasjon.',
|
|
80
|
+
size: 'full',
|
|
81
|
+
align: '',
|
|
82
|
+
url: 'https://api.test.ndla.no/image-api/v2/images/52863',
|
|
83
|
+
},
|
|
84
|
+
data: {
|
|
85
|
+
id: '52863',
|
|
86
|
+
metaUrl: 'https://api.test.ndla.no/image-api/v2/images/52863',
|
|
87
|
+
title: { title: 'Skin - formasjonsskade', language: 'nb' },
|
|
88
|
+
alttext: {
|
|
89
|
+
alttext: 'Skissen viser hvordan borevæsken trenger inn i formasjonen i området nær hullet. Illustrasjon.',
|
|
90
|
+
language: 'nb',
|
|
91
|
+
},
|
|
92
|
+
imageUrl: 'https://api.test.ndla.no/image-api/raw/6WbfcOmr.png',
|
|
93
|
+
size: 194971,
|
|
94
|
+
contentType: 'image/png',
|
|
95
|
+
copyright: {
|
|
96
|
+
license: {
|
|
97
|
+
license: 'CC-BY-SA-4.0',
|
|
98
|
+
description: 'Creative Commons Attribution-ShareAlike 4.0 International',
|
|
99
|
+
url: 'https://creativecommons.org/licenses/by-sa/4.0/',
|
|
100
|
+
},
|
|
101
|
+
origin: '',
|
|
102
|
+
creators: [{ type: 'Illustrator', name: 'Sissel Paaske' }],
|
|
103
|
+
processors: [],
|
|
104
|
+
rightsholders: [],
|
|
105
|
+
},
|
|
106
|
+
tags: { tags: ['skin', 'formasjonsskade', 'nærbrønn', 'permeabilitet'], language: 'nb' },
|
|
107
|
+
caption: { caption: 'Formasjonsskade i nærbrønnområdet kalles "skin". Illustrasjon.', language: 'nb' },
|
|
108
|
+
supportedLanguages: ['nb'],
|
|
109
|
+
created: '2020-10-26T15:02:47Z',
|
|
110
|
+
createdBy: 'KBAJskRqPXZUv9LFjAbz8btB',
|
|
111
|
+
modelRelease: 'not-set',
|
|
112
|
+
imageDimensions: { width: 429, height: 565 },
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const blockMetaData: ConceptData = {
|
|
117
|
+
concept: conceptMetaData,
|
|
118
|
+
visualElement: visualElementData,
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
const meta: Meta<typeof ConceptEmbed> = {
|
|
122
|
+
title: 'Enkle komponenter/Embeds/ConceptEmbed',
|
|
123
|
+
component: ConceptEmbed,
|
|
124
|
+
tags: ['autodocs'],
|
|
125
|
+
args: {
|
|
126
|
+
fullWidth: false,
|
|
127
|
+
},
|
|
128
|
+
decorators: [
|
|
129
|
+
(Story) => (
|
|
130
|
+
<div className="o-wrapper">
|
|
131
|
+
<article className="c-article c-article--clean">
|
|
132
|
+
<section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
|
|
133
|
+
<section>
|
|
134
|
+
<Story />
|
|
135
|
+
</section>
|
|
136
|
+
</section>
|
|
137
|
+
</article>
|
|
138
|
+
</div>
|
|
139
|
+
),
|
|
140
|
+
],
|
|
141
|
+
parameters: defaultParameters,
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export default meta;
|
|
145
|
+
|
|
146
|
+
export const Block: StoryObj<typeof ConceptEmbed> = {
|
|
147
|
+
args: {
|
|
148
|
+
embed: {
|
|
149
|
+
resource: 'concept',
|
|
150
|
+
status: 'success',
|
|
151
|
+
seq: 1,
|
|
152
|
+
embedData: blockEmbedData,
|
|
153
|
+
data: blockMetaData,
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
};
|
|
157
|
+
|
|
158
|
+
export const BlockFailed: StoryObj<typeof ConceptEmbed> = {
|
|
159
|
+
args: {
|
|
160
|
+
embed: {
|
|
161
|
+
resource: 'concept',
|
|
162
|
+
status: 'error',
|
|
163
|
+
seq: 1,
|
|
164
|
+
embedData: blockEmbedData,
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
export const Inline: StoryObj<typeof ConceptEmbed> = {
|
|
170
|
+
args: {
|
|
171
|
+
embed: {
|
|
172
|
+
resource: 'concept',
|
|
173
|
+
status: 'success',
|
|
174
|
+
seq: 1,
|
|
175
|
+
embedData: inlineEmbedData,
|
|
176
|
+
data: blockMetaData,
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
export const InlineFailed: StoryObj<typeof ConceptEmbed> = {
|
|
182
|
+
args: {
|
|
183
|
+
embed: {
|
|
184
|
+
resource: 'concept',
|
|
185
|
+
status: 'error',
|
|
186
|
+
seq: 1,
|
|
187
|
+
embedData: inlineEmbedData,
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2023-present, NDLA.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import React from 'react';
|
|
10
|
+
import { Meta, StoryObj } from '@storybook/react';
|
|
11
|
+
import { ImageEmbedData } from '@ndla/types-embed';
|
|
12
|
+
import { IImageMetaInformationV2 } from '@ndla/types-backend/build/image-api';
|
|
13
|
+
import ImageEmbed from './ImageEmbed';
|
|
14
|
+
import { defaultParameters } from '../../../../stories/defaults';
|
|
15
|
+
|
|
16
|
+
const embedData: ImageEmbedData = {
|
|
17
|
+
resource: 'image',
|
|
18
|
+
resourceId: '61181',
|
|
19
|
+
size: 'full',
|
|
20
|
+
align: '',
|
|
21
|
+
alt: 'Tenåringsjente med lyse fletter slenger på håret. Foto. ',
|
|
22
|
+
caption: 'Modellklarert.',
|
|
23
|
+
url: 'https://api.test.ndla.no/image-api/v2/images/61181',
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
const metaData: IImageMetaInformationV2 = {
|
|
27
|
+
id: '61181',
|
|
28
|
+
metaUrl: 'https://api.test.ndla.no/image-api/v2/images/61181',
|
|
29
|
+
title: {
|
|
30
|
+
title: '\nHigh angle view of teenage girl with tousled dyed hair dancing at skateboard park\n',
|
|
31
|
+
language: 'nb',
|
|
32
|
+
},
|
|
33
|
+
alttext: { alttext: 'Tenåringsjente med lyse fletter slenger på håret. Foto. ', language: 'nb' },
|
|
34
|
+
imageUrl: 'https://api.test.ndla.no/image-api/raw/S81WiNgl.jpg',
|
|
35
|
+
size: 1685455,
|
|
36
|
+
contentType: 'image/jpeg',
|
|
37
|
+
copyright: {
|
|
38
|
+
license: {
|
|
39
|
+
license: 'CC-BY-NC-4.0',
|
|
40
|
+
description: 'Creative Commons Attribution-NonCommercial 4.0 International',
|
|
41
|
+
url: 'https://creativecommons.org/licenses/by-nc/4.0/',
|
|
42
|
+
},
|
|
43
|
+
origin: 'https://bilder.ntb.no/r/preview/creative/EXuziiZGWno',
|
|
44
|
+
creators: [{ type: 'photographer', name: 'Maskot' }],
|
|
45
|
+
processors: [],
|
|
46
|
+
rightsholders: [{ type: 'rightsholder', name: 'NTB' }],
|
|
47
|
+
},
|
|
48
|
+
tags: { tags: ['danser', 'kultur', 'identitet'], language: 'nb' },
|
|
49
|
+
caption: { caption: 'Modellklarert.', language: 'nb' },
|
|
50
|
+
supportedLanguages: ['nb'],
|
|
51
|
+
created: '2022-01-07T08:26:01Z',
|
|
52
|
+
createdBy: 'lA2KgVfhY-fpmgHCYAy5W1DX',
|
|
53
|
+
modelRelease: 'yes',
|
|
54
|
+
imageDimensions: { width: 2000, height: 1333 },
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const meta: Meta<typeof ImageEmbed> = {
|
|
58
|
+
title: 'Enkle komponenter/Embeds/ImageEmbed',
|
|
59
|
+
component: ImageEmbed,
|
|
60
|
+
tags: ['autodocs'],
|
|
61
|
+
args: {
|
|
62
|
+
articlePath: undefined,
|
|
63
|
+
previewAlt: true,
|
|
64
|
+
},
|
|
65
|
+
decorators: [
|
|
66
|
+
(Story) => (
|
|
67
|
+
<div className="o-wrapper">
|
|
68
|
+
<article className="c-article c-article--clean">
|
|
69
|
+
<section className="u-4/6@desktop u-push-1/6@desktop u-10/12@tablet u-push-1/12@tablet">
|
|
70
|
+
<section>
|
|
71
|
+
<Story />
|
|
72
|
+
</section>
|
|
73
|
+
</section>
|
|
74
|
+
</article>
|
|
75
|
+
</div>
|
|
76
|
+
),
|
|
77
|
+
],
|
|
78
|
+
parameters: defaultParameters,
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
export default meta;
|
|
82
|
+
|
|
83
|
+
export const ImageEmbedStory: StoryObj<typeof ImageEmbed> = {
|
|
84
|
+
args: {
|
|
85
|
+
embed: {
|
|
86
|
+
resource: 'image',
|
|
87
|
+
status: 'success',
|
|
88
|
+
seq: 1,
|
|
89
|
+
embedData: embedData,
|
|
90
|
+
data: metaData,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const Failed: StoryObj<typeof ImageEmbed> = {
|
|
96
|
+
args: {
|
|
97
|
+
embed: {
|
|
98
|
+
resource: 'image',
|
|
99
|
+
status: 'error',
|
|
100
|
+
seq: 1,
|
|
101
|
+
embedData: embedData,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
ImageEmbedStory.storyName = 'ImageEmbed';
|
|
@@ -33,7 +33,7 @@ const RelatedContentEmbed = ({ embed, isOembed, subject, ndlaFrontendDomain }: P
|
|
|
33
33
|
data.resource?.paths.find((p) => p.split('/')[1] === subject?.replace('urn:', '')) ?? data.resource?.path;
|
|
34
34
|
return (
|
|
35
35
|
<RelatedArticleV2
|
|
36
|
-
title={data.article.title
|
|
36
|
+
title={data.article.title?.title ?? ''}
|
|
37
37
|
introduction={data.article.metaDescription?.metaDescription ?? ''}
|
|
38
38
|
target={isOembed ? '_blank' : undefined}
|
|
39
39
|
to={`${ndlaFrontendDomain ?? ''}${path ?? ''}`}
|
|
@@ -6,21 +6,22 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import React from 'react';
|
|
10
|
-
import { spacing, colors, fonts, breakpoints } from '@ndla/core';
|
|
9
|
+
import React, { HTMLAttributes } from 'react';
|
|
10
|
+
import { spacing, colors, fonts, breakpoints, misc } from '@ndla/core';
|
|
11
11
|
import SafeLink from '@ndla/safelink';
|
|
12
12
|
import styled from '@emotion/styled';
|
|
13
13
|
import { makeSrcQueryString } from '../Image';
|
|
14
14
|
import FilmContentCardTags from './FilmContentCardTags';
|
|
15
15
|
import { MovieResourceType, MovieType } from './types';
|
|
16
16
|
|
|
17
|
-
interface Props {
|
|
17
|
+
interface Props extends HTMLAttributes<HTMLElement> {
|
|
18
18
|
movie: MovieType;
|
|
19
19
|
columnWidth: number;
|
|
20
20
|
distanceBetweenItems?: number;
|
|
21
21
|
resourceTypes: MovieResourceType[];
|
|
22
22
|
resizeThumbnailImages?: boolean;
|
|
23
23
|
hideTags?: boolean;
|
|
24
|
+
className?: string;
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
const FilmContentCard = ({
|
|
@@ -30,6 +31,8 @@ const FilmContentCard = ({
|
|
|
30
31
|
resourceTypes,
|
|
31
32
|
resizeThumbnailImages,
|
|
32
33
|
hideTags = false,
|
|
34
|
+
className,
|
|
35
|
+
...rest
|
|
33
36
|
}: Props) => {
|
|
34
37
|
let backgroundImage = `${(metaImage && metaImage.url) || ''}`;
|
|
35
38
|
const contentTypeId = `content-type-${id}`;
|
|
@@ -43,11 +46,12 @@ const FilmContentCard = ({
|
|
|
43
46
|
to={path}
|
|
44
47
|
aria-describedby={contentTypeId}
|
|
45
48
|
columnWidth={columnWidth}
|
|
49
|
+
className={className}
|
|
46
50
|
style={{ marginRight: `${distanceBetweenItems}px` }}
|
|
51
|
+
{...rest}
|
|
47
52
|
>
|
|
48
53
|
<StyledImage
|
|
49
54
|
role="img"
|
|
50
|
-
columnWidth={columnWidth}
|
|
51
55
|
style={{
|
|
52
56
|
backgroundImage: `url(${backgroundImage}?${makeSrcQueryString(600)})`,
|
|
53
57
|
}}
|
|
@@ -77,15 +81,13 @@ const StyledMovieTitle = styled.span`
|
|
|
77
81
|
}
|
|
78
82
|
`;
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
const StyledImage = styled.div<StyledImageProps>`
|
|
84
|
-
height: ${(props) => props.columnWidth * 0.5625}px;
|
|
84
|
+
const StyledImage = styled.div`
|
|
85
|
+
aspect-ratio: 16/9;
|
|
85
86
|
background-size: cover;
|
|
86
87
|
background-color: ${colors.ndlaFilm.filmColorLight};
|
|
87
88
|
background-position-x: center;
|
|
88
89
|
background-position-y: center;
|
|
90
|
+
border-radius: ${misc.borderRadius};
|
|
89
91
|
position: relative;
|
|
90
92
|
display: flex;
|
|
91
93
|
align-items: flex-end;
|
|
@@ -17,7 +17,7 @@ import { StyledHeadingH2 } from './filmStyles';
|
|
|
17
17
|
|
|
18
18
|
interface Props {
|
|
19
19
|
movies: MovieType[];
|
|
20
|
-
name
|
|
20
|
+
name?: string;
|
|
21
21
|
slideBackwardsLabel: string;
|
|
22
22
|
slideForwardsLabel: string;
|
|
23
23
|
resourceTypes: MovieResourceType[];
|
|
@@ -42,7 +42,7 @@ const FilmMovieList = ({
|
|
|
42
42
|
resizeThumbnailImages,
|
|
43
43
|
}: Props) => (
|
|
44
44
|
<StyledSection>
|
|
45
|
-
<StyledHeadingH2 marginLeft={autoSizedProps.margin}>{name}</StyledHeadingH2>
|
|
45
|
+
{!!name && <StyledHeadingH2 marginLeft={autoSizedProps.margin}>{name}</StyledHeadingH2>}
|
|
46
46
|
<Carousel
|
|
47
47
|
leftButton={
|
|
48
48
|
<IconButtonV2 aria-label={slideBackwardsLabel}>
|