Compare commits

..

19 Commits

Author SHA1 Message Date
Stanislav
b5c4cbd369 fix: Discussions UI fixes on mobile resolutions (#690) 2024-04-04 17:46:22 +05:00
Eugene Dyudyunov
efa0c1c9b7 fix: fixed redirection to learners tab in inContext view (#680)
* fix: redirection to learners tab in inContext view

* fix: changed username to simple text for incontext view

* test: username is not clickable in incontext view

---------

Co-authored-by: ayesha waris <73840786+ayesha-waris@users.noreply.github.com>
Co-authored-by: sohailfatima <23100065@lums.edu.pk>
Co-authored-by: Fatima Sohail <68312464+sohailfatima@users.noreply.github.com>
Co-authored-by: Awais Ansari <79941147+awais-ansari@users.noreply.github.com>
2024-03-21 15:55:32 +05:00
Stanislav
5ca0042802 fix: fixed post card border color issue (#640) (#677)
Co-authored-by: Awais Ansari <79941147+awais-ansari@users.noreply.github.com>
2024-03-08 14:50:00 +05:00
vladislavkeblysh
2dafb6ad82 feat: Editor bar visibility (quince.master) (#583)
* feat: fixed editor bar visibility

* feat: fixed z index
2024-01-03 17:49:04 +05:00
vladislavkeblysh
e9e3db5193 feat: Enhancements to page (quince.master) (#578)
* feat: fixed page styles
2023-12-14 11:52:32 +05:00
Kshitij Sobti
cbb35e7cad fix: null error at useRouteMatch when running on tutor (#623)
tutor sets the PUBLIC_PATH to '/discussions' which causes frontend-platform to
treat all URLs for matching etc to be relative to this path. Since many places
include '/discussions' in the match it causes those matches to break.

This change makes the default PUBLIC_PATH in .env.development to match the one
set by tutor and removes it from the base path of the router letting frontend
platform handle the prefix.

This also allows for deployments to customise this path to be something other
than 'discussions'.
2023-12-06 17:24:37 +05:00
Awais Ansari
cf8ef159e0 fix: resolved load more posts delay issue (#614) 2023-11-30 14:47:15 +05:00
Ihor Romaniuk
eb127cd8e1 fix: unify font-family with paragon component styles (#597) 2023-11-08 18:33:56 +05:00
Ihor Romaniuk
68841d03ee fix: container indents and style imports (#601) 2023-11-07 14:49:38 +05:00
Jenkins
67212254f7 chore(i18n): update translations 2023-09-24 16:27:33 -04:00
sundasnoreen12
af5b10a575 fix: now discussion sidebar modal appears above the fold (#563)
Co-authored-by: SundasNoreen <sundas.noreen@arbisoft.com>
2023-09-15 17:25:04 +05:00
Jenkins
fb2be35d00 chore(i18n): update translations 2023-09-03 16:32:24 -04:00
Jenkins
10adf1171b chore(i18n): update translations 2023-08-27 16:27:23 -04:00
Awais Ansari
2609380bd8 fix: moved feedback widget behind the env variable (#557)
* feat: remove InformationBanner from Discussion MFE

* fix: moved feedback widget behind the env variable
2023-08-21 14:49:35 +05:00
Jenkins
61d0f9a7ea chore(i18n): update translations 2023-08-13 16:27:20 -04:00
sundasnoreen12
ea235cf6ca fix: fixed leak issue when checkpoint will be undefined (#553)
Co-authored-by: SundasNoreen <sundas.noreen@arbisoft.com>
Co-authored-by: Awais Ansari <79941147+awais-ansari@users.noreply.github.com>
2023-08-08 14:32:34 +05:00
Jenkins
b8f11c3046 chore(i18n): update translations 2023-08-06 16:32:19 -04:00
Jenkins
1769692d22 chore(i18n): update translations 2023-07-30 16:27:15 -04:00
Awais Ansari
3d6b71c247 fix: learning header constant height (#551) 2023-07-26 14:42:07 +05:00
45 changed files with 291 additions and 494 deletions

5
.env
View File

@@ -20,6 +20,5 @@ SEGMENT_KEY=''
SITE_NAME=''
USER_INFO_COOKIE_NAME=''
SUPPORT_URL=''
TA_FEEDBACK_FORM= ''
STAFF_FEEDBACK_FORM= ''
DISPLAY_FEEDBACK_BANNER='false'
LEARNER_FEEDBACK_URL=''
STAFF_FEEDBACK_URL=''

View File

@@ -21,6 +21,5 @@ SEGMENT_KEY=''
SITE_NAME=localhost
USER_INFO_COOKIE_NAME='edx-user-info'
SUPPORT_URL='https://support.edx.org'
TA_FEEDBACK_FORM='https://learner-form.test'
STAFF_FEEDBACK_FORM='https://staff-form.test'
DISPLAY_FEEDBACK_BANNER='false'
LEARNER_FEEDBACK_URL=''
STAFF_FEEDBACK_URL=''

View File

@@ -19,6 +19,5 @@ SEGMENT_KEY=''
SITE_NAME='localhost'
USER_INFO_COOKIE_NAME='edx-user-info'
SUPPORT_URL='https://support.edx.org'
TA_FEEDBACK_FORM='https://learner-form.test'
STAFF_FEEDBACK_FORM='https://staff-form.test'
DISPLAY_FEEDBACK_BANNER='false'
LEARNER_FEEDBACK_URL=''
STAFF_FEEDBACK_URL=''

View File

@@ -1,2 +0,0 @@
process.env.TA_FEEDBACK_FORM= 'https://learner-form.test';
process.env.STAFF_FEEDBACK_FORM= 'https://staff-form.test';

View File

@@ -1,9 +1,9 @@
const { createConfig } = require('@edx/frontend-build');
module.exports = createConfig('jest', {
// setupFilesAfterEnv is used after the jest environment has been loaded. In general this is what you want.
// setupFilesAfterEnv is used after the jest environment has been loaded. In general this is what you want.
// If you want to add config BEFORE jest loads, use setupFiles instead.
setupFiles: ['<rootDir>/.jest/setEnvVars.js'],
setupFiles: ['<rootDir>/.env.test'],
setupFilesAfterEnv: [
'<rootDir>/src/setupTest.js',
],

View File

@@ -1,10 +1,11 @@
@import "@edx/brand/paragon/fonts.scss";
@import "@edx/brand/paragon/variables.scss";
@import "@edx/paragon/scss/core/core.scss";
@import "@edx/brand/paragon/overrides.scss";
@import "~@edx/brand/paragon/fonts.scss";
@import "~@edx/brand/paragon/variables.scss";
@import "~@edx/paragon/scss/core/core.scss";
@import "~@edx/brand/paragon/overrides.scss";
$fa-font-path: "~font-awesome/fonts";
@import "~font-awesome/scss/font-awesome";
.course-tabs-navigation {
border-bottom: solid 1px #eaeaea;

View File

@@ -1,7 +1,7 @@
import React, { useCallback, useState } from 'react';
import React, { useCallback, useEffect, useState } from 'react';
import { Editor } from '@tinymce/tinymce-react';
import { useParams } from 'react-router';
import { useLocation, useParams } from 'react-router';
// TinyMCE so the global var exists
// eslint-disable-next-line no-unused-vars,import/no-extraneous-dependencies
import tinymce from 'tinymce/tinymce';
@@ -45,10 +45,11 @@ import contentUiCss from '!!raw-loader!tinymce/skins/ui/oxide/content.min.css';
const TinyMCEEditor = (props) => {
// note that skin and content_css is disabled to avoid the normal
// loading process and is instead loaded as a string via content_style
const locationObj = useLocation();
const { courseId, postId } = useParams();
const [showImageWarning, setShowImageWarning] = useState(false);
const intl = useIntl();
const enableInContextSidebar = Boolean(new URLSearchParams(locationObj.search).get('inContextSidebar') !== null);
/* istanbul ignore next */
const setup = useCallback((editor) => {
@@ -99,6 +100,29 @@ const TinyMCEEditor = (props) => {
contentStyle = '';
}
// eslint-disable-next-line consistent-return
useEffect(() => {
if (enableInContextSidebar) {
const checkToxDialogVisibility = () => {
const toxDialog = document.querySelector('.tox-dialog');
if (toxDialog) {
toxDialog.style.alignSelf = 'start';
toxDialog.style.marginTop = '50px';
}
};
const observer = new MutationObserver(checkToxDialogVisibility);
// Observe changes to the entire document
observer.observe(document, { childList: true, subtree: true });
// Clean up the observer when the component unmounts
return () => {
observer.disconnect();
};
}
}, [enableInContextSidebar]);
return (
<>
<Editor

View File

@@ -1,6 +1,9 @@
import { getConfig } from '@edx/frontend-platform';
export const getApiBaseUrl = () => getConfig().LMS_BASE_URL;
export const getFullUrl = (path) => (
new URL(`${getConfig().PUBLIC_PATH.replace(/\/$/, '')}/${path}`, window.location.origin).href
);
/**
* Enum for thread types.
@@ -137,7 +140,7 @@ export const DiscussionProvider = {
OPEN_EDX: 'openedx',
};
const BASE_PATH = `${getConfig().PUBLIC_PATH}:courseId`;
const BASE_PATH = '/:courseId';
export const Routes = {
DISCUSSIONS: {

View File

@@ -28,7 +28,7 @@ const AuthorLabel = ({
}) => {
timeago.register('time-locale', timeLocale);
const intl = useIntl();
const { courseId } = useContext(DiscussionContext);
const { courseId, enableInContextSidebar } = useContext(DiscussionContext);
let icon = null;
let authorLabelMessage = null;
@@ -47,11 +47,11 @@ const AuthorLabel = ({
const className = classNames('d-flex align-items-center', { 'mb-0.5': !postOrComment }, labelColor);
const showUserNameAsLink = useShowLearnersTab()
&& linkToProfile && author && author !== intl.formatMessage(messages.anonymous);
&& linkToProfile && author && author !== intl.formatMessage(messages.anonymous) && !enableInContextSidebar;
const authorName = useMemo(() => (
<span
className={classNames('mr-1.5 font-size-14 font-style font-weight-500', {
className={classNames('mr-1.5 font-size-14 font-style font-weight-500 author-name', {
'text-gray-700': isRetiredUser,
'text-primary-500': !authorLabelMessage && !isRetiredUser,
})}
@@ -100,7 +100,7 @@ const AuthorLabel = ({
{postCreatedAt && (
<span
title={postCreatedAt}
className={classNames('font-family-inter align-content-center', {
className={classNames('align-content-center', {
'text-white': alert,
'text-gray-500': !alert,
})}
@@ -114,7 +114,7 @@ const AuthorLabel = ({
return showUserNameAsLink
? (
<div className={className}>
<div className={`${className} flex-wrap`}>
<Link
data-testid="learner-posts-link"
id="learner-posts-link"
@@ -127,7 +127,7 @@ const AuthorLabel = ({
{labelContents}
</div>
)
: <div className={className}>{authorName}{labelContents}</div>;
: <div className={`${className} flex-wrap`}>{authorName}{labelContents}</div>;
};
AuthorLabel.propTypes = {

View File

@@ -21,11 +21,11 @@ let store;
let axiosMock;
let container;
function renderComponent(author, authorLabel, linkToProfile, labelColor) {
function renderComponent(author, authorLabel, linkToProfile, labelColor, enableInContextSidebar) {
const wrapper = render(
<IntlProvider locale="en">
<AppProvider store={store}>
<DiscussionContext.Provider value={{ courseId }}>
<DiscussionContext.Provider value={{ courseId, enableInContextSidebar }}>
<AuthorLabel
author={author}
authorLabel={authorLabel}
@@ -79,9 +79,9 @@ describe('Author label', () => {
);
it(
`it is "${!linkToProfile && 'not'}" clickable when linkToProfile is ${!!linkToProfile}`,
`it is "${(!linkToProfile) && 'not'}" clickable when linkToProfile is ${!!linkToProfile} and enableInContextSidebar is false`,
async () => {
renderComponent(author, authorLabel, linkToProfile, labelColor);
renderComponent(author, authorLabel, linkToProfile, labelColor, false);
if (linkToProfile) {
expect(screen.queryByTestId('learner-posts-link')).toBeInTheDocument();
@@ -91,6 +91,15 @@ describe('Author label', () => {
},
);
it(
'it is not clickable when enableInContextSidebar is true',
async () => {
renderComponent(author, authorLabel, linkToProfile, labelColor, true);
expect(screen.queryByTestId('learner-posts-link')).not.toBeInTheDocument();
},
);
it(
`it has "${!linkToProfile && 'not'}" label text and label color when linkToProfile is ${!!linkToProfile}`,
async () => {

View File

@@ -43,7 +43,7 @@ const EndorsedAlertBanner = ({
height: '20px',
}}
/>
<strong className="ml-2 font-family-inter">
<strong className="ml-2">
{intl.formatMessage(isQuestion ? messages.answer : messages.endorsed)}
</strong>
</div>

View File

@@ -223,7 +223,7 @@ export const useTourConfiguration = () => {
), []);
const toursConfig = useMemo(() => (
tours?.map((tour) => (
tours?.map((tour) => Object.keys(tourCheckpoints(intl)).includes(tour.tourName) && (
{
tourId: tour.tourName,
advanceButtonText: intl.formatMessage(messages.advanceButtonText),

View File

@@ -55,7 +55,7 @@ const DiscussionSidebar = ({ displaySidebar, postActionBarRef }) => {
'd-none': !displaySidebar,
'd-flex overflow-auto box-shadow-centered-1': displaySidebar,
'w-100': !isOnDesktop,
'sidebar-desktop-width': isOnDesktop && !isOnXLDesktop,
'w-25 sidebar-desktop-width': isOnDesktop && !isOnXLDesktop,
'w-25 sidebar-XL-width': isOnXLDesktop,
'min-content-height': !enableInContextSidebar,
})}

View File

@@ -8,7 +8,6 @@ import {
} from 'react-router';
import { LearningHeader as Header } from '@edx/frontend-component-header';
import { getConfig } from '@edx/frontend-platform';
import { Spinner } from '../../components';
import { selectCourseTabs } from '../../components/NavigationBar/data/selectors';
@@ -33,7 +32,6 @@ const DiscussionsProductTour = lazy(() => import('../tours/DiscussionsProductTou
const DiscussionsRestrictionBanner = lazy(() => import('./DiscussionsRestrictionBanner'));
const DiscussionContent = lazy(() => import('./DiscussionContent'));
const DiscussionSidebar = lazy(() => import('./DiscussionSidebar'));
const InformationBanner = lazy(() => import('./InformationBanner'));
const DiscussionsHome = () => {
const location = useLocation();
@@ -48,7 +46,6 @@ const DiscussionsHome = () => {
const isOnDesktop = useIsOnDesktop();
let displaySidebar = useSidebarVisible();
const enableInContextSidebar = Boolean(new URLSearchParams(location.search).get('inContextSidebar') !== null);
const isFeedbackBannerVisible = getConfig().DISPLAY_FEEDBACK_BANNER === 'true';
const {
courseId, postId, topicId, category, learnerUsername,
} = params;
@@ -95,7 +92,6 @@ const DiscussionsHome = () => {
)}
<PostActionsBar />
</div>
{isFeedbackBannerVisible && <InformationBanner />}
<DiscussionsRestrictionBanner />
</div>
{provider === DiscussionProvider.LEGACY && (

View File

@@ -2,6 +2,7 @@ import { useEffect } from 'react';
import { useSelector } from 'react-redux';
import { getConfig } from '@edx/frontend-platform';
import { logError } from '@edx/frontend-platform/logging';
import { RequestStatus } from '../../data/constants';
@@ -22,9 +23,9 @@ export default function useFeedbackWrapper() {
useEffect(() => {
if (configStatus === RequestStatus.SUCCESSFUL) {
let url = '//w.usabilla.com/9e6036348fa1.js';
let url = getConfig().LEARNER_FEEDBACK_URL;
if (isStaff || isUserGroupTA || isCourseAdmin || isCourseStaff) {
url = '//w.usabilla.com/767740a06856.js';
url = getConfig().STAFF_FEEDBACK_URL;
}
try {
// eslint-disable-next-line no-undef

View File

@@ -1,63 +0,0 @@
import React, { useCallback, useState } from 'react';
import { useSelector } from 'react-redux';
import { useIntl } from '@edx/frontend-platform/i18n';
import { Hyperlink, PageBanner } from '@edx/paragon';
import { selectUserIsStaff, selectUserRoles } from '../data/selectors';
import messages from '../messages';
const InformationBanner = () => {
const intl = useIntl();
const [showBanner, setShowBanner] = useState(true);
const userRoles = useSelector(selectUserRoles);
const isAdmin = useSelector(selectUserIsStaff);
const learnMoreLink = 'https://openedx.atlassian.net/wiki/spaces/COMM/pages/3509551260/Overview+New+discussions+experience';
const TAFeedbackLink = process.env.TA_FEEDBACK_FORM;
const staffFeedbackLink = process.env.STAFF_FEEDBACK_FORM;
const hideLearnMoreButton = ((userRoles.includes('Student') && userRoles.length === 1) || !userRoles.length) && !isAdmin;
const showStaffLink = isAdmin || userRoles.includes('Moderator') || userRoles.includes('Administrator');
const handleDismiss = useCallback(() => {
setShowBanner(false);
}, []);
return (
<PageBanner
variant="light"
show={showBanner}
dismissible
onDismiss={handleDismiss}
>
<div className="font-weight-500">
{intl.formatMessage(messages.bannerMessage)}
{!hideLearnMoreButton
&& (
<Hyperlink
destination={learnMoreLink}
target="_blank"
showLaunchIcon={false}
className="pl-2.5"
variant="muted"
isInline
>
{intl.formatMessage(messages.learnMoreBannerLink)}
</Hyperlink>
)}
<Hyperlink
destination={showStaffLink ? staffFeedbackLink : TAFeedbackLink}
target="_blank"
showLaunchIcon={false}
variant="muted"
className="pl-2.5"
isInline
>
{intl.formatMessage(messages.shareFeedback)}
</Hyperlink>
</div>
</PageBanner>
);
};
export default InformationBanner;

View File

@@ -1,136 +0,0 @@
import { render, screen } from '@testing-library/react';
import { IntlProvider } from 'react-intl';
import { initializeMockApp } from '@edx/frontend-platform';
import { AppProvider } from '@edx/frontend-platform/react';
import { initializeStore } from '../../store';
import { DiscussionContext } from '../common/context';
import { fetchConfigSuccess } from '../data/slices';
import messages from '../messages';
import InformationBanner from './InformationBanner';
import '../posts/data/__factories__';
let store;
let container;
const courseId = 'course-v1:edX+DemoX+Demo_Course';
const getConfigData = (isAdmin = true, roles = []) => ({
id: 'course-v1:edX+DemoX+Demo_Course',
userRoles: roles,
hasModerationPrivileges: false,
isGroupTa: false,
isUserAdmin: isAdmin,
});
function renderComponent() {
const wrapper = render(
<IntlProvider locale="en">
<AppProvider store={store}>
<DiscussionContext.Provider value={{ courseId }}>
<InformationBanner />
</DiscussionContext.Provider>
</AppProvider>
</IntlProvider>,
);
container = wrapper.container;
return container;
}
describe('Information Banner learner view', () => {
let element;
beforeEach(async () => {
initializeMockApp({
authenticatedUser: {
userId: 3,
username: 'abc123',
administrator: false,
roles: ['Student'],
},
});
store = initializeStore();
store.dispatch(fetchConfigSuccess(getConfigData(false, ['Student'])));
renderComponent(true);
element = await screen.findByRole('alert');
});
test('Test Banner is visible on app load', async () => {
expect(element).toHaveTextContent(messages.bannerMessage.defaultMessage);
});
test('Test Banner do not have learn more button', async () => {
expect(element).not.toHaveTextContent(messages.learnMoreBannerLink.defaultMessage);
});
test('Test Banner has share feedback button', async () => {
expect(element).toHaveTextContent(messages.shareFeedback.defaultMessage);
});
});
describe('Information Banner moderators/staff/admin view', () => {
let element;
beforeEach(async () => {
initializeMockApp({
authenticatedUser: {
userId: 3,
username: 'abc123',
administrator: true,
roles: [],
},
});
store = initializeStore();
store.dispatch(fetchConfigSuccess(getConfigData(true, ['Student', 'Moderator'])));
renderComponent(true);
element = await screen.findByRole('alert');
});
test('Test Banner is visible on app load', async () => {
expect(element).toHaveTextContent(messages.bannerMessage.defaultMessage);
});
test('Test Banner has learn more button', async () => {
expect(element).toHaveTextContent(messages.learnMoreBannerLink.defaultMessage);
});
test('Test Banner has share feedback button', async () => {
expect(element).toHaveTextContent(messages.shareFeedback.defaultMessage);
});
});
describe('User is redirected according to url according to role', () => {
beforeEach(async () => {
initializeMockApp({
authenticatedUser: {
userId: 3,
username: 'abc123',
administrator: true,
roles: [],
},
});
store = initializeStore();
});
test('TAs are redirected to learners feedback form', async () => {
store.dispatch(fetchConfigSuccess(getConfigData(false, ['Student', 'Community TA'])));
renderComponent(true);
expect(screen.getByText(messages.shareFeedback.defaultMessage)
.closest('a'))
.toHaveAttribute('href', process.env.TA_FEEDBACK_FORM);
});
test('moderators/administrators are redirected to moderators feedback form', async () => {
store.dispatch(fetchConfigSuccess(getConfigData(false, ['Student', 'Moderator', 'Administrator'])));
renderComponent(true);
expect(screen.getByText(messages.shareFeedback.defaultMessage)
.closest('a'))
.toHaveAttribute('href', process.env.STAFF_FEEDBACK_FORM);
});
test('user with only isAdmin true are redirected to moderators feedback form', async () => {
store.dispatch(fetchConfigSuccess(getConfigData(true, ['Student'])));
renderComponent(true);
expect(screen.getByText(messages.shareFeedback.defaultMessage)
.closest('a'))
.toHaveAttribute('href', process.env.STAFF_FEEDBACK_FORM);
});
});

View File

@@ -168,21 +168,6 @@ const messages = defineMessages({
defaultMessage: 'anonymous',
description: 'Author name displayed when a post is anonymous',
},
bannerMessage: {
id: 'discussion.banner.welcomeMessage',
defaultMessage: '🎉 Welcome to the new and improved discussions experience!',
description: 'Information banner welcome text',
},
learnMoreBannerLink: {
id: 'discussion.banner.learnMore',
defaultMessage: 'Learn more',
description: 'learn more button to redirect users to know more about new discussion experience ',
},
shareFeedback: {
id: 'discussion.banner.shareFeedback',
defaultMessage: 'Share feedback',
description: 'Share feedback button to open feedback forms',
},
blackoutDiscussionInformation: {
id: 'discussion.blackoutBanner.information',
defaultMessage: 'Posting in discussions is disabled by the course team',

View File

@@ -465,6 +465,20 @@ describe('ThreadView', () => {
assertLastUpdateData({ pinned: false });
});
it('should allow copying a link to the post', async () => {
await waitFor(() => renderComponent(discussionPostId));
const post = await screen.findByTestId('post-thread-1');
const hoverCard = within(post).getByTestId('hover-card-thread-1');
Object.assign(navigator, { clipboard: { writeText: jest.fn() } });
await act(async () => {
fireEvent.click(within(hoverCard).getByRole('button', { name: /actions menu/i }));
});
await act(async () => {
fireEvent.click(within(hoverCard).getByRole('button', { name: /copy link/i }));
});
expect(navigator.clipboard.writeText).toHaveBeenCalledWith(`http://localhost/${courseId}/posts/${discussionPostId}`);
});
it('should allow reporting the post', async () => {
await waitFor(() => renderComponent(discussionPostId));
const post = await screen.findByTestId('post-thread-1');

View File

@@ -36,7 +36,7 @@ const CommentsView = ({ endorsed }) => {
const handleDefinition = useCallback((message, commentsLength) => (
<div
className="mx-4 my-14px text-gray-700 font-style"
className="comment-line mx-4 my-14px text-gray-700 font-style"
role="heading"
aria-level="2"
>

View File

@@ -131,7 +131,7 @@ const Reply = ({ responseId }) => {
className="bg-light-300 pl-4 pt-2.5 pr-2.5 pb-10px flex-fill"
style={{ borderRadius: '0rem 0.375rem 0.375rem' }}
>
<div className="d-flex flex-row justify-content-between" style={{ height: '24px' }}>
<div className="d-flex flex-row justify-content-between">
<AuthorLabel
author={author}
authorLabel={authorLabel}

View File

@@ -26,6 +26,7 @@ Factory.define('thread')
'type',
'voted',
'pinned',
'copy_link',
],
author: 'test_user',
author_label: 'Staff',

View File

@@ -19,9 +19,9 @@ const PostTypeCard = ({
<label htmlFor={`post-type-${value}`} className="d-flex p-0 my-0 mr-3">
<Form.Radio value={value} id={`post-type-${value}`} className="sr-only">{type}</Form.Radio>
<Card
className={classNames('border-2 shadow-none', {
'border-primary': selected,
'border-light-400': !selected,
className={classNames('shadow-none', {
'border-primary-500-2': selected,
'border-light-400-2': !selected,
})}
style={{ cursor: 'pointer', width: `${enableInContextSidebar ? '10.021rem' : '14.25rem'}` }}
>

View File

@@ -11,7 +11,7 @@ import { useIntl } from '@edx/frontend-platform/i18n';
import { Hyperlink, useToggle } from '@edx/paragon';
import HTMLLoader from '../../../components/HTMLLoader';
import { ContentActions } from '../../../data/constants';
import { ContentActions, getFullUrl } from '../../../data/constants';
import { selectorForUnitSubsection, selectTopicContext } from '../../../data/selectors';
import { AlertBanner, Confirmation } from '../../common';
import { DiscussionContext } from '../../common/context';
@@ -37,7 +37,7 @@ const Post = ({ handleAddResponseButton }) => {
const location = useLocation();
const history = useHistory();
const dispatch = useDispatch();
const courseId = useSelector((state) => state.config.id);
const { courseId } = useContext(DiscussionContext);
const topic = useSelector(selectTopic(topicId));
const getTopicSubsection = useSelector(selectorForUnitSubsection);
const topicContext = useSelector(selectTopicContext(topicId));
@@ -78,8 +78,7 @@ const Post = ({ handleAddResponseButton }) => {
}, [closed, postId, reasonCodesEnabled, showClosePostModal]);
const handlePostCopyLink = useCallback(() => {
const postURL = new URL(`${getConfig().PUBLIC_PATH}${courseId}/posts/${postId}`, window.location.origin);
navigator.clipboard.writeText(postURL.href);
navigator.clipboard.writeText(getFullUrl(`${courseId}/posts/${postId}`));
}, [window.location.origin, postId, courseId]);
const handlePostPin = useCallback(() => dispatch(

View File

@@ -1,4 +1,3 @@
/* eslint-disable react/no-unknown-property */
import React, { useContext, useMemo } from 'react';
import PropTypes from 'prop-types';
@@ -7,7 +6,7 @@ import { useSelector } from 'react-redux';
import { Link } from 'react-router-dom';
import { useIntl } from '@edx/frontend-platform/i18n';
import { Badge, Icon, Truncate } from '@edx/paragon';
import { Badge, Icon } from '@edx/paragon';
import { CheckCircle } from '@edx/paragon/icons';
import { PushPin } from '../../../components/icons';
@@ -87,48 +86,46 @@ const PostLink = ({
/>
<div className="d-flex flex-column flex-fill" style={{ minWidth: 0 }}>
<div className="d-flex flex-column justify-content-start mw-100 flex-fill" style={{ marginBottom: '-3px' }}>
<div className="d-flex align-items-center pb-0 mb-0 flex-fill font-weight-500">
<Truncate lines={1} className="mr-1.5" whiteSpace>
<span
class={
classNames(
'font-weight-500 font-size-14 text-primary-500 font-style align-bottom',
{ 'font-weight-bolder': !read },
)
}
<div className="d-flex align-items-center pb-0 mb-0 flex-fill">
<div className="text-truncate mr-1">
<span className={classNames(
'font-weight-500 font-size-14 text-primary-500 font-style align-bottom mr-1',
{ 'font-weight-bolder': !read },
)}
>
{title}
</span>
<span class="align-bottom"> </span>
<span
class="text-gray-700 font-weight-normal font-size-14 font-style align-bottom"
>
{isPostPreviewAvailable(previewBody)
? previewBody
: intl.formatMessage(messages.postWithoutPreview)}
<span className="text-gray-700 font-weight-normal font-size-14 font-style align-bottom">
{isPostPreviewAvailable(previewBody) ? previewBody : intl.formatMessage(messages.postWithoutPreview)}
</span>
</Truncate>
</div>
{showAnsweredBadge && (
<Icon src={CheckCircle} className="text-success font-weight-500 ml-auto badge-padding" data-testid="check-icon">
<span className="sr-only">{' '}answered</span>
</Icon>
<Icon
data-testid="check-icon"
src={CheckCircle}
className="text-success font-weight-500 ml-auto badge-padding"
>
<span className="sr-only">{' '}answered</span>
</Icon>
)}
{canSeeReportedBadge && (
<Badge
variant="danger"
data-testid="reported-post"
className={`font-weight-500 badge-padding ${showAnsweredBadge ? 'ml-2' : 'ml-auto'}`}
>
{intl.formatMessage(messages.contentReported)}
<span className="sr-only">{' '}reported</span>
</Badge>
<Badge
variant="danger"
data-testid="reported-post"
className={`font-weight-500 badge-padding ${showAnsweredBadge ? 'ml-2' : 'ml-auto'}`}
>
{intl.formatMessage(messages.contentReported)}
<span className="sr-only">{' '}reported</span>
</Badge>
)}
{pinned && (
<Icon
src={PushPin}
className={`post-summary-icons-dimensions text-gray-700
${canSeeReportedBadge || showAnsweredBadge ? 'ml-2' : 'ml-auto'}`}
/>
<Icon
src={PushPin}
className={classNames('post-summary-icons-dimensions text-gray-700', {
'ml-2': canSeeReportedBadge || showAnsweredBadge,
'ml-auto': !canSeeReportedBadge && !showAnsweredBadge,
})}
/>
)}
</div>
</div>

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "أستاذ مساعد",
"discussions.learner.loadMostPosts": "تواريخ تعطيل نشطة حاليا. لا يمكن النشر في المناقشات خلال هذه الفترة.",
"discussions.post.anonymous.author": "مجهول",
"discussion.banner.welcomeMessage": "🎉 مرحبًا بك في تجربة المناقشات الجديدة والمحسّنة!",
"discussion.banner.learnMore": "معرفة المزيد",
"discussion.banner.shareFeedback": "شاركنا رأيك",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "لن تظهر الصور التي يزيد عرضها أو ارتفاعها عن 999 بكسل عند عرض المنشور أو الرد او التعليق باستخدام مناقشات المساق المضمّنة",
"discussions.editor.image.warning.title": "تحذير!",
"discussions.editor.image.warning.dismiss": "حسنًا",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Načíst další příspěvky",
"discussions.post.anonymous.author": "anonymní",
"discussion.banner.welcomeMessage": "🎉 Vítejte v novém a vylepšeném prostředí diskuzí!",
"discussion.banner.learnMore": "Zjistěte více",
"discussion.banner.shareFeedback": "Sdílejte zpětnou vazbu",
"discussion.blackoutBanner.information": "Zasílání příspěvků v diskuzích je dočasně zakázáno týmem kurzu",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Obrázky mající šířku nebo výšku větší než 999px nebudou viditelné, když příspěvek, odpověď nebo komentář zobrazíte pomocí diskuzí v rámci kurzu",
"discussions.editor.image.warning.title": "Varování!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Mehr Beiträge laden",
"discussions.post.anonymous.author": "Anonym",
"discussion.banner.welcomeMessage": "🎉 Willkommen beim neuen und verbesserten Diskussionserlebnis!",
"discussion.banner.learnMore": "Lernen Sie mehr",
"discussion.banner.shareFeedback": "Feedback teilen",
"discussion.blackoutBanner.information": "Das Posten in Diskussionen wird vom Kursteam vorübergehend deaktiviert",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Bilder mit einer Breite oder Höhe von mehr als 999 Pixel sind nicht sichtbar, wenn der Beitrag, die Antwort oder der Kommentar über Inline-Kursdiskussionen angezeigt werden",
"discussions.editor.image.warning.title": "Warnung!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "ejército de reserva",
"discussions.learner.loadMostPosts": "Cargar más mensajes\n",
"discussions.post.anonymous.author": "anónimo",
"discussion.banner.welcomeMessage": "🎉 ¡Bienvenido a la nueva y mejorada experiencia de debates!",
"discussion.banner.learnMore": "Aprender más",
"discussion.banner.shareFeedback": "Compartir comentarios",
"discussion.blackoutBanner.information": "El equipo del curso deshabilita temporalmente la publicación en discusiones",
"discussion.blackoutBanner.information": "El equipo del curso ha desactivado la publicación en los debates.",
"discussions.editor.image.warning.message": "Las imágenes que tengan un ancho o alto superior a 999 px no serán visibles cuando la publicación, la respuesta o el comentario se vean mediante debates en línea del curso.",
"discussions.editor.image.warning.title": "¡Advertencia!",
"discussions.editor.image.warning.dismiss": "Aceptar",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "ejército de reserva",
"discussions.learner.loadMostPosts": "Cargar más entradas",
"discussions.post.anonymous.author": "anónimo",
"discussion.banner.welcomeMessage": "🎉 ¡Bienvenido a la nueva y mejorada experiencia de debates!",
"discussion.banner.learnMore": "Aprende más",
"discussion.banner.shareFeedback": "Compartir comentarios",
"discussion.blackoutBanner.information": "El equipo del curso deshabilita temporalmente la publicación en discusiones",
"discussion.blackoutBanner.information": "El equipo del curso ha desactivado la publicación en los debates.",
"discussions.editor.image.warning.message": "Las imágenes que tengan un ancho o alto superior a 999 px no serán visibles cuando la publicación, la respuesta o el comentario se vean mediante debates en línea del curso.",
"discussions.editor.image.warning.title": "¡Advertencia!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Cargar más entradas",
"discussions.post.anonymous.author": "anónimo",
"discussion.banner.welcomeMessage": "🎉 ¡Bienvenido a la nueva y mejorada experiencia de debates!",
"discussion.banner.learnMore": "Aprende más",
"discussion.banner.shareFeedback": "Compartir comentarios",
"discussion.blackoutBanner.information": "El equipo del curso deshabilita temporalmente la publicación en discusiones",
"discussion.blackoutBanner.information": "El equipo del curso ha desactivado temporalmente la publicación en los debates.",
"discussions.editor.image.warning.message": "Las imágenes que tengan un ancho o alto superior a 999 px no serán visibles cuando la publicación, la respuesta o el comentario se vean mediante debates en línea del curso.",
"discussions.editor.image.warning.title": "¡Advertencia!",
"discussions.editor.image.warning.dismiss": "Aceptar",

View File

@@ -1,18 +1,18 @@
{
"navigation.course.tabs.label": "منابع دوره آموزشی",
"learn.course.tabs.navigation.overflow.menu": "بیشتر...",
"discussions.topics.backAlt": "Back to topics list",
"discussions.topics.backAlt": "بازگشت به لیست موضوعات",
"discussions.topics.discussions": "{count, plural,\n =0 {Discussion}\n one {# Discussion}\n other {# Discussions}\n }",
"discussions.topics.questions": "{count, plural,\n =0 {Question}\n one {# Question}\n other {# Questions}\n }",
"discussions.topics.reported": "{reported} گزارش شده",
"discussions.topics.previouslyReported": "{previouslyReported} قبلا گزارش شده‌است",
"discussions.topics.find.label": "جستجوی موضوعات",
"discussions.topics.unnamed.section.label": "Unnamed Section",
"discussions.topics.unnamed.subsection.label": "Unnamed Subsection",
"discussions.subtopics.unnamed.topic.label": "Unnamed Topic",
"discussions.topics.title": "No topic exists",
"discussions.topics.createTopic": "Please contact you admin to create a topic",
"discussions.topics.nothing": "Nothing here yet",
"discussions.topics.unnamed.section.label": "بخش بدون نام",
"discussions.topics.unnamed.subsection.label": "زیربخش بدون نام",
"discussions.subtopics.unnamed.topic.label": "موضوع بی نام",
"discussions.topics.title": "هیچ موضوعی وجود ندارد",
"discussions.topics.createTopic": "لطفا برای ایجاد موضوع با ادمین خود تماس بگیرید",
"discussions.topics.nothing": "اینجا هنوز چیزی نیست",
"discussions.topics.archived.label": "آرشیو شده",
"discussions.learner.reported": "{reported} گزارش شده",
"discussions.learner.previouslyReported": "{previouslyReported} قبلا گزارش شده‌است",
@@ -23,7 +23,7 @@
"discussions.learner.mostActivity": "بیشترین فعالیت",
"discussions.learner.reportedActivity": "فعالیت گزارش‌شده",
"discussions.learner.recentActivity": "فعالیت اخیر",
"discussions.learner.sortFilterStatus": "All learners sorted by {sort, select,\n flagged {reported activity}\n activity {most activity}\n other {{sort}}\n }",
"discussions.learner.sortFilterStatus": "همه فراگیران بر اساس {sort, select,\n علامت گذاری شده {reported activity}\n فعالیت {most activity}\n دیگر {{sort}}\n } مرتب شده اند.",
"discussion.learner.allActivity": "تمام فعالیت",
"discussion.learner.posts": "نوشته ها",
"discussions.actions.button.alt": "منوی فعالیت‌ها",
@@ -32,16 +32,16 @@
"discussions.actions.pin": "نشانه",
"discussions.actions.unpin": "حذف نشانه",
"discussions.actions.delete": "حذف",
"discussions.confirmation.button.confirm": "Confirm",
"discussions.confirmation.button.confirm": "تایید",
"discussions.actions.close": "بستن",
"discussions.actions.reopen": "گشایش مجدد",
"discussions.actions.report": "گزارش‌",
"discussions.actions.unreport": "لغو گزارش",
"discussions.actions.endorse": "تأیید",
"discussions.actions.unendorse": "عدم تأیید",
"discussions.actions.markAnswered": "Mark as answered",
"discussions.actions.markAnswered": "علامت گذاری به عنوان پاسخ",
"discussions.actions.unMarkAnswered": "علامت را به‌عنوان پاسخ بردارید",
"discussions.modal.confirmation.button.cancel": "Cancel",
"discussions.modal.confirmation.button.cancel": "لغو",
"discussions.empty.allTopics": "همه فعالیت‌های گفتگو برای این موضوعات در اینجا نشان داده می‌شود.",
"discussions.empty.allPosts": "همه فعالیت‌های گفتگو برای دوره آموزشی شما در اینجا نمایش داده می‌شود.",
"discussions.empty.myPosts": "مطالبی که با آنها تعامل داشته‌اید در اینجا نشان داده می‌شوند.",
@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "کمک مربی",
"discussions.learner.loadMostPosts": "بارگیری مطالب بیشتر",
"discussions.post.anonymous.author": "بی‌نام",
"discussion.banner.welcomeMessage": "🎉 به نسخه جدید و بهبود یافته discussions خوش اومدید!",
"discussion.banner.learnMore": "اطلاعات بیشتر",
"discussion.banner.shareFeedback": "اشتراک‌گذاری بازخورد",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "ارسال پست در بحث ها توسط تیم دوره غیرفعال شده است",
"discussions.editor.image.warning.message": "هنگامی که مطلب یا پاسخ یا نظری در گفتگوهای دوره به صورت درون‌خطی مشاهده می شود، تصاویری که عرض یا ارتفاع آنها بیشتر از 999 پیکسل باشد، قابل مشاهده نخواهند بود.",
"discussions.editor.image.warning.title": "هشدار!",
"discussions.editor.image.warning.dismiss": "بسیارخوب",
@@ -72,10 +69,10 @@
"discussions.navigation.navigationBar.allTopics": "عناوین ",
"discussions.navigation.navigationBar.myPosts": "مطالب ارسالی من",
"discussions.navigation.navigationBar.learners": "یادگیرندگان",
"discussions.comments.comment.addComment": "Add comment",
"discussions.comments.comment.addComment": "اضافه کردن نظر",
"discussions.comments.comment.addResponse": "افزودن پاسخ",
"discussions.comments.comment.abuseFlaggedMessage": "محتوا برای بررسی کارکنان گزارش شده است",
"discussions.actions.back.alt": "Back to list",
"discussions.actions.back.alt": "بازگشت به لیست",
"discussions.comments.comment.responseCount": "{num, plural,\n=0 {No responses}\none {Showing # response}\nother {Showing # responses}\n}",
"discussions.comments.comment.endorsedResponseCount": "{num, plural,\n=0 {No endorsed responses}\none {Showing # endorsed response}\nother {Showing # endorsed responses}\n}",
"discussions.comments.comment.loadMoreComments": "بارگیری نظرات بیشتر",
@@ -97,10 +94,10 @@
"discussions.editor.delete.comment.title": "حذف نظر",
"discussions.editor.delete.comment.description": "آیا از حذف این نظر برای همیشه اطمینان دارید؟",
"discussions.delete.confirmation.button.delete": "حذف",
"discussions.editor.response.response.title": "Report inappropriate content?",
"discussions.editor.response.description": "The discussion moderation team will review this content and take appropriate action.",
"discussions.editor.report.comment.title": "Report inappropriate content?",
"discussions.editor.report.comment.description": "The discussion moderation team will review this content and take appropriate action.",
"discussions.editor.response.response.title": "گزارش محتوای نامناسب؟",
"discussions.editor.response.description": "تیم نظارت بر بحث این محتوا را بررسی کرده و اقدامات لازم را انجام خواهد داد.",
"discussions.editor.report.comment.title": "گزارش محتوای نامناسب؟",
"discussions.editor.report.comment.description": "تیم نظارت بر بحث این محتوا را بررسی کرده و اقدامات لازم را انجام خواهد داد.",
"discussions.editor.comments.editReasonCode": "علت ویرایش",
"discussions.editor.posts.editReasonCode.error": "انتخاب دلیل برای ویرایش",
"discussions.comment.comments.editedBy": "ویرایش‌شده به‌دست",
@@ -108,8 +105,8 @@
"discussions.comment.comments.reason": "علت",
"discussions.post.closedBy": "مطلب توسط این فرد بسته شده",
"discussion.comment.time": "{time} قبل",
"discussion.thread.notFound": "Thread not found",
"discussions.comment.sortFilterStatus": "{sort, select,\n false {Oldest first}\n true {Newest first}\n other {{sort}}\n }",
"discussion.thread.notFound": "موضوع پیدا نشد",
"discussions.comment.sortFilterStatus": "{sort, select,\n اشتباه {Oldest first}\n صحیح {Newest first}\n سایر {{sort}}\n }",
"discussions.app.title": "گفتگوها",
"discussions.posts.actionBar.searchAllPosts": "جستجوی همۀ مطالب ارسالی",
"discussions.posts.actionBar.search": "{page, select,\ntopics {Search topics}\nposts {Search all posts}\nlearners {Search learners}\nmyPosts {Search all posts}\nother {{page}}\n}",
@@ -142,9 +139,9 @@
"discussions.post.editor.anonymousPost": "به‎‌صورت ناشناس ارسال کنید",
"discussions.post.editor.anonymousToPeersPost": "به‌صورت ناشناس برای همتایان ارسال کنید",
"discussions.editor.posts.editReasonCode": "علت ویرایش",
"discussions.editor.posts.showPreview.button": "Show preview",
"discussions.topic.noName.label": "Unnamed category",
"discussions.subtopic.noName.label": "Unnamed subcategory",
"discussions.editor.posts.showPreview.button": "پیش‌نمایش",
"discussions.topic.noName.label": "دسته بی نام",
"discussions.subtopic.noName.label": "زیرمجموعه بی نام",
"discussions.posts.filter.showALl": "نمایش همه",
"discussions.posts.filter.discussions": "گفتگوها",
"discussions.posts.filter.questions": "سوالات ",
@@ -154,7 +151,7 @@
"discussions.posts.status.filter.following": "دنبال می‌کنم",
"discussions.posts.status.filter.reported": "گزارش‌شده",
"discussions.posts.status.filter.unanswered": "پاسخ داده‌نشده",
"discussions.posts.status.filter.unresponded": "Not responded",
"discussions.posts.status.filter.unresponded": "پاسخ داده نشد",
"discussions.posts.filter.myPosts": "مطالب ارسالی من",
"discussions.posts.filter.myDiscussions": "گفتگوهای من",
"discussions.posts.filter.myQuestions": "سوالات من",
@@ -162,31 +159,31 @@
"discussions.posts.sort.lastActivity": "فعالیت اخیر",
"discussions.posts.sort.commentCount": "بیشترین فعالیت",
"discussions.posts.sort.voteCount": "بیشترین لایک",
"discussions.posts.sort-filter.sortFilterStatus": "{own, select,\n false {All}\n true {Own}\n other {{own}}\n } {status, select,\n statusAll {}\n statusUnread {unread}\n statusFollowing {followed}\n statusReported {reported}\n statusUnanswered {unanswered}\n statusUnresponded {unresponded}\n other {{status}}\n } {type, select,\n discussion {discussions}\n question {questions}\n all {posts}\n other {{type}}\n } {cohortType, select,\n all {}\n group {in {cohort}}\n other {{cohortType}}\n } sorted by {sort, select,\n lastActivityAt {recent activity}\n commentCount {most activity}\n voteCount {most likes}\n other {{sort}}\n }",
"discussions.posts.sort-filter.sortFilterStatus": "{own, select,\n نادرست {All}\n صحیح {Own}\n سایر {{own}}\n } {status, select,\n وضعیت همه {}\n وضعیت خوانده نشده {unread}\n وضعیت دنبال کردن {followed}\n وضعیت گزارش شده {reported}\n وضعیت بی پاسخ {unanswered}\n وضعیت بی پاسخ {unresponded}\n سایر {{status}}\n } {type, select,\n بحث {discussions}\n سوال {questions}\n همه {posts}\n سایر {{type}}\n } {cohortType, select,\n همه {}\n گروه {in {cohort}}\n سایر {{cohortType}}\n } مرتب شده بر اساس {sort, select,\n آخرین فعالیت بر {recent activity}\n تعداد نظرات {most activity}\n تعداد آرا {most likes}\n سایر {{sort}}\n }",
"discussions.post.author.anonymous": "بی‌نام",
"discussions.post.addResponse": "Add response",
"discussions.post.addResponse": "افزودن پاسخ",
"discussions.post.lastResponse": "پاسخ اخیر {time}",
"discussions.post.postedOn": "ارسال شده {time}  به دست {author} {authorLabel}",
"discussions.post.contentReported": "گزارش‌شده",
"discussions.post.following": "دنبال می‌کنم",
"discussions.post.follow": "دنبال‌ می‌کنم",
"discussions.post.followed": "Followed",
"discussions.post.notFollowed": "Not Followed",
"discussions.post.followed": "دنبال شد",
"discussions.post.notFollowed": "دنبال نشده است",
"discussions.post.answered": "پاسخ داده‌شده",
"discussions.post.unFollow": "دنبال ‌نمی‌کنم",
"discussions.post.like": "می‌پسندم",
"discussions.post.removeLike": "غیرمشابه",
"discussions.post.liked": "liked",
"discussions.post.likes": "likes",
"discussions.post.liked": "دوست داشت",
"discussions.post.likes": "دوست دارد",
"discussions.post.viewActivity": "مشاهده فعالیت",
"discussions.post.activity": "Activity",
"discussions.post.activity": "فعالیت",
"discussions.post.closed": "این مطلب برای پاسخ و نظر بسته است",
"discussions.post.relatedTo": "Related to",
"discussions.post.relatedTo": "مربوط به ",
"discussions.editor.delete.post.title": "حذف مطلب",
"discussions.editor.delete.post.description": "از حذف دایمی این مطلب اطمینان دارید؟",
"discussions.post.delete.confirmation.button.delete": "Delete",
"discussions.editor.report.post.title": "Report inappropriate content?",
"discussions.editor.report.post.description": "The discussion moderation team will review this content and take appropriate action.",
"discussions.post.delete.confirmation.button.delete": "حذف",
"discussions.editor.report.post.title": "گزارش محتوای نامناسب؟",
"discussions.editor.report.post.description": "تیم نظارت بر بحث این محتوا را بررسی کرده و اقدامات لازم را انجام خواهد داد.",
"discussions.post.closePostModal.title": "بستن مطلب",
"discussions.post.closePostModal.text": "دلیل بستن این مطلب را وارد کنید. این دلیل فقط برای مدیران دیگر نمایش داده می‌شود.",
"discussions.post.closePostModal.reasonCodeInput": "دلیل",
@@ -196,19 +193,19 @@
"discussions.post.editedBy": "ویرایش‌شده به دست",
"discussions.post.editReason": "علت",
"discussions.post.postWithoutPreview": "پیش‌نمایش در دسترس نیست",
"discussions.post.follow.description": "you are following this post",
"discussions.post.unfollow.description": "you are not following this post",
"discussions.post.follow.description": "شما این پست را دنبال می کنید",
"discussions.post.unfollow.description": "شما این پست را دنبال نمی کنید",
"discussions.topics.sort.message": "منظم برحسب {sortBy}",
"discussions.topics.sort.lastActivity": "فعالیت اخیر",
"discussions.topics.sort.commentCount": "بیشترین فعالیت",
"discussions.topics.sort.courseStructure": "ساختار دوره آموزشی",
"discussions.topics.unnamed.label": "Unnamed category",
"discussions.subtopics.unnamed.label": "Unnamed subcategory",
"tour.action.advance": "Next",
"tour.action.dismiss": "Dismiss",
"tour.action.end": "Okay",
"tour.body.notRespondedFilter": "Now you can filter discussions to find posts with no response.",
"tour.title.notRespondedFilter": "New filtering option!",
"tour.body.responseSortTour": "Responses and comments are now sorted by newest first. Please use this option to change the sort order",
"tour.title.responseSortTour": "Sort Responses!"
"discussions.topics.unnamed.label": "دسته بی نام",
"discussions.subtopics.unnamed.label": "زیرمجموعه بی نام",
"tour.action.advance": "بعدی",
"tour.action.dismiss": "لطفا نادیده بگیرید",
"tour.action.end": "بسیار خوب",
"tour.body.notRespondedFilter": "اکنون می توانید بحث ها را فیلتر کنید تا پست های بدون پاسخ را بیابید.",
"tour.title.notRespondedFilter": "گزینه فیلتر جدید!",
"tour.body.responseSortTour": "پاسخ ها و نظرات اکنون بر اساس جدیدترین ها مرتب شده اند. لطفا از این گزینه برای تغییر ترتیب مرتب سازی استفاده کنید",
"tour.title.responseSortTour": "مرتب سازی پاسخ ها!"
}

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -11,7 +11,7 @@
"discussions.topics.unnamed.subsection.label": "Sous-section sans nom",
"discussions.subtopics.unnamed.topic.label": "Sujet sans nom",
"discussions.topics.title": "Aucun sujet n'existe",
"discussions.topics.createTopic": "Veuillez contacter votre administrateur pour créer un sujet",
"discussions.topics.createTopic": "Veuillez contacter votre admin pour créer un sujet",
"discussions.topics.nothing": "Rien ici encore",
"discussions.topics.archived.label": "Archivé",
"discussions.learner.reported": "{reported} signalé",
@@ -20,12 +20,12 @@
"discussions.learner.loadMostLearners": "Afficher plus",
"discussions.learner.back": "Retour",
"discussions.learner.activityForLearner": "Activité pour {username}",
"discussions.learner.mostActivity": "La plupart des activités",
"discussions.learner.mostActivity": "Les plus actifs",
"discussions.learner.reportedActivity": "Activité signalée",
"discussions.learner.recentActivity": "Activité récente",
"discussions.learner.sortFilterStatus": "Tous les apprenants triés pas {sort, select,\n flagged {reported activity}\n activity {most activity}\n other {{sort}}\n }",
"discussions.learner.sortFilterStatus": "Tous les apprenants triés par {sort, select,\n flagged {l'activité signalée}\n activity {les plus actifs}\n other {{sort}}\n }",
"discussion.learner.allActivity": "Toutes les activités",
"discussion.learner.posts": "Posts",
"discussion.learner.posts": "Publications",
"discussions.actions.button.alt": "Menu Actions",
"discussions.actions.copylink": "Copier le lien",
"discussions.actions.edit": "Éditer",
@@ -39,10 +39,10 @@
"discussions.actions.unreport": "Ne pas signaler",
"discussions.actions.endorse": "Approuver",
"discussions.actions.unendorse": "Ne plus approuver",
"discussions.actions.markAnswered": "Marquer comme répondu",
"discussions.actions.unMarkAnswered": "Décocher comme répondu",
"discussions.actions.markAnswered": "Marquer comme répondue",
"discussions.actions.unMarkAnswered": "Décocher comme répondue",
"discussions.modal.confirmation.button.cancel": "Annuler",
"discussions.empty.allTopics": "Toutes les activités de discussion pour ces sujets apparaîtront ici.",
"discussions.empty.allTopics": "Toutes les activités de discussion pour ces sujets s'afficheront ici.",
"discussions.empty.allPosts": "Toutes les activités de discussion pour votre cours s'afficheront ici.",
"discussions.empty.myPosts": "Les publications avec lesquelles vous avez interagi s'afficheront ici.",
"discussions.empty.topic": "Toutes les activités de discussion pour ce sujet s'afficheront ici.",
@@ -51,40 +51,37 @@
"discussions.empty.noTopicSelected": "Aucun sujet sélectionné",
"discussions.sidebar.noResultsFound": "Aucun résultat trouvé",
"discussions.sidebar.differentKeywords": "Essayez de rechercher différents mots-clés",
"discussions.sidebar.removeKeywords": "Essayez de rechercher différents mots clés ou de supprimer certains filtres",
"discussions.sidebar.removeKeywords": "Essayez de rechercher différents mots-clés ou de retirer certains filtres",
"discussions.sidebar.removeKeywordsOnly": "Essayez de rechercher différents mots-clés",
"discussions.sidebar.removeFilters": "Essayez de supprimer certains filtres",
"discussions.sidebar.removeFilters": "Essayez de retirer certains filtres",
"discussions.empty.iconAlt": "Vide",
"discussions.authors.label.staff": "Équipe pédagogique",
"discussions.authors.label.staff": "Personnel",
"discussions.authors.label.ta": "Assistant d'enseignement",
"discussions.learner.loadMostPosts": "Charger plus de messages",
"discussions.learner.loadMostPosts": "Charger plus de publications",
"discussions.post.anonymous.author": "anonyme",
"discussion.banner.welcomeMessage": "🎉 Bienvenue dans la nouvelle expérience améliorée de discussions!",
"discussion.banner.learnMore": "En savoir plus",
"discussion.banner.shareFeedback": "Partager vos commentaires",
"discussion.blackoutBanner.information": "La publication dans les discussions est temporairement désactivée par l'équipe du cours",
"discussion.blackoutBanner.information": "La publication dans les discussions est désactivée par l'équipe du cours",
"discussions.editor.image.warning.message": "Les images dont la largeur ou la hauteur est supérieure à 999 pixels ne seront pas visibles lorsque la publication, la réponse ou le commentaire est affiché à l'aide de discussions de cours en ligne",
"discussions.editor.image.warning.title": "Avertissement!",
"discussions.editor.image.warning.dismiss": "Ok",
"discussions.navigation.breadcrumbMenu.allTopics": "Sujets",
"discussions.navigation.breadcrumbMenu.showAll": "Tout afficher",
"discussions.navigation.navigationBar.allPosts": "Tous les messages",
"discussions.navigation.navigationBar.allPosts": "Toutes les publications",
"discussions.navigation.navigationBar.allTopics": "Sujets",
"discussions.navigation.navigationBar.myPosts": "Mes messages",
"discussions.navigation.navigationBar.myPosts": "Mes publications",
"discussions.navigation.navigationBar.learners": "Apprenants",
"discussions.comments.comment.addComment": "Ajouter un commentaire",
"discussions.comments.comment.addResponse": "Ajouter une réponse",
"discussions.comments.comment.abuseFlaggedMessage": "Contenu signalé au personnel pour examen",
"discussions.actions.back.alt": "Retour à la liste",
"discussions.comments.comment.responseCount": "{num, plural,\n =0 {Aucune réponse}\n one {Affiche # réponse}\n other {Affiche # réponses}\n }",
"discussions.comments.comment.endorsedResponseCount": "{num, plural,\n =0 {No endorsed responses}\n one {Showing # endorsed response}\n other {Showing # endorsed responses}\n }",
"discussions.comments.comment.responseCount": "{num, plural,\n =0 {Aucune réponse}\n one {Affiche # réponse}\n other {Affiche # réponses}\n }",
"discussions.comments.comment.endorsedResponseCount": "{num, plural,\n =0 {Aucune réponse approuvée}\n one {Affiche # réponse approuvée}\n other {Affiche # réponses approuvées}\n }",
"discussions.comments.comment.loadMoreComments": "Charger plus de commentaires",
"discussions.comments.comment.loadMoreResponses": "Charger plus de réponses",
"discussions.comments.comment.visibility": "Ce message est visible par {group, select,\n null {Everyone}\n other {{group}}\n }.",
"discussions.comments.comment.visibility": "Cette publication est visible par {group, select,\n null {Tous}\n other {{group}}\n }.",
"discussions.comments.comment.postedTime": "{postType, select,\n discussion {Discussion}\n question {Question}\n other {{postType}}\n } posted {relativeTime} by",
"discussions.comments.comment.commentTime": "Publié {relativeTime}",
"discussions.comments.comment.answer": "Réponse",
"discussions.comments.comment.answeredlabel": "Marqué comme répondu par",
"discussions.comments.comment.answeredlabel": "Marqué comme répondue par",
"discussions.comments.comment.endorsed": "Approuvé",
"discussions.comments.comment.endorsedlabel": "Approuvé par",
"discussions.actions.label": "Menu Actions",
@@ -106,22 +103,22 @@
"discussions.comment.comments.editedBy": "Édité par",
"discussions.comment.comments.fullStop": "•",
"discussions.comment.comments.reason": "Raison",
"discussions.post.closedBy": "Message fermé par",
"discussions.post.closedBy": "Publication fermée par",
"discussion.comment.time": "il y a {time}",
"discussion.thread.notFound": "Sujet introuvable",
"discussions.comment.sortFilterStatus": "{sort, select,\n false {Oldest first}\n true {Newest first}\n other {{sort}}\n }",
"discussions.comment.sortFilterStatus": "{sort, select,\n false {plus ancien d'abord}\n true {plus récent d'abord}\n other {{sort}}\n }",
"discussions.app.title": "Discussions",
"discussions.posts.actionBar.searchAllPosts": "Recherche dans les messages",
"discussions.posts.actionBar.search": "{page, select,\n topics {Search topics}\n posts {Search all posts}\n learners {Search learners}\n myPosts {Search all posts}\n other {{page}}\n }",
"discussions.posts.actionBar.searchAllPosts": "Recherche dans les publications",
"discussions.posts.actionBar.search": "{page, select,\n topics {Recherche sujets}\n posts {Recherche toutes publications}\n learners {Recherche apprenants}\n myPosts {Recherche mes publications}\n other {{page}}\n }",
"discussions.actionBar.searchInfo": "Affichage des résultats {count} pour \"{text}\"",
"discussions.actionBar.searchRewriteInfo": "Aucun résultat trouvé pour \"(searchString}\". Affichage des résultats {count} pour \"{textSearchRewrite}\".",
"discussions.actionBar.searchRewriteInfo": "Aucun résultat trouvé pour \"{searchString}\". Affichage des résultats {count} pour \"{textSearchRewrite}\".",
"discussions.actionBar.searchInfoSearching": "Recherche...",
"discussions.actionBar.clearSearch": "Effacer les résultats",
"discussion.posts.actionBar.add": "Ajouter un message",
"discussion.posts.actionBar.add": "Ajouter une publication",
"discussion.posts.actionBar.close": "Fermer",
"discussions.post.editor.type": "Type de message",
"discussions.post.editor.addPostHeading": "Ajouter un message",
"discussions.post.editor.editPostHeading": "Modifier le message",
"discussions.post.editor.type": "Type de publication",
"discussions.post.editor.addPostHeading": "Ajouter une publication",
"discussions.post.editor.editPostHeading": "Modifier la publication",
"discussions.post.editor.typeDescription": "Les questions soulèvent des problèmes auxquels il faut répondre. Les discussions partagent des idées et démarrent des conversations.",
"discussions.post.editor.required": "Obligatoire",
"discussions.post.editor.questionType": "Question",
@@ -129,16 +126,16 @@
"discussions.post.editor.discussionType": "Discussion",
"discussions.post.editor.discussionDescription": "Partagez des idées et démarrez des conversations",
"discussions.post.editor.topicArea": "Secteur thématique",
"discussions.post.editor.topicAreaDescription": "Ajouter votre message à un sujet pertinent afin d'aider les autres à le trouver.",
"discussions.post.editor.topicAreaDescription": "Ajouter votre publication à un sujet pertinent afin d'aider les autres à la trouver.",
"discussions.post.editor.cohortVisibility": "Visibilité de la cohorte",
"discussions.post.editor.cohortVisibilityAllLearners": "Tous les apprenants",
"discussions.post.editor.title": "Titre de l'article",
"discussions.post.editor.title": "Titre de la publication",
"discussions.post.editor.titleDescription": "Ajouter un titre clair et descriptif afin d'encourager la participation.",
"discussions.post.editor.title.error": "Le titre du message ne peut pas être vide.",
"discussions.post.editor.title.error": "Le titre de la publication ne peut pas être vide.",
"discussions.post.editor.content.error": "Le contenu de la publication ne peut pas être vide.",
"discussions.post.editor.questionText": "Votre question ou idée (obligatoire)",
"discussions.post.editor.preview": "Aperçu",
"discussions.post.editor.followPost": "Suivez ce message",
"discussions.post.editor.followPost": "Suivez cette publication",
"discussions.post.editor.anonymousPost": "Publier anonymement",
"discussions.post.editor.anonymousToPeersPost": "Publier anonymement à vos pairs",
"discussions.editor.posts.editReasonCode": "Raison de la modification",
@@ -150,65 +147,65 @@
"discussions.posts.filter.questions": "Questions",
"discussions.posts.filter.message": "Statut : {filterBy}",
"discussions.posts.status.filter.anyStatus": "Tout statut",
"discussions.posts.status.filter.unread": "Non lu",
"discussions.posts.status.filter.following": "Suivi",
"discussions.posts.status.filter.reported": "Signalé",
"discussions.posts.status.filter.unanswered": "Non répondu",
"discussions.posts.status.filter.unresponded": "Pas répondu",
"discussions.posts.filter.myPosts": "Mes messages",
"discussions.posts.status.filter.unread": "Non lues",
"discussions.posts.status.filter.following": "Suivies",
"discussions.posts.status.filter.reported": "Signalées",
"discussions.posts.status.filter.unanswered": "Sans réponses",
"discussions.posts.status.filter.unresponded": "Non répondues",
"discussions.posts.filter.myPosts": "Mes publications",
"discussions.posts.filter.myDiscussions": "Mes discussions",
"discussions.posts.filter.myQuestions": "Mes questions",
"discussions.posts.sort.message": "Trié par {sortBy}",
"discussions.posts.sort.message": "Triées par {sortBy}",
"discussions.posts.sort.lastActivity": "Activité récente",
"discussions.posts.sort.commentCount": "La plupart des activités",
"discussions.posts.sort.voteCount": "La plupart des aimés",
"discussions.posts.sort-filter.sortFilterStatus": "{own, select,\n false {All}\n true {Own}\n other {{own}}\n } {status, select,\n statusAll {}\n statusUnread {unread}\n statusFollowing {followed}\n statusReported {reported}\n statusUnanswered {unanswered}\n statusUnresponded {unresponded}\n other {{status}}\n } {type, select,\n discussion {discussions}\n question {questions}\n all {posts}\n other {{type}}\n } {cohortType, select,\n all {}\n group {in {cohort}}\n other {{cohortType}}\n } sorted by {sort, select,\n lastActivityAt {recent activity}\n commentCount {most activity}\n voteCount {most likes}\n other {{sort}}\n }",
"discussions.posts.sort.commentCount": "Les plus actives",
"discussions.posts.sort.voteCount": "Les plus aimées",
"discussions.posts.sort-filter.sortFilterStatus": "{own, select,\n false {Toutes}\n true {Own}\n other {{own}}\n } {type, select,\n discussion {les discussions}\n question {les questions}\n all {les publications}\n other {{type}}\n } {status, select,\n statusAll {}\n statusUnread {non lues}\n statusFollowing {suivies}\n statusReported {signalées}\n statusUnanswered {sans réponses}\n statusUnresponded {non répondues}\n other {{status}}\n } {cohortType, select,\n all {}\n group {dans {cohort}}\n other {{cohortType}}\n } triées selon {sort, select,\n lastActivityAt {les plus récentes}\n commentCount {les plus actives}\n voteCount {les plus aimées}\n other {{sort}}\n }",
"discussions.post.author.anonymous": "anonyme",
"discussions.post.addResponse": "Ajouter une réponse",
"discussions.post.lastResponse": "Dernière réponse {time}",
"discussions.post.postedOn": "Publié {time} par {author} {authorLabel}",
"discussions.post.contentReported": "Signalé",
"discussions.post.following": "Suivi",
"discussions.post.postedOn": "Publiée {time} par {author} {authorLabel}",
"discussions.post.contentReported": "Signalées",
"discussions.post.following": "Suivies",
"discussions.post.follow": "Suivre",
"discussions.post.followed": "Suivi",
"discussions.post.notFollowed": "Non suivi",
"discussions.post.answered": "Répondu",
"discussions.post.followed": "Suivies",
"discussions.post.notFollowed": "Non suivies",
"discussions.post.answered": "Répondues",
"discussions.post.unFollow": "Ne plus suivre",
"discussions.post.like": "Aime",
"discussions.post.removeLike": "Contrairement à",
"discussions.post.liked": "aimé",
"discussions.post.removeLike": "N'aime plus",
"discussions.post.liked": "aimées",
"discussions.post.likes": "aime",
"discussions.post.viewActivity": "Afficher l'activité",
"discussions.post.activity": "Activité",
"discussions.post.closed": "Message fermé pour réponses et commentaires",
"discussions.post.closed": "Publication fermée pour réponses et commentaires",
"discussions.post.relatedTo": "Relative à",
"discussions.editor.delete.post.title": "Supprimer le message",
"discussions.editor.delete.post.description": "Êtes-vous sûr de vouloir supprimer définitivement ce message?",
"discussions.editor.delete.post.title": "Supprimer la publication",
"discussions.editor.delete.post.description": "Êtes-vous sûr de vouloir supprimer définitivement cette publication?",
"discussions.post.delete.confirmation.button.delete": "Supprimer",
"discussions.editor.report.post.title": "Signaler un contenu inapproprié?",
"discussions.editor.report.post.description": "L'équipe de modération de la discussion examinera ce contenu et prendra les mesures appropriées.",
"discussions.post.closePostModal.title": "Fermer le message",
"discussions.post.closePostModal.text": "Entrez une raison pour fermer ce message. Cela ne sera affiché qu'aux autres modérateurs.",
"discussions.post.closePostModal.title": "Fermer la publication",
"discussions.post.closePostModal.text": "Entrez une raison pour fermer cette publication. Cela ne sera affiché qu'aux autres modérateurs.",
"discussions.post.closePostModal.reasonCodeInput": "Raison",
"discussions.post.closePostModal.cancel": "Annuler",
"discussions.post.closePostModal.confirm": "Fermer le message",
"discussions.post.closePostModal.confirm": "Fermer la publication",
"discussions.post.label.new": "{count} Nouveau",
"discussions.post.editedBy": "Édité par",
"discussions.post.editedBy": "Éditée par",
"discussions.post.editReason": "Raison",
"discussions.post.postWithoutPreview": "Aucun aperçu disponible",
"discussions.post.follow.description": "vous suivez ce post",
"discussions.post.unfollow.description": "vous ne suivez pas ce post",
"discussions.topics.sort.message": "Trié par {sortBy}",
"discussions.post.follow.description": "vous suivez cette publication",
"discussions.post.unfollow.description": "vous ne suivez pas cette publication",
"discussions.topics.sort.message": "Triées par {sortBy}",
"discussions.topics.sort.lastActivity": "Activité récente",
"discussions.topics.sort.commentCount": "La plupart des activités",
"discussions.topics.sort.commentCount": "Les plus actives",
"discussions.topics.sort.courseStructure": "Structure du cours",
"discussions.topics.unnamed.label": "Catégorie sans nom",
"discussions.subtopics.unnamed.label": "Sous-catégorie sans nom",
"tour.action.advance": "Suivant",
"tour.action.dismiss": "Rejeter",
"tour.action.end": "D'accord",
"tour.body.notRespondedFilter": "Vous pouvez maintenant filtrer les discussions pour trouver les messages sans réponse.",
"tour.body.notRespondedFilter": "Vous pouvez maintenant filtrer les discussions pour trouver les publications sans réponses.",
"tour.title.notRespondedFilter": "Nouvelle option de filtrage!",
"tour.body.responseSortTour": "Les réponses et les commentaires sont désormais triés par les plus récents en premier. Veuillez utiliser cette option pour modifier l'ordre de tri",
"tour.title.responseSortTour": "Triez les réponses !"
"tour.title.responseSortTour": "Triez les réponses!"
}

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -23,7 +23,7 @@
"discussions.learner.mostActivity": "La maggior parte delle attività",
"discussions.learner.reportedActivity": "Attività segnalata",
"discussions.learner.recentActivity": "Recent activity",
"discussions.learner.sortFilterStatus": "All learners sorted by {sort, select,\n flagged {reported activity}\n activity {most activity}\n other {{sort}}\n }",
"discussions.learner.sortFilterStatus": "Tutti gli studenti ordinati per {sort, select,\nsegnalati {reported activity}\nattività {most activity}\naltro {{sort}}\n}",
"discussion.learner.allActivity": "All activity",
"discussion.learner.posts": "Posts",
"discussions.actions.button.alt": "Menù Azioni",
@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Carica più post",
"discussions.post.anonymous.author": "anonimo",
"discussion.banner.welcomeMessage": "🎉 Benvenuto nella nuova e avanzata esperienza di discussione!",
"discussion.banner.learnMore": "Per saperne di più",
"discussion.banner.shareFeedback": "Condividi feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",
@@ -72,7 +69,7 @@
"discussions.navigation.navigationBar.allTopics": "Argomenti",
"discussions.navigation.navigationBar.myPosts": "I miei post",
"discussions.navigation.navigationBar.learners": "Utenti",
"discussions.comments.comment.addComment": "Add comment",
"discussions.comments.comment.addComment": "Aggiungi commento",
"discussions.comments.comment.addResponse": "Aggiungi una risposta",
"discussions.comments.comment.abuseFlaggedMessage": "Contenuto segnalato per la revisione da parte del personale",
"discussions.actions.back.alt": "Back to list",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Wczytaj więcej postów",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Carregar mais mensagens",
"discussions.post.anonymous.author": "anónimo",
"discussion.banner.welcomeMessage": "🎉 Bem-vindo à nova e melhorada experiência de debate!",
"discussion.banner.learnMore": "Saber mais",
"discussion.banner.shareFeedback": "Partilhar comentários",
"discussion.blackoutBanner.information": "O envio de mensagens para os debates está temporariamente desactivado pela equipa de curso",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "As imagens com largura ou altura superior a 999px não serão visíveis quando a mensagem, resposta ou comentário for visualizado utilizando os debates em linha da disciplina",
"discussions.editor.image.warning.title": "Aviso!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Daha fazla ileti yükle",
"discussions.post.anonymous.author": "anonim",
"discussion.banner.welcomeMessage": "🎉 Yeni ve geliştirilmiş tartışma deneyimine hoş geldiniz!",
"discussion.banner.learnMore": "Daha fazlasını öğren",
"discussion.banner.shareFeedback": "Geri bildirim paylaş",
"discussion.blackoutBanner.information": "Tartışmalarda ileti yayınlama, ders ekibi tarafından geçici olarak devre dışı bırakıldı",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Genişliği veya yüksekliği 999 pikselden büyük olan resimler, çevrimiçi ders tartışmalarında yer alan gönderi, yanıt veya yorumlarda görüntülenemez.",
"discussions.editor.image.warning.title": "Uyarı!",
"discussions.editor.image.warning.dismiss": "Tamam",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -59,10 +59,7 @@
"discussions.authors.label.ta": "TA",
"discussions.learner.loadMostPosts": "Load more posts",
"discussions.post.anonymous.author": "anonymous",
"discussion.banner.welcomeMessage": "🎉 Welcome to the new and improved discussions experience!",
"discussion.banner.learnMore": "Learn more",
"discussion.banner.shareFeedback": "Share feedback",
"discussion.blackoutBanner.information": "Posting in discussions is temporarily disabled by the course team",
"discussion.blackoutBanner.information": "Posting in discussions is disabled by the course team",
"discussions.editor.image.warning.message": "Images having width or height greater than 999px will not be visible when the post, response or comment is viewed using in-line course discussions",
"discussions.editor.image.warning.title": "Warning!",
"discussions.editor.image.warning.dismiss": "Ok",

View File

@@ -37,7 +37,8 @@ initialize({
config: () => {
mergeConfig({
LEARNING_BASE_URL: process.env.LEARNING_BASE_URL,
DISPLAY_FEEDBACK_BANNER: process.env.DISPLAY_FEEDBACK_BANNER || 'false',
LEARNER_FEEDBACK_URL: process.env.LEARNER_FEEDBACK_URL,
STAFF_FEEDBACK_URL: process.env.STAFF_FEEDBACK_URL,
}, 'DiscussionsConfig');
},
},

View File

@@ -1,7 +1,7 @@
@import "@edx/brand/paragon/fonts.scss";
@import "@edx/brand/paragon/variables.scss";
@import "@edx/paragon/scss/core/core.scss";
@import "@edx/brand/paragon/overrides.scss";
@import "~@edx/brand/paragon/fonts.scss";
@import "~@edx/brand/paragon/variables.scss";
@import "~@edx/paragon/scss/core/core.scss";
@import "~@edx/brand/paragon/overrides.scss";
@import "~@edx/frontend-component-footer/dist/footer";
@import "~@edx/frontend-component-header/dist/index";
@@ -65,10 +65,6 @@ $fa-font-path: "~font-awesome/fonts";
font-style: normal !important;
}
.font-family-inter {
font-family: "Inter";
}
.post-footer-icon-dimentions {
width: 32px !important;
height: 32px !important;
@@ -245,6 +241,10 @@ header {
.sidebar-desktop-width {
min-width: 29rem !important;
@include media-breakpoint-down(lg) {
min-width: 25rem !important;
}
}
.sidebar-XL-width {
@@ -255,8 +255,13 @@ header {
background-color: #e9e6e4 !important;
}
.border-2 {
border: 2px solid #cccccc !important;
.border-light-400-2 {
border: 2px solid $light-400 !important;
border-width: 2px !important;
}
.border-primary-500-2 {
border: 2px solid $primary-500 !important;
border-width: 2px !important;
}
@@ -278,7 +283,6 @@ header {
header {
line-height: 28px;
font-family: Inter, Helvetica Neue, Arial, sans-serif;
font-size: 18px !important;
.user-dropdown {
@@ -314,12 +318,10 @@ header {
#courseTabsNavigation {
font-size: 18px !important;
font-family: Inter, Helvetica Neue, Arial, sans-serif;
z-index: 3;
background-color: #fff;
.container-xl {
padding-left: 31px;
font-size: 1.125rem;
.nav {
@@ -338,7 +340,7 @@ header {
.header-action-bar {
background-color: #fff;
z-index: 3;
z-index: 2 !important;
box-shadow: 0px 2px 4px rgb(0 0 0 / 15%), 0px 2px 8px rgb(0 0 0 / 15%);
position: sticky;
top: 0;
@@ -347,11 +349,19 @@ header {
.nav-item:not(:last-child){
.nav-link {
border-right: 0;
@media screen and (max-width: 567px) {
border-right: solid 1px #e9e6e4;
}
}
}
}
}
.tox-tinymce-aux {
z-index: 1 !important;
}
.breadcrumb-menu {
z-index: 1;
}
@@ -467,6 +477,10 @@ header {
display: flex;
}
}
.pgn__avatar {
flex-shrink: 0;
}
}
.spinner-dimentions {
@@ -479,7 +493,6 @@ header {
}
.font-style {
font-family: "Inter";
font-style: normal;
}
@@ -496,6 +509,11 @@ header {
z-index: 1;
}
.comment-line {
width: calc(100% - 180px);
line-height: 1;
}
.post-preview,
.discussion-comments {
blockquote {
@@ -537,3 +555,9 @@ header {
left: 50%;
transform: translate(-50%, -50%);
}
.author-name {
line-height: 1.5;
word-break: break-all;
}