@ndla/ui 21.0.0 → 22.0.2

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 (94) hide show
  1. package/es/Breadcrumb/ActionBreadcrumb.js +4 -4
  2. package/es/ContentLoader/index.js +8 -3
  3. package/es/MyNdla/Resource/Folder.js +7 -6
  4. package/es/Resource/BlockResource.js +106 -18
  5. package/es/Resource/ListResource.js +125 -26
  6. package/es/ResourceGroup/ResourceGroup.js +3 -3
  7. package/es/ResourceGroup/ResourceItem.js +12 -12
  8. package/es/ResourceGroup/ResourceList.js +2 -2
  9. package/es/Search/ContentTypeResult.js +1 -2
  10. package/es/SearchTypeResult/SearchItem.js +8 -8
  11. package/es/SnackBar/DefaultSnackbar.js +56 -0
  12. package/es/SnackBar/SnackbarProvider.js +179 -0
  13. package/es/SnackBar/index.js +2 -2
  14. package/es/TopicMenu/TopicMenuButton.js +4 -2
  15. package/es/TreeStructure/FolderItem.js +64 -44
  16. package/es/TreeStructure/FolderItems.js +4 -4
  17. package/es/TreeStructure/TreeStructure.js +16 -9
  18. package/es/index.js +1 -1
  19. package/es/locale/messages-en.js +17 -2
  20. package/es/locale/messages-nb.js +17 -2
  21. package/es/locale/messages-nn.js +17 -2
  22. package/es/locale/messages-se.js +17 -2
  23. package/es/locale/messages-sma.js +17 -2
  24. package/lib/Breadcrumb/ActionBreadcrumb.js +4 -4
  25. package/lib/ContentLoader/index.d.ts +4 -8
  26. package/lib/ContentLoader/index.js +8 -3
  27. package/lib/MyNdla/Resource/Folder.js +7 -6
  28. package/lib/Resource/BlockResource.d.ts +2 -1
  29. package/lib/Resource/BlockResource.js +107 -18
  30. package/lib/Resource/ListResource.d.ts +2 -1
  31. package/lib/Resource/ListResource.js +126 -26
  32. package/lib/ResourceGroup/ResourceGroup.d.ts +1 -1
  33. package/lib/ResourceGroup/ResourceGroup.js +3 -3
  34. package/lib/ResourceGroup/ResourceItem.d.ts +1 -1
  35. package/lib/ResourceGroup/ResourceItem.js +12 -12
  36. package/lib/ResourceGroup/ResourceList.d.ts +1 -1
  37. package/lib/ResourceGroup/ResourceList.js +2 -2
  38. package/lib/Search/ContentTypeResult.js +1 -2
  39. package/lib/SearchTypeResult/SearchItem.js +8 -8
  40. package/lib/SnackBar/DefaultSnackbar.d.ts +11 -0
  41. package/lib/SnackBar/DefaultSnackbar.js +70 -0
  42. package/lib/SnackBar/SnackbarProvider.d.ts +32 -0
  43. package/lib/SnackBar/SnackbarProvider.js +197 -0
  44. package/lib/SnackBar/index.d.ts +3 -3
  45. package/lib/SnackBar/index.js +23 -3
  46. package/lib/TopicMenu/TopicMenuButton.js +3 -1
  47. package/lib/TreeStructure/FolderItem.d.ts +1 -1
  48. package/lib/TreeStructure/FolderItem.js +65 -44
  49. package/lib/TreeStructure/FolderItems.js +4 -4
  50. package/lib/TreeStructure/TreeStructure.d.ts +2 -2
  51. package/lib/TreeStructure/TreeStructure.js +16 -9
  52. package/lib/TreeStructure/types.d.ts +2 -1
  53. package/lib/index.d.ts +2 -2
  54. package/lib/index.js +24 -3
  55. package/lib/locale/messages-en.d.ts +15 -0
  56. package/lib/locale/messages-en.js +17 -2
  57. package/lib/locale/messages-nb.d.ts +15 -0
  58. package/lib/locale/messages-nb.js +17 -2
  59. package/lib/locale/messages-nn.d.ts +15 -0
  60. package/lib/locale/messages-nn.js +17 -2
  61. package/lib/locale/messages-se.d.ts +15 -0
  62. package/lib/locale/messages-se.js +17 -2
  63. package/lib/locale/messages-sma.d.ts +15 -0
  64. package/lib/locale/messages-sma.js +17 -2
  65. package/package.json +14 -14
  66. package/src/.DS_Store +0 -0
  67. package/src/Breadcrumb/ActionBreadcrumb.tsx +1 -1
  68. package/src/ContentLoader/index.tsx +9 -9
  69. package/src/MyNdla/Resource/Folder.tsx +1 -1
  70. package/src/Resource/BlockResource.tsx +66 -5
  71. package/src/Resource/ListResource.tsx +86 -11
  72. package/src/ResourceGroup/ResourceGroup.tsx +1 -1
  73. package/src/ResourceGroup/ResourceItem.tsx +2 -2
  74. package/src/ResourceGroup/ResourceList.tsx +1 -1
  75. package/src/Search/ContentTypeResult.tsx +0 -1
  76. package/src/SearchTypeResult/SearchItem.tsx +0 -1
  77. package/src/SnackBar/DefaultSnackbar.tsx +70 -0
  78. package/src/SnackBar/SnackbarProvider.tsx +147 -0
  79. package/src/SnackBar/index.ts +3 -5
  80. package/src/TopicMenu/TopicMenuButton.jsx +5 -1
  81. package/src/TreeStructure/FolderItem.tsx +56 -37
  82. package/src/TreeStructure/FolderItems.tsx +3 -2
  83. package/src/TreeStructure/TreeStructure.tsx +11 -6
  84. package/src/TreeStructure/types.ts +2 -1
  85. package/src/index.ts +2 -2
  86. package/src/locale/messages-en.ts +15 -0
  87. package/src/locale/messages-nb.ts +15 -0
  88. package/src/locale/messages-nn.ts +15 -0
  89. package/src/locale/messages-se.ts +15 -0
  90. package/src/locale/messages-sma.ts +15 -0
  91. package/es/SnackBar/SnackBar.js +0 -117
  92. package/lib/SnackBar/SnackBar.d.ts +0 -23
  93. package/lib/SnackBar/SnackBar.js +0 -127
  94. package/src/SnackBar/SnackBar.tsx +0 -183
