@ndla/ui 27.1.6 → 28.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.
Files changed (69) hide show
  1. package/es/Article/ArticleByline.js +38 -7
  2. package/es/Breadcrumb/ActionBreadcrumb.js +5 -4
  3. package/es/Breadcrumb/Breadcrumb.js +12 -4
  4. package/es/Frontpage/FrontpageAllSubjects.js +9 -8
  5. package/es/Resource/BlockResource.js +45 -23
  6. package/es/Resource/ListResource.js +45 -25
  7. package/es/Resource/resourceComponents.js +42 -34
  8. package/es/SearchTypeResult/SearchItem.js +8 -35
  9. package/es/SearchTypeResult/components/ItemResourceHeader.js +5 -5
  10. package/es/locale/messages-en.js +8 -6
  11. package/es/locale/messages-nb.js +20 -18
  12. package/es/locale/messages-nn.js +19 -17
  13. package/es/locale/messages-se.js +97 -95
  14. package/es/locale/messages-sma.js +19 -17
  15. package/es/model/ContentType.js +24 -1
  16. package/es/model/SubjectCategories.js +1 -5
  17. package/es/model/index.js +3 -2
  18. package/es/utils/resourceTypeColor.js +44 -0
  19. package/lib/Article/ArticleByline.d.ts +3 -1
  20. package/lib/Article/ArticleByline.js +38 -7
  21. package/lib/Breadcrumb/ActionBreadcrumb.js +5 -4
  22. package/lib/Breadcrumb/Breadcrumb.js +12 -4
  23. package/lib/Frontpage/FrontpageAllSubjects.js +10 -8
  24. package/lib/Resource/BlockResource.d.ts +6 -2
  25. package/lib/Resource/BlockResource.js +47 -22
  26. package/lib/Resource/ListResource.d.ts +6 -2
  27. package/lib/Resource/ListResource.js +47 -24
  28. package/lib/Resource/resourceComponents.d.ts +11 -4
  29. package/lib/Resource/resourceComponents.js +47 -37
  30. package/lib/SearchTypeResult/SearchItem.d.ts +0 -1
  31. package/lib/SearchTypeResult/SearchItem.js +9 -39
  32. package/lib/SearchTypeResult/components/ItemResourceHeader.js +8 -8
  33. package/lib/locale/messages-en.d.ts +18 -23
  34. package/lib/locale/messages-en.js +8 -6
  35. package/lib/locale/messages-nb.d.ts +18 -23
  36. package/lib/locale/messages-nb.js +20 -18
  37. package/lib/locale/messages-nn.d.ts +18 -23
  38. package/lib/locale/messages-nn.js +19 -17
  39. package/lib/locale/messages-se.d.ts +18 -23
  40. package/lib/locale/messages-se.js +97 -95
  41. package/lib/locale/messages-sma.d.ts +18 -23
  42. package/lib/locale/messages-sma.js +19 -17
  43. package/lib/model/ContentType.d.ts +19 -0
  44. package/lib/model/ContentType.js +34 -2
  45. package/lib/model/SubjectCategories.d.ts +0 -3
  46. package/lib/model/SubjectCategories.js +3 -10
  47. package/lib/model/index.d.ts +12 -2
  48. package/lib/model/index.js +4 -3
  49. package/lib/utils/resourceTypeColor.d.ts +9 -0
  50. package/lib/utils/resourceTypeColor.js +59 -0
  51. package/package.json +7 -7
  52. package/src/Article/ArticleByline.tsx +40 -1
  53. package/src/Breadcrumb/ActionBreadcrumb.tsx +1 -2
  54. package/src/Breadcrumb/Breadcrumb.tsx +15 -6
  55. package/src/Frontpage/FrontpageAllSubjects.tsx +5 -2
  56. package/src/Resource/BlockResource.tsx +33 -15
  57. package/src/Resource/ListResource.tsx +41 -16
  58. package/src/Resource/resourceComponents.tsx +27 -16
  59. package/src/SearchTypeResult/SearchItem.tsx +0 -22
  60. package/src/SearchTypeResult/components/ItemResourceHeader.tsx +3 -1
  61. package/src/locale/messages-en.ts +7 -7
  62. package/src/locale/messages-nb.ts +19 -19
  63. package/src/locale/messages-nn.ts +18 -18
  64. package/src/locale/messages-se.ts +97 -96
  65. package/src/locale/messages-sma.ts +18 -18
  66. package/src/model/ContentType.ts +41 -0
  67. package/src/model/SubjectCategories.ts +0 -5
  68. package/src/model/index.ts +2 -1
  69. package/src/utils/resourceTypeColor.tsx +38 -0
