@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.
- package/es/Article/ArticleByline.js +38 -7
- package/es/Breadcrumb/ActionBreadcrumb.js +5 -4
- package/es/Breadcrumb/Breadcrumb.js +12 -4
- package/es/Frontpage/FrontpageAllSubjects.js +9 -8
- package/es/Resource/BlockResource.js +45 -23
- package/es/Resource/ListResource.js +45 -25
- package/es/Resource/resourceComponents.js +42 -34
- package/es/SearchTypeResult/SearchItem.js +8 -35
- package/es/SearchTypeResult/components/ItemResourceHeader.js +5 -5
- package/es/locale/messages-en.js +8 -6
- package/es/locale/messages-nb.js +20 -18
- package/es/locale/messages-nn.js +19 -17
- package/es/locale/messages-se.js +97 -95
- package/es/locale/messages-sma.js +19 -17
- package/es/model/ContentType.js +24 -1
- package/es/model/SubjectCategories.js +1 -5
- package/es/model/index.js +3 -2
- package/es/utils/resourceTypeColor.js +44 -0
- package/lib/Article/ArticleByline.d.ts +3 -1
- package/lib/Article/ArticleByline.js +38 -7
- package/lib/Breadcrumb/ActionBreadcrumb.js +5 -4
- package/lib/Breadcrumb/Breadcrumb.js +12 -4
- package/lib/Frontpage/FrontpageAllSubjects.js +10 -8
- package/lib/Resource/BlockResource.d.ts +6 -2
- package/lib/Resource/BlockResource.js +47 -22
- package/lib/Resource/ListResource.d.ts +6 -2
- package/lib/Resource/ListResource.js +47 -24
- package/lib/Resource/resourceComponents.d.ts +11 -4
- package/lib/Resource/resourceComponents.js +47 -37
- package/lib/SearchTypeResult/SearchItem.d.ts +0 -1
- package/lib/SearchTypeResult/SearchItem.js +9 -39
- package/lib/SearchTypeResult/components/ItemResourceHeader.js +8 -8
- package/lib/locale/messages-en.d.ts +18 -23
- package/lib/locale/messages-en.js +8 -6
- package/lib/locale/messages-nb.d.ts +18 -23
- package/lib/locale/messages-nb.js +20 -18
- package/lib/locale/messages-nn.d.ts +18 -23
- package/lib/locale/messages-nn.js +19 -17
- package/lib/locale/messages-se.d.ts +18 -23
- package/lib/locale/messages-se.js +97 -95
- package/lib/locale/messages-sma.d.ts +18 -23
- package/lib/locale/messages-sma.js +19 -17
- package/lib/model/ContentType.d.ts +19 -0
- package/lib/model/ContentType.js +34 -2
- package/lib/model/SubjectCategories.d.ts +0 -3
- package/lib/model/SubjectCategories.js +3 -10
- package/lib/model/index.d.ts +12 -2
- package/lib/model/index.js +4 -3
- package/lib/utils/resourceTypeColor.d.ts +9 -0
- package/lib/utils/resourceTypeColor.js +59 -0
- package/package.json +7 -7
- package/src/Article/ArticleByline.tsx +40 -1
- package/src/Breadcrumb/ActionBreadcrumb.tsx +1 -2
- package/src/Breadcrumb/Breadcrumb.tsx +15 -6
- package/src/Frontpage/FrontpageAllSubjects.tsx +5 -2
- package/src/Resource/BlockResource.tsx +33 -15
- package/src/Resource/ListResource.tsx +41 -16
- package/src/Resource/resourceComponents.tsx +27 -16
- package/src/SearchTypeResult/SearchItem.tsx +0 -22
- package/src/SearchTypeResult/components/ItemResourceHeader.tsx +3 -1
- package/src/locale/messages-en.ts +7 -7
- package/src/locale/messages-nb.ts +19 -19
- package/src/locale/messages-nn.ts +18 -18
- package/src/locale/messages-se.ts +97 -96
- package/src/locale/messages-sma.ts +18 -18
- package/src/model/ContentType.ts +41 -0
- package/src/model/SubjectCategories.ts +0 -5
- package/src/model/index.ts +2 -1
- package/src/utils/resourceTypeColor.tsx +38 -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,
|
|
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}}',
|
|
@@ -401,6 +401,7 @@ var messages = _objectSpread(_objectSpread({
|
|
|
401
401
|
heading: 'Slik gjenbruker du innhold',
|
|
402
402
|
learnMore: 'Lær mer om åpne lisenser',
|
|
403
403
|
copyTitle: 'Kildehenvisning',
|
|
404
|
+
copy: 'Kopier',
|
|
404
405
|
hasCopiedTitle: 'Kopiert!',
|
|
405
406
|
embed: 'Bygg inn',
|
|
406
407
|
embedCopied: 'Kopierte innbyggingskode!',
|
|
@@ -918,9 +919,9 @@ var messages = _objectSpread(_objectSpread({
|
|
|
918
919
|
loggedInAs: 'Du er pålogget som {{role}}.',
|
|
919
920
|
loggedInAsButton: 'Du er pålogget som {{role}}',
|
|
920
921
|
role: {
|
|
921
|
-
employee: '
|
|
922
|
-
staff: '
|
|
923
|
-
student: '
|
|
922
|
+
employee: 'lærer',
|
|
923
|
+
staff: 'ansatt',
|
|
924
|
+
student: 'elev'
|
|
924
925
|
},
|
|
925
926
|
buttonLogIn: 'Logg inn med Feide',
|
|
926
927
|
buttonLogOut: 'Logg ut',
|
|
@@ -935,7 +936,7 @@ var messages = _objectSpread(_objectSpread({
|
|
|
935
936
|
resource: {
|
|
936
937
|
accessDenied: 'Vi beklager, men denne ressursen er bare for lærere innlogget med Feide.'
|
|
937
938
|
},
|
|
938
|
-
primarySchool: '
|
|
939
|
+
primarySchool: 'hovedskole',
|
|
939
940
|
name: 'Navn',
|
|
940
941
|
mail: 'E-post',
|
|
941
942
|
username: 'Brukernavn',
|
|
@@ -944,7 +945,7 @@ var messages = _objectSpread(_objectSpread({
|
|
|
944
945
|
teaching: 'Undervisningsgruppe',
|
|
945
946
|
other: 'Andre grupper'
|
|
946
947
|
},
|
|
947
|
-
wrongUserInfoDisclaimer: 'Dersom
|
|
948
|
+
wrongUserInfoDisclaimer: 'Dersom informasjonen er feil, må den oppdateres av vertsorganisasjon/skoleeier som brukeren tilhører. Oversikt over brukerstøtte finnes her: '
|
|
948
949
|
},
|
|
949
950
|
checkOutNewFeature: 'Sjekk ut ny funksjonalitet',
|
|
950
951
|
slateBlockMenu: {
|
|
@@ -1002,15 +1003,16 @@ var messages = _objectSpread(_objectSpread({
|
|
|
1002
1003
|
loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjenner du våre vilkår for bruk',
|
|
1003
1004
|
loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
|
|
1004
1005
|
loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
|
|
1005
|
-
welcome: 'Velkommen til Min NDLA! Nå kan du lagre dine
|
|
1006
|
+
welcome: 'Velkommen til Min NDLA! Nå kan du lagre favorittressursene dine fra NDLA og organisere dem i mapper og med emneknagger.',
|
|
1006
1007
|
read: {
|
|
1007
|
-
|
|
1008
|
-
|
|
1008
|
+
read: 'Les',
|
|
1009
|
+
our: ' vår.'
|
|
1009
1010
|
},
|
|
1010
|
-
privacy: '
|
|
1011
|
+
privacy: 'personvernerklæringa',
|
|
1012
|
+
privacyLink: 'https://om.ndla.no/gdpr',
|
|
1011
1013
|
questions: {
|
|
1012
1014
|
question: 'Lurer du på noe?',
|
|
1013
|
-
ask: 'Spør
|
|
1015
|
+
ask: 'Spør NDLA'
|
|
1014
1016
|
},
|
|
1015
1017
|
wishToDelete: 'Vil du ikke ha brukerprofil hos oss lenger?',
|
|
1016
1018
|
terms: {
|
|
@@ -1023,16 +1025,16 @@ var messages = _objectSpread(_objectSpread({
|
|
|
1023
1025
|
feide: 'Dette henter vi om deg gjennom Feide',
|
|
1024
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',
|
|
1025
1027
|
storageInfo: {
|
|
1026
|
-
title: 'Slik lagrer du dine
|
|
1027
|
-
text: 'Klikk på hjerteknappen for å lagre en ressurs. Du vil da få mulighet til å lagre ressursen i
|
|
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.'
|
|
1028
1030
|
},
|
|
1029
1031
|
folderInfo: {
|
|
1030
|
-
title: 'Slik organiserer du dine
|
|
1031
|
-
text: 'Klikk på
|
|
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.'
|
|
1032
1034
|
},
|
|
1033
1035
|
tagInfo: {
|
|
1034
|
-
title: 'Slik tagger du dine
|
|
1035
|
-
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
|
|
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.'
|
|
1036
1038
|
}
|
|
1037
1039
|
},
|
|
1038
1040
|
resource: {
|
|
@@ -14,3 +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";
|
|
34
|
+
export declare const ListOfContentTypes: string[];
|
|
35
|
+
export declare const contentTypeMapping: Record<string, string>;
|
package/lib/model/ContentType.js
CHANGED
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
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.
|
|
@@ -29,4 +33,32 @@ exports.LEARNING_PATH = LEARNING_PATH;
|
|
|
29
33
|
var TOPIC = 'topic';
|
|
30
34
|
exports.TOPIC = TOPIC;
|
|
31
35
|
var MULTIDISCIPLINARY_TOPIC = 'multidisciplinary-topic';
|
|
32
|
-
exports.MULTIDISCIPLINARY_TOPIC = MULTIDISCIPLINARY_TOPIC;
|
|
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;
|
|
61
|
+
var ListOfContentTypes = ['SUBJECT_MATERIAL', 'TASKS_AND_ACTIVITIES', 'ASSESSMENT_RESOURCES', 'SUBJECT', 'EXTERNAL_LEARNING_RESOURCES', 'SOURCE_MATERIAL', 'LEARNING_PATH', 'TOPIC', 'MULTIDISIPLINARY_TOPIC'];
|
|
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.
|
|
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';
|
|
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;
|
package/lib/model/index.d.ts
CHANGED
|
@@ -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:
|
|
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;
|
package/lib/model/index.js
CHANGED
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
|
|
10
|
-
var
|
|
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;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2022-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
|
+
export declare const resourceTypeColor: (type: string) => string;
|
|
9
|
+
export default resourceTypeColor;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = exports.resourceTypeColor = void 0;
|
|
7
|
+
|
|
8
|
+
var _core = require("@ndla/core");
|
|
9
|
+
|
|
10
|
+
var _model = _interopRequireDefault(require("../model"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Copyright (c) 2022-present, NDLA.
|
|
16
|
+
*
|
|
17
|
+
* This source code is licensed under the GPLv3 license found in the
|
|
18
|
+
* LICENSE file in the root directory of this source tree.
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
var contentTypes = _model["default"].contentTypes;
|
|
22
|
+
|
|
23
|
+
var resourceTypeColor = function resourceTypeColor(type) {
|
|
24
|
+
switch (type) {
|
|
25
|
+
case contentTypes.SUBJECT_MATERIAL:
|
|
26
|
+
return _core.colors.subjectMaterial.light;
|
|
27
|
+
|
|
28
|
+
case contentTypes.SUBJECT:
|
|
29
|
+
return _core.colors.subject.light;
|
|
30
|
+
|
|
31
|
+
case contentTypes.TOPIC:
|
|
32
|
+
return _core.colors.subject.light;
|
|
33
|
+
|
|
34
|
+
case contentTypes.TASKS_AND_ACTIVITIES:
|
|
35
|
+
return _core.colors.tasksAndActivities.light;
|
|
36
|
+
|
|
37
|
+
case contentTypes.ASSESSMENT_RESOURCES:
|
|
38
|
+
return _core.colors.assessmentResource.light;
|
|
39
|
+
|
|
40
|
+
case contentTypes.EXTERNAL_LEARNING_RESOURCES:
|
|
41
|
+
return _core.colors.externalLearningResource.light;
|
|
42
|
+
|
|
43
|
+
case contentTypes.SOURCE_MATERIAL:
|
|
44
|
+
return _core.colors.sourceMaterial.light;
|
|
45
|
+
|
|
46
|
+
case contentTypes.LEARNING_PATH:
|
|
47
|
+
return _core.colors.learningPath.light;
|
|
48
|
+
|
|
49
|
+
case contentTypes.MULTIDISCIPLINARY_TOPIC:
|
|
50
|
+
return _core.colors.learningPath.background;
|
|
51
|
+
|
|
52
|
+
default:
|
|
53
|
+
return '';
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
exports.resourceTypeColor = resourceTypeColor;
|
|
58
|
+
var _default = resourceTypeColor;
|
|
59
|
+
exports["default"] = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ndla/ui",
|
|
3
|
-
"version": "
|
|
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",
|
|
@@ -32,16 +32,16 @@
|
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ndla/article-scripts": "^3.0.2",
|
|
35
|
-
"@ndla/button": "^3.6.
|
|
35
|
+
"@ndla/button": "^3.6.1",
|
|
36
36
|
"@ndla/carousel": "^1.2.23",
|
|
37
37
|
"@ndla/core": "^2.3.5",
|
|
38
|
-
"@ndla/forms": "^3.3.
|
|
38
|
+
"@ndla/forms": "^3.3.5",
|
|
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.
|
|
43
|
-
"@ndla/notion": "^3.1.
|
|
44
|
-
"@ndla/safelink": "^2.2.
|
|
42
|
+
"@ndla/modal": "^1.6.0",
|
|
43
|
+
"@ndla/notion": "^3.1.47",
|
|
44
|
+
"@ndla/safelink": "^2.2.19",
|
|
45
45
|
"@ndla/switch": "^0.1.13",
|
|
46
46
|
"@ndla/tabs": "^1.1.22",
|
|
47
47
|
"@ndla/tooltip": "^2.2.1",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"publishConfig": {
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "f7cac264e9855369dc3061fc240ece485de041bb"
|
|
89
89
|
}
|
|
@@ -59,6 +59,8 @@ type Props = {
|
|
|
59
59
|
copyPageUrlLink?: string;
|
|
60
60
|
printUrl?: string;
|
|
61
61
|
locale?: string;
|
|
62
|
+
copyEmbedLink?: string;
|
|
63
|
+
copySourceReference?: string;
|
|
62
64
|
};
|
|
63
65
|
|
|
64
66
|
const renderContributors = (contributors: SupplierProps[] | AuthorProps[], t: TFunction) => {
|
|
@@ -91,16 +93,29 @@ const ArticleByline = ({
|
|
|
91
93
|
copyPageUrlLink,
|
|
92
94
|
printUrl,
|
|
93
95
|
locale,
|
|
96
|
+
copyEmbedLink,
|
|
97
|
+
copySourceReference,
|
|
94
98
|
}: Props) => {
|
|
95
99
|
const { t } = useTranslation();
|
|
100
|
+
|
|
96
101
|
const copyLinkHandler = () => {
|
|
97
102
|
if (copyPageUrlLink) {
|
|
98
103
|
copyTextToClipboard(copyPageUrlLink);
|
|
99
104
|
}
|
|
100
105
|
};
|
|
101
|
-
|
|
102
106
|
const licenseRights = getLicenseByAbbreviation(license, locale).rights;
|
|
103
107
|
|
|
108
|
+
const copyLicense = () => {
|
|
109
|
+
if (copySourceReference) {
|
|
110
|
+
copyTextToClipboard(copySourceReference);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
const copyEmbededLink = () => {
|
|
114
|
+
if (copyEmbedLink) {
|
|
115
|
+
copyTextToClipboard(copyEmbedLink);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
|
|
104
119
|
const showPrimaryContributors = suppliers.length > 0 || authors.length > 0;
|
|
105
120
|
const showSecondaryContributors = suppliers.length > 0 && authors.length > 0;
|
|
106
121
|
|
|
@@ -129,6 +144,18 @@ const ArticleByline = ({
|
|
|
129
144
|
)}
|
|
130
145
|
{showSecondaryContributors && <TextWrapper>{getSuppliersText(suppliers, t)}</TextWrapper>}
|
|
131
146
|
<ButtonWrapper>
|
|
147
|
+
{copySourceReference && (
|
|
148
|
+
<CopyButton
|
|
149
|
+
size="small"
|
|
150
|
+
borderShape="rounded"
|
|
151
|
+
outline
|
|
152
|
+
aria-live="assertive"
|
|
153
|
+
copyNode={t('license.hasCopiedTitle')}
|
|
154
|
+
data-copy-string={copySourceReference}
|
|
155
|
+
onClick={copyLicense}>
|
|
156
|
+
{`${t('license.copy')} ${t('license.copyTitle').toLowerCase()}`}
|
|
157
|
+
</CopyButton>
|
|
158
|
+
)}
|
|
132
159
|
{licenseBox && (
|
|
133
160
|
<Modal
|
|
134
161
|
labelledBy={buttonId}
|
|
@@ -162,6 +189,18 @@ const ArticleByline = ({
|
|
|
162
189
|
{t('article.copyPageLink')}
|
|
163
190
|
</CopyButton>
|
|
164
191
|
)}
|
|
192
|
+
{copyEmbedLink && (
|
|
193
|
+
<CopyButton
|
|
194
|
+
size="small"
|
|
195
|
+
borderShape="rounded"
|
|
196
|
+
outline
|
|
197
|
+
aria-live="assertive"
|
|
198
|
+
copyNode={t('license.hasCopiedTitle')}
|
|
199
|
+
data-copy-string={copyEmbedLink}
|
|
200
|
+
onClick={copyEmbededLink}>
|
|
201
|
+
{`${t('license.copy')} ${t('license.tabs.embedlink').toLowerCase()}`}
|
|
202
|
+
</CopyButton>
|
|
203
|
+
)}
|
|
165
204
|
{printUrl && (
|
|
166
205
|
<Button size="small" borderShape="rounded" outline onClick={() => printPage(printUrl)}>
|
|
167
206
|
{t('article.printPage')}
|
|
@@ -23,7 +23,6 @@ const StyledRightChevron = styled(ChevronRight)`
|
|
|
23
23
|
`;
|
|
24
24
|
|
|
25
25
|
const StyledSpan = styled.span`
|
|
26
|
-
color: ${colors.text.primary};
|
|
27
26
|
font-weight: ${fonts.weight.bold};
|
|
28
27
|
`;
|
|
29
28
|
|
|
@@ -54,7 +53,7 @@ const ActionBreadcrumb = ({ items, actionItems }: Props) => {
|
|
|
54
53
|
}
|
|
55
54
|
if (item.index === totalCount - 1 && actionItems.length > 0) {
|
|
56
55
|
return (
|
|
57
|
-
<StyledMenuButton menuItems={actionItems} size="small">
|
|
56
|
+
<StyledMenuButton menuItems={actionItems} alignRight size="small">
|
|
58
57
|
<StyledSpan title={item.name}>{item.name}</StyledSpan>
|
|
59
58
|
</StyledMenuButton>
|
|
60
59
|
);
|
|
@@ -67,7 +67,7 @@ const Breadcrumb = ({
|
|
|
67
67
|
el.setMaxWidth('40px');
|
|
68
68
|
}
|
|
69
69
|
});
|
|
70
|
-
}, [size]);
|
|
70
|
+
}, [size, items]);
|
|
71
71
|
|
|
72
72
|
return (
|
|
73
73
|
<BreadcrumbNav ref={containerRef} aria-label={t('breadcrumb.breadcrumb')}>
|
|
@@ -77,11 +77,20 @@ const Breadcrumb = ({
|
|
|
77
77
|
autoCollapse={autoCollapse}
|
|
78
78
|
renderItem={renderItem}
|
|
79
79
|
renderSeparator={renderSeparator}
|
|
80
|
-
ref={(element) =>
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
ref={(element) => {
|
|
81
|
+
if (
|
|
82
|
+
element === null ||
|
|
83
|
+
(!collapseFirst && index === 0) ||
|
|
84
|
+
(!collapseLast && index === items.length - 1)
|
|
85
|
+
) {
|
|
86
|
+
if (element) {
|
|
87
|
+
element.setMaxWidth('none');
|
|
88
|
+
}
|
|
89
|
+
breadcrumbItemRefs.delete(item.to);
|
|
90
|
+
} else {
|
|
91
|
+
breadcrumbItemRefs.set(item.to, element);
|
|
92
|
+
}
|
|
93
|
+
}}
|
|
85
94
|
key={typeof item.to === 'string' ? item.to : item.to.pathname}
|
|
86
95
|
totalCount={items.length}
|
|
87
96
|
item={{ ...item, index }}
|
|
@@ -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>
|
|
@@ -10,17 +10,20 @@ import styled from '@emotion/styled';
|
|
|
10
10
|
import React, { useRef } from 'react';
|
|
11
11
|
import { colors, fonts, spacing } from '@ndla/core';
|
|
12
12
|
import { MenuButton, MenuItemProps } from '@ndla/button';
|
|
13
|
+
import ContentTypeBadge from '../ContentTypeBadge';
|
|
13
14
|
import Image from '../Image';
|
|
14
15
|
import {
|
|
15
16
|
CompressedTagList,
|
|
16
17
|
ResourceImageProps,
|
|
17
18
|
ResourceTitle,
|
|
18
19
|
Row,
|
|
19
|
-
|
|
20
|
+
ResourceTypeList,
|
|
20
21
|
ResourceTitleLink,
|
|
21
22
|
LoaderProps,
|
|
23
|
+
StyledContentIconWrapper,
|
|
22
24
|
} from './resourceComponents';
|
|
23
25
|
import ContentLoader from '../ContentLoader';
|
|
26
|
+
import { contentTypeMapping } from '../model/ContentType';
|
|
24
27
|
|
|
25
28
|
interface BlockResourceProps {
|
|
26
29
|
id: string;
|
|
@@ -28,12 +31,13 @@ interface BlockResourceProps {
|
|
|
28
31
|
tagLinkPrefix?: string;
|
|
29
32
|
title: string;
|
|
30
33
|
resourceImage: ResourceImageProps;
|
|
31
|
-
topics: string[];
|
|
32
34
|
tags?: string[];
|
|
33
35
|
description?: string;
|
|
36
|
+
headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
34
37
|
menuItems?: MenuItemProps[];
|
|
35
38
|
isLoading?: boolean;
|
|
36
39
|
targetBlank?: boolean;
|
|
40
|
+
resourceTypes?: { id: string; name: string }[];
|
|
37
41
|
}
|
|
38
42
|
|
|
39
43
|
const BlockElementWrapper = styled.div`
|
|
@@ -92,22 +96,21 @@ const BlockInfoWrapper = styled.div`
|
|
|
92
96
|
const ImageWrapper = styled.div`
|
|
93
97
|
display: flex;
|
|
94
98
|
width: 100%;
|
|
99
|
+
justify-content: center;
|
|
95
100
|
overflow: hidden;
|
|
96
101
|
align-items: center;
|
|
97
|
-
|
|
98
|
-
min-width: 100%;
|
|
99
|
-
}
|
|
102
|
+
aspect-ratio: 3/4;
|
|
100
103
|
img {
|
|
101
104
|
min-width: 100%;
|
|
102
105
|
}
|
|
103
106
|
`;
|
|
104
|
-
|
|
105
107
|
interface BlockImageProps {
|
|
106
108
|
image: ResourceImageProps;
|
|
107
109
|
loading?: boolean;
|
|
110
|
+
contentType: string;
|
|
108
111
|
}
|
|
109
112
|
|
|
110
|
-
const BlockImage = ({ image, loading }: BlockImageProps) => {
|
|
113
|
+
const BlockImage = ({ image, loading, contentType }: BlockImageProps) => {
|
|
111
114
|
if (loading) {
|
|
112
115
|
return (
|
|
113
116
|
<ContentLoader height={'100%'} width={'100%'} viewBox={null} preserveAspectRatio="none">
|
|
@@ -115,10 +118,18 @@ const BlockImage = ({ image, loading }: BlockImageProps) => {
|
|
|
115
118
|
</ContentLoader>
|
|
116
119
|
);
|
|
117
120
|
}
|
|
118
|
-
|
|
121
|
+
if (image.src === '') {
|
|
122
|
+
return (
|
|
123
|
+
<StyledContentIconWrapper contentType={contentType}>
|
|
124
|
+
<ContentTypeBadge type={contentType} size="large" />
|
|
125
|
+
</StyledContentIconWrapper>
|
|
126
|
+
);
|
|
127
|
+
} else {
|
|
128
|
+
return <Image alt={image.alt} src={image.src} fallbackWidth={300} />;
|
|
129
|
+
}
|
|
119
130
|
};
|
|
120
131
|
|
|
121
|
-
const
|
|
132
|
+
const ResourceTypeAndTitleLoader = ({ children, loading }: LoaderProps) => {
|
|
122
133
|
if (loading) {
|
|
123
134
|
return (
|
|
124
135
|
<ContentLoader height={'18px'} width={'100%'} viewBox={null} preserveAspectRatio="none">
|
|
@@ -138,13 +149,16 @@ const BlockResource = ({
|
|
|
138
149
|
title,
|
|
139
150
|
tags,
|
|
140
151
|
resourceImage,
|
|
141
|
-
topics,
|
|
142
152
|
description,
|
|
143
153
|
menuItems,
|
|
144
154
|
isLoading,
|
|
155
|
+
headingLevel = 'h2',
|
|
145
156
|
targetBlank,
|
|
157
|
+
resourceTypes,
|
|
146
158
|
}: BlockResourceProps) => {
|
|
147
159
|
const linkRef = useRef<HTMLAnchorElement>(null);
|
|
160
|
+
const firstResourceType = resourceTypes?.[0].id ?? '';
|
|
161
|
+
const Title = ResourceTitle.withComponent(headingLevel);
|
|
148
162
|
|
|
149
163
|
const handleClick = () => {
|
|
150
164
|
if (linkRef.current) {
|
|
@@ -155,15 +169,19 @@ const BlockResource = ({
|
|
|
155
169
|
return (
|
|
156
170
|
<BlockElementWrapper onClick={handleClick} id={id}>
|
|
157
171
|
<ImageWrapper>
|
|
158
|
-
<BlockImage
|
|
172
|
+
<BlockImage
|
|
173
|
+
image={resourceImage}
|
|
174
|
+
loading={isLoading}
|
|
175
|
+
contentType={contentTypeMapping[firstResourceType] ?? contentTypeMapping['default']}
|
|
176
|
+
/>
|
|
159
177
|
</ImageWrapper>
|
|
160
178
|
<BlockInfoWrapper>
|
|
161
|
-
<
|
|
179
|
+
<ResourceTypeAndTitleLoader loading={isLoading}>
|
|
162
180
|
<ResourceTitleLink title={title} target={targetBlank ? '_blank' : undefined} to={link} ref={linkRef}>
|
|
163
|
-
<
|
|
181
|
+
<Title>{title}</Title>
|
|
164
182
|
</ResourceTitleLink>
|
|
165
|
-
</
|
|
166
|
-
<
|
|
183
|
+
</ResourceTypeAndTitleLoader>
|
|
184
|
+
<ResourceTypeList resourceTypes={resourceTypes} />
|
|
167
185
|
<BlockDescription>{description}</BlockDescription>
|
|
168
186
|
<RightRow>
|
|
169
187
|
{tags && <CompressedTagList tagLinkPrefix={tagLinkPrefix} tags={tags} />}
|