@ndla/ui 12.0.1 → 13.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/Breadcrumb/Breadcrumb.js +101 -24
- package/es/Breadcrumb/BreadcrumbItem.js +70 -18
- package/es/Breadcrumb/HeaderBreadcrumb.js +63 -0
- package/es/Breadcrumb/HomeBreadcrumb.js +117 -0
- package/es/Breadcrumb/index.js +2 -1
- package/es/Breadcrumblist/index.js +1 -2
- package/es/all.css +1 -1
- package/es/index.js +1 -1
- package/es/locale/messages-en.js +59 -18
- package/es/locale/messages-nb.js +58 -17
- package/es/locale/messages-nn.js +59 -18
- package/es/locale/messages-se.js +56 -15
- package/es/locale/messages-sma.js +56 -15
- package/lib/Breadcrumb/Breadcrumb.d.ts +10 -12
- package/lib/Breadcrumb/Breadcrumb.js +104 -32
- package/lib/Breadcrumb/BreadcrumbItem.d.ts +15 -7
- package/lib/Breadcrumb/BreadcrumbItem.js +68 -20
- package/lib/Breadcrumb/HeaderBreadcrumb.d.ts +14 -0
- package/lib/Breadcrumb/HeaderBreadcrumb.js +76 -0
- package/lib/Breadcrumb/HomeBreadcrumb.d.ts +15 -0
- package/lib/Breadcrumb/HomeBreadcrumb.js +127 -0
- package/lib/Breadcrumb/index.d.ts +3 -1
- package/lib/Breadcrumb/index.js +11 -3
- package/lib/Breadcrumblist/index.js +0 -1
- package/lib/all.css +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +10 -3
- package/lib/locale/messages-en.d.ts +43 -2
- package/lib/locale/messages-en.js +59 -18
- package/lib/locale/messages-nb.d.ts +43 -2
- package/lib/locale/messages-nb.js +58 -17
- package/lib/locale/messages-nn.d.ts +43 -2
- package/lib/locale/messages-nn.js +59 -18
- package/lib/locale/messages-se.d.ts +43 -2
- package/lib/locale/messages-se.js +56 -15
- package/lib/locale/messages-sma.d.ts +44 -3
- package/lib/locale/messages-sma.js +56 -15
- package/package.json +10 -10
- package/src/Breadcrumb/Breadcrumb.tsx +76 -40
- package/src/Breadcrumb/BreadcrumbItem.tsx +82 -18
- package/src/Breadcrumb/HeaderBreadcrumb.tsx +67 -0
- package/src/Breadcrumb/HomeBreadcrumb.tsx +88 -0
- package/src/Breadcrumb/index.ts +5 -1
- package/src/Breadcrumblist/index.tsx +0 -1
- package/src/index.ts +2 -1
- package/src/locale/__tests__/translations-test.ts +10 -0
- package/src/locale/messages-en.ts +55 -14
- package/src/locale/messages-nb.ts +54 -13
- package/src/locale/messages-nn.ts +56 -15
- package/src/locale/messages-se.ts +52 -11
- package/src/locale/messages-sma.ts +53 -12
- package/src/main.scss +0 -2
- package/es/Breadcrumb/BreadcrumbBlock.js +0 -90
- package/lib/Breadcrumb/BreadcrumbBlock.d.ts +0 -15
- package/lib/Breadcrumb/BreadcrumbBlock.js +0 -105
- package/src/.DS_Store +0 -0
- package/src/Breadcrumb/BreadcrumbBlock.tsx +0 -80
- package/src/Breadcrumb/component.breadcrumb-block.scss +0 -98
- package/src/Breadcrumb/component.breadcrumb.scss +0 -104
|
@@ -442,7 +442,7 @@ const messages = {
|
|
|
442
442
|
rules: 'Regler for bruk av bildet:',
|
|
443
443
|
},
|
|
444
444
|
images: {
|
|
445
|
-
heading: 'Slik
|
|
445
|
+
heading: 'Slik gjenbruker du bilder',
|
|
446
446
|
description: 'Husk å kopiere teksten som skal legges ved bildet der du bruker det.',
|
|
447
447
|
rules: 'Regler for bruk av bildet:',
|
|
448
448
|
itemImage: {
|
|
@@ -456,18 +456,18 @@ const messages = {
|
|
|
456
456
|
title: 'Tittel',
|
|
457
457
|
},
|
|
458
458
|
text: {
|
|
459
|
-
heading: 'Slik
|
|
459
|
+
heading: 'Slik gjenbruker du teksten',
|
|
460
460
|
description: 'Husk å henvise til kilden når du gjenbruker tekst.',
|
|
461
461
|
rules: 'Regler for bruk av teksten:',
|
|
462
462
|
published: 'Publiseringsdato',
|
|
463
463
|
},
|
|
464
464
|
audio: {
|
|
465
|
-
heading: 'Slik
|
|
465
|
+
heading: 'Slik gjenbruker du lydfiler',
|
|
466
466
|
description: 'Husk å kopiere teksten som skal legges ved lydfilen der du bruker den.',
|
|
467
467
|
rules: 'Regler for bruk av lydfilen:',
|
|
468
468
|
},
|
|
469
469
|
video: {
|
|
470
|
-
heading: 'Slik
|
|
470
|
+
heading: 'Slik gjenbruker du videoer',
|
|
471
471
|
description: 'Husk å kopiere teksten som skal legges ved videoen der du bruker den.',
|
|
472
472
|
rules: 'Regler for bruk av videoen:',
|
|
473
473
|
itemImage: {
|
|
@@ -475,31 +475,42 @@ const messages = {
|
|
|
475
475
|
},
|
|
476
476
|
},
|
|
477
477
|
other: {
|
|
478
|
-
heading: 'Slik
|
|
478
|
+
heading: 'Slik gjenbruker du annet innhold',
|
|
479
479
|
description: 'Du finner retningslinjene for bruk av innholdet i innholdselementet',
|
|
480
480
|
itemImage: {
|
|
481
481
|
ariaLabel: 'Åpne i nytt vindu',
|
|
482
482
|
},
|
|
483
483
|
},
|
|
484
484
|
h5p: {
|
|
485
|
-
heading: 'Slik
|
|
485
|
+
heading: 'Slik gjenbruker du H5P-innhold',
|
|
486
486
|
description: 'Du finner retningslinjene for bruk av innholdet i H5P-elementet',
|
|
487
487
|
rules: 'Regler for bruk av H5P:',
|
|
488
488
|
},
|
|
489
489
|
concept: {
|
|
490
|
-
|
|
490
|
+
embedlink: {
|
|
491
|
+
heading: 'Slik viser du forklaringa i anna innhald',
|
|
492
|
+
description: 'Denne lenka viser forklaringa utan kontekst (meny og botntekst)',
|
|
493
|
+
copyTitle: 'Kopier innbyggingslenke',
|
|
494
|
+
hasCopiedTitle: 'Innbyggingslenke kopiert',
|
|
495
|
+
},
|
|
496
|
+
heading: 'Slik gjenbruker du forklaringer',
|
|
491
497
|
description: 'Du finner retningslinjene for bruk av innholdet i forklaring-elementet',
|
|
492
498
|
rules: 'Regler for bruk av forklaring:',
|
|
493
499
|
title: 'Tittel',
|
|
494
500
|
},
|
|
495
501
|
files: {
|
|
496
|
-
heading: 'Slik
|
|
502
|
+
heading: 'Slik gjenbruker du filer',
|
|
497
503
|
description: 'Husk å kopier teksten som skal legges ved filen der du bruker den.',
|
|
498
504
|
rules: 'Regler for bruk av filen:',
|
|
499
505
|
itemImage: {
|
|
500
506
|
ariaLabel: 'Åpne i nytt vindu',
|
|
501
507
|
},
|
|
502
508
|
},
|
|
509
|
+
title: 'Tittel',
|
|
510
|
+
originator: 'Opphavar',
|
|
511
|
+
rightsholder: 'Rettshavar',
|
|
512
|
+
source: 'Kjelde',
|
|
513
|
+
published: 'Publiseringsdato',
|
|
503
514
|
},
|
|
504
515
|
errorMessage: {
|
|
505
516
|
title: 'Ops, noe gikk galt',
|
|
@@ -530,8 +541,10 @@ const messages = {
|
|
|
530
541
|
newsletterAria: 'Meld deg på vårt nyhetsbrev',
|
|
531
542
|
youtube: 'NDLA på YouTube',
|
|
532
543
|
youtubeAria: 'NDLA på YouTube',
|
|
533
|
-
|
|
534
|
-
|
|
544
|
+
linkedin: 'NDLA på LinkedIn',
|
|
545
|
+
linkedinAria: 'Besøk NDLA på LinkedIn',
|
|
546
|
+
instagram: 'NDLA på Instagram',
|
|
547
|
+
instagramAria: 'Besøk NDLA på Instagram',
|
|
535
548
|
sharePage: 'Del denne siden',
|
|
536
549
|
sharePageAria: 'Del denne siden',
|
|
537
550
|
},
|
|
@@ -594,6 +607,10 @@ const messages = {
|
|
|
594
607
|
search: {
|
|
595
608
|
placeholder: 'Søk',
|
|
596
609
|
},
|
|
610
|
+
embedlink: {
|
|
611
|
+
copyTitle: 'Kopier innbyggingskode',
|
|
612
|
+
hasCopiedTitle: 'Innbyggingskode kopiert',
|
|
613
|
+
},
|
|
597
614
|
filters: {
|
|
598
615
|
subject: {
|
|
599
616
|
useFilter: 'Bruk filter',
|
|
@@ -610,6 +627,7 @@ const messages = {
|
|
|
610
627
|
openFilter: 'Filtrer',
|
|
611
628
|
closeFilter: 'Lukk filter',
|
|
612
629
|
heading: 'Filter',
|
|
630
|
+
filteredBy: 'Filtrert på',
|
|
613
631
|
},
|
|
614
632
|
alphabet: {
|
|
615
633
|
letterFilter: 'Vis innhald på (bokstaven) {{letter}}.',
|
|
@@ -765,6 +783,14 @@ const messages = {
|
|
|
765
783
|
createdBy: {
|
|
766
784
|
content: 'Ressursen',
|
|
767
785
|
text: 'er hentet fra',
|
|
786
|
+
concept: {
|
|
787
|
+
content: 'Forklaringa',
|
|
788
|
+
text: 'er utarbeida av',
|
|
789
|
+
},
|
|
790
|
+
listing: {
|
|
791
|
+
content: 'Lista',
|
|
792
|
+
text: 'er utarbeida av',
|
|
793
|
+
},
|
|
768
794
|
},
|
|
769
795
|
fagfornyelse: {
|
|
770
796
|
frontpage: {
|
|
@@ -797,7 +823,7 @@ const messages = {
|
|
|
797
823
|
frontpageMenu: {
|
|
798
824
|
program: 'Utdanningsprogram',
|
|
799
825
|
allsubjects: 'Alle fag',
|
|
800
|
-
cursorText: 'Se smakebiter fra fag
|
|
826
|
+
cursorText: 'Se smakebiter fra fag under utvikling.',
|
|
801
827
|
},
|
|
802
828
|
navigation: {
|
|
803
829
|
showLongerDescription: 'Vis hele emnebeskrivelsen',
|
|
@@ -818,7 +844,7 @@ const messages = {
|
|
|
818
844
|
title: 'Tittel',
|
|
819
845
|
image: {
|
|
820
846
|
altText: 'Alt-tekst',
|
|
821
|
-
|
|
847
|
+
caption: 'Bilettekst',
|
|
822
848
|
type: 'Filtype',
|
|
823
849
|
width: 'Breidde',
|
|
824
850
|
height: 'Høgde',
|
|
@@ -938,6 +964,21 @@ const messages = {
|
|
|
938
964
|
favourites: 'Favoritter',
|
|
939
965
|
help: 'Hjelp',
|
|
940
966
|
},
|
|
967
|
+
labels: {
|
|
968
|
+
category: 'Kategori',
|
|
969
|
+
subject: 'Fag',
|
|
970
|
+
other: 'Anna',
|
|
971
|
+
},
|
|
972
|
+
listingPage: {
|
|
973
|
+
or: 'eller',
|
|
974
|
+
noFilters: 'Har ikkje noko å filtrera',
|
|
975
|
+
loadMore: 'Last meir',
|
|
976
|
+
},
|
|
977
|
+
siteNav: {
|
|
978
|
+
search: 'Søk',
|
|
979
|
+
contact: 'Kontakt',
|
|
980
|
+
help: 'Hjelp',
|
|
981
|
+
},
|
|
941
982
|
};
|
|
942
983
|
|
|
943
984
|
export default messages;
|
package/src/main.scss
CHANGED
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
@import 'Article/component.article-author-popup';
|
|
9
9
|
|
|
10
10
|
@import 'global/components/component.bodybox';
|
|
11
|
-
@import 'Breadcrumb/component.breadcrumb';
|
|
12
|
-
@import 'Breadcrumb/component.breadcrumb-block';
|
|
13
11
|
@import 'global/components/component.story-intro';
|
|
14
12
|
@import 'Figure/component.figure';
|
|
15
13
|
@import 'Figure/component.figure-license';
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
|
|
3
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
4
|
-
|
|
5
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
6
|
-
|
|
7
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
8
|
-
|
|
9
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
10
|
-
|
|
11
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
12
|
-
|
|
13
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Copyright (c) 2019-present, NDLA.
|
|
17
|
-
*
|
|
18
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
19
|
-
* LICENSE file in the root directory of this source tree.
|
|
20
|
-
*
|
|
21
|
-
*/
|
|
22
|
-
import React, { useRef } from 'react';
|
|
23
|
-
import BEMHelper from 'react-bem-helper';
|
|
24
|
-
import { useComponentSize, useIsomorphicLayoutEffect } from '@ndla/hooks';
|
|
25
|
-
import { useTranslation } from 'react-i18next';
|
|
26
|
-
import BreadcrumbItem from './BreadcrumbItem';
|
|
27
|
-
import { jsx as ___EmotionJSX } from "@emotion/core";
|
|
28
|
-
var classes = BEMHelper({
|
|
29
|
-
name: 'breadcrumb-block',
|
|
30
|
-
prefix: 'c-'
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
var BreadcrumbBlock = function BreadcrumbBlock(_ref) {
|
|
34
|
-
var children = _ref.children,
|
|
35
|
-
items = _ref.items;
|
|
36
|
-
|
|
37
|
-
var _useTranslation = useTranslation(),
|
|
38
|
-
t = _useTranslation.t;
|
|
39
|
-
|
|
40
|
-
var olRef = useRef();
|
|
41
|
-
var containerRef = useRef(null); // No idiomatic way of dealing with sets of refs yet
|
|
42
|
-
// See: https://github.com/facebook/react/issues/14072#issuecomment-446777406
|
|
43
|
-
|
|
44
|
-
var breadcrumbItemRefs = useRef(new Map()).current;
|
|
45
|
-
var size = useComponentSize(containerRef);
|
|
46
|
-
useIsomorphicLayoutEffect(function () {
|
|
47
|
-
// Create an array of all breadcrumb item refs
|
|
48
|
-
var items = Array.from(breadcrumbItemRefs).map(function (_ref2) {
|
|
49
|
-
var _ref3 = _slicedToArray(_ref2, 2),
|
|
50
|
-
key = _ref3[0],
|
|
51
|
-
value = _ref3[1];
|
|
52
|
-
|
|
53
|
-
return value;
|
|
54
|
-
}); // Clear max width on all items
|
|
55
|
-
|
|
56
|
-
items.forEach(function (el) {
|
|
57
|
-
el.setMaxWidth('none');
|
|
58
|
-
}); // Set maxWidth on breadcrumb text items iteratively until
|
|
59
|
-
// the ordered list fits on a single line. It's on a single line
|
|
60
|
-
// if the height of the list is less then 70.
|
|
61
|
-
|
|
62
|
-
items.forEach(function (el) {
|
|
63
|
-
if (olRef.current.offsetHeight > 70) {
|
|
64
|
-
el.setMaxWidth('40px');
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}, [size]);
|
|
68
|
-
return ___EmotionJSX("nav", _extends({}, classes(''), {
|
|
69
|
-
ref: containerRef,
|
|
70
|
-
"aria-label": t('breadcrumb.breadcrumb')
|
|
71
|
-
}), children, ___EmotionJSX("ol", _extends({}, classes('list'), {
|
|
72
|
-
ref: olRef
|
|
73
|
-
}), items.map(function (item, i) {
|
|
74
|
-
return ___EmotionJSX(BreadcrumbItem, {
|
|
75
|
-
ref: function ref(element) {
|
|
76
|
-
return element === null || i === 0 // skip first item which is never truncated
|
|
77
|
-
? breadcrumbItemRefs["delete"](item.to) : breadcrumbItemRefs.set(item.to, element);
|
|
78
|
-
},
|
|
79
|
-
classes: classes,
|
|
80
|
-
key: item.to,
|
|
81
|
-
isCurrent: i === items.length - 1,
|
|
82
|
-
to: item.to,
|
|
83
|
-
name: item.name,
|
|
84
|
-
home: false,
|
|
85
|
-
invertedStyle: false
|
|
86
|
-
}, item.name);
|
|
87
|
-
})));
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
export default BreadcrumbBlock;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-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
|
-
import { ReactNode } from 'react';
|
|
9
|
-
import { BreadcrumbItemI } from './Breadcrumb';
|
|
10
|
-
interface Props {
|
|
11
|
-
children?: ReactNode;
|
|
12
|
-
items: BreadcrumbItemI[];
|
|
13
|
-
}
|
|
14
|
-
declare const BreadcrumbBlock: ({ children, items }: Props) => JSX.Element;
|
|
15
|
-
export default BreadcrumbBlock;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "__esModule", {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
exports["default"] = void 0;
|
|
9
|
-
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
|
|
12
|
-
var _reactBemHelper = _interopRequireDefault(require("react-bem-helper"));
|
|
13
|
-
|
|
14
|
-
var _hooks = require("@ndla/hooks");
|
|
15
|
-
|
|
16
|
-
var _reactI18next = require("react-i18next");
|
|
17
|
-
|
|
18
|
-
var _BreadcrumbItem = _interopRequireDefault(require("./BreadcrumbItem"));
|
|
19
|
-
|
|
20
|
-
var _core = require("@emotion/core");
|
|
21
|
-
|
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
23
|
-
|
|
24
|
-
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
25
|
-
|
|
26
|
-
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
|
-
|
|
28
|
-
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
29
|
-
|
|
30
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
31
|
-
|
|
32
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
-
|
|
34
|
-
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
35
|
-
|
|
36
|
-
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
37
|
-
|
|
38
|
-
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
39
|
-
|
|
40
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
41
|
-
|
|
42
|
-
var classes = (0, _reactBemHelper["default"])({
|
|
43
|
-
name: 'breadcrumb-block',
|
|
44
|
-
prefix: 'c-'
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
var BreadcrumbBlock = function BreadcrumbBlock(_ref) {
|
|
48
|
-
var children = _ref.children,
|
|
49
|
-
items = _ref.items;
|
|
50
|
-
|
|
51
|
-
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
52
|
-
t = _useTranslation.t;
|
|
53
|
-
|
|
54
|
-
var olRef = (0, _react.useRef)();
|
|
55
|
-
var containerRef = (0, _react.useRef)(null); // No idiomatic way of dealing with sets of refs yet
|
|
56
|
-
// See: https://github.com/facebook/react/issues/14072#issuecomment-446777406
|
|
57
|
-
|
|
58
|
-
var breadcrumbItemRefs = (0, _react.useRef)(new Map()).current;
|
|
59
|
-
var size = (0, _hooks.useComponentSize)(containerRef);
|
|
60
|
-
(0, _hooks.useIsomorphicLayoutEffect)(function () {
|
|
61
|
-
// Create an array of all breadcrumb item refs
|
|
62
|
-
var items = Array.from(breadcrumbItemRefs).map(function (_ref2) {
|
|
63
|
-
var _ref3 = _slicedToArray(_ref2, 2),
|
|
64
|
-
key = _ref3[0],
|
|
65
|
-
value = _ref3[1];
|
|
66
|
-
|
|
67
|
-
return value;
|
|
68
|
-
}); // Clear max width on all items
|
|
69
|
-
|
|
70
|
-
items.forEach(function (el) {
|
|
71
|
-
el.setMaxWidth('none');
|
|
72
|
-
}); // Set maxWidth on breadcrumb text items iteratively until
|
|
73
|
-
// the ordered list fits on a single line. It's on a single line
|
|
74
|
-
// if the height of the list is less then 70.
|
|
75
|
-
|
|
76
|
-
items.forEach(function (el) {
|
|
77
|
-
if (olRef.current.offsetHeight > 70) {
|
|
78
|
-
el.setMaxWidth('40px');
|
|
79
|
-
}
|
|
80
|
-
});
|
|
81
|
-
}, [size]);
|
|
82
|
-
return (0, _core.jsx)("nav", _extends({}, classes(''), {
|
|
83
|
-
ref: containerRef,
|
|
84
|
-
"aria-label": t('breadcrumb.breadcrumb')
|
|
85
|
-
}), children, (0, _core.jsx)("ol", _extends({}, classes('list'), {
|
|
86
|
-
ref: olRef
|
|
87
|
-
}), items.map(function (item, i) {
|
|
88
|
-
return (0, _core.jsx)(_BreadcrumbItem["default"], {
|
|
89
|
-
ref: function ref(element) {
|
|
90
|
-
return element === null || i === 0 // skip first item which is never truncated
|
|
91
|
-
? breadcrumbItemRefs["delete"](item.to) : breadcrumbItemRefs.set(item.to, element);
|
|
92
|
-
},
|
|
93
|
-
classes: classes,
|
|
94
|
-
key: item.to,
|
|
95
|
-
isCurrent: i === items.length - 1,
|
|
96
|
-
to: item.to,
|
|
97
|
-
name: item.name,
|
|
98
|
-
home: false,
|
|
99
|
-
invertedStyle: false
|
|
100
|
-
}, item.name);
|
|
101
|
-
})));
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
var _default = BreadcrumbBlock;
|
|
105
|
-
exports["default"] = _default;
|
package/src/.DS_Store
DELETED
|
Binary file
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-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
|
-
|
|
9
|
-
import React, { ReactNode, useRef } from 'react';
|
|
10
|
-
import BEMHelper, { ReturnObject } from 'react-bem-helper';
|
|
11
|
-
import { useComponentSize, useIsomorphicLayoutEffect } from '@ndla/hooks';
|
|
12
|
-
import { useTranslation } from 'react-i18next';
|
|
13
|
-
import BreadcrumbItem from './BreadcrumbItem';
|
|
14
|
-
import { BreadcrumbItemI } from './Breadcrumb';
|
|
15
|
-
|
|
16
|
-
const classes: BEMHelper<ReturnObject> = BEMHelper({
|
|
17
|
-
name: 'breadcrumb-block',
|
|
18
|
-
prefix: 'c-',
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
interface Props {
|
|
22
|
-
children?: ReactNode;
|
|
23
|
-
items: BreadcrumbItemI[];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const BreadcrumbBlock = ({ children, items }: Props) => {
|
|
27
|
-
const { t } = useTranslation();
|
|
28
|
-
const olRef = useRef<any>();
|
|
29
|
-
const containerRef = useRef<HTMLDivElement>(null);
|
|
30
|
-
// No idiomatic way of dealing with sets of refs yet
|
|
31
|
-
// See: https://github.com/facebook/react/issues/14072#issuecomment-446777406
|
|
32
|
-
const breadcrumbItemRefs = useRef(new Map()).current;
|
|
33
|
-
const size = useComponentSize(containerRef);
|
|
34
|
-
|
|
35
|
-
useIsomorphicLayoutEffect(() => {
|
|
36
|
-
// Create an array of all breadcrumb item refs
|
|
37
|
-
const items = Array.from(breadcrumbItemRefs).map(([key, value]) => value);
|
|
38
|
-
|
|
39
|
-
// Clear max width on all items
|
|
40
|
-
items.forEach((el) => {
|
|
41
|
-
el.setMaxWidth('none');
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
// Set maxWidth on breadcrumb text items iteratively until
|
|
45
|
-
// the ordered list fits on a single line. It's on a single line
|
|
46
|
-
// if the height of the list is less then 70.
|
|
47
|
-
items.forEach((el) => {
|
|
48
|
-
if (olRef.current.offsetHeight > 70) {
|
|
49
|
-
el.setMaxWidth('40px');
|
|
50
|
-
}
|
|
51
|
-
});
|
|
52
|
-
}, [size]);
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
-
<nav {...classes('')} ref={containerRef} aria-label={t('breadcrumb.breadcrumb')}>
|
|
56
|
-
{children}
|
|
57
|
-
<ol {...classes('list')} ref={olRef}>
|
|
58
|
-
{items.map((item, i) => (
|
|
59
|
-
<BreadcrumbItem
|
|
60
|
-
ref={(element) =>
|
|
61
|
-
element === null || i === 0 // skip first item which is never truncated
|
|
62
|
-
? breadcrumbItemRefs.delete(item.to)
|
|
63
|
-
: breadcrumbItemRefs.set(item.to, element)
|
|
64
|
-
}
|
|
65
|
-
classes={classes}
|
|
66
|
-
key={item.to}
|
|
67
|
-
isCurrent={i === items.length - 1}
|
|
68
|
-
to={item.to}
|
|
69
|
-
name={item.name}
|
|
70
|
-
home={false}
|
|
71
|
-
invertedStyle={false}>
|
|
72
|
-
{item.name}
|
|
73
|
-
</BreadcrumbItem>
|
|
74
|
-
))}
|
|
75
|
-
</ol>
|
|
76
|
-
</nav>
|
|
77
|
-
);
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
export default BreadcrumbBlock;
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
** BREADCRUMB BLOCK
|
|
3
|
-
**
|
|
4
|
-
** EXAMPLE:
|
|
5
|
-
** <div class="c-breadcrumb-block">
|
|
6
|
-
** <ol class="c-breadcrumb-block__list">
|
|
7
|
-
** <li class="c-breadcrumb-block__item">
|
|
8
|
-
** <a href="#">Medieuttrykk og mediesamfunnet</a>
|
|
9
|
-
** </li>
|
|
10
|
-
** <li class="c-breadcrumb-block__item>
|
|
11
|
-
** <a href="#">Idéutvikling</a>
|
|
12
|
-
** </li>
|
|
13
|
-
** </ol>
|
|
14
|
-
** </div>
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
.c-breadcrumb-block {
|
|
18
|
-
display: none;
|
|
19
|
-
|
|
20
|
-
@include mq(desktop) {
|
|
21
|
-
display: block;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.c-breadcrumb-block__list {
|
|
26
|
-
padding-top: 1px;
|
|
27
|
-
margin-left: $spacing;
|
|
28
|
-
margin-bottom: 0;
|
|
29
|
-
margin-top: 0;
|
|
30
|
-
display: inline-block;
|
|
31
|
-
list-style: none;
|
|
32
|
-
text-align: left;
|
|
33
|
-
}
|
|
34
|
-
.c-breadcrumb-block__item {
|
|
35
|
-
display: inline-block;
|
|
36
|
-
margin-right: $spacing--small/2;
|
|
37
|
-
margin-bottom: 0;
|
|
38
|
-
text-transform: none;
|
|
39
|
-
a:hover {
|
|
40
|
-
box-shadow: none;
|
|
41
|
-
}
|
|
42
|
-
&:before {
|
|
43
|
-
display: none;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.c-icon {
|
|
47
|
-
width: 14px;
|
|
48
|
-
height: 14px;
|
|
49
|
-
color: $brand-color;
|
|
50
|
-
margin-top: -1px;
|
|
51
|
-
margin-left: $spacing--small/2;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
&:first-child {
|
|
55
|
-
.c-icon {
|
|
56
|
-
display: none;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
&:not(:first-child) {
|
|
61
|
-
display: inline-flex;
|
|
62
|
-
align-items: center;
|
|
63
|
-
a,
|
|
64
|
-
span {
|
|
65
|
-
text-overflow: ellipsis;
|
|
66
|
-
white-space: nowrap;
|
|
67
|
-
overflow: hidden;
|
|
68
|
-
display: inline-block;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
&:last-child {
|
|
73
|
-
.c-icon {
|
|
74
|
-
display: none;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
span {
|
|
79
|
-
color: $brand-color;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
.c-breadcrumb-block__item:last-child {
|
|
83
|
-
&:after {
|
|
84
|
-
display: none;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
.c-breadcrumb-block__item:nth-child(1) {
|
|
88
|
-
display: block;
|
|
89
|
-
text-align: left;
|
|
90
|
-
@include inuit-font-size(14px);
|
|
91
|
-
font-weight: $font-weight-bold;
|
|
92
|
-
&:after {
|
|
93
|
-
display: none;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
.c-breadcrumb-block__item--home {
|
|
97
|
-
display: none;
|
|
98
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
** BREADCRUMB
|
|
3
|
-
**
|
|
4
|
-
** EXAMPLE:
|
|
5
|
-
** <div class="c-breadcrumb">
|
|
6
|
-
** <ol class="c-breadcrumb__list">
|
|
7
|
-
** <li class="c-breadcrumb__item c-breadcrumb__item--home">
|
|
8
|
-
** <a href="#"><svg home /></a>
|
|
9
|
-
** </li>
|
|
10
|
-
** <li class="c-breadcrumb__item">
|
|
11
|
-
** <a href="#">Medieuttrykk og mediesamfunnet</a>
|
|
12
|
-
** </li>
|
|
13
|
-
** </ol>
|
|
14
|
-
** </div>
|
|
15
|
-
**/
|
|
16
|
-
|
|
17
|
-
.c-breadcrumb {
|
|
18
|
-
max-width: 100%;
|
|
19
|
-
@include inuit-font-size(18px);
|
|
20
|
-
display: block;
|
|
21
|
-
}
|
|
22
|
-
.c-breadcrumb__list {
|
|
23
|
-
display: inline-block;
|
|
24
|
-
padding-left: 0;
|
|
25
|
-
margin-bottom: 0;
|
|
26
|
-
margin-top: 0;
|
|
27
|
-
list-style: none;
|
|
28
|
-
}
|
|
29
|
-
.c-breadcrumb__item {
|
|
30
|
-
font-weight: $font-weight-normal;
|
|
31
|
-
padding-right: $spacing--small / 2;
|
|
32
|
-
margin-bottom: 0;
|
|
33
|
-
margin-left: 0;
|
|
34
|
-
display: block;
|
|
35
|
-
|
|
36
|
-
&:not(.c-breadcrumb__item--home) {
|
|
37
|
-
.c-icon {
|
|
38
|
-
width: 14px;
|
|
39
|
-
height: 14px;
|
|
40
|
-
margin-left: $spacing--small/2;
|
|
41
|
-
margin-top: -1px;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@include mq(tablet) {
|
|
46
|
-
display: inline-block;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
a {
|
|
50
|
-
text-decoration: none;
|
|
51
|
-
color: $primary-color;
|
|
52
|
-
|
|
53
|
-
&:hover,
|
|
54
|
-
&:active,
|
|
55
|
-
&:focus {
|
|
56
|
-
color: $primary-color;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
&--invertedStyle {
|
|
61
|
-
color: #fff;
|
|
62
|
-
a {
|
|
63
|
-
color: #fff;
|
|
64
|
-
|
|
65
|
-
&:hover,
|
|
66
|
-
&:active,
|
|
67
|
-
&:focus {
|
|
68
|
-
color: #fff;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
&:before {
|
|
74
|
-
display: none;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
&:first-child {
|
|
78
|
-
a {
|
|
79
|
-
box-shadow: none;
|
|
80
|
-
border-bottom: none;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
&:last-child {
|
|
84
|
-
.c-icon {
|
|
85
|
-
display: none;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
.c-breadcrumb__item--home {
|
|
90
|
-
a {
|
|
91
|
-
border-bottom: none;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
@include mq(tablet) {
|
|
95
|
-
padding-right: $spacing--small;
|
|
96
|
-
|
|
97
|
-
&:after {
|
|
98
|
-
padding-left: $spacing--small;
|
|
99
|
-
content: '|';
|
|
100
|
-
@include inuit-font-size(14px);
|
|
101
|
-
color: $primary-color;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|