@@ -16,10 +16,13 @@ import {
16
16
  ResourceImageProps,
17
17
  ResourceTitle,
18
18
  ResourceTitleLink,
19
- TopicList,
19
+ ResourceTypeList,
20
+ StyledContentIconWrapper,
20
21
  LoaderProps,
21
22
  } from './resourceComponents';
22
23
  import ContentLoader from '../ContentLoader';
24
+ import ContentTypeBadge from '../ContentTypeBadge';
25
+ import { contentTypeMapping } from '../model/ContentType';
23
26
 
24
27
  const StyledResourceDescription = styled.p`
25
28
  grid-area: description;
@@ -90,18 +93,21 @@ const TagsandActionMenu = styled.div`
90
93
  const StyledImageWrapper = styled.div<StyledImageProps>`
91
94
  grid-area: image;
92
95
  width: ${(p) => (p.imageSize === 'normal' ? '136px' : '56px')};
93
- height: ${(p) => (p.imageSize === 'normal' ? '96px' : '40px')};
94
96
  ${mq.range({ until: breakpoints.mobileWide })} {
95
97
  width: 54px;
96
98
  height: 40px;
97
99
  }
98
100
  overflow: hidden;
101
+ border-radius: 2px;
102
+ display: flex;
103
+ align-items: center;
104
+ justify-content: center;
105
+ aspect-ratio: 4/3;
99
106
  `;
100
107
 
101
108
  const StyledImage = styled(Image)`
102
- display: flex;
103
- border-radius: 2px;
104
109
  object-fit: cover;
110
+ aspect-ratio: 4/3;
105
111
  `;
106
112
 
107
113
  const TopicAndTitleWrapper = styled.div`
@@ -119,7 +125,8 @@ export interface ListResourceProps {
119
125
  tagLinkPrefix?: string;
120
126
  title: string;
121
127
  resourceImage: ResourceImageProps;
122
- topics: string[];
128
+ headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
129
+ resourceTypes: { id: string; name: string }[];
123
130
  tags?: string[];
124
131
  description?: string;
125
132
  menuItems?: MenuItemProps[];
@@ -131,14 +138,24 @@ interface ListResourceImageProps {
131
138
  resourceImage: ResourceImageProps;
132
139
  loading?: boolean;
133
140
  type: 'normal' | 'compact';
141
+ contentType: string;
134
142
  }
135
143
 
136
- const ListResourceImage = ({ resourceImage, loading, type }: ListResourceImageProps) => {
144
+ const ListResourceImage = ({ resourceImage, loading, type, contentType }: ListResourceImageProps) => {
137
145
  if (!loading) {
138
- return (
139
- <StyledImage alt={resourceImage.alt} src={resourceImage.src} fallbackWidth={type === 'compact' ? 56 : 136} />
140
- );
146
+ if (resourceImage.src === '') {
147
+ return (
148
+ <StyledContentIconWrapper contentType={contentType}>
149
+ <ContentTypeBadge type={contentType} size="x-small" />
150
+ </StyledContentIconWrapper>
151
+ );
152
+ } else {
153
+ return (
154
+ <StyledImage alt={resourceImage.alt} src={resourceImage.src} fallbackWidth={type === 'compact' ? 56 : 136} />
155
+ );
156
+ }
141
157
  }
158
+
142
159
  return (
143
160
  <ContentLoader height={'100%'} width={'100%'} viewBox={null} preserveAspectRatio="none">
144
161
  <rect
@@ -153,7 +170,7 @@ const ListResourceImage = ({ resourceImage, loading, type }: ListResourceImagePr
153
170
  );
154
171
  };
155
172
 
156
- const TopicAndTitleLoader = ({ loading, children }: LoaderProps) => {
173
+ const ResourceTypeAndTitleLoader = ({ loading, children }: LoaderProps) => {
157
174
  if (loading) {
158
175
  return (
159
176
  <ContentLoader height={'40px'} width={'100%'} viewBox={null} preserveAspectRatio="none">
@@ -189,7 +206,8 @@ const ListResource = ({
189
206
  title,
190
207
  tags,
191
208
  resourceImage,
192
- topics,
209
+ resourceTypes,
210
+ headingLevel = 'h2',
193
211
  description,
194
212
  menuItems,
195
213
  isLoading = false,
@@ -198,6 +216,8 @@ const ListResource = ({
198
216
  const showDescription = description !== undefined;
199
217
  const imageType = showDescription ? 'normal' : 'compact';
200
218
  const linkRef = useRef<HTMLAnchorElement>(null);
219
+ const firstContentType = resourceTypes?.[0].id ?? '';
220
+ const Title = ResourceTitle.withComponent(headingLevel);
201
221
  const handleClick = () => {
202
222
  if (linkRef.current) {
203
223
  linkRef.current.click();
@@ -207,15 +227,20 @@ const ListResource = ({
207
227
  return (
208
228
  <ResourceWrapper onClick={handleClick} id={id}>
209
229
  <StyledImageWrapper imageSize={imageType}>
210
- <ListResourceImage resourceImage={resourceImage} loading={isLoading} type={imageType} />
230
+ <ListResourceImage
231
+ resourceImage={resourceImage}
232
+ loading={isLoading}
233
+ type={imageType}
234
+ contentType={contentTypeMapping[firstContentType] ?? contentTypeMapping['default']}
235
+ />
211
236
  </StyledImageWrapper>
212
237
  <TopicAndTitleWrapper>
213
- <TopicAndTitleLoader loading={isLoading}>
238
+ <ResourceTypeAndTitleLoader loading={isLoading}>
214
239
  <ResourceTitleLink to={link} target={targetBlank ? '_blank' : undefined} ref={linkRef}>
215
- <ResourceTitle>{title}</ResourceTitle>
240
+ <Title>{title}</Title>
216
241
  </ResourceTitleLink>
217
- <TopicList topics={topics} />
218
- </TopicAndTitleLoader>
242
+ <ResourceTypeList resourceTypes={resourceTypes} />
243
+ </ResourceTypeAndTitleLoader>
219
244
  </TopicAndTitleWrapper>
220
245
  {showDescription && <ResourceDescription description={description} loading={isLoading} />}
221
246
  <TagsandActionMenu>
@@ -14,7 +14,7 @@ import { MenuButton } from '@ndla/button';
14
14
  import SafeLink from '@ndla/safelink';
15
15
  import { useNavigate } from 'react-router-dom';
16
16
  import { HashTag } from '@ndla/icons/common';
17
-
17
+ import resourceTypeColor from '../utils/resourceTypeColor';
18
18
  export interface ResourceImageProps {
19
19
  alt: string;
20
20
  src: string;
@@ -65,13 +65,12 @@ const StyledSafeLink = styled(SafeLink)`
65
65
  }