@@ -7,8 +7,10 @@
7
7
  */
8
8
 
9
9
  import React, { KeyboardEvent, MouseEvent, useEffect, useRef } from 'react';
10
+ import { useTranslation } from 'react-i18next';
10
11
  import styled from '@emotion/styled';
11
12
  import { ArrowDropDown } from '@ndla/icons/common';
13
+ import { Done } from '@ndla/icons/editor';
12
14
  import { MenuButton } from '@ndla/button';
13
15
  import { FolderOutlined } from '@ndla/icons/contentType';
14
16
  import { colors, spacing, misc, animations } from '@ndla/core';
@@ -40,15 +42,11 @@ const FolderItemWrapper = styled.div`
40
42
  align-items: center;
41
43
  `;
42
44
 
43
- const WrapperForFolderChild = styled.div<{ selected?: boolean }>`
44
- position: absolute;
45
- right: ${spacing.xsmall};
46
- opacity: ${({ selected }) => (selected ? 1 : 0.25)};
47
- &:hover,
48
- &:focus,
49
- &:focus-within {
50
- opacity: 1;
51
- }
45
+ const WrapperForFolderChild = styled.div`
46
+ display: flex;
47
+ flex-direction: row;
48
+ align-items: center;
49
+ gap: ${spacing.xsmall};
52
50
  `;
53
51
 
54
52
  const shouldForwardProp = (name: string) => !['selected', 'noArrow'].includes(name);
@@ -59,9 +57,24 @@ interface FolderNameProps {
59
57
  }
60
58
 
61
59
  const FolderName = styled('button', { shouldForwardProp })<FolderNameProps>`
