@ndla/ui 27.1.7 → 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 (49) hide show
  1. package/es/Frontpage/FrontpageAllSubjects.js +9 -8
  2. package/es/Resource/BlockResource.js +22 -13
  3. package/es/Resource/ListResource.js +24 -15
  4. package/es/Resource/resourceComponents.js +28 -28
  5. package/es/locale/messages-en.js +6 -6
  6. package/es/locale/messages-nb.js +17 -17
  7. package/es/locale/messages-nn.js +16 -16
  8. package/es/locale/messages-se.js +8 -8
  9. package/es/locale/messages-sma.js +17 -17
  10. package/es/model/ContentType.js +23 -1
  11. package/es/model/SubjectCategories.js +1 -5
  12. package/es/model/index.js +3 -2
  13. package/lib/Frontpage/FrontpageAllSubjects.js +10 -8
  14. package/lib/Resource/BlockResource.d.ts +6 -3
  15. package/lib/Resource/BlockResource.js +23 -12
  16. package/lib/Resource/ListResource.d.ts +6 -3
  17. package/lib/Resource/ListResource.js +25 -14
  18. package/lib/Resource/resourceComponents.d.ts +6 -3
  19. package/lib/Resource/resourceComponents.js +30 -30
  20. package/lib/locale/messages-en.d.ts +16 -23
  21. package/lib/locale/messages-en.js +6 -6
  22. package/lib/locale/messages-nb.d.ts +16 -23
  23. package/lib/locale/messages-nb.js +17 -17
  24. package/lib/locale/messages-nn.d.ts +16 -23
  25. package/lib/locale/messages-nn.js +16 -16
  26. package/lib/locale/messages-se.d.ts +16 -23
  27. package/lib/locale/messages-se.js +8 -8
  28. package/lib/locale/messages-sma.d.ts +16 -23
  29. package/lib/locale/messages-sma.js +17 -17
  30. package/lib/model/ContentType.d.ts +18 -0
  31. package/lib/model/ContentType.js +32 -2
  32. package/lib/model/SubjectCategories.d.ts +0 -3
  33. package/lib/model/SubjectCategories.js +3 -10
  34. package/lib/model/index.d.ts +12 -2
  35. package/lib/model/index.js +4 -3
  36. package/package.json +4 -4
  37. package/src/Frontpage/FrontpageAllSubjects.tsx +5 -2
  38. package/src/Resource/BlockResource.tsx +18 -11
  39. package/src/Resource/ListResource.tsx +14 -11
  40. package/src/Resource/resourceComponents.tsx +13 -14
  41. package/src/locale/messages-en.ts +5 -7
  42. package/src/locale/messages-nb.ts +16 -18
  43. package/src/locale/messages-nn.ts +15 -17
  44. package/src/locale/messages-se.ts +7 -9
  45. package/src/locale/messages-sma.ts +16 -18
  46. package/src/model/ContentType.ts +29 -0
  47. package/src/model/SubjectCategories.ts +0 -5
  48. package/src/model/index.ts +2 -1
  49. package/src/.DS_Store +0 -0
