@ndla/ui 24.0.0 → 24.2.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/ArticleFavoritesButton.js +2 -2
- package/es/InfoBox/InfoBox.js +2 -2
- package/es/MyNdla/Resource/FolderInput.js +19 -6
- package/es/NoContentBox/NoContentBox.js +1 -6
- package/es/Resource/BlockResource.js +7 -6
- package/es/Resource/ListResource.js +8 -7
- package/es/TagSelector/SuggestionInput.js +9 -19
- package/es/TreeStructure/FolderItems.js +3 -3
- package/es/TreeStructure/FolderNameInput.js +33 -14
- package/es/TreeStructure/TreeStructure.js +3 -2
- package/es/all.css +1 -1
- package/es/locale/messages-en.js +13 -6
- package/es/locale/messages-nb.js +11 -4
- package/es/locale/messages-nn.js +13 -6
- package/es/locale/messages-se.js +31 -24
- package/es/locale/messages-sma.js +45 -38
- package/lib/Article/ArticleFavoritesButton.js +2 -2
- package/lib/InfoBox/InfoBox.js +6 -6
- package/lib/MediaList/MediaList.d.ts +1 -1
- package/lib/MyNdla/Resource/FolderInput.js +18 -5
- package/lib/NoContentBox/NoContentBox.js +1 -8
- package/lib/Resource/BlockResource.js +7 -6
- package/lib/Resource/ListResource.js +8 -7
- package/lib/TagSelector/SuggestionInput.js +9 -19
- package/lib/TreeStructure/FolderItems.js +3 -3
- package/lib/TreeStructure/FolderNameInput.js +35 -14
- package/lib/TreeStructure/TreeStructure.js +3 -2
- package/lib/TreeStructure/types.d.ts +1 -1
- package/lib/all.css +1 -1
- package/lib/locale/messages-en.d.ts +8 -1
- package/lib/locale/messages-en.js +13 -6
- package/lib/locale/messages-nb.d.ts +7 -0
- package/lib/locale/messages-nb.js +11 -4
- package/lib/locale/messages-nn.d.ts +8 -1
- package/lib/locale/messages-nn.js +13 -6
- package/lib/locale/messages-se.d.ts +8 -1
- package/lib/locale/messages-se.js +31 -24
- package/lib/locale/messages-sma.d.ts +13 -6
- package/lib/locale/messages-sma.js +45 -38
- package/package.json +9 -9
- package/src/Article/ArticleFavoritesButton.tsx +2 -2
- package/src/InfoBox/InfoBox.tsx +1 -1
- package/src/MediaList/MediaList.tsx +1 -1
- package/src/MyNdla/Resource/FolderInput.tsx +18 -3
- package/src/NoContentBox/NoContentBox.tsx +2 -7
- package/src/Resource/BlockResource.tsx +1 -1
- package/src/Resource/ListResource.tsx +3 -1
- package/src/SectionHeading/SectionHeading.tsx +1 -0
- package/src/TagSelector/SuggestionInput.tsx +0 -9
- package/src/TreeStructure/FolderItems.tsx +1 -1
- package/src/TreeStructure/FolderNameInput.tsx +34 -9
- package/src/TreeStructure/TreeStructure.tsx +1 -0
- package/src/TreeStructure/types.ts +1 -1
- package/src/locale/messages-en.ts +11 -4
- package/src/locale/messages-nb.ts +10 -3
- package/src/locale/messages-nn.ts +11 -4
- package/src/locale/messages-se.ts +30 -23
- package/src/locale/messages-sma.ts +42 -35
- package/src/main.scss +0 -1
- package/src/NoContentBox/component.no-content-box.scss +0 -17
|
@@ -424,11 +424,12 @@ var messages = _objectSpread(_objectSpread({
|
|
|
424
424
|
files: 'Filer',
|
|
425
425
|
embedlink: 'Innbyggingslenke',
|
|
426
426
|
concept: 'Forklaringer',
|
|
427
|
+
podcast: 'Podkast',
|
|
427
428
|
other: 'Annet innhold'
|
|
428
429
|
},
|
|
429
430
|
embedlink: {
|
|
430
431
|
heading: 'Slik viser du artikkelen i annet innhold',
|
|
431
|
-
description: 'Denne lenken viser artikkelen uten kontekst(meny og bunntekst)',
|
|
432
|
+
description: 'Denne lenken viser artikkelen uten kontekst (meny og bunntekst)',
|
|
432
433
|
copyTitle: 'Kopier lenke',
|
|
433
434
|
hasCopiedTitle: 'Lenke kopiert'
|
|
434
435
|
},
|
|
@@ -460,6 +461,11 @@ var messages = _objectSpread(_objectSpread({
|
|
|
460
461
|
description: 'Husk å kopiere teksten som skal legges ved lydfilen der du bruker den.',
|
|
461
462
|
rules: 'Regler for bruk av lydfilen:'
|
|
462
463
|
},
|
|
464
|
+
podcast: {
|
|
465
|
+
heading: 'Slik gjenbruker du podkaster',
|
|
466
|
+
description: 'Husk å kopiere teksten som skal legges ved podkasten der du bruker den.',
|
|
467
|
+
rules: 'Regler for bruk av podkasten:'
|
|
468
|
+
},
|
|
463
469
|
video: {
|
|
464
470
|
heading: 'Slik gjenbruker du videoer',
|
|
465
471
|
description: 'Husk å kopiere teksten som skal legges ved videoen der du bruker den.',
|
|
@@ -481,16 +487,16 @@ var messages = _objectSpread(_objectSpread({
|
|
|
481
487
|
rules: 'Regler for bruk av H5P:'
|
|
482
488
|
},
|
|
483
489
|
concept: {
|
|
484
|
-
embedlink: {
|
|
485
|
-
heading: 'Slik viser du forklaringa i anna innhald',
|
|
486
|
-
description: 'Denne lenka viser forklaringa utan kontekst (meny og botntekst)',
|
|
487
|
-
copyTitle: 'Kopier innbyggingslenke',
|
|
488
|
-
hasCopiedTitle: 'Innbyggingslenke kopiert'
|
|
489
|
-
},
|
|
490
490
|
heading: 'Slik gjenbruker du forklaringer',
|
|
491
491
|
description: 'Du finner retningslinjene for bruk av innholdet i forklaring-elementet',
|
|
492
492
|
rules: 'Regler for bruk av forklaring:',
|
|
493
|
-
title: 'Tittel'
|
|
493
|
+
title: 'Tittel',
|
|
494
|
+
embedlink: {
|
|
495
|
+
heading: 'Slik viser du forklaringen i annet innhold',
|
|
496
|
+
description: 'Denne lenken viser forklaringen uten kontekst (meny og bunntekst)',
|
|
497
|
+
copyTitle: 'Kopier innbyggingslenke',
|
|
498
|
+
hasCopiedTitle: 'Innbyggingslenke kopiert'
|
|
499
|
+
}
|
|
494
500
|
},
|
|
495
501
|
files: {
|
|
496
502
|
heading: 'Slik gjenbruker du filer',
|
|
@@ -501,10 +507,10 @@ var messages = _objectSpread(_objectSpread({
|
|
|
501
507
|
}
|
|
502
508
|
},
|
|
503
509
|
title: 'Tittel',
|
|
504
|
-
originator: '
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
510
|
+
originator: 'Opphaver',
|
|
511
|
+
published: 'Publiseringsdato',
|
|
512
|
+
rightsholder: 'Rettighetshaver',
|
|
513
|
+
source: 'Kilde'
|
|
508
514
|
},
|
|
509
515
|
errorMessage: {
|
|
510
516
|
title: 'Ops, noe gikk galt',
|
|
@@ -773,12 +779,12 @@ var messages = _objectSpread(_objectSpread({
|
|
|
773
779
|
content: 'Ressursen',
|
|
774
780
|
text: 'er hentet fra',
|
|
775
781
|
concept: {
|
|
776
|
-
content: '
|
|
777
|
-
text: 'er
|
|
782
|
+
content: 'Forklaringen',
|
|
783
|
+
text: 'er utarbeidet av'
|
|
778
784
|
},
|
|
779
785
|
listing: {
|
|
780
|
-
content: '
|
|
781
|
-
text: 'er
|
|
786
|
+
content: 'Listen',
|
|
787
|
+
text: 'er utarbeidet av'
|
|
782
788
|
}
|
|
783
789
|
},
|
|
784
790
|
fagfornyelse: {
|
|
@@ -829,24 +835,24 @@ var messages = _objectSpread(_objectSpread({
|
|
|
829
835
|
open: 'Åpne meny',
|
|
830
836
|
close: 'Lukk meny'
|
|
831
837
|
},
|
|
832
|
-
cancel: 'Avbryt',
|
|
833
838
|
close: 'Lukk',
|
|
834
839
|
title: 'Tittel',
|
|
840
|
+
cancel: 'Avbryt',
|
|
835
841
|
save: 'Lagre',
|
|
836
842
|
image: {
|
|
837
843
|
altText: 'Alt-tekst',
|
|
838
|
-
caption: '
|
|
844
|
+
caption: 'Bildetekst',
|
|
839
845
|
type: 'Filtype',
|
|
840
|
-
width: '
|
|
841
|
-
height: '
|
|
846
|
+
width: 'Bredde',
|
|
847
|
+
height: 'Høyde',
|
|
842
848
|
size: 'Størrelse (bytes)',
|
|
843
849
|
modelReleased: {
|
|
844
850
|
label: 'Modellklarert',
|
|
845
851
|
yes: 'Ja',
|
|
846
852
|
no: 'Nei',
|
|
847
|
-
'not-applicable': '
|
|
848
|
-
'not-set': '
|
|
849
|
-
description: 'Om bildet er modellklarert eller
|
|
853
|
+
'not-applicable': 'Ikke relevant',
|
|
854
|
+
'not-set': 'Ikke valgt',
|
|
855
|
+
description: 'Om bildet er modellklarert eller ikke:'
|
|
850
856
|
},
|
|
851
857
|
download: 'Last ned bildet',
|
|
852
858
|
reuse: 'Bruk bildet',
|
|
@@ -936,10 +942,10 @@ var messages = _objectSpread(_objectSpread({
|
|
|
936
942
|
resource: {
|
|
937
943
|
accessDenied: 'Vi beklager, men denne ressursen er bare for lærere innlogget med Feide.'
|
|
938
944
|
},
|
|
939
|
-
primarySchool: '
|
|
940
|
-
name: '
|
|
945
|
+
primarySchool: 'Hovedskole',
|
|
946
|
+
name: 'Navn',
|
|
941
947
|
mail: 'E-post',
|
|
942
|
-
username: '
|
|
948
|
+
username: 'Brukernavn',
|
|
943
949
|
groupTypes: {
|
|
944
950
|
basic: 'Basisgruppe',
|
|
945
951
|
teaching: 'Undervisningsgruppe',
|
|
@@ -966,7 +972,7 @@ var messages = _objectSpread(_objectSpread({
|
|
|
966
972
|
"delete": 'Slett',
|
|
967
973
|
edit: 'Rediger',
|
|
968
974
|
missingName: 'Mappenavn er påkrevd',
|
|
969
|
-
folderDeleted: '"{{folderName}}" er
|
|
975
|
+
folderDeleted: '"{{folderName}}" er slettet'
|
|
970
976
|
},
|
|
971
977
|
tags: '{{count}} tag',
|
|
972
978
|
tags_plural: '{{count}} tags',
|
|
@@ -985,15 +991,15 @@ var messages = _objectSpread(_objectSpread({
|
|
|
985
991
|
more: 'Flere valg',
|
|
986
992
|
listView: 'Listevisning',
|
|
987
993
|
detailView: 'Detaljrik listevisning',
|
|
988
|
-
shortView: '
|
|
994
|
+
shortView: 'Kortvisning',
|
|
989
995
|
myPage: {
|
|
990
996
|
confirmDeleteAccount: 'Er du sikker på at du vil slette kontoen?',
|
|
991
997
|
confirmDeleteAccountButton: 'Slett konto',
|
|
992
998
|
myPage: 'Min side',
|
|
993
999
|
deleteAccount: 'Slett Min NDLA',
|
|
994
1000
|
logout: 'Logg ut av Min NDLA',
|
|
995
|
-
loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på
|
|
996
|
-
loginResourcePitch: 'Ønsker du å favorittmerke denne
|
|
1001
|
+
loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjenner du våre vilkår for bruk',
|
|
1002
|
+
loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
|
|
997
1003
|
loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
|
|
998
1004
|
welcome: 'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
|
|
999
1005
|
read: {
|
|
@@ -1016,7 +1022,7 @@ var messages = _objectSpread(_objectSpread({
|
|
|
1016
1022
|
feide: 'Dette henter vi om deg fra Feide',
|
|
1017
1023
|
storageInfo: {
|
|
1018
1024
|
title: 'Slik lagrer du dine favorittressurser fra NDLA',
|
|
1019
|
-
text: 'Når du ønsker å lagre en ressurs, kan du gjøre dette ved å klikke på
|
|
1025
|
+
text: 'Når du ønsker å lagre en ressurs, kan du gjøre dette ved å klikke på hjerteknappen der den er tilgjengelig. Du vil da få mulighet til å lagre ressursen i en mappe.'
|
|
1020
1026
|
},
|
|
1021
1027
|
folderInfo: {
|
|
1022
1028
|
title: 'Slik organiserer du dine favorittressurser i mapper',
|
|
@@ -1031,16 +1037,17 @@ var messages = _objectSpread(_objectSpread({
|
|
|
1031
1037
|
add: 'Legg til mappe/tag',
|
|
1032
1038
|
remove: 'Fjern',
|
|
1033
1039
|
removeTitle: 'Fjern ressurs',
|
|
1034
|
-
confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen
|
|
1040
|
+
confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen fra denne mappen?',
|
|
1035
1041
|
copyLink: 'Kopier lenke til siden',
|
|
1036
|
-
linkCopied: 'Kopiert til
|
|
1042
|
+
linkCopied: 'Kopiert til utklippstavle',
|
|
1037
1043
|
addToMyNdla: 'Legg i Min NDLA',
|
|
1038
1044
|
addedToMyNdla: 'Lagt i Min NDLA',
|
|
1039
|
-
addedToFolder: 'Ressurs er lagt i
|
|
1045
|
+
addedToFolder: 'Ressurs er lagt i ',
|
|
1040
1046
|
removedFromFolder: 'Fjernet fra "{{folderName}}"',
|
|
1041
1047
|
titleUpdated: 'Tittel oppdatert',
|
|
1042
1048
|
tagsUpdated: 'Tags oppdatert',
|
|
1043
|
-
show: 'Vis'
|
|
1049
|
+
show: 'Vis',
|
|
1050
|
+
save: 'Lagre ressurs'
|
|
1044
1051
|
}
|
|
1045
1052
|
},
|
|
1046
1053
|
snackbar: {
|
|
@@ -1049,12 +1056,12 @@ var messages = _objectSpread(_objectSpread({
|
|
|
1049
1056
|
labels: {
|
|
1050
1057
|
category: 'Kategori',
|
|
1051
1058
|
subject: 'Fag',
|
|
1052
|
-
other: '
|
|
1059
|
+
other: 'Annet'
|
|
1053
1060
|
},
|
|
1054
1061
|
listingPage: {
|
|
1055
1062
|
or: 'eller',
|
|
1056
|
-
noFilters: 'Har
|
|
1057
|
-
loadMore: 'Last
|
|
1063
|
+
noFilters: 'Har ingenting å filtrere',
|
|
1064
|
+
loadMore: 'Last mer'
|
|
1058
1065
|
},
|
|
1059
1066
|
siteNav: {
|
|
1060
1067
|
search: 'Søk',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ndla/ui",
|
|
3
|
-
"version": "24.
|
|
3
|
+
"version": "24.2.0",
|
|
4
4
|
"description": "UI component library for NDLA.",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -32,20 +32,20 @@
|
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@ndla/article-scripts": "^3.0.1",
|
|
35
|
-
"@ndla/button": "^3.3.
|
|
35
|
+
"@ndla/button": "^3.3.2",
|
|
36
36
|
"@ndla/carousel": "^1.2.16",
|
|
37
37
|
"@ndla/core": "^2.3.4",
|
|
38
|
-
"@ndla/forms": "^3.1.
|
|
38
|
+
"@ndla/forms": "^3.1.5",
|
|
39
39
|
"@ndla/hooks": "^1.1.5",
|
|
40
40
|
"@ndla/icons": "^1.11.4",
|
|
41
|
-
"@ndla/licenses": "^5.0.
|
|
42
|
-
"@ndla/modal": "^1.
|
|
43
|
-
"@ndla/notion": "^3.1.
|
|
44
|
-
"@ndla/safelink": "^2.2.
|
|
41
|
+
"@ndla/licenses": "^5.0.9",
|
|
42
|
+
"@ndla/modal": "^1.3.0",
|
|
43
|
+
"@ndla/notion": "^3.1.33",
|
|
44
|
+
"@ndla/safelink": "^2.2.8",
|
|
45
45
|
"@ndla/switch": "^0.1.11",
|
|
46
46
|
"@ndla/tabs": "^1.1.15",
|
|
47
47
|
"@ndla/tooltip": "^2.2.0",
|
|
48
|
-
"@ndla/types-learningpath-api": "^0.0.
|
|
48
|
+
"@ndla/types-learningpath-api": "^0.0.13",
|
|
49
49
|
"@ndla/util": "^3.0.1",
|
|
50
50
|
"@reach/menu-button": "^0.16.2",
|
|
51
51
|
"@reach/slider": "^0.16.0",
|
|
@@ -85,5 +85,5 @@
|
|
|
85
85
|
"publishConfig": {
|
|
86
86
|
"access": "public"
|
|
87
87
|
},
|
|
88
|
-
"gitHead": "
|
|
88
|
+
"gitHead": "190f0f17e8012e9fd1563837091b5376e9026476"
|
|
89
89
|
}
|
|
@@ -25,8 +25,8 @@ export const ArticleFavoritesButton = ({ isFavorite, onToggleAddToFavorites, art
|
|
|
25
25
|
return (
|
|
26
26
|
<Tooltip tooltip={isFavorite ? addToFavoritesLabel : removeFromFavoritesLabel}>
|
|
27
27
|
<IconButtonDualStates
|
|
28
|
-
ariaLabelActive={t('myNdla.
|
|
29
|
-
ariaLabelInActive={t('myNdla.
|
|
28
|
+
ariaLabelActive={t('myNdla.alreadyFavourited')}
|
|
29
|
+
ariaLabelInActive={t('myNdla.addToFavourites')}
|
|
30
30
|
activeIcon={<Heart />}
|
|
31
31
|
inactiveIcon={<HeartOutline />}
|
|
32
32
|
active={isFavorite}
|
package/src/InfoBox/InfoBox.tsx
CHANGED
|
@@ -64,7 +64,7 @@ interface MediaListItemBodyProps {
|
|
|
64
64
|
license: string;
|
|
65
65
|
locale: string;
|
|
66
66
|
resourceUrl?: string;
|
|
67
|
-
resourceType?: 'video' | 'image' | 'audio' | 'text' | 'h5p';
|
|
67
|
+
resourceType?: 'video' | 'image' | 'audio' | 'text' | 'h5p' | 'podcast';
|
|
68
68
|
messages?: {
|
|
69
69
|
modelPremission?: string;
|
|
70
70
|
};
|
|
@@ -15,6 +15,7 @@ import { useTranslation } from 'react-i18next';
|
|
|
15
15
|
import { colors, spacing } from '@ndla/core';
|
|
16
16
|
import { Input } from '@ndla/forms';
|
|
17
17
|
import { css } from '@emotion/core';
|
|
18
|
+
import { Done } from '@ndla/icons/editor';
|
|
18
19
|
|
|
19
20
|
// Source: https://kovart.github.io/dashed-border-generator/
|
|
20
21
|
const borderStyle = `url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='${encodeURIComponent(
|
|
@@ -40,6 +41,9 @@ const inputWrapperStyle = css`
|
|
|
40
41
|
|
|
41
42
|
const StyledInput = styled(Input)`
|
|
42
43
|
&& {
|
|
44
|
+
flex-grow: 1;
|
|
45
|
+
flex-basis: 0;
|
|
46
|
+
min-width: 0;
|
|
43
47
|
line-height: 1.75em;
|
|
44
48
|
color: ${colors.brand.primary};
|
|
45
49
|
::selection {
|
|
@@ -48,6 +52,12 @@ const StyledInput = styled(Input)`
|
|
|
48
52
|
}
|
|
49
53
|
`;
|
|
50
54
|
|
|
55
|
+
const Row = styled.div`
|
|
56
|
+
display: flex;
|
|
57
|
+
gap: ${spacing.xsmall};
|
|
58
|
+
padding-right: ${spacing.small};
|
|
59
|
+
`;
|
|
60
|
+
|
|
51
61
|
interface Props {
|
|
52
62
|
onAddFolder: (name: string) => void;
|
|
53
63
|
onClose: () => void;
|
|
@@ -90,9 +100,14 @@ const FolderInput = ({ onAddFolder, onClose, autoSelect }: Props) => {
|
|
|
90
100
|
</StyledFolderIcon>
|
|
91
101
|
}
|
|
92
102
|
iconRight={
|
|
93
|
-
<
|
|
94
|
-
<
|
|
95
|
-
|
|
103
|
+
<Row>
|
|
104
|
+
<IconButton aria-label={t('close')} size="small" ghostPill onClick={onClose}>
|
|
105
|
+
<Cross />
|
|
106
|
+
</IconButton>
|
|
107
|
+
<IconButton aria-label={t('save')} size="small" ghostPill onClick={() => onAddFolder(input)}>
|
|
108
|
+
<Done />
|
|
109
|
+
</IconButton>
|
|
110
|
+
</Row>
|
|
96
111
|
}
|
|
97
112
|
/>
|
|
98
113
|
);
|
|
@@ -7,21 +7,16 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import React from 'react';
|
|
10
|
-
import BEMHelper from 'react-bem-helper';
|
|
11
10
|
import Button from '@ndla/button';
|
|
12
11
|
|
|
13
|
-
const classes = new BEMHelper({
|
|
14
|
-
name: 'topic-resource',
|
|
15
|
-
prefix: 'c-',
|
|
16
|
-
});
|
|
17
|
-
|
|
18
12
|
interface Props {
|
|
19
13
|
onClick?: () => void;
|
|
20
14
|
buttonText?: string;
|
|
21
15
|
text: string;
|
|
22
16
|
}
|
|
17
|
+
|
|
23
18
|
export const NoContentBox = ({ buttonText, text, onClick }: Props) => (
|
|
24
|
-
<div
|
|
19
|
+
<div>
|
|
25
20
|
<span>
|
|
26
21
|
<div>
|
|
27
22
|
<p>{text}</p>
|
|
@@ -94,7 +94,7 @@ const BlockImage = ({ image, loading }: BlockImageProps) => {
|
|
|
94
94
|
</ContentLoader>
|
|
95
95
|
);
|
|
96
96
|
}
|
|
97
|
-
return <Image alt={image.alt} src={image.src} />;
|
|
97
|
+
return <Image alt={image.alt} src={image.src} fallbackWidth={300} />;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
100
|
interface BlockTitleProps {
|
|
@@ -127,7 +127,9 @@ interface ListResourceImageProps {
|
|
|
127
127
|
|
|
128
128
|
const ListResourceImage = ({ resourceImage, loading, type }: ListResourceImageProps) => {
|
|
129
129
|
if (!loading) {
|
|
130
|
-
return
|
|
130
|
+
return (
|
|
131
|
+
<StyledImage alt={resourceImage.alt} src={resourceImage.src} fallbackWidth={type === 'compact' ? 56 : 136} />
|
|
132
|
+
);
|
|
131
133
|
}
|
|
132
134
|
return (
|
|
133
135
|
<ContentLoader height={'100%'} width={'100%'} viewBox={null} preserveAspectRatio="none">
|
|
@@ -9,6 +9,7 @@ interface Props {
|
|
|
9
9
|
large?: boolean;
|
|
10
10
|
className?: string;
|
|
11
11
|
}
|
|
12
|
+
|
|
12
13
|
const SectionHeading = ({ children, large = false, className }: Props) => {
|
|
13
14
|
const Wrapper: ElementType = large ? 'h1' : 'h2';
|
|
14
15
|
return <Wrapper {...classes('', { large: !!large }, className)}>{children}</Wrapper>;
|
|
@@ -128,7 +128,6 @@ const SuggestionInput = ({
|
|
|
128
128
|
const { t } = useTranslation();
|
|
129
129
|
const [currentHighlightedIndex, setCurrentHighlightedIndex] = useState(0);
|
|
130
130
|
const [hasFocus, setHasFocus] = useState(false);
|
|
131
|
-
const initalRender = useRef(true);
|
|
132
131
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
133
132
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
134
133
|
const suggestionIdRef = useRef<string>(uuid());
|
|
@@ -138,14 +137,6 @@ const SuggestionInput = ({
|
|
|
138
137
|
setCurrentHighlightedIndex(0);
|
|
139
138
|
}, [suggestions]);
|
|
140
139
|
|
|
141
|
-
useEffect(() => {
|
|
142
|
-
if (!initalRender.current) {
|
|
143
|
-
inputRef.current?.focus();
|
|
144
|
-
} else {
|
|
145
|
-
initalRender.current = false;
|
|
146
|
-
}
|
|
147
|
-
}, [addedTags]);
|
|
148
|
-
|
|
149
140
|
useEffect(() => {
|
|
150
141
|
const selectedSuggestionElement = document
|
|
151
142
|
.getElementById(suggestionIdRef.current)
|
|
@@ -22,7 +22,7 @@ const StyledUL = styled.ul<{ firstLevel?: boolean }>`
|
|
|
22
22
|
list-style: none;
|
|
23
23
|
margin: 0;
|
|
24
24
|
padding: 0;
|
|
25
|
-
margin-left: ${({ firstLevel }) => (firstLevel ? `-${spacing.xsmall}` : spacing.
|
|
25
|
+
margin-left: ${({ firstLevel }) => (firstLevel ? `-${spacing.xsmall}` : spacing.small)};
|
|
26
26
|
`;
|
|
27
27
|
|
|
28
28
|
const StyledLI = styled.li`
|
|
@@ -14,6 +14,9 @@ import { spacing, colors, misc, animations } from '@ndla/core';
|
|
|
14
14
|
import { useTranslation } from 'react-i18next';
|
|
15
15
|
import { isMobile } from 'react-device-detect';
|
|
16
16
|
import { Spinner } from '@ndla/icons';
|
|
17
|
+
import { IconButton } from '@ndla/button';
|
|
18
|
+
import { Cross } from '@ndla/icons/action';
|
|
19
|
+
import { Done } from '@ndla/icons/editor';
|
|
17
20
|
|
|
18
21
|
const ArrowRight = styled(ArrowDropDownRaw)`
|
|
19
22
|
color: ${colors.text.primary};
|
|
@@ -29,15 +32,19 @@ const NewFolderWrapper = styled.div`
|
|
|
29
32
|
}
|
|
30
33
|
`;
|
|
31
34
|
|
|
35
|
+
const Row = styled.div`
|
|
36
|
+
display: flex;
|
|
37
|
+
gap: ${spacing.xxsmall};
|
|
38
|
+
padding-right: ${spacing.xsmall};
|
|
39
|
+
`;
|
|
40
|
+
|
|
32
41
|
const InputWrapper = styled.div<{ loading?: boolean }>`
|
|
33
|
-
margin: ${spacing.xxsmall} ${spacing.small} ${spacing.xxsmall} 0;
|
|
34
42
|
display: flex;
|
|
43
|
+
margin: ${spacing.xxsmall} 0;
|
|
35
44
|
align-items: center;
|
|
36
45
|
border: 1px solid ${({ loading }) => (loading ? colors.brand.lighter : colors.brand.primary)};
|
|
37
46
|
border-style: dashed;
|
|
38
47
|
border-radius: ${misc.borderRadius};
|
|
39
|
-
padding-right: ${spacing.normal};
|
|
40
|
-
padding-left: ${spacing.xsmall};
|
|
41
48
|
color: ${colors.brand.primary};
|
|
42
49
|
`;
|
|
43
50
|
|
|
@@ -45,8 +52,7 @@ const StyledInput = styled.input`
|
|
|
45
52
|
flex-grow: 1;
|
|
46
53
|
border: 0;
|
|
47
54
|
outline: none;
|
|
48
|
-
|
|
49
|
-
padding-left: ${spacing.xsmall};
|
|
55
|
+
min-width: 0;
|
|
50
56
|
background: transparent;
|
|
51
57
|
color: ${colors.text.primary};
|
|
52
58
|
scroll-margin-top: 100px;
|
|
@@ -74,17 +80,19 @@ const FolderNameInput = ({ onSaveNewFolder, parentId, onCancelNewFolder, loading
|
|
|
74
80
|
return (
|
|
75
81
|
<NewFolderWrapper>
|
|
76
82
|
<InputWrapper loading={loading}>
|
|
77
|
-
<
|
|
78
|
-
|
|
83
|
+
<Row>
|
|
84
|
+
<ArrowRight />
|
|
85
|
+
<FolderOutlined />
|
|
86
|
+
</Row>
|
|
79
87
|
<StyledInput
|
|
80
88
|
ref={inputRef}
|
|
81
89
|
autoFocus
|
|
82
90
|
placeholder={t('treeStructure.newFolder.placeholder')}
|
|
83
91
|
disabled={loading}
|
|
84
92
|
value={name}
|
|
85
|
-
onBlur={() => onCancelNewFolder()}
|
|
86
93
|
onKeyDown={(e: KeyboardEvent<HTMLInputElement>) => {
|
|
87
94
|
if (e.key === 'Escape') {
|
|
95
|
+
e.preventDefault();
|
|
88
96
|
onCancelNewFolder();
|
|
89
97
|
} else if (e.key === 'Enter' || e.key === 'Tab') {
|
|
90
98
|
e.preventDefault();
|
|
@@ -93,7 +101,24 @@ const FolderNameInput = ({ onSaveNewFolder, parentId, onCancelNewFolder, loading
|
|
|
93
101
|
}}
|
|
94
102
|
onChange={(e: ChangeEvent<HTMLInputElement>) => setName(e.target.value)}
|
|
95
103
|
/>
|
|
96
|
-
|
|
104
|
+
<Row>
|
|
105
|
+
{!loading ? (
|
|
106
|
+
<>
|
|
107
|
+
<IconButton aria-label={t('close')} size="xsmall" ghostPill onClick={onCancelNewFolder}>
|
|
108
|
+
<Cross />
|
|
109
|
+
</IconButton>
|
|
110
|
+
<IconButton
|
|
111
|
+
aria-label={t('save')}
|
|
112
|
+
size="xsmall"
|
|
113
|
+
ghostPill
|
|
114
|
+
onClick={() => onSaveNewFolder(name, parentId)}>
|
|
115
|
+
<Done />
|
|
116
|
+
</IconButton>
|
|
117
|
+
</>
|
|
118
|
+
) : (
|
|
119
|
+
<Spinner size="small" margin="0" />
|
|
120
|
+
)}
|
|
121
|
+
</Row>
|
|
97
122
|
</InputWrapper>
|
|
98
123
|
</NewFolderWrapper>
|
|
99
124
|
);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import { MouseEvent, ReactNode } from 'react';
|
|
10
10
|
import { IFolder, IResource } from '@ndla/types-learningpath-api';
|
|
11
|
-
import { MenuItemProps } from '@ndla/button
|
|
11
|
+
import { MenuItemProps } from '@ndla/button';
|
|
12
12
|
|
|
13
13
|
export interface FolderType extends IFolder {
|
|
14
14
|
icon?: ReactNode;
|
|
@@ -441,8 +441,9 @@ const messages = {
|
|
|
441
441
|
h5p: 'H5P',
|
|
442
442
|
files: 'Files',
|
|
443
443
|
embedlink: 'Embedded link',
|
|
444
|
-
other: 'Other content',
|
|
445
444
|
concept: 'Concepts',
|
|
445
|
+
podcast: 'Podcast',
|
|
446
|
+
other: 'Other content',
|
|
446
447
|
},
|
|
447
448
|
embedlink: {
|
|
448
449
|
heading: 'How to show the article in other content',
|
|
@@ -478,6 +479,11 @@ const messages = {
|
|
|
478
479
|
description: 'Remember to copy the text to be attached to the audio where you use it.',
|
|
479
480
|
rules: 'Rules for use of audio file:',
|
|
480
481
|
},
|
|
482
|
+
podcast: {
|
|
483
|
+
heading: 'How to reuse podcasts',
|
|
484
|
+
description: 'Remember to copy the text to be attached to the podcast where you use it.',
|
|
485
|
+
rules: 'Rules for use of podcast:',
|
|
486
|
+
},
|
|
481
487
|
video: {
|
|
482
488
|
heading: 'How to reuse videos',
|
|
483
489
|
description: 'Remember to copy the text to be attached to the video where you use it.',
|
|
@@ -1023,7 +1029,7 @@ const messages = {
|
|
|
1023
1029
|
more: 'More options',
|
|
1024
1030
|
listView: 'List view',
|
|
1025
1031
|
detailView: 'Detailed listview',
|
|
1026
|
-
shortView: '
|
|
1032
|
+
shortView: 'Card view',
|
|
1027
1033
|
myPage: {
|
|
1028
1034
|
confirmDeleteAccount: 'Are you sure you want to delete your account?',
|
|
1029
1035
|
confirmDeleteAccountButton: 'Delete account',
|
|
@@ -1050,7 +1056,7 @@ const messages = {
|
|
|
1050
1056
|
|
|
1051
1057
|
storageInfo: {
|
|
1052
1058
|
title: 'How to save your favourite resources from NDLA',
|
|
1053
|
-
text: 'When you wish to save a resource, you can do so by clicking the heart
|
|
1059
|
+
text: 'When you wish to save a resource, you can do so by clicking the heart button. You will then get an option to store the resource in a folder',
|
|
1054
1060
|
},
|
|
1055
1061
|
folderInfo: {
|
|
1056
1062
|
title: 'How to organise your favourite resources in folders',
|
|
@@ -1070,11 +1076,12 @@ const messages = {
|
|
|
1070
1076
|
linkCopied: 'Copied to clipboard',
|
|
1071
1077
|
addToMyNdla: 'Add to My NDLA',
|
|
1072
1078
|
addedToMyNdla: 'Added to My NDLA',
|
|
1073
|
-
addedToFolder: 'Resource added to
|
|
1079
|
+
addedToFolder: 'Resource added to ',
|
|
1074
1080
|
removedFromFolder: 'Removed from "{{folderName}}"',
|
|
1075
1081
|
titleUpdated: 'Title updated',
|
|
1076
1082
|
tagsUpdated: 'Tags updated',
|
|
1077
1083
|
show: 'Show',
|
|
1084
|
+
save: 'Save resource',
|
|
1078
1085
|
},
|
|
1079
1086
|
},
|
|
1080
1087
|
snackbar: {
|
|
@@ -455,6 +455,7 @@ const messages = {
|
|
|
455
455
|
files: 'Filer',
|
|
456
456
|
embedlink: 'Innbyggingslenke',
|
|
457
457
|
concept: 'Forklaringer',
|
|
458
|
+
podcast: 'Podkast',
|
|
458
459
|
other: 'Annet innhold',
|
|
459
460
|
},
|
|
460
461
|
embedlink: {
|
|
@@ -491,6 +492,11 @@ const messages = {
|
|
|
491
492
|
description: 'Husk å kopiere teksten som skal legges ved lydfilen der du bruker den.',
|
|
492
493
|
rules: 'Regler for bruk av lydfilen:',
|
|
493
494
|
},
|
|
495
|
+
podcast: {
|
|
496
|
+
heading: 'Slik gjenbruker du podkaster',
|
|
497
|
+
description: 'Husk å kopiere teksten som skal legges ved podkasten der du bruker den.',
|
|
498
|
+
rules: 'Regler for bruk av podkasten:',
|
|
499
|
+
},
|
|
494
500
|
video: {
|
|
495
501
|
heading: 'Slik gjenbruker du videoer',
|
|
496
502
|
description: 'Husk å kopiere teksten som skal legges ved videoen der du bruker den.',
|
|
@@ -1021,7 +1027,7 @@ const messages = {
|
|
|
1021
1027
|
more: 'Flere valg',
|
|
1022
1028
|
listView: 'Listevisning',
|
|
1023
1029
|
detailView: 'Detaljrik listevisning',
|
|
1024
|
-
shortView: '
|
|
1030
|
+
shortView: 'Kortvisning',
|
|
1025
1031
|
myPage: {
|
|
1026
1032
|
confirmDeleteAccount: 'Er du sikker på at du vil slette kontoen?',
|
|
1027
1033
|
confirmDeleteAccountButton: 'Slett konto',
|
|
@@ -1048,7 +1054,7 @@ const messages = {
|
|
|
1048
1054
|
feide: 'Dette henter vi om deg fra Feide',
|
|
1049
1055
|
storageInfo: {
|
|
1050
1056
|
title: 'Slik lagrer du dine favorittressurser fra NDLA',
|
|
1051
|
-
text: 'Når du ønsker å lagre en ressurs, kan du gjøre dette ved å klikke på
|
|
1057
|
+
text: 'Når du ønsker å lagre en ressurs, kan du gjøre dette ved å klikke på hjerteknappen der den er tilgjengelig. Du vil da få mulighet til å lagre ressursen i en mappe.',
|
|
1052
1058
|
},
|
|
1053
1059
|
folderInfo: {
|
|
1054
1060
|
title: 'Slik organiserer du dine favorittressurser i mapper',
|
|
@@ -1068,11 +1074,12 @@ const messages = {
|
|
|
1068
1074
|
linkCopied: 'Kopiert til utklippstavle',
|
|
1069
1075
|
addToMyNdla: 'Legg i Min NDLA',
|
|
1070
1076
|
addedToMyNdla: 'Lagt i Min NDLA',
|
|
1071
|
-
addedToFolder: 'Ressurs er lagt i
|
|
1077
|
+
addedToFolder: 'Ressurs er lagt i ',
|
|
1072
1078
|
removedFromFolder: 'Fjernet fra "{{folderName}}"',
|
|
1073
1079
|
titleUpdated: 'Tittel oppdatert',
|
|
1074
1080
|
tagsUpdated: 'Tags oppdatert',
|
|
1075
1081
|
show: 'Vis',
|
|
1082
|
+
save: 'Lagre ressurs',
|
|
1076
1083
|
},
|
|
1077
1084
|
},
|
|
1078
1085
|
snackbar: {
|