62
- line-height: 1;
60
+ cursor: pointer;
61
+ padding: ${spacing.xsmall};
62
+ margin: 0;
63
+ margin-left: ${({ noArrow }) => (noArrow ? `29px` : `0px`)};
64
+ flex-grow: 1;
65
+ display: grid;
66
+ grid-template-columns: auto 1fr auto;
67
+ align-items: center;
68
+ gap: ${spacing.xxsmall};
69
+ border: 0;
70
+ border-radius: ${misc.borderRadius};
71
+ box-shadow: none;
63
72
  background: ${({ selected }) => (selected ? colors.brand.lighter : 'transparent')};
64
73
  color: ${colors.text.primary};
74
+ transition: ${animations.durations.superFast};
75
+ text-align: left;
76
+ line-height: 1;
77
+ word-break: break-word;
65
78
  &:hover,
66
79
  &:focus {
67
80
  background: ${({ selected }) => (selected ? colors.brand.light : colors.brand.lightest)};
@@ -70,19 +83,10 @@ const FolderName = styled('button', { shouldForwardProp })<FolderNameProps>`
70
83
  opacity: 1;
71
84
  }
72
85
  }
73
- transition: ${animations.durations.superFast};
74
- border: 0;
75
- border-radius: ${misc.borderRadius};
76
- display: flex;
77
- gap: ${spacing.xxsmall};
78
- align-items: center;
79
- cursor: pointer;
80
- padding: ${spacing.xsmall};
81
- margin: 0;
82
- margin-left: ${({ noArrow }) => (noArrow ? `29px` : `0px`)};
83
- flex-grow: 1;
84
- box-shadow: none;
85
- text-align: left;
86
+ `;
87
+
88
+ const StyledDone = styled(Done)`
89
+ color: ${colors.support.green};
86
90
  `;
87
91
 
88
92
  const FolderNameLink = FolderName.withComponent(SafeLink);
@@ -110,24 +114,30 @@ const FolderItem = ({
110
114
  openOnFolderClick,
111
115
  setFocusedId,
112
116
  setSelectedFolder,
117
+ targetResource,
113
118
  visibleFolders,
114
119
  }: Props) => {
120
+ const { t } = useTranslation();
115
121
  const { id, icon, name } = folder;
116
122
  const ref = useRef<HTMLButtonElement & HTMLAnchorElement>(null);
117
123
  const selected = selectedFolder && selectedFolder.id === id;
118
124
  const focused = focusedFolderId === id;
119
125
 
120
126
  const handleClickFolder = () => {
121
- setSelectedFolder(folder);
122
- setFocusedId(id);
123
- onSelectFolder?.(id);
124
127
  if (openOnFolderClick) {
125
- if (isOpen) {
126
- onCloseFolder(id);
127
- } else {
128
- onOpenFolder(id);
128
+ if (selected) {
129
+ if (isOpen) {
130
+ onCloseFolder(id);
131
+ } else {
132
+ onOpenFolder(id);
133
+ }
129
134
  }
130
135
  }
136
+ if (!selected) {
137
+ setSelectedFolder(folder);
138
+ setFocusedId(id);
139
+ }
140
+ onSelectFolder?.(id);
131
141
  };
132
142
 
133
143
  useEffect(() => {
@@ -144,7 +154,10 @@ const FolderItem = ({
144
154
  };
145
155
  });
146
156
 
147
- const linkPath = `/minndla${level > 1 ? '/folders' : ''}/${id}`;
157
+ const linkPath = `/minndla${level > 0 ? '/folders' : ''}/${id}`;
158
+
159
+ const containsResource =
160
+ targetResource && folder.resources.some((resource) => resource.resourceId === targetResource.resourceId);
148
161
 
149
162
  return (
150
163
  <FolderItemWrapper>
@@ -170,12 +183,18 @@ const FolderItem = ({
170
183
  onClick={handleClickFolder}>
171
184
  {icon || <FolderOutlined />}
172
185
  {name}
173
- </FolderName>
174
- {actions && (
175
- <WrapperForFolderChild selected={selected}>
176
- <MenuButton size="xsmall" menuItems={actions} tabIndex={selected || id === focusedFolderId ? 0 : -1} />
186
+ <WrapperForFolderChild>
187
+ {containsResource && <StyledDone title={t('myNdla.alreadyInFolder')} />}
188
+ {actions && (
189
+ <MenuButton
190
+ onClick={(e) => e.stopPropagation()}
191
+ size="xsmall"
192
+ menuItems={actions}
193
+ tabIndex={selected || id === focusedFolderId ? 0 : -1}
194
+ />
195
+ )}
177
196
  </WrapperForFolderChild>
178
- )}
197
+ </FolderName>
179
198
  </>
180
199
  ) : (
181
200
  <FolderNameLink
@@ -185,7 +204,7 @@ const FolderItem = ({
185
204
  }
186
205
  noArrow={hideArrow}
187
206
  to={loading ? '' : linkPath}
188
- tabIndex={selected || focused || level === 1 ? 0 : -1}
207
+ tabIndex={selected || focused || level === 0 ? 0 : -1}
189
208
  selected={selected}
190
209
  onFocus={() => setFocusedId(id)}
191
210
  onClick={handleClickFolder}>
@@ -52,10 +52,11 @@ const FolderItems = ({
52
52
  openFolders,
53
53
  ...rest
54
54
  }: FolderItemsProps) => (
55
- <StyledUL role="group" firstLevel={level === 1}>
55
+ <StyledUL role="group" firstLevel={level === 0}>
56
56
  {folders.map((folder) => {
57
57
  const { subfolders, id } = folder;
58
58
  const isOpen = openFolders?.includes(id);
59
+
59
60
  return (
60
61
  <StyledLI key={id} role="treeitem">
61
62
  <div>
@@ -65,7 +66,7 @@ const FolderItems = ({
65
66
  isOpen={isOpen}
66
67
  level={level}
67
68
  loading={loading}
68
- noPaddingWhenArrowIsHidden={editable && level === 1 && subfolders?.length === 0}
69
+ noPaddingWhenArrowIsHidden={editable && level === 0 && subfolders?.length === 0}
69
70
  {...rest}
70
71
  />
71
72
  </div>
@@ -37,7 +37,7 @@ export interface TreeStructureProps extends CommonTreeStructureProps {
37
37
  framed?: boolean;
38
38
  label?: string;
39
39
  maximumLevelsOfFoldersAllowed?: number;
40
- onNewFolder: (name: string, parentId: string) => Promise<IFolder>;
40
+ onNewFolder?: (name: string, parentId: string) => Promise<IFolder>;
41
41
  }
42
42
 
43
43
  const TreeStructure = ({
@@ -52,6 +52,7 @@ const TreeStructure = ({
52
52
  onNewFolder,
53
53
  onSelectFolder,
54
54
  openOnFolderClick,
55
+ targetResource,
55
56
  }: TreeStructureProps) => {
56
57
  const { t } = useTranslation();
57
58
 
@@ -68,10 +69,13 @@ const TreeStructure = ({
68
69
 
69
70
  useEffect(() => {
70
71
  if (defaultOpenFolders) {
71
- setOpenFolders((prev) => {
72
- return uniq(defaultOpenFolders.concat(prev));
73
- });
72
+ if (!defaultOpenFolders.every((element) => openFolders.includes(element))) {
73
+ setOpenFolders((prev) => {
74
+ return uniq(defaultOpenFolders.concat(prev));
75
+ });
76
+ }
74
77
  }
78
+ // eslint-disable-next-line react-hooks/exhaustive-deps
75
79
  }, [defaultOpenFolders]);
76
80
 
77
81
  useEffect(() => {
@@ -111,7 +115,7 @@ const TreeStructure = ({
111
115
  };
112
116
 
113
117
  const onSaveNewFolder = (name: string, parentId: string) => {
114
- onNewFolder(name, parentId).then((newFolder) => {
118
+ onNewFolder?.(name, parentId).then((newFolder) => {
115
119
  if (newFolder) {
116
120
  setSelectedFolder(newFolder);
117
121
  setFocusedId(newFolder.id);
@@ -136,7 +140,7 @@ const TreeStructure = ({
136
140
  focusedFolderId={focusedId}
137
141
  menuItems={menuItems}
138
142
  folders={folders}
139
- level={1}
143
+ level={0}
140
144
  loading={loading}
141
145
  selectedFolder={selectedFolder}
142
146
  maximumLevelsOfFoldersAllowed={maximumLevelsOfFoldersAllowed}
@@ -150,6 +154,7 @@ const TreeStructure = ({
150
154
  openOnFolderClick={openOnFolderClick}
151
155
  setFocusedId={setFocusedId}
152
156
  setSelectedFolder={setSelectedFolder}
157
+ targetResource={targetResource}
153
158
  visibleFolders={visibleFolderIds}
154
159
  />
155
160
  </TreeStructureStyledWrapper>
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import { MouseEvent, ReactNode } from 'react';
10
- import { IFolder } from '@ndla/types-learningpath-api';
10
+ import { IFolder, IResource } from '@ndla/types-learningpath-api';
11
11
  import { MenuItemProps } from '@ndla/button/src';
12
12
 
13
13
  export interface FolderType extends IFolder {
@@ -23,6 +23,7 @@ export interface CommonTreeStructureProps {
23
23
  onSelectFolder?: (id: string) => void;
24
24
  openOnFolderClick?: boolean;
25
25
  menuItems?: TreeStructureMenuProps[];
26
+ targetResource?: IResource;
26
27
  }
27
28
 
28
29
  export interface CommonFolderItemsProps extends CommonTreeStructureProps {
package/src/index.ts CHANGED
@@ -240,8 +240,8 @@ export type { ListResourceProps } from './Resource';
240
240
  export type { TagType } from './TagSelector';
241
241
  export { TagSelector } from './TagSelector';
242
242
 
243
- export type { SnackBarItem } from './SnackBar';
244
- export { SnackBar } from './SnackBar';
243
+ export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from './SnackBar';
244
+ export type { Snack, SnackContext } from './SnackBar';
245
245
  export { InfoBlock } from './InfoBlock';
246
246
  export { TreeStructure } from './TreeStructure';
247
247
  export type { FolderType, TreeStructureProps, TreeStructureMenuProps } from './TreeStructure';
@@ -996,7 +996,10 @@ const messages = {
996
996
  delete: 'Delete',
997
997
  edit: 'Edit',
998
998
  missingName: 'Folder name required',
999
+ folderDeleted: '"{{folderName}}" deleted',
999
1000
  },
1001
+ tags: '{{count}} tag',
1002
+ tags_plural: '{{count}} tags',
1000
1003
  confirmDeleteFolder: 'Are you sure you want to delete this folder? This process cannot be undone.',
1001
1004
  confirmDeleteTag: 'Are you sure you want to delete this tag? This process cannot be undone.',
1002
1005
  myFolders: 'My folders',
@@ -1007,6 +1010,7 @@ const messages = {
1007
1010
  favourites: 'Favourites',
1008
1011
  addToFavourites: 'Add to my favourites',
1009
1012
  alreadyFavourited: 'Already in my favourites',
1013
+ alreadyInFolder: 'Already in folder',
1010
1014
  help: 'Help',
1011
1015
  more: 'More options',
1012
1016
  listView: 'List view',
@@ -1015,6 +1019,9 @@ const messages = {
1015
1019
  myPage: {
1016
1020
  myPage: 'My page',
1017
1021
  logout: 'Log out of My NDLA',
1022
+ loginTerms: 'Log in with Feide to receive access. By logging on your accept your terms of service',
1023
+ loginResourcePitch: 'Do you want to favorite this page?',
1024
+ loginWelcome: 'Welcome to My NDLA! This page allows you to organize your articles in your <i>own</i> way!',
1018
1025
  deleteAccount: 'Delete My NDLA',
1019
1026
  welcome:
1020
1027
  'Welcome to my NDLA! You can now save your favourite resources from NDLA and organise them in folders with tags',
@@ -1047,9 +1054,17 @@ const messages = {
1047
1054
  resource: {
1048
1055
  add: 'Add folder/tag',
1049
1056
  remove: 'Remove',
1057
+ removeTitle: 'Remove resource',
1058
+ confirmRemove: 'Are you sure you want to remove the resource from this folder?',
1050
1059
  copyLink: 'Copy link to this page',
1060
+ linkCopied: 'Copied to clipboard',
1051
1061
  addToMyNdla: 'Add to My NDLA',
1052
1062
  addedToMyNdla: 'Added to My NDLA',
1063
+ addedToFolder: 'Resource added to "{{folderName}}"',
1064
+ removedFromFolder: 'Removed from "{{folderName}}"',
1065
+ titleUpdated: 'Title updated',
1066
+ tagsUpdated: 'Tags updated',
1067
+ show: 'Show',
1053
1068
  },
1054
1069
  },
1055
1070
  snackbar: {
@@ -994,7 +994,10 @@ const messages = {
994
994
  delete: 'Slett',
995
995
  edit: 'Rediger',
996
996
  missingName: 'Mappenavn er påkrevd',
997
+ folderDeleted: '"{{folderName}}" er slettet',
997
998
  },
999
+ tags: '{{count}} tag',
1000
+ tags_plural: '{{count}} tags',
998
1001
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappen? Denne handlingen kan ikke angres.',
999
1002
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlingen kan ikke angres.',
1000
1003
  myFolders: 'Mine mapper',
@@ -1005,6 +1008,7 @@ const messages = {
1005
1008
  favourites: 'Favoritter',
1006
1009
  addToFavourites: 'Legg til i mine favoritter',
1007
1010
  alreadyFavourited: 'Allerede lagt til i mine favoritter',
1011
+ alreadyInFolder: 'Finnes allerede i mappen',
1008
1012
  help: 'Hjelp',
1009
1013
  more: 'Flere valg',
1010
1014
  listView: 'Listevisning',
@@ -1014,6 +1018,9 @@ const messages = {
1014
1018
  myPage: 'Min side',
1015
1019
  deleteAccount: 'Slett Min NDLA',
1016
1020
  logout: 'Logg ut av Min NDLA',
1021
+ loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjenner du våre vilkår for bruk',
1022
+ loginResourcePitch: 'Ønsker du å favorittmerke denne siden?',
1023
+ loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1017
1024
  welcome:
1018
1025
  'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
1019
1026
  read: { our: 'Les våre', ours: 'Les vår' },
@@ -1045,9 +1052,17 @@ const messages = {
1045
1052
  resource: {
1046
1053
  add: 'Legg til mappe/tag',
1047
1054
  remove: 'Fjern',
1055
+ removeTitle: 'Fjern ressurs',
1056
+ confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen fra denne mappen?',
1048
1057
  copyLink: 'Kopier lenke til siden',
1058
+ linkCopied: 'Kopiert til utklippstavle',
1049
1059
  addToMyNdla: 'Legg i Min NDLA',
1050
1060
  addedToMyNdla: 'Lagt i Min NDLA',
1061
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1062
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1063
+ titleUpdated: 'Tittel oppdatert',
1064
+ tagsUpdated: 'Tags oppdatert',
1065
+ show: 'Vis',
1051
1066
  },
1052
1067
  },
1053
1068
  snackbar: {
@@ -995,7 +995,10 @@ const messages = {
995
995
  delete: 'Slett',
996
996
  edit: 'Rediger',
997
997
  missingName: 'Mappenavn er påkrevd',
998
+ folderDeleted: '"{{folderName}}" er sletta',
998
999
  },
1000
+ tags: '{{count}} tag',
1001
+ tags_plural: '{{count}} tags',
999
1002
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappa? Denne handlinga kan ikkje angres.',
1000
1003
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlinga kan ikkje angres.',
1001
1004
  myFolders: 'Mine mapper',
@@ -1006,6 +1009,7 @@ const messages = {
1006
1009
  favourites: 'Favorittar',
1007
1010
  addToFavourites: 'Legg til i mine favorittar',
1008
1011
  alreadyFavourited: 'Allereie lagt til i mine favorittar',
1012
+ alreadyInFolder: 'Finnes allereie i mappa',
1009
1013
  help: 'Hjelp',
1010
1014
  more: 'Fleire val',
1011
1015
  listView: 'Listevisning',
@@ -1015,6 +1019,9 @@ const messages = {
1015
1019
  myPage: 'Min side',
1016
1020
  deleteAccount: 'Slett Min NDLA',
1017
1021
  logout: 'Logg ut av Min NDLA',
1022
+ loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjennar du våre vilkår for bruk',
1023
+ loginResourcePitch: 'Ønsker du å favorittmerke denne sida?',
1024
+ loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1018
1025
  welcome:
1019
1026
  'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
1020
1027
  read: { our: 'Les våre', ours: 'Les vår' },
@@ -1045,9 +1052,17 @@ const messages = {
1045
1052
  resource: {
1046
1053
  add: 'Legg til mappe/tag',
1047
1054
  remove: 'Fjern',
1055
+ removeTitle: 'Fjern ressurs',
1056
+ confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1048
1057
  copyLink: 'Kopier lenke til sida',
1058
+ linkCopied: 'Kopiert til utklippstavla',
1049
1059
  addToMyNdla: 'Legg i Min NDLA',
1050
1060
  addedToMyNdla: 'Lagt i Min NDLA',
1061
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1062
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1063
+ titleUpdated: 'Tittel oppdatert',
1064
+ tagsUpdated: 'Tags oppdatert',
1065
+ show: 'Vis',
1051
1066
  },
1052
1067
  },
1053
1068
  snackbar: {
@@ -994,7 +994,10 @@ const messages = {
994
994
  delete: 'Slett',
995
995
  edit: 'Rediger',
996
996
  missingName: 'Mappenavn er påkrevd',
997
+ folderDeleted: '"{{folderName}}" er sletta',
997
998
  },
999
+ tags: '{{count}} tag',
1000
+ tags_plural: '{{count}} tags',
998
1001
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappen? Denne handlingen kan ikke angres.',
999
1002
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlingen kan ikke angres.',
1000
1003
  myFolders: 'Mine mapper',
@@ -1005,6 +1008,7 @@ const messages = {
1005
1008
  favourites: 'Favoritter',
1006
1009
  addToFavourites: 'Legg til i mine favoritter',
1007
1010
  alreadyFavourited: 'Allerede lagt til i mine favoritter',
1011
+ alreadyInFolder: 'Finnes allerede i mappen',
1008
1012
  help: 'Hjelp',
1009
1013
  more: 'Flere valg',
1010
1014
  listView: 'Listevisning',
@@ -1014,6 +1018,9 @@ const messages = {
1014
1018
  myPage: 'Min side',
1015
1019
  deleteAccount: 'Slett Min NDLA',
1016
1020
  logout: 'Logg ut av Min NDLA',
1021
+ loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjennar du våre vilkår for bruk',
1022
+ loginResourcePitch: 'Ønsker du å favorittmerke denne sida?',
1023
+ loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1017
1024
  welcome:
1018
1025
  'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
1019
1026
  read: { our: 'Les våre', ours: 'Les vår' },
@@ -1045,9 +1052,17 @@ const messages = {
1045
1052
  resource: {
1046
1053
  add: 'Legg til mappe/tag',
1047
1054
  remove: 'Fjern',
1055
+ removeTitle: 'Fjern ressurs',
1056
+ confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1048
1057
  copyLink: 'Kopier lenke til siden',
1058
+ linkCopied: 'Kopiert til utklippstavla',
1049
1059
  addToMyNdla: 'Legg i Min NDLA',
1050
1060
  addedToMyNdla: 'Lagt i Min NDLA',
1061
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1062
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1063
+ titleUpdated: 'Tittel oppdatert',
1064
+ tagsUpdated: 'Tags oppdatert',
1065
+ show: 'Vis',
1051
1066
  },
1052
1067
  },
1053
1068
  snackbar: {
@@ -994,7 +994,10 @@ const messages = {
994
994
  delete: 'Slett',
995
995
  edit: 'Rediger',
996
996
  missingName: 'Mappenavn er påkrevd',
997
+ folderDeleted: '"{{folderName}}" er sletta',
997
998
  },
999
+ tags: '{{count}} tag',
1000
+ tags_plural: '{{count}} tags',
998
1001
  confirmDeleteFolder: 'Er du sikker på at du vil slette mappen? Denne handlingen kan ikke angres.',
999
1002
  confirmDeleteTag: 'Er du sikker på at du vil slette tag? Denne handlingen kan ikke angres.',
1000
1003
  myFolders: 'Mine mapper',
@@ -1005,6 +1008,7 @@ const messages = {
1005
1008
  favourites: 'Favoritter',
1006
1009
  addToFavourites: 'Legg til i mine favoritter',
1007
1010
  alreadyFavourited: 'Allerede lagt til i mine favoritter',
1011
+ alreadyInFolder: 'Finnes allerede i mappen',
1008
1012
  help: 'Hjelp',
1009
1013
  more: 'Flere valg',
1010
1014
  listView: 'Listevisning',
@@ -1014,6 +1018,9 @@ const messages = {
1014
1018
  myPage: 'Min side',
1015
1019
  deleteAccount: 'Slett Min NDLA',
1016
1020
  logout: 'Logg ut av Min NDLA',
1021
+ loginTerms: 'Logg på med Feide for å få tilgang. Ved å logge på godkjennar du våre vilkår for bruk',
1022
+ loginResourcePitch: 'Ønsker du å favorittmerke denne sida?',
1023
+ loginWelcome: 'Velkommen til NDLA! Her kan du organisere fagstoffet på <i>din</i> måte!',
1017
1024
  welcome:
1018
1025
  'Velkommen til Min NDLA! Nå kan du lagre dine favorittressurser fra NDLA og organisere dem slik du ønsker i mapper og med tags.',
1019
1026
  read: { our: 'Les våre', ours: 'Les vår' },
@@ -1045,9 +1052,17 @@ const messages = {
1045
1052
  resource: {
1046
1053
  add: 'Legg til mappe/tag',
1047
1054
  remove: 'Fjern',
1055
+ removeTitle: 'Fjern ressurs',
1056
+ confirmRemove: 'Er du sikker på at du ønsker å fjerne ressursen frå denne mappen?',
1048
1057
  copyLink: 'Kopier lenke til siden',
1058
+ linkCopied: 'Kopiert til utklippstavla',
1049
1059
  addToMyNdla: 'Legg i Min NDLA',
1050
1060
  addedToMyNdla: 'Lagt i Min NDLA',
1061
+ addedToFolder: 'Ressurs er lagt i "{{folderName}}"',
1062
+ removedFromFolder: 'Fjernet fra "{{folderName}}"',
1063
+ titleUpdated: 'Tittel oppdatert',
1064
+ tagsUpdated: 'Tags oppdatert',
1065
+ show: 'Vis',
1051
1066
  },
1052
1067
  },
1053
1068
  snackbar: {