@@ -80,7 +80,7 @@ var messages = _objectSpread(_objectSpread({
80
80
  embed: 'Sett inn',
81
81
  notSupported: 'Det fungerte ikke å sette inn innholdet automatisk. Kopier kildekoden under for å sette inn på din side.'
82
82
  },
83
- subjectCategories: (_subjectCategories = {}, _defineProperty(_subjectCategories, subjectCategories.ACTIVE_SUBJECTS, 'Aktive'), _defineProperty(_subjectCategories, subjectCategories.ARCHIVE_SUBJECTS, 'Utgåtte'), _defineProperty(_subjectCategories, subjectCategories.BETA_SUBJECTS, 'Kommende'), _defineProperty(_subjectCategories, subjectCategories.COMMON_SUBJECTS, 'Fellesfag'), _defineProperty(_subjectCategories, subjectCategories.PROGRAMME_SUBJECTS, 'Programfag SF'), _defineProperty(_subjectCategories, subjectCategories.SPECIALIZED_SUBJECTS, 'Yrkesfag'), _subjectCategories),
83
+ subjectCategories: (_subjectCategories = {}, _defineProperty(_subjectCategories, subjectCategories.ACTIVE_SUBJECTS, 'Aktive'), _defineProperty(_subjectCategories, subjectCategories.ARCHIVE_SUBJECTS, 'Utgåtte'), _defineProperty(_subjectCategories, subjectCategories.BETA_SUBJECTS, 'Kommende'), _defineProperty(_subjectCategories, subjectTypes.RESOURCE_COLLECTION, 'Andre ressurser'), _subjectCategories),
84
84
  subjectTypes: (_subjectTypes = {}, _defineProperty(_subjectTypes, subjectTypes.SUBJECT, 'Fag'), _defineProperty(_subjectTypes, subjectTypes.RESOURCE_COLLECTION, 'Ressurssamling'), _subjectTypes),
85
85
  searchPage: {
86
86
  noHits: 'Ingen artikler samsvarte med søket ditt på: {{query}}',
@@ -919,9 +919,9 @@ var messages = _objectSpread(_objectSpread({
919
919
  loggedInAs: 'Du er pålogget som {{role}}.',
920
920
  loggedInAsButton: 'Du er pålogget som {{role}}',
921
921
  role: {
922
- employee: 'Lærer',
923
- staff: 'Ansatt',
924
- student: 'Elev'
922
+ employee: 'lærer',
923
+ staff: 'ansatt',
924
+ student: 'elev'
925
925
  },
926
926
  buttonLogIn: 'Logg inn med Feide',
927
927
  buttonLogOut: 'Logg ut',
@@ -936,7 +936,7 @@ var messages = _objectSpread(_objectSpread({
936
936
  resource: {
937
937
  accessDenied: 'Vi beklager, men denne ressursen er bare for lærere innlogget med Feide.'
938
938
  },
939
- primarySchool: 'Hovedskole',
939
+ primarySchool: 'hovedskole',
940
940
  name: 'Navn',
941
941
  mail: 'E-post',
942
942
  username: 'Brukernavn',
@@ -945,7 +945,7 @@ var messages = _objectSpread(_objectSpread({
945
945
  teaching: 'Undervisningsgruppe',
946
946
  other: 'Andre grupper'
947
947
  },
948
- wrongUserInfoDisclaimer: 'Dersom informasjon er feil, dette oppdaterast av vertsorganisasjon/skuleeigar som brukaren tilhøyrar. Oversikt over brukarstøtte finst her: '
948
+ wrongUserInfoDisclaimer: 'Dersom informasjonen er feil, må den oppdateres av vertsorganisasjon/skoleeier som brukeren tilhører. Oversikt over brukerstøtte finnes her: '
949
949
  },
950
950
  checkOutNewFeature: 'Sjekk ut ny funksjonalitet',
951
951
  slateBlockMenu: {
@@ -1003,16 +1003,16 @@ var messages = _objectSpread(_objectSpread({
1003
1003
  loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjenner du våre vilkår for bruk',
1004
1004
  loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
1005
1005
  loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1006
- welcome: 'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med emneknagger.',
1006
+ welcome: 'Velkommen til Min NDLA! Nå kan du lagre favorittressursene dine fra NDLA og organisere dem i mapper og med emneknagger.',
1007
1007
  read: {
1008
- our: 'Les vår',
1009
- ours: 'Les våre'
1008
+ read: 'Les',
1009
+ our: ' vår.'
1010
1010
  },
1011
- privacy: 'personvernerklæring her',
1011
+ privacy: 'personvernerklæringa',
1012
1012
  privacyLink: 'https://om.ndla.no/gdpr',
1013
1013
  questions: {
1014
1014
  question: 'Lurer du på noe?',
1015
- ask: 'Spør oss i chatten'
1015
+ ask: 'Spør NDLA'
1016
1016
  },
1017
1017
  wishToDelete: 'Vil du ikke ha brukerprofil hos oss lenger?',
1018
1018
  terms: {
@@ -1025,16 +1025,16 @@ var messages = _objectSpread(_objectSpread({
1025
1025
  feide: 'Dette henter vi om deg gjennom Feide',
1026
1026
  feideWrongInfo: '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',
1027
1027
  storageInfo: {
1028
- title: 'Slik lagrer du dine favorittressurser fra NDLA',
1029
- text: 'Klikk på hjerteknappen for å lagre en ressurs. Du vil da få mulighet til å lagre ressursen i en mappe.'
1028
+ title: 'Slik lagrer du favorittressursene dine fra NDLA',
1029
+ text: 'Klikk på hjerteknappen for å lagre en ressurs. Du vil da få mulighet til å lagre ressursen i ei mappe.'
1030
1030
  },
1031
1031
  folderInfo: {
1032
- title: 'Slik organiserer du dine favorittressurser i mapper',
1033
- 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.'
1032
+ title: 'Slik organiserer du favorittressursene dine i mapper',
1033
+ 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.'
1034
1034
  },
1035
1035
  tagInfo: {
1036
- title: 'Slik tagger du dine favorittressurser',
1037
- 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.'
1036
+ title: 'Slik tagger du favorittressursene dine',
1037
+ 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.'
1038
1038
  }
1039
1039
  },
1040
1040
  resource: {
@@ -14,4 +14,22 @@ export declare const SOURCE_MATERIAL = "source-material";
14
14
  export declare const LEARNING_PATH = "learning-path";
15
15
  export declare const TOPIC = "topic";
16
16
  export declare const MULTIDISCIPLINARY_TOPIC = "multidisciplinary-topic";
17
+ export declare const contentTypes: {
18
+ SUBJECT_MATERIAL: string;
19
+ TASKS_AND_ACTIVITIES: string;
20
+ ASSESSMENT_RESOURCES: string;
21
+ SUBJECT: string;
22
+ EXTERNAL_LEARNING_RESOURCES: string;
23
+ SOURCE_MATERIAL: string;
24
+ LEARNING_PATH: string;
25
+ TOPIC: string;
26
+ MULTIDISCIPLINARY_TOPIC: string;
27
+ };
28
+ export declare const RESOURCE_TYPE_LEARNING_PATH = "urn:resourcetype:learningPath";
29
+ export declare const RESOURCE_TYPE_SUBJECT_MATERIAL = "urn:resourcetype:subjectMaterial";
30
+ export declare const RESOURCE_TYPE_TASKS_AND_ACTIVITIES = "urn:resourcetype:tasksAndActivities";
31
+ export declare const RESOURCE_TYPE_ASSESSMENT_RESOURCES = "urn:resourcetype:reviewResource";
32
+ export declare const RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES = "urn:resourcetype:externalResource";
33
+ export declare const RESOURCE_TYPE_SOURCE_MATERIAL = "urn:resourcetype:SourceMaterial";
17
34
  export declare const ListOfContentTypes: string[];
35
+ export declare const contentTypeMapping: Record<string, string>;
@@ -3,7 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ListOfContentTypes = exports.MULTIDISCIPLINARY_TOPIC = exports.TOPIC = exports.LEARNING_PATH = exports.SOURCE_MATERIAL = exports.EXTERNAL_LEARNING_RESOURCES = exports.SUBJECT = exports.ASSESSMENT_RESOURCES = exports.TASKS_AND_ACTIVITIES = exports.SUBJECT_MATERIAL = void 0;
6
+ exports.contentTypeMapping = exports.ListOfContentTypes = exports.RESOURCE_TYPE_SOURCE_MATERIAL = exports.RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES = exports.RESOURCE_TYPE_ASSESSMENT_RESOURCES = exports.RESOURCE_TYPE_TASKS_AND_ACTIVITIES = exports.RESOURCE_TYPE_SUBJECT_MATERIAL = exports.RESOURCE_TYPE_LEARNING_PATH = exports.contentTypes = exports.MULTIDISCIPLINARY_TOPIC = exports.TOPIC = exports.LEARNING_PATH = exports.SOURCE_MATERIAL = exports.EXTERNAL_LEARNING_RESOURCES = exports.SUBJECT = exports.ASSESSMENT_RESOURCES = exports.TASKS_AND_ACTIVITIES = exports.SUBJECT_MATERIAL = void 0;
7
+
8
+ var _contentTypeMapping;
9
+
10
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
7
11
 
8
12
  /**
9
13
  * Copyright (c) 2017-present, NDLA.
@@ -30,5 +34,31 @@ var TOPIC = 'topic';
30
34
  exports.TOPIC = TOPIC;
31
35
  var MULTIDISCIPLINARY_TOPIC = 'multidisciplinary-topic';
32
36
  exports.MULTIDISCIPLINARY_TOPIC = MULTIDISCIPLINARY_TOPIC;
37
+ var contentTypes = {
38
+ SUBJECT_MATERIAL: SUBJECT_MATERIAL,
39
+ TASKS_AND_ACTIVITIES: TASKS_AND_ACTIVITIES,
40
+ ASSESSMENT_RESOURCES: ASSESSMENT_RESOURCES,
41
+ SUBJECT: SUBJECT,
42
+ EXTERNAL_LEARNING_RESOURCES: EXTERNAL_LEARNING_RESOURCES,
43
+ SOURCE_MATERIAL: SOURCE_MATERIAL,
44
+ LEARNING_PATH: LEARNING_PATH,
45
+ TOPIC: TOPIC,
46
+ MULTIDISCIPLINARY_TOPIC: MULTIDISCIPLINARY_TOPIC
47
+ };
48
+ exports.contentTypes = contentTypes;
49
+ var RESOURCE_TYPE_LEARNING_PATH = 'urn:resourcetype:learningPath';
50
+ exports.RESOURCE_TYPE_LEARNING_PATH = RESOURCE_TYPE_LEARNING_PATH;
51
+ var RESOURCE_TYPE_SUBJECT_MATERIAL = 'urn:resourcetype:subjectMaterial';
52
+ exports.RESOURCE_TYPE_SUBJECT_MATERIAL = RESOURCE_TYPE_SUBJECT_MATERIAL;
53
+ var RESOURCE_TYPE_TASKS_AND_ACTIVITIES = 'urn:resourcetype:tasksAndActivities';
54
+ exports.RESOURCE_TYPE_TASKS_AND_ACTIVITIES = RESOURCE_TYPE_TASKS_AND_ACTIVITIES;
55
+ var RESOURCE_TYPE_ASSESSMENT_RESOURCES = 'urn:resourcetype:reviewResource';
56
+ exports.RESOURCE_TYPE_ASSESSMENT_RESOURCES = RESOURCE_TYPE_ASSESSMENT_RESOURCES;
57
+ var RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES = 'urn:resourcetype:externalResource';
58
+ exports.RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES = RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES;
59
+ var RESOURCE_TYPE_SOURCE_MATERIAL = 'urn:resourcetype:SourceMaterial';
60
+ exports.RESOURCE_TYPE_SOURCE_MATERIAL = RESOURCE_TYPE_SOURCE_MATERIAL;
33
61
  var ListOfContentTypes = ['SUBJECT_MATERIAL', 'TASKS_AND_ACTIVITIES', 'ASSESSMENT_RESOURCES', 'SUBJECT', 'EXTERNAL_LEARNING_RESOURCES', 'SOURCE_MATERIAL', 'LEARNING_PATH', 'TOPIC', 'MULTIDISIPLINARY_TOPIC'];
34
- exports.ListOfContentTypes = ListOfContentTypes;
62
+ exports.ListOfContentTypes = ListOfContentTypes;
63
+ var contentTypeMapping = (_contentTypeMapping = {}, _defineProperty(_contentTypeMapping, RESOURCE_TYPE_LEARNING_PATH, LEARNING_PATH), _defineProperty(_contentTypeMapping, RESOURCE_TYPE_SUBJECT_MATERIAL, SUBJECT_MATERIAL), _defineProperty(_contentTypeMapping, RESOURCE_TYPE_TASKS_AND_ACTIVITIES, TASKS_AND_ACTIVITIES), _defineProperty(_contentTypeMapping, RESOURCE_TYPE_ASSESSMENT_RESOURCES, ASSESSMENT_RESOURCES), _defineProperty(_contentTypeMapping, RESOURCE_TYPE_EXTERNAL_LEARNING_RESOURCES, EXTERNAL_LEARNING_RESOURCES), _defineProperty(_contentTypeMapping, RESOURCE_TYPE_SOURCE_MATERIAL, SOURCE_MATERIAL), _defineProperty(_contentTypeMapping, "default", SUBJECT_MATERIAL), _contentTypeMapping);
64
+ exports.contentTypeMapping = contentTypeMapping;
@@ -8,6 +8,3 @@
8
8
  export declare const ACTIVE_SUBJECTS = "active";
9
9
  export declare const BETA_SUBJECTS = "beta";
10
10
  export declare const ARCHIVE_SUBJECTS = "archive";
11
- export declare const COMMON_SUBJECTS = "common";
12
- export declare const PROGRAMME_SUBJECTS = "programme";
13
- export declare const SPECIALIZED_SUBJECTS = "specialized";
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SPECIALIZED_SUBJECTS = exports.PROGRAMME_SUBJECTS = exports.COMMON_SUBJECTS = exports.ARCHIVE_SUBJECTS = exports.BETA_SUBJECTS = exports.ACTIVE_SUBJECTS = void 0;
6
+ exports.ARCHIVE_SUBJECTS = exports.BETA_SUBJECTS = exports.ACTIVE_SUBJECTS = void 0;
7
7
 
8
8
  /**
9
9
  * Copyright (c) 2021-present, NDLA.
@@ -16,12 +16,5 @@ var ACTIVE_SUBJECTS = 'active';
16
16
  exports.ACTIVE_SUBJECTS = ACTIVE_SUBJECTS;
17
17
  var BETA_SUBJECTS = 'beta';
18
18
  exports.BETA_SUBJECTS = BETA_SUBJECTS;
19
- var ARCHIVE_SUBJECTS = 'archive'; // deprecated
20
-
21
- exports.ARCHIVE_SUBJECTS = ARCHIVE_SUBJECTS;
22
- var COMMON_SUBJECTS = 'common';
23
- exports.COMMON_SUBJECTS = COMMON_SUBJECTS;
24
- var PROGRAMME_SUBJECTS = 'programme';
25
- exports.PROGRAMME_SUBJECTS = PROGRAMME_SUBJECTS;
26
- var SPECIALIZED_SUBJECTS = 'specialized';
27
- exports.SPECIALIZED_SUBJECTS = SPECIALIZED_SUBJECTS;
19
+ var ARCHIVE_SUBJECTS = 'archive';
20
+ exports.ARCHIVE_SUBJECTS = ARCHIVE_SUBJECTS;
@@ -5,12 +5,22 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  */
8
- import * as contentTypes from './ContentType';
9
8
  import * as subjectCategories from './SubjectCategories';
10
9
  import * as subjectTypes from './SubjectTypes';
11
10
  declare const model: {
12
- contentTypes: typeof contentTypes;
11
+ contentTypes: {
12
+ SUBJECT_MATERIAL: string;
13
+ TASKS_AND_ACTIVITIES: string;
14
+ ASSESSMENT_RESOURCES: string;
15
+ SUBJECT: string;
16
+ EXTERNAL_LEARNING_RESOURCES: string;
17
+ SOURCE_MATERIAL: string;
18
+ LEARNING_PATH: string;
19
+ TOPIC: string;
20
+ MULTIDISCIPLINARY_TOPIC: string;
21
+ };
13
22
  subjectCategories: typeof subjectCategories;
14
23
  subjectTypes: typeof subjectTypes;
24
+ contentTypeMapping: Record<string, string>;
15
25
  };
16
26
  export default model;
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports["default"] = void 0;
9
9
 
10
- var contentTypes = _interopRequireWildcard(require("./ContentType"));
10
+ var _ContentType = require("./ContentType");
11
11
 
12
12
  var subjectCategories = _interopRequireWildcard(require("./SubjectCategories"));
13
13
 
@@ -25,9 +25,10 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj;
25
25
  *
26
26
  */
27
27
  var model = {
28
- contentTypes: contentTypes,
28
+ contentTypes: _ContentType.contentTypes,
29
29
  subjectCategories: subjectCategories,
30
- subjectTypes: subjectTypes
30
+ subjectTypes: subjectTypes,
31
+ contentTypeMapping: _ContentType.contentTypeMapping
31
32
  };
32
33
  var _default = model;
33
34
  exports["default"] = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ndla/ui",
3
- "version": "27.1.7",
3
+ "version": "28.0.0",
4
4
  "description": "UI component library for NDLA.",
5
5
  "license": "GPL-3.0",
6
6
  "main": "lib/index.js",
@@ -39,8 +39,8 @@
39
39
  "@ndla/hooks": "^1.1.6",
40
40
  "@ndla/icons": "^1.13.0",
41
41
  "@ndla/licenses": "^5.0.17",
42
- "@ndla/modal": "^1.5.0",
43
- "@ndla/notion": "^3.1.46",
42
+ "@ndla/modal": "^1.6.0",
43
+ "@ndla/notion": "^3.1.47",
44
44
  "@ndla/safelink": "^2.2.19",
45
45
  "@ndla/switch": "^0.1.13",
46
46
  "@ndla/tabs": "^1.1.22",
@@ -85,5 +85,5 @@
85
85
  "publishConfig": {
86
86
  "access": "public"
87
87
  },
88
- "gitHead": "a2bbbd2a97f3e3468c06cc1aea9849a24d9e5461"
88
+ "gitHead": "f7cac264e9855369dc3061fc240ece485de041bb"
89
89
  }
@@ -6,6 +6,7 @@ import SafeLink from '@ndla/safelink';
6
6
  import { colors, fonts, mq, breakpoints } from '@ndla/core';
7
7
  import { MessageBox } from '../Messages';
8
8
  import { ToggleItem } from '../Filter';
9
+ import constants from '../model';
9
10
 
10
11
  const StyledWrapper = styled.nav`
11
12
  margin: 32px 0 0;
@@ -198,12 +199,14 @@ const FrontpageAllSubjects = ({
198
199
  content: (
199
200
  <>
200
201
  {/* Should be persistent til fall 2022 */}
201
- {category.name === t('subjectCategories.beta') && (
202
+ {(category.name === t('subjectCategories.beta') ||
203
+ category.type === constants.subjectCategories.BETA_SUBJECTS) && (
202
204
  <MessageBoxWrapper>
203
205
  <MessageBox>{t('messageBoxInfo.frontPageBeta')}</MessageBox>
204
206
  </MessageBoxWrapper>
205
207
  )}
206
- {category.name === t('subjectCategories.archive') && (
208
+ {(category.name === t('subjectCategories.archive') ||
209
+ category.type === constants.subjectCategories.ARCHIVE_SUBJECTS) && (
207
210
  <MessageBoxWrapper>
208
211
  <MessageBox>{t('messageBoxInfo.frontPageExpired')}</MessageBox>
209
212
  </MessageBoxWrapper>
@@ -17,12 +17,13 @@ import {
17
17
  ResourceImageProps,
18
18
  ResourceTitle,
19
19
  Row,
20
- TopicList,
20
+ ResourceTypeList,
21
21
  ResourceTitleLink,
22
22
  LoaderProps,
23
23
  StyledContentIconWrapper,
24
24
  } from './resourceComponents';
25
25
  import ContentLoader from '../ContentLoader';
26
+ import { contentTypeMapping } from '../model/ContentType';
26
27
 
27
28
  interface BlockResourceProps {
28
29
  id: string;
@@ -30,13 +31,13 @@ interface BlockResourceProps {
30
31
  tagLinkPrefix?: string;
31
32
  title: string;
32
33
  resourceImage: ResourceImageProps;
33
- topics: string[];
34
34
  tags?: string[];
35
35
  description?: string;
36
+ headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
36
37
  menuItems?: MenuItemProps[];
37
38
  isLoading?: boolean;
38
39
  targetBlank?: boolean;
39
- contentType: string;
40
+ resourceTypes?: { id: string; name: string }[];
40
41
  }
41
42
 
42
43
  const BlockElementWrapper = styled.div`
@@ -128,7 +129,7 @@ const BlockImage = ({ image, loading, contentType }: BlockImageProps) => {
128
129
  }
129
130
  };
130
131
 
131
- const TopicAndTitleLoader = ({ children, loading }: LoaderProps) => {
132
+ const ResourceTypeAndTitleLoader = ({ children, loading }: LoaderProps) => {
132
133
  if (loading) {
133
134
  return (
134
135
  <ContentLoader height={'18px'} width={'100%'} viewBox={null} preserveAspectRatio="none">
@@ -148,14 +149,16 @@ const BlockResource = ({
148
149
  title,
149
150
  tags,
150
151
  resourceImage,
151
- topics,
152
152
  description,
153
153
  menuItems,
154
154
  isLoading,
155
+ headingLevel = 'h2',
155
156
  targetBlank,
156
- contentType,
157
+ resourceTypes,
157
158
  }: BlockResourceProps) => {
158
159
  const linkRef = useRef<HTMLAnchorElement>(null);
160
+ const firstResourceType = resourceTypes?.[0].id ?? '';
161
+ const Title = ResourceTitle.withComponent(headingLevel);
159
162
 
160
163
  const handleClick = () => {
161
164
  if (linkRef.current) {
@@ -166,15 +169,19 @@ const BlockResource = ({
166
169
  return (
167
170
  <BlockElementWrapper onClick={handleClick} id={id}>
168
171
  <ImageWrapper>
169
- <BlockImage image={resourceImage} loading={isLoading} contentType={contentType} />
172
+ <BlockImage
173
+ image={resourceImage}
174
+ loading={isLoading}
175
+ contentType={contentTypeMapping[firstResourceType] ?? contentTypeMapping['default']}
176
+ />
170
177
  </ImageWrapper>
171
178
  <BlockInfoWrapper>
172
- <TopicAndTitleLoader loading={isLoading}>
179
+ <ResourceTypeAndTitleLoader loading={isLoading}>
173
180
  <ResourceTitleLink title={title} target={targetBlank ? '_blank' : undefined} to={link} ref={linkRef}>
174
- <ResourceTitle>{title}</ResourceTitle>
181
+ <Title>{title}</Title>
175
182
  </ResourceTitleLink>
176
- </TopicAndTitleLoader>
177
- <TopicList topics={topics} />
183
+ </ResourceTypeAndTitleLoader>
184
+ <ResourceTypeList resourceTypes={resourceTypes} />
178
185
  <BlockDescription>{description}</BlockDescription>
179
186
  <RightRow>
180
187
  {tags && <CompressedTagList tagLinkPrefix={tagLinkPrefix} tags={tags} />}
@@ -16,12 +16,13 @@ import {
16
16
  ResourceImageProps,
17
17
  ResourceTitle,
18
18
  ResourceTitleLink,
19
- TopicList,
19
+ ResourceTypeList,
20
20
  StyledContentIconWrapper,
21
21
  LoaderProps,
22
22
  } from './resourceComponents';
23
23
  import ContentLoader from '../ContentLoader';
24
24
  import ContentTypeBadge from '../ContentTypeBadge';
25
+ import { contentTypeMapping } from '../model/ContentType';
25
26
 
26
27
  const StyledResourceDescription = styled.p`
27
28
  grid-area: description;
@@ -124,13 +125,13 @@ export interface ListResourceProps {
124
125
  tagLinkPrefix?: string;
125
126
  title: string;
126
127
  resourceImage: ResourceImageProps;
127
- topics: string[];
128
+ headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
129
+ resourceTypes: { id: string; name: string }[];
128
130
  tags?: string[];
129
131
  description?: string;
130
132
  menuItems?: MenuItemProps[];
131
133
  isLoading?: boolean;
132
134
  targetBlank?: boolean;
133
- contentType: string;
134
135
  }
135
136
 
136
137
  interface ListResourceImageProps {
@@ -169,7 +170,7 @@ const ListResourceImage = ({ resourceImage, loading, type, contentType }: ListRe
169
170
  );
170
171
  };
171
172
 
172
- const TopicAndTitleLoader = ({ loading, children }: LoaderProps) => {
173
+ const ResourceTypeAndTitleLoader = ({ loading, children }: LoaderProps) => {
173
174
  if (loading) {
174
175
  return (
175
176
  <ContentLoader height={'40px'} width={'100%'} viewBox={null} preserveAspectRatio="none">
@@ -205,16 +206,18 @@ const ListResource = ({
205
206
  title,
206
207
  tags,
207
208
  resourceImage,
208
- topics,
209
+ resourceTypes,
210
+ headingLevel = 'h2',
209
211
  description,
210
212
  menuItems,
211
213
  isLoading = false,
212
214
  targetBlank,
213
- contentType,
214
215
  }: ListResourceProps) => {
215
216
  const showDescription = description !== undefined;
216
217
  const imageType = showDescription ? 'normal' : 'compact';
217
218
  const linkRef = useRef<HTMLAnchorElement>(null);
219
+ const firstContentType = resourceTypes?.[0].id ?? '';
220
+ const Title = ResourceTitle.withComponent(headingLevel);
218
221
  const handleClick = () => {
219
222
  if (linkRef.current) {
220
223
  linkRef.current.click();
@@ -228,16 +231,16 @@ const ListResource = ({
228
231
  resourceImage={resourceImage}
229
232
  loading={isLoading}
230
233
  type={imageType}
231
- contentType={contentType}
234
+ contentType={contentTypeMapping[firstContentType] ?? contentTypeMapping['default']}
232
235
  />
233
236
  </StyledImageWrapper>
234
237
  <TopicAndTitleWrapper>
235
- <TopicAndTitleLoader loading={isLoading}>
238
+ <ResourceTypeAndTitleLoader loading={isLoading}>
236
239
  <ResourceTitleLink to={link} target={targetBlank ? '_blank' : undefined} ref={linkRef}>
237
- <ResourceTitle>{title}</ResourceTitle>
240
+ <Title>{title}</Title>
238
241
  </ResourceTitleLink>
239
- <TopicList topics={topics} />
240
- </TopicAndTitleLoader>
242
+ <ResourceTypeList resourceTypes={resourceTypes} />
243
+ </ResourceTypeAndTitleLoader>
241
244
  </TopicAndTitleWrapper>
242
245
  {showDescription && <ResourceDescription description={description} loading={isLoading} />}
243
246
  <TagsandActionMenu>
@@ -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;
@@ -187,21 +186,21 @@ export const CompressedTagList = ({ tags, tagLinkPrefix }: CompressedTagListProp
187
186
  );
188
187
  };
189
188
 
190
- interface TopicListProps {
191
- topics?: string[];
189
+ interface ResourceTypeListProps {
190
+ resourceTypes?: { id: string; name: string }[];
192
191
  }
193
192
 
194
- export const TopicList = ({ topics }: TopicListProps) => {
193
+ export const ResourceTypeList = ({ resourceTypes }: ResourceTypeListProps) => {
195
194
  const { t } = useTranslation();
196
- if (!topics) return null;
195
+ if (!resourceTypes) return null;
197
196
  return (
198
- <StyledTopicList aria-label={t('navigation.topics')}>
199
- {topics.map((topic, i) => (
200
- <StyledTopicListElement key={topic}>
201
- {topic}
202
- {i !== topics.length - 1 && <StyledTopicDivider aria-hidden="true">•</StyledTopicDivider>}
203
- </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>
204
203
  ))}
205
- </StyledTopicList>
204
+ </StyledResourceTypeList>
206
205
  );
207
206
  };
@@ -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',
@@ -1047,10 +1045,10 @@ const messages = {
1047
1045
  deleteAccount: 'Delete My NDLA',
1048
1046
  welcome:
1049
1047
  'Welcome to my NDLA! You can now save your favourite resources from NDLA and organise them in folders with tags',
1050
- read: { our: 'Read our', ours: 'Read our' },
1048
+ read: { read: 'Read our', our: '.' },
1051
1049
  privacy: 'privacy statement',
1052
1050
  privacyLink: 'https://om.ndla.no/gdpr',
1053
- questions: { question: 'Any questions?', ask: 'Ask us in the chat' },
1051
+ questions: { question: 'Any questions?', ask: 'Ask NDLA' },
1054
1052
  wishToDelete: 'Do you wish to delete your account?',
1055
1053
  terms: {
1056
1054
  terms: 'Terms of use',
@@ -1069,11 +1067,11 @@ const messages = {
1069
1067
  },
1070
1068
  folderInfo: {
1071
1069
  title: 'How to organise your favourite resources in folders',
1072
- 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',
1073
1071
  },
1074
1072
  tagInfo: {
1075
1073
  title: 'How to tag your favourite resources',
1076
- 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.',
1077
1075
  },
1078
1076
  },
1079
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',
@@ -955,9 +953,9 @@ const messages = {
955
953
  loggedInAs: 'Du er pålogget som {{role}}.',
956
954
  loggedInAsButton: 'Du er pålogget som {{role}}',
957
955
  role: {
958
- employee: 'Lærer',
959
- staff: 'Ansatt',
960
- student: 'Elev',
956
+ employee: 'lærer',
957
+ staff: 'ansatt',
958
+ student: 'elev',
961
959
  },
962
960
  buttonLogIn: 'Logg inn med Feide',
963
961
  buttonLogOut: 'Logg ut',
@@ -972,7 +970,7 @@ const messages = {
972
970
  resource: {
973
971
  accessDenied: 'Vi beklager, men denne ressursen er bare for lærere innlogget med Feide.',
974
972
  },
975
- primarySchool: 'Hovedskole',
973
+ primarySchool: 'hovedskole',
976
974
  name: 'Navn',
977
975
  mail: 'E-post',
978
976
  username: 'Brukernavn',
@@ -982,7 +980,7 @@ const messages = {
982
980
  other: 'Andre grupper',
983
981
  },
984
982
  wrongUserInfoDisclaimer:
985
- '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: ',
986
984
  },
987
985
  checkOutNewFeature: 'Sjekk ut ny funksjonalitet',
988
986
  slateBlockMenu: {
@@ -1043,11 +1041,11 @@ const messages = {
1043
1041
  loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
1044
1042
  loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1045
1043
  welcome:
1046
- 'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med emneknagger.',
1047
- read: { our: 'Les vår', ours: 'Les våre' },
1048
- privacy: 'personvernerklæring her',
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',
1049
1047
  privacyLink: 'https://om.ndla.no/gdpr',
1050
- questions: { question: 'Lurer du på noe?', ask: 'Spør oss i chatten' },
1048
+ questions: { question: 'Lurer du på noe?', ask: 'Spør NDLA' },
1051
1049
  wishToDelete: 'Vil du ikke ha brukerprofil hos oss lenger?',
1052
1050
  terms: {
1053
1051
  terms: 'Vilkår for bruk',
@@ -1060,16 +1058,16 @@ const messages = {
1060
1058
  feideWrongInfo:
1061
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',
1062
1060
  storageInfo: {
1063
- title: 'Slik lagrer du dine favorittressurser fra NDLA',
1064
- 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.',
1065
1063
  },
1066
1064
  folderInfo: {
1067
- title: 'Slik organiserer du dine favorittressurser i mapper',
1068
- 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.',
1069
1067
  },
1070
1068
  tagInfo: {
1071
- title: 'Slik tagger du dine favorittressurser',
1072
- 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.',
1073
1071
  },
1074
1072
  },
1075
1073
  resource: {