66
66
  `;
67
67
 
68
- const StyledTopicList = styled.ul`
68
+ const StyledResourceTypeList = styled.ul`
69
69
  list-style: none;
70
70
  display: flex;
71
71
  margin: 0;
72
72
  padding: 0;
73
73
  overflow: hidden;
74
- grid-area: topicList;
75
74
  `;
76
75
 
77
76
  const StyledTopicDivider = styled.span`
@@ -79,7 +78,7 @@ const StyledTopicDivider = styled.span`
79
78
  padding: 0 ${spacing.xxsmall};
80
79
  `;
81
80
 
82
- const StyledTopicListElement = styled.li`
81
+ const StyledResourceListElement = styled.li`
83
82
  ${fonts.sizes(12)};
84
83
  margin: 0;
85
84
  line-height: 1.5;
@@ -103,6 +102,19 @@ const TagCounterWrapper = styled.span`
103
102
  padding: 5px;
104
103
  `;
105
104
 
105
+ export interface ContentIconProps {
106
+ contentType: string;
107
+ }
108
+
109
+ export const StyledContentIconWrapper = styled.span<ContentIconProps>`
110
+ width: 100%;
111
+ aspect-ratio: 4/3;
112
+ display: flex;
113
+ align-items: center;
114
+ justify-content: center;
115
+ background-color: ${({ contentType }) => resourceTypeColor(contentType)};
116
+ `;
117
+
106
118
  interface TagListProps {
107
119
  tags?: string[];
108
120
  tagLinkPrefix?: string;
@@ -146,7 +158,6 @@ const TagMenuButton = styled(MenuButton)`
146
158
  background-color: ${colors.brand.light};
147
159
  }
