richie-education 2.11.0 → 2.12.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/i18n/locales/ar-SA.json +4 -0
- package/i18n/locales/es-ES.json +4 -0
- package/i18n/locales/fr-CA.json +4 -0
- package/i18n/locales/fr-FR.json +4 -0
- package/i18n/locales/pt-PT.json +4 -0
- package/i18n/locales/ru-RU.json +4 -0
- package/js/components/Banner/index.spec.tsx +31 -0
- package/js/components/Banner/index.tsx +29 -0
- package/js/components/CourseGlimpse/index.spec.tsx +7 -4
- package/js/components/CourseGlimpse/index.tsx +8 -4
- package/js/data/useStaticFilters/index.spec.tsx +8 -2
- package/js/data/useStaticFilters/index.tsx +18 -1
- package/js/translations/ar-SA.json +1 -1
- package/js/translations/es-ES.json +1 -1
- package/js/translations/fr-CA.json +1 -1
- package/js/translations/fr-FR.json +1 -1
- package/js/translations/pt-PT.json +1 -1
- package/js/translations/ru-RU.json +1 -1
- package/package.json +25 -25
- package/scss/colors/_theme.scss +4 -0
- package/scss/components/templates/courses/cms/_course_detail.scss +62 -0
- package/scss/objects/_course_glimpses.scss +36 -36
- package/scss/objects/_react-autosuggest.scss +5 -1
package/i18n/locales/ar-SA.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "Loading login status..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Courses"
|
|
185
189
|
}
|
|
186
190
|
}
|
package/i18n/locales/es-ES.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "Cargando estado de inicio de sesión..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Cursos"
|
|
185
189
|
}
|
|
186
190
|
}
|
package/i18n/locales/fr-CA.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "Vérification de l'état de connexion..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Cours"
|
|
185
189
|
}
|
|
186
190
|
}
|
package/i18n/locales/fr-FR.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "Vérification de l'état de connexion..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Cours"
|
|
185
189
|
}
|
|
186
190
|
}
|
package/i18n/locales/pt-PT.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "A carregar estado do login..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Cursos"
|
|
185
189
|
}
|
|
186
190
|
}
|
package/i18n/locales/ru-RU.json
CHANGED
|
@@ -182,5 +182,9 @@
|
|
|
182
182
|
"components.UserLogin.spinnerText": {
|
|
183
183
|
"description": "Accessibility text for the spinner in the login area.",
|
|
184
184
|
"message": "Загрузка статуса входа..."
|
|
185
|
+
},
|
|
186
|
+
"components.useStaticFilters.courses": {
|
|
187
|
+
"description": "localized human_name label for coursesConfig filter name",
|
|
188
|
+
"message": "Курсы"
|
|
185
189
|
}
|
|
186
190
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { render } from '@testing-library/react';
|
|
2
|
+
import Banner, { BannerType } from '.';
|
|
3
|
+
|
|
4
|
+
describe('Banner', () => {
|
|
5
|
+
it('displays a message', () => {
|
|
6
|
+
const { getByText } = render(
|
|
7
|
+
<Banner type={BannerType.INFO} message="A message for test purpose" />,
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
const $message = getByText('A message for test purpose');
|
|
11
|
+
expect(Object.values($message.classList)).toEqual(['banner__message']);
|
|
12
|
+
});
|
|
13
|
+
|
|
14
|
+
it('has a type property', () => {
|
|
15
|
+
const types = Object.keys(BannerType);
|
|
16
|
+
const randomIndex = Math.floor(Math.random() * types.length);
|
|
17
|
+
const randomType = types[randomIndex] as BannerType;
|
|
18
|
+
|
|
19
|
+
const { container } = render(<Banner type={randomType} message="A message for test purpose" />);
|
|
20
|
+
const $banner = container.querySelector(`.banner.banner--${randomType}`);
|
|
21
|
+
|
|
22
|
+
expect($banner).not.toBeNull();
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('has a rounded boolean property', () => {
|
|
26
|
+
const { container } = render(<Banner message="A message for test purpose" rounded />);
|
|
27
|
+
const $banner = container.querySelector('.banner.banner--info.banner--rounded');
|
|
28
|
+
|
|
29
|
+
expect($banner).not.toBeNull();
|
|
30
|
+
});
|
|
31
|
+
});
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
export enum BannerType {
|
|
4
|
+
ERROR = 'error',
|
|
5
|
+
INFO = 'info',
|
|
6
|
+
SUCCESS = 'success',
|
|
7
|
+
WARNING = 'warning',
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
interface BannerProps {
|
|
11
|
+
message: string;
|
|
12
|
+
type?: BannerType;
|
|
13
|
+
rounded?: boolean;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const Banner = ({ message, rounded, type = BannerType.INFO }: BannerProps) => {
|
|
17
|
+
const className = useMemo(
|
|
18
|
+
(): string => ['banner', `banner--${type}`, ...(rounded ? ['banner--rounded'] : [])].join(' '),
|
|
19
|
+
[type, rounded],
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<div className={className}>
|
|
24
|
+
<p className="banner__message">{message}</p>
|
|
25
|
+
</div>
|
|
26
|
+
);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export default Banner;
|
|
@@ -54,7 +54,7 @@ describe('components/CourseGlimpse', () => {
|
|
|
54
54
|
// The link that wraps the course glimpse should have no title as its content is explicit enough
|
|
55
55
|
expect(screen.getByRole('link')).not.toHaveAttribute('title');
|
|
56
56
|
// The course glimpse shows the relevant information
|
|
57
|
-
screen.
|
|
57
|
+
screen.getByRole('heading', { name: 'Course 42', level: 3 });
|
|
58
58
|
screen.getByText('123abc');
|
|
59
59
|
screen.getByText('Some Organization');
|
|
60
60
|
// Matches on 'Starts on Mar 14, 2019', date is wrapped with intl <span>
|
|
@@ -98,7 +98,7 @@ describe('components/CourseGlimpse', () => {
|
|
|
98
98
|
);
|
|
99
99
|
|
|
100
100
|
// Make sure the component renders and shows the state
|
|
101
|
-
screen.
|
|
101
|
+
screen.getByRole('heading', { name: 'Course 42', level: 3 });
|
|
102
102
|
screen.getByText('Archived');
|
|
103
103
|
});
|
|
104
104
|
|
|
@@ -109,7 +109,7 @@ describe('components/CourseGlimpse', () => {
|
|
|
109
109
|
</IntlProvider>,
|
|
110
110
|
);
|
|
111
111
|
|
|
112
|
-
screen.
|
|
112
|
+
screen.getByRole('heading', { name: 'Course 42', level: 3 });
|
|
113
113
|
screen.getByText('Cover');
|
|
114
114
|
});
|
|
115
115
|
|
|
@@ -120,6 +120,9 @@ describe('components/CourseGlimpse', () => {
|
|
|
120
120
|
</IntlProvider>,
|
|
121
121
|
);
|
|
122
122
|
|
|
123
|
-
expect(screen.getByText('-').parentElement).toHaveClass(
|
|
123
|
+
expect(screen.getByText('-').parentElement).toHaveClass(
|
|
124
|
+
'course-glimpse__metadata',
|
|
125
|
+
'course-glimpse__metadata--code',
|
|
126
|
+
);
|
|
124
127
|
});
|
|
125
128
|
});
|
|
@@ -51,7 +51,9 @@ const CourseGlimpseBase = ({ context, course }: CourseGlimpseProps & CommonDataP
|
|
|
51
51
|
</div>
|
|
52
52
|
) : null}
|
|
53
53
|
<div className="course-glimpse__wrapper">
|
|
54
|
-
<
|
|
54
|
+
<h3 className="course-glimpse__title" title={course.title}>
|
|
55
|
+
{course.title}
|
|
56
|
+
</h3>
|
|
55
57
|
{course.organization_highlighted_cover_image ? (
|
|
56
58
|
<div className="course-glimpse__organization-logo">
|
|
57
59
|
{/* alt forced to empty string because it's a decorative image */}
|
|
@@ -63,13 +65,15 @@ const CourseGlimpseBase = ({ context, course }: CourseGlimpseProps & CommonDataP
|
|
|
63
65
|
/>
|
|
64
66
|
</div>
|
|
65
67
|
) : null}
|
|
66
|
-
<div className="course-
|
|
68
|
+
<div className="course-glimpse__metadata course-glimpse__metadata--organization">
|
|
67
69
|
<svg aria-hidden={true} role="img" className="icon">
|
|
68
70
|
<use xlinkHref="#icon-org" />
|
|
69
71
|
</svg>
|
|
70
|
-
<span
|
|
72
|
+
<span className="title" title={course.organization_highlighted}>
|
|
73
|
+
{course.organization_highlighted}
|
|
74
|
+
</span>
|
|
71
75
|
</div>
|
|
72
|
-
<div className="course-
|
|
76
|
+
<div className="course-glimpse__metadata course-glimpse__metadata--code">
|
|
73
77
|
<svg aria-hidden={true} role="img" className="icon">
|
|
74
78
|
<use xlinkHref="#icon-barcode" />
|
|
75
79
|
</svg>
|
|
@@ -4,6 +4,8 @@ import fetchMock from 'fetch-mock';
|
|
|
4
4
|
|
|
5
5
|
import { FilterDefinition } from 'types/filters';
|
|
6
6
|
import { Deferred } from 'utils/test/deferred';
|
|
7
|
+
import { IntlProvider } from 'react-intl';
|
|
8
|
+
import { PropsWithChildren } from 'react';
|
|
7
9
|
import { useStaticFilters } from '.';
|
|
8
10
|
|
|
9
11
|
describe('data/useStaticFilters', () => {
|
|
@@ -51,12 +53,16 @@ describe('data/useStaticFilters', () => {
|
|
|
51
53
|
subjects,
|
|
52
54
|
};
|
|
53
55
|
|
|
56
|
+
const wrapper = ({ children }: PropsWithChildren<any>) => (
|
|
57
|
+
<IntlProvider locale="en">{children}</IntlProvider>
|
|
58
|
+
);
|
|
59
|
+
|
|
54
60
|
afterEach(() => fetchMock.restore());
|
|
55
61
|
|
|
56
62
|
it('gets and returns the static filter definitions', async () => {
|
|
57
63
|
const deferred = new Deferred();
|
|
58
64
|
fetchMock.get('/api/v1.0/filter-definitions/', deferred.promise);
|
|
59
|
-
const { result } = renderHook(useStaticFilters);
|
|
65
|
+
const { result } = renderHook(useStaticFilters, { wrapper });
|
|
60
66
|
|
|
61
67
|
// No request is made until we actually use the hook's return value
|
|
62
68
|
expect(fetchMock.called('/api/v1.0/filter-definitions/')).toEqual(false);
|
|
@@ -83,7 +89,7 @@ describe('data/useStaticFilters', () => {
|
|
|
83
89
|
|
|
84
90
|
it('includes a course config when requested', async () => {
|
|
85
91
|
fetchMock.get('/api/v1.0/filter-definitions/', staticFilterDefinitions);
|
|
86
|
-
const { result } = renderHook(() => useStaticFilters(true));
|
|
92
|
+
const { result } = renderHook(() => useStaticFilters(true), { wrapper });
|
|
87
93
|
|
|
88
94
|
let filters;
|
|
89
95
|
await act(async () => {
|
|
@@ -3,6 +3,7 @@ import { useRef, useState } from 'react';
|
|
|
3
3
|
import { FilterDefinition, StaticFilterDefinitions } from 'types/filters';
|
|
4
4
|
import { Nullable } from 'types/utils';
|
|
5
5
|
import { useAsyncEffect } from 'utils/useAsyncEffect';
|
|
6
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
6
7
|
|
|
7
8
|
// Our search and autosuggestion pipeline operated based on filter definitions. Obviously, we can't filters
|
|
8
9
|
// courses by courses, but we still need a filter-definition-like config to run courses autocompletion.
|
|
@@ -15,6 +16,14 @@ const coursesConfig: FilterDefinition = {
|
|
|
15
16
|
position: 99,
|
|
16
17
|
};
|
|
17
18
|
|
|
19
|
+
const messages = defineMessages({
|
|
20
|
+
courses: {
|
|
21
|
+
defaultMessage: 'Courses',
|
|
22
|
+
description: 'localized human_name label for coursesConfig filter name',
|
|
23
|
+
id: 'components.useStaticFilters.courses',
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
18
27
|
/**
|
|
19
28
|
* Hook to provide static filter definitions to components as a promise while abstracting away
|
|
20
29
|
* data-fetching & caching logic.
|
|
@@ -23,6 +32,7 @@ const coursesConfig: FilterDefinition = {
|
|
|
23
32
|
*/
|
|
24
33
|
export const useStaticFilters = (includeCoursesConfig = false) => {
|
|
25
34
|
const [needsFilters, setNeedsFilters] = useState(false);
|
|
35
|
+
const intl = useIntl();
|
|
26
36
|
|
|
27
37
|
const filtersResolver = useRef<Nullable<(filters: StaticFilterDefinitions) => void>>(null);
|
|
28
38
|
const [filtersPromise] = useState<Promise<StaticFilterDefinitions>>(
|
|
@@ -40,7 +50,14 @@ export const useStaticFilters = (includeCoursesConfig = false) => {
|
|
|
40
50
|
|
|
41
51
|
filtersResolver.current!({
|
|
42
52
|
...filters,
|
|
43
|
-
...(includeCoursesConfig
|
|
53
|
+
...(includeCoursesConfig
|
|
54
|
+
? {
|
|
55
|
+
courses: {
|
|
56
|
+
...coursesConfig,
|
|
57
|
+
human_name: intl.formatMessage(messages.courses),
|
|
58
|
+
},
|
|
59
|
+
}
|
|
60
|
+
: {}),
|
|
44
61
|
});
|
|
45
62
|
}
|
|
46
63
|
}, [needsFilters]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Cover","components.CourseGlimpseList.courseCount":"Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseRunEnrollment.enroll":"Enroll now","components.CourseRunEnrollment.enrolled":"You are enrolled in this course run","components.CourseRunEnrollment.enrollmentClosed":"Enrollment in this course run is closed at the moment","components.CourseRunEnrollment.enrollmentFailed":"Your enrollment request failed.","components.CourseRunEnrollment.goToCourse":"Go to course","components.CourseRunEnrollment.loadingInitial":"Loading enrollment information...","components.CourseRunEnrollment.loginToEnroll":"Log in to enroll","components.DesktopUserMenu.menuPurpose":"Access to your profile settings","components.LanguageSelector.currentlySelected":"(currently selected)","components.LanguageSelector.languages":"Languages","components.LanguageSelector.selectLanguage":"Select a language:","components.LanguageSelector.switchToLanguage":"Switch to {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Currently reading last page {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Currently reading page {page}","components.PaginateCourseSearch.lastPageN":"Last page {page}","components.PaginateCourseSearch.nextPageN":"Next page {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Previous page {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Search for courses","components.Search.errorMessage":"Something's wrong! Courses could not be loaded.","components.Search.hideFiltersPane":"Hide filters pane","components.Search.showFiltersPane":"Show filters pane","components.Search.spinnerText":"Loading search results...","components.Search.textQueryLengthWarning":"Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query.","components.SearchFilterGroupModal.closeModal":"Close modal","components.SearchFilterGroupModal.error":"There was an error while searching for {filterName}.","components.SearchFilterGroupModal.inputLabel":"Search for filters to add","components.SearchFilterGroupModal.inputPlaceholder":"Search in { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Load more results","components.SearchFilterGroupModal.loadingResults":"Loading search results...","components.SearchFilterGroupModal.modalTitle":"Add filters for {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"More options","components.SearchFilterGroupModal.queryTooShort":"Type at least 3 characters to start searching.","components.SearchFilterValueParent.ariaHideChildren":"Hide additional filters for {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Show more filters for {filterValueName}","components.SearchFiltersPane.clearFilters":"Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}","components.SearchFiltersPane.title":"Filter courses","components.SearchInput.button":"Search","components.SearchSuggestField.searchFieldPlaceholder":"Search for courses, organizations, categories","components.UserLogin.logIn":"Log in","components.UserLogin.logOut":"Log out","components.UserLogin.signup":"Sign up","components.UserLogin.spinnerText":"Loading login status..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Cover","components.CourseGlimpseList.courseCount":"Showing {start, number} to {end, number} of {courseCount, number} {courseCount, plural, one {course} other {courses}} matching your search","components.CourseRunEnrollment.enroll":"Enroll now","components.CourseRunEnrollment.enrolled":"You are enrolled in this course run","components.CourseRunEnrollment.enrollmentClosed":"Enrollment in this course run is closed at the moment","components.CourseRunEnrollment.enrollmentFailed":"Your enrollment request failed.","components.CourseRunEnrollment.goToCourse":"Go to course","components.CourseRunEnrollment.loadingInitial":"Loading enrollment information...","components.CourseRunEnrollment.loginToEnroll":"Log in to enroll","components.DesktopUserMenu.menuPurpose":"Access to your profile settings","components.LanguageSelector.currentlySelected":"(currently selected)","components.LanguageSelector.languages":"Languages","components.LanguageSelector.selectLanguage":"Select a language:","components.LanguageSelector.switchToLanguage":"Switch to {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Currently reading last page {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Currently reading page {page}","components.PaginateCourseSearch.lastPageN":"Last page {page}","components.PaginateCourseSearch.nextPageN":"Next page {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Previous page {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Search for courses","components.Search.errorMessage":"Something's wrong! Courses could not be loaded.","components.Search.hideFiltersPane":"Hide filters pane","components.Search.showFiltersPane":"Show filters pane","components.Search.spinnerText":"Loading search results...","components.Search.textQueryLengthWarning":"Text search requires at least 3 characters. { query } is not long enough to search. Search results will not be affected by this query.","components.SearchFilterGroupModal.closeModal":"Close modal","components.SearchFilterGroupModal.error":"There was an error while searching for {filterName}.","components.SearchFilterGroupModal.inputLabel":"Search for filters to add","components.SearchFilterGroupModal.inputPlaceholder":"Search in { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Load more results","components.SearchFilterGroupModal.loadingResults":"Loading search results...","components.SearchFilterGroupModal.modalTitle":"Add filters for {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"More options","components.SearchFilterGroupModal.queryTooShort":"Type at least 3 characters to start searching.","components.SearchFilterValueParent.ariaHideChildren":"Hide additional filters for {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Show more filters for {filterValueName}","components.SearchFiltersPane.clearFilters":"Clear {activeFilterCount, number} active {activeFilterCount, plural, one {filter} other {filters}}","components.SearchFiltersPane.title":"Filter courses","components.SearchInput.button":"Search","components.SearchSuggestField.searchFieldPlaceholder":"Search for courses, organizations, categories","components.UserLogin.logIn":"Log in","components.UserLogin.logOut":"Log out","components.UserLogin.signup":"Sign up","components.UserLogin.spinnerText":"Loading login status...","components.useStaticFilters.courses":"Courses"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Portada","components.CourseGlimpseList.courseCount":"Mostrando {start, number} a {end, number} de {courseCount, number} ¡ {courseCount, plural, one {curso} other {cursos}} que coinciden con su búsqueda","components.CourseRunEnrollment.enroll":"Inscribirse ahora","components.CourseRunEnrollment.enrolled":"Se ha inscrito en este curso","components.CourseRunEnrollment.enrollmentClosed":"La inscripción en este curso está cerrada por el momento","components.CourseRunEnrollment.enrollmentFailed":"Su solicitud de inscripción ha fallado.","components.CourseRunEnrollment.goToCourse":"Ir al curso","components.CourseRunEnrollment.loadingInitial":"Cargando información de inscripción...","components.CourseRunEnrollment.loginToEnroll":"Inicia sesión para inscribirse","components.DesktopUserMenu.menuPurpose":"Acceso a la configuración de su perfil","components.LanguageSelector.currentlySelected":"(actualmente seleccionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Seleccione un idioma:","components.LanguageSelector.switchToLanguage":"Cambiar a {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Leyendo la última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actualmente leyendo la página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página siguiente {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginación","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Buscar cursos","components.Search.errorMessage":"¡Algo está mal! No se han podido cargar los cursos.","components.Search.hideFiltersPane":"Ocultar panel de filtros","components.Search.showFiltersPane":"Mostrar panel de filtros","components.Search.spinnerText":"Cargando resultados de búsqueda...","components.Search.textQueryLengthWarning":"La búsqueda de texto requiere al menos 3 caracteres. { query } no es lo suficientemente larga para buscar. Los resultados de la búsqueda no se verán afectados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Cerrar ventana modal","components.SearchFilterGroupModal.error":"Se ha producido un error al buscar {filterName}.","components.SearchFilterGroupModal.inputLabel":"Buscar filtros para añadir","components.SearchFilterGroupModal.inputPlaceholder":"Buscar en { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Cargar más resultados","components.SearchFilterGroupModal.loadingResults":"Cargando resultados de búsqueda...","components.SearchFilterGroupModal.modalTitle":"Añadir filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Más opciones","components.SearchFilterGroupModal.queryTooShort":"Escriba por lo menos 3 caracteres para iniciar la búsqueda.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionales para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar más filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirar {activeFilterCount, number} activo {activeFilterCount, plural, one {filtro} other {filtros}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Buscar","components.SearchSuggestField.searchFieldPlaceholder":"Buscar cursos, organizaciones, categorías","components.UserLogin.logIn":"Iniciar sesión","components.UserLogin.logOut":"Cerrar sesión","components.UserLogin.signup":"Registrarse","components.UserLogin.spinnerText":"Cargando estado de inicio de sesión..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Portada","components.CourseGlimpseList.courseCount":"Mostrando {start, number} a {end, number} de {courseCount, number} ¡ {courseCount, plural, one {curso} other {cursos}} que coinciden con su búsqueda","components.CourseRunEnrollment.enroll":"Inscribirse ahora","components.CourseRunEnrollment.enrolled":"Se ha inscrito en este curso","components.CourseRunEnrollment.enrollmentClosed":"La inscripción en este curso está cerrada por el momento","components.CourseRunEnrollment.enrollmentFailed":"Su solicitud de inscripción ha fallado.","components.CourseRunEnrollment.goToCourse":"Ir al curso","components.CourseRunEnrollment.loadingInitial":"Cargando información de inscripción...","components.CourseRunEnrollment.loginToEnroll":"Inicia sesión para inscribirse","components.DesktopUserMenu.menuPurpose":"Acceso a la configuración de su perfil","components.LanguageSelector.currentlySelected":"(actualmente seleccionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Seleccione un idioma:","components.LanguageSelector.switchToLanguage":"Cambiar a {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Leyendo la última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actualmente leyendo la página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página siguiente {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginación","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Buscar cursos","components.Search.errorMessage":"¡Algo está mal! No se han podido cargar los cursos.","components.Search.hideFiltersPane":"Ocultar panel de filtros","components.Search.showFiltersPane":"Mostrar panel de filtros","components.Search.spinnerText":"Cargando resultados de búsqueda...","components.Search.textQueryLengthWarning":"La búsqueda de texto requiere al menos 3 caracteres. { query } no es lo suficientemente larga para buscar. Los resultados de la búsqueda no se verán afectados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Cerrar ventana modal","components.SearchFilterGroupModal.error":"Se ha producido un error al buscar {filterName}.","components.SearchFilterGroupModal.inputLabel":"Buscar filtros para añadir","components.SearchFilterGroupModal.inputPlaceholder":"Buscar en { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Cargar más resultados","components.SearchFilterGroupModal.loadingResults":"Cargando resultados de búsqueda...","components.SearchFilterGroupModal.modalTitle":"Añadir filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Más opciones","components.SearchFilterGroupModal.queryTooShort":"Escriba por lo menos 3 caracteres para iniciar la búsqueda.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionales para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar más filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirar {activeFilterCount, number} activo {activeFilterCount, plural, one {filtro} other {filtros}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Buscar","components.SearchSuggestField.searchFieldPlaceholder":"Buscar cursos, organizaciones, categorías","components.UserLogin.logIn":"Iniciar sesión","components.UserLogin.logOut":"Cerrar sesión","components.UserLogin.signup":"Registrarse","components.UserLogin.spinnerText":"Cargando estado de inicio de sesión...","components.useStaticFilters.courses":"Cursos"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer le modal","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Chercher","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer le modal","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Chercher","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long pour la recherche. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer la fenêtre modale","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Recherche","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Couverture","components.CourseGlimpseList.courseCount":"Résultats {start, number} à {end, number} sur {courseCount, number} {courseCount, plural, one {cours} other {cours}} correspondant à votre recherche","components.CourseRunEnrollment.enroll":"S’inscrire maintenant","components.CourseRunEnrollment.enrolled":"Vous êtes inscrit à cette session","components.CourseRunEnrollment.enrollmentClosed":"L'inscription à ce cours est fermée pour le moment","components.CourseRunEnrollment.enrollmentFailed":"Votre demande d'inscription a échoué.","components.CourseRunEnrollment.goToCourse":"Accéder au cours","components.CourseRunEnrollment.loadingInitial":"Chargement des critères d'inscription...","components.CourseRunEnrollment.loginToEnroll":"Connectez-vous pour vous inscrire","components.DesktopUserMenu.menuPurpose":"Accéder aux préférences de votre profil","components.LanguageSelector.currentlySelected":"(actuellement sélectionné)","components.LanguageSelector.languages":"Langues","components.LanguageSelector.selectLanguage":"Sélectionnez une langue:","components.LanguageSelector.switchToLanguage":"Voir en {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"Actuellement sur la dernière page: {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Actuellement sur la page {page}","components.PaginateCourseSearch.lastPageN":"Dernière page: {page}","components.PaginateCourseSearch.nextPageN":"Page suivante: {page}","components.PaginateCourseSearch.pageN":"Page {page}","components.PaginateCourseSearch.pagination":"Pagination","components.PaginateCourseSearch.previousPageN":"Page précédente: {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Recherche de cours","components.Search.errorMessage":"Quelque chose s'est mal passé ! Les cours n'ont pas pu être chargés.","components.Search.hideFiltersPane":"Cacher le menu des filtres","components.Search.showFiltersPane":"Montrer le menu des filtres","components.Search.spinnerText":"Chargement des résultats de recherche...","components.Search.textQueryLengthWarning":"La recherche de texte nécessite au moins 3 caractères. { query } n'est pas assez long pour la recherche. Les résultats de recherche ne seront pas affectés par cette requête.","components.SearchFilterGroupModal.closeModal":"Fermer la fenêtre modale","components.SearchFilterGroupModal.error":"La recherche de filtres pour {filterName} a rencontré une erreur.","components.SearchFilterGroupModal.inputLabel":"Rechercher des filtres à ajouter","components.SearchFilterGroupModal.inputPlaceholder":"Rechercher parmi les { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Charger plus de résultats","components.SearchFilterGroupModal.loadingResults":"Chargement des résultats de recherche...","components.SearchFilterGroupModal.modalTitle":"Ajouter des filtres pour {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Plus de choix","components.SearchFilterGroupModal.queryTooShort":"Tapez 3 caractères ou plus pour commencer à chercher.","components.SearchFilterValueParent.ariaHideChildren":"Cacher les filtres supplémentaires pour {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Montrer plus de filtres pour {filterValueName}","components.SearchFiltersPane.clearFilters":"Retirer {activeFilterCount, number} {activeFilterCount, plural, one {filtre actif} other {filtres actifs}}","components.SearchFiltersPane.title":"Filtrer les cours","components.SearchInput.button":"Recherche","components.SearchSuggestField.searchFieldPlaceholder":"Recherche des cours, des organisations, des catégories","components.UserLogin.logIn":"Connexion","components.UserLogin.logOut":"Déconnexion","components.UserLogin.signup":"Inscription","components.UserLogin.spinnerText":"Vérification de l'état de connexion...","components.useStaticFilters.courses":"Cours"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Capa","components.CourseGlimpseList.courseCount":"A mostrar de {start, number} a {end, number} de {courseCount, number} {courseCount, plural, one {curso} other {cursos}} de acordo com a sua pesquisa","components.CourseRunEnrollment.enroll":"Inscreva-se já","components.CourseRunEnrollment.enrolled":"Está inscrito nesta edição do curso","components.CourseRunEnrollment.enrollmentClosed":"A inscrição nesta edição do curso está fechada de momento","components.CourseRunEnrollment.enrollmentFailed":"Ocorreu um erro ao processar a inscrição.","components.CourseRunEnrollment.goToCourse":"Ir para o curso","components.CourseRunEnrollment.loadingInitial":"A carregar a informação da inscrição...","components.CourseRunEnrollment.loginToEnroll":"Faça login para se inscrever","components.DesktopUserMenu.menuPurpose":"Acesso às suas configurações de perfil","components.LanguageSelector.currentlySelected":"(selecionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Selecione um idioma:","components.LanguageSelector.switchToLanguage":"Mudar idioma para {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"A ler a última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"A ler a página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página seguinte {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginação","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos","components.Search.errorMessage":"Ocorreu um erro! Não foi possível carregar os cursos.","components.Search.hideFiltersPane":"Ocultar painel de filtros","components.Search.showFiltersPane":"Mostrar painel de filtros","components.Search.spinnerText":"A carregar os resultados da pesquisa...","components.Search.textQueryLengthWarning":"A pesquisa de texto requer pelo menos 3 caracteres. { query } não é longo o suficiente para pesquisar. Os resultados da pesquisa não serão alterados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Fechar modal","components.SearchFilterGroupModal.error":"Ocorreu um erro ao pesquisar por {filterName}.","components.SearchFilterGroupModal.inputLabel":"Pesquisar por filtros para adicionar","components.SearchFilterGroupModal.inputPlaceholder":"Pesquisar em { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Carregar mais resultados","components.SearchFilterGroupModal.loadingResults":"A carregar os resultados da pesquisa...","components.SearchFilterGroupModal.modalTitle":"Adicionar filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Mais opções","components.SearchFilterGroupModal.queryTooShort":"Digite pelo menos 3 caracteres para iniciar a pesquisa.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionais para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar mais filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Limpar {activeFilterCount, number} {activeFilterCount, plural, one {filtro} other {filtros}} {activeFilterCount, plural, one {ativo} other {ativos}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Pesquisar","components.SearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos, organizações, categorias","components.UserLogin.logIn":"Entrar","components.UserLogin.logOut":"Sair","components.UserLogin.signup":"Registar","components.UserLogin.spinnerText":"A carregar estado do login..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Capa","components.CourseGlimpseList.courseCount":"A mostrar de {start, number} a {end, number} de {courseCount, number} {courseCount, plural, one {curso} other {cursos}} de acordo com a sua pesquisa","components.CourseRunEnrollment.enroll":"Inscreva-se já","components.CourseRunEnrollment.enrolled":"Está inscrito nesta edição do curso","components.CourseRunEnrollment.enrollmentClosed":"A inscrição nesta edição do curso está fechada de momento","components.CourseRunEnrollment.enrollmentFailed":"Ocorreu um erro ao processar a inscrição.","components.CourseRunEnrollment.goToCourse":"Ir para o curso","components.CourseRunEnrollment.loadingInitial":"A carregar a informação da inscrição...","components.CourseRunEnrollment.loginToEnroll":"Faça login para se inscrever","components.DesktopUserMenu.menuPurpose":"Acesso às suas configurações de perfil","components.LanguageSelector.currentlySelected":"(selecionado)","components.LanguageSelector.languages":"Idiomas","components.LanguageSelector.selectLanguage":"Selecione um idioma:","components.LanguageSelector.switchToLanguage":"Mudar idioma para {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"A ler a última página {page}","components.PaginateCourseSearch.currentlyReadingPageN":"A ler a página {page}","components.PaginateCourseSearch.lastPageN":"Última página {page}","components.PaginateCourseSearch.nextPageN":"Página seguinte {page}","components.PaginateCourseSearch.pageN":"Página {page}","components.PaginateCourseSearch.pagination":"Paginação","components.PaginateCourseSearch.previousPageN":"Página anterior {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos","components.Search.errorMessage":"Ocorreu um erro! Não foi possível carregar os cursos.","components.Search.hideFiltersPane":"Ocultar painel de filtros","components.Search.showFiltersPane":"Mostrar painel de filtros","components.Search.spinnerText":"A carregar os resultados da pesquisa...","components.Search.textQueryLengthWarning":"A pesquisa de texto requer pelo menos 3 caracteres. { query } não é longo o suficiente para pesquisar. Os resultados da pesquisa não serão alterados por esta consulta.","components.SearchFilterGroupModal.closeModal":"Fechar modal","components.SearchFilterGroupModal.error":"Ocorreu um erro ao pesquisar por {filterName}.","components.SearchFilterGroupModal.inputLabel":"Pesquisar por filtros para adicionar","components.SearchFilterGroupModal.inputPlaceholder":"Pesquisar em { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Carregar mais resultados","components.SearchFilterGroupModal.loadingResults":"A carregar os resultados da pesquisa...","components.SearchFilterGroupModal.modalTitle":"Adicionar filtros para {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Mais opções","components.SearchFilterGroupModal.queryTooShort":"Digite pelo menos 3 caracteres para iniciar a pesquisa.","components.SearchFilterValueParent.ariaHideChildren":"Ocultar filtros adicionais para {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Mostrar mais filtros para {filterValueName}","components.SearchFiltersPane.clearFilters":"Limpar {activeFilterCount, number} {activeFilterCount, plural, one {filtro} other {filtros}} {activeFilterCount, plural, one {ativo} other {ativos}}","components.SearchFiltersPane.title":"Filtrar cursos","components.SearchInput.button":"Pesquisar","components.SearchSuggestField.searchFieldPlaceholder":"Pesquisar cursos, organizações, categorias","components.UserLogin.logIn":"Entrar","components.UserLogin.logOut":"Sair","components.UserLogin.signup":"Registar","components.UserLogin.spinnerText":"A carregar estado do login...","components.useStaticFilters.courses":"Cursos"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"components.CourseGlimpse.cover":"Обложка","components.CourseGlimpseList.courseCount":"Показано от {start, number} до {end, number} на {courseCount, number} {courseCount, plural, one {курсе} few {курсах} many {курсах} other {курсах}} в соответствии с вашим поиском","components.CourseRunEnrollment.enroll":"Записаться сейчас","components.CourseRunEnrollment.enrolled":"Вы зачислены на этот курс","components.CourseRunEnrollment.enrollmentClosed":"Регистрация на курс в данный момент закрыта","components.CourseRunEnrollment.enrollmentFailed":"Не удалось выполнить запрос на зачисление.","components.CourseRunEnrollment.goToCourse":"Перейти к курсу","components.CourseRunEnrollment.loadingInitial":"Загрузка информации о зачислении...","components.CourseRunEnrollment.loginToEnroll":"Войти для записи","components.DesktopUserMenu.menuPurpose":"Доступ к настройкам вашего профиля","components.LanguageSelector.currentlySelected":"(сейчас выбрано)","components.LanguageSelector.languages":"Языки","components.LanguageSelector.selectLanguage":"Выберите язык:","components.LanguageSelector.switchToLanguage":"Переключиться на {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"В настоящее время чтение последней страницы {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Сейчас чтение страницы {page}","components.PaginateCourseSearch.lastPageN":"Последняя страница {page}","components.PaginateCourseSearch.nextPageN":"Следующая страница {page}","components.PaginateCourseSearch.pageN":"Страница {page}","components.PaginateCourseSearch.pagination":"Постраничная навигация","components.PaginateCourseSearch.previousPageN":"Предыдущая страница {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Поиск курсов","components.Search.errorMessage":"Что-то не так! Курсы не могут быть загружены.","components.Search.hideFiltersPane":"Скрыть панель фильтров","components.Search.showFiltersPane":"Показать панель фильтров","components.Search.spinnerText":"Загрузка результатов поиска...","components.Search.textQueryLengthWarning":"Текстовый поиск требует не менее 3 символов. { query } не достаточно длинный, чтобы искать. Этот запрос не повлияет на результаты поиска.","components.SearchFilterGroupModal.closeModal":"Закрыть модальное окно","components.SearchFilterGroupModal.error":"Произошла ошибка при поиске {filterName}.","components.SearchFilterGroupModal.inputLabel":"Поиск фильтров для добавления","components.SearchFilterGroupModal.inputPlaceholder":"Искать в { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Загрузить больше результатов","components.SearchFilterGroupModal.loadingResults":"Загрузка результатов поиска...","components.SearchFilterGroupModal.modalTitle":"Добавить фильтры для {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Ещё опции","components.SearchFilterGroupModal.queryTooShort":"Введите минимум 3 символа, чтобы начать поиск.","components.SearchFilterValueParent.ariaHideChildren":"Скрыть дополнительные фильтры для {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Показать больше фильтров для {filterValueName}","components.SearchFiltersPane.clearFilters":"Очистите {activeFilterCount, number} {activeFilterCount, plural, one {активный фильтр} few {активных фильтра} many {активных фильтров} other {активных фильтров}}","components.SearchFiltersPane.title":"Фильтровать курсы","components.SearchInput.button":"Поиск","components.SearchSuggestField.searchFieldPlaceholder":"Поиск курсов, организаций, категорий","components.UserLogin.logIn":"Вход","components.UserLogin.logOut":"Выход","components.UserLogin.signup":"Зарегистрироваться","components.UserLogin.spinnerText":"Загрузка статуса входа..."}
|
|
1
|
+
{"components.CourseGlimpse.cover":"Обложка","components.CourseGlimpseList.courseCount":"Показано от {start, number} до {end, number} на {courseCount, number} {courseCount, plural, one {курсе} few {курсах} many {курсах} other {курсах}} в соответствии с вашим поиском","components.CourseRunEnrollment.enroll":"Записаться сейчас","components.CourseRunEnrollment.enrolled":"Вы зачислены на этот курс","components.CourseRunEnrollment.enrollmentClosed":"Регистрация на курс в данный момент закрыта","components.CourseRunEnrollment.enrollmentFailed":"Не удалось выполнить запрос на зачисление.","components.CourseRunEnrollment.goToCourse":"Перейти к курсу","components.CourseRunEnrollment.loadingInitial":"Загрузка информации о зачислении...","components.CourseRunEnrollment.loginToEnroll":"Войти для записи","components.DesktopUserMenu.menuPurpose":"Доступ к настройкам вашего профиля","components.LanguageSelector.currentlySelected":"(сейчас выбрано)","components.LanguageSelector.languages":"Языки","components.LanguageSelector.selectLanguage":"Выберите язык:","components.LanguageSelector.switchToLanguage":"Переключиться на {language}","components.PaginateCourseSearch.currentlyReadingLastPageN":"В настоящее время чтение последней страницы {page}","components.PaginateCourseSearch.currentlyReadingPageN":"Сейчас чтение страницы {page}","components.PaginateCourseSearch.lastPageN":"Последняя страница {page}","components.PaginateCourseSearch.nextPageN":"Следующая страница {page}","components.PaginateCourseSearch.pageN":"Страница {page}","components.PaginateCourseSearch.pagination":"Постраничная навигация","components.PaginateCourseSearch.previousPageN":"Предыдущая страница {page}","components.RootSearchSuggestField.searchFieldPlaceholder":"Поиск курсов","components.Search.errorMessage":"Что-то не так! Курсы не могут быть загружены.","components.Search.hideFiltersPane":"Скрыть панель фильтров","components.Search.showFiltersPane":"Показать панель фильтров","components.Search.spinnerText":"Загрузка результатов поиска...","components.Search.textQueryLengthWarning":"Текстовый поиск требует не менее 3 символов. { query } не достаточно длинный, чтобы искать. Этот запрос не повлияет на результаты поиска.","components.SearchFilterGroupModal.closeModal":"Закрыть модальное окно","components.SearchFilterGroupModal.error":"Произошла ошибка при поиске {filterName}.","components.SearchFilterGroupModal.inputLabel":"Поиск фильтров для добавления","components.SearchFilterGroupModal.inputPlaceholder":"Искать в { filterName }","components.SearchFilterGroupModal.loadMoreResults":"Загрузить больше результатов","components.SearchFilterGroupModal.loadingResults":"Загрузка результатов поиска...","components.SearchFilterGroupModal.modalTitle":"Добавить фильтры для {filterName}","components.SearchFilterGroupModal.moreOptionsButton":"Ещё опции","components.SearchFilterGroupModal.queryTooShort":"Введите минимум 3 символа, чтобы начать поиск.","components.SearchFilterValueParent.ariaHideChildren":"Скрыть дополнительные фильтры для {filterValueName}","components.SearchFilterValueParent.ariaShowChildren":"Показать больше фильтров для {filterValueName}","components.SearchFiltersPane.clearFilters":"Очистите {activeFilterCount, number} {activeFilterCount, plural, one {активный фильтр} few {активных фильтра} many {активных фильтров} other {активных фильтров}}","components.SearchFiltersPane.title":"Фильтровать курсы","components.SearchInput.button":"Поиск","components.SearchSuggestField.searchFieldPlaceholder":"Поиск курсов, организаций, категорий","components.UserLogin.logIn":"Вход","components.UserLogin.logOut":"Выход","components.UserLogin.signup":"Зарегистрироваться","components.UserLogin.spinnerText":"Загрузка статуса входа...","components.useStaticFilters.courses":"Курсы"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "richie-education",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.12.0",
|
|
4
4
|
"description": "A CMS to build learning portals for Open Education",
|
|
5
5
|
"main": "sandbox/manage.py",
|
|
6
6
|
"scripts": {
|
|
@@ -35,17 +35,17 @@
|
|
|
35
35
|
"not dead"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@babel/core": "7.16.
|
|
38
|
+
"@babel/core": "7.16.12",
|
|
39
39
|
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
|
40
|
-
"@babel/plugin-transform-modules-commonjs": "7.16.
|
|
41
|
-
"@babel/preset-env": "7.16.
|
|
40
|
+
"@babel/plugin-transform-modules-commonjs": "7.16.8",
|
|
41
|
+
"@babel/preset-env": "7.16.11",
|
|
42
42
|
"@babel/preset-react": "7.16.7",
|
|
43
43
|
"@babel/preset-typescript": "7.16.7",
|
|
44
|
-
"@formatjs/cli": "4.
|
|
45
|
-
"@formatjs/intl-relativetimeformat": "9.
|
|
44
|
+
"@formatjs/cli": "4.8.1",
|
|
45
|
+
"@formatjs/intl-relativetimeformat": "9.5.1",
|
|
46
46
|
"@helpscout/helix": "0.2.0",
|
|
47
|
-
"@sentry/browser": "6.
|
|
48
|
-
"@sentry/types": "6.
|
|
47
|
+
"@sentry/browser": "6.17.3",
|
|
48
|
+
"@sentry/types": "6.17.3",
|
|
49
49
|
"@testing-library/jest-dom": "5.16.1",
|
|
50
50
|
"@testing-library/react": "12.1.2",
|
|
51
51
|
"@testing-library/react-hooks": "7.0.2",
|
|
@@ -61,21 +61,21 @@
|
|
|
61
61
|
"@types/react-autosuggest": "10.1.5",
|
|
62
62
|
"@types/react-dom": "17.0.11",
|
|
63
63
|
"@types/react-modal": "3.13.1",
|
|
64
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
65
|
-
"@typescript-eslint/parser": "5.
|
|
66
|
-
"babel-jest": "27.4.
|
|
64
|
+
"@typescript-eslint/eslint-plugin": "5.10.1",
|
|
65
|
+
"@typescript-eslint/parser": "5.10.1",
|
|
66
|
+
"babel-jest": "27.4.6",
|
|
67
67
|
"babel-loader": "8.2.3",
|
|
68
68
|
"babel-plugin-react-intl": "8.2.25",
|
|
69
69
|
"bootstrap": ">=4.6.0 <5",
|
|
70
70
|
"cljs-merge": "1.1.1",
|
|
71
|
-
"core-js": "3.20.
|
|
71
|
+
"core-js": "3.20.3",
|
|
72
72
|
"downshift": "6.1.7",
|
|
73
|
-
"eslint": "8.
|
|
73
|
+
"eslint": "8.8.0",
|
|
74
74
|
"eslint-config-airbnb": "19.0.4",
|
|
75
75
|
"eslint-config-airbnb-typescript": "16.1.0",
|
|
76
76
|
"eslint-config-prettier": "8.3.0",
|
|
77
|
-
"eslint-plugin-compat": "4.0.
|
|
78
|
-
"eslint-plugin-formatjs": "2.20.
|
|
77
|
+
"eslint-plugin-compat": "4.0.1",
|
|
78
|
+
"eslint-plugin-formatjs": "2.20.5",
|
|
79
79
|
"eslint-plugin-import": "2.25.4",
|
|
80
80
|
"eslint-plugin-jsx-a11y": "6.5.1",
|
|
81
81
|
"eslint-plugin-prettier": "4.0.0",
|
|
@@ -86,25 +86,25 @@
|
|
|
86
86
|
"glob": "7.2.0",
|
|
87
87
|
"iframe-resizer": "4.3.2",
|
|
88
88
|
"intl-pluralrules": "1.3.1",
|
|
89
|
-
"jest": "27.4.
|
|
89
|
+
"jest": "27.4.7",
|
|
90
90
|
"js-cookie": "3.0.1",
|
|
91
91
|
"lodash-es": "4.17.21",
|
|
92
92
|
"mdn-polyfills": "5.20.0",
|
|
93
|
-
"node-fetch": "<3",
|
|
93
|
+
"node-fetch": ">2.6.6 <3",
|
|
94
94
|
"nodemon": "2.0.15",
|
|
95
95
|
"prettier": "2.5.1",
|
|
96
|
-
"query-string": "7.0
|
|
96
|
+
"query-string": "7.1.0",
|
|
97
97
|
"react": "17.0.2",
|
|
98
98
|
"react-autosuggest": "10.1.0",
|
|
99
99
|
"react-dom": "17.0.2",
|
|
100
|
-
"react-intl": "5.24.
|
|
100
|
+
"react-intl": "5.24.4",
|
|
101
101
|
"react-modal": "3.14.4",
|
|
102
|
-
"react-query": "3.34.
|
|
103
|
-
"sass": "1.
|
|
104
|
-
"source-map-loader": "3.0.
|
|
105
|
-
"typescript": "4.5.
|
|
106
|
-
"webpack": "5.
|
|
107
|
-
"webpack-cli": "4.9.
|
|
102
|
+
"react-query": "3.34.12",
|
|
103
|
+
"sass": "1.49.0",
|
|
104
|
+
"source-map-loader": "3.0.1",
|
|
105
|
+
"typescript": "4.5.5",
|
|
106
|
+
"webpack": "5.67.0",
|
|
107
|
+
"webpack-cli": "4.9.2",
|
|
108
108
|
"whatwg-fetch": "3.6.2",
|
|
109
109
|
"xhr-mock": "2.5.1",
|
|
110
110
|
"yargs": "17.3.1"
|
package/scss/colors/_theme.scss
CHANGED
|
@@ -349,6 +349,10 @@ $r-theme: (
|
|
|
349
349
|
license-label-color: r-color('denim'),
|
|
350
350
|
checkmark-list-decoration: url('../../richie/images/components/checkmark.svg'),
|
|
351
351
|
view-more-runs-color: r-color('firebrick6'),
|
|
352
|
+
run-catalog-visibility-hidden-logo: url('../../richie/images/catalog_visibility/hidden.svg'),
|
|
353
|
+
run-catalog-visibility-course-only-logo:
|
|
354
|
+
url('../../richie/images/catalog_visibility/course_only.svg'),
|
|
355
|
+
run-catalog-visibility-logo-color: r-color('indianred3'),
|
|
352
356
|
),
|
|
353
357
|
organization-detail: (
|
|
354
358
|
banner-empty-background: r-color('smoke'),
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
// Course detail template stylesheet
|
|
2
2
|
//
|
|
3
3
|
|
|
4
|
+
@mixin course-detail-run-descriptions-catalog-visibility-mask($mask-logo) {
|
|
5
|
+
-webkit-mask: $mask-logo;
|
|
6
|
+
mask: $mask-logo;
|
|
7
|
+
-webkit-mask-size: contain;
|
|
8
|
+
mask-size: contain;
|
|
9
|
+
mask-repeat: no-repeat;
|
|
10
|
+
-webkit-mask-repeat: no-repeat;
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
.course-detail {
|
|
5
14
|
$detail-selector: &;
|
|
6
15
|
margin: 0 auto;
|
|
@@ -131,6 +140,36 @@
|
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
}
|
|
143
|
+
|
|
144
|
+
// Add CSS style only to edit mode
|
|
145
|
+
&--hidden,
|
|
146
|
+
&--course_only {
|
|
147
|
+
h3.cms-render-model::before {
|
|
148
|
+
content: '';
|
|
149
|
+
background-size: 1rem 1rem;
|
|
150
|
+
display: inline-block;
|
|
151
|
+
width: 1.5rem;
|
|
152
|
+
height: 1rem;
|
|
153
|
+
margin-left: -1.5rem;
|
|
154
|
+
background-repeat: no-repeat;
|
|
155
|
+
background-color: r-theme-val(course-detail, run-catalog-visibility-logo-color);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&--hidden {
|
|
160
|
+
h3.cms-render-model::before {
|
|
161
|
+
@include course-detail-run-descriptions-catalog-visibility-mask(
|
|
162
|
+
r-theme-val(course-detail, run-catalog-visibility-hidden-logo)
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
&--course_only {
|
|
167
|
+
h3.cms-render-model::before {
|
|
168
|
+
@include course-detail-run-descriptions-catalog-visibility-mask(
|
|
169
|
+
r-theme-val(course-detail, run-catalog-visibility-course-only-logo)
|
|
170
|
+
);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
134
173
|
}
|
|
135
174
|
|
|
136
175
|
&__run-session-link {
|
|
@@ -151,6 +190,29 @@
|
|
|
151
190
|
margin-top: 1rem;
|
|
152
191
|
}
|
|
153
192
|
}
|
|
193
|
+
|
|
194
|
+
// Add CSS style only to edit mode
|
|
195
|
+
&--course_only.cms-render-model::before,
|
|
196
|
+
&--hidden.cms-render-model::before {
|
|
197
|
+
content: '';
|
|
198
|
+
background-size: 1rem 1rem;
|
|
199
|
+
display: inline-block;
|
|
200
|
+
width: 1.2rem;
|
|
201
|
+
height: 1rem;
|
|
202
|
+
margin-left: -1.4rem;
|
|
203
|
+
background-repeat: no-repeat;
|
|
204
|
+
background-color: r-theme-val(course-detail, run-catalog-visibility-logo-color);
|
|
205
|
+
}
|
|
206
|
+
&--hidden.cms-render-model::before {
|
|
207
|
+
@include course-detail-run-descriptions-catalog-visibility-mask(
|
|
208
|
+
r-theme-val(course-detail, run-catalog-visibility-hidden-logo)
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
&--course_only.cms-render-model::before {
|
|
212
|
+
@include course-detail-run-descriptions-catalog-visibility-mask(
|
|
213
|
+
r-theme-val(course-detail, run-catalog-visibility-course-only-logo)
|
|
214
|
+
);
|
|
215
|
+
}
|
|
154
216
|
}
|
|
155
217
|
|
|
156
218
|
&__programs {
|
|
@@ -47,7 +47,7 @@ $course-glimpse-content-padding-sides: 0.7rem !default;
|
|
|
47
47
|
$border: 0,
|
|
48
48
|
$background: r-theme-val(course-glimpse, card-background),
|
|
49
49
|
$media-margin: 0,
|
|
50
|
-
$wrapper-padding: 1.7rem $course-glimpse-content-padding-sides
|
|
50
|
+
$wrapper-padding: 1.7rem $course-glimpse-content-padding-sides 0.5rem,
|
|
51
51
|
$foot-divider: null
|
|
52
52
|
);
|
|
53
53
|
|
|
@@ -140,57 +140,57 @@ $course-glimpse-content-padding-sides: 0.7rem !default;
|
|
|
140
140
|
|
|
141
141
|
&__wrapper {
|
|
142
142
|
@include sv-flex(1, 0, auto);
|
|
143
|
-
position: relative;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
&__code {
|
|
147
143
|
display: flex;
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
left: 0;
|
|
151
|
-
right: 0;
|
|
152
|
-
padding: 0 0.6rem;
|
|
153
|
-
font-size: 0.7rem;
|
|
154
|
-
color: r-theme-val(course-glimpse, code-color);
|
|
155
|
-
line-height: 1.1rem;
|
|
156
|
-
margin-bottom: 0;
|
|
157
|
-
|
|
158
|
-
.icon {
|
|
159
|
-
@include sv-flex(1, 0, 1.4rem);
|
|
160
|
-
width: 1.4rem;
|
|
161
|
-
height: 0.9rem;
|
|
162
|
-
margin-bottom: 0.15rem;
|
|
163
|
-
margin-right: 0.5rem;
|
|
164
|
-
fill: r-theme-val(course-glimpse, code-color);
|
|
165
|
-
}
|
|
144
|
+
flex-direction: column;
|
|
145
|
+
position: relative;
|
|
166
146
|
}
|
|
167
147
|
|
|
168
148
|
&__title {
|
|
169
149
|
@include font-size($h6-font-size);
|
|
150
|
+
-webkit-box-orient: vertical;
|
|
151
|
+
-webkit-line-clamp: 3;
|
|
152
|
+
color: r-theme-val(course-glimpse, title-color);
|
|
153
|
+
display: block;
|
|
154
|
+
display: -webkit-box;
|
|
170
155
|
font-family: $r-font-family-montserrat;
|
|
171
156
|
font-weight: $font-weight-boldest;
|
|
172
|
-
|
|
157
|
+
flex: 1 0 1.3em * 3; // 3 lines;
|
|
158
|
+
line-height: 1.3em;
|
|
159
|
+
margin-bottom: 1rem;
|
|
160
|
+
overflow: hidden;
|
|
173
161
|
}
|
|
174
162
|
|
|
175
|
-
&
|
|
176
|
-
display: flex;
|
|
177
|
-
position: absolute;
|
|
178
|
-
bottom: 1.6rem;
|
|
179
|
-
left: 0;
|
|
180
|
-
right: 0;
|
|
181
|
-
padding: 0 0.6rem;
|
|
163
|
+
&__metadata {
|
|
182
164
|
align-items: center;
|
|
183
165
|
color: r-theme-val(course-glimpse, organization-color);
|
|
184
|
-
|
|
185
|
-
|
|
166
|
+
display: flex;
|
|
167
|
+
font-size: 0.7rem;
|
|
168
|
+
line-height: 1.1em;
|
|
169
|
+
|
|
170
|
+
&--organization {
|
|
171
|
+
color: r-theme-val(course-glimpse, organization-color);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
&--code {
|
|
175
|
+
color: r-theme-val(course-glimpse, code-color);
|
|
176
|
+
}
|
|
186
177
|
|
|
187
178
|
.icon {
|
|
188
179
|
@include sv-flex(1, 0, 1.4rem);
|
|
189
|
-
|
|
180
|
+
fill: currentColor;
|
|
190
181
|
height: 0.9rem;
|
|
191
182
|
margin-bottom: 0.15rem;
|
|
192
183
|
margin-right: 0.5rem;
|
|
193
|
-
|
|
184
|
+
width: 1.4rem;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.title {
|
|
188
|
+
-webkit-box-orient: vertical;
|
|
189
|
+
-webkit-line-clamp: 2;
|
|
190
|
+
display: block;
|
|
191
|
+
display: -webkit-box;
|
|
192
|
+
max-height: 2.2em; // 2 lines
|
|
193
|
+
overflow: hidden;
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -205,7 +205,7 @@ $course-glimpse-content-padding-sides: 0.7rem !default;
|
|
|
205
205
|
overflow: hidden;
|
|
206
206
|
padding: 0.25rem;
|
|
207
207
|
position: absolute;
|
|
208
|
-
right:
|
|
208
|
+
right: 0;
|
|
209
209
|
top: -3.53rem;
|
|
210
210
|
width: 4.3rem;
|
|
211
211
|
z-index: 0;
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
&__suggestions-container {
|
|
19
19
|
@extend .dropdown-menu;
|
|
20
|
-
width:
|
|
20
|
+
max-width: 480px;
|
|
21
|
+
min-width: 100%;
|
|
21
22
|
|
|
22
23
|
&--open {
|
|
23
24
|
display: block; // Show/hide is managed by react-autosuggest with the --open state
|
|
@@ -30,6 +31,9 @@
|
|
|
30
31
|
|
|
31
32
|
&__suggestion {
|
|
32
33
|
@extend .dropdown-item;
|
|
34
|
+
text-overflow: ellipsis;
|
|
35
|
+
overflow: hidden;
|
|
36
|
+
white-space: nowrap;
|
|
33
37
|
|
|
34
38
|
&:hover {
|
|
35
39
|
cursor: pointer;
|