148
160
  `;
149
-
150
161
  export const CompressedTagList = ({ tags, tagLinkPrefix }: CompressedTagListProps) => {
151
162
  const navigate = useNavigate();
152
163
  const { t } = useTranslation();
@@ -175,21 +186,21 @@ export const CompressedTagList = ({ tags, tagLinkPrefix }: CompressedTagListProp
175
186
  );
176
187
  };
177
188
 
178
- interface TopicListProps {
179
- topics?: string[];
189
+ interface ResourceTypeListProps {
190
+ resourceTypes?: { id: string; name: string }[];
180
191
  }
181
192
 
182
- export const TopicList = ({ topics }: TopicListProps) => {
193
+ export const ResourceTypeList = ({ resourceTypes }: ResourceTypeListProps) => {
183
194
  const { t } = useTranslation();
184
- if (!topics) return null;
195
+ if (!resourceTypes) return null;
185
196
  return (
186
- <StyledTopicList aria-label={t('navigation.topics')}>
187
- {topics.map((topic, i) => (
188
- <StyledTopicListElement key={topic}>
189
- {topic}
190
- {i !== topics.length - 1 && <StyledTopicDivider aria-hidden="true">•</StyledTopicDivider>}
191
- </StyledTopicListElement>
197
+ <StyledResourceTypeList aria-label={t('navigation.topics')}>
198
+ {resourceTypes.map((resource, i) => (
199
+ <StyledResourceListElement key={resource.id}>
200
+ {resource.name}
201
+ {i !== resourceTypes.length - 1 && <StyledTopicDivider aria-hidden="true">•</StyledTopicDivider>}
202
+ </StyledResourceListElement>
192
203
  ))}
193
- </StyledTopicList>
204
+ </StyledResourceTypeList>
194
205
  );
195
206
  };
@@ -18,30 +18,8 @@ import constants from '../model';
18
18
  import ItemContexts, { ItemContextsType } from './components/ItemContexts';
19
19
  import ItemTopicHeader from './components/ItemTopicHeader';
20
20
  import ItemResourceHeader from './components/ItemResourceHeader';
21
-
22
21
  const { contentTypes } = constants;
23
22
 
24
- export const resourceTypeColor = (type: string) => {
25
- switch (type) {
26
- case contentTypes.SUBJECT_MATERIAL:
27
- return colors.subjectMaterial.light;
28
- case contentTypes.TOPIC:
29
- return colors.subject.light;
30
- case contentTypes.TASKS_AND_ACTIVITIES:
31
- return colors.tasksAndActivities.light;
32
- case contentTypes.ASSESSMENT_RESOURCES:
33
- return colors.assessmentResource.light;
34
- case contentTypes.EXTERNAL_LEARNING_RESOURCES:
35
- return colors.externalLearningResource.light;
36
- case contentTypes.SOURCE_MATERIAL:
37
- return colors.sourceMaterial.light;
38
- case contentTypes.LEARNING_PATH:
39
- return colors.learningPath.light;
40
- default:
41
- return '';
42
- }
43
- };
44
-
45
23
  type ItemTypeProps = {
46
24
  contentType?: ContentType;
47
25
  isTopic?: boolean;
@@ -13,7 +13,9 @@ import styled from '@emotion/styled';
13
13
  import { animations, fonts, spacing } from '@ndla/core';
14
14
 
15
15
  import { ContentType } from '../SearchTypeResult';
16
- import { resourceTypeColor, SearchItemType } from '../SearchItem';
16
+ import { SearchItemType } from '../SearchItem';
17
+
18
+ import resourceTypeColor from '../../utils/resourceTypeColor';
17
19
  import ContentTypeBadge from '../../ContentTypeBadge';
18
20
 
19
21
  type ItemTypeProps = {
@@ -71,9 +71,7 @@ const messages = {
71
71
  [subjectCategories.ACTIVE_SUBJECTS]: 'Active',
72
72
  [subjectCategories.ARCHIVE_SUBJECTS]: 'Expired',
73
73
  [subjectCategories.BETA_SUBJECTS]: 'Revised',
74
- [subjectCategories.COMMON_SUBJECTS]: 'Common core subj.',
75
- [subjectCategories.PROGRAMME_SUBJECTS]: 'Programme subj. SF',
76
- [subjectCategories.SPECIALIZED_SUBJECTS]: 'Programme subj. YF',
74
+ [subjectTypes.RESOURCE_COLLECTION]: 'Other resources',
77
75
  },
78
76
  subjectTypes: {
79
77
  [subjectTypes.SUBJECT]: 'Subject',
@@ -432,6 +430,7 @@ const messages = {
432
430
  },
433
431
  license: {
434
432
  heading: 'How to reuse content',
433
+ copy: 'Copy',
435
434
  tabs: {
436
435
  text: 'Text',
437
436
  images: 'Images',
@@ -1046,9 +1045,10 @@ const messages = {
1046
1045
  deleteAccount: 'Delete My NDLA',
1047
1046
  welcome:
1048
1047
  'Welcome to my NDLA! You can now save your favourite resources from NDLA and organise them in folders with tags',
1049
- read: { our: 'Read our', ours: 'Read our' },
1048
+ read: { read: 'Read our', our: '.' },
1050
1049
  privacy: 'privacy statement',
1051
- questions: { question: 'Any questions?', ask: 'Ask us in the chat' },
1050
+ privacyLink: 'https://om.ndla.no/gdpr',
1051
+ questions: { question: 'Any questions?', ask: 'Ask NDLA' },
1052
1052
  wishToDelete: 'Do you wish to delete your account?',
1053
1053
  terms: {
1054
1054
  terms: 'Terms of use',
@@ -1067,11 +1067,11 @@ const messages = {
1067
1067
  },
1068
1068
  folderInfo: {
1069
1069
  title: 'How to organise your favourite resources in folders',
1070
- text: 'You can get to the folder overview by clicking on my folders on the menu to the left. Here you can create new folders and subfolder. You can also create a new folder in the dialogue window that is activated when you click on the heart in a resource',
1070
+ text: 'You can get to the folder overview by clicking on <strong>My folders</strong> on the menu to the left. Here you can create new folders and subfolder. You can also create a new folder in the dialogue window that is activated when you click on the heart in a resource',
1071
1071
  },
1072
1072
  tagInfo: {
1073
1073
  title: 'How to tag your favourite resources',
1074
- text: 'When you save a resource, you will have the option to tag it with a keyword. This tag can be used to find the resource across folders. By selecting my tags on the menu to the left, you will see all the tags your have used. You can also see which resources are tagget with which keyword.',
1074
+ text: 'When you save a resource, you will have the option to tag it with a keyword. This tag can be used to find the resource across folders. By selecting <strong>My tags</strong> on the menu to the left, you will see all the tags your have used. You can also see which resources are tagget with which keyword.',
1075
1075
  },
1076
1076
  },
1077
1077
  resource: {
@@ -71,9 +71,7 @@ const messages = {
71
71
  [subjectCategories.ACTIVE_SUBJECTS]: 'Aktive',
72
72
  [subjectCategories.ARCHIVE_SUBJECTS]: 'Utgåtte',
73
73
  [subjectCategories.BETA_SUBJECTS]: 'Kommende',
74
- [subjectCategories.COMMON_SUBJECTS]: 'Fellesfag',
75
- [subjectCategories.PROGRAMME_SUBJECTS]: 'Programfag SF',
76
- [subjectCategories.SPECIALIZED_SUBJECTS]: 'Yrkesfag',
74
+ [subjectTypes.RESOURCE_COLLECTION]: 'Andre ressurser',
77
75
  },
78
76
  subjectTypes: {
79
77
  [subjectTypes.SUBJECT]: 'Fag',
@@ -432,6 +430,7 @@ const messages = {
432
430
  heading: 'Slik gjenbruker du innhold',
433
431
  learnMore: 'Lær mer om åpne lisenser',
434
432
  copyTitle: 'Kildehenvisning',
433
+ copy: 'Kopier',
435
434
  hasCopiedTitle: 'Kopiert!',
436
435
  embed: 'Bygg inn',
437
436
  embedCopied: 'Kopierte innbyggingskode!',
@@ -826,7 +825,7 @@ const messages = {
826
825
  },
827
826
  frontPageToolbox: {
828
827
  heading: 'Verktøykassa',
829
- text: 'Har du lyst til å bli god til å presentere, eller vil du lære å studere smartere ved hjelp av riktig studieteknikk? Trenger du råd om hvordan du leser mest mulig effektivt til eksamen? I verktøykassa til NDLA finner du masse gode tips og råd!',
828
+ text: 'Har du lyst til å bli god til å presentere, eller vil du lære å studere smartere ved hjelp av riktig studieteknikk? Trenger du råd om hvordan du leser mest mulig effektivt til eksamen? I verktøykassa til NDLA finner du mange gode tips og råd!',
830
829
  linkTextStudents: 'Se alle tipsene for elever her',
831
830
  linkTextTeachers: 'Se alle tipsene for lærere her',
832
831
  cursorText: 'Tips',
@@ -954,9 +953,9 @@ const messages = {
954
953
  loggedInAs: 'Du er pålogget som {{role}}.',
955
954
  loggedInAsButton: 'Du er pålogget som {{role}}',
956
955
  role: {
957
- employee: 'Lærer',
958
- staff: 'Ansatt',
959
- student: 'Elev',
956
+ employee: 'lærer',
957
+ staff: 'ansatt',
958
+ student: 'elev',
960
959
  },
961
960
  buttonLogIn: 'Logg inn med Feide',
962
961
  buttonLogOut: 'Logg ut',
@@ -971,7 +970,7 @@ const messages = {
971
970
  resource: {
972
971
  accessDenied: 'Vi beklager, men denne ressursen er bare for lærere innlogget med Feide.',
973
972
  },
974
- primarySchool: 'Hovedskole',
973
+ primarySchool: 'hovedskole',
975
974
  name: 'Navn',
976
975
  mail: 'E-post',
977
976
  username: 'Brukernavn',
@@ -981,7 +980,7 @@ const messages = {
981
980
  other: 'Andre grupper',
982
981
  },
983
982
  wrongUserInfoDisclaimer:
984
- 'Dersom informasjon er feil, dette oppdateres av vertsorganisasjon/skoleeier som brukeren tilhører. Oversikt over brukerstøtte finnes her: ',
983
+ 'Dersom informasjonen er feil, må den oppdateres av vertsorganisasjon/skoleeier som brukeren tilhører. Oversikt over brukerstøtte finnes her: ',
985
984
  },
986
985
  checkOutNewFeature: 'Sjekk ut ny funksjonalitet',
987
986
  slateBlockMenu: {
@@ -1042,10 +1041,11 @@ const messages = {
1042
1041
  loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
1043
1042
  loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1044
1043
  welcome:
1045
- 'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med emneknagger.',
1046
- read: { our: 'Les vår', ours: 'Les våre' },
1047
- privacy: 'personvernerklæring her',
1048
- questions: { question: 'Lurer du på noe?', ask: 'Spør oss i chatten' },
1044
+ 'Velkommen til Min NDLA! Nå kan du lagre favorittressursene dine fra NDLA og organisere dem i mapper og med emneknagger.',
1045
+ read: { read: 'Les', our: ' vår.' },
1046
+ privacy: 'personvernerklæringa',
1047
+ privacyLink: 'https://om.ndla.no/gdpr',
1048
+ questions: { question: 'Lurer du på noe?', ask: 'Spør NDLA' },
1049
1049
  wishToDelete: 'Vil du ikke ha brukerprofil hos oss lenger?',
1050
1050
  terms: {
1051
1051
  terms: 'Vilkår for bruk',
@@ -1058,16 +1058,16 @@ const messages = {
1058
1058
  feideWrongInfo:
1059
1059
  'Dersom informasjon er feil, så må dette oppdateres av vertsorganisasjon/skoleeier som brukeren tilhører. Oversikt over brukerstøtte finnes her: feide.no/brukerstøtte',
1060
1060
  storageInfo: {
1061
- title: 'Slik lagrer du dine favorittressurser fra NDLA',
1062
- text: 'Klikk på hjerteknappen for å lagre en ressurs. Du vil da få mulighet til å lagre ressursen i en mappe.',
1061
+ title: 'Slik lagrer du favorittressursene dine fra NDLA',
1062
+ text: 'Klikk på hjerteknappen for å lagre en ressurs. Du vil da få mulighet til å lagre ressursen i ei mappe.',
1063
1063
  },
1064
1064
  folderInfo: {
1065
- title: 'Slik organiserer du dine favorittressurser i mapper',
1066
- text: 'Klikk på mine mapper i menyen til venstre for å komme til mappeoversikten. Her kan du opprette nye mapper og undermapper. Du kan også opprette en ny mappe i dialogvinduet som kommer når du klikker på et hjerte i en ressurs.',
1065
+ title: 'Slik organiserer du favorittressursene dine i mapper',
1066
+ text: 'Klikk på <strong>Mine mapper</strong> i menyen til venstre for å komme til mappeoversikten. Her kan du opprette nye mapper og undermapper. Du kan også opprette ei ny mappe i dialogvinduet som kommer når du klikker på et hjerte i en ressurs.',
1067
1067
  },
1068
1068
  tagInfo: {
1069
- title: 'Slik tagger du dine favorittressurser',
1070
- text: 'Når du lagrer en ressurs får du mulighet til å markere ressursen med en emneknagg. Emneknaggen er et nøkkelord du kan bruke til å finne tilbake til ressurser på tvers av mapper. Du finner alle emneknaggene du har brukt ved å velge mine emneknagger i venstremenyen. Her kan du også se hvilke ressurser du har markert med hver enkel emneknagg.',
1069
+ title: 'Slik tagger du favorittressursene dine',
1070
+ text: 'Når du lagrer en ressurs, får du mulighet til å markere ressursen med en emneknagg. Emneknaggen er et nøkkelord du kan bruke til å finne tilbake til ressurser på tvers av mapper. Du finner alle emneknaggene du har brukt, ved å velge <strong>Mine emneknagger</strong> i venstremenyen. Her kan du også se hvilke ressurser du har markert med hvilken emneknagg.',
1071
1071
  },
1072
1072
  },
1073
1073
  resource: {
@@ -71,9 +71,7 @@ const messages = {
71
71
  [subjectCategories.ACTIVE_SUBJECTS]: 'Aktive',
72
72
  [subjectCategories.ARCHIVE_SUBJECTS]: 'Utgåtte',
73
73
  [subjectCategories.BETA_SUBJECTS]: 'Kommande',
74
- [subjectCategories.COMMON_SUBJECTS]: 'Fellesfag',
75
- [subjectCategories.PROGRAMME_SUBJECTS]: 'Programfag SF',
76
- [subjectCategories.SPECIALIZED_SUBJECTS]: 'Yrkesfag',
74
+ [subjectTypes.RESOURCE_COLLECTION]: 'Andre ressursar',
77
75
  },
78
76
  subjectTypes: {
79
77
  [subjectTypes.SUBJECT]: 'Fag',
@@ -433,6 +431,7 @@ const messages = {
433
431
  heading: 'Slik gjenbruker du innhald',
434
432
  learnMore: 'Lær meir om opne lisensar',
435
433
  copyTitle: 'Kjeldetilvising',
434
+ copy: 'Kopier',
436
435
  hasCopiedTitle: 'Kopiert!',
437
436
  embed: 'Bygg inn',
438
437
  embedCopied: 'Kopierte innbyggingskode!',
@@ -827,7 +826,7 @@ const messages = {
827
826
  },
828
827
  frontPageToolbox: {
829
828
  heading: 'Verktøykassa',
830
- text: 'Har du lyst til å bli god til å presentere, eller vil du lære å studere smartare ved hjelp av riktig studieteknikk? Treng du råd om korleis du les mest mogleg effektivt til eksamen? I verktøykassa til NDLA finn du masse gode tips og råd!',
829
+ text: 'Har du lyst til å bli god til å presentere, eller vil du lære å studere smartare ved hjelp av riktig studieteknikk? Treng du råd om korleis du les mest mogleg effektivt til eksamen? I verktøykassa til NDLA finn du mange gode tips og råd!',
831
830
  linkTextStudents: 'Sjå alle tipsa for elever her',
832
831
  linkTextTeachers: 'Sjå alle tipsa for lærarar her',
833
832
  cursorText: 'Tips',
@@ -955,9 +954,9 @@ const messages = {
955
954
  loggedInAs: 'Du er pålogga som {{role}}.',
956
955
  loggedInAsButton: 'Du er pålogga som {{role}}',
957
956
  role: {
958
- employee: 'Lærar',
959
- staff: 'Tilsett',
960
- student: 'Elev',
957
+ employee: 'lærar',
958
+ staff: 'tilsett',
959
+ student: 'elev',
961
960
  },
962
961
  buttonLogIn: 'Logg inn med Feide',
963
962
  buttonLogOut: 'Logg ut',
@@ -972,7 +971,7 @@ const messages = {
972
971
  resource: {
973
972
  accessDenied: 'Vi beklagar, men denne ressursen er berre for lærarar innlogga med Feide.',
974
973
  },
975
- primarySchool: 'Hovudskule',
974
+ primarySchool: 'hovudskule',
976
975
  name: 'Namn',
977
976
  mail: 'E-post',
978
977
  username: 'Brukarnamn',
@@ -982,7 +981,7 @@ const messages = {
982
981
  other: 'Andre grupper',
983
982
  },
984
983
  wrongUserInfoDisclaimer:
985
- 'Dersom informasjon er feil, dette oppdaterast av vertsorganisasjon/skuleeigar som brukaren tilhøyrar. Oversikt over brukarstøtte finst her: ',
984
+ 'Dersom informasjonen er feil, må han oppdaterast av vertsorganisasjon/skuleeigar som brukaren tilhøyrer. Oversikt over brukarstøtte finst her: ',
986
985
  },
987
986
  checkOutNewFeature: 'Sjekk ut ny funksjonalitet',
988
987
  slateBlockMenu: {
@@ -1017,7 +1016,7 @@ const messages = {
1017
1016
  'Er du sikker på at du vil slette mappa? Dersom mappa har undermapper vil desse også slettast. Denne handlinga kan ikkje endrast.',
1018
1017
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlinga kan ikkje endrast.',
1019
1018
  myFolders: 'Mine mapper',
1020
- myTags: 'Emneknaggane mine',
1019
+ myTags: 'Mine emneknaggar',
1021
1020
  newFolder: 'Ny mappe',
1022
1021
  newFolderUnder: 'Lag ny mappe under {{folderName}}',
1023
1022
  myAccount: 'Min konto',
@@ -1043,10 +1042,11 @@ const messages = {
1043
1042
  loginResourcePitch: 'Ønsker du å favorittmerke denne sida?',
1044
1043
  loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1045
1044
  welcome:
1046
- 'Velkommen til Min NDLA! kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
1047
- read: { our: 'Les vår', ours: 'Les våre' },
1048
- privacy: 'personvernerklæring her',
1049
- questions: { question: 'Lurer du på noko?', ask: 'Spør oss i chatten' },
1045
+ 'Velkommen til Min NDLA! No kan du lagre favorittressursane dine frå NDLA og organisere dei i mapper og med emneknaggar.',
1046
+ read: { read: 'Les', our: ' vår.' },
1047
+ privacy: 'personvernerklæringa',
1048
+ privacyLink: 'https://om.ndla.no/gdpr',
1049
+ questions: { question: 'Lurer du på noko?', ask: 'Spør NDLA' },
1050
1050
  wishToDelete: 'Vil du ikkje ha brukerprofil hos oss lenger?',
1051
1051
  terms: {
1052
1052
  terms: 'Vilkår for bruk',
@@ -1059,16 +1059,16 @@ const messages = {
1059
1059
  feideWrongInfo:
1060
1060
  'Dersom informasjon er feil, så må dette oppdaterast av vertsorganisasjon/skuleeigar som brukaren tilhøyrer. Oversyn over brukartrygd finst her: feide.no/brukartrygd',
1061
1061
  storageInfo: {
1062
- title: 'Slik lagrar du favorittressursene dine frå NDLA',
1062
+ title: 'Slik lagrar du favorittressursane dine frå NDLA',
1063
1063
  text: 'Klikk på hjarteknappen for å lagre ein ressurs. Du vil då få høve til å lagre ressursen i ei mappe.',
1064
1064
  },
1065
1065
  folderInfo: {
1066
1066
  title: 'Slik organiserer du favorittressursene dine i mapper',
1067
- text: 'Klikk på mine mapper i menyen til venstre for å kome til mappeoversikta. Her kan du opprette nye mapper og undermapper. Du kan også opprette ny mappe i vindauget som kjem opp når du klikkar på eit hjarte i ein ressurs.',
1067
+ text: 'Klikk på <strong>Mine mapper</strong> i menyen til venstre for å komme til mappeoversikta. Her kan du opprette nye mapper og undermapper. Du kan også opprette ny mappe i vindauget som kjem opp når du klikkar på eit hjarte i ein ressurs.',
1068
1068
  },
1069
1069
  tagInfo: {
1070
- title: 'Slik tagger du dine favorittressurser',
1071
- text: 'Når du lagrar ein ressurs får du høve til å markere ressursen med ein emneknagg. Emneknaggen er eit nøkkelord du kan bruke til å finne tilbake til ressursar på tvers av mapper. Du finn alle emneknaggane du har brukt ved å velje mine emneknaggar i venstremenyen. Her kan du også sjå kva for nokre ressursar du har markert med kvar enkel emneknagg.',
1070
+ title: 'Slik taggar du favorittressursane dine',
1071
+ text: 'Når du lagrar ein ressurs, får du høve til å markere ressursen med ein emneknagg. Emneknaggen er eit nøkkelord du kan bruke til å finne tilbake til ressursar på tvers av mapper. Du finn alle emneknaggane du har brukt, ved å velje <strong>Mine emneknaggar</strong> i venstremenyen. Her kan du også sjå kva for ressursar du har merkt med kva knagg.',
1072
1072
  },
1073
1073
  },
1074
1074
  resource: {