diff --git a/.gitignore b/.gitignore index 9d19853025..1b55818343 100644 --- a/.gitignore +++ b/.gitignore @@ -19,14 +19,17 @@ cms/envs/private.py .redcar/ codekit-config.json .pycharm_helpers/ -/_mac/* -/IntelliLang.xml -/conda_packages.xml -/databaseSettings.xml -/diff.xml -/inspection/Default.xml +/_mac/* +/IntelliLang.xml +/conda_packages.xml +/databaseSettings.xml +/diff.xml +/debugger.xml +/editor.xml +/ide.general.xml +/inspection/Default.xml /other.xml -/packages.xml +/packages.xml /web-browsers.xml ### NFS artifacts diff --git a/AUTHORS b/AUTHORS index df0628bc2c..a4aa63e807 100644 --- a/AUTHORS +++ b/AUTHORS @@ -275,3 +275,4 @@ Alisan Tang Kevin Kim Albert St. Aubin Jr. Casey Litton +Jhony Avella diff --git a/cms/djangoapps/contentstore/features/course-settings.feature b/cms/djangoapps/contentstore/features/course-settings.feature deleted file mode 100644 index ca8b3ec4cb..0000000000 --- a/cms/djangoapps/contentstore/features/course-settings.feature +++ /dev/null @@ -1,95 +0,0 @@ -@shard_2 -Feature: CMS.Course Settings - As a course author, I want to be able to configure my course settings. - - # Safari has trouble keeps dates on refresh - @skip_safari - Scenario: User can set course dates - Given I have opened a new course in Studio - When I select Schedule and Details - And I set course dates - And I press the "Save" notification button - And I reload the page - Then I see the set dates - - # IE has trouble with saving information - @skip_internetexplorer - Scenario: User can clear previously set course dates (except start date) - Given I have set course dates - And I clear all the dates except start - And I press the "Save" notification button - And I reload the page - Then I see cleared dates - - # IE has trouble with saving information - @skip_internetexplorer - Scenario: User cannot clear the course start date - Given I have set course dates - And I press the "Save" notification button - And I clear the course start date - Then I receive a warning about course start date - And I reload the page - And the previously set start date is shown - - # IE has trouble with saving information - # Safari gets CSRF token errors - @skip_internetexplorer - @skip_safari - Scenario: User can correct the course start date warning - Given I have tried to clear the course start - And I have entered a new course start date - And I press the "Save" notification button - Then The warning about course start date goes away - And I reload the page - Then my new course start date is shown - - # Safari does not save + refresh properly through sauce labs - @skip_safari - Scenario: Settings are only persisted when saved - Given I have set course dates - And I press the "Save" notification button - When I change fields - And I reload the page - Then I do not see the changes - - # Safari does not save + refresh properly through sauce labs - @skip_safari - Scenario: Settings are reset on cancel - Given I have set course dates - And I press the "Save" notification button - When I change fields - And I press the "Cancel" notification button - Then I do not see the changes - - # Safari gets CSRF token errors - @skip_safari - Scenario: Confirmation is shown on save - Given I have opened a new course in Studio - When I select Schedule and Details - And I change the "" field to "" - And I press the "Save" notification button - Then I see a confirmation that my changes have been saved - # Lettuce hooks don't get called between each example, so we need - # to run the before.each_scenario hook manually to avoid database - # errors. - And I reset the database - - Examples: - | field | value | - | Course Start Time | 11:00 | - | Course Introduction Video | 4r7wHMg5Yjg | - | Course Effort | 200:00 | - - # Special case because we have to type in code mirror - Scenario: Changes in Course Overview show a confirmation - Given I have opened a new course in Studio - When I select Schedule and Details - And I change the course overview - And I press the "Save" notification button - Then I see a confirmation that my changes have been saved - - Scenario: User cannot save invalid settings - Given I have opened a new course in Studio - When I select Schedule and Details - And I change the "Course Start Date" field to "" - Then the save notification button is disabled diff --git a/cms/djangoapps/contentstore/features/course-updates.feature b/cms/djangoapps/contentstore/features/course-updates.feature index 41a9f71fff..79d6445194 100644 --- a/cms/djangoapps/contentstore/features/course-updates.feature +++ b/cms/djangoapps/contentstore/features/course-updates.feature @@ -2,41 +2,45 @@ Feature: CMS.Course updates As a course author, I want to be able to provide updates to my students +# Commenting out as flaky TNL-5051 07/20/2016 # Internet explorer can't select all so the update appears weirdly - @skip_internetexplorer - Scenario: Users can add updates - Given I have opened a new course in Studio - And I go to the course updates page - When I add a new update with the text "Hello" - Then I should see the update "Hello" - And I see a "saving" notification +# @skip_internetexplorer +# Scenario: Users can add updates +# Given I have opened a new course in Studio +# And I go to the course updates page +# When I add a new update with the text "Hello" +# Then I should see the update "Hello" +# And I see a "saving" notification - # Internet explorer can't select all so the update appears weirdly - @skip_internetexplorer - Scenario: Users can edit updates - Given I have opened a new course in Studio - And I go to the course updates page - When I add a new update with the text "Hello" - And I modify the text to "Goodbye" - Then I should see the update "Goodbye" - And I see a "saving" notification +# Commenting out as flaky TNL-5051 07/20/2016 +# # Internet explorer can't select all so the update appears weirdly +# @skip_internetexplorer +# Scenario: Users can edit updates +# Given I have opened a new course in Studio +# And I go to the course updates page +# When I add a new update with the text "Hello" +# And I modify the text to "Goodbye" +# Then I should see the update "Goodbye" +# And I see a "saving" notification - Scenario: Users can delete updates - Given I have opened a new course in Studio - And I go to the course updates page - And I add a new update with the text "Hello" - And I delete the update - And I confirm the prompt - Then I should not see the update "Hello" - And I see a "deleting" notification +# Commenting out as flaky TNL-5051 07/20/2016 +# Scenario: Users can delete updates +# Given I have opened a new course in Studio +# And I go to the course updates page +# And I add a new update with the text "Hello" +# And I delete the update +# And I confirm the prompt +# Then I should not see the update "Hello" +# And I see a "deleting" notification - Scenario: Users can edit update dates - Given I have opened a new course in Studio - And I go to the course updates page - And I add a new update with the text "Hello" - When I edit the date to "06/01/13" - Then I should see the date "June 1, 2013" - And I see a "saving" notification +# Commenting out as flaky TNL-5051 07/20/2016 +# Scenario: Users can edit update dates +# Given I have opened a new course in Studio +# And I go to the course updates page +# And I add a new update with the text "Hello" +# When I edit the date to "06/01/13" +# Then I should see the date "June 1, 2013" +# And I see a "saving" notification # Internet explorer can't select all so the update appears weirdly @skip_internetexplorer @@ -55,16 +59,17 @@ Feature: CMS.Course updates And when I reload the page Then I should see the update "before middle after" - Scenario: Static links are rewritten when previewing a course update - Given I have opened a new course in Studio - And I go to the course updates page - When I add a new update with the text "" - # Can only do partial text matches because of the quotes with in quotes (and regexp step matching). - Then I should see the asset update to "my_img.jpg" - And I change the update from "/static/my_img.jpg" to "" - Then I should see the asset update to "modified.jpg" - And when I reload the page - Then I should see the asset update to "modified.jpg" +# Commenting out as flaky TNL-5051 07/22/2016 +# Scenario: Static links are rewritten when previewing a course update +# Given I have opened a new course in Studio +# And I go to the course updates page +# When I add a new update with the text "" +# # Can only do partial text matches because of the quotes with in quotes (and regexp step matching). +# Then I should see the asset update to "my_img.jpg" +# And I change the update from "/static/my_img.jpg" to "" +# Then I should see the asset update to "modified.jpg" +# And when I reload the page +# Then I should see the asset update to "modified.jpg" Scenario: Static links are rewritten when previewing handouts Given I have opened a new course in Studio diff --git a/cms/djangoapps/contentstore/features/course-updates.py b/cms/djangoapps/contentstore/features/course-updates.py index 1e79a26b97..90db6bbd53 100644 --- a/cms/djangoapps/contentstore/features/course-updates.py +++ b/cms/djangoapps/contentstore/features/course-updates.py @@ -17,7 +17,7 @@ def go_to_updates(_step): @step(u'I add a new update with the text "([^"]*)"$') def add_update(_step, text): - update_css = 'a.new-update-button' + update_css = '.new-update-button' world.css_click(update_css) world.wait_for_visible('.CodeMirror') change_text(text) diff --git a/cms/djangoapps/contentstore/tests/test_contentstore.py b/cms/djangoapps/contentstore/tests/test_contentstore.py index 0f87ced3f1..e30ef1ff57 100644 --- a/cms/djangoapps/contentstore/tests/test_contentstore.py +++ b/cms/djangoapps/contentstore/tests/test_contentstore.py @@ -691,7 +691,6 @@ class MiscCourseTests(ContentStoreTestCase): # Test that malicious code does not appear in html self.assertNotIn(malicious_code, resp.content) - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', []) def test_advanced_components_in_edit_unit(self): # This could be made better, but for now let's just assert that we see the advanced modules mentioned in the page # response HTML diff --git a/cms/djangoapps/contentstore/tests/test_course_settings.py b/cms/djangoapps/contentstore/tests/test_course_settings.py index 5171d59059..f18e1c98b3 100644 --- a/cms/djangoapps/contentstore/tests/test_course_settings.py +++ b/cms/djangoapps/contentstore/tests/test_course_settings.py @@ -21,6 +21,7 @@ from openedx.core.djangoapps.self_paced.models import SelfPacedConfiguration from openedx.core.djangoapps.models.course_details import CourseDetails from student.roles import CourseInstructorRole, CourseStaffRole from student.tests.factories import UserFactory +from xblock_django.models import XBlockStudioConfigurationFlag from xmodule.fields import Date from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore.django import modulestore @@ -784,6 +785,15 @@ class CourseMetadataEditingTest(CourseTestCase): ) self.assertNotIn('edxnotes', test_model) + def test_allow_unsupported_xblocks(self): + """ + allow_unsupported_xblocks is only shown in Advanced Settings if + XBlockStudioConfigurationFlag is enabled. + """ + self.assertNotIn('allow_unsupported_xblocks', CourseMetadata.fetch(self.fullcourse)) + XBlockStudioConfigurationFlag(enabled=True).save() + self.assertIn('allow_unsupported_xblocks', CourseMetadata.fetch(self.fullcourse)) + def test_validate_from_json_correct_inputs(self): is_valid, errors, test_model = CourseMetadata.validate_and_update_from_json( self.course, diff --git a/cms/djangoapps/contentstore/tests/test_libraries.py b/cms/djangoapps/contentstore/tests/test_libraries.py index 529396e087..0e45222f10 100644 --- a/cms/djangoapps/contentstore/tests/test_libraries.py +++ b/cms/djangoapps/contentstore/tests/test_libraries.py @@ -25,6 +25,7 @@ from openedx.core.djangoapps.content.course_structures.tests import SignalDiscon from xblock_django.user_service import DjangoXBlockUserService from xmodule.x_module import STUDIO_VIEW from student import auth +from student.tests.factories import UserFactory class LibraryTestCase(ModuleStoreTestCase): @@ -34,6 +35,7 @@ class LibraryTestCase(ModuleStoreTestCase): def setUp(self): super(LibraryTestCase, self).setUp() + self.user = UserFactory(password=self.user_password, is_staff=True) self.client = AjaxEnabledTestClient() self._login_as_staff_user(logout_first=False) @@ -477,7 +479,8 @@ class TestLibraryAccess(SignalDisconnectTestMixin, LibraryTestCase): def setUp(self): """ Create a library, staff user, and non-staff user """ super(TestLibraryAccess, self).setUp() - self.non_staff_user, self.non_staff_user_password = self.create_non_staff_user() + self.non_staff_user_password = 'foo' + self.non_staff_user = UserFactory(password=self.non_staff_user_password, is_staff=False) def _login_as_non_staff_user(self, logout_first=True): """ Login as a user that starts out with no roles/permissions granted. """ diff --git a/cms/djangoapps/contentstore/views/component.py b/cms/djangoapps/contentstore/views/component.py index 68c7d78e18..d46760b0f6 100644 --- a/cms/djangoapps/contentstore/views/component.py +++ b/cms/djangoapps/contentstore/views/component.py @@ -27,7 +27,10 @@ from opaque_keys.edx.keys import UsageKey from student.auth import has_course_author_access from django.utils.translation import ugettext as _ -from xblock_django.models import XBlockDisableConfig + +from xblock_django.api import disabled_xblocks, authorable_xblocks +from xblock_django.models import XBlockStudioConfigurationFlag + __all__ = [ 'container_handler', @@ -47,17 +50,41 @@ CONTAINER_TEMPLATES = [ "basic-modal", "modal-button", "edit-xblock-modal", "editor-mode-button", "upload-dialog", "add-xblock-component", "add-xblock-component-button", "add-xblock-component-menu", - "add-xblock-component-menu-problem", "xblock-string-field-editor", "publish-xblock", "publish-history", + "add-xblock-component-support-legend", "add-xblock-component-support-level", "add-xblock-component-menu-problem", + "xblock-string-field-editor", "publish-xblock", "publish-history", "unit-outline", "container-message", "license-selector", ] -def _advanced_component_types(): +def _advanced_component_types(show_unsupported): """ Return advanced component types which can be created. + + Args: + show_unsupported: if True, unsupported XBlocks may be included in the return value + + Returns: + A dict of authorable XBlock types and their support levels (see XBlockStudioConfiguration). For example: + { + "done": "us", # unsupported + "discussion: "fs" # fully supported + } + Note that the support level will be "True" for all XBlocks if XBlockStudioConfigurationFlag + is not enabled. """ - disabled_create_block_types = XBlockDisableConfig.disabled_create_block_types() - return [c_type for c_type in ADVANCED_COMPONENT_TYPES if c_type not in disabled_create_block_types] + enabled_block_types = _filter_disabled_blocks(ADVANCED_COMPONENT_TYPES) + if XBlockStudioConfigurationFlag.is_enabled(): + authorable_blocks = authorable_xblocks(allow_unsupported=show_unsupported) + filtered_blocks = {} + for block in authorable_blocks: + if block.name in enabled_block_types: + filtered_blocks[block.name] = block.support_level + return filtered_blocks + else: + all_blocks = {} + for block_name in enabled_block_types: + all_blocks[block_name] = True + return all_blocks def _load_mixed_class(category): @@ -152,13 +179,14 @@ def get_component_templates(courselike, library=False): """ Returns the applicable component templates that can be used by the specified course or library. """ - def create_template_dict(name, cat, boilerplate_name=None, tab="common", hinted=False): + def create_template_dict(name, category, support_level, boilerplate_name=None, tab="common", hinted=False): """ Creates a component template dict. Parameters display_name: the user-visible name of the component category: the type of component (problem, html, etc.) + support_level: the support level of this component boilerplate_name: name of boilerplate for filling in default values. May be None. hinted: True if hinted problem else False tab: common(default)/advanced, which tab it goes in @@ -166,10 +194,50 @@ def get_component_templates(courselike, library=False): """ return { "display_name": name, - "category": cat, + "category": category, "boilerplate_name": boilerplate_name, "hinted": hinted, - "tab": tab + "tab": tab, + "support_level": support_level + } + + def component_support_level(editable_types, name, template=None): + """ + Returns the support level for the given xblock name/template combination. + + Args: + editable_types: a QuerySet of xblocks with their support levels + name: the name of the xblock + template: optional template for the xblock + + Returns: + If XBlockStudioConfigurationFlag is enabled, returns the support level + (see XBlockStudioConfiguration) or False if this xblock name/template combination + has no Studio support at all. If XBlockStudioConfigurationFlag is disabled, + simply returns True. + """ + # If the Studio support feature is disabled, return True for all. + if not XBlockStudioConfigurationFlag.is_enabled(): + return True + if template is None: + template = "" + extension_index = template.rfind(".yaml") + if extension_index >= 0: + template = template[0:extension_index] + for block in editable_types: + if block.name == name and block.template == template: + return block.support_level + + return False + + def create_support_legend_dict(): + """ + Returns a dict of settings information for the display of the support level legend. + """ + return { + "show_legend": XBlockStudioConfigurationFlag.is_enabled(), + "allow_unsupported_xblocks": allow_unsupported, + "documentation_label": _("{platform_name} Support Levels:").format(platform_name=settings.PLATFORM_NAME) } component_display_names = { @@ -189,57 +257,92 @@ def get_component_templates(courselike, library=False): if library: component_types = [component for component in component_types if component != 'discussion'] + component_types = _filter_disabled_blocks(component_types) + + # Content Libraries currently don't allow opting in to unsupported xblocks/problem types. + allow_unsupported = getattr(courselike, "allow_unsupported_xblocks", False) + for category in component_types: + authorable_variations = authorable_xblocks(allow_unsupported=allow_unsupported, name=category) + support_level_without_template = component_support_level(authorable_variations, category) templates_for_category = [] component_class = _load_mixed_class(category) - # add the default template with localized display name - # TODO: Once mixins are defined per-application, rather than per-runtime, - # this should use a cms mixed-in class. (cpennington) - display_name = xblock_type_display_name(category, _('Blank')) # this is the Blank Advanced problem - templates_for_category.append(create_template_dict(display_name, category, None, 'advanced')) - categories.add(category) + + if support_level_without_template: + # add the default template with localized display name + # TODO: Once mixins are defined per-application, rather than per-runtime, + # this should use a cms mixed-in class. (cpennington) + display_name = xblock_type_display_name(category, _('Blank')) # this is the Blank Advanced problem + templates_for_category.append( + create_template_dict(display_name, category, support_level_without_template, None, 'advanced') + ) + categories.add(category) # add boilerplates if hasattr(component_class, 'templates'): for template in component_class.templates(): filter_templates = getattr(component_class, 'filter_templates', None) if not filter_templates or filter_templates(template, courselike): - # Tab can be 'common' 'advanced' - # Default setting is common/advanced depending on the presence of markdown - tab = 'common' - if template['metadata'].get('markdown') is None: - tab = 'advanced' - hinted = template.get('hinted', False) - - templates_for_category.append( - create_template_dict( - _(template['metadata'].get('display_name')), # pylint: disable=translation-of-non-string - category, - template.get('template_id'), - tab, - hinted, - ) + template_id = template.get('template_id') + support_level_with_template = component_support_level( + authorable_variations, category, template_id ) + if support_level_with_template: + # Tab can be 'common' 'advanced' + # Default setting is common/advanced depending on the presence of markdown + tab = 'common' + if template['metadata'].get('markdown') is None: + tab = 'advanced' + hinted = template.get('hinted', False) - # Add any advanced problem types + templates_for_category.append( + create_template_dict( + _(template['metadata'].get('display_name')), # pylint: disable=translation-of-non-string + category, + support_level_with_template, + template_id, + tab, + hinted, + ) + ) + + # Add any advanced problem types. Note that these are different xblocks being stored as Advanced Problems. if category == 'problem': - for advanced_problem_type in ADVANCED_PROBLEM_TYPES: + disabled_block_names = [block.name for block in disabled_xblocks()] + advanced_problem_types = [advanced_problem_type for advanced_problem_type in ADVANCED_PROBLEM_TYPES + if advanced_problem_type['component'] not in disabled_block_names] + for advanced_problem_type in advanced_problem_types: component = advanced_problem_type['component'] boilerplate_name = advanced_problem_type['boilerplate_name'] - try: - component_display_name = xblock_type_display_name(component) - except PluginMissingError: - log.warning('Unable to load xblock type %s to read display_name', component, exc_info=True) - else: - templates_for_category.append( - create_template_dict(component_display_name, component, boilerplate_name, 'advanced') - ) - categories.add(component) + + authorable_advanced_component_variations = authorable_xblocks( + allow_unsupported=allow_unsupported, name=component + ) + advanced_component_support_level = component_support_level( + authorable_advanced_component_variations, component, boilerplate_name + ) + if advanced_component_support_level: + try: + component_display_name = xblock_type_display_name(component) + except PluginMissingError: + log.warning('Unable to load xblock type %s to read display_name', component, exc_info=True) + else: + templates_for_category.append( + create_template_dict( + component_display_name, + component, + advanced_component_support_level, + boilerplate_name, + 'advanced' + ) + ) + categories.add(component) component_templates.append({ "type": category, "templates": templates_for_category, - "display_name": component_display_names[category] + "display_name": component_display_names[category], + "support_legend": create_support_legend_dict() }) # Libraries do not support advanced components at this time. @@ -251,19 +354,25 @@ def get_component_templates(courselike, library=False): # are the names of the modules in ADVANCED_COMPONENT_TYPES that should be # enabled for the course. course_advanced_keys = courselike.advanced_modules - advanced_component_templates = {"type": "advanced", "templates": [], "display_name": _("Advanced")} - advanced_component_types = _advanced_component_types() + advanced_component_templates = { + "type": "advanced", + "templates": [], + "display_name": _("Advanced"), + "support_legend": create_support_legend_dict() + } + advanced_component_types = _advanced_component_types(allow_unsupported) # Set component types according to course policy file if isinstance(course_advanced_keys, list): for category in course_advanced_keys: - if category in advanced_component_types and category not in categories: + if category in advanced_component_types.keys() and category not in categories: # boilerplates not supported for advanced components try: component_display_name = xblock_type_display_name(category, default_display_name=category) advanced_component_templates['templates'].append( create_template_dict( component_display_name, - category + category, + advanced_component_types[category] ) ) categories.add(category) @@ -288,6 +397,14 @@ def get_component_templates(courselike, library=False): return component_templates +def _filter_disabled_blocks(all_blocks): + """ + Filter out disabled xblocks from the provided list of xblock names. + """ + disabled_block_names = [block.name for block in disabled_xblocks()] + return [block_name for block_name in all_blocks if block_name not in disabled_block_names] + + @login_required def _get_item_in_course(request, usage_key): """ diff --git a/cms/djangoapps/contentstore/views/item.py b/cms/djangoapps/contentstore/views/item.py index eb40ebed51..0004a13111 100644 --- a/cms/djangoapps/contentstore/views/item.py +++ b/cms/djangoapps/contentstore/views/item.py @@ -982,6 +982,11 @@ def create_xblock_info(xblock, data=None, metadata=None, include_ancestor_info=F "user_partitions": get_user_partition_info(xblock, course=course), } + if xblock.category == 'sequential': + xblock_info.update({ + "hide_after_due": xblock.hide_after_due, + }) + # update xblock_info with special exam information if the feature flag is enabled if settings.FEATURES.get('ENABLE_SPECIAL_EXAMS'): if xblock.category == 'course': @@ -997,7 +1002,6 @@ def create_xblock_info(xblock, data=None, metadata=None, include_ancestor_info=F "is_time_limited": xblock.is_time_limited, "exam_review_rules": xblock.exam_review_rules, "default_time_limit_minutes": xblock.default_time_limit_minutes, - "hide_after_due": xblock.hide_after_due, }) # Update with gating info diff --git a/cms/djangoapps/contentstore/views/program.py b/cms/djangoapps/contentstore/views/program.py index eceeb18f94..d95f10b9c5 100644 --- a/cms/djangoapps/contentstore/views/program.py +++ b/cms/djangoapps/contentstore/views/program.py @@ -28,12 +28,11 @@ class ProgramAuthoringView(View): if programs_config.is_studio_tab_enabled and request.user.is_staff: return render_to_response('program_authoring.html', { - 'show_programs_header': programs_config.is_studio_tab_enabled, - 'authoring_app_config': programs_config.authoring_app_config, 'lms_base_url': '//{}/'.format(settings.LMS_BASE), 'programs_api_url': programs_config.public_api_url, 'programs_token_url': reverse('programs_id_token'), 'studio_home_url': reverse('home'), + 'uses_pattern_library': True }) else: raise Http404 diff --git a/cms/djangoapps/contentstore/views/tests/test_item.py b/cms/djangoapps/contentstore/views/tests/test_item.py index 1cb8a6f6b8..41c8650491 100644 --- a/cms/djangoapps/contentstore/views/tests/test_item.py +++ b/cms/djangoapps/contentstore/views/tests/test_item.py @@ -24,7 +24,7 @@ from contentstore.views.item import ( ) from contentstore.tests.utils import CourseTestCase from student.tests.factories import UserFactory -from xblock_django.models import XBlockDisableConfig +from xblock_django.models import XBlockConfiguration, XBlockStudioConfiguration, XBlockStudioConfigurationFlag from xmodule.capa_module import CapaDescriptor from xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore.django import modulestore @@ -1217,6 +1217,7 @@ class TestEditSplitModule(ItemTest): """ def setUp(self): super(TestEditSplitModule, self).setUp() + self.user = UserFactory() self.course.user_partitions = [ UserPartition( 0, 'first_partition', 'First Partition', @@ -1457,12 +1458,19 @@ class TestComponentTemplates(CourseTestCase): def setUp(self): super(TestComponentTemplates, self).setUp() - self.templates = get_component_templates(self.course) + # Advanced Module support levels. + XBlockStudioConfiguration.objects.create(name='poll', enabled=True, support_level="fs") + XBlockStudioConfiguration.objects.create(name='survey', enabled=True, support_level="ps") + XBlockStudioConfiguration.objects.create(name='annotatable', enabled=True, support_level="us") + # Basic component support levels. + XBlockStudioConfiguration.objects.create(name='html', enabled=True, support_level="fs") + XBlockStudioConfiguration.objects.create(name='discussion', enabled=True, support_level="ps") + XBlockStudioConfiguration.objects.create(name='problem', enabled=True, support_level="us") + XBlockStudioConfiguration.objects.create(name='video', enabled=True, support_level="us") + # XBlock masquerading as a problem + XBlockStudioConfiguration.objects.create(name='openassessment', enabled=True, support_level="us") - # Initialize the deprecated modules settings with empty list - XBlockDisableConfig.objects.create( - disabled_create_blocks='', enabled=True - ) + self.templates = get_component_templates(self.course) def get_templates_of_type(self, template_type): """ @@ -1481,12 +1489,40 @@ class TestComponentTemplates(CourseTestCase): """ Test the handling of the basic component templates. """ - self.assertIsNotNone(self.get_templates_of_type('discussion')) - self.assertIsNotNone(self.get_templates_of_type('html')) - self.assertIsNotNone(self.get_templates_of_type('problem')) - self.assertIsNotNone(self.get_templates_of_type('video')) + self._verify_basic_component("discussion", "Discussion") + self._verify_basic_component("video", "Video") + self.assertGreater(self.get_templates_of_type('html'), 0) + self.assertGreater(self.get_templates_of_type('problem'), 0) self.assertIsNone(self.get_templates_of_type('advanced')) + # Now fully disable video through XBlockConfiguration + XBlockConfiguration.objects.create(name='video', enabled=False) + self.templates = get_component_templates(self.course) + self.assertIsNone(self.get_templates_of_type('video')) + + def test_basic_components_support_levels(self): + """ + Test that support levels can be set on basic component templates. + """ + XBlockStudioConfigurationFlag.objects.create(enabled=True) + self.templates = get_component_templates(self.course) + self._verify_basic_component("discussion", "Discussion", "ps") + self.assertEqual([], self.get_templates_of_type("video")) + self.assertEqual([], self.get_templates_of_type("problem")) + + self.course.allow_unsupported_xblocks = True + self.templates = get_component_templates(self.course) + self._verify_basic_component("video", "Video", "us") + problem_templates = self.get_templates_of_type('problem') + problem_no_boilerplate = self.get_template(problem_templates, u'Blank Advanced Problem') + self.assertIsNotNone(problem_no_boilerplate) + self.assertEqual('us', problem_no_boilerplate['support_level']) + + # Now fully disable video through XBlockConfiguration + XBlockConfiguration.objects.create(name='video', enabled=False) + self.templates = get_component_templates(self.course) + self.assertIsNone(self.get_templates_of_type('video')) + def test_advanced_components(self): """ Test the handling of advanced component templates. @@ -1510,6 +1546,11 @@ class TestComponentTemplates(CourseTestCase): self.assertNotEqual(only_template.get('category'), 'video') self.assertNotEqual(only_template.get('category'), 'openassessment') + # Now fully disable word_cloud through XBlockConfiguration + XBlockConfiguration.objects.create(name='word_cloud', enabled=False) + self.templates = get_component_templates(self.course) + self.assertIsNone(self.get_templates_of_type('advanced')) + def test_advanced_problems(self): """ Test the handling of advanced problem templates. @@ -1520,44 +1561,101 @@ class TestComponentTemplates(CourseTestCase): self.assertEqual(circuit_template.get('category'), 'problem') self.assertEqual(circuit_template.get('boilerplate_name'), 'circuitschematic.yaml') - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', []) def test_deprecated_no_advance_component_button(self): """ - Test that there will be no `Advanced` button on unit page if units are - deprecated provided that they are the only modules in `Advanced Module List` + Test that there will be no `Advanced` button on unit page if xblocks have disabled + Studio support given that they are the only modules in `Advanced Module List` """ - XBlockDisableConfig.objects.create(disabled_create_blocks='poll survey', enabled=True) + # Update poll and survey to have "enabled=False". + XBlockStudioConfiguration.objects.create(name='poll', enabled=False, support_level="fs") + XBlockStudioConfiguration.objects.create(name='survey', enabled=False, support_level="fs") + XBlockStudioConfigurationFlag.objects.create(enabled=True) self.course.advanced_modules.extend(['poll', 'survey']) templates = get_component_templates(self.course) button_names = [template['display_name'] for template in templates] self.assertNotIn('Advanced', button_names) - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', []) def test_cannot_create_deprecated_problems(self): """ - Test that we can't create problems if they are deprecated + Test that xblocks that have Studio support disabled do not show on the "new component" menu. """ - XBlockDisableConfig.objects.create(disabled_create_blocks='poll survey', enabled=True) + # Update poll to have "enabled=False". + XBlockStudioConfiguration.objects.create(name='poll', enabled=False, support_level="fs") + XBlockStudioConfigurationFlag.objects.create(enabled=True) self.course.advanced_modules.extend(['annotatable', 'poll', 'survey']) - templates = get_component_templates(self.course) - button_names = [template['display_name'] for template in templates] - self.assertIn('Advanced', button_names) - self.assertEqual(len(templates[0]['templates']), 1) - template_display_names = [template['display_name'] for template in templates[0]['templates']] - self.assertEqual(template_display_names, ['Annotation']) + # Annotatable doesn't show up because it is unsupported (in test setUp). + self._verify_advanced_xblocks(['Survey'], ['ps']) - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', ['poll']) - def test_create_non_deprecated_problems(self): + # Now enable unsupported components. + self.course.allow_unsupported_xblocks = True + self._verify_advanced_xblocks(['Annotation', 'Survey'], ['us', 'ps']) + + # Now disable Annotatable completely through XBlockConfiguration + XBlockConfiguration.objects.create(name='annotatable', enabled=False) + self._verify_advanced_xblocks(['Survey'], ['ps']) + + def test_create_support_level_flag_off(self): """ - Test that we can create problems if they are not deprecated + Test that we can create any advanced xblock (that isn't completely disabled through + XBlockConfiguration) if XBlockStudioConfigurationFlag is False. + """ + XBlockStudioConfigurationFlag.objects.create(enabled=False) + self.course.advanced_modules.extend(['annotatable', 'survey']) + self._verify_advanced_xblocks(['Annotation', 'Survey'], [True, True]) + + def test_xblock_masquerading_as_problem(self): + """ + Test the integration of xblocks masquerading as problems. + """ + def get_openassessment(): + """ Helper method to return the openassessment template from problem list """ + self.templates = get_component_templates(self.course) + problem_templates = self.get_templates_of_type('problem') + return self.get_template(problem_templates, u'Peer Assessment') + + def verify_openassessment_present(support_level): + """ Helper method to verify that openassessment template is present """ + openassessment = get_openassessment() + self.assertIsNotNone(openassessment) + self.assertEqual(openassessment.get('category'), 'openassessment') + self.assertEqual(openassessment.get('support_level'), support_level) + + verify_openassessment_present(True) + + # Now enable XBlockStudioConfigurationFlag. The openassessment block is marked + # unsupported, so will no longer show up. + XBlockStudioConfigurationFlag.objects.create(enabled=True) + self.assertIsNone(get_openassessment()) + + # Now allow unsupported components. + self.course.allow_unsupported_xblocks = True + verify_openassessment_present('us') + + # Now disable openassessment completely through XBlockConfiguration + XBlockConfiguration.objects.create(name='openassessment', enabled=False) + self.assertIsNone(get_openassessment()) + + def _verify_advanced_xblocks(self, expected_xblocks, expected_support_levels): + """ + Verify the names of the advanced xblocks showing in the "new component" menu. """ - self.course.advanced_modules.extend(['annotatable', 'poll', 'survey']) templates = get_component_templates(self.course) button_names = [template['display_name'] for template in templates] self.assertIn('Advanced', button_names) - self.assertEqual(len(templates[0]['templates']), 2) + self.assertEqual(len(templates[0]['templates']), len(expected_xblocks)) template_display_names = [template['display_name'] for template in templates[0]['templates']] - self.assertEqual(template_display_names, ['Annotation', 'Survey']) + self.assertEqual(template_display_names, expected_xblocks) + template_support_levels = [template['support_level'] for template in templates[0]['templates']] + self.assertEqual(template_support_levels, expected_support_levels) + + def _verify_basic_component(self, component_type, display_name, support_level=True): + """ + Verify the display name and support level of basic components (that have no boilerplates). + """ + templates = self.get_templates_of_type(component_type) + self.assertEqual(1, len(templates)) + self.assertEqual(display_name, templates[0]['display_name']) + self.assertEqual(support_level, templates[0]['support_level']) @ddt.ddt diff --git a/cms/djangoapps/models/settings/course_metadata.py b/cms/djangoapps/models/settings/course_metadata.py index 2095dfd18f..157bb3c7d1 100644 --- a/cms/djangoapps/models/settings/course_metadata.py +++ b/cms/djangoapps/models/settings/course_metadata.py @@ -2,7 +2,9 @@ Django module for Course Metadata class -- manages advanced settings and related parameters """ from xblock.fields import Scope +from xblock_django.models import XBlockStudioConfigurationFlag from xmodule.modulestore.django import modulestore + from django.utils.translation import ugettext as _ from django.conf import settings @@ -93,6 +95,11 @@ class CourseMetadata(object): filtered_list.append('enable_ccx') filtered_list.append('ccx_connector') + # If the XBlockStudioConfiguration table is not being used, there is no need to + # display the "Allow Unsupported XBlocks" setting. + if not XBlockStudioConfigurationFlag.is_enabled(): + filtered_list.append('allow_unsupported_xblocks') + return filtered_list @classmethod diff --git a/cms/envs/aws.py b/cms/envs/aws.py index 3a07499311..8c0f75a8dd 100644 --- a/cms/envs/aws.py +++ b/cms/envs/aws.py @@ -398,9 +398,6 @@ ADVANCED_SECURITY_CONFIG = ENV_TOKENS.get('ADVANCED_SECURITY_CONFIG', {}) ################ ADVANCED COMPONENT/PROBLEM TYPES ############### ADVANCED_PROBLEM_TYPES = ENV_TOKENS.get('ADVANCED_PROBLEM_TYPES', ADVANCED_PROBLEM_TYPES) -DEPRECATED_ADVANCED_COMPONENT_TYPES = ENV_TOKENS.get( - 'DEPRECATED_ADVANCED_COMPONENT_TYPES', DEPRECATED_ADVANCED_COMPONENT_TYPES -) ################ VIDEO UPLOAD PIPELINE ############### diff --git a/cms/envs/common.py b/cms/envs/common.py index 8e35a97243..28795075f4 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -555,7 +555,6 @@ from openedx.core.lib.rooted_paths import rooted_glob PIPELINE_CSS = { 'style-vendor': { 'source_filenames': [ - 'js/vendor/afontgarde/afontgarde.css', 'css/vendor/normalize.css', 'css/vendor/font-awesome.css', 'css/vendor/html5-input-polyfills/number-polyfill.css', @@ -605,12 +604,6 @@ PIPELINE_CSS = { ], 'output_filename': 'css/studio-main-v2-rtl.css', }, - 'style-edx-icons': { - 'source_filenames': [ - 'css/edx-icons.css', - ], - 'output_filename': 'css/edx-icons.css', - }, 'style-xmodule-annotations': { 'source_filenames': [ 'css/vendor/ova/annotator.css', @@ -1132,19 +1125,6 @@ XBLOCK_SETTINGS = { } } -################################ XBlock Deprecation ################################ - -# The following settings are used for deprecating XBlocks. - -# Adding components in this list will disable the creation of new problems for -# those advanced components in Studio. Existing problems will work fine -# and one can edit them in Studio. -# DEPRECATED. Please use /admin/xblock_django/xblockdisableconfig instead. -DEPRECATED_ADVANCED_COMPONENT_TYPES = [] - -# XBlocks can be disabled from rendering in LMS Courseware by adding them to -# /admin/xblock_django/xblockdisableconfig/. - ################################ Settings for Credit Course Requirements ################################ # Initial delay used for retrying tasks. # Additional retries use longer delays. diff --git a/cms/static/cms/js/build.js b/cms/static/cms/js/build.js index f6a3c1534c..ca5f98eaf7 100644 --- a/cms/static/cms/js/build.js +++ b/cms/static/cms/js/build.js @@ -53,7 +53,8 @@ 'js/factories/settings_graders', 'js/factories/textbooks', 'js/factories/videos_index', - 'js/factories/xblock_validation' + 'js/factories/xblock_validation', + 'js/programs/program_admin_app' ]), /** * By default all the configuration for optimization happens from the command diff --git a/cms/static/cms/js/main.js b/cms/static/cms/js/main.js new file mode 100644 index 0000000000..0cae898de3 --- /dev/null +++ b/cms/static/cms/js/main.js @@ -0,0 +1,69 @@ +(function(AjaxPrefix) { + 'use strict'; + define(['domReady', 'jquery', 'underscore.string', 'backbone', 'gettext', + 'common/js/components/views/feedback_notification', 'coffee/src/ajax_prefix', + 'jquery.cookie'], + function(domReady, $, str, Backbone, gettext, NotificationView) { + var main; + main = function() { + AjaxPrefix.addAjaxPrefix(jQuery, function() { + return $("meta[name='path_prefix']").attr('content'); + }); + window.CMS = window.CMS || {}; + window.CMS.URL = window.CMS.URL || {}; + window.onTouchBasedDevice = function() { + return navigator.userAgent.match(/iPhone|iPod|iPad|Android/i); + }; + _.extend(window.CMS, Backbone.Events); + Backbone.emulateHTTP = true; + $.ajaxSetup({ + headers: { + 'X-CSRFToken': $.cookie('csrftoken') + }, + dataType: 'json' + }); + $(document).ajaxError(function(event, jqXHR, ajaxSettings) { + var message, msg; + if (ajaxSettings.notifyOnError === false) { + return; + } + if (jqXHR.responseText) { + try { + message = JSON.parse(jqXHR.responseText).error; + } catch (error) { + message = str.truncate(jqXHR.responseText, 300); + } + } else { + message = gettext('This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online.'); //jshint ignore:line + } + msg = new NotificationView.Error({ + 'title': gettext("Studio's having trouble saving your work"), + 'message': message + }); + return msg.show(); + }); + $.postJSON = function(url, data, callback) { + if ($.isFunction(data)) { + callback = data; + data = undefined; + } + return $.ajax({ + url: url, + type: 'POST', + contentType: 'application/json; charset=utf-8', + dataType: 'json', + data: JSON.stringify(data), + success: callback + }); + }; + return domReady(function() { + if (window.onTouchBasedDevice()) { + return $('body').addClass('touch-based-device'); + } + }); + }; + main(); + return main; + }); + +}).call(this, AjaxPrefix); //jshint ignore:line diff --git a/cms/static/cms/js/require-config.js b/cms/static/cms/js/require-config.js index 7cd1f1caf1..7f9e526e51 100644 --- a/cms/static/cms/js/require-config.js +++ b/cms/static/cms/js/require-config.js @@ -56,6 +56,7 @@ 'underscore.string': 'common/js/vendor/underscore.string', 'backbone': 'common/js/vendor/backbone', 'backbone-relational': 'js/vendor/backbone-relational.min', + 'backbone.validation': 'common/js/vendor/backbone-validation-min', 'backbone.associations': 'js/vendor/backbone-associations-min', 'backbone.paginator': 'common/js/vendor/backbone.paginator', 'tinymce': 'js/vendor/tinymce/js/tinymce/tinymce.full.min', @@ -68,9 +69,6 @@ 'URI': 'js/vendor/URI.min', 'ieshim': 'js/src/ie_shim', 'tooltip_manager': 'js/src/tooltip_manager', - 'modernizr': 'edx-pattern-library/js/modernizr-custom', - 'afontgarde': 'edx-pattern-library/js/afontgarde', - 'edxicons': 'edx-pattern-library/js/edx-icons', 'draggabilly': 'js/vendor/draggabilly', // Files needed for Annotations feature @@ -247,19 +245,13 @@ exports: 'XBlock', deps: ['xblock/core'] }, - 'coffee/src/main': { + 'cms/js/main': { deps: ['coffee/src/ajax_prefix'] }, 'js/src/logger': { exports: 'Logger', deps: ['coffee/src/ajax_prefix'] }, - 'modernizr': { - exports: 'Modernizr' - }, - 'afontgarde': { - exports: 'AFontGarde' - }, // the following are all needed for annotation tools 'video.dev': { diff --git a/cms/static/cms/js/spec/main.js b/cms/static/cms/js/spec/main.js index db82630e76..223a25b564 100644 --- a/cms/static/cms/js/spec/main.js +++ b/cms/static/cms/js/spec/main.js @@ -38,6 +38,7 @@ 'backbone': 'common/js/vendor/backbone', 'backbone.associations': 'xmodule_js/common_static/js/vendor/backbone-associations-min', 'backbone.paginator': 'common/js/vendor/backbone.paginator', + 'backbone.validation': 'common/js/vendor/backbone-validation-min', 'backbone-relational': 'xmodule_js/common_static/js/vendor/backbone-relational.min', 'tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min', 'jquery.tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce', @@ -53,9 +54,6 @@ 'domReady': 'xmodule_js/common_static/js/vendor/domReady', 'URI': 'xmodule_js/common_static/js/vendor/URI.min', 'mock-ajax': 'xmodule_js/common_static/js/vendor/mock-ajax', - 'modernizr': 'edx-pattern-library/js/modernizr-custom', - 'afontgarde': 'edx-pattern-library/js/afontgarde', - 'edxicons': 'edx-pattern-library/js/edx-icons', 'mathjax': '//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_SVG&delayStartupUntil=configured', // jshint ignore:line 'youtube': '//www.youtube.com/player_api?noext', 'coffee/src/ajax_prefix': 'xmodule_js/common_static/coffee/src/ajax_prefix', @@ -199,17 +197,11 @@ 'mock-ajax': { deps: ['jquery'] }, - 'coffee/src/main': { + 'cms/js/main': { deps: ['coffee/src/ajax_prefix'] }, 'coffee/src/ajax_prefix': { deps: ['jquery'] - }, - 'modernizr': { - exports: 'Modernizr' - }, - 'afontgarde': { - exports: 'AFontGarde' } } }); @@ -217,8 +209,8 @@ jasmine.getFixtures().fixturesPath += 'coffee/fixtures'; testFiles = [ + 'cms/js/spec/main_spec', 'cms/js/spec/xblock/cms.runtime.v1_spec', - 'coffee/spec/main_spec', 'coffee/spec/models/course_spec', 'coffee/spec/models/metadata_spec', 'coffee/spec/models/section_spec', @@ -276,7 +268,10 @@ 'js/certificates/spec/views/certificate_details_spec', 'js/certificates/spec/views/certificate_editor_spec', 'js/certificates/spec/views/certificates_list_spec', - 'js/certificates/spec/views/certificate_preview_spec' + 'js/certificates/spec/views/certificate_preview_spec', + 'js/spec/models/auto_auth_model_spec', + 'js/spec/views/programs/program_creator_spec', + 'js/spec/views/programs/program_details_spec' ]; i = 0; diff --git a/cms/static/cms/js/spec/main_spec.js b/cms/static/cms/js/spec/main_spec.js new file mode 100644 index 0000000000..235ce31e96 --- /dev/null +++ b/cms/static/cms/js/spec/main_spec.js @@ -0,0 +1,81 @@ +(function(sandbox) { + 'use strict'; + require(["jquery", "backbone", "cms/js/main", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery.cookie"], + function($, Backbone, main, AjaxHelpers) { + describe("CMS", function() { + it("should initialize URL", function() { + expect(window.CMS.URL).toBeDefined(); + }); + }); + describe("main helper", function() { + beforeEach(function() { + this.previousAjaxSettings = $.extend(true, {}, $.ajaxSettings); + spyOn($, "cookie").and.callFake(function(param) { + if (param === "csrftoken") { + return "stubCSRFToken"; + } + }); + return main(); + }); + afterEach(function() { + $.ajaxSettings = this.previousAjaxSettings; + return $.ajaxSettings; + }); + it("turn on Backbone emulateHTTP", function() { + expect(Backbone.emulateHTTP).toBeTruthy(); + }); + it("setup AJAX CSRF token", function() { + expect($.ajaxSettings.headers["X-CSRFToken"]).toEqual("stubCSRFToken"); + }); + }); + describe("AJAX Errors", function() { + var server; + server = null; + beforeEach(function() { + appendSetFixtures(sandbox({ + id: "page-notification" + })); + }); + afterEach(function() { + return server && server.restore(); + }); + it("successful AJAX request does not pop an error notification", function() { + server = AjaxHelpers.server([ + 200, { + "Content-Type": "application/json" + }, "{}" + ]); + expect($("#page-notification")).toBeEmpty(); + $.ajax("/test"); + expect($("#page-notification")).toBeEmpty(); + server.respond(); + expect($("#page-notification")).toBeEmpty(); + }); + it("AJAX request with error should pop an error notification", function() { + server = AjaxHelpers.server([ + 500, { + "Content-Type": "application/json" + }, "{}" + ]); + $.ajax("/test"); + server.respond(); + expect($("#page-notification")).not.toBeEmpty(); + expect($("#page-notification")).toContainElement('div.wrapper-notification-error'); + }); + it("can override AJAX request with error so it does not pop an error notification", function() { + server = AjaxHelpers.server([ + 500, { + "Content-Type": "application/json" + }, "{}" + ]); + $.ajax({ + url: "/test", + notifyOnError: false + }); + server.respond(); + expect($("#page-notification")).toBeEmpty(); + }); + }); + }); + +}).call(this, sandbox); //jshint ignore:line diff --git a/cms/static/cms/js/spec/main_squire.js b/cms/static/cms/js/spec/main_squire.js index 8e65cef81b..867047263d 100644 --- a/cms/static/cms/js/spec/main_squire.js +++ b/cms/static/cms/js/spec/main_squire.js @@ -34,6 +34,7 @@ 'backbone': 'common/js/vendor/backbone', 'backbone.associations': 'xmodule_js/common_static/js/vendor/backbone-associations-min', 'backbone.paginator': 'common/js/vendor/backbone.paginator', + 'backbone.validation': 'common/js/vendor/backbone-validation', 'tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/tinymce.full.min', 'jquery.tinymce': 'xmodule_js/common_static/js/vendor/tinymce/js/tinymce/jquery.tinymce', 'xmodule': 'xmodule_js/src/xmodule', @@ -42,9 +43,6 @@ 'utility': 'xmodule_js/common_static/js/src/utility', 'sinon': 'xmodule_js/common_static/js/vendor/sinon-1.17.0', 'squire': 'xmodule_js/common_static/js/vendor/Squire', - 'modernizr': 'edx-pattern-library/js/modernizr-custom', - 'afontgarde': 'edx-pattern-library/js/afontgarde', - 'edxicons': 'edx-pattern-library/js/edx-icons', 'draggabilly': 'xmodule_js/common_static/js/vendor/draggabilly', 'domReady': 'xmodule_js/common_static/js/vendor/domReady', 'URI': 'xmodule_js/common_static/js/vendor/URI.min', @@ -174,17 +172,11 @@ exports: 'XBlock', deps: ['xblock/core'] }, - 'coffee/src/main': { + 'cms/js/main': { deps: ['coffee/src/ajax_prefix'] }, 'coffee/src/ajax_prefix': { deps: ['jquery'] - }, - 'modernizr': { - exports: 'Modernizr' - }, - 'afontgarde': { - exports: 'AFontGarde' } } }); diff --git a/cms/static/coffee/spec/main_spec.coffee b/cms/static/coffee/spec/main_spec.coffee deleted file mode 100644 index 3875df0de5..0000000000 --- a/cms/static/coffee/spec/main_spec.coffee +++ /dev/null @@ -1,60 +0,0 @@ -require ["jquery", "backbone", "coffee/src/main", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "jquery.cookie"], -($, Backbone, main, AjaxHelpers) -> - describe "CMS", -> - it "should initialize URL", -> - expect(window.CMS.URL).toBeDefined() - - describe "main helper", -> - beforeEach -> - @previousAjaxSettings = $.extend(true, {}, $.ajaxSettings) - spyOn($, "cookie").and.callFake( - (param) -> - if param == "csrftoken" - return "stubCSRFToken" - ) - - main() - - afterEach -> - $.ajaxSettings = @previousAjaxSettings - - it "turn on Backbone emulateHTTP", -> - expect(Backbone.emulateHTTP).toBeTruthy() - - it "setup AJAX CSRF token", -> - expect($.ajaxSettings.headers["X-CSRFToken"]).toEqual("stubCSRFToken") - - describe "AJAX Errors", -> - server = null - beforeEach -> - appendSetFixtures(sandbox({id: "page-notification"})) - - afterEach -> - server && server.restore() - - it "successful AJAX request does not pop an error notification", -> - server = AjaxHelpers.server([200, {"Content-Type": "application/json"}, "{}"]) - - expect($("#page-notification")).toBeEmpty() - $.ajax("/test") - expect($("#page-notification")).toBeEmpty() - server.respond() - expect($("#page-notification")).toBeEmpty() - - it "AJAX request with error should pop an error notification", -> - server = AjaxHelpers.server([500, {"Content-Type": "application/json"}, "{}"]) - - $.ajax("/test") - server.respond() - expect($("#page-notification")).not.toBeEmpty() - expect($("#page-notification")).toContainElement('div.wrapper-notification-error') - - it "can override AJAX request with error so it does not pop an error notification", -> - server = AjaxHelpers.server([500, {"Content-Type": "application/json"}, "{}"]) - - $.ajax - url: "/test" - notifyOnError: false - - server.respond() - expect($("#page-notification")).toBeEmpty() diff --git a/cms/static/coffee/spec/models/textbook_spec.coffee b/cms/static/coffee/spec/models/textbook_spec.coffee index dd78ba8997..dc10df8a47 100644 --- a/cms/static/coffee/spec/models/textbook_spec.coffee +++ b/cms/static/coffee/spec/models/textbook_spec.coffee @@ -1,4 +1,5 @@ -define ["backbone", "js/models/textbook", "js/collections/textbook", "js/models/chapter", "js/collections/chapter", "coffee/src/main"], + +define ["backbone", "js/models/textbook", "js/collections/textbook", "js/models/chapter", "js/collections/chapter", "cms/js/main"], (Backbone, Textbook, TextbookSet, Chapter, ChapterSet, main) -> describe "Textbook model", -> diff --git a/cms/static/coffee/spec/views/metadata_edit_spec.coffee b/cms/static/coffee/spec/views/metadata_edit_spec.coffee index 4c3927c492..3eb5d41f2b 100644 --- a/cms/static/coffee/spec/views/metadata_edit_spec.coffee +++ b/cms/static/coffee/spec/views/metadata_edit_spec.coffee @@ -1,4 +1,4 @@ -define ["js/models/metadata", "js/collections/metadata", "js/views/metadata", "coffee/src/main"], +define ["js/models/metadata", "js/collections/metadata", "js/views/metadata", "cms/js/main"], (MetadataModel, MetadataCollection, MetadataView, main) -> verifyInputType = (input, expectedType) -> # Some browsers (e.g. FireFox) do not support the "number" diff --git a/cms/static/coffee/src/main.coffee b/cms/static/coffee/src/main.coffee deleted file mode 100644 index 23ac832456..0000000000 --- a/cms/static/coffee/src/main.coffee +++ /dev/null @@ -1,55 +0,0 @@ -define ["domReady", "jquery", "underscore.string", "backbone", "gettext", - "common/js/components/views/feedback_notification", - "coffee/src/ajax_prefix", "jquery.cookie"], -(domReady, $, str, Backbone, gettext, NotificationView) -> - main = -> - AjaxPrefix.addAjaxPrefix jQuery, -> - $("meta[name='path_prefix']").attr('content') - - window.CMS = window.CMS or {} - CMS.URL = CMS.URL or {} - window.onTouchBasedDevice = -> - navigator.userAgent.match /iPhone|iPod|iPad|Android/i - - _.extend CMS, Backbone.Events - Backbone.emulateHTTP = true - - $.ajaxSetup - headers : { 'X-CSRFToken': $.cookie 'csrftoken' } - dataType: 'json' - - $(document).ajaxError (event, jqXHR, ajaxSettings, thrownError) -> - if ajaxSettings.notifyOnError is false - return - if jqXHR.responseText - try - message = JSON.parse(jqXHR.responseText).error - catch error - message = str.truncate(jqXHR.responseText, 300) - else - message = gettext("This may be happening because of an error with our server or your internet connection. Try refreshing the page or making sure you are online.") - msg = new NotificationView.Error( - "title": gettext("Studio's having trouble saving your work") - "message": message - ) - msg.show() - - $.postJSON = (url, data, callback) -> - # shift arguments if data argument was omitted - if $.isFunction(data) - callback = data - data = `undefined` - $.ajax - url: url - type: "POST" - contentType: "application/json; charset=utf-8" - dataType: "json" - data: JSON.stringify(data) - success: callback - - domReady -> - if onTouchBasedDevice() - $('body').addClass 'touch-based-device' - - main() - return main diff --git a/cms/static/fonts/edx-icons/edx-icons.ttf b/cms/static/fonts/edx-icons/edx-icons.ttf deleted file mode 100755 index 0a0122ba24..0000000000 Binary files a/cms/static/fonts/edx-icons/edx-icons.ttf and /dev/null differ diff --git a/cms/static/fonts/edx-icons/edx-icons.woff b/cms/static/fonts/edx-icons/edx-icons.woff deleted file mode 100755 index 829bbdcb90..0000000000 Binary files a/cms/static/fonts/edx-icons/edx-icons.woff and /dev/null differ diff --git a/cms/static/fonts/edx-icons/fallback-img/angle-down.svg b/cms/static/fonts/edx-icons/fallback-img/angle-down.svg deleted file mode 100755 index 01641ed83a..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/angle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/angle-left.svg b/cms/static/fonts/edx-icons/fallback-img/angle-left.svg deleted file mode 100755 index 195597d80e..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/angle-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/angle-right.svg b/cms/static/fonts/edx-icons/fallback-img/angle-right.svg deleted file mode 100755 index f52f29faa0..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/angle-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/angle-up.svg b/cms/static/fonts/edx-icons/fallback-img/angle-up.svg deleted file mode 100755 index 84ac1d46ca..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/angle-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/arrow-circle-down.svg b/cms/static/fonts/edx-icons/fallback-img/arrow-circle-down.svg deleted file mode 100755 index 05b05aff4d..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/arrow-circle-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/arrow-down.svg b/cms/static/fonts/edx-icons/fallback-img/arrow-down.svg deleted file mode 100755 index 32b1acec6f..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/arrow-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/arrow-up.svg b/cms/static/fonts/edx-icons/fallback-img/arrow-up.svg deleted file mode 100755 index 17cee254ec..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/arrow-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/arrows-alt.svg b/cms/static/fonts/edx-icons/fallback-img/arrows-alt.svg deleted file mode 100755 index 08650df94d..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/arrows-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/bars.svg b/cms/static/fonts/edx-icons/fallback-img/bars.svg deleted file mode 100755 index c8e81a27ad..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/bars.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/book.svg b/cms/static/fonts/edx-icons/fallback-img/book.svg deleted file mode 100755 index 5835f742da..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/book.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/bullhorn.svg b/cms/static/fonts/edx-icons/fallback-img/bullhorn.svg deleted file mode 100755 index 116735632e..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/bullhorn.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/calendar.svg b/cms/static/fonts/edx-icons/fallback-img/calendar.svg deleted file mode 100755 index a9f0c5e230..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/calendar.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/camera.svg b/cms/static/fonts/edx-icons/fallback-img/camera.svg deleted file mode 100755 index 111dfc996d..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/camera.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/caret-down.svg b/cms/static/fonts/edx-icons/fallback-img/caret-down.svg deleted file mode 100755 index 7bac5d5eaf..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/caret-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/caret-left.svg b/cms/static/fonts/edx-icons/fallback-img/caret-left.svg deleted file mode 100755 index 3f1b71acd4..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/caret-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/caret-right.svg b/cms/static/fonts/edx-icons/fallback-img/caret-right.svg deleted file mode 100755 index adb9dc2639..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/caret-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/caret-up.svg b/cms/static/fonts/edx-icons/fallback-img/caret-up.svg deleted file mode 100755 index 2dab810169..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/caret-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/cc.svg b/cms/static/fonts/edx-icons/fallback-img/cc.svg deleted file mode 100755 index 994186a4b4..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/cc.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/chain-broken.svg b/cms/static/fonts/edx-icons/fallback-img/chain-broken.svg deleted file mode 100755 index 637de522b3..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/chain-broken.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/chain.svg b/cms/static/fonts/edx-icons/fallback-img/chain.svg deleted file mode 100755 index 777c5d2cd1..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/chain.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/check-square-o.svg b/cms/static/fonts/edx-icons/fallback-img/check-square-o.svg deleted file mode 100755 index b15bc668c0..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/check-square-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/check-square.svg b/cms/static/fonts/edx-icons/fallback-img/check-square.svg deleted file mode 100755 index e975bbf0a9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/check-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/check.svg b/cms/static/fonts/edx-icons/fallback-img/check.svg deleted file mode 100755 index bbb66d4bb8..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/check.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/chevron-left.svg b/cms/static/fonts/edx-icons/fallback-img/chevron-left.svg deleted file mode 100755 index feac4be3bd..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/chevron-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/chevron-right.svg b/cms/static/fonts/edx-icons/fallback-img/chevron-right.svg deleted file mode 100755 index 69a5aff779..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/chevron-right.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/circle-o.svg b/cms/static/fonts/edx-icons/fallback-img/circle-o.svg deleted file mode 100755 index 375e2ab4ee..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/circle-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/circle-thin.svg b/cms/static/fonts/edx-icons/fallback-img/circle-thin.svg deleted file mode 100755 index 3882f2076d..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/circle-thin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/circle.svg b/cms/static/fonts/edx-icons/fallback-img/circle.svg deleted file mode 100755 index 4fbcb31e28..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/clock-o.svg b/cms/static/fonts/edx-icons/fallback-img/clock-o.svg deleted file mode 100755 index 7346b8292c..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/clock-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/close.svg b/cms/static/fonts/edx-icons/fallback-img/close.svg deleted file mode 100755 index 82e98fe3ed..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/close.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/cog.svg b/cms/static/fonts/edx-icons/fallback-img/cog.svg deleted file mode 100755 index faad91fed6..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/cog.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/comment.svg b/cms/static/fonts/edx-icons/fallback-img/comment.svg deleted file mode 100755 index 957177a741..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/comment.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/comments.svg b/cms/static/fonts/edx-icons/fallback-img/comments.svg deleted file mode 100755 index 371eb4da04..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/comments.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/compress.svg b/cms/static/fonts/edx-icons/fallback-img/compress.svg deleted file mode 100755 index 816d06d631..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/compress.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/copy.svg b/cms/static/fonts/edx-icons/fallback-img/copy.svg deleted file mode 100755 index d52cbb49e9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/copy.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/dot-circle-o.svg b/cms/static/fonts/edx-icons/fallback-img/dot-circle-o.svg deleted file mode 100755 index 304b63f952..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/dot-circle-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/edit.svg b/cms/static/fonts/edx-icons/fallback-img/edit.svg deleted file mode 100755 index 61fabfbb8e..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/edit.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/ellipsis-h.svg b/cms/static/fonts/edx-icons/fallback-img/ellipsis-h.svg deleted file mode 100755 index a7ce776627..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/ellipsis-h.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/envelope-o.svg b/cms/static/fonts/edx-icons/fallback-img/envelope-o.svg deleted file mode 100755 index 334744f1b7..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/envelope-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/envelope.svg b/cms/static/fonts/edx-icons/fallback-img/envelope.svg deleted file mode 100755 index 04f9a82b0e..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/envelope.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/exclamation-circle.svg b/cms/static/fonts/edx-icons/fallback-img/exclamation-circle.svg deleted file mode 100755 index e6d0dd7b55..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/exclamation-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/exclamation-triangle.svg b/cms/static/fonts/edx-icons/fallback-img/exclamation-triangle.svg deleted file mode 100755 index d0a8fafbc3..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/exclamation-triangle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/external-link.svg b/cms/static/fonts/edx-icons/fallback-img/external-link.svg deleted file mode 100755 index ceb5901b04..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/external-link.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/eye-slash.svg b/cms/static/fonts/edx-icons/fallback-img/eye-slash.svg deleted file mode 100755 index b068c10740..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/eye-slash.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/eye.svg b/cms/static/fonts/edx-icons/fallback-img/eye.svg deleted file mode 100755 index 87a020169b..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/eye.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/facebook-square.svg b/cms/static/fonts/edx-icons/fallback-img/facebook-square.svg deleted file mode 100755 index 4b6d863635..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/facebook-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/fast-backward.svg b/cms/static/fonts/edx-icons/fallback-img/fast-backward.svg deleted file mode 100755 index 3e8497c6e0..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/fast-backward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/fast-forward.svg b/cms/static/fonts/edx-icons/fallback-img/fast-forward.svg deleted file mode 100755 index e7b4f12075..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/fast-forward.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/file-o.svg b/cms/static/fonts/edx-icons/fallback-img/file-o.svg deleted file mode 100755 index 4b6632f7a1..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/file-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/file.svg b/cms/static/fonts/edx-icons/fallback-img/file.svg deleted file mode 100755 index 447972da50..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/filter.svg b/cms/static/fonts/edx-icons/fallback-img/filter.svg deleted file mode 100755 index 33df7e90c4..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/filter.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/flag.svg b/cms/static/fonts/edx-icons/fallback-img/flag.svg deleted file mode 100755 index a6754c5225..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/home.svg b/cms/static/fonts/edx-icons/fallback-img/home.svg deleted file mode 100755 index 070c17ca9a..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/home.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/info-circle.svg b/cms/static/fonts/edx-icons/fallback-img/info-circle.svg deleted file mode 100755 index 258d1edbf9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/info-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/linkedin-square.svg b/cms/static/fonts/edx-icons/fallback-img/linkedin-square.svg deleted file mode 100755 index 11bf577942..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/linkedin-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/list-alt.svg b/cms/static/fonts/edx-icons/fallback-img/list-alt.svg deleted file mode 100755 index 08a6dc6c0f..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/list-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/list-ul.svg b/cms/static/fonts/edx-icons/fallback-img/list-ul.svg deleted file mode 100755 index 02ee55a9c3..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/list-ul.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/lock.svg b/cms/static/fonts/edx-icons/fallback-img/lock.svg deleted file mode 100755 index 1236668e90..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/lock.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/mail-reply.svg b/cms/static/fonts/edx-icons/fallback-img/mail-reply.svg deleted file mode 100755 index cee46e5762..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/mail-reply.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/minus.svg b/cms/static/fonts/edx-icons/fallback-img/minus.svg deleted file mode 100755 index 6727cfbed9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/money.svg b/cms/static/fonts/edx-icons/fallback-img/money.svg deleted file mode 100755 index 078a1470ef..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/money.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/pause.svg b/cms/static/fonts/edx-icons/fallback-img/pause.svg deleted file mode 100755 index 586207c4e4..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/pause.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/pencil.svg b/cms/static/fonts/edx-icons/fallback-img/pencil.svg deleted file mode 100755 index b625cd1bdf..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/pencil.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/play.svg b/cms/static/fonts/edx-icons/fallback-img/play.svg deleted file mode 100755 index a03fb6c814..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/play.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/plus.svg b/cms/static/fonts/edx-icons/fallback-img/plus.svg deleted file mode 100755 index 410a310580..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/print.svg b/cms/static/fonts/edx-icons/fallback-img/print.svg deleted file mode 100755 index 1e84dbc968..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/print.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/question-circle.svg b/cms/static/fonts/edx-icons/fallback-img/question-circle.svg deleted file mode 100755 index 938038803b..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/question-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/quote-left.svg b/cms/static/fonts/edx-icons/fallback-img/quote-left.svg deleted file mode 100755 index 15b7fb8add..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/quote-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/refresh.svg b/cms/static/fonts/edx-icons/fallback-img/refresh.svg deleted file mode 100755 index 3df93dc9b8..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/refresh.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/rotate-left.svg b/cms/static/fonts/edx-icons/fallback-img/rotate-left.svg deleted file mode 100755 index 431d68ceaf..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/rotate-left.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/search-minus.svg b/cms/static/fonts/edx-icons/fallback-img/search-minus.svg deleted file mode 100755 index 32073bb26b..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/search-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/search-plus.svg b/cms/static/fonts/edx-icons/fallback-img/search-plus.svg deleted file mode 100755 index 3a67eb0b66..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/search-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/search.svg b/cms/static/fonts/edx-icons/fallback-img/search.svg deleted file mode 100755 index 1bea70b97b..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/search.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/share-square-o.svg b/cms/static/fonts/edx-icons/fallback-img/share-square-o.svg deleted file mode 100755 index b41211bc94..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/share-square-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/shopping-cart.svg b/cms/static/fonts/edx-icons/fallback-img/shopping-cart.svg deleted file mode 100755 index dac110d428..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/shopping-cart.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/sitemap.svg b/cms/static/fonts/edx-icons/fallback-img/sitemap.svg deleted file mode 100755 index a94f6df860..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/sitemap.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/sort.svg b/cms/static/fonts/edx-icons/fallback-img/sort.svg deleted file mode 100755 index b2916e0484..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/sort.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/spinner.svg b/cms/static/fonts/edx-icons/fallback-img/spinner.svg deleted file mode 100755 index f3016db2c0..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/spinner.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/square-o.svg b/cms/static/fonts/edx-icons/fallback-img/square-o.svg deleted file mode 100755 index 5209e90003..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/square-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/square-o2.svg b/cms/static/fonts/edx-icons/fallback-img/square-o2.svg deleted file mode 100755 index 5209e90003..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/square-o2.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/square.svg b/cms/static/fonts/edx-icons/fallback-img/square.svg deleted file mode 100755 index bf4e78fd02..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/star.svg b/cms/static/fonts/edx-icons/fallback-img/star.svg deleted file mode 100755 index 97e7892a07..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/star.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/stop.svg b/cms/static/fonts/edx-icons/fallback-img/stop.svg deleted file mode 100755 index 3cdfe64e76..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/stop.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/table.svg b/cms/static/fonts/edx-icons/fallback-img/table.svg deleted file mode 100755 index a79fca93b9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/thumb-tack.svg b/cms/static/fonts/edx-icons/fallback-img/thumb-tack.svg deleted file mode 100755 index df461e830f..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/thumb-tack.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/times-circle-o.svg b/cms/static/fonts/edx-icons/fallback-img/times-circle-o.svg deleted file mode 100755 index de41e8f8e2..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/times-circle-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/times-circle.svg b/cms/static/fonts/edx-icons/fallback-img/times-circle.svg deleted file mode 100755 index 5059928ed9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/times-circle.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/trash-o.svg b/cms/static/fonts/edx-icons/fallback-img/trash-o.svg deleted file mode 100755 index 03e9df195d..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/trash-o.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/twitter-square.svg b/cms/static/fonts/edx-icons/fallback-img/twitter-square.svg deleted file mode 100755 index 9b27b54e31..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/twitter-square.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/unlock-alt.svg b/cms/static/fonts/edx-icons/fallback-img/unlock-alt.svg deleted file mode 100755 index 4b13aebe55..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/unlock-alt.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/upload.svg b/cms/static/fonts/edx-icons/fallback-img/upload.svg deleted file mode 100755 index 79a53abc7f..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/upload.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/user.svg b/cms/static/fonts/edx-icons/fallback-img/user.svg deleted file mode 100755 index 74ccf29b2f..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/user.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/video-camera.svg b/cms/static/fonts/edx-icons/fallback-img/video-camera.svg deleted file mode 100755 index 96f40a8218..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/video-camera.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/volume-down.svg b/cms/static/fonts/edx-icons/fallback-img/volume-down.svg deleted file mode 100755 index 488c3163d1..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/volume-down.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/volume-off.svg b/cms/static/fonts/edx-icons/fallback-img/volume-off.svg deleted file mode 100755 index 14d6f7bedd..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/volume-off.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/fallback-img/volume-up.svg b/cms/static/fonts/edx-icons/fallback-img/volume-up.svg deleted file mode 100755 index 9e046522e9..0000000000 --- a/cms/static/fonts/edx-icons/fallback-img/volume-up.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cms/static/fonts/edx-icons/selection.json b/cms/static/fonts/edx-icons/selection.json deleted file mode 100755 index 632832d60f..0000000000 --- a/cms/static/fonts/edx-icons/selection.json +++ /dev/null @@ -1,2515 +0,0 @@ -{ - "IcoMoonType": "selection", - "icons": [ - { - "icon": { - "paths": [ - "M135.429 808h132v-396.571h-132v396.571zM276 289.143q-0.571-29.714-20.571-49.143t-53.143-19.429-54 19.429-20.857 49.143q0 29.143 20.286 48.857t52.857 19.714h0.571q33.714 0 54.286-19.714t20.571-48.857zM610.286 808h132v-227.429q0-88-41.714-133.143t-110.286-45.143q-77.714 0-119.429 66.857h1.143v-57.714h-132q1.714 37.714 0 396.571h132v-221.714q0-21.714 4-32 8.571-20 25.714-34t42.286-14q66.286 0 66.286 89.714v212zM877.714 237.714v548.571q0 68-48.286 116.286t-116.286 48.286h-548.571q-68 0-116.286-48.286t-48.286-116.286v-548.571q0-68 48.286-116.286t116.286-48.286h548.571q68 0 116.286 48.286t48.286 116.286z" - ], - "width": 877.7142857142858, - "attrs": [], - "isMulticolor": false, - "tags": [ - "linkedin-square" - ], - "defaultCode": 61580, - "grid": 14 - }, - "attrs": [], - "properties": { - "id": 132, - "order": 1, - "prevSize": 14, - "name": "linkedin-square", - "code": 58880 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 0 - }, - { - "icon": { - "paths": [ - "M585.143 402.286q0 14.857-10.857 25.714l-256 256q-10.857 10.857-25.714 10.857t-25.714-10.857l-256-256q-10.857-10.857-10.857-25.714t10.857-25.714 25.714-10.857h512q14.857 0 25.714 10.857t10.857 25.714z" - ], - "width": 585, - "attrs": [], - "isMulticolor": false, - "tags": [ - "caret-down" - ], - "defaultCode": 61655, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "caret-down", - "order": 1, - "id": 191, - "prevSize": 14, - "code": 58881 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 1 - }, - { - "icon": { - "paths": [ - "M585.143 694.857q0 14.857-10.857 25.714t-25.714 10.857h-512q-14.857 0-25.714-10.857t-10.857-25.714 10.857-25.714l256-256q10.857-10.857 25.714-10.857t25.714 10.857l256 256q10.857 10.857 10.857 25.714z" - ], - "width": 585, - "attrs": [], - "isMulticolor": false, - "tags": [ - "caret-up" - ], - "defaultCode": 61656, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "caret-up", - "order": 2, - "id": 192, - "prevSize": 14, - "code": 58882 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 2 - }, - { - "icon": { - "paths": [ - "M365.714 256v512q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-256-256q-10.857-10.857-10.857-25.714t10.857-25.714l256-256q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714z" - ], - "width": 366, - "attrs": [], - "isMulticolor": false, - "tags": [ - "caret-left" - ], - "defaultCode": 61657, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "caret-left", - "order": 4, - "id": 193, - "prevSize": 14, - "code": 58883 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 3 - }, - { - "icon": { - "paths": [ - "M329.143 512q0 14.857-10.857 25.714l-256 256q-10.857 10.857-25.714 10.857t-25.714-10.857-10.857-25.714v-512q0-14.857 10.857-25.714t25.714-10.857 25.714 10.857l256 256q10.857 10.857 10.857 25.714z" - ], - "width": 366, - "attrs": [], - "isMulticolor": false, - "tags": [ - "caret-right" - ], - "defaultCode": 61658, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "caret-right", - "order": 3, - "id": 194, - "prevSize": 14, - "code": 58884 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 4 - }, - { - "icon": { - "paths": [ - "M585.143 512q0 60.571-42.857 103.429t-103.429 42.857-103.429-42.857-42.857-103.429 42.857-103.429 103.429-42.857 103.429 42.857 42.857 103.429zM438.857 201.143q-84.571 0-156 41.714t-113.143 113.143-41.714 156 41.714 156 113.143 113.143 156 41.714 156-41.714 113.143-113.143 41.714-156-41.714-156-113.143-113.143-156-41.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "dot-circle-o" - ], - "defaultCode": 61842, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "dot-circle-o", - "order": 1, - "id": 364, - "prevSize": 14, - "code": 58885 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 5 - }, - { - "icon": { - "paths": [ - "M640 146.286h-475.429q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-475.429q0-37.714-26.857-64.571t-64.571-26.857zM804.571 237.714v475.429q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h475.429q68 0 116.286 48.286t48.286 116.286z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "square-o" - ], - "defaultCode": 61590, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "square-o", - "order": 101, - "id": 142, - "prevSize": 14, - "code": 58886 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 6 - }, - { - "icon": { - "paths": [ - "M877.714 237.714v548.571q0 68-48.286 116.286t-116.286 48.286h-548.571q-68 0-116.286-48.286t-48.286-116.286v-548.571q0-68 48.286-116.286t116.286-48.286h548.571q68 0 116.286 48.286t48.286 116.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "square" - ], - "defaultCode": 61640, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "square", - "order": 102, - "id": 177, - "prevSize": 14, - "code": 58887 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 7 - }, - { - "icon": { - "paths": [ - "M877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle" - ], - "defaultCode": 61713, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "circle", - "order": 103, - "id": 245, - "prevSize": 14, - "code": 58888 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 8 - }, - { - "icon": { - "paths": [ - "M438.857 146.286q-74.286 0-142 29.143t-116.571 78-78 116.571-29.143 142 29.143 142 78 116.571 116.571 78 142 29.143 142-29.143 116.571-78 78-116.571 29.143-142-29.143-142-78-116.571-116.571-78-142-29.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-thin", - "genderless" - ], - "defaultCode": 61915, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "circle-thin, genderless", - "order": 105, - "id": 433, - "prevSize": 14, - "code": 58889 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 9 - }, - { - "icon": { - "paths": [ - "M658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 29.714-21.714 51.429t-51.429 21.714q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "search" - ], - "defaultCode": 61442, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "search", - "order": 44, - "id": 3, - "prevSize": 14, - "code": 58890 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 10 - }, - { - "icon": { - "paths": [ - "M950.857 859.429v-438.857q-18.286 20.571-39.429 37.714-153.143 117.714-243.429 193.143-29.143 24.571-47.429 38.286t-49.429 27.714-58.571 14h-1.143q-27.429 0-58.571-14t-49.429-27.714-47.429-38.286q-90.286-75.429-243.429-193.143-21.143-17.143-39.429-37.714v438.857q0 7.429 5.429 12.857t12.857 5.429h841.143q7.429 0 12.857-5.429t5.429-12.857zM950.857 258.857v-14t-0.286-7.429-1.714-7.143-3.143-5.143-5.143-4.286-8-1.429h-841.143q-7.429 0-12.857 5.429t-5.429 12.857q0 96 84 162.286 110.286 86.857 229.143 181.143 3.429 2.857 20 16.857t26.286 21.429 25.429 18 28.857 15.714 24.571 5.143h1.143q11.429 0 24.571-5.143t28.857-15.714 25.429-18 26.286-21.429 20-16.857q118.857-94.286 229.143-181.143 30.857-24.571 57.429-66t26.571-75.143zM1024 237.714v621.714q0 37.714-26.857 64.571t-64.571 26.857h-841.143q-37.714 0-64.571-26.857t-26.857-64.571v-621.714q0-37.714 26.857-64.571t64.571-26.857h841.143q37.714 0 64.571 26.857t26.857 64.571z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "envelope-o" - ], - "defaultCode": 61443, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "envelope-o", - "order": 60, - "id": 4, - "prevSize": 14, - "code": 58891 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 11 - }, - { - "icon": { - "paths": [ - "M950.857 369.714q0 12.571-14.857 27.429l-207.429 202.286 49.143 285.714q0.571 4 0.571 11.429 0 12-6 20.286t-17.429 8.286q-10.857 0-22.857-6.857l-256.571-134.857-256.571 134.857q-12.571 6.857-22.857 6.857-12 0-18-8.286t-6-20.286q0-3.429 1.143-11.429l49.143-285.714-208-202.286q-14.286-15.429-14.286-27.429 0-21.143 32-26.286l286.857-41.714 128.571-260q10.857-23.429 28-23.429t28 23.429l128.571 260 286.857 41.714q32 5.143 32 26.286z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "star" - ], - "defaultCode": 61445, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "star", - "order": 53, - "id": 6, - "prevSize": 14, - "code": 58892 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 12 - }, - { - "icon": { - "paths": [ - "M804.571 802.857q0 68.571-41.714 108.286t-110.857 39.714h-499.429q-69.143 0-110.857-39.714t-41.714-108.286q0-30.286 2-59.143t8-62.286 15.143-62 24.571-55.714 35.429-46.286 48.857-30.571 63.714-11.429q5.143 0 24 12.286t42.571 27.429 61.714 27.429 76.286 12.286 76.286-12.286 61.714-27.429 42.571-27.429 24-12.286q34.857 0 63.714 11.429t48.857 30.571 35.429 46.286 24.571 55.714 15.143 62 8 62.286 2 59.143zM621.714 292.571q0 90.857-64.286 155.143t-155.143 64.286-155.143-64.286-64.286-155.143 64.286-155.143 155.143-64.286 155.143 64.286 64.286 155.143z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "user" - ], - "defaultCode": 61447, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "user", - "order": 54, - "id": 8, - "prevSize": 14, - "code": 58893 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 13 - }, - { - "icon": { - "paths": [ - "M954.857 323.429q0 22.857-16 38.857l-491.429 491.429q-16 16-38.857 16t-38.857-16l-284.571-284.571q-16-16-16-38.857t16-38.857l77.714-77.714q16-16 38.857-16t38.857 16l168 168.571 374.857-375.429q16-16 38.857-16t38.857 16l77.714 77.714q16 16 16 38.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "check" - ], - "defaultCode": 61452, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "check", - "order": 5, - "id": 13, - "prevSize": 14, - "code": 58894 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 14 - }, - { - "icon": { - "paths": [ - "M741.714 755.429q0 22.857-16 38.857l-77.714 77.714q-16 16-38.857 16t-38.857-16l-168-168-168 168q-16 16-38.857 16t-38.857-16l-77.714-77.714q-16-16-16-38.857t16-38.857l168-168-168-168q-16-16-16-38.857t16-38.857l77.714-77.714q16-16 38.857-16t38.857 16l168 168 168-168q16-16 38.857-16t38.857 16l77.714 77.714q16 16 16 38.857t-16 38.857l-168 168 168 168q16 16 16 38.857z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "close", - "remove", - "times" - ], - "defaultCode": 61453, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "close, remove, times", - "order": 2, - "id": 14, - "prevSize": 14, - "code": 58895 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 15 - }, - { - "icon": { - "paths": [ - "M585.143 457.143v36.571q0 7.429-5.429 12.857t-12.857 5.429h-128v128q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-128h-128q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h128v-128q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857v128h128q7.429 0 12.857 5.429t5.429 12.857zM658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 30.286-21.429 51.714t-51.714 21.429q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "search-plus" - ], - "defaultCode": 61454, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "search-plus", - "order": 16, - "id": 15, - "prevSize": 14, - "code": 58896 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 16 - }, - { - "icon": { - "paths": [ - "M585.143 457.143v36.571q0 7.429-5.429 12.857t-12.857 5.429h-329.143q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h329.143q7.429 0 12.857 5.429t5.429 12.857zM658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 30.286-21.429 51.714t-51.714 21.429q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "search-minus" - ], - "defaultCode": 61456, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "search-minus", - "order": 43, - "id": 16, - "prevSize": 14, - "code": 58897 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 17 - }, - { - "icon": { - "paths": [ - "M585.143 512q0-60.571-42.857-103.429t-103.429-42.857-103.429 42.857-42.857 103.429 42.857 103.429 103.429 42.857 103.429-42.857 42.857-103.429zM877.714 449.714v126.857q0 6.857-4.571 13.143t-11.429 7.429l-105.714 16q-10.857 30.857-22.286 52 20 28.571 61.143 78.857 5.714 6.857 5.714 14.286t-5.143 13.143q-15.429 21.143-56.571 61.714t-53.714 40.571q-6.857 0-14.857-5.143l-78.857-61.714q-25.143 13.143-52 21.714-9.143 77.714-16.571 106.286-4 16-20.571 16h-126.857q-8 0-14-4.857t-6.571-12.286l-16-105.143q-28-9.143-51.429-21.143l-80.571 61.143q-5.714 5.143-14.286 5.143-8 0-14.286-6.286-72-65.143-94.286-96-4-5.714-4-13.143 0-6.857 4.571-13.143 8.571-12 29.143-38t30.857-40.286q-15.429-28.571-23.429-56.571l-104.571-15.429q-7.429-1.143-12-7.143t-4.571-13.429v-126.857q0-6.857 4.571-13.143t10.857-7.429l106.286-16q8-26.286 22.286-52.571-22.857-32.571-61.143-78.857-5.714-6.857-5.714-13.714 0-5.714 5.143-13.143 14.857-20.571 56.286-61.429t54-40.857q7.429 0 14.857 5.714l78.857 61.143q25.143-13.143 52-21.714 9.143-77.714 16.571-106.286 4-16 20.571-16h126.857q8 0 14 4.857t6.571 12.286l16 105.143q28 9.143 51.429 21.143l81.143-61.143q5.143-5.143 13.714-5.143 7.429 0 14.286 5.714 73.714 68 94.286 97.143 4 4.571 4 12.571 0 6.857-4.571 13.143-8.571 12-29.143 38t-30.857 40.286q14.857 28.571 23.429 56l104.571 16q7.429 1.143 12 7.143t4.571 13.429z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "cog", - "gear" - ], - "defaultCode": 61459, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "cog, gear", - "order": 19, - "id": 19, - "prevSize": 14, - "code": 58898 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 18 - }, - { - "icon": { - "paths": [ - "M292.571 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM438.857 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM585.143 420.571v329.143q0 8-5.143 13.143t-13.143 5.143h-36.571q-8 0-13.143-5.143t-5.143-13.143v-329.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM658.286 834.286v-541.714h-512v541.714q0 12.571 4 23.143t8.286 15.429 6 4.857h475.429q1.714 0 6-4.857t8.286-15.429 4-23.143zM274.286 219.429h256l-27.429-66.857q-4-5.143-9.714-6.286h-181.143q-5.714 1.143-9.714 6.286zM804.571 237.714v36.571q0 8-5.143 13.143t-13.143 5.143h-54.857v541.714q0 47.429-26.857 82t-64.571 34.571h-475.429q-37.714 0-64.571-33.429t-26.857-80.857v-544h-54.857q-8 0-13.143-5.143t-5.143-13.143v-36.571q0-8 5.143-13.143t13.143-5.143h176.571l40-95.429q8.571-21.143 30.857-36t45.143-14.857h182.857q22.857 0 45.143 14.857t30.857 36l40 95.429h176.571q8 0 13.143 5.143t5.143 13.143z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "trash-o" - ], - "defaultCode": 61460, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "trash-o", - "order": 11, - "id": 20, - "prevSize": 14, - "code": 58899 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 19 - }, - { - "icon": { - "paths": [ - "M804.571 566.857v274.286q0 14.857-10.857 25.714t-25.714 10.857h-219.429v-219.429h-146.286v219.429h-219.429q-14.857 0-25.714-10.857t-10.857-25.714v-274.286q0-0.571 0.286-1.714t0.286-1.714l328.571-270.857 328.571 270.857q0.571 1.143 0.571 3.429zM932 527.429l-35.429 42.286q-4.571 5.143-12 6.286h-1.714q-7.429 0-12-4l-395.429-329.714-395.429 329.714q-6.857 4.571-13.714 4-7.429-1.143-12-6.286l-35.429-42.286q-4.571-5.714-4-13.429t6.286-12.286l410.857-342.286q18.286-14.857 43.429-14.857t43.429 14.857l139.429 116.571v-111.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143v233.143l125.143 104q5.714 4.571 6.286 12.286t-4 13.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "home" - ], - "defaultCode": 61461, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "home", - "order": 73, - "id": 21, - "prevSize": 14, - "code": 58900 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 20 - }, - { - "icon": { - "paths": [ - "M838.857 217.143q16 16 27.429 43.429t11.429 50.286v658.286q0 22.857-16 38.857t-38.857 16h-768q-22.857 0-38.857-16t-16-38.857v-914.286q0-22.857 16-38.857t38.857-16h512q22.857 0 50.286 11.429t43.429 27.429zM585.143 77.714v214.857h214.857q-5.714-16.571-12.571-23.429l-178.857-178.857q-6.857-6.857-23.429-12.571zM804.571 950.857v-585.143h-237.714q-22.857 0-38.857-16t-16-38.857v-237.714h-438.857v877.714h731.429z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file-o" - ], - "defaultCode": 61462, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "file-o", - "order": 96, - "id": 22, - "prevSize": 14, - "code": 58901 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 21 - }, - { - "icon": { - "paths": [ - "M512 310.857v256q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-36.571q0-8 5.143-13.143t13.143-5.143h128v-201.143q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM749.714 512q0-84.571-41.714-156t-113.143-113.143-156-41.714-156 41.714-113.143 113.143-41.714 156 41.714 156 113.143 113.143 156 41.714 156-41.714 113.143-113.143 41.714-156zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "clock-o" - ], - "defaultCode": 61463, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "clock-o", - "order": 28, - "id": 23, - "prevSize": 14, - "code": 58902 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 22 - }, - { - "icon": { - "paths": [ - "M863.429 603.429q0 2.857-0.571 4-36.571 153.143-153.143 248.286t-273.143 95.143q-83.429 0-161.429-31.429t-139.143-89.714l-73.714 73.714q-10.857 10.857-25.714 10.857t-25.714-10.857-10.857-25.714v-256q0-14.857 10.857-25.714t25.714-10.857h256q14.857 0 25.714 10.857t10.857 25.714-10.857 25.714l-78.286 78.286q40.571 37.714 92 58.286t106.857 20.571q76.571 0 142.857-37.143t106.286-102.286q6.286-9.714 30.286-66.857 4.571-13.143 17.143-13.143h109.714q7.429 0 12.857 5.429t5.429 12.857zM877.714 146.286v256q0 14.857-10.857 25.714t-25.714 10.857h-256q-14.857 0-25.714-10.857t-10.857-25.714 10.857-25.714l78.857-78.857q-84.571-78.286-199.429-78.286-76.571 0-142.857 37.143t-106.286 102.286q-6.286 9.714-30.286 66.857-4.571 13.143-17.143 13.143h-113.714q-7.429 0-12.857-5.429t-5.429-12.857v-4q37.143-153.143 154.286-248.286t274.286-95.143q83.429 0 162.286 31.714t140 89.429l74.286-73.714q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "refresh" - ], - "defaultCode": 61473, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "refresh", - "order": 1, - "id": 31, - "prevSize": 14, - "code": 58903 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 23 - }, - { - "icon": { - "paths": [ - "M219.429 676.571v36.571q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857zM219.429 530.286v36.571q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857zM219.429 384v36.571q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857zM877.714 676.571v36.571q0 7.429-5.429 12.857t-12.857 5.429h-548.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h548.571q7.429 0 12.857 5.429t5.429 12.857zM877.714 530.286v36.571q0 7.429-5.429 12.857t-12.857 5.429h-548.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h548.571q7.429 0 12.857 5.429t5.429 12.857zM877.714 384v36.571q0 7.429-5.429 12.857t-12.857 5.429h-548.571q-7.429 0-12.857-5.429t-5.429-12.857v-36.571q0-7.429 5.429-12.857t12.857-5.429h548.571q7.429 0 12.857 5.429t5.429 12.857zM950.857 786.286v-475.429q0-7.429-5.429-12.857t-12.857-5.429h-841.143q-7.429 0-12.857 5.429t-5.429 12.857v475.429q0 7.429 5.429 12.857t12.857 5.429h841.143q7.429 0 12.857-5.429t5.429-12.857zM1024 164.571v621.714q0 37.714-26.857 64.571t-64.571 26.857h-841.143q-37.714 0-64.571-26.857t-26.857-64.571v-621.714q0-37.714 26.857-64.571t64.571-26.857h841.143q37.714 0 64.571 26.857t26.857 64.571z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "list-alt" - ], - "defaultCode": 61474, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "list-alt", - "order": 90, - "id": 32, - "prevSize": 14, - "code": 58904 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 24 - }, - { - "icon": { - "paths": [ - "M182.857 438.857h292.571v-109.714q0-60.571-42.857-103.429t-103.429-42.857-103.429 42.857-42.857 103.429v109.714zM658.286 493.714v329.143q0 22.857-16 38.857t-38.857 16h-548.571q-22.857 0-38.857-16t-16-38.857v-329.143q0-22.857 16-38.857t38.857-16h18.286v-109.714q0-105.143 75.429-180.571t180.571-75.429 180.571 75.429 75.429 180.571v109.714h18.286q22.857 0 38.857 16t16 38.857z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "lock" - ], - "defaultCode": 61475, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "lock", - "order": 22, - "id": 33, - "prevSize": 14, - "code": 58905 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 25 - }, - { - "icon": { - "paths": [ - "M182.857 146.286q0 41.143-36.571 62.857v723.429q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-723.429q-36.571-21.714-36.571-62.857 0-30.286 21.429-51.714t51.714-21.429 51.714 21.429 21.429 51.714zM1024 182.857v436q0 14.286-7.143 22t-22.571 15.714q-122.857 66.286-210.857 66.286-34.857 0-70.571-12.571t-62-27.429-66-27.429-81.429-12.571q-109.714 0-265.143 83.429-9.714 5.143-18.857 5.143-14.857 0-25.714-10.857t-10.857-25.714v-424q0-18.286 17.714-31.429 12-8 45.143-24.571 134.857-68.571 240.571-68.571 61.143 0 114.286 16.571t125.143 50.286q21.714 10.857 50.286 10.857 30.857 0 67.143-12t62.857-26.857 50.286-26.857 31.143-12q14.857 0 25.714 10.857t10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "flag" - ], - "defaultCode": 61476, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "flag", - "order": 51, - "id": 34, - "prevSize": 14, - "code": 58906 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 26 - }, - { - "icon": { - "paths": [ - "M438.857 201.143v621.714q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-190.286-190.286h-149.714q-14.857 0-25.714-10.857t-10.857-25.714v-219.429q0-14.857 10.857-25.714t25.714-10.857h149.714l190.286-190.286q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714z" - ], - "width": 439, - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-off" - ], - "defaultCode": 61478, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "volume-off", - "order": 93, - "id": 36, - "prevSize": 14, - "code": 58907 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 27 - }, - { - "icon": { - "paths": [ - "M438.857 201.143v621.714q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-190.286-190.286h-149.714q-14.857 0-25.714-10.857t-10.857-25.714v-219.429q0-14.857 10.857-25.714t25.714-10.857h149.714l190.286-190.286q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714zM658.286 512q0 43.429-24.286 80.857t-64.286 53.429q-5.714 2.857-14.286 2.857-14.857 0-25.714-10.571t-10.857-26q0-12 6.857-20.286t16.571-14.286 19.429-13.143 16.571-20.286 6.857-32.571-6.857-32.571-16.571-20.286-19.429-13.143-16.571-14.286-6.857-20.286q0-15.429 10.857-26t25.714-10.571q8.571 0 14.286 2.857 40 15.429 64.286 53.143t24.286 81.143z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-down" - ], - "defaultCode": 61479, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "volume-down", - "order": 94, - "id": 37, - "prevSize": 14, - "code": 58908 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 28 - }, - { - "icon": { - "paths": [ - "M438.857 201.143v621.714q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-190.286-190.286h-149.714q-14.857 0-25.714-10.857t-10.857-25.714v-219.429q0-14.857 10.857-25.714t25.714-10.857h149.714l190.286-190.286q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714zM658.286 512q0 43.429-24.286 80.857t-64.286 53.429q-5.714 2.857-14.286 2.857-14.857 0-25.714-10.571t-10.857-26q0-12 6.857-20.286t16.571-14.286 19.429-13.143 16.571-20.286 6.857-32.571-6.857-32.571-16.571-20.286-19.429-13.143-16.571-14.286-6.857-20.286q0-15.429 10.857-26t25.714-10.571q8.571 0 14.286 2.857 40 15.429 64.286 53.143t24.286 81.143zM804.571 512q0 87.429-48.571 161.429t-128.571 107.714q-7.429 2.857-14.286 2.857-15.429 0-26.286-10.857t-10.857-25.714q0-22.286 22.286-33.714 32-16.571 43.429-25.143 42.286-30.857 66-77.429t23.714-99.143-23.714-99.143-66-77.429q-11.429-8.571-43.429-25.143-22.286-11.429-22.286-33.714 0-14.857 10.857-25.714t25.714-10.857q7.429 0 14.857 2.857 80 33.714 128.571 107.714t48.571 161.429zM950.857 512q0 131.429-72.571 241.429t-193.143 162q-7.429 2.857-14.857 2.857-14.857 0-25.714-10.857t-10.857-25.714q0-20.571 22.286-33.714 4-2.286 12.857-6t12.857-6q26.286-14.286 46.857-29.143 70.286-52 109.714-129.714t39.429-165.143-39.429-165.143-109.714-129.714q-20.571-14.857-46.857-29.143-4-2.286-12.857-6t-12.857-6q-22.286-13.143-22.286-33.714 0-14.857 10.857-25.714t25.714-10.857q7.429 0 14.857 2.857 120.571 52 193.143 162t72.571 241.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "volume-up" - ], - "defaultCode": 61480, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "volume-up", - "order": 95, - "id": 38, - "prevSize": 14, - "code": 58909 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 29 - }, - { - "icon": { - "paths": [ - "M936.571 273.143q22.857 32.571 10.286 73.714l-157.143 517.714q-10.857 36.571-43.714 61.429t-70 24.857h-527.429q-44 0-84.857-30.571t-56.857-75.143q-13.714-38.286-1.143-72.571 0-2.286 1.714-15.429t2.286-21.143q0.571-4.571-1.714-12.286t-1.714-11.143q1.143-6.286 4.571-12t9.429-13.429 9.429-13.429q13.143-21.714 25.714-52.286t17.143-52.286q1.714-5.714 0.286-17.143t-0.286-16q1.714-6.286 9.714-16t9.714-13.143q12-20.571 24-52.571t14.286-51.429q0.571-5.143-1.429-18.286t0.286-16q2.286-7.429 12.571-17.429t12.571-12.857q10.857-14.857 24.286-48.286t15.714-55.143q0.571-4.571-1.714-14.571t-1.143-15.143q1.143-4.571 5.143-10.286t10.286-13.143 9.714-12q4.571-6.857 9.429-17.429t8.571-20 9.143-20.571 11.143-18.286 15.143-13.429 20.571-6.571 27.143 3.143l-0.571 1.714q21.714-5.143 29.143-5.143h434.857q42.286 0 65.143 32t10.286 74.286l-156.571 517.714q-20.571 68-40.857 87.714t-73.429 19.714h-496.571q-15.429 0-21.714 8.571-6.286 9.143-0.571 24.571 13.714 40 82.286 40h527.429q16.571 0 32-8.857t20-23.714l171.429-564q4-12.571 2.857-32.571 21.714 8.571 33.714 24.571zM328.571 274.286q-2.286 7.429 1.143 12.857t11.429 5.429h347.429q7.429 0 14.571-5.429t9.429-12.857l12-36.571q2.286-7.429-1.143-12.857t-11.429-5.429h-347.429q-7.429 0-14.571 5.429t-9.429 12.857zM281.143 420.571q-2.286 7.429 1.143 12.857t11.429 5.429h347.429q7.429 0 14.571-5.429t9.429-12.857l12-36.571q2.286-7.429-1.143-12.857t-11.429-5.429h-347.429q-7.429 0-14.571 5.429t-9.429 12.857z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "book" - ], - "defaultCode": 61485, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "book", - "order": 64, - "id": 43, - "prevSize": 14, - "code": 58910 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 30 - }, - { - "icon": { - "paths": [ - "M219.429 877.714h512v-146.286h-512v146.286zM219.429 512h512v-219.429h-91.429q-22.857 0-38.857-16t-16-38.857v-91.429h-365.714v365.714zM877.714 548.571q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857-10.857 25.714 10.857 25.714 25.714 10.857 25.714-10.857 10.857-25.714zM950.857 548.571v237.714q0 7.429-5.429 12.857t-12.857 5.429h-128v91.429q0 22.857-16 38.857t-38.857 16h-548.571q-22.857 0-38.857-16t-16-38.857v-91.429h-128q-7.429 0-12.857-5.429t-5.429-12.857v-237.714q0-45.143 32.286-77.429t77.429-32.286h36.571v-310.857q0-22.857 16-38.857t38.857-16h384q22.857 0 50.286 11.429t43.429 27.429l86.857 86.857q16 16 27.429 43.429t11.429 50.286v146.286h36.571q45.143 0 77.429 32.286t32.286 77.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "print" - ], - "defaultCode": 61487, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "print", - "order": 75, - "id": 45, - "prevSize": 14, - "code": 58911 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 31 - }, - { - "icon": { - "paths": [ - "M548.571 384q68 0 116.286 48.286t48.286 116.286-48.286 116.286-116.286 48.286-116.286-48.286-48.286-116.286 48.286-116.286 116.286-48.286zM950.857 146.286q60.571 0 103.429 42.857t42.857 103.429v512q0 60.571-42.857 103.429t-103.429 42.857h-804.571q-60.571 0-103.429-42.857t-42.857-103.429v-512q0-60.571 42.857-103.429t103.429-42.857h128l29.143-77.714q10.857-28 39.714-48.286t59.143-20.286h292.571q30.286 0 59.143 20.286t39.714 48.286l29.143 77.714h128zM548.571 804.571q105.714 0 180.857-75.143t75.143-180.857-75.143-180.857-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143z" - ], - "width": 1097, - "attrs": [], - "isMulticolor": false, - "tags": [ - "camera" - ], - "defaultCode": 61488, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "camera", - "order": 47, - "id": 46, - "prevSize": 14, - "code": 58912 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 32 - }, - { - "icon": { - "paths": [ - "M1024 201.143v621.714q0 24-22.286 33.714-7.429 2.857-14.286 2.857-15.429 0-25.714-10.857l-230.286-230.286v94.857q0 68-48.286 116.286t-116.286 48.286h-402.286q-68 0-116.286-48.286t-48.286-116.286v-402.286q0-68 48.286-116.286t116.286-48.286h402.286q68 0 116.286 48.286t48.286 116.286v94.286l230.286-229.714q10.286-10.857 25.714-10.857 6.857 0 14.286 2.857 22.286 9.714 22.286 33.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "video-camera" - ], - "defaultCode": 61501, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "video-camera", - "order": 48, - "id": 59, - "prevSize": 14, - "code": 58913 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 33 - }, - { - "icon": { - "paths": [ - "M207.429 877.714l52-52-134.286-134.286-52 52v61.143h73.143v73.143h61.143zM506.286 347.429q0-12.571-12.571-12.571-5.714 0-9.714 4l-309.714 309.714q-4 4-4 9.714 0 12.571 12.571 12.571 5.714 0 9.714-4l309.714-309.714q4-4 4-9.714zM475.429 237.714l237.714 237.714-475.429 475.429h-237.714v-237.714zM865.714 292.571q0 30.286-21.143 51.429l-94.857 94.857-237.714-237.714 94.857-94.286q20.571-21.714 51.429-21.714 30.286 0 52 21.714l134.286 133.714q21.143 22.286 21.143 52z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pencil" - ], - "defaultCode": 61504, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "pencil", - "order": 9, - "id": 61, - "prevSize": 14, - "code": 58914 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 34 - }, - { - "icon": { - "paths": [ - "M507.429 676.571l66.286-66.286-86.857-86.857-66.286 66.286v32h54.857v54.857h32zM758.857 265.143q-9.143-9.143-18.857 0.571l-200 200q-9.714 9.714-0.571 18.857t18.857-0.571l200-200q9.714-9.714 0.571-18.857zM804.571 604.571v108.571q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h475.429q36 0 66.857 14.286 8.571 4 10.286 13.143 1.714 9.714-5.143 16.571l-28 28q-8 8-18.286 4.571-13.143-3.429-25.714-3.429h-475.429q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-72q0-7.429 5.143-12.571l36.571-36.571q8.571-8.571 20-4t11.429 16.571zM749.714 182.857l164.571 164.571-384 384h-164.571v-164.571zM1003.429 258.286l-52.571 52.571-164.571-164.571 52.571-52.571q16-16 38.857-16t38.857 16l86.857 86.857q16 16 16 38.857t-16 38.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "edit", - "pencil-square-o" - ], - "defaultCode": 61508, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "edit, pencil-square-o", - "order": 35, - "id": 65, - "prevSize": 14, - "code": 58915 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 35 - }, - { - "icon": { - "paths": [ - "M804.571 565.143v148q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h145.714q7.429 0 12.857 5.429t5.429 12.857q0 15.429-14.857 18.286-44 14.857-76 34.286-5.714 2.286-9.143 2.286h-64q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-122.286q0-10.857 10.286-16.571 16-7.429 30.857-21.143 9.143-9.143 20-4.571 12 5.143 12 16.571zM940 281.714l-219.429 219.429q-10.286 10.857-25.714 10.857-6.857 0-14.286-2.857-22.286-9.714-22.286-33.714v-109.714h-91.429q-184.571 0-250.286 74.857-68 78.286-42.286 270.286 1.714 13.143-11.429 19.429-4.571 1.143-6.857 1.143-9.143 0-14.857-7.429-5.714-8-12-17.714t-22.571-39.143-28.286-56.857-22-65.143-10-69.714q0-28 2-52t8-51.429 16-50.286 26.857-46.571 39.143-42.286 54-35.143 71.143-27.714 91.143-17.429 112.286-6.286h91.429v-109.714q0-24 22.286-33.714 7.429-2.857 14.286-2.857 14.857 0 25.714 10.857l219.429 219.429q10.857 10.857 10.857 25.714t-10.857 25.714z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "share-square-o" - ], - "defaultCode": 61509, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "share-square-o", - "order": 99, - "id": 66, - "prevSize": 14, - "code": 58916 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 36 - }, - { - "icon": { - "paths": [ - "M804.571 531.429v181.714q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h475.429q36 0 66.857 14.286 8.571 4 10.286 13.143 1.714 9.714-5.143 16.571l-28 28q-5.714 5.714-13.143 5.714-1.714 0-5.143-1.143-13.143-3.429-25.714-3.429h-475.429q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-145.143q0-7.429 5.143-12.571l36.571-36.571q5.714-5.714 13.143-5.714 3.429 0 6.857 1.714 11.429 4.571 11.429 16.571zM936.571 252l-465.143 465.143q-13.714 13.714-32.571 13.714t-32.571-13.714l-245.714-245.714q-13.714-13.714-13.714-32.571t13.714-32.571l62.857-62.857q13.714-13.714 32.571-13.714t32.571 13.714l150.286 150.286 369.714-369.714q13.714-13.714 32.571-13.714t32.571 13.714l62.857 62.857q13.714 13.714 13.714 32.571t-13.714 32.571z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "check-square-o" - ], - "defaultCode": 61510, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "check-square-o", - "order": 24, - "id": 67, - "prevSize": 14, - "code": 58917 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 37 - }, - { - "icon": { - "paths": [ - "M998.286 80.571q10.857-10.857 18.286-7.429t7.429 18.286v841.143q0 14.857-7.429 18.286t-18.286-7.429l-405.714-405.714q-5.143-5.143-7.429-10.857v405.714q0 14.857-7.429 18.286t-18.286-7.429l-405.714-405.714q-5.143-5.143-7.429-10.857v387.429q0 14.857-10.857 25.714t-25.714 10.857h-73.143q-14.857 0-25.714-10.857t-10.857-25.714v-804.571q0-14.857 10.857-25.714t25.714-10.857h73.143q14.857 0 25.714 10.857t10.857 25.714v387.429q2.286-6.286 7.429-10.857l405.714-405.714q10.857-10.857 18.286-7.429t7.429 18.286v405.714q2.286-6.286 7.429-10.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "fast-backward" - ], - "defaultCode": 61513, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "fast-backward", - "order": 81, - "id": 70, - "prevSize": 14, - "code": 58918 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 38 - }, - { - "icon": { - "paths": [ - "M790.857 529.714l-758.857 421.714q-13.143 7.429-22.571 1.714t-9.429-20.571v-841.143q0-14.857 9.429-20.571t22.571 1.714l758.857 421.714q13.143 7.429 13.143 17.714t-13.143 17.714z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "play" - ], - "defaultCode": 61515, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "play", - "order": 79, - "id": 72, - "prevSize": 14, - "code": 58919 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 39 - }, - { - "icon": { - "paths": [ - "M877.714 109.714v804.571q0 14.857-10.857 25.714t-25.714 10.857h-292.571q-14.857 0-25.714-10.857t-10.857-25.714v-804.571q0-14.857 10.857-25.714t25.714-10.857h292.571q14.857 0 25.714 10.857t10.857 25.714zM365.714 109.714v804.571q0 14.857-10.857 25.714t-25.714 10.857h-292.571q-14.857 0-25.714-10.857t-10.857-25.714v-804.571q0-14.857 10.857-25.714t25.714-10.857h292.571q14.857 0 25.714 10.857t10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "pause" - ], - "defaultCode": 61516, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "pause", - "order": 91, - "id": 73, - "prevSize": 14, - "code": 58920 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 40 - }, - { - "icon": { - "paths": [ - "M877.714 109.714v804.571q0 14.857-10.857 25.714t-25.714 10.857h-804.571q-14.857 0-25.714-10.857t-10.857-25.714v-804.571q0-14.857 10.857-25.714t25.714-10.857h804.571q14.857 0 25.714 10.857t10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "stop" - ], - "defaultCode": 61517, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "stop", - "order": 80, - "id": 74, - "prevSize": 14, - "code": 58921 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 41 - }, - { - "icon": { - "paths": [ - "M25.714 943.429q-10.857 10.857-18.286 7.429t-7.429-18.286v-841.143q0-14.857 7.429-18.286t18.286 7.429l405.714 405.714q4.571 4.571 7.429 10.857v-405.714q0-14.857 7.429-18.286t18.286 7.429l405.714 405.714q4.571 4.571 7.429 10.857v-387.429q0-14.857 10.857-25.714t25.714-10.857h73.143q14.857 0 25.714 10.857t10.857 25.714v804.571q0 14.857-10.857 25.714t-25.714 10.857h-73.143q-14.857 0-25.714-10.857t-10.857-25.714v-387.429q-2.857 5.714-7.429 10.857l-405.714 405.714q-10.857 10.857-18.286 7.429t-7.429-18.286v-405.714q-2.857 5.714-7.429 10.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "fast-forward" - ], - "defaultCode": 61520, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "fast-forward", - "order": 82, - "id": 76, - "prevSize": 14, - "code": 58922 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 42 - }, - { - "icon": { - "paths": [ - "M669.143 172l-303.429 303.429 303.429 303.429q10.857 10.857 10.857 25.714t-10.857 25.714l-94.857 94.857q-10.857 10.857-25.714 10.857t-25.714-10.857l-424-424q-10.857-10.857-10.857-25.714t10.857-25.714l424-424q10.857-10.857 25.714-10.857t25.714 10.857l94.857 94.857q10.857 10.857 10.857 25.714t-10.857 25.714z" - ], - "width": 731, - "attrs": [], - "isMulticolor": false, - "tags": [ - "chevron-left" - ], - "defaultCode": 61523, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "chevron-left", - "order": 31, - "id": 79, - "prevSize": 14, - "code": 58923 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 43 - }, - { - "icon": { - "paths": [ - "M632.571 501.143l-424 424q-10.857 10.857-25.714 10.857t-25.714-10.857l-94.857-94.857q-10.857-10.857-10.857-25.714t10.857-25.714l303.429-303.429-303.429-303.429q-10.857-10.857-10.857-25.714t10.857-25.714l94.857-94.857q10.857-10.857 25.714-10.857t25.714 10.857l424 424q10.857 10.857 10.857 25.714t-10.857 25.714z" - ], - "width": 731, - "attrs": [], - "isMulticolor": false, - "tags": [ - "chevron-right" - ], - "defaultCode": 61524, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "chevron-right", - "order": 32, - "id": 80, - "prevSize": 14, - "code": 58924 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 44 - }, - { - "icon": { - "paths": [ - "M656.571 641.143q0-14.857-10.857-25.714l-103.429-103.429 103.429-103.429q10.857-10.857 10.857-25.714 0-15.429-10.857-26.286l-51.429-51.429q-10.857-10.857-26.286-10.857-14.857 0-25.714 10.857l-103.429 103.429-103.429-103.429q-10.857-10.857-25.714-10.857-15.429 0-26.286 10.857l-51.429 51.429q-10.857 10.857-10.857 26.286 0 14.857 10.857 25.714l103.429 103.429-103.429 103.429q-10.857 10.857-10.857 25.714 0 15.429 10.857 26.286l51.429 51.429q10.857 10.857 26.286 10.857 14.857 0 25.714-10.857l103.429-103.429 103.429 103.429q10.857 10.857 25.714 10.857 15.429 0 26.286-10.857l51.429-51.429q10.857-10.857 10.857-26.286zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "times-circle" - ], - "defaultCode": 61527, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "times-circle", - "order": 84, - "id": 83, - "prevSize": 14, - "code": 58925 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 45 - }, - { - "icon": { - "paths": [ - "M512 786.286v-109.714q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM658.286 402.286q0-50.286-31.714-93.143t-79.143-66.286-97.143-23.429q-138.857 0-212 121.714-8.571 13.714 4.571 24l75.429 57.143q4 3.429 10.857 3.429 9.143 0 14.286-6.857 30.286-38.857 49.143-52.571 19.429-13.714 49.143-13.714 27.429 0 48.857 14.857t21.429 33.714q0 21.714-11.429 34.857t-38.857 25.714q-36 16-66 49.429t-30 71.714v20.571q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143q0-10.857 12.286-28.286t31.143-28.286q18.286-10.286 28-16.286t26.286-20 25.429-27.429 16-34.571 7.143-46.286zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "question-circle" - ], - "defaultCode": 61529, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "question-circle", - "order": 34, - "id": 85, - "prevSize": 14, - "code": 58926 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 46 - }, - { - "icon": { - "paths": [ - "M585.143 786.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-54.857v-292.571q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h54.857v182.857h-54.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h256q8 0 13.143-5.143t5.143-13.143zM512 274.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "info-circle" - ], - "defaultCode": 61530, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "info-circle", - "order": 40, - "id": 86, - "prevSize": 14, - "code": 58927 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 47 - }, - { - "icon": { - "paths": [ - "M626.857 616.571l-83.429 83.429q-5.714 5.714-13.143 5.714t-13.143-5.714l-78.286-78.286-78.286 78.286q-5.714 5.714-13.143 5.714t-13.143-5.714l-83.429-83.429q-5.714-5.714-5.714-13.143t5.714-13.143l78.286-78.286-78.286-78.286q-5.714-5.714-5.714-13.143t5.714-13.143l83.429-83.429q5.714-5.714 13.143-5.714t13.143 5.714l78.286 78.286 78.286-78.286q5.714-5.714 13.143-5.714t13.143 5.714l83.429 83.429q5.714 5.714 5.714 13.143t-5.714 13.143l-78.286 78.286 78.286 78.286q5.714 5.714 5.714 13.143t-5.714 13.143zM749.714 512q0-84.571-41.714-156t-113.143-113.143-156-41.714-156 41.714-113.143 113.143-41.714 156 41.714 156 113.143 113.143 156 41.714 156-41.714 113.143-113.143 41.714-156zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "times-circle-o" - ], - "defaultCode": 61532, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "times-circle-o", - "order": 8, - "id": 88, - "prevSize": 14, - "code": 58928 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 48 - }, - { - "icon": { - "paths": [ - "M920.571 554.857q0 29.143-21.143 51.429l-42.857 42.857q-21.714 21.714-52 21.714-30.857 0-51.429-21.714l-168-167.429v402.286q0 29.714-21.429 48.286t-51.714 18.571h-73.143q-30.286 0-51.714-18.571t-21.429-48.286v-402.286l-168 167.429q-20.571 21.714-51.429 21.714t-51.429-21.714l-42.857-42.857q-21.714-21.714-21.714-51.429 0-30.286 21.714-52l372-372q20-21.143 51.429-21.143 30.857 0 52 21.143l372 372q21.143 22.286 21.143 52z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-up" - ], - "defaultCode": 61538, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "arrow-up", - "order": 3, - "id": 93, - "prevSize": 14, - "code": 58929 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 49 - }, - { - "icon": { - "paths": [ - "M920.571 475.429q0 30.286-21.143 51.429l-372 372.571q-22.286 21.143-52 21.143-30.286 0-51.429-21.143l-372-372.571q-21.714-20.571-21.714-51.429 0-30.286 21.714-52l42.286-42.857q22.286-21.143 52-21.143 30.286 0 51.429 21.143l168 168v-402.286q0-29.714 21.714-51.429t51.429-21.714h73.143q29.714 0 51.429 21.714t21.714 51.429v402.286l168-168q21.143-21.143 51.429-21.143 29.714 0 52 21.143l42.857 42.857q21.143 22.286 21.143 52z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-down" - ], - "defaultCode": 61539, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "arrow-down", - "order": 4, - "id": 94, - "prevSize": 14, - "code": 58930 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 50 - }, - { - "icon": { - "paths": [ - "M438.857 548.571v256q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-82.286-82.286-189.714 189.714q-5.714 5.714-13.143 5.714t-13.143-5.714l-65.143-65.143q-5.714-5.714-5.714-13.143t5.714-13.143l189.714-189.714-82.286-82.286q-10.857-10.857-10.857-25.714t10.857-25.714 25.714-10.857h256q14.857 0 25.714 10.857t10.857 25.714zM870.286 164.571q0 7.429-5.714 13.143l-189.714 189.714 82.286 82.286q10.857 10.857 10.857 25.714t-10.857 25.714-25.714 10.857h-256q-14.857 0-25.714-10.857t-10.857-25.714v-256q0-14.857 10.857-25.714t25.714-10.857 25.714 10.857l82.286 82.286 189.714-189.714q5.714-5.714 13.143-5.714t13.143 5.714l65.143 65.143q5.714 5.714 5.714 13.143z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "compress" - ], - "defaultCode": 61542, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "compress", - "order": 92, - "id": 97, - "prevSize": 14, - "code": 58931 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 51 - }, - { - "icon": { - "paths": [ - "M804.571 420.571v109.714q0 22.857-16 38.857t-38.857 16h-237.714v237.714q0 22.857-16 38.857t-38.857 16h-109.714q-22.857 0-38.857-16t-16-38.857v-237.714h-237.714q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h237.714v-237.714q0-22.857 16-38.857t38.857-16h109.714q22.857 0 38.857 16t16 38.857v237.714h237.714q22.857 0 38.857 16t16 38.857z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "plus" - ], - "defaultCode": 61543, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "plus", - "order": 7, - "id": 98, - "prevSize": 14, - "code": 58932 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 52 - }, - { - "icon": { - "paths": [ - "M804.571 420.571v109.714q0 22.857-16 38.857t-38.857 16h-694.857q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h694.857q22.857 0 38.857 16t16 38.857z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "minus" - ], - "defaultCode": 61544, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "minus", - "order": 50, - "id": 99, - "prevSize": 14, - "code": 58933 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 53 - }, - { - "icon": { - "paths": [ - "M438.857 73.143q119.429 0 220.286 58.857t159.714 159.714 58.857 220.286-58.857 220.286-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857zM512 785.714v-108.571q0-8-5.143-13.429t-12.571-5.429h-109.714q-7.429 0-13.143 5.714t-5.714 13.143v108.571q0 7.429 5.714 13.143t13.143 5.714h109.714q7.429 0 12.571-5.429t5.143-13.429zM510.857 589.143l10.286-354.857q0-6.857-5.714-10.286-5.714-4.571-13.714-4.571h-125.714q-8 0-13.714 4.571-5.714 3.429-5.714 10.286l9.714 354.857q0 5.714 5.714 10t13.714 4.286h105.714q8 0 13.429-4.286t6-10z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "exclamation-circle" - ], - "defaultCode": 61546, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "exclamation-circle", - "order": 30, - "id": 101, - "prevSize": 14, - "code": 58934 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 54 - }, - { - "icon": { - "paths": [ - "M950.857 548.571q-86.857-134.857-217.714-201.714 34.857 59.429 34.857 128.571 0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857q0-69.143 34.857-128.571-130.857 66.857-217.714 201.714 76 117.143 190.571 186.571t248.286 69.429 248.286-69.429 190.571-186.571zM539.429 329.143q0-11.429-8-19.429t-19.429-8q-71.429 0-122.571 51.143t-51.143 122.571q0 11.429 8 19.429t19.429 8 19.429-8 8-19.429q0-49.143 34.857-84t84-34.857q11.429 0 19.429-8t8-19.429zM1024 548.571q0 19.429-11.429 39.429-80 131.429-215.143 210.571t-285.429 79.143-285.429-79.429-215.143-210.286q-11.429-20-11.429-39.429t11.429-39.429q80-130.857 215.143-210.286t285.429-79.429 285.429 79.429 215.143 210.286q11.429 20 11.429 39.429z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye" - ], - "defaultCode": 61550, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "eye", - "order": 13, - "id": 105, - "prevSize": 14, - "code": 58935 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 55 - }, - { - "icon": { - "paths": [ - "M317.143 762.857l44.571-80.571q-49.714-36-77.714-90.857t-28-116q0-69.143 34.857-128.571-130.857 66.857-217.714 201.714 95.429 147.429 244 214.286zM539.429 329.143q0-11.429-8-19.429t-19.429-8q-71.429 0-122.571 51.143t-51.143 122.571q0 11.429 8 19.429t19.429 8 19.429-8 8-19.429q0-49.143 34.857-84t84-34.857q11.429 0 19.429-8t8-19.429zM746.857 220q0 4-0.571 5.143-60 107.429-180 323.429t-180.571 324l-28 50.857q-5.714 9.143-16 9.143-6.857 0-76.571-40-9.143-5.714-9.143-16 0-6.857 25.143-49.714-81.714-37.143-150.571-98.857t-119.143-140q-11.429-17.714-11.429-39.429t11.429-39.429q87.429-134.286 217.143-212t283.429-77.714q50.857 0 102.857 9.714l30.857-55.429q5.714-9.143 16-9.143 2.857 0 10.286 3.429t17.714 8.857 18.857 10.571 18 10.571 11.143 6.571q9.143 5.714 9.143 15.429zM768 475.429q0 79.429-45.143 144.857t-119.429 94l160-286.857q4.571 25.714 4.571 48zM1024 548.571q0 20-11.429 39.429-22.286 36.571-62.286 82.857-85.714 98.286-198.571 152.571t-239.714 54.286l42.286-75.429q121.143-10.286 224.286-78.286t172.286-175.429q-65.714-102.286-161.143-168l36-64q54.286 36.571 104.286 87.429t82.571 105.143q11.429 19.429 11.429 39.429z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "eye-slash" - ], - "defaultCode": 61552, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "eye-slash", - "order": 14, - "id": 106, - "prevSize": 14, - "code": 58936 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 56 - }, - { - "icon": { - "paths": [ - "M585.143 785.714v-108.571q0-8-5.429-13.429t-12.857-5.429h-109.714q-7.429 0-12.857 5.429t-5.429 13.429v108.571q0 8 5.429 13.429t12.857 5.429h109.714q7.429 0 12.857-5.429t5.429-13.429zM584 572l10.286-262.286q0-6.857-5.714-10.857-7.429-6.286-13.714-6.286h-125.714q-6.286 0-13.714 6.286-5.714 4-5.714 12l9.714 261.143q0 5.714 5.714 9.429t13.714 3.714h105.714q8 0 13.429-3.714t6-9.429zM576 38.286l438.857 804.571q20 36-1.143 72-9.714 16.571-26.571 26.286t-36.286 9.714h-877.714q-19.429 0-36.286-9.714t-26.571-26.286q-21.143-36-1.143-72l438.857-804.571q9.714-17.714 26.857-28t37.143-10.286 37.143 10.286 26.857 28z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "exclamation-triangle", - "warning" - ], - "defaultCode": 61553, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "exclamation-triangle, warning", - "order": 17, - "id": 107, - "prevSize": 14, - "code": 58937 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 57 - }, - { - "icon": { - "paths": [ - "M73.143 950.857h164.571v-164.571h-164.571v164.571zM274.286 950.857h182.857v-164.571h-182.857v164.571zM73.143 749.714h164.571v-182.857h-164.571v182.857zM274.286 749.714h182.857v-182.857h-182.857v182.857zM73.143 530.286h164.571v-164.571h-164.571v164.571zM493.714 950.857h182.857v-164.571h-182.857v164.571zM274.286 530.286h182.857v-164.571h-182.857v164.571zM713.143 950.857h164.571v-164.571h-164.571v164.571zM493.714 749.714h182.857v-182.857h-182.857v182.857zM292.571 256v-164.571q0-7.429-5.429-12.857t-12.857-5.429h-36.571q-7.429 0-12.857 5.429t-5.429 12.857v164.571q0 7.429 5.429 12.857t12.857 5.429h36.571q7.429 0 12.857-5.429t5.429-12.857zM713.143 749.714h164.571v-182.857h-164.571v182.857zM493.714 530.286h182.857v-164.571h-182.857v164.571zM713.143 530.286h164.571v-164.571h-164.571v164.571zM731.429 256v-164.571q0-7.429-5.429-12.857t-12.857-5.429h-36.571q-7.429 0-12.857 5.429t-5.429 12.857v164.571q0 7.429 5.429 12.857t12.857 5.429h36.571q7.429 0 12.857-5.429t5.429-12.857zM950.857 219.429v731.429q0 29.714-21.714 51.429t-51.429 21.714h-804.571q-29.714 0-51.429-21.714t-21.714-51.429v-731.429q0-29.714 21.714-51.429t51.429-21.714h73.143v-54.857q0-37.714 26.857-64.571t64.571-26.857h36.571q37.714 0 64.571 26.857t26.857 64.571v54.857h219.429v-54.857q0-37.714 26.857-64.571t64.571-26.857h36.571q37.714 0 64.571 26.857t26.857 64.571v54.857h73.143q29.714 0 51.429 21.714t21.714 51.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "calendar" - ], - "defaultCode": 61555, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "calendar", - "order": 62, - "id": 109, - "prevSize": 14, - "code": 58938 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 58 - }, - { - "icon": { - "paths": [ - "M1024 512q0 99.429-68.571 183.714t-186.286 133.143-257.143 48.857q-40 0-82.857-4.571-113.143 100-262.857 138.286-28 8-65.143 12.571-9.714 1.143-17.429-5.143t-10-16.571v-0.571q-1.714-2.286-0.286-6.857t1.143-5.714 2.571-5.429l3.429-5.143t4-4.857 4.571-5.143q4-4.571 17.714-19.714t19.714-21.714 17.714-22.571 18.571-29.143 15.429-33.714 14.857-43.429q-89.714-50.857-141.429-125.714t-51.714-160.571q0-74.286 40.571-142t109.143-116.857 163.429-78 198.857-28.857q139.429 0 257.143 48.857t186.286 133.143 68.571 183.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "comment" - ], - "defaultCode": 61557, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "comment", - "order": 70, - "id": 111, - "prevSize": 14, - "code": 58939 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 59 - }, - { - "icon": { - "paths": [ - "M365.714 877.714q0 29.714-21.714 51.429t-51.429 21.714-51.429-21.714-21.714-51.429 21.714-51.429 51.429-21.714 51.429 21.714 21.714 51.429zM877.714 877.714q0 29.714-21.714 51.429t-51.429 21.714-51.429-21.714-21.714-51.429 21.714-51.429 51.429-21.714 51.429 21.714 21.714 51.429zM950.857 256v292.571q0 13.714-9.429 24.286t-23.143 12.286l-596.571 69.714q7.429 34.286 7.429 40 0 9.143-13.714 36.571h525.714q14.857 0 25.714 10.857t10.857 25.714-10.857 25.714-25.714 10.857h-585.143q-14.857 0-25.714-10.857t-10.857-25.714q0-6.286 4.571-18t9.143-20.571 12.286-22.857 8.857-16.857l-101.143-470.286h-116.571q-14.857 0-25.714-10.857t-10.857-25.714 10.857-25.714 25.714-10.857h146.286q9.143 0 16.286 3.714t11.143 8.857 7.429 14 4.571 14.857 3.143 16.857 2.571 14.857h686.286q14.857 0 25.714 10.857t10.857 25.714z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "shopping-cart" - ], - "defaultCode": 61562, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "shopping-cart", - "order": 74, - "id": 116, - "prevSize": 14, - "code": 58940 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 60 - }, - { - "icon": { - "paths": [ - "M731.429 348.571q-32 14.286-69.143 19.429 38.857-22.857 53.143-66.857-37.143 21.714-76.571 29.143-34.857-37.714-87.429-37.714-49.714 0-84.857 35.143t-35.143 84.857q0 16.571 2.857 27.429-73.714-4-138.286-37.143t-109.714-88.571q-16.571 28.571-16.571 60.571 0 65.143 52 100-26.857-0.571-57.143-14.857v1.143q0 42.857 28.571 76.286t70.286 41.429q-16.571 4.571-29.143 4.571-7.429 0-22.286-2.286 12 36 42.571 59.429t69.429 24q-66.286 51.429-149.143 51.429-14.857 0-28.571-1.714 84.571 53.714 184 53.714 64 0 120-20.286t96-54.286 68.857-78.286 42.857-92.571 14-96.286q0-10.286-0.571-15.429 36-25.714 60-62.286zM877.714 237.714v548.571q0 68-48.286 116.286t-116.286 48.286h-548.571q-68 0-116.286-48.286t-48.286-116.286v-548.571q0-68 48.286-116.286t116.286-48.286h548.571q68 0 116.286 48.286t48.286 116.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "twitter-square" - ], - "defaultCode": 61569, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "twitter-square", - "order": 58, - "id": 122, - "prevSize": 14, - "code": 58941 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 61 - }, - { - "icon": { - "paths": [ - "M713.143 73.143q68 0 116.286 48.286t48.286 116.286v548.571q0 68-48.286 116.286t-116.286 48.286h-107.429v-340h113.714l17.143-132.571h-130.857v-84.571q0-32 13.429-48t52.286-16l69.714-0.571v-118.286q-36-5.143-101.714-5.143-77.714 0-124.286 45.714t-46.571 129.143v97.714h-114.286v132.571h114.286v340h-304q-68 0-116.286-48.286t-48.286-116.286v-548.571q0-68 48.286-116.286t116.286-48.286h548.571z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "facebook-square" - ], - "defaultCode": 61570, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "facebook-square", - "order": 67, - "id": 123, - "prevSize": 14, - "code": 58942 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 62 - }, - { - "icon": { - "paths": [ - "M804.571 438.857q0 79.429-53.714 146.857t-146.571 106.571-202 39.143q-49.143 0-100.571-9.143-70.857 50.286-158.857 73.143-20.571 5.143-49.143 9.143h-1.714q-6.286 0-11.714-4.571t-6.571-12q-0.571-1.714-0.571-3.714t0.286-3.714 1.143-3.429l1.429-2.857t2-3.143 2.286-2.857 2.571-2.857 2.286-2.571q2.857-3.429 13.143-14.286t14.857-16.857 12.857-16.571 14.286-22 11.714-25.143q-70.857-41.143-111.429-101.143t-40.571-128q0-79.429 53.714-146.857t146.571-106.571 202-39.143 202 39.143 146.571 106.571 53.714 146.857zM1024 585.143q0 68.571-40.571 128.286t-111.429 100.857q5.714 13.714 11.714 25.143t14.286 22 12.857 16.571 14.857 16.857 13.143 14.286q0.571 0.571 2.286 2.571t2.571 2.857 2.286 2.857 2 3.143l1.429 2.857t1.143 3.429 0.286 3.714-0.571 3.714q-1.714 8-7.429 12.571t-12.571 4q-28.571-4-49.143-9.143-88-22.857-158.857-73.143-51.429 9.143-100.571 9.143-154.857 0-269.714-75.429 33.143 2.286 50.286 2.286 92 0 176.571-25.714t150.857-73.714q71.429-52.571 109.714-121.143t38.286-145.143q0-44-13.143-86.857 73.714 40.571 116.571 101.714t42.857 131.429z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "comments" - ], - "defaultCode": 61574, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "comments", - "order": 55, - "id": 127, - "prevSize": 14, - "code": 58943 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 63 - }, - { - "icon": { - "paths": [ - "M274.286 493.714v-256q0-8-5.143-13.143t-13.143-5.143-13.143 5.143-5.143 13.143v256q0 8 5.143 13.143t13.143 5.143 13.143-5.143 5.143-13.143zM658.286 694.857q0 14.857-10.857 25.714t-25.714 10.857h-245.143l-29.143 276q-1.143 6.857-6 11.714t-11.714 4.857h-0.571q-15.429 0-18.286-15.429l-43.429-277.143h-230.857q-14.857 0-25.714-10.857t-10.857-25.714q0-70.286 44.857-126.571t101.429-56.286v-292.571q-29.714 0-51.429-21.714t-21.714-51.429 21.714-51.429 51.429-21.714h365.714q29.714 0 51.429 21.714t21.714 51.429-21.714 51.429-51.429 21.714v292.571q56.571 0 101.429 56.286t44.857 126.571z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "thumb-tack" - ], - "defaultCode": 61581, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "thumb-tack", - "order": 52, - "id": 134, - "prevSize": 14, - "code": 58944 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 64 - }, - { - "icon": { - "paths": [ - "M804.571 530.286v182.857q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h402.286q8 0 13.143 5.143t5.143 13.143v36.571q0 8-5.143 13.143t-13.143 5.143h-402.286q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-182.857q0-8 5.143-13.143t13.143-5.143h36.571q8 0 13.143 5.143t5.143 13.143zM1024 36.571v292.571q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-100.571-100.571-372.571 372.571q-5.714 5.714-13.143 5.714t-13.143-5.714l-65.143-65.143q-5.714-5.714-5.714-13.143t5.714-13.143l372.571-372.571-100.571-100.571q-10.857-10.857-10.857-25.714t10.857-25.714 25.714-10.857h292.571q14.857 0 25.714 10.857t10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "external-link" - ], - "defaultCode": 61582, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "external-link", - "order": 72, - "id": 135, - "prevSize": 14, - "code": 58945 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 65 - }, - { - "icon": { - "paths": [ - "M731.429 841.143q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857-10.857 25.714 10.857 25.714 25.714 10.857 25.714-10.857 10.857-25.714zM877.714 841.143q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857-10.857 25.714 10.857 25.714 25.714 10.857 25.714-10.857 10.857-25.714zM950.857 713.143v182.857q0 22.857-16 38.857t-38.857 16h-841.143q-22.857 0-38.857-16t-16-38.857v-182.857q0-22.857 16-38.857t38.857-16h244q12 32 40.286 52.571t63.143 20.571h146.286q34.857 0 63.143-20.571t40.286-52.571h244q22.857 0 38.857 16t16 38.857zM765.143 342.857q-9.714 22.857-33.714 22.857h-146.286v256q0 14.857-10.857 25.714t-25.714 10.857h-146.286q-14.857 0-25.714-10.857t-10.857-25.714v-256h-146.286q-24 0-33.714-22.857-9.714-22.286 8-39.429l256-256q10.286-10.857 25.714-10.857t25.714 10.857l256 256q17.714 17.143 8 39.429z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "upload" - ], - "defaultCode": 61587, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "upload", - "order": 18, - "id": 139, - "prevSize": 14, - "code": 58946 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 66 - }, - { - "icon": { - "paths": [ - "M640 146.286h-475.429q-37.714 0-64.571 26.857t-26.857 64.571v475.429q0 37.714 26.857 64.571t64.571 26.857h475.429q37.714 0 64.571-26.857t26.857-64.571v-475.429q0-37.714-26.857-64.571t-64.571-26.857zM804.571 237.714v475.429q0 68-48.286 116.286t-116.286 48.286h-475.429q-68 0-116.286-48.286t-48.286-116.286v-475.429q0-68 48.286-116.286t116.286-48.286h475.429q68 0 116.286 48.286t48.286 116.286z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "square-o" - ], - "defaultCode": 61590, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "square-o2", - "order": 20, - "id": 142, - "prevSize": 14, - "code": 58947 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 67 - }, - { - "icon": { - "paths": [ - "M950.857 365.714q30.286 0 51.714 21.429t21.429 51.714-21.429 51.714-51.714 21.429v219.429q0 29.714-21.714 51.429t-51.429 21.714q-238.286-198.286-464-217.143-33.143 10.857-52 37.714t-17.714 57.429 22.857 52.857q-11.429 18.857-13.143 37.429t3.429 33.143 19.143 31.429 27.429 28.571 35.143 28.857q-16.571 33.143-63.714 47.429t-96.286 6.571-75.429-31.714q-4-13.143-16.857-50t-18.286-54-13.143-50.857-8.571-57.714 2-56.286 12.571-63.143h-69.714q-37.714 0-64.571-26.857t-26.857-64.571v-109.714q0-37.714 26.857-64.571t64.571-26.857h274.286q248.571 0 512-219.429 29.714 0 51.429 21.714t21.714 51.429v219.429zM877.714 710.857v-545.143q-225.143 172.571-438.857 196v154.286q215.429 24 438.857 194.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bullhorn" - ], - "defaultCode": 61601, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "bullhorn", - "order": 12, - "id": 152, - "prevSize": 14, - "code": 58948 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 68 - }, - { - "icon": { - "paths": [ - "M733.714 512.571q0-15.429-10.286-25.714l-52-52q-10.286-10.286-25.714-10.286t-25.714 10.286l-108 108v-286.857q0-14.857-10.857-25.714t-25.714-10.857h-73.143q-14.857 0-25.714 10.857t-10.857 25.714v286.857l-108-108q-10.857-10.857-25.714-10.857t-25.714 10.857l-52 52q-10.286 10.286-10.286 25.714t10.286 25.714l258.857 258.857q10.286 10.286 25.714 10.286t25.714-10.286l258.857-258.857q10.286-10.286 10.286-25.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrow-circle-down" - ], - "defaultCode": 61611, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "arrow-circle-down", - "order": 15, - "id": 162, - "prevSize": 14, - "code": 58949 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 69 - }, - { - "icon": { - "paths": [ - "M801.714 168.571q9.714 23.429-8 40l-281.714 281.714v424q0 24-22.286 33.714-7.429 2.857-14.286 2.857-15.429 0-25.714-10.857l-146.286-146.286q-10.857-10.857-10.857-25.714v-277.714l-281.714-281.714q-17.714-16.571-8-40 9.714-22.286 33.714-22.286h731.429q24 0 33.714 22.286z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "filter" - ], - "defaultCode": 61616, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "filter", - "order": 69, - "id": 166, - "prevSize": 14, - "code": 58950 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 70 - }, - { - "icon": { - "paths": [ - "M733.143 309.143l-202.857 202.857 202.857 202.857 82.286-82.286q16.571-17.714 40-8 22.286 9.714 22.286 33.714v256q0 14.857-10.857 25.714t-25.714 10.857h-256q-24 0-33.714-22.857-9.714-22.286 8-39.429l82.286-82.286-202.857-202.857-202.857 202.857 82.286 82.286q17.714 17.143 8 39.429-9.714 22.857-33.714 22.857h-256q-14.857 0-25.714-10.857t-10.857-25.714v-256q0-24 22.857-33.714 22.286-9.714 39.429 8l82.286 82.286 202.857-202.857-202.857-202.857-82.286 82.286q-10.857 10.857-25.714 10.857-6.857 0-13.714-2.857-22.857-9.714-22.857-33.714v-256q0-14.857 10.857-25.714t25.714-10.857h256q24 0 33.714 22.857 9.714 22.286-8 39.429l-82.286 82.286 202.857 202.857 202.857-202.857-82.286-82.286q-17.714-17.143-8-39.429 9.714-22.857 33.714-22.857h256q14.857 0 25.714 10.857t10.857 25.714v256q0 24-22.286 33.714-7.429 2.857-14.286 2.857-14.857 0-25.714-10.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "arrows-alt" - ], - "defaultCode": 61618, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "arrows-alt", - "order": 42, - "id": 168, - "prevSize": 14, - "code": 58951 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 71 - }, - { - "icon": { - "paths": [ - "M832 694.857q0-22.857-16-38.857l-118.857-118.857q-16-16-38.857-16-24 0-41.143 18.286 1.714 1.714 10.857 10.571t12.286 12.286 8.571 10.857 7.429 14.571 2 15.714q0 22.857-16 38.857t-38.857 16q-8.571 0-15.714-2t-14.571-7.429-10.857-8.571-12.286-12.286-10.571-10.857q-18.857 17.714-18.857 41.714 0 22.857 16 38.857l117.714 118.286q15.429 15.429 38.857 15.429 22.857 0 38.857-14.857l84-83.429q16-16 16-38.286zM430.286 292q0-22.857-16-38.857l-117.714-118.286q-16-16-38.857-16-22.286 0-38.857 15.429l-84 83.429q-16 16-16 38.286 0 22.857 16 38.857l118.857 118.857q15.429 15.429 38.857 15.429 24 0 41.143-17.714-1.714-1.714-10.857-10.571t-12.286-12.286-8.571-10.857-7.429-14.571-2-15.714q0-22.857 16-38.857t38.857-16q8.571 0 15.714 2t14.571 7.429 10.857 8.571 12.286 12.286 10.571 10.857q18.857-17.714 18.857-41.714zM941.714 694.857q0 68.571-48.571 116l-84 83.429q-47.429 47.429-116 47.429-69.143 0-116.571-48.571l-117.714-118.286q-47.429-47.429-47.429-116 0-70.286 50.286-119.429l-50.286-50.286q-49.143 50.286-118.857 50.286-68.571 0-116.571-48l-118.857-118.857q-48-48-48-116.571t48.571-116l84-83.429q47.429-47.429 116-47.429 69.143 0 116.571 48.571l117.714 118.286q47.429 47.429 47.429 116 0 70.286-50.286 119.429l50.286 50.286q49.143-50.286 118.857-50.286 68.571 0 116.571 48l118.857 118.857q48 48 48 116.571z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "chain", - "link" - ], - "defaultCode": 61633, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "chain, link", - "order": 76, - "id": 170, - "prevSize": 14, - "code": 58952 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 72 - }, - { - "icon": { - "paths": [ - "M969.143 219.429q22.857 0 38.857 16t16 38.857v694.857q0 22.857-16 38.857t-38.857 16h-548.571q-22.857 0-38.857-16t-16-38.857v-164.571h-310.857q-22.857 0-38.857-16t-16-38.857v-384q0-22.857 11.429-50.286t27.429-43.429l233.143-233.143q16-16 43.429-27.429t50.286-11.429h237.714q22.857 0 38.857 16t16 38.857v187.429q38.857-22.857 73.143-22.857h237.714zM658.286 341.143l-170.857 170.857h170.857v-170.857zM292.571 121.714l-170.857 170.857h170.857v-170.857zM404.571 491.429l180.571-180.571v-237.714h-219.429v237.714q0 22.857-16 38.857t-38.857 16h-237.714v365.714h292.571v-146.286q0-22.857 11.429-50.286t27.429-43.429zM950.857 950.857v-658.286h-219.429v237.714q0 22.857-16 38.857t-38.857 16h-237.714v365.714h512z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "copy", - "files-o" - ], - "defaultCode": 61637, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "copy, files-o", - "order": 10, - "id": 174, - "prevSize": 14, - "code": 58953 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 73 - }, - { - "icon": { - "paths": [ - "M877.714 768v73.143q0 14.857-10.857 25.714t-25.714 10.857h-804.571q-14.857 0-25.714-10.857t-10.857-25.714v-73.143q0-14.857 10.857-25.714t25.714-10.857h804.571q14.857 0 25.714 10.857t10.857 25.714zM877.714 475.429v73.143q0 14.857-10.857 25.714t-25.714 10.857h-804.571q-14.857 0-25.714-10.857t-10.857-25.714v-73.143q0-14.857 10.857-25.714t25.714-10.857h804.571q14.857 0 25.714 10.857t10.857 25.714zM877.714 182.857v73.143q0 14.857-10.857 25.714t-25.714 10.857h-804.571q-14.857 0-25.714-10.857t-10.857-25.714v-73.143q0-14.857 10.857-25.714t25.714-10.857h804.571q14.857 0 25.714 10.857t10.857 25.714z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "bars", - "navicon", - "reorder" - ], - "defaultCode": 61641, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "bars, navicon, reorder", - "order": 57, - "id": 178, - "prevSize": 14, - "code": 58954 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 74 - }, - { - "icon": { - "paths": [ - "M219.429 804.571q0 45.714-32 77.714t-77.714 32-77.714-32-32-77.714 32-77.714 77.714-32 77.714 32 32 77.714zM219.429 512q0 45.714-32 77.714t-77.714 32-77.714-32-32-77.714 32-77.714 77.714-32 77.714 32 32 77.714zM1024 749.714v109.714q0 7.429-5.429 12.857t-12.857 5.429h-694.857q-7.429 0-12.857-5.429t-5.429-12.857v-109.714q0-7.429 5.429-12.857t12.857-5.429h694.857q7.429 0 12.857 5.429t5.429 12.857zM219.429 219.429q0 45.714-32 77.714t-77.714 32-77.714-32-32-77.714 32-77.714 77.714-32 77.714 32 32 77.714zM1024 457.143v109.714q0 7.429-5.429 12.857t-12.857 5.429h-694.857q-7.429 0-12.857-5.429t-5.429-12.857v-109.714q0-7.429 5.429-12.857t12.857-5.429h694.857q7.429 0 12.857 5.429t5.429 12.857zM1024 164.571v109.714q0 7.429-5.429 12.857t-12.857 5.429h-694.857q-7.429 0-12.857-5.429t-5.429-12.857v-109.714q0-7.429 5.429-12.857t12.857-5.429h694.857q7.429 0 12.857 5.429t5.429 12.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "list-ul" - ], - "defaultCode": 61642, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "list-ul", - "order": 78, - "id": 179, - "prevSize": 14, - "code": 58955 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 75 - }, - { - "icon": { - "paths": [ - "M292.571 786.286v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM292.571 566.857v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM585.143 786.286v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM292.571 347.429v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM585.143 566.857v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM877.714 786.286v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM585.143 347.429v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM877.714 566.857v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM877.714 347.429v-109.714q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v109.714q0 8 5.143 13.143t13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM950.857 164.571v621.714q0 37.714-26.857 64.571t-64.571 26.857h-768q-37.714 0-64.571-26.857t-26.857-64.571v-621.714q0-37.714 26.857-64.571t64.571-26.857h768q37.714 0 64.571 26.857t26.857 64.571z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "table" - ], - "defaultCode": 61646, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "table", - "order": 38, - "id": 183, - "prevSize": 14, - "code": 58956 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 76 - }, - { - "icon": { - "paths": [ - "M438.857 658.286h219.429v-54.857h-73.143v-256h-65.143l-84.571 78.286 44 45.714q24-21.143 31.429-32.571h1.143v164.571h-73.143v54.857zM731.429 512q0 40-12 81.143t-34 76.571-58 57.714-78.857 22.286-78.857-22.286-58-57.714-34-76.571-12-81.143 12-81.143 34-76.571 58-57.714 78.857-22.286 78.857 22.286 58 57.714 34 76.571 12 81.143zM1024 658.286v-292.571q-60.571 0-103.429-42.857t-42.857-103.429h-658.286q0 60.571-42.857 103.429t-103.429 42.857v292.571q60.571 0 103.429 42.857t42.857 103.429h658.286q0-60.571 42.857-103.429t103.429-42.857zM1097.143 182.857v658.286q0 14.857-10.857 25.714t-25.714 10.857h-1024q-14.857 0-25.714-10.857t-10.857-25.714v-658.286q0-14.857 10.857-25.714t25.714-10.857h1024q14.857 0 25.714 10.857t10.857 25.714z" - ], - "width": 1097, - "attrs": [], - "isMulticolor": false, - "tags": [ - "money" - ], - "defaultCode": 61654, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "money", - "order": 63, - "id": 190, - "prevSize": 14, - "code": 58957 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 77 - }, - { - "icon": { - "paths": [ - "M585.143 621.714q0 14.857-10.857 25.714l-256 256q-10.857 10.857-25.714 10.857t-25.714-10.857l-256-256q-10.857-10.857-10.857-25.714t10.857-25.714 25.714-10.857h512q14.857 0 25.714 10.857t10.857 25.714zM585.143 402.286q0 14.857-10.857 25.714t-25.714 10.857h-512q-14.857 0-25.714-10.857t-10.857-25.714 10.857-25.714l256-256q10.857-10.857 25.714-10.857t25.714 10.857l256 256q10.857 10.857 10.857 25.714z" - ], - "width": 585, - "attrs": [], - "isMulticolor": false, - "tags": [ - "sort", - "unsorted" - ], - "defaultCode": 61660, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "sort, unsorted", - "order": 71, - "id": 196, - "prevSize": 14, - "code": 58958 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 78 - }, - { - "icon": { - "paths": [ - "M1024 405.714v453.714q0 37.714-26.857 64.571t-64.571 26.857h-841.143q-37.714 0-64.571-26.857t-26.857-64.571v-453.714q25.143 28 57.714 49.714 206.857 140.571 284 197.143 32.571 24 52.857 37.429t54 27.429 62.857 14h1.143q29.143 0 62.857-14t54-27.429 52.857-37.429q97.143-70.286 284.571-197.143 32.571-22.286 57.143-49.714zM1024 237.714q0 45.143-28 86.286t-69.714 70.286q-214.857 149.143-267.429 185.714-5.714 4-24.286 17.429t-30.857 21.714-29.714 18.571-32.857 15.429-28.571 5.143h-1.143q-13.143 0-28.571-5.143t-32.857-15.429-29.714-18.571-30.857-21.714-24.286-17.429q-52-36.571-149.714-104.286t-117.143-81.429q-35.429-24-66.857-66t-31.429-78q0-44.571 23.714-74.286t67.714-29.714h841.143q37.143 0 64.286 26.857t27.143 64.571z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "envelope" - ], - "defaultCode": 61664, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "envelope", - "order": 61, - "id": 199, - "prevSize": 14, - "code": 58959 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 79 - }, - { - "icon": { - "paths": [ - "M877.714 512q0 89.143-34.857 170.286t-93.714 140-140 93.714-170.286 34.857q-98.286 0-186.857-41.429t-150.857-116.857q-4-5.714-3.714-12.857t4.857-11.714l78.286-78.857q5.714-5.143 14.286-5.143 9.143 1.143 13.143 6.857 41.714 54.286 102.286 84t128.571 29.714q59.429 0 113.429-23.143t93.429-62.571 62.571-93.429 23.143-113.429-23.143-113.429-62.571-93.429-93.429-62.571-113.429-23.143q-56 0-107.429 20.286t-91.429 58l78.286 78.857q17.714 17.143 8 39.429-9.714 22.857-33.714 22.857h-256q-14.857 0-25.714-10.857t-10.857-25.714v-256q0-24 22.857-33.714 22.286-9.714 39.429 8l74.286 73.714q61.143-57.714 139.714-89.429t162.571-31.714q89.143 0 170.286 34.857t140 93.714 93.714 140 34.857 170.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "rotate-left", - "undo" - ], - "defaultCode": 61666, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "rotate-left, undo", - "order": 29, - "id": 201, - "prevSize": 14, - "code": 58960 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 80 - }, - { - "icon": { - "paths": [ - "M1024 713.143v182.857q0 22.857-16 38.857t-38.857 16h-182.857q-22.857 0-38.857-16t-16-38.857v-182.857q0-22.857 16-38.857t38.857-16h54.857v-109.714h-292.571v109.714h54.857q22.857 0 38.857 16t16 38.857v182.857q0 22.857-16 38.857t-38.857 16h-182.857q-22.857 0-38.857-16t-16-38.857v-182.857q0-22.857 16-38.857t38.857-16h54.857v-109.714h-292.571v109.714h54.857q22.857 0 38.857 16t16 38.857v182.857q0 22.857-16 38.857t-38.857 16h-182.857q-22.857 0-38.857-16t-16-38.857v-182.857q0-22.857 16-38.857t38.857-16h54.857v-109.714q0-29.714 21.714-51.429t51.429-21.714h292.571v-109.714h-54.857q-22.857 0-38.857-16t-16-38.857v-182.857q0-22.857 16-38.857t38.857-16h182.857q22.857 0 38.857 16t16 38.857v182.857q0 22.857-16 38.857t-38.857 16h-54.857v109.714h292.571q29.714 0 51.429 21.714t21.714 51.429v109.714h54.857q22.857 0 38.857 16t16 38.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "sitemap" - ], - "defaultCode": 61672, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "sitemap", - "order": 39, - "id": 207, - "prevSize": 14, - "code": 58961 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 81 - }, - { - "icon": { - "paths": [ - "M358.286 310.857q0 7.429-5.714 13.143l-224.571 224.571 224.571 224.571q5.714 5.714 5.714 13.143t-5.714 13.143l-28.571 28.571q-5.714 5.714-13.143 5.714t-13.143-5.714l-266.286-266.286q-5.714-5.714-5.714-13.143t5.714-13.143l266.286-266.286q5.714-5.714 13.143-5.714t13.143 5.714l28.571 28.571q5.714 5.714 5.714 13.143z" - ], - "width": 366, - "attrs": [], - "isMulticolor": false, - "tags": [ - "angle-left" - ], - "defaultCode": 61700, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "angle-left", - "order": 26, - "id": 233, - "prevSize": 14, - "code": 58962 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 82 - }, - { - "icon": { - "paths": [ - "M340 548.571q0 7.429-5.714 13.143l-266.286 266.286q-5.714 5.714-13.143 5.714t-13.143-5.714l-28.571-28.571q-5.714-5.714-5.714-13.143t5.714-13.143l224.571-224.571-224.571-224.571q-5.714-5.714-5.714-13.143t5.714-13.143l28.571-28.571q5.714-5.714 13.143-5.714t13.143 5.714l266.286 266.286q5.714 5.714 5.714 13.143z" - ], - "width": 366, - "attrs": [], - "isMulticolor": false, - "tags": [ - "angle-right" - ], - "defaultCode": 61701, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "angle-right", - "order": 27, - "id": 234, - "prevSize": 14, - "code": 58963 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 83 - }, - { - "icon": { - "paths": [ - "M614.286 676.571q0 7.429-5.714 13.143l-28.571 28.571q-5.714 5.714-13.143 5.714t-13.143-5.714l-224.571-224.571-224.571 224.571q-5.714 5.714-13.143 5.714t-13.143-5.714l-28.571-28.571q-5.714-5.714-5.714-13.143t5.714-13.143l266.286-266.286q5.714-5.714 13.143-5.714t13.143 5.714l266.286 266.286q5.714 5.714 5.714 13.143z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "angle-up" - ], - "defaultCode": 61702, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "angle-up", - "order": 25, - "id": 235, - "prevSize": 14, - "code": 58964 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 84 - }, - { - "icon": { - "paths": [ - "M614.286 420.571q0 7.429-5.714 13.143l-266.286 266.286q-5.714 5.714-13.143 5.714t-13.143-5.714l-266.286-266.286q-5.714-5.714-5.714-13.143t5.714-13.143l28.571-28.571q5.714-5.714 13.143-5.714t13.143 5.714l224.571 224.571 224.571-224.571q5.714-5.714 13.143-5.714t13.143 5.714l28.571 28.571q5.714 5.714 5.714 13.143z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "angle-down" - ], - "defaultCode": 61703, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "angle-down", - "order": 21, - "id": 236, - "prevSize": 14, - "code": 58965 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 85 - }, - { - "icon": { - "paths": [ - "M438.857 201.143q-84.571 0-156 41.714t-113.143 113.143-41.714 156 41.714 156 113.143 113.143 156 41.714 156-41.714 113.143-113.143 41.714-156-41.714-156-113.143-113.143-156-41.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "circle-o" - ], - "defaultCode": 61708, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "circle-o", - "order": 68, - "id": 241, - "prevSize": 14, - "code": 58966 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 86 - }, - { - "icon": { - "paths": [ - "M438.857 548.571v219.429q0 45.714-32 77.714t-77.714 32h-219.429q-45.714 0-77.714-32t-32-77.714v-402.286q0-59.429 23.143-113.429t62.571-93.429 93.429-62.571 113.429-23.143h36.571q14.857 0 25.714 10.857t10.857 25.714v73.143q0 14.857-10.857 25.714t-25.714 10.857h-36.571q-60.571 0-103.429 42.857t-42.857 103.429v18.286q0 22.857 16 38.857t38.857 16h128q45.714 0 77.714 32t32 77.714zM950.857 548.571v219.429q0 45.714-32 77.714t-77.714 32h-219.429q-45.714 0-77.714-32t-32-77.714v-402.286q0-59.429 23.143-113.429t62.571-93.429 93.429-62.571 113.429-23.143h36.571q14.857 0 25.714 10.857t10.857 25.714v73.143q0 14.857-10.857 25.714t-25.714 10.857h-36.571q-60.571 0-103.429 42.857t-42.857 103.429v18.286q0 22.857 16 38.857t38.857 16h128q45.714 0 77.714 32t32 77.714z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "quote-left" - ], - "defaultCode": 61709, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "quote-left", - "order": 97, - "id": 242, - "prevSize": 14, - "code": 58967 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 87 - }, - { - "icon": { - "paths": [ - "M300.571 796.571q0 30.286-21.429 51.714t-51.714 21.429q-29.714 0-51.429-21.714t-21.714-51.429q0-30.286 21.429-51.714t51.714-21.429 51.714 21.429 21.429 51.714zM585.143 914.286q0 30.286-21.429 51.714t-51.714 21.429-51.714-21.429-21.429-51.714 21.429-51.714 51.714-21.429 51.714 21.429 21.429 51.714zM182.857 512q0 30.286-21.429 51.714t-51.714 21.429-51.714-21.429-21.429-51.714 21.429-51.714 51.714-21.429 51.714 21.429 21.429 51.714zM869.714 796.571q0 29.714-21.714 51.429t-51.429 21.714q-30.286 0-51.714-21.429t-21.429-51.714 21.429-51.714 51.714-21.429 51.714 21.429 21.429 51.714zM318.857 227.429q0 37.714-26.857 64.571t-64.571 26.857-64.571-26.857-26.857-64.571 26.857-64.571 64.571-26.857 64.571 26.857 26.857 64.571zM987.429 512q0 30.286-21.429 51.714t-51.714 21.429-51.714-21.429-21.429-51.714 21.429-51.714 51.714-21.429 51.714 21.429 21.429 51.714zM621.714 109.714q0 45.714-32 77.714t-77.714 32-77.714-32-32-77.714 32-77.714 77.714-32 77.714 32 32 77.714zM924.571 227.429q0 53.143-37.714 90.571t-90.286 37.429q-53.143 0-90.571-37.429t-37.429-90.571q0-52.571 37.429-90.286t90.571-37.714q52.571 0 90.286 37.714t37.714 90.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "spinner" - ], - "defaultCode": 61712, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "spinner", - "order": 46, - "id": 244, - "prevSize": 14, - "code": 58968 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 88 - }, - { - "icon": { - "paths": [ - "M1024 640q0 94.857-72.571 257.714-1.714 4-6 13.714t-7.714 17.143-7.429 12.571q-6.857 9.714-16 9.714-8.571 0-13.429-5.714t-4.857-14.286q0-5.143 1.429-15.143t1.429-13.429q2.857-38.857 2.857-70.286 0-57.714-10-103.429t-27.714-79.143-45.714-57.714-60.286-39.714-76-24.286-88-12.286-100.286-3.429h-128v146.286q0 14.857-10.857 25.714t-25.714 10.857-25.714-10.857l-292.571-292.571q-10.857-10.857-10.857-25.714t10.857-25.714l292.571-292.571q10.857-10.857 25.714-10.857t25.714 10.857 10.857 25.714v146.286h128q407.429 0 500 230.286 30.286 76.571 30.286 190.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "mail-reply", - "reply" - ], - "defaultCode": 61714, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "mail-reply, reply", - "order": 49, - "id": 246, - "prevSize": 14, - "code": 58969 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 89 - }, - { - "icon": { - "paths": [ - "M250.857 726.286l-146.286 146.286q-5.714 5.143-13.143 5.143-6.857 0-13.143-5.143-5.143-5.714-5.143-13.143t5.143-13.143l146.286-146.286q5.714-5.143 13.143-5.143t13.143 5.143q5.143 5.714 5.143 13.143t-5.143 13.143zM347.429 749.714v182.857q0 8-5.143 13.143t-13.143 5.143-13.143-5.143-5.143-13.143v-182.857q0-8 5.143-13.143t13.143-5.143 13.143 5.143 5.143 13.143zM219.429 621.714q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143 5.143-13.143 13.143-5.143h182.857q8 0 13.143 5.143t5.143 13.143zM941.714 694.857q0 68.571-48.571 116l-84 83.429q-47.429 47.429-116 47.429-69.143 0-116.571-48.571l-190.857-191.429q-12-12-24-32l136.571-10.286 156 156.571q15.429 15.429 38.857 15.714t38.857-15.143l84-83.429q16-16 16-38.286 0-22.857-16-38.857l-156.571-157.143 10.286-136.571q20 12 32 24l192 192q48 49.143 48 116.571zM589.143 281.143l-136.571 10.286-156-156.571q-16-16-38.857-16-22.286 0-38.857 15.429l-84 83.429q-16 16-16 38.286 0 22.857 16 38.857l156.571 156.571-10.286 137.143q-20-12-32-24l-192-192q-48-49.143-48-116.571 0-68.571 48.571-116l84-83.429q47.429-47.429 116-47.429 69.143 0 116.571 48.571l190.857 191.429q12 12 24 32zM950.857 329.143q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143 5.143-13.143 13.143-5.143h182.857q8 0 13.143 5.143t5.143 13.143zM640 18.286v182.857q0 8-5.143 13.143t-13.143 5.143-13.143-5.143-5.143-13.143v-182.857q0-8 5.143-13.143t13.143-5.143 13.143 5.143 5.143 13.143zM872.571 104.571l-146.286 146.286q-6.286 5.143-13.143 5.143t-13.143-5.143q-5.143-5.714-5.143-13.143t5.143-13.143l146.286-146.286q5.714-5.143 13.143-5.143t13.143 5.143q5.143 5.714 5.143 13.143t-5.143 13.143z" - ], - "width": 951, - "attrs": [], - "isMulticolor": false, - "tags": [ - "chain-broken", - "unlink" - ], - "defaultCode": 61735, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "chain-broken, unlink", - "order": 77, - "id": 264, - "prevSize": 14, - "code": 58970 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 90 - }, - { - "icon": { - "paths": [ - "M603.429 438.857q22.857 0 38.857 16t16 38.857v329.143q0 22.857-16 38.857t-38.857 16h-548.571q-22.857 0-38.857-16t-16-38.857v-329.143q0-22.857 16-38.857t38.857-16h18.286v-182.857q0-105.714 75.143-180.857t180.857-75.143 180.857 75.143 75.143 180.857q0 14.857-10.857 25.714t-25.714 10.857h-36.571q-14.857 0-25.714-10.857t-10.857-25.714q0-60.571-42.857-103.429t-103.429-42.857-103.429 42.857-42.857 103.429v182.857h420.571z" - ], - "width": 658, - "attrs": [], - "isMulticolor": false, - "tags": [ - "unlock-alt" - ], - "defaultCode": 61758, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "unlock-alt", - "order": 89, - "id": 286, - "prevSize": 14, - "code": 58971 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 91 - }, - { - "icon": { - "paths": [ - "M219.429 420.571v109.714q0 22.857-16 38.857t-38.857 16h-109.714q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h109.714q22.857 0 38.857 16t16 38.857zM512 420.571v109.714q0 22.857-16 38.857t-38.857 16h-109.714q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h109.714q22.857 0 38.857 16t16 38.857zM804.571 420.571v109.714q0 22.857-16 38.857t-38.857 16h-109.714q-22.857 0-38.857-16t-16-38.857v-109.714q0-22.857 16-38.857t38.857-16h109.714q22.857 0 38.857 16t16 38.857z" - ], - "width": 805, - "attrs": [], - "isMulticolor": false, - "tags": [ - "ellipsis-h" - ], - "defaultCode": 61761, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "ellipsis-h", - "order": 56, - "id": 288, - "prevSize": 14, - "code": 58972 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 92 - }, - { - "icon": { - "paths": [ - "M391.429 742.286l350.857-350.857q10.857-10.857 10.857-25.714t-10.857-25.714l-58.286-58.286q-10.857-10.857-25.714-10.857t-25.714 10.857l-266.857 266.857-120.571-120.571q-10.857-10.857-25.714-10.857t-25.714 10.857l-58.286 58.286q-10.857 10.857-10.857 25.714t10.857 25.714l204.571 204.571q10.857 10.857 25.714 10.857t25.714-10.857zM877.714 237.714v548.571q0 68-48.286 116.286t-116.286 48.286h-548.571q-68 0-116.286-48.286t-48.286-116.286v-548.571q0-68 48.286-116.286t116.286-48.286h548.571q68 0 116.286 48.286t48.286 116.286z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "check-square" - ], - "defaultCode": 61770, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "check-square", - "order": 100, - "id": 297, - "prevSize": 14, - "code": 58973 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 93 - }, - { - "icon": { - "paths": [ - "M585.143 292.571v-269.714q12.571 8 20.571 16l233.143 233.143q8 8 16 20.571h-269.714zM512 310.857q0 22.857 16 38.857t38.857 16h310.857v603.429q0 22.857-16 38.857t-38.857 16h-768q-22.857 0-38.857-16t-16-38.857v-914.286q0-22.857 16-38.857t38.857-16h457.143v310.857z" - ], - "attrs": [], - "isMulticolor": false, - "tags": [ - "file" - ], - "defaultCode": 61787, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "file", - "order": 36, - "id": 313, - "prevSize": 14, - "code": 58974 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 94 - }, - { - "icon": { - "paths": [ - "M448.571 576h118.286q-8 90.286-56.286 142t-122.571 51.714q-92.571 0-145.429-66.286t-52.857-180.571q0-110.857 53.143-178t133.143-67.143q84.571 0 132.571 49.714t55.429 141.143h-116q-2.857-36.571-20.286-56.571t-46.571-20q-32.571 0-50.571 34.571t-18 101.429q0 27.429 2.857 48t10.286 39.714 22.857 29.429 37.714 10.286q54.286 0 62.286-79.429zM855.429 576h117.714q-8 90.286-56 142t-122.286 51.714q-92.571 0-145.429-66.286t-52.857-180.571q0-110.857 53.143-178t133.143-67.143q84.571 0 132.571 49.714t55.429 141.143h-116.571q-2.286-36.571-20-56.571t-46.286-20q-32.571 0-50.571 34.571t-18 101.429q0 27.429 2.857 48t10.286 39.714 22.571 29.429 37.429 10.286q28 0 43.714-21.714t19.143-57.714zM1060.571 508q0-118.286-8.857-175.429t-34.571-92q-3.429-4.571-7.714-8t-12.286-8.571-9.143-6.286q-49.143-36-398.286-36-357.143 0-405.714 36-2.857 2.286-10 6.571t-12 8-8.286 8.286q-25.714 34.286-34.286 91.143t-8.571 176.286q0 118.857 8.571 175.714t34.286 91.714q3.429 4.571 8.571 8.571t11.714 8 10 6.857q25.143 18.857 136.857 28t268.857 9.143q348.571 0 398.286-37.143 2.857-2.286 9.714-6.286t11.714-8 7.714-9.143q26.286-34.286 34.857-90.857t8.571-176.571zM1170.286 73.143v877.714h-1170.286v-877.714h1170.286z" - ], - "width": 1170, - "attrs": [], - "isMulticolor": false, - "tags": [ - "cc" - ], - "defaultCode": 61962, - "grid": 14 - }, - "attrs": [], - "properties": { - "name": "cc", - "order": 83, - "id": 477, - "prevSize": 14, - "code": 58975 - }, - "setIdx": 0, - "setId": 2, - "iconIdx": 95 - } - ], - "height": 1024, - "metadata": { - "name": "edx-icons" - }, - "preferences": { - "showGlyphs": true, - "showQuickUse": true, - "showQuickUse2": true, - "showSVGs": true, - "fontPref": { - "prefix": "icon-", - "metadata": { - "fontFamily": "edx-icons", - "majorVersion": 1, - "minorVersion": 0 - }, - "metrics": { - "emSize": 1024, - "baseline": 6.25, - "whitespace": 50 - }, - "embed": false, - "resetPoint": 58880, - "showVersion": false, - "showMetadata": false, - "showMetrics": false, - "showSelector": true, - "selector": "class", - "classSelector": ".icon", - "cssVars": true, - "cssVarsFormat": "sass" - }, - "imagePref": { - "prefix": "icon-", - "png": false, - "useClassSelector": false, - "color": 4473924, - "bgColor": 16777215, - "classSelector": ".icon", - "columns": 16, - "margin": 16, - "height": 32 - }, - "historySize": 100, - "showCodes": true, - "showLiga": false - } -} \ No newline at end of file diff --git a/cms/static/js/base.js b/cms/static/js/base.js index 4ab1c9a505..94c6cc2648 100644 --- a/cms/static/js/base.js +++ b/cms/static/js/base.js @@ -1,13 +1,38 @@ -require(["domReady", "jquery", "underscore", "gettext", "common/js/components/views/feedback_notification", - "common/js/components/views/feedback_prompt", "js/utils/date_utils", - "js/utils/module", "js/utils/handle_iframe_binding", "jquery.ui", "jquery.leanModal", - "jquery.form", "jquery.smoothScroll"], - function(domReady, $, _, gettext, NotificationView, PromptView, DateUtils, ModuleUtils, IframeUtils) +require([ + "domReady", + "jquery", + "underscore", + "gettext", + "common/js/components/views/feedback_notification", + "common/js/components/views/feedback_prompt", + "js/utils/date_utils", + "js/utils/module", + "js/utils/handle_iframe_binding", + "edx-ui-toolkit/js/dropdown-menu/dropdown-menu-view", + "jquery.ui", + "jquery.leanModal", + "jquery.form", + "jquery.smoothScroll" + ], + function( + domReady, + $, + _, + gettext, + NotificationView, + PromptView, + DateUtils, + ModuleUtils, + IframeUtils, + DropdownMenuView + ) { var $body; domReady(function() { + var dropdownMenuView; + $body = $('body'); $body.on('click', '.embeddable-xml-input', function() { @@ -67,6 +92,14 @@ domReady(function() { if ($.browser.msie) { $.ajaxSetup({ cache: false }); } + + //Initiate the edx tool kit dropdown menu + if ($('.js-header-user-menu').length){ + dropdownMenuView = new DropdownMenuView({ + el: '.js-header-user-menu' + }); + dropdownMenuView.postRender(); + } }); function smoothScrollLink(e) { diff --git a/cms/static/js/certificates/models/certificate.js b/cms/static/js/certificates/models/certificate.js index 94231d4a61..5518867312 100644 --- a/cms/static/js/certificates/models/certificate.js +++ b/cms/static/js/certificates/models/certificate.js @@ -6,7 +6,7 @@ define([ 'backbone-relational', 'backbone.associations', 'gettext', - 'coffee/src/main', + 'cms/js/main', 'js/certificates/models/signatory', 'js/certificates/collections/signatories' ], diff --git a/cms/static/js/factories/base.js b/cms/static/js/factories/base.js index b6f997c8e4..ac5a706c62 100644 --- a/cms/static/js/factories/base.js +++ b/cms/static/js/factories/base.js @@ -1,2 +1,2 @@ -define(['js/base', 'coffee/src/main', 'js/src/logger', 'datepair', 'accessibility', +define(['js/base', 'cms/js/main', 'js/src/logger', 'datepair', 'accessibility', 'ieshim', 'tooltip_manager', 'lang_edx', 'js/models/course']); diff --git a/cms/static/js/factories/container.js b/cms/static/js/factories/container.js index 6593c25fb3..9f780111dd 100644 --- a/cms/static/js/factories/container.js +++ b/cms/static/js/factories/container.js @@ -1,6 +1,6 @@ define([ 'jquery', 'underscore', 'js/models/xblock_container_info', 'js/views/pages/container', - 'js/collections/component_template', 'xmodule', 'coffee/src/main', + 'js/collections/component_template', 'xmodule', 'cms/js/main', 'xblock/cms.runtime.v1' ], function($, _, XBlockContainerInfo, ContainerPage, ComponentTemplates, xmoduleLoader) { diff --git a/cms/static/js/factories/edit_tabs.js b/cms/static/js/factories/edit_tabs.js index 71ba0f42b6..c6f8f930e9 100644 --- a/cms/static/js/factories/edit_tabs.js +++ b/cms/static/js/factories/edit_tabs.js @@ -1,5 +1,5 @@ define([ - 'js/models/explicit_url', 'js/views/tabs', 'xmodule', 'coffee/src/main', 'xblock/cms.runtime.v1' + 'js/models/explicit_url', 'js/views/tabs', 'xmodule', 'cms/js/main', 'xblock/cms.runtime.v1' ], function (TabsModel, TabsEditView, xmoduleLoader) { 'use strict'; return function (courseLocation, explicitUrl) { diff --git a/cms/static/js/factories/library.js b/cms/static/js/factories/library.js index 59f447dead..83412b0339 100644 --- a/cms/static/js/factories/library.js +++ b/cms/static/js/factories/library.js @@ -1,6 +1,6 @@ define([ 'jquery', 'underscore', 'js/models/xblock_info', 'js/views/pages/paged_container', - 'js/views/library_container', 'js/collections/component_template', 'xmodule', 'coffee/src/main', + 'js/views/library_container', 'js/collections/component_template', 'xmodule', 'cms/js/main', 'xblock/cms.runtime.v1' ], function($, _, XBlockInfo, PagedContainerPage, LibraryContainerView, ComponentTemplates, xmoduleLoader) { diff --git a/cms/static/js/i18n/ar/djangojs.js b/cms/static/js/i18n/ar/djangojs.js index 806a5bd184..5de5fe9c3c 100644 --- a/cms/static/js/i18n/ar/djangojs.js +++ b/cms/static/js/i18n/ar/djangojs.js @@ -1569,7 +1569,7 @@ "Time Sent": "\u0648\u0642\u062a \u0627\u0644\u0625\u0631\u0633\u0627\u0644", "Time Sent:": "\u0648\u0642\u062a \u0627\u0644\u0625\u0631\u0633\u0627\u0644:", "Timed": "\u0645\u0624\u0642\u0651\u062a", - "Timed Exam": "\u0627\u0645\u062a\u062d\u0627\u0646 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a", + "Timed Exam": "\u0627\u0645\u062a\u062d\u0627\u0646 \u0645\u0648\u0642\u0648\u062a", "Timed Transcript Conflict": "\u062a\u0636\u0627\u0631\u0628 \u0636\u0645\u0646 \u0627\u0644\u0646\u0635 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a", "Timed Transcript Found": "\u0648\u064f\u062c\u062f \u0646\u0635 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a", "Timed Transcript Uploaded Successfully": "\u062c\u0631\u0649 \u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0646\u0635 \u0645\u062d\u062f\u0651\u064e\u062f \u0627\u0644\u062a\u0648\u0642\u064a\u062a \u0628\u0646\u062c\u0627\u062d", diff --git a/cms/static/js/i18n/eo/djangojs.js b/cms/static/js/i18n/eo/djangojs.js index 12f628b86e..44ba2077bf 100644 --- a/cms/static/js/i18n/eo/djangojs.js +++ b/cms/static/js/i18n/eo/djangojs.js @@ -33,7 +33,6 @@ "%(cohort_name)s (%(user_count)s)": "%(cohort_name)s (%(user_count)s) \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "%(comments_count)s %(span_sr_open)scomments %(span_close)s": "%(comments_count)s %(span_sr_open)s\u00e7\u00f6mm\u00e9nts %(span_close)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", "%(comments_count)s %(span_sr_open)scomments (%(unread_comments_count)s unread comments)%(span_close)s": "%(comments_count)s %(span_sr_open)s\u00e7\u00f6mm\u00e9nts (%(unread_comments_count)s \u00fcnr\u00e9\u00e4d \u00e7\u00f6mm\u00e9nts)%(span_close)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", - "%(display_name)s Settings": "%(display_name)s S\u00e9tt\u00efngs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "%(download_link_start)sDownload this image (right-click or option-click, save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to your backpack.": "%(download_link_start)sD\u00f6wnl\u00f6\u00e4d th\u00efs \u00efm\u00e4g\u00e9 (r\u00efght-\u00e7l\u00ef\u00e7k \u00f6r \u00f6pt\u00ef\u00f6n-\u00e7l\u00ef\u00e7k, s\u00e4v\u00e9 \u00e4s)%(link_end)s \u00e4nd th\u00e9n %(upload_link_start)s\u00fcpl\u00f6\u00e4d%(link_end)s \u00eft t\u00f6 \u00fd\u00f6\u00fcr \u00df\u00e4\u00e7kp\u00e4\u00e7k. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "%(errorCount)s error found in form.": [ "%(errorCount)s \u00e9rr\u00f6r f\u00f6\u00fcnd \u00efn f\u00f6rm. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", @@ -139,6 +138,7 @@ "A driver's license, passport, or other government-issued ID with your name and photo": "\u00c0 dr\u00efv\u00e9r's l\u00ef\u00e7\u00e9ns\u00e9, p\u00e4ssp\u00f6rt, \u00f6r \u00f6th\u00e9r g\u00f6v\u00e9rnm\u00e9nt-\u00efss\u00fc\u00e9d \u00ccD w\u00efth \u00fd\u00f6\u00fcr n\u00e4m\u00e9 \u00e4nd ph\u00f6t\u00f6 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "A list of courses you have just enrolled in as a verified student": "\u00c0 l\u00efst \u00f6f \u00e7\u00f6\u00fcrs\u00e9s \u00fd\u00f6\u00fc h\u00e4v\u00e9 j\u00fcst \u00e9nr\u00f6ll\u00e9d \u00efn \u00e4s \u00e4 v\u00e9r\u00eff\u00ef\u00e9d st\u00fcd\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "A name that identifies your team (maximum 255 characters).": "\u00c0 n\u00e4m\u00e9 th\u00e4t \u00efd\u00e9nt\u00eff\u00ef\u00e9s \u00fd\u00f6\u00fcr t\u00e9\u00e4m (m\u00e4x\u00efm\u00fcm 255 \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs). \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", + "A short description of the program, including concepts covered and expected outcomes (255 character limit).": "\u00c0 sh\u00f6rt d\u00e9s\u00e7r\u00efpt\u00ef\u00f6n \u00f6f th\u00e9 pr\u00f6gr\u00e4m, \u00efn\u00e7l\u00fcd\u00efng \u00e7\u00f6n\u00e7\u00e9pts \u00e7\u00f6v\u00e9r\u00e9d \u00e4nd \u00e9xp\u00e9\u00e7t\u00e9d \u00f6\u00fct\u00e7\u00f6m\u00e9s (255 \u00e7h\u00e4r\u00e4\u00e7t\u00e9r l\u00efm\u00eft). \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", "A short description of the team to help other learners understand the goals or direction of the team (maximum 300 characters).": "\u00c0 sh\u00f6rt d\u00e9s\u00e7r\u00efpt\u00ef\u00f6n \u00f6f th\u00e9 t\u00e9\u00e4m t\u00f6 h\u00e9lp \u00f6th\u00e9r l\u00e9\u00e4rn\u00e9rs \u00fcnd\u00e9rst\u00e4nd th\u00e9 g\u00f6\u00e4ls \u00f6r d\u00efr\u00e9\u00e7t\u00ef\u00f6n \u00f6f th\u00e9 t\u00e9\u00e4m (m\u00e4x\u00efm\u00fcm 300 \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs). \u2c60'\u03c3\u044f\u0454\u043c#", "A valid email address is required": "\u00c0 v\u00e4l\u00efd \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss \u00efs r\u00e9q\u00fc\u00efr\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454#", "ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u00c0B\u00c7D\u00c9FGH\u00ccJKLMN\u00d6PQRST\u00dbVWX\u00ddZ \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", @@ -146,7 +146,6 @@ "About Me": "\u00c0\u00df\u00f6\u00fct M\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "About You": "\u00c0\u00df\u00f6\u00fct \u00dd\u00f6\u00fc \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "About me": "\u00c0\u00df\u00f6\u00fct m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", - "Access": "\u00c0\u00e7\u00e7\u00e9ss \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Accomplishments": "\u00c0\u00e7\u00e7\u00f6mpl\u00efshm\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Accomplishments Pagination": "\u00c0\u00e7\u00e7\u00f6mpl\u00efshm\u00e9nts P\u00e4g\u00efn\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Account Information": "\u00c0\u00e7\u00e7\u00f6\u00fcnt \u00ccnf\u00f6rm\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", @@ -176,9 +175,11 @@ "Add a Response": "\u00c0dd \u00e4 R\u00e9sp\u00f6ns\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", "Add a clear and descriptive title to encourage participation.": "\u00c0dd \u00e4 \u00e7l\u00e9\u00e4r \u00e4nd d\u00e9s\u00e7r\u00efpt\u00efv\u00e9 t\u00eftl\u00e9 t\u00f6 \u00e9n\u00e7\u00f6\u00fcr\u00e4g\u00e9 p\u00e4rt\u00ef\u00e7\u00efp\u00e4t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Add a comment": "\u00c0dd \u00e4 \u00e7\u00f6mm\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", + "Add a course": "\u00c0dd \u00e4 \u00e7\u00f6\u00fcrs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Add a learning outcome here": "\u00c0dd \u00e4 l\u00e9\u00e4rn\u00efng \u00f6\u00fct\u00e7\u00f6m\u00e9 h\u00e9r\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "Add a response:": "\u00c0dd \u00e4 r\u00e9sp\u00f6ns\u00e9: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Add another group": "\u00c0dd \u00e4n\u00f6th\u00e9r gr\u00f6\u00fcp \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", + "Add another run": "\u00c0dd \u00e4n\u00f6th\u00e9r r\u00fcn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Add language": "\u00c0dd l\u00e4ng\u00fc\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Add notes about this learner": "\u00c0dd n\u00f6t\u00e9s \u00e4\u00df\u00f6\u00fct th\u00efs l\u00e9\u00e4rn\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "Add students to this cohort": "\u00c0dd st\u00fcd\u00e9nts t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", @@ -196,6 +197,8 @@ "Adjust video volume": "\u00c0dj\u00fcst v\u00efd\u00e9\u00f6 v\u00f6l\u00fcm\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", "Admin": "\u00c0dm\u00efn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "Advanced": "\u00c0dv\u00e4n\u00e7\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", + "After the subsection\\'s due date has passed, learners can no longer access its content. The subsection remains included in grade calculations.": "\u00c0ft\u00e9r th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n\\'s d\u00fc\u00e9 d\u00e4t\u00e9 h\u00e4s p\u00e4ss\u00e9d, l\u00e9\u00e4rn\u00e9rs \u00e7\u00e4n n\u00f6 l\u00f6ng\u00e9r \u00e4\u00e7\u00e7\u00e9ss \u00efts \u00e7\u00f6nt\u00e9nt. Th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n r\u00e9m\u00e4\u00efns \u00efn\u00e7l\u00fcd\u00e9d \u00efn gr\u00e4d\u00e9 \u00e7\u00e4l\u00e7\u00fcl\u00e4t\u00ef\u00f6ns. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c \u03b9\u2202 \u0454\u0455\u0442#", + "After you publish this program, you cannot add or remove course codes or remove course runs.": "\u00c0ft\u00e9r \u00fd\u00f6\u00fc p\u00fc\u00dfl\u00efsh th\u00efs pr\u00f6gr\u00e4m, \u00fd\u00f6\u00fc \u00e7\u00e4nn\u00f6t \u00e4dd \u00f6r r\u00e9m\u00f6v\u00e9 \u00e7\u00f6\u00fcrs\u00e9 \u00e7\u00f6d\u00e9s \u00f6r r\u00e9m\u00f6v\u00e9 \u00e7\u00f6\u00fcrs\u00e9 r\u00fcns. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Align center": "\u00c0l\u00efgn \u00e7\u00e9nt\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Align left": "\u00c0l\u00efgn l\u00e9ft \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Align right": "\u00c0l\u00efgn r\u00efght \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", @@ -254,8 +257,6 @@ "Answer hidden": "\u00c0nsw\u00e9r h\u00efdd\u00e9n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Answer:": "\u00c0nsw\u00e9r: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Any content that has listed this content as a prerequisite will also have access limitations removed.": "\u00c0n\u00fd \u00e7\u00f6nt\u00e9nt th\u00e4t h\u00e4s l\u00efst\u00e9d th\u00efs \u00e7\u00f6nt\u00e9nt \u00e4s \u00e4 pr\u00e9r\u00e9q\u00fc\u00efs\u00eft\u00e9 w\u00efll \u00e4ls\u00f6 h\u00e4v\u00e9 \u00e4\u00e7\u00e7\u00e9ss l\u00efm\u00eft\u00e4t\u00ef\u00f6ns r\u00e9m\u00f6v\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", - "Any subsections or units that are explicitly hidden from students will remain hidden after you clear this option for the section.": "\u00c0n\u00fd s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6ns \u00f6r \u00fcn\u00efts th\u00e4t \u00e4r\u00e9 \u00e9xpl\u00ef\u00e7\u00eftl\u00fd h\u00efdd\u00e9n fr\u00f6m st\u00fcd\u00e9nts w\u00efll r\u00e9m\u00e4\u00efn h\u00efdd\u00e9n \u00e4ft\u00e9r \u00fd\u00f6\u00fc \u00e7l\u00e9\u00e4r th\u00efs \u00f6pt\u00ef\u00f6n f\u00f6r th\u00e9 s\u00e9\u00e7t\u00ef\u00f6n. \u2c60'\u03c3#", - "Any units that are explicitly hidden from students will remain hidden after you clear this option for the subsection.": "\u00c0n\u00fd \u00fcn\u00efts th\u00e4t \u00e4r\u00e9 \u00e9xpl\u00ef\u00e7\u00eftl\u00fd h\u00efdd\u00e9n fr\u00f6m st\u00fcd\u00e9nts w\u00efll r\u00e9m\u00e4\u00efn h\u00efdd\u00e9n \u00e4ft\u00e9r \u00fd\u00f6\u00fc \u00e7l\u00e9\u00e4r th\u00efs \u00f6pt\u00ef\u00f6n f\u00f6r th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Are you having trouble finding a team to join?": "\u00c0r\u00e9 \u00fd\u00f6\u00fc h\u00e4v\u00efng tr\u00f6\u00fc\u00dfl\u00e9 f\u00efnd\u00efng \u00e4 t\u00e9\u00e4m t\u00f6 j\u00f6\u00efn? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Are you sure you want to delete this comment?": "\u00c0r\u00e9 \u00fd\u00f6\u00fc s\u00fcr\u00e9 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 d\u00e9l\u00e9t\u00e9 th\u00efs \u00e7\u00f6mm\u00e9nt? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Are you sure you want to delete this page? This action cannot be undone.": "\u00c0r\u00e9 \u00fd\u00f6\u00fc s\u00fcr\u00e9 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 d\u00e9l\u00e9t\u00e9 th\u00efs p\u00e4g\u00e9? Th\u00efs \u00e4\u00e7t\u00ef\u00f6n \u00e7\u00e4nn\u00f6t \u00df\u00e9 \u00fcnd\u00f6n\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", @@ -304,7 +305,6 @@ "Bulk Exceptions": "B\u00fclk \u00c9x\u00e7\u00e9pt\u00ef\u00f6ns \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Bullet list": "B\u00fcll\u00e9t l\u00efst \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Bulleted List (Ctrl+U)": "B\u00fcll\u00e9t\u00e9d L\u00efst (\u00c7trl+\u00db) \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", - "By default, submitted exams are available for review after the due date has passed. Select this option to keep exams hidden after that date.": "B\u00fd d\u00e9f\u00e4\u00fclt, s\u00fc\u00dfm\u00eftt\u00e9d \u00e9x\u00e4ms \u00e4r\u00e9 \u00e4v\u00e4\u00efl\u00e4\u00dfl\u00e9 f\u00f6r r\u00e9v\u00ef\u00e9w \u00e4ft\u00e9r th\u00e9 d\u00fc\u00e9 d\u00e4t\u00e9 h\u00e4s p\u00e4ss\u00e9d. S\u00e9l\u00e9\u00e7t th\u00efs \u00f6pt\u00ef\u00f6n t\u00f6 k\u00e9\u00e9p \u00e9x\u00e4ms h\u00efdd\u00e9n \u00e4ft\u00e9r th\u00e4t d\u00e4t\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c \u03b9\u2202 \u0454\u0455\u0442 \u0142#", "By: Community TA": "B\u00fd: \u00c7\u00f6mm\u00fcn\u00eft\u00fd T\u00c0 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", "By: Staff": "B\u00fd: St\u00e4ff \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Can we match the photo you took with the one on your ID?": "\u00c7\u00e4n w\u00e9 m\u00e4t\u00e7h th\u00e9 ph\u00f6t\u00f6 \u00fd\u00f6\u00fc t\u00f6\u00f6k w\u00efth th\u00e9 \u00f6n\u00e9 \u00f6n \u00fd\u00f6\u00fcr \u00ccD? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", @@ -336,7 +336,7 @@ "Change Manually": "\u00c7h\u00e4ng\u00e9 M\u00e4n\u00fc\u00e4ll\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Change My Email Address": "\u00c7h\u00e4ng\u00e9 M\u00fd \u00c9m\u00e4\u00efl \u00c0ddr\u00e9ss \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3#", "Change image": "\u00c7h\u00e4ng\u00e9 \u00efm\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", - "Change the settings for %(display_name)s": "\u00c7h\u00e4ng\u00e9 th\u00e9 s\u00e9tt\u00efngs f\u00f6r %(display_name)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", + "Change the settings for {display_name}": "\u00c7h\u00e4ng\u00e9 th\u00e9 s\u00e9tt\u00efngs f\u00f6r {display_name} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "Chapter Asset": "\u00c7h\u00e4pt\u00e9r \u00c0ss\u00e9t \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Chapter Name": "\u00c7h\u00e4pt\u00e9r N\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Chapter information": "\u00c7h\u00e4pt\u00e9r \u00efnf\u00f6rm\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", @@ -431,7 +431,7 @@ "Correct failed component": "\u00c7\u00f6rr\u00e9\u00e7t f\u00e4\u00efl\u00e9d \u00e7\u00f6mp\u00f6n\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Could not find Certificate Exception in white list. Please refresh the page and try again": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd \u00c7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 \u00c9x\u00e7\u00e9pt\u00ef\u00f6n \u00efn wh\u00eft\u00e9 l\u00efst. Pl\u00e9\u00e4s\u00e9 r\u00e9fr\u00e9sh th\u00e9 p\u00e4g\u00e9 \u00e4nd tr\u00fd \u00e4g\u00e4\u00efn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Could not find Certificate Invalidation in the list. Please refresh the page and try again": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd \u00c7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 \u00ccnv\u00e4l\u00efd\u00e4t\u00ef\u00f6n \u00efn th\u00e9 l\u00efst. Pl\u00e9\u00e4s\u00e9 r\u00e9fr\u00e9sh th\u00e9 p\u00e4g\u00e9 \u00e4nd tr\u00fd \u00e4g\u00e4\u00efn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", - "Could not find a user with username or email address '<%= identifier %>'.": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd \u00e4 \u00fcs\u00e9r w\u00efth \u00fcs\u00e9rn\u00e4m\u00e9 \u00f6r \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss '<%= identifier %>'. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", + "Could not find a user with username or email address '<%- identifier %>'.": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd \u00e4 \u00fcs\u00e9r w\u00efth \u00fcs\u00e9rn\u00e4m\u00e9 \u00f6r \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss '<%- identifier %>'. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Could not find the specified string.": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd th\u00e9 sp\u00e9\u00e7\u00eff\u00ef\u00e9d str\u00efng. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "Could not find users associated with the following identifiers:": "\u00c7\u00f6\u00fcld n\u00f6t f\u00efnd \u00fcs\u00e9rs \u00e4ss\u00f6\u00e7\u00ef\u00e4t\u00e9d w\u00efth th\u00e9 f\u00f6ll\u00f6w\u00efng \u00efd\u00e9nt\u00eff\u00ef\u00e9rs: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Could not parse certificate JSON. %(message)s": "\u00c7\u00f6\u00fcld n\u00f6t p\u00e4rs\u00e9 \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 JS\u00d6N. %(message)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", @@ -442,6 +442,7 @@ "Country of residence": "\u00c7\u00f6\u00fcntr\u00fd \u00f6f r\u00e9s\u00efd\u00e9n\u00e7\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Country or Region": "\u00c7\u00f6\u00fcntr\u00fd \u00f6r R\u00e9g\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Course": "\u00c7\u00f6\u00fcrs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", + "Course Code": "\u00c7\u00f6\u00fcrs\u00e9 \u00c7\u00f6d\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Course Credit Requirements": "\u00c7\u00f6\u00fcrs\u00e9 \u00c7r\u00e9d\u00eft R\u00e9q\u00fc\u00efr\u00e9m\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Course End": "\u00c7\u00f6\u00fcrs\u00e9 \u00c9nd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Course Handouts": "\u00c7\u00f6\u00fcrs\u00e9 H\u00e4nd\u00f6\u00fcts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -461,6 +462,7 @@ "Create": "\u00c7r\u00e9\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Create Re-run": "\u00c7r\u00e9\u00e4t\u00e9 R\u00e9-r\u00fcn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to your existing account": "\u00c7r\u00e9\u00e4t\u00e9 \u00e4 %(link_start)sM\u00f6z\u00efll\u00e4 B\u00e4\u00e7kp\u00e4\u00e7k%(link_end)s \u00e4\u00e7\u00e7\u00f6\u00fcnt, \u00f6r l\u00f6g \u00efn t\u00f6 \u00fd\u00f6\u00fcr \u00e9x\u00efst\u00efng \u00e4\u00e7\u00e7\u00f6\u00fcnt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", + "Create a New Program": "\u00c7r\u00e9\u00e4t\u00e9 \u00e4 N\u00e9w Pr\u00f6gr\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Create a New Team": "\u00c7r\u00e9\u00e4t\u00e9 \u00e4 N\u00e9w T\u00e9\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Create a content group": "\u00c7r\u00e9\u00e4t\u00e9 \u00e4 \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcp \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "Create a new account": "\u00c7r\u00e9\u00e4t\u00e9 \u00e4 n\u00e9w \u00e4\u00e7\u00e7\u00f6\u00fcnt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", @@ -497,6 +499,8 @@ "Delete Page Confirmation": "D\u00e9l\u00e9t\u00e9 P\u00e4g\u00e9 \u00c7\u00f6nf\u00efrm\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Delete Team": "D\u00e9l\u00e9t\u00e9 T\u00e9\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Delete column": "D\u00e9l\u00e9t\u00e9 \u00e7\u00f6l\u00fcmn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", + "Delete course": "D\u00e9l\u00e9t\u00e9 \u00e7\u00f6\u00fcrs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", + "Delete course run": "D\u00e9l\u00e9t\u00e9 \u00e7\u00f6\u00fcrs\u00e9 r\u00fcn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Delete row": "D\u00e9l\u00e9t\u00e9 r\u00f6w \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Delete student '<%= student_id %>'s state on problem '<%= problem_id %>'?": "D\u00e9l\u00e9t\u00e9 st\u00fcd\u00e9nt '<%= student_id %>'s st\u00e4t\u00e9 \u00f6n pr\u00f6\u00dfl\u00e9m '<%= problem_id %>'? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Delete table": "D\u00e9l\u00e9t\u00e9 t\u00e4\u00dfl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", @@ -568,6 +572,12 @@ "Edit Your Name": "\u00c9d\u00eft \u00dd\u00f6\u00fcr N\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", "Edit post title": "\u00c9d\u00eft p\u00f6st t\u00eftl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Edit the name": "\u00c9d\u00eft th\u00e9 n\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", + "Edit the program marketing slug": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m m\u00e4rk\u00e9t\u00efng sl\u00fcg \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", + "Edit the program subtitle": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m s\u00fc\u00dft\u00eftl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", + "Edit the program title": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m t\u00eftl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", + "Edit the program\\'s marketing slug.": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m\\'s m\u00e4rk\u00e9t\u00efng sl\u00fcg. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", + "Edit the program\\'s name.": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m\\'s n\u00e4m\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", + "Edit the program\\'s subtitle.": "\u00c9d\u00eft th\u00e9 pr\u00f6gr\u00e4m\\'s s\u00fc\u00dft\u00eftl\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "Edit this certificate?": "\u00c9d\u00eft th\u00efs \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "Editable": "\u00c9d\u00eft\u00e4\u00dfl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Editing comment": "\u00c9d\u00eft\u00efng \u00e7\u00f6mm\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -652,13 +662,11 @@ "Error: Import failed.": "\u00c9rr\u00f6r: \u00ccmp\u00f6rt f\u00e4\u00efl\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Error: Replacing failed.": "\u00c9rr\u00f6r: R\u00e9pl\u00e4\u00e7\u00efng f\u00e4\u00efl\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Error: Uploading failed.": "\u00c9rr\u00f6r: \u00dbpl\u00f6\u00e4d\u00efng f\u00e4\u00efl\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", - "Error: User '<%= username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u00c9rr\u00f6r: \u00dbs\u00e9r '<%= username %>' h\u00e4s n\u00f6t \u00fd\u00e9t \u00e4\u00e7t\u00efv\u00e4t\u00e9d th\u00e9\u00efr \u00e4\u00e7\u00e7\u00f6\u00fcnt. \u00dbs\u00e9rs m\u00fcst \u00e7r\u00e9\u00e4t\u00e9 \u00e4nd \u00e4\u00e7t\u00efv\u00e4t\u00e9 th\u00e9\u00efr \u00e4\u00e7\u00e7\u00f6\u00fcnts \u00df\u00e9f\u00f6r\u00e9 th\u00e9\u00fd \u00e7\u00e4n \u00df\u00e9 \u00e4ss\u00efgn\u00e9d \u00e4 r\u00f6l\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c \u03b9\u2202 \u0454\u0455\u0442 \u0142\u03b1\u0432\u03c3\u044f#", + "Error: User '<%- username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u00c9rr\u00f6r: \u00dbs\u00e9r '<%- username %>' h\u00e4s n\u00f6t \u00fd\u00e9t \u00e4\u00e7t\u00efv\u00e4t\u00e9d th\u00e9\u00efr \u00e4\u00e7\u00e7\u00f6\u00fcnt. \u00dbs\u00e9rs m\u00fcst \u00e7r\u00e9\u00e4t\u00e9 \u00e4nd \u00e4\u00e7t\u00efv\u00e4t\u00e9 th\u00e9\u00efr \u00e4\u00e7\u00e7\u00f6\u00fcnts \u00df\u00e9f\u00f6r\u00e9 th\u00e9\u00fd \u00e7\u00e4n \u00df\u00e9 \u00e4ss\u00efgn\u00e9d \u00e4 r\u00f6l\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c \u03b9\u2202 \u0454\u0455\u0442 \u0142\u03b1\u0432\u03c3\u044f#", "Error: You cannot remove yourself from the Instructor group!": "\u00c9rr\u00f6r: \u00dd\u00f6\u00fc \u00e7\u00e4nn\u00f6t r\u00e9m\u00f6v\u00e9 \u00fd\u00f6\u00fcrs\u00e9lf fr\u00f6m th\u00e9 \u00ccnstr\u00fc\u00e7t\u00f6r gr\u00f6\u00fcp! \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Errors": "\u00c9rr\u00f6rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Everyone who has staff privileges in this course": "\u00c9v\u00e9r\u00fd\u00f6n\u00e9 wh\u00f6 h\u00e4s st\u00e4ff pr\u00efv\u00efl\u00e9g\u00e9s \u00efn th\u00efs \u00e7\u00f6\u00fcrs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Exam Types": "\u00c9x\u00e4m T\u00fdp\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", - "Exam will be visible after due date": "\u00c9x\u00e4m w\u00efll \u00df\u00e9 v\u00efs\u00ef\u00dfl\u00e9 \u00e4ft\u00e9r d\u00fc\u00e9 d\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", - "Exam will remain hidden after due date": "\u00c9x\u00e4m w\u00efll r\u00e9m\u00e4\u00efn h\u00efdd\u00e9n \u00e4ft\u00e9r d\u00fc\u00e9 d\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "Exception Granted": "\u00c9x\u00e7\u00e9pt\u00ef\u00f6n Gr\u00e4nt\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Exit full browser": "\u00c9x\u00eft f\u00fcll \u00dfr\u00f6ws\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Expand All": "\u00c9xp\u00e4nd \u00c0ll \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", @@ -701,6 +709,7 @@ "Forgot password?": "F\u00f6rg\u00f6t p\u00e4ssw\u00f6rd? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", "Format": "F\u00f6rm\u00e4t \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Formats": "F\u00f6rm\u00e4ts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", + "Free text notes": "Fr\u00e9\u00e9 t\u00e9xt n\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Frequently Asked Questions": "Fr\u00e9q\u00fc\u00e9ntl\u00fd \u00c0sk\u00e9d Q\u00fc\u00e9st\u00ef\u00f6ns \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Full Name": "F\u00fcll N\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Full Profile": "F\u00fcll Pr\u00f6f\u00efl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", @@ -757,10 +766,11 @@ "Hide Answer": "H\u00efd\u00e9 \u00c0nsw\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Hide Deprecated Settings": "H\u00efd\u00e9 D\u00e9pr\u00e9\u00e7\u00e4t\u00e9d S\u00e9tt\u00efngs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Hide Discussion": "H\u00efd\u00e9 D\u00efs\u00e7\u00fcss\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", - "Hide Exam After Due Date": "H\u00efd\u00e9 \u00c9x\u00e4m \u00c0ft\u00e9r D\u00fc\u00e9 D\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Hide Previews": "H\u00efd\u00e9 Pr\u00e9v\u00ef\u00e9ws \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Hide closed captions": "H\u00efd\u00e9 \u00e7l\u00f6s\u00e9d \u00e7\u00e4pt\u00ef\u00f6ns \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", - "Hide from students": "H\u00efd\u00e9 fr\u00f6m st\u00fcd\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", + "Hide content after due date": "H\u00efd\u00e9 \u00e7\u00f6nt\u00e9nt \u00e4ft\u00e9r d\u00fc\u00e9 d\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", + "Hide entire subsection": "H\u00efd\u00e9 \u00e9nt\u00efr\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", + "Hide from learners": "H\u00efd\u00e9 fr\u00f6m l\u00e9\u00e4rn\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "Hide notes": "H\u00efd\u00e9 n\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Hiding from Students": "H\u00efd\u00efng fr\u00f6m St\u00fcd\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "High Definition": "H\u00efgh D\u00e9f\u00efn\u00eft\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -774,13 +784,13 @@ "ID": "\u00ccD \u2c60'\u03c3\u044f#", "ID-Verification is not required for this Professional Education course.": "\u00ccD-V\u00e9r\u00eff\u00ef\u00e7\u00e4t\u00ef\u00f6n \u00efs n\u00f6t r\u00e9q\u00fc\u00efr\u00e9d f\u00f6r th\u00efs Pr\u00f6f\u00e9ss\u00ef\u00f6n\u00e4l \u00c9d\u00fc\u00e7\u00e4t\u00ef\u00f6n \u00e7\u00f6\u00fcrs\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "Identity Verification In Progress": "\u00ccd\u00e9nt\u00eft\u00fd V\u00e9r\u00eff\u00ef\u00e7\u00e4t\u00ef\u00f6n \u00ccn Pr\u00f6gr\u00e9ss \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454#", - "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students.": "\u00ccf th\u00e9 \u00fcn\u00eft w\u00e4s pr\u00e9v\u00ef\u00f6\u00fcsl\u00fd p\u00fc\u00dfl\u00efsh\u00e9d \u00e4nd r\u00e9l\u00e9\u00e4s\u00e9d t\u00f6 st\u00fcd\u00e9nts, \u00e4n\u00fd \u00e7h\u00e4ng\u00e9s \u00fd\u00f6\u00fc m\u00e4d\u00e9 t\u00f6 th\u00e9 \u00fcn\u00eft wh\u00e9n \u00eft w\u00e4s h\u00efdd\u00e9n w\u00efll n\u00f6w \u00df\u00e9 v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 st\u00fcd\u00e9nts. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c #", + "If the unit was previously published and released to learners, any changes you made to the unit when it was hidden will now be visible to learners.": "\u00ccf th\u00e9 \u00fcn\u00eft w\u00e4s pr\u00e9v\u00ef\u00f6\u00fcsl\u00fd p\u00fc\u00dfl\u00efsh\u00e9d \u00e4nd r\u00e9l\u00e9\u00e4s\u00e9d t\u00f6 l\u00e9\u00e4rn\u00e9rs, \u00e4n\u00fd \u00e7h\u00e4ng\u00e9s \u00fd\u00f6\u00fc m\u00e4d\u00e9 t\u00f6 th\u00e9 \u00fcn\u00eft wh\u00e9n \u00eft w\u00e4s h\u00efdd\u00e9n w\u00efll n\u00f6w \u00df\u00e9 v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 l\u00e9\u00e4rn\u00e9rs. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c #", "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?": "\u00ccf th\u00e9 \u00fcn\u00eft w\u00e4s pr\u00e9v\u00ef\u00f6\u00fcsl\u00fd p\u00fc\u00dfl\u00efsh\u00e9d \u00e4nd r\u00e9l\u00e9\u00e4s\u00e9d t\u00f6 st\u00fcd\u00e9nts, \u00e4n\u00fd \u00e7h\u00e4ng\u00e9s \u00fd\u00f6\u00fc m\u00e4d\u00e9 t\u00f6 th\u00e9 \u00fcn\u00eft wh\u00e9n \u00eft w\u00e4s h\u00efdd\u00e9n w\u00efll n\u00f6w \u00df\u00e9 v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 st\u00fcd\u00e9nts. D\u00f6 \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 pr\u00f6\u00e7\u00e9\u00e9d? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9#", "If you do not yet have an account, use the button below to register.": "\u00ccf \u00fd\u00f6\u00fc d\u00f6 n\u00f6t \u00fd\u00e9t h\u00e4v\u00e9 \u00e4n \u00e4\u00e7\u00e7\u00f6\u00fcnt, \u00fcs\u00e9 th\u00e9 \u00df\u00fctt\u00f6n \u00df\u00e9l\u00f6w t\u00f6 r\u00e9g\u00efst\u00e9r. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "If you don't verify your identity now, you can still explore your course from your dashboard. You will receive periodic reminders from %(platformName)s to verify your identity.": "\u00ccf \u00fd\u00f6\u00fc d\u00f6n't v\u00e9r\u00eff\u00fd \u00fd\u00f6\u00fcr \u00efd\u00e9nt\u00eft\u00fd n\u00f6w, \u00fd\u00f6\u00fc \u00e7\u00e4n st\u00efll \u00e9xpl\u00f6r\u00e9 \u00fd\u00f6\u00fcr \u00e7\u00f6\u00fcrs\u00e9 fr\u00f6m \u00fd\u00f6\u00fcr d\u00e4sh\u00df\u00f6\u00e4rd. \u00dd\u00f6\u00fc w\u00efll r\u00e9\u00e7\u00e9\u00efv\u00e9 p\u00e9r\u00ef\u00f6d\u00ef\u00e7 r\u00e9m\u00efnd\u00e9rs fr\u00f6m %(platformName)s t\u00f6 v\u00e9r\u00eff\u00fd \u00fd\u00f6\u00fcr \u00efd\u00e9nt\u00eft\u00fd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454#", "If you leave, you can no longer post in this team's discussions. Your place will be available to another learner.": "\u00ccf \u00fd\u00f6\u00fc l\u00e9\u00e4v\u00e9, \u00fd\u00f6\u00fc \u00e7\u00e4n n\u00f6 l\u00f6ng\u00e9r p\u00f6st \u00efn th\u00efs t\u00e9\u00e4m's d\u00efs\u00e7\u00fcss\u00ef\u00f6ns. \u00dd\u00f6\u00fcr pl\u00e4\u00e7\u00e9 w\u00efll \u00df\u00e9 \u00e4v\u00e4\u00efl\u00e4\u00dfl\u00e9 t\u00f6 \u00e4n\u00f6th\u00e9r l\u00e9\u00e4rn\u00e9r. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "If you make significant changes, make sure you notify members of the team before making these changes.": "\u00ccf \u00fd\u00f6\u00fc m\u00e4k\u00e9 s\u00efgn\u00eff\u00ef\u00e7\u00e4nt \u00e7h\u00e4ng\u00e9s, m\u00e4k\u00e9 s\u00fcr\u00e9 \u00fd\u00f6\u00fc n\u00f6t\u00eff\u00fd m\u00e9m\u00df\u00e9rs \u00f6f th\u00e9 t\u00e9\u00e4m \u00df\u00e9f\u00f6r\u00e9 m\u00e4k\u00efng th\u00e9s\u00e9 \u00e7h\u00e4ng\u00e9s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", - "If you make this %(xblockType)s visible to students, students will be able to see its content after the release date has passed and you have published the unit.": "\u00ccf \u00fd\u00f6\u00fc m\u00e4k\u00e9 th\u00efs %(xblockType)s v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 st\u00fcd\u00e9nts, st\u00fcd\u00e9nts w\u00efll \u00df\u00e9 \u00e4\u00dfl\u00e9 t\u00f6 s\u00e9\u00e9 \u00efts \u00e7\u00f6nt\u00e9nt \u00e4ft\u00e9r th\u00e9 r\u00e9l\u00e9\u00e4s\u00e9 d\u00e4t\u00e9 h\u00e4s p\u00e4ss\u00e9d \u00e4nd \u00fd\u00f6\u00fc h\u00e4v\u00e9 p\u00fc\u00dfl\u00efsh\u00e9d th\u00e9 \u00fcn\u00eft. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9#", + "If you make this %(xblockType)s visible to learners, learners will be able to see its content after the release date has passed and you have published the unit. Only units that are explicitly hidden from learners will remain hidden after you clear this option for the %(xblockType)s.": "\u00ccf \u00fd\u00f6\u00fc m\u00e4k\u00e9 th\u00efs %(xblockType)s v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 l\u00e9\u00e4rn\u00e9rs, l\u00e9\u00e4rn\u00e9rs w\u00efll \u00df\u00e9 \u00e4\u00dfl\u00e9 t\u00f6 s\u00e9\u00e9 \u00efts \u00e7\u00f6nt\u00e9nt \u00e4ft\u00e9r th\u00e9 r\u00e9l\u00e9\u00e4s\u00e9 d\u00e4t\u00e9 h\u00e4s p\u00e4ss\u00e9d \u00e4nd \u00fd\u00f6\u00fc h\u00e4v\u00e9 p\u00fc\u00dfl\u00efsh\u00e9d th\u00e9 \u00fcn\u00eft. \u00d6nl\u00fd \u00fcn\u00efts th\u00e4t \u00e4r\u00e9 \u00e9xpl\u00ef\u00e7\u00eftl\u00fd h\u00efdd\u00e9n fr\u00f6m l\u00e9\u00e4rn\u00e9rs w\u00efll r\u00e9m\u00e4\u00efn h\u00efdd\u00e9n \u00e4ft\u00e9r \u00fd\u00f6\u00fc \u00e7l\u00e9\u00e4r th\u00efs \u00f6pt\u00ef\u00f6n f\u00f6r th\u00e9 %(xblockType)s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142#", "If you use the Advanced Editor, this problem will be converted to XML and you will not be able to return to the Simple Editor Interface.\n\nProceed to the Advanced Editor and convert this problem to XML?": "\u00ccf \u00fd\u00f6\u00fc \u00fcs\u00e9 th\u00e9 \u00c0dv\u00e4n\u00e7\u00e9d \u00c9d\u00eft\u00f6r, th\u00efs pr\u00f6\u00dfl\u00e9m w\u00efll \u00df\u00e9 \u00e7\u00f6nv\u00e9rt\u00e9d t\u00f6 XML \u00e4nd \u00fd\u00f6\u00fc w\u00efll n\u00f6t \u00df\u00e9 \u00e4\u00dfl\u00e9 t\u00f6 r\u00e9t\u00fcrn t\u00f6 th\u00e9 S\u00efmpl\u00e9 \u00c9d\u00eft\u00f6r \u00ccnt\u00e9rf\u00e4\u00e7\u00e9.\n\nPr\u00f6\u00e7\u00e9\u00e9d t\u00f6 th\u00e9 \u00c0dv\u00e4n\u00e7\u00e9d \u00c9d\u00eft\u00f6r \u00e4nd \u00e7\u00f6nv\u00e9rt th\u00efs pr\u00f6\u00dfl\u00e9m t\u00f6 XML? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1#", "Ignore": "\u00ccgn\u00f6r\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Ignore all": "\u00ccgn\u00f6r\u00e9 \u00e4ll \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", @@ -849,6 +859,8 @@ "Learn more about {license_name}": "L\u00e9\u00e4rn m\u00f6r\u00e9 \u00e4\u00df\u00f6\u00fct {license_name} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Learners are added to this cohort automatically.": "L\u00e9\u00e4rn\u00e9rs \u00e4r\u00e9 \u00e4dd\u00e9d t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u00e4\u00fct\u00f6m\u00e4t\u00ef\u00e7\u00e4ll\u00fd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Learners are added to this cohort only when you provide their email addresses or usernames on this page.": "L\u00e9\u00e4rn\u00e9rs \u00e4r\u00e9 \u00e4dd\u00e9d t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u00f6nl\u00fd wh\u00e9n \u00fd\u00f6\u00fc pr\u00f6v\u00efd\u00e9 th\u00e9\u00efr \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss\u00e9s \u00f6r \u00fcs\u00e9rn\u00e4m\u00e9s \u00f6n th\u00efs p\u00e4g\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", + "Learners do not see the subsection in the course outline. The subsection is not included in grade calculations.": "L\u00e9\u00e4rn\u00e9rs d\u00f6 n\u00f6t s\u00e9\u00e9 th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u00efn th\u00e9 \u00e7\u00f6\u00fcrs\u00e9 \u00f6\u00fctl\u00efn\u00e9. Th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u00efs n\u00f6t \u00efn\u00e7l\u00fcd\u00e9d \u00efn gr\u00e4d\u00e9 \u00e7\u00e4l\u00e7\u00fcl\u00e4t\u00ef\u00f6ns. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", + "Learners see the published subsection and can access its content.": "L\u00e9\u00e4rn\u00e9rs s\u00e9\u00e9 th\u00e9 p\u00fc\u00dfl\u00efsh\u00e9d s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u00e4nd \u00e7\u00e4n \u00e4\u00e7\u00e7\u00e9ss \u00efts \u00e7\u00f6nt\u00e9nt. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Learners who require verification must pass the selected checkpoint to see the content in this unit. Learners who do not require verification see this content by default.": "L\u00e9\u00e4rn\u00e9rs wh\u00f6 r\u00e9q\u00fc\u00efr\u00e9 v\u00e9r\u00eff\u00ef\u00e7\u00e4t\u00ef\u00f6n m\u00fcst p\u00e4ss th\u00e9 s\u00e9l\u00e9\u00e7t\u00e9d \u00e7h\u00e9\u00e7kp\u00f6\u00efnt t\u00f6 s\u00e9\u00e9 th\u00e9 \u00e7\u00f6nt\u00e9nt \u00efn th\u00efs \u00fcn\u00eft. L\u00e9\u00e4rn\u00e9rs wh\u00f6 d\u00f6 n\u00f6t r\u00e9q\u00fc\u00efr\u00e9 v\u00e9r\u00eff\u00ef\u00e7\u00e4t\u00ef\u00f6n s\u00e9\u00e9 th\u00efs \u00e7\u00f6nt\u00e9nt \u00df\u00fd d\u00e9f\u00e4\u00fclt. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3#", "Learning Outcome": "L\u00e9\u00e4rn\u00efng \u00d6\u00fct\u00e7\u00f6m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", "Leave Team": "L\u00e9\u00e4v\u00e9 T\u00e9\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", @@ -882,6 +894,7 @@ "L\u00f6\u00e4d n\u00e9xt %(num_items)s r\u00e9s\u00fclt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "L\u00f6\u00e4d n\u00e9xt %(num_items)s r\u00e9s\u00fclts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #" ], + "Load next {numResponses} responses": "L\u00f6\u00e4d n\u00e9xt {numResponses} r\u00e9sp\u00f6ns\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3#", "Loading": "L\u00f6\u00e4d\u00efng \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Loading content": "L\u00f6\u00e4d\u00efng \u00e7\u00f6nt\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Loading data...": "L\u00f6\u00e4d\u00efng d\u00e4t\u00e4... \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -910,6 +923,8 @@ "Mark as Answer": "M\u00e4rk \u00e4s \u00c0nsw\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", "Mark enrollment code as unused": "M\u00e4rk \u00e9nr\u00f6llm\u00e9nt \u00e7\u00f6d\u00e9 \u00e4s \u00fcn\u00fcs\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "Markdown Editing Help": "M\u00e4rkd\u00f6wn \u00c9d\u00eft\u00efng H\u00e9lp \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "Marketing Slug": "M\u00e4rk\u00e9t\u00efng Sl\u00fcg \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", + "Marketing Slug is required.": "M\u00e4rk\u00e9t\u00efng Sl\u00fcg \u00efs r\u00e9q\u00fc\u00efr\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "Match case": "M\u00e4t\u00e7h \u00e7\u00e4s\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Max file size exceeded": "M\u00e4x f\u00efl\u00e9 s\u00efz\u00e9 \u00e9x\u00e7\u00e9\u00e9d\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "Maximum": "M\u00e4x\u00efm\u00fcm \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", @@ -918,6 +933,7 @@ "Message:": "M\u00e9ss\u00e4g\u00e9: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Middle": "M\u00efddl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Minimum Score:": "M\u00efn\u00efm\u00fcm S\u00e7\u00f6r\u00e9: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", + "Mode: %(mode)s": "M\u00f6d\u00e9: %(mode)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Module state successfully deleted.": "M\u00f6d\u00fcl\u00e9 st\u00e4t\u00e9 s\u00fc\u00e7\u00e7\u00e9ssf\u00fcll\u00fd d\u00e9l\u00e9t\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", "More": "M\u00f6r\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", "Must complete verification checkpoint": "M\u00fcst \u00e7\u00f6mpl\u00e9t\u00e9 v\u00e9r\u00eff\u00ef\u00e7\u00e4t\u00ef\u00f6n \u00e7h\u00e9\u00e7kp\u00f6\u00efnt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", @@ -958,8 +974,8 @@ "No receipt available": "N\u00f6 r\u00e9\u00e7\u00e9\u00efpt \u00e4v\u00e4\u00efl\u00e4\u00dfl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "No results": "N\u00f6 r\u00e9s\u00fclts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "No results found for \"%(query_string)s\". Please try searching again.": "N\u00f6 r\u00e9s\u00fclts f\u00f6\u00fcnd f\u00f6r \"%(query_string)s\". Pl\u00e9\u00e4s\u00e9 tr\u00fd s\u00e9\u00e4r\u00e7h\u00efng \u00e4g\u00e4\u00efn. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", - "No results found for %(original_query)s. ": "N\u00f6 r\u00e9s\u00fclts f\u00f6\u00fcnd f\u00f6r %(original_query)s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "No results found for %(original_query)s. Showing results for %(suggested_query)s.": "N\u00f6 r\u00e9s\u00fclts f\u00f6\u00fcnd f\u00f6r %(original_query)s. Sh\u00f6w\u00efng r\u00e9s\u00fclts f\u00f6r %(suggested_query)s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", + "No results found for {original_query}. ": "N\u00f6 r\u00e9s\u00fclts f\u00f6\u00fcnd f\u00f6r {original_query}. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "No sources": "N\u00f6 s\u00f6\u00fcr\u00e7\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "No tasks currently running.": "N\u00f6 t\u00e4sks \u00e7\u00fcrr\u00e9ntl\u00fd r\u00fcnn\u00efng. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "No threads matched your query.": "N\u00f6 thr\u00e9\u00e4ds m\u00e4t\u00e7h\u00e9d \u00fd\u00f6\u00fcr q\u00fc\u00e9r\u00fd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", @@ -973,6 +989,7 @@ "Not in Use": "N\u00f6t \u00efn \u00dbs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Not selected": "N\u00f6t s\u00e9l\u00e9\u00e7t\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Note": "N\u00f6t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", + "Note: Do not hide graded assignments after they have been released.": "N\u00f6t\u00e9: D\u00f6 n\u00f6t h\u00efd\u00e9 gr\u00e4d\u00e9d \u00e4ss\u00efgnm\u00e9nts \u00e4ft\u00e9r th\u00e9\u00fd h\u00e4v\u00e9 \u00df\u00e9\u00e9n r\u00e9l\u00e9\u00e4s\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Note: Students can be in only one cohort. Adding students to this group overrides any previous group assignment.": "N\u00f6t\u00e9: St\u00fcd\u00e9nts \u00e7\u00e4n \u00df\u00e9 \u00efn \u00f6nl\u00fd \u00f6n\u00e9 \u00e7\u00f6h\u00f6rt. \u00c0dd\u00efng st\u00fcd\u00e9nts t\u00f6 th\u00efs gr\u00f6\u00fcp \u00f6v\u00e9rr\u00efd\u00e9s \u00e4n\u00fd pr\u00e9v\u00ef\u00f6\u00fcs gr\u00f6\u00fcp \u00e4ss\u00efgnm\u00e9nt. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f#", "Noted in:": "N\u00f6t\u00e9d \u00efn: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Notes": "N\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", @@ -1069,9 +1086,11 @@ "Please print this page for your records; it serves as your receipt. You will also receive an email with the same information.": "Pl\u00e9\u00e4s\u00e9 pr\u00efnt th\u00efs p\u00e4g\u00e9 f\u00f6r \u00fd\u00f6\u00fcr r\u00e9\u00e7\u00f6rds; \u00eft s\u00e9rv\u00e9s \u00e4s \u00fd\u00f6\u00fcr r\u00e9\u00e7\u00e9\u00efpt. \u00dd\u00f6\u00fc w\u00efll \u00e4ls\u00f6 r\u00e9\u00e7\u00e9\u00efv\u00e9 \u00e4n \u00e9m\u00e4\u00efl w\u00efth th\u00e9 s\u00e4m\u00e9 \u00efnf\u00f6rm\u00e4t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c #", "Please provide a description of the link destination.": "Pl\u00e9\u00e4s\u00e9 pr\u00f6v\u00efd\u00e9 \u00e4 d\u00e9s\u00e7r\u00efpt\u00ef\u00f6n \u00f6f th\u00e9 l\u00efnk d\u00e9st\u00efn\u00e4t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Please provide a valid URL.": "Pl\u00e9\u00e4s\u00e9 pr\u00f6v\u00efd\u00e9 \u00e4 v\u00e4l\u00efd \u00dbRL. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", + "Please select a Course Run": "Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4 \u00c7\u00f6\u00fcrs\u00e9 R\u00fcn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Please select a PDF file to upload.": "Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4 PDF f\u00efl\u00e9 t\u00f6 \u00fcpl\u00f6\u00e4d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", "Please select a course date": "Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4 \u00e7\u00f6\u00fcrs\u00e9 d\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "Please select a file in .srt format.": "Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4 f\u00efl\u00e9 \u00efn .srt f\u00f6rm\u00e4t. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", + "Please select a valid organization.": "Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4 v\u00e4l\u00efd \u00f6rg\u00e4n\u00efz\u00e4t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", "Please specify a reason.": "Pl\u00e9\u00e4s\u00e9 sp\u00e9\u00e7\u00eff\u00fd \u00e4 r\u00e9\u00e4s\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Please verify that you have uploaded a valid image (PNG and JPEG).": "Pl\u00e9\u00e4s\u00e9 v\u00e9r\u00eff\u00fd th\u00e4t \u00fd\u00f6\u00fc h\u00e4v\u00e9 \u00fcpl\u00f6\u00e4d\u00e9d \u00e4 v\u00e4l\u00efd \u00efm\u00e4g\u00e9 (PNG \u00e4nd JP\u00c9G). \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Please verify that your webcam is connected and that you have allowed your browser to access it.": "Pl\u00e9\u00e4s\u00e9 v\u00e9r\u00eff\u00fd th\u00e4t \u00fd\u00f6\u00fcr w\u00e9\u00df\u00e7\u00e4m \u00efs \u00e7\u00f6nn\u00e9\u00e7t\u00e9d \u00e4nd th\u00e4t \u00fd\u00f6\u00fc h\u00e4v\u00e9 \u00e4ll\u00f6w\u00e9d \u00fd\u00f6\u00fcr \u00dfr\u00f6ws\u00e9r t\u00f6 \u00e4\u00e7\u00e7\u00e9ss \u00eft. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", @@ -1108,12 +1127,14 @@ "Profile": "Pr\u00f6f\u00efl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Profile Image": "Pr\u00f6f\u00efl\u00e9 \u00ccm\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Profile image for {username}": "Pr\u00f6f\u00efl\u00e9 \u00efm\u00e4g\u00e9 f\u00f6r {username} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "Program type": "Pr\u00f6gr\u00e4m t\u00fdp\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Programs": "Pr\u00f6gr\u00e4ms \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Promote another member to Admin to remove your admin rights": "Pr\u00f6m\u00f6t\u00e9 \u00e4n\u00f6th\u00e9r m\u00e9m\u00df\u00e9r t\u00f6 \u00c0dm\u00efn t\u00f6 r\u00e9m\u00f6v\u00e9 \u00fd\u00f6\u00fcr \u00e4dm\u00efn r\u00efghts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Public": "P\u00fc\u00dfl\u00ef\u00e7 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Publish": "P\u00fc\u00dfl\u00efsh \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", - "Publish %(display_name)s": "P\u00fc\u00dfl\u00efsh %(display_name)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", - "Publish all unpublished changes for this %(item)s?": "P\u00fc\u00dfl\u00efsh \u00e4ll \u00fcnp\u00fc\u00dfl\u00efsh\u00e9d \u00e7h\u00e4ng\u00e9s f\u00f6r th\u00efs %(item)s? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", + "Publish all unpublished changes for this {item}?": "P\u00fc\u00dfl\u00efsh \u00e4ll \u00fcnp\u00fc\u00dfl\u00efsh\u00e9d \u00e7h\u00e4ng\u00e9s f\u00f6r th\u00efs {item}? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", + "Publish this program?": "P\u00fc\u00dfl\u00efsh th\u00efs pr\u00f6gr\u00e4m? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "Publish {display_name}": "P\u00fc\u00dfl\u00efsh {display_name} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Published (not yet released)": "P\u00fc\u00dfl\u00efsh\u00e9d (n\u00f6t \u00fd\u00e9t r\u00e9l\u00e9\u00e4s\u00e9d) \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "Published and Live": "P\u00fc\u00dfl\u00efsh\u00e9d \u00e4nd L\u00efv\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "Publishing": "P\u00fc\u00dfl\u00efsh\u00efng \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", @@ -1142,10 +1163,12 @@ "Released:": "R\u00e9l\u00e9\u00e4s\u00e9d: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Removal is in progress. To avoid errors, stay on this page until the process is complete.": "R\u00e9m\u00f6v\u00e4l \u00efs \u00efn pr\u00f6gr\u00e9ss. T\u00f6 \u00e4v\u00f6\u00efd \u00e9rr\u00f6rs, st\u00e4\u00fd \u00f6n th\u00efs p\u00e4g\u00e9 \u00fcnt\u00efl th\u00e9 pr\u00f6\u00e7\u00e9ss \u00efs \u00e7\u00f6mpl\u00e9t\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Remove": "R\u00e9m\u00f6v\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", + "Remove %(name)s from the program": "R\u00e9m\u00f6v\u00e9 %(name)s fr\u00f6m th\u00e9 pr\u00f6gr\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "Remove chapter %(chapterDisplayName)s": "R\u00e9m\u00f6v\u00e9 \u00e7h\u00e4pt\u00e9r %(chapterDisplayName)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "Remove from Invalidation Table": "R\u00e9m\u00f6v\u00e9 fr\u00f6m \u00ccnv\u00e4l\u00efd\u00e4t\u00ef\u00f6n T\u00e4\u00dfl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "Remove from List": "R\u00e9m\u00f6v\u00e9 fr\u00f6m L\u00efst \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", "Remove link": "R\u00e9m\u00f6v\u00e9 l\u00efnk \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", + "Remove run %(key)s from the program": "R\u00e9m\u00f6v\u00e9 r\u00fcn %(key)s fr\u00f6m th\u00e9 pr\u00f6gr\u00e4m \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "Remove subsection %(subsectionDisplayName)s": "R\u00e9m\u00f6v\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n %(subsectionDisplayName)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Remove this team member?": "R\u00e9m\u00f6v\u00e9 th\u00efs t\u00e9\u00e4m m\u00e9m\u00df\u00e9r? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "Remove unit %(unitName)s": "R\u00e9m\u00f6v\u00e9 \u00fcn\u00eft %(unitName)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -1190,8 +1213,10 @@ "Row properties": "R\u00f6w pr\u00f6p\u00e9rt\u00ef\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", "Row type": "R\u00f6w t\u00fdp\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Rows": "R\u00f6ws \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", + "Run %(key)s": "R\u00fcn %(key)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Save": "S\u00e4v\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", "Save Changes": "S\u00e4v\u00e9 \u00c7h\u00e4ng\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", + "Save Course": "S\u00e4v\u00e9 \u00c7\u00f6\u00fcrs\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "Save changes": "S\u00e4v\u00e9 \u00e7h\u00e4ng\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Saved cohort": "S\u00e4v\u00e9d \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Saving": "S\u00e4v\u00efng \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", @@ -1203,6 +1228,7 @@ "Search all posts": "S\u00e9\u00e4r\u00e7h \u00e4ll p\u00f6sts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#", "Search teams": "S\u00e9\u00e4r\u00e7h t\u00e9\u00e4ms \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Section": "S\u00e9\u00e7t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", + "Section Visibility": "S\u00e9\u00e7t\u00ef\u00f6n V\u00efs\u00ef\u00df\u00efl\u00eft\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "S\u00e9\u00e9 \u00e4ll t\u00e9\u00e4ms \u00efn \u00fd\u00f6\u00fcr \u00e7\u00f6\u00fcrs\u00e9, \u00f6rg\u00e4n\u00efz\u00e9d \u00df\u00fd t\u00f6p\u00ef\u00e7. J\u00f6\u00efn \u00e4 t\u00e9\u00e4m t\u00f6 \u00e7\u00f6ll\u00e4\u00df\u00f6r\u00e4t\u00e9 w\u00efth \u00f6th\u00e9r l\u00e9\u00e4rn\u00e9rs wh\u00f6 \u00e4r\u00e9 \u00efnt\u00e9r\u00e9st\u00e9d \u00efn th\u00e9 s\u00e4m\u00e9 t\u00f6p\u00ef\u00e7 \u00e4s \u00fd\u00f6\u00fc \u00e4r\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7\u03b9\u043c \u03b9\u2202#", "Select Course Run": "S\u00e9l\u00e9\u00e7t \u00c7\u00f6\u00fcrs\u00e9 R\u00fcn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Select a Content Group": "S\u00e9l\u00e9\u00e7t \u00e4 \u00c7\u00f6nt\u00e9nt Gr\u00f6\u00fcp \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", @@ -1212,6 +1238,7 @@ "Select a prerequisite subsection and enter a minimum score percentage to limit access to this subsection.": "S\u00e9l\u00e9\u00e7t \u00e4 pr\u00e9r\u00e9q\u00fc\u00efs\u00eft\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u00e4nd \u00e9nt\u00e9r \u00e4 m\u00efn\u00efm\u00fcm s\u00e7\u00f6r\u00e9 p\u00e9r\u00e7\u00e9nt\u00e4g\u00e9 t\u00f6 l\u00efm\u00eft \u00e4\u00e7\u00e7\u00e9ss t\u00f6 th\u00efs s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 #", "Select a time allotment for the exam. If it is over 24 hours, type in the amount of time. You can grant individual learners extra time to complete the exam through the Instructor Dashboard.": "S\u00e9l\u00e9\u00e7t \u00e4 t\u00efm\u00e9 \u00e4ll\u00f6tm\u00e9nt f\u00f6r th\u00e9 \u00e9x\u00e4m. \u00ccf \u00eft \u00efs \u00f6v\u00e9r 24 h\u00f6\u00fcrs, t\u00fdp\u00e9 \u00efn th\u00e9 \u00e4m\u00f6\u00fcnt \u00f6f t\u00efm\u00e9. \u00dd\u00f6\u00fc \u00e7\u00e4n gr\u00e4nt \u00efnd\u00efv\u00efd\u00fc\u00e4l l\u00e9\u00e4rn\u00e9rs \u00e9xtr\u00e4 t\u00efm\u00e9 t\u00f6 \u00e7\u00f6mpl\u00e9t\u00e9 th\u00e9 \u00e9x\u00e4m thr\u00f6\u00fcgh th\u00e9 \u00ccnstr\u00fc\u00e7t\u00f6r D\u00e4sh\u00df\u00f6\u00e4rd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f#", "Select all": "S\u00e9l\u00e9\u00e7t \u00e4ll \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", + "Select an organization": "S\u00e9l\u00e9\u00e7t \u00e4n \u00f6rg\u00e4n\u00efz\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "Select the course-wide discussion topics that you want to divide by cohort.": "S\u00e9l\u00e9\u00e7t th\u00e9 \u00e7\u00f6\u00fcrs\u00e9-w\u00efd\u00e9 d\u00efs\u00e7\u00fcss\u00ef\u00f6n t\u00f6p\u00ef\u00e7s th\u00e4t \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 d\u00efv\u00efd\u00e9 \u00df\u00fd \u00e7\u00f6h\u00f6rt. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "Select the time zone for displaying course dates. If you do not specify a ": "S\u00e9l\u00e9\u00e7t th\u00e9 t\u00efm\u00e9 z\u00f6n\u00e9 f\u00f6r d\u00efspl\u00e4\u00fd\u00efng \u00e7\u00f6\u00fcrs\u00e9 d\u00e4t\u00e9s. \u00ccf \u00fd\u00f6\u00fc d\u00f6 n\u00f6t sp\u00e9\u00e7\u00eff\u00fd \u00e4 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "Selected tab": "S\u00e9l\u00e9\u00e7t\u00e9d t\u00e4\u00df \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", @@ -1243,10 +1270,12 @@ "Show Discussion": "Sh\u00f6w D\u00efs\u00e7\u00fcss\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Show Previews": "Sh\u00f6w Pr\u00e9v\u00ef\u00e9ws \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Show blocks": "Sh\u00f6w \u00dfl\u00f6\u00e7ks \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", + "Show entire subsection": "Sh\u00f6w \u00e9nt\u00efr\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "Show invisible characters": "Sh\u00f6w \u00efnv\u00efs\u00ef\u00dfl\u00e9 \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Show me other ways to sign in or register": "Sh\u00f6w m\u00e9 \u00f6th\u00e9r w\u00e4\u00fds t\u00f6 s\u00efgn \u00efn \u00f6r r\u00e9g\u00efst\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Show notes": "Sh\u00f6w n\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Show posts by %(username)s.": "Sh\u00f6w p\u00f6sts \u00df\u00fd %(username)s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", + "Show posts by {username}.": "Sh\u00f6w p\u00f6sts \u00df\u00fd {username}. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "Showing all responses": "Sh\u00f6w\u00efng \u00e4ll r\u00e9sp\u00f6ns\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Showing first response": [ "Sh\u00f6w\u00efng f\u00efrst r\u00e9sp\u00f6ns\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", @@ -1269,8 +1298,10 @@ "Signatory field(s) has invalid data.": "S\u00efgn\u00e4t\u00f6r\u00fd f\u00ef\u00e9ld(s) h\u00e4s \u00efnv\u00e4l\u00efd d\u00e4t\u00e4. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "Signature Image": "S\u00efgn\u00e4t\u00fcr\u00e9 \u00ccm\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Skip": "Sk\u00efp \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", + "Slug used to generate links to the marketing site.": "Sl\u00fcg \u00fcs\u00e9d t\u00f6 g\u00e9n\u00e9r\u00e4t\u00e9 l\u00efnks t\u00f6 th\u00e9 m\u00e4rk\u00e9t\u00efng s\u00eft\u00e9. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Some Rights Reserved": "S\u00f6m\u00e9 R\u00efghts R\u00e9s\u00e9rv\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", "Some content in this unit is visible only to particular content groups": "S\u00f6m\u00e9 \u00e7\u00f6nt\u00e9nt \u00efn th\u00efs \u00fcn\u00eft \u00efs v\u00efs\u00ef\u00dfl\u00e9 \u00f6nl\u00fd t\u00f6 p\u00e4rt\u00ef\u00e7\u00fcl\u00e4r \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcps \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", + "Some images in this post have been omitted": "S\u00f6m\u00e9 \u00efm\u00e4g\u00e9s \u00efn th\u00efs p\u00f6st h\u00e4v\u00e9 \u00df\u00e9\u00e9n \u00f6m\u00eftt\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Something went wrong changing this enrollment. Please try again.": "S\u00f6m\u00e9th\u00efng w\u00e9nt wr\u00f6ng \u00e7h\u00e4ng\u00efng th\u00efs \u00e9nr\u00f6llm\u00e9nt. Pl\u00e9\u00e4s\u00e9 tr\u00fd \u00e4g\u00e4\u00efn. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Sorry": "S\u00f6rr\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "Sorry, no results were found.": "S\u00f6rr\u00fd, n\u00f6 r\u00e9s\u00fclts w\u00e9r\u00e9 f\u00f6\u00fcnd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", @@ -1289,9 +1320,10 @@ "Square": "Sq\u00fc\u00e4r\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5#", "Staff": "St\u00e4ff \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "Staff Only": "St\u00e4ff \u00d6nl\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", - "Staff and Students": "St\u00e4ff \u00e4nd St\u00fcd\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", + "Staff and Learners": "St\u00e4ff \u00e4nd L\u00e9\u00e4rn\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", "Start": "St\u00e4rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "Start Date": "St\u00e4rt D\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", + "Start Date: %(date)s": "St\u00e4rt D\u00e4t\u00e9: %(date)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", "Start generating certificates for all students in this course?": "St\u00e4rt g\u00e9n\u00e9r\u00e4t\u00efng \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9s f\u00f6r \u00e4ll st\u00fcd\u00e9nts \u00efn th\u00efs \u00e7\u00f6\u00fcrs\u00e9? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Start of transcript. Skip to the end.": "St\u00e4rt \u00f6f tr\u00e4ns\u00e7r\u00efpt. Sk\u00efp t\u00f6 th\u00e9 \u00e9nd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "Start regenerating certificates for students in this course?": "St\u00e4rt r\u00e9g\u00e9n\u00e9r\u00e4t\u00efng \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9s f\u00f6r st\u00fcd\u00e9nts \u00efn th\u00efs \u00e7\u00f6\u00fcrs\u00e9? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", @@ -1309,7 +1341,7 @@ "Strikethrough": "Str\u00efk\u00e9thr\u00f6\u00fcgh \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Student": "St\u00fcd\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Student Removed from certificate white list successfully.": "St\u00fcd\u00e9nt R\u00e9m\u00f6v\u00e9d fr\u00f6m \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 wh\u00eft\u00e9 l\u00efst s\u00fc\u00e7\u00e7\u00e9ssf\u00fcll\u00fd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", - "Student Visibility": "St\u00fcd\u00e9nt V\u00efs\u00ef\u00df\u00efl\u00eft\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", + "Student email or username": "St\u00fcd\u00e9nt \u00e9m\u00e4\u00efl \u00f6r \u00fcs\u00e9rn\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Student username/email field is required and can not be empty. ": "St\u00fcd\u00e9nt \u00fcs\u00e9rn\u00e4m\u00e9/\u00e9m\u00e4\u00efl f\u00ef\u00e9ld \u00efs r\u00e9q\u00fc\u00efr\u00e9d \u00e4nd \u00e7\u00e4n n\u00f6t \u00df\u00e9 \u00e9mpt\u00fd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", "Studio's having trouble saving your work": "St\u00fcd\u00ef\u00f6's h\u00e4v\u00efng tr\u00f6\u00fc\u00dfl\u00e9 s\u00e4v\u00efng \u00fd\u00f6\u00fcr w\u00f6rk \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "Studio:": "St\u00fcd\u00ef\u00f6: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", @@ -1322,6 +1354,9 @@ "Submitted": "S\u00fc\u00dfm\u00eftt\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Subscript": "S\u00fc\u00dfs\u00e7r\u00efpt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "Subsection": "S\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", + "Subsection Visibility": "S\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n V\u00efs\u00ef\u00df\u00efl\u00eft\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "Subsection is hidden after due date": "S\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n \u00efs h\u00efdd\u00e9n \u00e4ft\u00e9r d\u00fc\u00e9 d\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", + "Subtitle": "S\u00fc\u00dft\u00eftl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Success": "S\u00fc\u00e7\u00e7\u00e9ss \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Success! Problem attempts reset for problem '<%= problem_id %>' and student '<%= student_id %>'.": "S\u00fc\u00e7\u00e7\u00e9ss! Pr\u00f6\u00dfl\u00e9m \u00e4tt\u00e9mpts r\u00e9s\u00e9t f\u00f6r pr\u00f6\u00dfl\u00e9m '<%= problem_id %>' \u00e4nd st\u00fcd\u00e9nt '<%= student_id %>'. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "Successfully deleted student state for user {user}": "S\u00fc\u00e7\u00e7\u00e9ssf\u00fcll\u00fd d\u00e9l\u00e9t\u00e9d st\u00fcd\u00e9nt st\u00e4t\u00e9 f\u00f6r \u00fcs\u00e9r {user} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", @@ -1416,13 +1451,16 @@ "The organization that this signatory belongs to, as it should appear on certificates.": "Th\u00e9 \u00f6rg\u00e4n\u00efz\u00e4t\u00ef\u00f6n th\u00e4t th\u00efs s\u00efgn\u00e4t\u00f6r\u00fd \u00df\u00e9l\u00f6ngs t\u00f6, \u00e4s \u00eft sh\u00f6\u00fcld \u00e4pp\u00e9\u00e4r \u00f6n \u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9s. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "The page \"{route}\" could not be found.": "Th\u00e9 p\u00e4g\u00e9 \"{route}\" \u00e7\u00f6\u00fcld n\u00f6t \u00df\u00e9 f\u00f6\u00fcnd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", "The photo of your face matches the photo on your ID.": "Th\u00e9 ph\u00f6t\u00f6 \u00f6f \u00fd\u00f6\u00fcr f\u00e4\u00e7\u00e9 m\u00e4t\u00e7h\u00e9s th\u00e9 ph\u00f6t\u00f6 \u00f6n \u00fd\u00f6\u00fcr \u00ccD. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", + "The public display name of the program.": "Th\u00e9 p\u00fc\u00dfl\u00ef\u00e7 d\u00efspl\u00e4\u00fd n\u00e4m\u00e9 \u00f6f th\u00e9 pr\u00f6gr\u00e4m. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "The raw error message is:": "Th\u00e9 r\u00e4w \u00e9rr\u00f6r m\u00e9ss\u00e4g\u00e9 \u00efs: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "The selected content group does not exist": "Th\u00e9 s\u00e9l\u00e9\u00e7t\u00e9d \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcp d\u00f6\u00e9s n\u00f6t \u00e9x\u00efst \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "The team \"{team}\" could not be found.": "Th\u00e9 t\u00e9\u00e4m \"{team}\" \u00e7\u00f6\u00fcld n\u00f6t \u00df\u00e9 f\u00f6\u00fcnd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", "The thread you selected has been deleted. Please select another thread.": "Th\u00e9 thr\u00e9\u00e4d \u00fd\u00f6\u00fc s\u00e9l\u00e9\u00e7t\u00e9d h\u00e4s \u00df\u00e9\u00e9n d\u00e9l\u00e9t\u00e9d. Pl\u00e9\u00e4s\u00e9 s\u00e9l\u00e9\u00e7t \u00e4n\u00f6th\u00e9r thr\u00e9\u00e4d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "The timed transcript for the first video file does not appear to be the same as the timed transcript for the second video file.": "Th\u00e9 t\u00efm\u00e9d tr\u00e4ns\u00e7r\u00efpt f\u00f6r th\u00e9 f\u00efrst v\u00efd\u00e9\u00f6 f\u00efl\u00e9 d\u00f6\u00e9s n\u00f6t \u00e4pp\u00e9\u00e4r t\u00f6 \u00df\u00e9 th\u00e9 s\u00e4m\u00e9 \u00e4s th\u00e9 t\u00efm\u00e9d tr\u00e4ns\u00e7r\u00efpt f\u00f6r th\u00e9 s\u00e9\u00e7\u00f6nd v\u00efd\u00e9\u00f6 f\u00efl\u00e9. \u2c60'\u03c3\u044f\u0454#", "The timed transcript for this video on edX is out of date, but YouTube has a current timed transcript for this video.": "Th\u00e9 t\u00efm\u00e9d tr\u00e4ns\u00e7r\u00efpt f\u00f6r th\u00efs v\u00efd\u00e9\u00f6 \u00f6n \u00e9dX \u00efs \u00f6\u00fct \u00f6f d\u00e4t\u00e9, \u00df\u00fct \u00dd\u00f6\u00fcT\u00fc\u00df\u00e9 h\u00e4s \u00e4 \u00e7\u00fcrr\u00e9nt t\u00efm\u00e9d tr\u00e4ns\u00e7r\u00efpt f\u00f6r th\u00efs v\u00efd\u00e9\u00f6. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", + "The title entered here will override the title set for the individual run of the course. It will be displayed on the XSeries progress page and in marketing presentations.": "Th\u00e9 t\u00eftl\u00e9 \u00e9nt\u00e9r\u00e9d h\u00e9r\u00e9 w\u00efll \u00f6v\u00e9rr\u00efd\u00e9 th\u00e9 t\u00eftl\u00e9 s\u00e9t f\u00f6r th\u00e9 \u00efnd\u00efv\u00efd\u00fc\u00e4l r\u00fcn \u00f6f th\u00e9 \u00e7\u00f6\u00fcrs\u00e9. \u00cct w\u00efll \u00df\u00e9 d\u00efspl\u00e4\u00fd\u00e9d \u00f6n th\u00e9 XS\u00e9r\u00ef\u00e9s pr\u00f6gr\u00e9ss p\u00e4g\u00e9 \u00e4nd \u00efn m\u00e4rk\u00e9t\u00efng pr\u00e9s\u00e9nt\u00e4t\u00ef\u00f6ns. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3#", "The topic \"{topic}\" could not be found.": "Th\u00e9 t\u00f6p\u00ef\u00e7 \"{topic}\" \u00e7\u00f6\u00fcld n\u00f6t \u00df\u00e9 f\u00f6\u00fcnd. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", + "The unique number that identifies your course within your organization, e.g. CS101.": "Th\u00e9 \u00fcn\u00efq\u00fc\u00e9 n\u00fcm\u00df\u00e9r th\u00e4t \u00efd\u00e9nt\u00eff\u00ef\u00e9s \u00fd\u00f6\u00fcr \u00e7\u00f6\u00fcrs\u00e9 w\u00efth\u00efn \u00fd\u00f6\u00fcr \u00f6rg\u00e4n\u00efz\u00e4t\u00ef\u00f6n, \u00e9.g. \u00c7S101. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.": "Th\u00e9 w\u00e9\u00efght \u00f6f \u00e4ll \u00e4ss\u00efgnm\u00e9nts \u00f6f th\u00efs t\u00fdp\u00e9 \u00e4s \u00e4 p\u00e9r\u00e7\u00e9nt\u00e4g\u00e9 \u00f6f th\u00e9 t\u00f6t\u00e4l gr\u00e4d\u00e9, f\u00f6r \u00e9x\u00e4mpl\u00e9, 40. D\u00f6 n\u00f6t \u00efn\u00e7l\u00fcd\u00e9 th\u00e9 p\u00e9r\u00e7\u00e9nt s\u00fdm\u00df\u00f6l. \u2c60'#", "The {cohortGroupName} cohort has been created. You can manually add students to this cohort below.": "Th\u00e9 {cohortGroupName} \u00e7\u00f6h\u00f6rt h\u00e4s \u00df\u00e9\u00e9n \u00e7r\u00e9\u00e4t\u00e9d. \u00dd\u00f6\u00fc \u00e7\u00e4n m\u00e4n\u00fc\u00e4ll\u00fd \u00e4dd st\u00fcd\u00e9nts t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u00df\u00e9l\u00f6w. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", "There are invalid keywords in your email. Check the following keywords and try again.": "Th\u00e9r\u00e9 \u00e4r\u00e9 \u00efnv\u00e4l\u00efd k\u00e9\u00fdw\u00f6rds \u00efn \u00fd\u00f6\u00fcr \u00e9m\u00e4\u00efl. \u00c7h\u00e9\u00e7k th\u00e9 f\u00f6ll\u00f6w\u00efng k\u00e9\u00fdw\u00f6rds \u00e4nd tr\u00fd \u00e4g\u00e4\u00efn. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", @@ -1548,6 +1586,8 @@ "Unfollow": "\u00dbnf\u00f6ll\u00f6w \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Ungraded": "\u00dbngr\u00e4d\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "Unit": "\u00dbn\u00eft \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", + "Unit Visibility": "\u00dbn\u00eft V\u00efs\u00ef\u00df\u00efl\u00eft\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", + "Units inherit the visibility setting of the subsection they are in. If you make this subsection visible to learners, published units that were previously hidden also become visible. Only units that were explicitly hidden remain hidden regardless of the option you select for this subsection.": "\u00dbn\u00efts \u00efnh\u00e9r\u00eft th\u00e9 v\u00efs\u00ef\u00df\u00efl\u00eft\u00fd s\u00e9tt\u00efng \u00f6f th\u00e9 s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n th\u00e9\u00fd \u00e4r\u00e9 \u00efn. \u00ccf \u00fd\u00f6\u00fc m\u00e4k\u00e9 th\u00efs s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n v\u00efs\u00ef\u00dfl\u00e9 t\u00f6 l\u00e9\u00e4rn\u00e9rs, p\u00fc\u00dfl\u00efsh\u00e9d \u00fcn\u00efts th\u00e4t w\u00e9r\u00e9 pr\u00e9v\u00ef\u00f6\u00fcsl\u00fd h\u00efdd\u00e9n \u00e4ls\u00f6 \u00df\u00e9\u00e7\u00f6m\u00e9 v\u00efs\u00ef\u00dfl\u00e9. \u00d6nl\u00fd \u00fcn\u00efts th\u00e4t w\u00e9r\u00e9 \u00e9xpl\u00ef\u00e7\u00eftl\u00fd h\u00efdd\u00e9n r\u00e9m\u00e4\u00efn h\u00efdd\u00e9n r\u00e9g\u00e4rdl\u00e9ss \u00f6f th\u00e9 \u00f6pt\u00ef\u00f6n \u00fd\u00f6\u00fc s\u00e9l\u00e9\u00e7t f\u00f6r th\u00efs s\u00fc\u00dfs\u00e9\u00e7t\u00ef\u00f6n. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9#", "Unknown": "\u00dbnkn\u00f6wn \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "Unknown Error Occurred.": "\u00dbnkn\u00f6wn \u00c9rr\u00f6r \u00d6\u00e7\u00e7\u00fcrr\u00e9d. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3#", "Unknown user: {user}": "\u00dbnkn\u00f6wn \u00fcs\u00e9r: {user} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", @@ -1581,6 +1621,7 @@ "Upload PDF": "\u00dbpl\u00f6\u00e4d PDF \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Upload Photo": "\u00dbpl\u00f6\u00e4d Ph\u00f6t\u00f6 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "Upload Signature Image": "\u00dbpl\u00f6\u00e4d S\u00efgn\u00e4t\u00fcr\u00e9 \u00ccm\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", + "Upload a CSV file": "\u00dbpl\u00f6\u00e4d \u00e4 \u00c7SV f\u00efl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "Upload a comma separated values (.csv) file that contains the usernames or email addresses of learners who have been given exceptions. Include the username or email address in the first comma separated field. You can include an optional note describing the reason for the exception in the second comma separated field.": "\u00dbpl\u00f6\u00e4d \u00e4 \u00e7\u00f6mm\u00e4 s\u00e9p\u00e4r\u00e4t\u00e9d v\u00e4l\u00fc\u00e9s (.\u00e7sv) f\u00efl\u00e9 th\u00e4t \u00e7\u00f6nt\u00e4\u00efns th\u00e9 \u00fcs\u00e9rn\u00e4m\u00e9s \u00f6r \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss\u00e9s \u00f6f l\u00e9\u00e4rn\u00e9rs wh\u00f6 h\u00e4v\u00e9 \u00df\u00e9\u00e9n g\u00efv\u00e9n \u00e9x\u00e7\u00e9pt\u00ef\u00f6ns. \u00ccn\u00e7l\u00fcd\u00e9 th\u00e9 \u00fcs\u00e9rn\u00e4m\u00e9 \u00f6r \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss \u00efn th\u00e9 f\u00efrst \u00e7\u00f6mm\u00e4 s\u00e9p\u00e4r\u00e4t\u00e9d f\u00ef\u00e9ld. \u00dd\u00f6\u00fc \u00e7\u00e4n \u00efn\u00e7l\u00fcd\u00e9 \u00e4n \u00f6pt\u00ef\u00f6n\u00e4l n\u00f6t\u00e9 d\u00e9s\u00e7r\u00ef\u00df\u00efng th\u00e9 r\u00e9\u00e4s\u00f6n f\u00f6r th\u00e9 \u00e9x\u00e7\u00e9pt\u00ef\u00f6n \u00efn th\u00e9 s\u00e9\u00e7\u00f6nd \u00e7\u00f6mm\u00e4 s\u00e9p\u00e4r\u00e4t\u00e9d f\u00ef\u00e9ld. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9#", "Upload a new PDF to \u201c<%= name %>\u201d": "\u00dbpl\u00f6\u00e4d \u00e4 n\u00e9w PDF t\u00f6 \u201c<%= name %>\u201d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "Upload an image": "\u00dbpl\u00f6\u00e4d \u00e4n \u00efm\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", @@ -1723,6 +1764,7 @@ "Will Be Visible To:": "W\u00efll B\u00e9 V\u00efs\u00ef\u00dfl\u00e9 T\u00f6: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", "Words: {0}": "W\u00f6rds: {0} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3#", "Would you like to sign in using your %(providerName)s credentials?": "W\u00f6\u00fcld \u00fd\u00f6\u00fc l\u00efk\u00e9 t\u00f6 s\u00efgn \u00efn \u00fcs\u00efng \u00fd\u00f6\u00fcr %(providerName)s \u00e7r\u00e9d\u00e9nt\u00ef\u00e4ls? \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1#", + "XSeries": "XS\u00e9r\u00ef\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "XSeries Program Certificates": "XS\u00e9r\u00ef\u00e9s Pr\u00f6gr\u00e4m \u00c7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "Year of Birth": "\u00dd\u00e9\u00e4r \u00f6f B\u00efrth \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "Yes, allow edits to the active Certificate": "\u00dd\u00e9s, \u00e4ll\u00f6w \u00e9d\u00efts t\u00f6 th\u00e9 \u00e4\u00e7t\u00efv\u00e9 \u00c7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", @@ -1840,6 +1882,7 @@ "certificate.credential_url": "\u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9.\u00e7r\u00e9d\u00e9nt\u00ef\u00e4l_\u00fcrl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "certificate.display_name": "\u00e7\u00e9rt\u00eff\u00ef\u00e7\u00e4t\u00e9.d\u00efspl\u00e4\u00fd_n\u00e4m\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "close": "\u00e7l\u00f6s\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", + "confirm": "\u00e7\u00f6nf\u00efrm \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "content group": "\u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcp \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "correct": "\u00e7\u00f6rr\u00e9\u00e7t \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", "country": "\u00e7\u00f6\u00fcntr\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c #", @@ -1868,6 +1911,7 @@ "formLabel": "f\u00f6rmL\u00e4\u00df\u00e9l \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "gettext(": "g\u00e9tt\u00e9xt( \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "group configuration": "gr\u00f6\u00fcp \u00e7\u00f6nf\u00efg\u00fcr\u00e4t\u00ef\u00f6n \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#", + "image omitted": "\u00efm\u00e4g\u00e9 \u00f6m\u00eftt\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", "incorrect": "\u00efn\u00e7\u00f6rr\u00e9\u00e7t \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", "language": "l\u00e4ng\u00fc\u00e4g\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "last activity": "l\u00e4st \u00e4\u00e7t\u00efv\u00eft\u00fd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#", @@ -1902,6 +1946,10 @@ "th\u00e9r\u00e9 \u00efs \u00e7\u00fcrr\u00e9ntl\u00fd %(numVotes)s v\u00f6t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", "th\u00e9r\u00e9 \u00e4r\u00e9 \u00e7\u00fcrr\u00e9ntl\u00fd %(numVotes)s v\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#" ], + "there is currently {numVotes} vote": [ + "th\u00e9r\u00e9 \u00efs \u00e7\u00fcrr\u00e9ntl\u00fd {numVotes} v\u00f6t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", + "th\u00e9r\u00e9 \u00e4r\u00e9 \u00e7\u00fcrr\u00e9ntl\u00fd {numVotes} v\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#" + ], "timed": "t\u00efm\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "title": "t\u00eftl\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455#", "type": "t\u00fdp\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9#", @@ -1911,7 +1959,24 @@ "username or email": "\u00fcs\u00e9rn\u00e4m\u00e9 \u00f6r \u00e9m\u00e4\u00efl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454#", "with %(release_date_from)s": "w\u00efth %(release_date_from)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", "with %(section_or_subsection)s": "w\u00efth %(section_or_subsection)s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", + "{0} is invalid": "{0} \u00efs \u00efnv\u00e4l\u00efd \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442#", + "{0} is required": "{0} \u00efs r\u00e9q\u00fc\u00efr\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", + "{0} must be a number": "{0} m\u00fcst \u00df\u00e9 \u00e4 n\u00fcm\u00df\u00e9r \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "{0} must be a valid email": "{0} m\u00fcst \u00df\u00e9 \u00e4 v\u00e4l\u00efd \u00e9m\u00e4\u00efl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", + "{0} must be a valid url": "{0} m\u00fcst \u00df\u00e9 \u00e4 v\u00e4l\u00efd \u00fcrl \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3#", + "{0} must be accepted": "{0} m\u00fcst \u00df\u00e9 \u00e4\u00e7\u00e7\u00e9pt\u00e9d \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, #", + "{0} must be at least {1} characters": "{0} m\u00fcst \u00df\u00e9 \u00e4t l\u00e9\u00e4st {1} \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", + "{0} must be at most {1} characters": "{0} m\u00fcst \u00df\u00e9 \u00e4t m\u00f6st {1} \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442#", + "{0} must be between {1} and {2}": "{0} m\u00fcst \u00df\u00e9 \u00df\u00e9tw\u00e9\u00e9n {1} \u00e4nd {2} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442#", + "{0} must be between {1} and {2} characters": "{0} m\u00fcst \u00df\u00e9 \u00df\u00e9tw\u00e9\u00e9n {1} \u00e4nd {2} \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", + "{0} must be greater than or equal to {1}": "{0} m\u00fcst \u00df\u00e9 gr\u00e9\u00e4t\u00e9r th\u00e4n \u00f6r \u00e9q\u00fc\u00e4l t\u00f6 {1} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", + "{0} must be less than or equal to {1}": "{0} m\u00fcst \u00df\u00e9 l\u00e9ss th\u00e4n \u00f6r \u00e9q\u00fc\u00e4l t\u00f6 {1} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", + "{0} must be one of: gettext( {1}": "{0} m\u00fcst \u00df\u00e9 \u00f6n\u00e9 \u00f6f: g\u00e9tt\u00e9xt( {1} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454#", + "{0} must be the same as {1}": "{0} m\u00fcst \u00df\u00e9 th\u00e9 s\u00e4m\u00e9 \u00e4s {1} \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454#", + "{0} must be {1} characters": "{0} m\u00fcst \u00df\u00e9 {1} \u00e7h\u00e4r\u00e4\u00e7t\u00e9rs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", + "{0} must only contain digits": "{0} m\u00fcst \u00f6nl\u00fd \u00e7\u00f6nt\u00e4\u00efn d\u00efg\u00efts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2#", "{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}Br\u00f6ws\u00e9 t\u00e9\u00e4ms \u00efn \u00f6th\u00e9r t\u00f6p\u00ef\u00e7s{span_end} \u00f6r {search_span_start}s\u00e9\u00e4r\u00e7h t\u00e9\u00e4ms{span_end} \u00efn th\u00efs t\u00f6p\u00ef\u00e7. \u00ccf \u00fd\u00f6\u00fc st\u00efll \u00e7\u00e4n't f\u00efnd \u00e4 t\u00e9\u00e4m t\u00f6 j\u00f6\u00efn, {create_span_start}\u00e7r\u00e9\u00e4t\u00e9 \u00e4 n\u00e9w t\u00e9\u00e4m \u00efn th\u00efs t\u00f6p\u00ef\u00e7{span_end}. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f \u03b1\u2202\u03b9\u03c1\u03b9\u0455\u03b9\u00a2\u03b9\u03b7g \u0454\u0142\u03b9\u0442, \u0455\u0454\u2202 \u2202\u03c3 \u0454\u03b9\u03c5\u0455\u043c\u03c3\u2202 \u0442\u0454\u043c\u03c1\u03c3\u044f \u03b9\u03b7\u00a2\u03b9\u2202\u03b9\u2202\u03c5\u03b7\u0442 \u03c5\u0442 \u0142\u03b1\u0432\u03c3\u044f\u0454 \u0454\u0442 \u2202\u03c3\u0142\u03c3\u044f\u0454 \u043c\u03b1g\u03b7\u03b1 \u03b1\u0142\u03b9q\u03c5\u03b1. \u03c5\u0442 \u0454\u03b7\u03b9\u043c \u03b1\u2202 \u043c\u03b9\u03b7\u03b9\u043c \u03bd\u0454\u03b7\u03b9\u03b1\u043c, q\u03c5\u03b9\u0455 \u03b7\u03c3\u0455\u0442\u044f\u03c5\u2202 \u0454\u03c7\u0454\u044f\u00a2\u03b9\u0442\u03b1\u0442\u03b9\u03c3\u03b7 \u03c5\u0142\u0142\u03b1\u043c\u00a2\u03c3 \u0142\u03b1\u0432\u03c3\u044f\u03b9\u0455 \u03b7\u03b9\u0455\u03b9 \u03c5\u0442 \u03b1\u0142\u03b9q\u03c5\u03b9\u03c1 \u0454\u03c7 \u0454\u03b1 \u00a2\u03c3\u043c\u043c\u03c3\u2202\u03c3 \u00a2\u03c3\u03b7\u0455\u0454q\u03c5\u03b1\u0442. \u2202\u03c5\u03b9\u0455 \u03b1\u03c5\u0442\u0454 \u03b9\u044f\u03c5\u044f\u0454 \u2202\u03c3\u0142\u03c3\u044f \u03b9\u03b7 \u044f\u0454\u03c1\u044f\u0454\u043d\u0454\u03b7\u2202\u0454\u044f\u03b9\u0442 \u03b9\u03b7 \u03bd\u03c3\u0142\u03c5\u03c1\u0442\u03b1\u0442\u0454 \u03bd\u0454\u0142\u03b9\u0442 \u0454\u0455\u0455\u0454 \u00a2\u03b9\u0142\u0142\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f\u0454 \u0454\u03c5 \u0192\u03c5g\u03b9\u03b1\u0442 \u03b7\u03c5\u0142\u0142\u03b1 \u03c1\u03b1\u044f\u03b9\u03b1\u0442\u03c5\u044f. \u0454\u03c7\u00a2\u0454\u03c1\u0442\u0454\u03c5\u044f \u0455\u03b9\u03b7\u0442 \u03c3\u00a2\u00a2\u03b1\u0454\u00a2\u03b1\u0442 \u00a2\u03c5\u03c1\u03b9\u2202\u03b1\u0442\u03b1\u0442 \u03b7\u03c3\u03b7 \u03c1\u044f\u03c3\u03b9\u2202\u0454\u03b7\u0442, \u0455\u03c5\u03b7\u0442 \u03b9\u03b7 \u00a2\u03c5\u0142\u03c1\u03b1 q\u03c5\u03b9 \u03c3\u0192\u0192\u03b9\u00a2\u03b9\u03b1 \u2202\u0454\u0455\u0454\u044f\u03c5\u03b7\u0442 \u043c\u03c3\u0142\u0142\u03b9\u0442 \u03b1\u03b7#", + "{display_name} Settings": "{display_name} S\u00e9tt\u00efngs \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", "{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} \u00efs \u00e4lr\u00e9\u00e4d\u00fd \u00f6n th\u00e9 {container} t\u00e9\u00e4m. R\u00e9\u00e7h\u00e9\u00e7k th\u00e9 \u00e9m\u00e4\u00efl \u00e4ddr\u00e9ss \u00eff \u00fd\u00f6\u00fc w\u00e4nt t\u00f6 \u00e4dd \u00e4 n\u00e9w m\u00e9m\u00df\u00e9r. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "{hours}:{minutes} (current UTC time)": "{hours}:{minutes} (\u00e7\u00fcrr\u00e9nt \u00dbT\u00c7 t\u00efm\u00e9) \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455#", "{numMoved} student was removed from {oldCohort}": [ @@ -1922,15 +1987,31 @@ "{numPresent} st\u00fcd\u00e9nt w\u00e4s \u00e4lr\u00e9\u00e4d\u00fd \u00efn th\u00e9 \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5#", "{numPresent} st\u00fcd\u00e9nts w\u00e9r\u00e9 \u00e4lr\u00e9\u00e4d\u00fd \u00efn th\u00e9 \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#" ], + "{numResponses} other response": [ + "{numResponses} \u00f6th\u00e9r r\u00e9sp\u00f6ns\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442#", + "{numResponses} \u00f6th\u00e9r r\u00e9sp\u00f6ns\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442,#" + ], + "{numResponses} response": [ + "{numResponses} r\u00e9sp\u00f6ns\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455#", + "{numResponses} r\u00e9sp\u00f6ns\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9#" + ], "{numUsersAdded} student has been added to this cohort": [ "{numUsersAdded} st\u00fcd\u00e9nt h\u00e4s \u00df\u00e9\u00e9n \u00e4dd\u00e9d t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #", "{numUsersAdded} st\u00fcd\u00e9nts h\u00e4v\u00e9 \u00df\u00e9\u00e9n \u00e4dd\u00e9d t\u00f6 th\u00efs \u00e7\u00f6h\u00f6rt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f #" ], + "{numVotes} Vote": [ + "{numVotes} V\u00f6t\u00e9 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202#", + "{numVotes} V\u00f6t\u00e9s \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#" + ], "{organization}\\'s logo": "{organization}\\'s l\u00f6g\u00f6 \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f #", "{platform_name} learners can see my:": "{platform_name} l\u00e9\u00e4rn\u00e9rs \u00e7\u00e4n s\u00e9\u00e9 m\u00fd: \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7#", "{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}W\u00e4rn\u00efng:{screen_reader_end} N\u00f6 \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcps \u00e9x\u00efst. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2\u03c3\u03b7\u0455\u0454\u00a2\u0442\u0454\u0442\u03c5\u044f#", "{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}W\u00e4rn\u00efng:{screen_reader_end} Th\u00e9 pr\u00e9v\u00ef\u00f6\u00fcsl\u00fd s\u00e9l\u00e9\u00e7t\u00e9d \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcp w\u00e4s d\u00e9l\u00e9t\u00e9d. S\u00e9l\u00e9\u00e7t \u00e4n\u00f6th\u00e9r \u00e7\u00f6nt\u00e9nt gr\u00f6\u00fcp. \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c\u0454\u0442, \u00a2#", "{totalItems} total": "{totalItems} t\u00f6t\u00e4l \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142#", + "{unread_count} new comment": [ + "{unread_count} n\u00e9w \u00e7\u00f6mm\u00e9nt \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1#", + "{unread_count} n\u00e9w \u00e7\u00f6mm\u00e9nts \u2c60'\u03c3\u044f\u0454\u043c \u03b9\u03c1\u0455\u03c5\u043c \u2202\u03c3\u0142\u03c3\u044f \u0455\u03b9\u0442 \u03b1\u043c#" + ], "\u2026": "\u2026 \u2c60#" }; diff --git a/cms/static/js/i18n/es-419/djangojs.js b/cms/static/js/i18n/es-419/djangojs.js index 51bb42bbbe..ab41f21067 100644 --- a/cms/static/js/i18n/es-419/djangojs.js +++ b/cms/static/js/i18n/es-419/djangojs.js @@ -171,10 +171,12 @@ "Add URLs for additional versions": "A\u00f1ada URLs para las versiones adicionales", "Add a Chapter": "A\u00f1adir cap\u00edtulo", "Add a New Cohort": "A\u00f1adir NuevaCohorte", + "Add a Post": "A\u00f1adir un comentario:", "Add a Response": "A\u00f1adir una respuesta", "Add a clear and descriptive title to encourage participation.": "A\u00f1ade un t\u00edtulo claro y descriptivo para fomentar la participaci\u00f3n.", "Add a comment": "A\u00f1adir un comentario", "Add a learning outcome here": "Agregar Resultado de aprendizaje", + "Add a response:": "A\u00f1ada su respuesta:", "Add another group": "A\u00f1adir nuevo grupo", "Add language": "A\u00f1adir idioma", "Add notes about this learner": "A\u00f1ada una nota sobre este estudiante", @@ -220,6 +222,7 @@ "Alternative source": "Fuente alternativa", "Always cohort content-specific discussion topics": "Aplicar siempre cohortes a los temas de discusi\u00f3n de contenido espec\u00edfico.", "Amount": "Cantidad", + "An email has been sent to {userEmail} with a link for you to activate your account.": "Un correo electr\u00f3nico ha sido enviado a su {userEmail} con un enlaze para activar su cuenta.", "An error has occurred. Check your Internet connection and try again.": "Ha ocurrido un error. Revise su conexi\u00f3n a Internet e intente nuevamente.", "An error has occurred. Make sure that you are connected to the Internet, and then try refreshing the page.": "Ha ocurrido un error. Aseg\u00farese de que est\u00e1 conectado a Internet y luego recargue la p\u00e1gina.", "An error has occurred. Please try again later.": "Ocurri\u00f3 un error. Por favor intente nuevamente mas tarde.", @@ -349,6 +352,7 @@ "Checkout": "Proceder al pago", "Checkout with PayPal": "Pagar con PayPal", "Checkout with {processor}": "Pagar con {processor}", + "Choose Course Date": "Seleccione la fecha del curso", "Choose File": "Elegir archivo", "Choose One": "Elegir uno", "Choose a .csv file": "Elija un fichero .cxv", @@ -394,6 +398,7 @@ "Cols": "Columnas", "Column": "Columna", "Column group": "Agrupar columna", + "Coming Soon": "Pr\u00f3ximamente", "Commentary": "Comentario", "Common Problem Types": "Tipos de problemas comunes", "Community TA": "TA de la comunidad", @@ -402,6 +407,7 @@ "Confirm": "Confirmar", "Confirm Timed Transcript": "Confirmar la transcripci\u00f3n", "Congratulations! You are now verified on %(platformName)s!": "Felicitaciones! Ya se encuentra verificado en %(platformName)s!", + "Congratulations! You have earned a certificate for this course.": "Felicitaciones! Usted a ganado un certificado de este curso.", "Constrain proportions": "Restringir proporciones", "Contains staff only content": "Contiene solo contenido del equipo del curso", "Contains {count} group": [ @@ -467,6 +473,7 @@ "Custom...": "Personalizado...", "Cut": "Cortar", "Cut row": "Cortar fila", + "Dashboard": "Panel principal", "Date": "Fecha", "Date Added": "Fecha a\u00f1adida", "Date added": "Fecha de adici\u00f3n", @@ -505,6 +512,7 @@ "Discard Changes": "Descartar cambios", "Discarding Changes": "Descartar cambios", "Discussion": "Discusi\u00f3n", + "Discussion Home": "Inicio de la discusi\u00f3n", "Discussion admins, moderators, and TAs can make their posts visible to all students or specify a single cohort.": "Admins de discusiones, moderadores y TA pueden hacer sus publicaciones visibles a todos los estudiantes o para un grupo com\u00fan espec\u00edfico.", "Discussion topics; currently listing: ": "Temas de discusi\u00f3n, actualmente:", "Display Name": "Nombre para mostrar:", @@ -573,9 +581,11 @@ "End of transcript. Skip to the start.": "Fin de la transcripci\u00f3n. Saltar al inicio.", "Endorse": "Validar", "Engage with posts": "Trabajar con las publicaciones", + "Enroll Now": "Incr\u00edbase ahora", "Enrolling you in the selected course": "Inscribi\u00e9ndolo en el curso seleccionado", "Enrollment Date": "Fecha de inscripci\u00f3n", "Enrollment Mode": "Modo de inscripci\u00f3n", + "Enrollment Opens on": "Inscripciones abiertas en", "Ensure that you can see your photo and read your name": "Asegurese de que se pueda ver su cara y leer su nombre en la foto del documento de identificaci\u00f3n.", "Enter Due Date and Time": "Ingrese fecha y hora l\u00edmites", "Enter Start Date and Time": "Ingrese fecha y hora", @@ -969,6 +979,7 @@ "Optional Characteristics": "Caracter\u00edsiticas Opcionales", "Optional long description": "Descripci\u00f3n larga optativa", "Options for {license_name}": "Opciones para {license_name}", + "Order Details": "Detalles de la orden", "Order No.": "Orden Num.", "Organization": "Organizaci\u00f3n", "Organization ": "Organizaci\u00f3n", @@ -1036,6 +1047,7 @@ "Please provide a description of the link destination.": "Por favor, proveer una descripci\u00f3n de la destinaci\u00f3n del v\u00ednculo.", "Please provide a valid URL.": "Por favor, provea un URL v\u00e1lido.", "Please select a PDF file to upload.": "Por favor seleccione un archivo PDF para subir.", + "Please select a course date": "Por favor seleccione una fecha para el curso.", "Please select a file in .srt format.": "Por favor seleccione un archivo en formato .srt", "Please specify a reason.": "Por favor especifique una raz\u00f3n.", "Please verify that you have uploaded a valid image (PNG and JPEG).": "Por favor verifique que haya cargado una imagen v\u00e1lida (PNG y JPEG)", @@ -1071,6 +1083,7 @@ "Profile": "Perfil", "Profile Image": "Foto de perfil", "Profile image for {username}": "Foto de perfil para {username}", + "Programs": "Programas", "Promote another member to Admin to remove your admin rights": "Promueva a otro miembro del equipo a administrador si quiere quitar sus propios privilegios de administrador", "Public": "P\u00fablico", "Publish": "Publicar", @@ -1165,6 +1178,7 @@ "Search teams": "Buscar equipos", "Section": "Secci\u00f3n", "See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "Revise los equipos de su curso, organizados por tema. \u00danase a un equipo para colaborar con otros que est\u00e9n interesados en los mismos temas.", + "Select Course Run": "Selecciona un curso a ejecutar", "Select a Content Group": "seleccionar contenido de grupo", "Select a chapter": "Seleccionar un capitulo", "Select a cohort": "Seleccione una cohorte", @@ -1209,6 +1223,10 @@ "Mostrando la primera respuesta", "Mostrando las %(numResponses)s primeras respuestas" ], + "Showing {currentItemRange} out of {totalItemsCount}, filtered by {assetType}, sorted by {sortName} ascending": "Mostrando {currentItemRange} de {totalItemsCount}, filtrado por {assetType}, ordenado por {sortName} asc", + "Showing {currentItemRange} out of {totalItemsCount}, filtered by {assetType}, sorted by {sortName} descending": "Mostrando {currentItemRange} de {totalItemsCount}, filtrado por {assetType}, ordenado por {sortName} desc", + "Showing {currentItemRange} out of {totalItemsCount}, sorted by {sortName} ascending": "Mostrando {currentItemRange} de {totalItemsCount}, ordenado por {sortName} asc", + "Showing {currentItemRange} out of {totalItemsCount}, sorted by {sortName} descending": "Mostrando {currentItemRange} de {totalItemsCount}, ordenado por {sortName} desc.", "Sign in": "Iniciar sesi\u00f3n", "Sign in here using your email address and password, or use one of the providers listed below.": "Reg\u00edstrese aqu\u00ed utilizando su correo electr\u00f3nico y contrase\u00f1a, o tambi\u00e9n puede utilizar algunos de los proveedores en la lista abajo.", "Sign in here using your email address and password.": "Reg\u00edstrese aqu\u00ed utilizando su direcci\u00f3n de correo electr\u00f3nico y contrase\u00f1a ", @@ -1250,6 +1268,7 @@ "Started entrance exam rescore task for student '{student_id}'. Click the 'Show Background Task History for Student' button to see the status of the task.": "Iniciada tarea de recalificaci\u00f3n de ex\u00e1men de ingreso para estudiante '{student_id}'. Clic en el bot\u00f3n 'Mostrar historial de tareas para estudiante' para ver el estado de la tarea.", "Started rescore problem task for problem '<%= problem_id %>' and student '<%= student_id %>'. Click the 'Show Background Task History for Student' button to see the status of the task.": "Inici\u00f3 el proceso de re puntuaci\u00f3n del problema '<%= problem_id %>' para el estudiante '<%= student_id %>'. Haga clic en el bot\u00f3n de 'Mostrar historial de tareas por estudiante' para ver el estado de dicha tarea.", "Starts": "Empieza", + "Starts %(start)s": "Empieza %(start)s", "Starts: %(start)s": "Empieza: %(start)s", "Starts: %(start_date)s": "Comienza: %(start_date)s", "State": "Estado", @@ -1320,6 +1339,7 @@ "Textbook Name": "Nombre", "Textbook information": "Informaci\u00f3n del libro de texto", "Textbook name is required": "Se requiere el nombre del texto", + "Thank you %(full_name)s! We have received your payment for %(course_name)s.": "Gracias %(full_name)s! Hemos recibido su pago para el curso %(course_name)s.", "Thank you for submitting your financial assistance application for {course_name}! You can expect a response in 2-4 business days.": "Gracias por enviar tu aplicaci\u00f3n de financiamiento para {course_name}!. Espera una respuesta de 2-4 dias h\u00e1biles.", "Thank you for submitting your photos. We will review them shortly. You can now sign up for any %(platformName)s course that offers verified certificates. Verification is good for one year. After one year, you must submit photos for verification again.": "Gracias por enviar sus fotos. Las revisaremos pronto. Ahora puede registrarse para cualquier curso de %(platformName)s que ofrezca Certficados Verificados. La verificaci\u00f3n es v\u00e1lida por un a\u00f1o. Despu\u00e9s de este periodo, deber\u00e1 volver a enviar fotograf\u00edas para una nueva verificaci\u00f3n.", "Thank you! We have received your payment for {courseName}.": "\u00a1Gracias! Hemos recibido tu pago para {courseName}.", @@ -1508,6 +1528,7 @@ "Updating Tags": "Actualizando Etiquetas", "Updating with latest library content": "Actualizando con el m\u00e1s reciente contenido de la librer\u00eda", "Upgrade Deadline": "Actualizar la fecha l\u00edmite", + "Upgrade Now": "Actualizar Ahora", "Upgrade to a Verified Certificate for {courseName}": "Optar por el Certificado Verificado para {courseName}", "Upload": "Subir", "Upload File": "Subir archivo", @@ -1585,11 +1606,14 @@ "VideoPlayer: Element corresponding to the given selector was not found.": "VideoPlayer: El elemento correspondiente al selector dado no ha sido encontrado.", "View": "Ver", "View %(span_start)s %(team_name)s %(span_end)s": "Ver %(span_start)s %(team_name)s %(span_end)s", + "View Archived Course": "Ver curso archivado", "View Cohort": "Ver Cohorte", + "View Course": "Ver curso", "View Live": "Ver en vivo", "View Teams in the %(topic_name)s Topic": "Ver equipos en el tema %(topic_name)s", "View all errors": "Ver todos los errores", "View discussion": "Ver discusi\u00f3n", + "View/Share Certificate": "Ver/compartir Certificado", "Viewing %s course": [ "Mostrando %s curso", "Mostrando %s cursos" @@ -1603,6 +1627,7 @@ "Want to confirm your identity later?": "\u00bfDesea confirmar su identidad despu\u00e9s?", "Warning": "Atenci\u00f3n:", "Warnings": "Advertencias", + "We ask you to activate your account to ensure it is really you creating the account and to prevent fraud.": "Necesitamos que active su cuenta para asegurarnos que es usted realmente el que est\u00e1 creando la cuenta y para prevenir fraude.", "We couldn't create your account.": "No pudimos crear su cuenta.", "We couldn't find any results for \"%s\".": "No se ha encontrado ninguna coincidencia para \"%s\".", "We couldn't sign you in.": "No se ha podido iniciar su sesi\u00f3n.", @@ -1645,6 +1670,7 @@ "When your face is in position, use the camera button {icon} below to take your photo.": "Luego de colocar tu rostro en posici\u00f3n, haz clic en el siguiente \u00edcono {icon} para tomar la foto.", "Which timed transcript would you like to use?": "\u00bfCu\u00e1l de las transcripciones desea utilizar?", "Whole words": "Palabras completas", + "Why activate?": "Por qu\u00e9 activar?", "Why does %(platformName)s need my photo?": "Por qu\u00e9 %(platformName)s necesita mi foto ?", "Width": "Anchura", "Will Be Visible To:": "Ser\u00e1 visible para:", @@ -1659,6 +1685,7 @@ "You are a member of this team.": "Usted ya es miembro de este equipo.", "You are currently sharing a limited profile.": "Actualmente est\u00e1 compartiendo un perfil limitado.", "You are enrolling in: {courseName}": "Te est\u00e1s inscribiendo en: {courseName}", + "You are here": "Usted est\u00e1 aqu\u00ed", "You are not currently a member of any team.": "Usted no es actualmente miembro de ning\u00fan equipo.", "You are not enrolled in any XSeries Programs yet.": "No se encuentra inscrito en ning\u00fan Programa de XSeries a\u00fan.", "You are now enrolled as a verified student for:": "Ahora estas inscrito como estudiante verificado para:", @@ -1694,6 +1721,7 @@ "You must specify a name": "Debe especificar un nombre", "You must specify a name for the cohort": "Debe especificar un nombre para el cohorte", "You must specify your birth year before you can share your full profile. To specify your birth year, go to the {account_settings_page_link}": "Debe especificar un a\u00f1o de nacimiento antes de poder compartir su perfil completo. Para definir un a\u00f1o de nacimiento, visite {account_settings_page_link}", + "You need a certificate in this course to be eligible for a program certificate.": "Necesitas un certificado en este curso para ser elegible para un programa de certificaci\u00f3n.", "You need a computer that has a webcam. When you receive a browser prompt, make sure that you allow access to the camera.": "Necesita un equipo que tenga una webcam. Cuando reciba un mensaje desde su navegador web, aseg\u00farese de permitir el acceso a su webcam.", "You need a driver's license, passport, or other government-issued ID that has your name and photo.": "Necesita el documento de identidad, licencia de conducir, pasaporte u otra identificaci\u00f3n certificada por el gobierno, que contenga su foto y nombre.", "You need an ID with your name and photo. A driver's license, passport, or other government-issued IDs are all acceptable.": "Necesitas un ID con tu nombre y foto. Licencia, pasaporte, c\u00e9dula todos son aceptados.", @@ -1776,6 +1804,7 @@ "emphasized text": "texto enfatizado", "endorsed %(time_ago)s": "Validado hace %(time_ago)s", "endorsed %(time_ago)s by %(user)s": "Validado hace %(time_ago)s por %(user)s", + "enrolled": "inscritos", "enter code here": "ingrese el c\u00f3digo aqu\u00ed", "enter link description here": "Ingrese la descripci\u00f3n del v\u00ednculo aqu\u00ed", "error.message": "Mensaje de error", @@ -1793,6 +1822,7 @@ "marked as answer %(time_ago)s by %(user)s": "marcado como respuesta %(time_ago)s por %(user)s", "message": "mensaje", "name": "nombre", + "not enrolled": "No est\u00e1 inscrito", "off": "Apagar", "on": "Encender", "open slots": "campos abiertos", @@ -1842,9 +1872,11 @@ "{numUsersAdded} estudiantes han sido a\u00f1adidos a este cohorte", "{numUsersAdded} estudiantes han sido a\u00f1adidos a este cohorte" ], + "{organization}\\'s logo": "Logo de la {organization}", "{platform_name} learners can see my:": "Los usuarios de {platform_name} pueden ver mi:", "{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}Advertencia:{screen_reader_end} No existe ning\u00fan grupo de contenido.", "{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}Advertencia:{screen_reader_end} El grupo de contenido previamente seleccionado ha sido borrado. Seleccione otro grupo de contenido.", + "{totalItems} total": "{totalItems} total", "\u2026": "..." }; diff --git a/cms/static/js/i18n/fake2/djangojs.js b/cms/static/js/i18n/fake2/djangojs.js index e146b90ce2..b2a419f61e 100644 --- a/cms/static/js/i18n/fake2/djangojs.js +++ b/cms/static/js/i18n/fake2/djangojs.js @@ -33,7 +33,6 @@ "%(cohort_name)s (%(user_count)s)": "%(cohort_name)s (%(user_count)s)", "%(comments_count)s %(span_sr_open)scomments %(span_close)s": "%(comments_count)s %(span_sr_open)s\u0254\u00f8\u026f\u026f\u01ddn\u0287s %(span_close)s", "%(comments_count)s %(span_sr_open)scomments (%(unread_comments_count)s unread comments)%(span_close)s": "%(comments_count)s %(span_sr_open)s\u0254\u00f8\u026f\u026f\u01ddn\u0287s (%(unread_comments_count)s nn\u0279\u01dd\u0250d \u0254\u00f8\u026f\u026f\u01ddn\u0287s)%(span_close)s", - "%(display_name)s Settings": "%(display_name)s S\u01dd\u0287\u0287\u1d09n\u0183s", "%(download_link_start)sDownload this image (right-click or option-click, save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to your backpack.": "%(download_link_start)s\u0110\u00f8\u028dnl\u00f8\u0250d \u0287\u0265\u1d09s \u1d09\u026f\u0250\u0183\u01dd (\u0279\u1d09\u0183\u0265\u0287-\u0254l\u1d09\u0254\u029e \u00f8\u0279 \u00f8d\u0287\u1d09\u00f8n-\u0254l\u1d09\u0254\u029e, s\u0250\u028c\u01dd \u0250s)%(link_end)s \u0250nd \u0287\u0265\u01ddn %(upload_link_start)sndl\u00f8\u0250d%(link_end)s \u1d09\u0287 \u0287\u00f8 \u028e\u00f8n\u0279 b\u0250\u0254\u029ed\u0250\u0254\u029e.", "%(errorCount)s error found in form.": [ "%(errorCount)s \u01dd\u0279\u0279\u00f8\u0279 \u025f\u00f8nnd \u1d09n \u025f\u00f8\u0279\u026f.", @@ -139,6 +138,7 @@ "A driver's license, passport, or other government-issued ID with your name and photo": "\u023a d\u0279\u1d09\u028c\u01dd\u0279's l\u1d09\u0254\u01ddns\u01dd, d\u0250ssd\u00f8\u0279\u0287, \u00f8\u0279 \u00f8\u0287\u0265\u01dd\u0279 \u0183\u00f8\u028c\u01dd\u0279n\u026f\u01ddn\u0287-\u1d09ssn\u01ddd \u0197\u0110 \u028d\u1d09\u0287\u0265 \u028e\u00f8n\u0279 n\u0250\u026f\u01dd \u0250nd d\u0265\u00f8\u0287\u00f8", "A list of courses you have just enrolled in as a verified student": "\u023a l\u1d09s\u0287 \u00f8\u025f \u0254\u00f8n\u0279s\u01dds \u028e\u00f8n \u0265\u0250\u028c\u01dd \u027ens\u0287 \u01ddn\u0279\u00f8ll\u01ddd \u1d09n \u0250s \u0250 \u028c\u01dd\u0279\u1d09\u025f\u1d09\u01ddd s\u0287nd\u01ddn\u0287", "A name that identifies your team (maximum 255 characters).": "\u023a n\u0250\u026f\u01dd \u0287\u0265\u0250\u0287 \u1d09d\u01ddn\u0287\u1d09\u025f\u1d09\u01dds \u028e\u00f8n\u0279 \u0287\u01dd\u0250\u026f (\u026f\u0250x\u1d09\u026fn\u026f 255 \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s).", + "A short description of the program, including concepts covered and expected outcomes (255 character limit).": "\u023a s\u0265\u00f8\u0279\u0287 d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u00f8n \u00f8\u025f \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f, \u1d09n\u0254lnd\u1d09n\u0183 \u0254\u00f8n\u0254\u01ddd\u0287s \u0254\u00f8\u028c\u01dd\u0279\u01ddd \u0250nd \u01ddxd\u01dd\u0254\u0287\u01ddd \u00f8n\u0287\u0254\u00f8\u026f\u01dds (255 \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279 l\u1d09\u026f\u1d09\u0287).", "A short description of the team to help other learners understand the goals or direction of the team (maximum 300 characters).": "\u023a s\u0265\u00f8\u0279\u0287 d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u00f8n \u00f8\u025f \u0287\u0265\u01dd \u0287\u01dd\u0250\u026f \u0287\u00f8 \u0265\u01ddld \u00f8\u0287\u0265\u01dd\u0279 l\u01dd\u0250\u0279n\u01dd\u0279s nnd\u01dd\u0279s\u0287\u0250nd \u0287\u0265\u01dd \u0183\u00f8\u0250ls \u00f8\u0279 d\u1d09\u0279\u01dd\u0254\u0287\u1d09\u00f8n \u00f8\u025f \u0287\u0265\u01dd \u0287\u01dd\u0250\u026f (\u026f\u0250x\u1d09\u026fn\u026f 300 \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s).", "A valid email address is required": "\u023a \u028c\u0250l\u1d09d \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd", "ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u023a\u0243\u023b\u0110\u0246F\u01e4\u0126\u0197\u0248\ua740\u0141MN\u00d8\u2c63Q\u024cS\u0166\u0244VWX\u024e\u01b5", @@ -146,7 +146,6 @@ "About Me": "\u023ab\u00f8n\u0287 M\u01dd", "About You": "\u023ab\u00f8n\u0287 \u024e\u00f8n", "About me": "\u023ab\u00f8n\u0287 \u026f\u01dd", - "Access": "\u023a\u0254\u0254\u01ddss", "Accomplishments": "\u023a\u0254\u0254\u00f8\u026fdl\u1d09s\u0265\u026f\u01ddn\u0287s", "Accomplishments Pagination": "\u023a\u0254\u0254\u00f8\u026fdl\u1d09s\u0265\u026f\u01ddn\u0287s \u2c63\u0250\u0183\u1d09n\u0250\u0287\u1d09\u00f8n", "Account Information": "\u023a\u0254\u0254\u00f8nn\u0287 \u0197n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n", @@ -176,9 +175,11 @@ "Add a Response": "\u023add \u0250 \u024c\u01ddsd\u00f8ns\u01dd", "Add a clear and descriptive title to encourage participation.": "\u023add \u0250 \u0254l\u01dd\u0250\u0279 \u0250nd d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u028c\u01dd \u0287\u1d09\u0287l\u01dd \u0287\u00f8 \u01ddn\u0254\u00f8n\u0279\u0250\u0183\u01dd d\u0250\u0279\u0287\u1d09\u0254\u1d09d\u0250\u0287\u1d09\u00f8n.", "Add a comment": "\u023add \u0250 \u0254\u00f8\u026f\u026f\u01ddn\u0287", + "Add a course": "\u023add \u0250 \u0254\u00f8n\u0279s\u01dd", "Add a learning outcome here": "\u023add \u0250 l\u01dd\u0250\u0279n\u1d09n\u0183 \u00f8n\u0287\u0254\u00f8\u026f\u01dd \u0265\u01dd\u0279\u01dd", "Add a response:": "\u023add \u0250 \u0279\u01ddsd\u00f8ns\u01dd:", "Add another group": "\u023add \u0250n\u00f8\u0287\u0265\u01dd\u0279 \u0183\u0279\u00f8nd", + "Add another run": "\u023add \u0250n\u00f8\u0287\u0265\u01dd\u0279 \u0279nn", "Add language": "\u023add l\u0250n\u0183n\u0250\u0183\u01dd", "Add notes about this learner": "\u023add n\u00f8\u0287\u01dds \u0250b\u00f8n\u0287 \u0287\u0265\u1d09s l\u01dd\u0250\u0279n\u01dd\u0279", "Add students to this cohort": "\u023add s\u0287nd\u01ddn\u0287s \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287", @@ -196,6 +197,8 @@ "Adjust video volume": "\u023ad\u027ens\u0287 \u028c\u1d09d\u01dd\u00f8 \u028c\u00f8ln\u026f\u01dd", "Admin": "\u023ad\u026f\u1d09n", "Advanced": "\u023ad\u028c\u0250n\u0254\u01ddd", + "After the subsection\\'s due date has passed, learners can no longer access its content. The subsection remains included in grade calculations.": "\u023a\u025f\u0287\u01dd\u0279 \u0287\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n\\'s dn\u01dd d\u0250\u0287\u01dd \u0265\u0250s d\u0250ss\u01ddd, l\u01dd\u0250\u0279n\u01dd\u0279s \u0254\u0250n n\u00f8 l\u00f8n\u0183\u01dd\u0279 \u0250\u0254\u0254\u01ddss \u1d09\u0287s \u0254\u00f8n\u0287\u01ddn\u0287. \u0166\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u0279\u01dd\u026f\u0250\u1d09ns \u1d09n\u0254lnd\u01ddd \u1d09n \u0183\u0279\u0250d\u01dd \u0254\u0250l\u0254nl\u0250\u0287\u1d09\u00f8ns.", + "After you publish this program, you cannot add or remove course codes or remove course runs.": "\u023a\u025f\u0287\u01dd\u0279 \u028e\u00f8n dnbl\u1d09s\u0265 \u0287\u0265\u1d09s d\u0279\u00f8\u0183\u0279\u0250\u026f, \u028e\u00f8n \u0254\u0250nn\u00f8\u0287 \u0250dd \u00f8\u0279 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u0254\u00f8n\u0279s\u01dd \u0254\u00f8d\u01dds \u00f8\u0279 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u0254\u00f8n\u0279s\u01dd \u0279nns.", "Align center": "\u023al\u1d09\u0183n \u0254\u01ddn\u0287\u01dd\u0279", "Align left": "\u023al\u1d09\u0183n l\u01dd\u025f\u0287", "Align right": "\u023al\u1d09\u0183n \u0279\u1d09\u0183\u0265\u0287", @@ -254,8 +257,6 @@ "Answer hidden": "\u023ans\u028d\u01dd\u0279 \u0265\u1d09dd\u01ddn", "Answer:": "\u023ans\u028d\u01dd\u0279:", "Any content that has listed this content as a prerequisite will also have access limitations removed.": "\u023an\u028e \u0254\u00f8n\u0287\u01ddn\u0287 \u0287\u0265\u0250\u0287 \u0265\u0250s l\u1d09s\u0287\u01ddd \u0287\u0265\u1d09s \u0254\u00f8n\u0287\u01ddn\u0287 \u0250s \u0250 d\u0279\u01dd\u0279\u01ddbn\u1d09s\u1d09\u0287\u01dd \u028d\u1d09ll \u0250ls\u00f8 \u0265\u0250\u028c\u01dd \u0250\u0254\u0254\u01ddss l\u1d09\u026f\u1d09\u0287\u0250\u0287\u1d09\u00f8ns \u0279\u01dd\u026f\u00f8\u028c\u01ddd.", - "Any subsections or units that are explicitly hidden from students will remain hidden after you clear this option for the section.": "\u023an\u028e snbs\u01dd\u0254\u0287\u1d09\u00f8ns \u00f8\u0279 nn\u1d09\u0287s \u0287\u0265\u0250\u0287 \u0250\u0279\u01dd \u01ddxdl\u1d09\u0254\u1d09\u0287l\u028e \u0265\u1d09dd\u01ddn \u025f\u0279\u00f8\u026f s\u0287nd\u01ddn\u0287s \u028d\u1d09ll \u0279\u01dd\u026f\u0250\u1d09n \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 \u028e\u00f8n \u0254l\u01dd\u0250\u0279 \u0287\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u025f\u00f8\u0279 \u0287\u0265\u01dd s\u01dd\u0254\u0287\u1d09\u00f8n.", - "Any units that are explicitly hidden from students will remain hidden after you clear this option for the subsection.": "\u023an\u028e nn\u1d09\u0287s \u0287\u0265\u0250\u0287 \u0250\u0279\u01dd \u01ddxdl\u1d09\u0254\u1d09\u0287l\u028e \u0265\u1d09dd\u01ddn \u025f\u0279\u00f8\u026f s\u0287nd\u01ddn\u0287s \u028d\u1d09ll \u0279\u01dd\u026f\u0250\u1d09n \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 \u028e\u00f8n \u0254l\u01dd\u0250\u0279 \u0287\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u025f\u00f8\u0279 \u0287\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n.", "Are you having trouble finding a team to join?": "\u023a\u0279\u01dd \u028e\u00f8n \u0265\u0250\u028c\u1d09n\u0183 \u0287\u0279\u00f8nbl\u01dd \u025f\u1d09nd\u1d09n\u0183 \u0250 \u0287\u01dd\u0250\u026f \u0287\u00f8 \u027e\u00f8\u1d09n?", "Are you sure you want to delete this comment?": "\u023a\u0279\u01dd \u028e\u00f8n sn\u0279\u01dd \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 d\u01ddl\u01dd\u0287\u01dd \u0287\u0265\u1d09s \u0254\u00f8\u026f\u026f\u01ddn\u0287?", "Are you sure you want to delete this page? This action cannot be undone.": "\u023a\u0279\u01dd \u028e\u00f8n sn\u0279\u01dd \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 d\u01ddl\u01dd\u0287\u01dd \u0287\u0265\u1d09s d\u0250\u0183\u01dd? \u0166\u0265\u1d09s \u0250\u0254\u0287\u1d09\u00f8n \u0254\u0250nn\u00f8\u0287 b\u01dd nnd\u00f8n\u01dd.", @@ -304,7 +305,6 @@ "Bulk Exceptions": "\u0243nl\u029e \u0246x\u0254\u01ddd\u0287\u1d09\u00f8ns", "Bullet list": "\u0243nll\u01dd\u0287 l\u1d09s\u0287", "Bulleted List (Ctrl+U)": "\u0243nll\u01dd\u0287\u01ddd \u0141\u1d09s\u0287 (\u023b\u0287\u0279l+\u0244)", - "By default, submitted exams are available for review after the due date has passed. Select this option to keep exams hidden after that date.": "\u0243\u028e d\u01dd\u025f\u0250nl\u0287, snb\u026f\u1d09\u0287\u0287\u01ddd \u01ddx\u0250\u026fs \u0250\u0279\u01dd \u0250\u028c\u0250\u1d09l\u0250bl\u01dd \u025f\u00f8\u0279 \u0279\u01dd\u028c\u1d09\u01dd\u028d \u0250\u025f\u0287\u01dd\u0279 \u0287\u0265\u01dd dn\u01dd d\u0250\u0287\u01dd \u0265\u0250s d\u0250ss\u01ddd. S\u01ddl\u01dd\u0254\u0287 \u0287\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u0287\u00f8 \u029e\u01dd\u01ddd \u01ddx\u0250\u026fs \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 \u0287\u0265\u0250\u0287 d\u0250\u0287\u01dd.", "By: Community TA": "\u0243\u028e: \u023b\u00f8\u026f\u026fnn\u1d09\u0287\u028e \u0166\u023a", "By: Staff": "\u0243\u028e: S\u0287\u0250\u025f\u025f", "Can we match the photo you took with the one on your ID?": "\u023b\u0250n \u028d\u01dd \u026f\u0250\u0287\u0254\u0265 \u0287\u0265\u01dd d\u0265\u00f8\u0287\u00f8 \u028e\u00f8n \u0287\u00f8\u00f8\u029e \u028d\u1d09\u0287\u0265 \u0287\u0265\u01dd \u00f8n\u01dd \u00f8n \u028e\u00f8n\u0279 \u0197\u0110?", @@ -336,7 +336,7 @@ "Change Manually": "\u023b\u0265\u0250n\u0183\u01dd M\u0250nn\u0250ll\u028e", "Change My Email Address": "\u023b\u0265\u0250n\u0183\u01dd M\u028e \u0246\u026f\u0250\u1d09l \u023add\u0279\u01ddss", "Change image": "\u023b\u0265\u0250n\u0183\u01dd \u1d09\u026f\u0250\u0183\u01dd", - "Change the settings for %(display_name)s": "\u023b\u0265\u0250n\u0183\u01dd \u0287\u0265\u01dd s\u01dd\u0287\u0287\u1d09n\u0183s \u025f\u00f8\u0279 %(display_name)s", + "Change the settings for {display_name}": "\u023b\u0265\u0250n\u0183\u01dd \u0287\u0265\u01dd s\u01dd\u0287\u0287\u1d09n\u0183s \u025f\u00f8\u0279 {display_name}", "Chapter Asset": "\u023b\u0265\u0250d\u0287\u01dd\u0279 \u023ass\u01dd\u0287", "Chapter Name": "\u023b\u0265\u0250d\u0287\u01dd\u0279 N\u0250\u026f\u01dd", "Chapter information": "\u023b\u0265\u0250d\u0287\u01dd\u0279 \u1d09n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n", @@ -431,7 +431,7 @@ "Correct failed component": "\u023b\u00f8\u0279\u0279\u01dd\u0254\u0287 \u025f\u0250\u1d09l\u01ddd \u0254\u00f8\u026fd\u00f8n\u01ddn\u0287", "Could not find Certificate Exception in white list. Please refresh the page and try again": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u1d09n \u028d\u0265\u1d09\u0287\u01dd l\u1d09s\u0287. \u2c63l\u01dd\u0250s\u01dd \u0279\u01dd\u025f\u0279\u01dds\u0265 \u0287\u0265\u01dd d\u0250\u0183\u01dd \u0250nd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n", "Could not find Certificate Invalidation in the list. Please refresh the page and try again": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u0197n\u028c\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u1d09n \u0287\u0265\u01dd l\u1d09s\u0287. \u2c63l\u01dd\u0250s\u01dd \u0279\u01dd\u025f\u0279\u01dds\u0265 \u0287\u0265\u01dd d\u0250\u0183\u01dd \u0250nd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n", - "Could not find a user with username or email address '<%= identifier %>'.": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd \u0250 ns\u01dd\u0279 \u028d\u1d09\u0287\u0265 ns\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss '<%= identifier %>'.", + "Could not find a user with username or email address '<%- identifier %>'.": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd \u0250 ns\u01dd\u0279 \u028d\u1d09\u0287\u0265 ns\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss '<%- identifier %>'.", "Could not find the specified string.": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd \u0287\u0265\u01dd sd\u01dd\u0254\u1d09\u025f\u1d09\u01ddd s\u0287\u0279\u1d09n\u0183.", "Could not find users associated with the following identifiers:": "\u023b\u00f8nld n\u00f8\u0287 \u025f\u1d09nd ns\u01dd\u0279s \u0250ss\u00f8\u0254\u1d09\u0250\u0287\u01ddd \u028d\u1d09\u0287\u0265 \u0287\u0265\u01dd \u025f\u00f8ll\u00f8\u028d\u1d09n\u0183 \u1d09d\u01ddn\u0287\u1d09\u025f\u1d09\u01dd\u0279s:", "Could not parse certificate JSON. %(message)s": "\u023b\u00f8nld n\u00f8\u0287 d\u0250\u0279s\u01dd \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u0248S\u00d8N. %(message)s", @@ -442,6 +442,7 @@ "Country of residence": "\u023b\u00f8nn\u0287\u0279\u028e \u00f8\u025f \u0279\u01dds\u1d09d\u01ddn\u0254\u01dd", "Country or Region": "\u023b\u00f8nn\u0287\u0279\u028e \u00f8\u0279 \u024c\u01dd\u0183\u1d09\u00f8n", "Course": "\u023b\u00f8n\u0279s\u01dd", + "Course Code": "\u023b\u00f8n\u0279s\u01dd \u023b\u00f8d\u01dd", "Course Credit Requirements": "\u023b\u00f8n\u0279s\u01dd \u023b\u0279\u01ddd\u1d09\u0287 \u024c\u01ddbn\u1d09\u0279\u01dd\u026f\u01ddn\u0287s", "Course End": "\u023b\u00f8n\u0279s\u01dd \u0246nd", "Course Handouts": "\u023b\u00f8n\u0279s\u01dd \u0126\u0250nd\u00f8n\u0287s", @@ -461,6 +462,7 @@ "Create": "\u023b\u0279\u01dd\u0250\u0287\u01dd", "Create Re-run": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u024c\u01dd-\u0279nn", "Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to your existing account": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u0250 %(link_start)sM\u00f8z\u1d09ll\u0250 \u0243\u0250\u0254\u029ed\u0250\u0254\u029e%(link_end)s \u0250\u0254\u0254\u00f8nn\u0287, \u00f8\u0279 l\u00f8\u0183 \u1d09n \u0287\u00f8 \u028e\u00f8n\u0279 \u01ddx\u1d09s\u0287\u1d09n\u0183 \u0250\u0254\u0254\u00f8nn\u0287", + "Create a New Program": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u0250 N\u01dd\u028d \u2c63\u0279\u00f8\u0183\u0279\u0250\u026f", "Create a New Team": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u0250 N\u01dd\u028d \u0166\u01dd\u0250\u026f", "Create a content group": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u0250 \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd", "Create a new account": "\u023b\u0279\u01dd\u0250\u0287\u01dd \u0250 n\u01dd\u028d \u0250\u0254\u0254\u00f8nn\u0287", @@ -497,6 +499,8 @@ "Delete Page Confirmation": "\u0110\u01ddl\u01dd\u0287\u01dd \u2c63\u0250\u0183\u01dd \u023b\u00f8n\u025f\u1d09\u0279\u026f\u0250\u0287\u1d09\u00f8n", "Delete Team": "\u0110\u01ddl\u01dd\u0287\u01dd \u0166\u01dd\u0250\u026f", "Delete column": "\u0110\u01ddl\u01dd\u0287\u01dd \u0254\u00f8ln\u026fn", + "Delete course": "\u0110\u01ddl\u01dd\u0287\u01dd \u0254\u00f8n\u0279s\u01dd", + "Delete course run": "\u0110\u01ddl\u01dd\u0287\u01dd \u0254\u00f8n\u0279s\u01dd \u0279nn", "Delete row": "\u0110\u01ddl\u01dd\u0287\u01dd \u0279\u00f8\u028d", "Delete student '<%= student_id %>'s state on problem '<%= problem_id %>'?": "\u0110\u01ddl\u01dd\u0287\u01dd s\u0287nd\u01ddn\u0287 '<%= student_id %>'s s\u0287\u0250\u0287\u01dd \u00f8n d\u0279\u00f8bl\u01dd\u026f '<%= problem_id %>'?", "Delete table": "\u0110\u01ddl\u01dd\u0287\u01dd \u0287\u0250bl\u01dd", @@ -568,6 +572,12 @@ "Edit Your Name": "\u0246d\u1d09\u0287 \u024e\u00f8n\u0279 N\u0250\u026f\u01dd", "Edit post title": "\u0246d\u1d09\u0287 d\u00f8s\u0287 \u0287\u1d09\u0287l\u01dd", "Edit the name": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd n\u0250\u026f\u01dd", + "Edit the program marketing slug": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f \u026f\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 sln\u0183", + "Edit the program subtitle": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f snb\u0287\u1d09\u0287l\u01dd", + "Edit the program title": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f \u0287\u1d09\u0287l\u01dd", + "Edit the program\\'s marketing slug.": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f\\'s \u026f\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 sln\u0183.", + "Edit the program\\'s name.": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f\\'s n\u0250\u026f\u01dd.", + "Edit the program\\'s subtitle.": "\u0246d\u1d09\u0287 \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f\\'s snb\u0287\u1d09\u0287l\u01dd.", "Edit this certificate?": "\u0246d\u1d09\u0287 \u0287\u0265\u1d09s \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd?", "Editable": "\u0246d\u1d09\u0287\u0250bl\u01dd", "Editing comment": "\u0246d\u1d09\u0287\u1d09n\u0183 \u0254\u00f8\u026f\u026f\u01ddn\u0287", @@ -652,13 +662,11 @@ "Error: Import failed.": "\u0246\u0279\u0279\u00f8\u0279: \u0197\u026fd\u00f8\u0279\u0287 \u025f\u0250\u1d09l\u01ddd.", "Error: Replacing failed.": "\u0246\u0279\u0279\u00f8\u0279: \u024c\u01dddl\u0250\u0254\u1d09n\u0183 \u025f\u0250\u1d09l\u01ddd.", "Error: Uploading failed.": "\u0246\u0279\u0279\u00f8\u0279: \u0244dl\u00f8\u0250d\u1d09n\u0183 \u025f\u0250\u1d09l\u01ddd.", - "Error: User '<%= username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u0246\u0279\u0279\u00f8\u0279: \u0244s\u01dd\u0279 '<%= username %>' \u0265\u0250s n\u00f8\u0287 \u028e\u01dd\u0287 \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01ddd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287. \u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287s b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd \u0250ss\u1d09\u0183n\u01ddd \u0250 \u0279\u00f8l\u01dd.", + "Error: User '<%- username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u0246\u0279\u0279\u00f8\u0279: \u0244s\u01dd\u0279 '<%- username %>' \u0265\u0250s n\u00f8\u0287 \u028e\u01dd\u0287 \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01ddd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287. \u0244s\u01dd\u0279s \u026fns\u0287 \u0254\u0279\u01dd\u0250\u0287\u01dd \u0250nd \u0250\u0254\u0287\u1d09\u028c\u0250\u0287\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u0250\u0254\u0254\u00f8nn\u0287s b\u01dd\u025f\u00f8\u0279\u01dd \u0287\u0265\u01dd\u028e \u0254\u0250n b\u01dd \u0250ss\u1d09\u0183n\u01ddd \u0250 \u0279\u00f8l\u01dd.", "Error: You cannot remove yourself from the Instructor group!": "\u0246\u0279\u0279\u00f8\u0279: \u024e\u00f8n \u0254\u0250nn\u00f8\u0287 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u028e\u00f8n\u0279s\u01ddl\u025f \u025f\u0279\u00f8\u026f \u0287\u0265\u01dd \u0197ns\u0287\u0279n\u0254\u0287\u00f8\u0279 \u0183\u0279\u00f8nd!", "Errors": "\u0246\u0279\u0279\u00f8\u0279s", "Everyone who has staff privileges in this course": "\u0246\u028c\u01dd\u0279\u028e\u00f8n\u01dd \u028d\u0265\u00f8 \u0265\u0250s s\u0287\u0250\u025f\u025f d\u0279\u1d09\u028c\u1d09l\u01dd\u0183\u01dds \u1d09n \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd", "Exam Types": "\u0246x\u0250\u026f \u0166\u028ed\u01dds", - "Exam will be visible after due date": "\u0246x\u0250\u026f \u028d\u1d09ll b\u01dd \u028c\u1d09s\u1d09bl\u01dd \u0250\u025f\u0287\u01dd\u0279 dn\u01dd d\u0250\u0287\u01dd", - "Exam will remain hidden after due date": "\u0246x\u0250\u026f \u028d\u1d09ll \u0279\u01dd\u026f\u0250\u1d09n \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 dn\u01dd d\u0250\u0287\u01dd", "Exception Granted": "\u0246x\u0254\u01ddd\u0287\u1d09\u00f8n \u01e4\u0279\u0250n\u0287\u01ddd", "Exit full browser": "\u0246x\u1d09\u0287 \u025fnll b\u0279\u00f8\u028ds\u01dd\u0279", "Expand All": "\u0246xd\u0250nd \u023all", @@ -701,6 +709,7 @@ "Forgot password?": "F\u00f8\u0279\u0183\u00f8\u0287 d\u0250ss\u028d\u00f8\u0279d?", "Format": "F\u00f8\u0279\u026f\u0250\u0287", "Formats": "F\u00f8\u0279\u026f\u0250\u0287s", + "Free text notes": "F\u0279\u01dd\u01dd \u0287\u01ddx\u0287 n\u00f8\u0287\u01dds", "Frequently Asked Questions": "F\u0279\u01ddbn\u01ddn\u0287l\u028e \u023as\u029e\u01ddd Qn\u01dds\u0287\u1d09\u00f8ns", "Full Name": "Fnll N\u0250\u026f\u01dd", "Full Profile": "Fnll \u2c63\u0279\u00f8\u025f\u1d09l\u01dd", @@ -757,10 +766,11 @@ "Hide Answer": "\u0126\u1d09d\u01dd \u023ans\u028d\u01dd\u0279", "Hide Deprecated Settings": "\u0126\u1d09d\u01dd \u0110\u01ddd\u0279\u01dd\u0254\u0250\u0287\u01ddd S\u01dd\u0287\u0287\u1d09n\u0183s", "Hide Discussion": "\u0126\u1d09d\u01dd \u0110\u1d09s\u0254nss\u1d09\u00f8n", - "Hide Exam After Due Date": "\u0126\u1d09d\u01dd \u0246x\u0250\u026f \u023a\u025f\u0287\u01dd\u0279 \u0110n\u01dd \u0110\u0250\u0287\u01dd", "Hide Previews": "\u0126\u1d09d\u01dd \u2c63\u0279\u01dd\u028c\u1d09\u01dd\u028ds", "Hide closed captions": "\u0126\u1d09d\u01dd \u0254l\u00f8s\u01ddd \u0254\u0250d\u0287\u1d09\u00f8ns", - "Hide from students": "\u0126\u1d09d\u01dd \u025f\u0279\u00f8\u026f s\u0287nd\u01ddn\u0287s", + "Hide content after due date": "\u0126\u1d09d\u01dd \u0254\u00f8n\u0287\u01ddn\u0287 \u0250\u025f\u0287\u01dd\u0279 dn\u01dd d\u0250\u0287\u01dd", + "Hide entire subsection": "\u0126\u1d09d\u01dd \u01ddn\u0287\u1d09\u0279\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n", + "Hide from learners": "\u0126\u1d09d\u01dd \u025f\u0279\u00f8\u026f l\u01dd\u0250\u0279n\u01dd\u0279s", "Hide notes": "\u0126\u1d09d\u01dd n\u00f8\u0287\u01dds", "Hiding from Students": "\u0126\u1d09d\u1d09n\u0183 \u025f\u0279\u00f8\u026f S\u0287nd\u01ddn\u0287s", "High Definition": "\u0126\u1d09\u0183\u0265 \u0110\u01dd\u025f\u1d09n\u1d09\u0287\u1d09\u00f8n", @@ -774,13 +784,13 @@ "ID": "\u0197\u0110", "ID-Verification is not required for this Professional Education course.": "\u0197\u0110-V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u1d09s n\u00f8\u0287 \u0279\u01ddbn\u1d09\u0279\u01ddd \u025f\u00f8\u0279 \u0287\u0265\u1d09s \u2c63\u0279\u00f8\u025f\u01ddss\u1d09\u00f8n\u0250l \u0246dn\u0254\u0250\u0287\u1d09\u00f8n \u0254\u00f8n\u0279s\u01dd.", "Identity Verification In Progress": "\u0197d\u01ddn\u0287\u1d09\u0287\u028e V\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0197n \u2c63\u0279\u00f8\u0183\u0279\u01ddss", - "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students.": "\u0197\u025f \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0250s d\u0279\u01dd\u028c\u1d09\u00f8nsl\u028e dnbl\u1d09s\u0265\u01ddd \u0250nd \u0279\u01ddl\u01dd\u0250s\u01ddd \u0287\u00f8 s\u0287nd\u01ddn\u0287s, \u0250n\u028e \u0254\u0265\u0250n\u0183\u01dds \u028e\u00f8n \u026f\u0250d\u01dd \u0287\u00f8 \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0265\u01ddn \u1d09\u0287 \u028d\u0250s \u0265\u1d09dd\u01ddn \u028d\u1d09ll n\u00f8\u028d b\u01dd \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 s\u0287nd\u01ddn\u0287s.", + "If the unit was previously published and released to learners, any changes you made to the unit when it was hidden will now be visible to learners.": "\u0197\u025f \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0250s d\u0279\u01dd\u028c\u1d09\u00f8nsl\u028e dnbl\u1d09s\u0265\u01ddd \u0250nd \u0279\u01ddl\u01dd\u0250s\u01ddd \u0287\u00f8 l\u01dd\u0250\u0279n\u01dd\u0279s, \u0250n\u028e \u0254\u0265\u0250n\u0183\u01dds \u028e\u00f8n \u026f\u0250d\u01dd \u0287\u00f8 \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0265\u01ddn \u1d09\u0287 \u028d\u0250s \u0265\u1d09dd\u01ddn \u028d\u1d09ll n\u00f8\u028d b\u01dd \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 l\u01dd\u0250\u0279n\u01dd\u0279s.", "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?": "\u0197\u025f \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0250s d\u0279\u01dd\u028c\u1d09\u00f8nsl\u028e dnbl\u1d09s\u0265\u01ddd \u0250nd \u0279\u01ddl\u01dd\u0250s\u01ddd \u0287\u00f8 s\u0287nd\u01ddn\u0287s, \u0250n\u028e \u0254\u0265\u0250n\u0183\u01dds \u028e\u00f8n \u026f\u0250d\u01dd \u0287\u00f8 \u0287\u0265\u01dd nn\u1d09\u0287 \u028d\u0265\u01ddn \u1d09\u0287 \u028d\u0250s \u0265\u1d09dd\u01ddn \u028d\u1d09ll n\u00f8\u028d b\u01dd \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 s\u0287nd\u01ddn\u0287s. \u0110\u00f8 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 d\u0279\u00f8\u0254\u01dd\u01ddd?", "If you do not yet have an account, use the button below to register.": "\u0197\u025f \u028e\u00f8n d\u00f8 n\u00f8\u0287 \u028e\u01dd\u0287 \u0265\u0250\u028c\u01dd \u0250n \u0250\u0254\u0254\u00f8nn\u0287, ns\u01dd \u0287\u0265\u01dd bn\u0287\u0287\u00f8n b\u01ddl\u00f8\u028d \u0287\u00f8 \u0279\u01dd\u0183\u1d09s\u0287\u01dd\u0279.", "If you don't verify your identity now, you can still explore your course from your dashboard. You will receive periodic reminders from %(platformName)s to verify your identity.": "\u0197\u025f \u028e\u00f8n d\u00f8n'\u0287 \u028c\u01dd\u0279\u1d09\u025f\u028e \u028e\u00f8n\u0279 \u1d09d\u01ddn\u0287\u1d09\u0287\u028e n\u00f8\u028d, \u028e\u00f8n \u0254\u0250n s\u0287\u1d09ll \u01ddxdl\u00f8\u0279\u01dd \u028e\u00f8n\u0279 \u0254\u00f8n\u0279s\u01dd \u025f\u0279\u00f8\u026f \u028e\u00f8n\u0279 d\u0250s\u0265b\u00f8\u0250\u0279d. \u024e\u00f8n \u028d\u1d09ll \u0279\u01dd\u0254\u01dd\u1d09\u028c\u01dd d\u01dd\u0279\u1d09\u00f8d\u1d09\u0254 \u0279\u01dd\u026f\u1d09nd\u01dd\u0279s \u025f\u0279\u00f8\u026f %(platformName)s \u0287\u00f8 \u028c\u01dd\u0279\u1d09\u025f\u028e \u028e\u00f8n\u0279 \u1d09d\u01ddn\u0287\u1d09\u0287\u028e.", "If you leave, you can no longer post in this team's discussions. Your place will be available to another learner.": "\u0197\u025f \u028e\u00f8n l\u01dd\u0250\u028c\u01dd, \u028e\u00f8n \u0254\u0250n n\u00f8 l\u00f8n\u0183\u01dd\u0279 d\u00f8s\u0287 \u1d09n \u0287\u0265\u1d09s \u0287\u01dd\u0250\u026f's d\u1d09s\u0254nss\u1d09\u00f8ns. \u024e\u00f8n\u0279 dl\u0250\u0254\u01dd \u028d\u1d09ll b\u01dd \u0250\u028c\u0250\u1d09l\u0250bl\u01dd \u0287\u00f8 \u0250n\u00f8\u0287\u0265\u01dd\u0279 l\u01dd\u0250\u0279n\u01dd\u0279.", "If you make significant changes, make sure you notify members of the team before making these changes.": "\u0197\u025f \u028e\u00f8n \u026f\u0250\u029e\u01dd s\u1d09\u0183n\u1d09\u025f\u1d09\u0254\u0250n\u0287 \u0254\u0265\u0250n\u0183\u01dds, \u026f\u0250\u029e\u01dd sn\u0279\u01dd \u028e\u00f8n n\u00f8\u0287\u1d09\u025f\u028e \u026f\u01dd\u026fb\u01dd\u0279s \u00f8\u025f \u0287\u0265\u01dd \u0287\u01dd\u0250\u026f b\u01dd\u025f\u00f8\u0279\u01dd \u026f\u0250\u029e\u1d09n\u0183 \u0287\u0265\u01dds\u01dd \u0254\u0265\u0250n\u0183\u01dds.", - "If you make this %(xblockType)s visible to students, students will be able to see its content after the release date has passed and you have published the unit.": "\u0197\u025f \u028e\u00f8n \u026f\u0250\u029e\u01dd \u0287\u0265\u1d09s %(xblockType)s \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 s\u0287nd\u01ddn\u0287s, s\u0287nd\u01ddn\u0287s \u028d\u1d09ll b\u01dd \u0250bl\u01dd \u0287\u00f8 s\u01dd\u01dd \u1d09\u0287s \u0254\u00f8n\u0287\u01ddn\u0287 \u0250\u025f\u0287\u01dd\u0279 \u0287\u0265\u01dd \u0279\u01ddl\u01dd\u0250s\u01dd d\u0250\u0287\u01dd \u0265\u0250s d\u0250ss\u01ddd \u0250nd \u028e\u00f8n \u0265\u0250\u028c\u01dd dnbl\u1d09s\u0265\u01ddd \u0287\u0265\u01dd nn\u1d09\u0287.", + "If you make this %(xblockType)s visible to learners, learners will be able to see its content after the release date has passed and you have published the unit. Only units that are explicitly hidden from learners will remain hidden after you clear this option for the %(xblockType)s.": "\u0197\u025f \u028e\u00f8n \u026f\u0250\u029e\u01dd \u0287\u0265\u1d09s %(xblockType)s \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 l\u01dd\u0250\u0279n\u01dd\u0279s, l\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u1d09ll b\u01dd \u0250bl\u01dd \u0287\u00f8 s\u01dd\u01dd \u1d09\u0287s \u0254\u00f8n\u0287\u01ddn\u0287 \u0250\u025f\u0287\u01dd\u0279 \u0287\u0265\u01dd \u0279\u01ddl\u01dd\u0250s\u01dd d\u0250\u0287\u01dd \u0265\u0250s d\u0250ss\u01ddd \u0250nd \u028e\u00f8n \u0265\u0250\u028c\u01dd dnbl\u1d09s\u0265\u01ddd \u0287\u0265\u01dd nn\u1d09\u0287. \u00d8nl\u028e nn\u1d09\u0287s \u0287\u0265\u0250\u0287 \u0250\u0279\u01dd \u01ddxdl\u1d09\u0254\u1d09\u0287l\u028e \u0265\u1d09dd\u01ddn \u025f\u0279\u00f8\u026f l\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u1d09ll \u0279\u01dd\u026f\u0250\u1d09n \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 \u028e\u00f8n \u0254l\u01dd\u0250\u0279 \u0287\u0265\u1d09s \u00f8d\u0287\u1d09\u00f8n \u025f\u00f8\u0279 \u0287\u0265\u01dd %(xblockType)s.", "If you use the Advanced Editor, this problem will be converted to XML and you will not be able to return to the Simple Editor Interface.\n\nProceed to the Advanced Editor and convert this problem to XML?": "\u0197\u025f \u028e\u00f8n ns\u01dd \u0287\u0265\u01dd \u023ad\u028c\u0250n\u0254\u01ddd \u0246d\u1d09\u0287\u00f8\u0279, \u0287\u0265\u1d09s d\u0279\u00f8bl\u01dd\u026f \u028d\u1d09ll b\u01dd \u0254\u00f8n\u028c\u01dd\u0279\u0287\u01ddd \u0287\u00f8 XM\u0141 \u0250nd \u028e\u00f8n \u028d\u1d09ll n\u00f8\u0287 b\u01dd \u0250bl\u01dd \u0287\u00f8 \u0279\u01dd\u0287n\u0279n \u0287\u00f8 \u0287\u0265\u01dd S\u1d09\u026fdl\u01dd \u0246d\u1d09\u0287\u00f8\u0279 \u0197n\u0287\u01dd\u0279\u025f\u0250\u0254\u01dd.\n\n\u2c63\u0279\u00f8\u0254\u01dd\u01ddd \u0287\u00f8 \u0287\u0265\u01dd \u023ad\u028c\u0250n\u0254\u01ddd \u0246d\u1d09\u0287\u00f8\u0279 \u0250nd \u0254\u00f8n\u028c\u01dd\u0279\u0287 \u0287\u0265\u1d09s d\u0279\u00f8bl\u01dd\u026f \u0287\u00f8 XM\u0141?", "Ignore": "\u0197\u0183n\u00f8\u0279\u01dd", "Ignore all": "\u0197\u0183n\u00f8\u0279\u01dd \u0250ll", @@ -849,6 +859,8 @@ "Learn more about {license_name}": "\u0141\u01dd\u0250\u0279n \u026f\u00f8\u0279\u01dd \u0250b\u00f8n\u0287 {license_name}", "Learners are added to this cohort automatically.": "\u0141\u01dd\u0250\u0279n\u01dd\u0279s \u0250\u0279\u01dd \u0250dd\u01ddd \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0250n\u0287\u00f8\u026f\u0250\u0287\u1d09\u0254\u0250ll\u028e.", "Learners are added to this cohort only when you provide their email addresses or usernames on this page.": "\u0141\u01dd\u0250\u0279n\u01dd\u0279s \u0250\u0279\u01dd \u0250dd\u01ddd \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287 \u00f8nl\u028e \u028d\u0265\u01ddn \u028e\u00f8n d\u0279\u00f8\u028c\u1d09d\u01dd \u0287\u0265\u01dd\u1d09\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss\u01dds \u00f8\u0279 ns\u01dd\u0279n\u0250\u026f\u01dds \u00f8n \u0287\u0265\u1d09s d\u0250\u0183\u01dd.", + "Learners do not see the subsection in the course outline. The subsection is not included in grade calculations.": "\u0141\u01dd\u0250\u0279n\u01dd\u0279s d\u00f8 n\u00f8\u0287 s\u01dd\u01dd \u0287\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u1d09n \u0287\u0265\u01dd \u0254\u00f8n\u0279s\u01dd \u00f8n\u0287l\u1d09n\u01dd. \u0166\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u1d09s n\u00f8\u0287 \u1d09n\u0254lnd\u01ddd \u1d09n \u0183\u0279\u0250d\u01dd \u0254\u0250l\u0254nl\u0250\u0287\u1d09\u00f8ns.", + "Learners see the published subsection and can access its content.": "\u0141\u01dd\u0250\u0279n\u01dd\u0279s s\u01dd\u01dd \u0287\u0265\u01dd dnbl\u1d09s\u0265\u01ddd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u0250nd \u0254\u0250n \u0250\u0254\u0254\u01ddss \u1d09\u0287s \u0254\u00f8n\u0287\u01ddn\u0287.", "Learners who require verification must pass the selected checkpoint to see the content in this unit. Learners who do not require verification see this content by default.": "\u0141\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u0265\u00f8 \u0279\u01ddbn\u1d09\u0279\u01dd \u028c\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u026fns\u0287 d\u0250ss \u0287\u0265\u01dd s\u01ddl\u01dd\u0254\u0287\u01ddd \u0254\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287 \u0287\u00f8 s\u01dd\u01dd \u0287\u0265\u01dd \u0254\u00f8n\u0287\u01ddn\u0287 \u1d09n \u0287\u0265\u1d09s nn\u1d09\u0287. \u0141\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u0265\u00f8 d\u00f8 n\u00f8\u0287 \u0279\u01ddbn\u1d09\u0279\u01dd \u028c\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n s\u01dd\u01dd \u0287\u0265\u1d09s \u0254\u00f8n\u0287\u01ddn\u0287 b\u028e d\u01dd\u025f\u0250nl\u0287.", "Learning Outcome": "\u0141\u01dd\u0250\u0279n\u1d09n\u0183 \u00d8n\u0287\u0254\u00f8\u026f\u01dd", "Leave Team": "\u0141\u01dd\u0250\u028c\u01dd \u0166\u01dd\u0250\u026f", @@ -882,6 +894,7 @@ "\u0141\u00f8\u0250d n\u01ddx\u0287 %(num_items)s \u0279\u01ddsnl\u0287", "\u0141\u00f8\u0250d n\u01ddx\u0287 %(num_items)s \u0279\u01ddsnl\u0287s" ], + "Load next {numResponses} responses": "\u0141\u00f8\u0250d n\u01ddx\u0287 {numResponses} \u0279\u01ddsd\u00f8ns\u01dds", "Loading": "\u0141\u00f8\u0250d\u1d09n\u0183", "Loading content": "\u0141\u00f8\u0250d\u1d09n\u0183 \u0254\u00f8n\u0287\u01ddn\u0287", "Loading data...": "\u0141\u00f8\u0250d\u1d09n\u0183 d\u0250\u0287\u0250...", @@ -910,6 +923,8 @@ "Mark as Answer": "M\u0250\u0279\u029e \u0250s \u023ans\u028d\u01dd\u0279", "Mark enrollment code as unused": "M\u0250\u0279\u029e \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287 \u0254\u00f8d\u01dd \u0250s nnns\u01ddd", "Markdown Editing Help": "M\u0250\u0279\u029ed\u00f8\u028dn \u0246d\u1d09\u0287\u1d09n\u0183 \u0126\u01ddld", + "Marketing Slug": "M\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 Sln\u0183", + "Marketing Slug is required.": "M\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 Sln\u0183 \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd.", "Match case": "M\u0250\u0287\u0254\u0265 \u0254\u0250s\u01dd", "Max file size exceeded": "M\u0250x \u025f\u1d09l\u01dd s\u1d09z\u01dd \u01ddx\u0254\u01dd\u01ddd\u01ddd", "Maximum": "M\u0250x\u1d09\u026fn\u026f", @@ -918,6 +933,7 @@ "Message:": "M\u01ddss\u0250\u0183\u01dd:", "Middle": "M\u1d09ddl\u01dd", "Minimum Score:": "M\u1d09n\u1d09\u026fn\u026f S\u0254\u00f8\u0279\u01dd:", + "Mode: %(mode)s": "M\u00f8d\u01dd: %(mode)s", "Module state successfully deleted.": "M\u00f8dnl\u01dd s\u0287\u0250\u0287\u01dd sn\u0254\u0254\u01ddss\u025fnll\u028e d\u01ddl\u01dd\u0287\u01ddd.", "More": "M\u00f8\u0279\u01dd", "Must complete verification checkpoint": "Mns\u0287 \u0254\u00f8\u026fdl\u01dd\u0287\u01dd \u028c\u01dd\u0279\u1d09\u025f\u1d09\u0254\u0250\u0287\u1d09\u00f8n \u0254\u0265\u01dd\u0254\u029ed\u00f8\u1d09n\u0287", @@ -958,8 +974,8 @@ "No receipt available": "N\u00f8 \u0279\u01dd\u0254\u01dd\u1d09d\u0287 \u0250\u028c\u0250\u1d09l\u0250bl\u01dd", "No results": "N\u00f8 \u0279\u01ddsnl\u0287s", "No results found for \"%(query_string)s\". Please try searching again.": "N\u00f8 \u0279\u01ddsnl\u0287s \u025f\u00f8nnd \u025f\u00f8\u0279 \"%(query_string)s\". \u2c63l\u01dd\u0250s\u01dd \u0287\u0279\u028e s\u01dd\u0250\u0279\u0254\u0265\u1d09n\u0183 \u0250\u0183\u0250\u1d09n.", - "No results found for %(original_query)s. ": "N\u00f8 \u0279\u01ddsnl\u0287s \u025f\u00f8nnd \u025f\u00f8\u0279 %(original_query)s. ", "No results found for %(original_query)s. Showing results for %(suggested_query)s.": "N\u00f8 \u0279\u01ddsnl\u0287s \u025f\u00f8nnd \u025f\u00f8\u0279 %(original_query)s. S\u0265\u00f8\u028d\u1d09n\u0183 \u0279\u01ddsnl\u0287s \u025f\u00f8\u0279 %(suggested_query)s.", + "No results found for {original_query}. ": "N\u00f8 \u0279\u01ddsnl\u0287s \u025f\u00f8nnd \u025f\u00f8\u0279 {original_query}. ", "No sources": "N\u00f8 s\u00f8n\u0279\u0254\u01dds", "No tasks currently running.": "N\u00f8 \u0287\u0250s\u029es \u0254n\u0279\u0279\u01ddn\u0287l\u028e \u0279nnn\u1d09n\u0183.", "No threads matched your query.": "N\u00f8 \u0287\u0265\u0279\u01dd\u0250ds \u026f\u0250\u0287\u0254\u0265\u01ddd \u028e\u00f8n\u0279 bn\u01dd\u0279\u028e.", @@ -973,6 +989,7 @@ "Not in Use": "N\u00f8\u0287 \u1d09n \u0244s\u01dd", "Not selected": "N\u00f8\u0287 s\u01ddl\u01dd\u0254\u0287\u01ddd", "Note": "N\u00f8\u0287\u01dd", + "Note: Do not hide graded assignments after they have been released.": "N\u00f8\u0287\u01dd: \u0110\u00f8 n\u00f8\u0287 \u0265\u1d09d\u01dd \u0183\u0279\u0250d\u01ddd \u0250ss\u1d09\u0183n\u026f\u01ddn\u0287s \u0250\u025f\u0287\u01dd\u0279 \u0287\u0265\u01dd\u028e \u0265\u0250\u028c\u01dd b\u01dd\u01ddn \u0279\u01ddl\u01dd\u0250s\u01ddd.", "Note: Students can be in only one cohort. Adding students to this group overrides any previous group assignment.": "N\u00f8\u0287\u01dd: S\u0287nd\u01ddn\u0287s \u0254\u0250n b\u01dd \u1d09n \u00f8nl\u028e \u00f8n\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287. \u023add\u1d09n\u0183 s\u0287nd\u01ddn\u0287s \u0287\u00f8 \u0287\u0265\u1d09s \u0183\u0279\u00f8nd \u00f8\u028c\u01dd\u0279\u0279\u1d09d\u01dds \u0250n\u028e d\u0279\u01dd\u028c\u1d09\u00f8ns \u0183\u0279\u00f8nd \u0250ss\u1d09\u0183n\u026f\u01ddn\u0287.", "Noted in:": "N\u00f8\u0287\u01ddd \u1d09n:", "Notes": "N\u00f8\u0287\u01dds", @@ -1069,9 +1086,11 @@ "Please print this page for your records; it serves as your receipt. You will also receive an email with the same information.": "\u2c63l\u01dd\u0250s\u01dd d\u0279\u1d09n\u0287 \u0287\u0265\u1d09s d\u0250\u0183\u01dd \u025f\u00f8\u0279 \u028e\u00f8n\u0279 \u0279\u01dd\u0254\u00f8\u0279ds; \u1d09\u0287 s\u01dd\u0279\u028c\u01dds \u0250s \u028e\u00f8n\u0279 \u0279\u01dd\u0254\u01dd\u1d09d\u0287. \u024e\u00f8n \u028d\u1d09ll \u0250ls\u00f8 \u0279\u01dd\u0254\u01dd\u1d09\u028c\u01dd \u0250n \u01dd\u026f\u0250\u1d09l \u028d\u1d09\u0287\u0265 \u0287\u0265\u01dd s\u0250\u026f\u01dd \u1d09n\u025f\u00f8\u0279\u026f\u0250\u0287\u1d09\u00f8n.", "Please provide a description of the link destination.": "\u2c63l\u01dd\u0250s\u01dd d\u0279\u00f8\u028c\u1d09d\u01dd \u0250 d\u01dds\u0254\u0279\u1d09d\u0287\u1d09\u00f8n \u00f8\u025f \u0287\u0265\u01dd l\u1d09n\u029e d\u01dds\u0287\u1d09n\u0250\u0287\u1d09\u00f8n.", "Please provide a valid URL.": "\u2c63l\u01dd\u0250s\u01dd d\u0279\u00f8\u028c\u1d09d\u01dd \u0250 \u028c\u0250l\u1d09d \u0244\u024c\u0141.", + "Please select a Course Run": "\u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250 \u023b\u00f8n\u0279s\u01dd \u024cnn", "Please select a PDF file to upload.": "\u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250 \u2c63\u0110F \u025f\u1d09l\u01dd \u0287\u00f8 ndl\u00f8\u0250d.", "Please select a course date": "\u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250 \u0254\u00f8n\u0279s\u01dd d\u0250\u0287\u01dd", "Please select a file in .srt format.": "\u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250 \u025f\u1d09l\u01dd \u1d09n .s\u0279\u0287 \u025f\u00f8\u0279\u026f\u0250\u0287.", + "Please select a valid organization.": "\u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250 \u028c\u0250l\u1d09d \u00f8\u0279\u0183\u0250n\u1d09z\u0250\u0287\u1d09\u00f8n.", "Please specify a reason.": "\u2c63l\u01dd\u0250s\u01dd sd\u01dd\u0254\u1d09\u025f\u028e \u0250 \u0279\u01dd\u0250s\u00f8n.", "Please verify that you have uploaded a valid image (PNG and JPEG).": "\u2c63l\u01dd\u0250s\u01dd \u028c\u01dd\u0279\u1d09\u025f\u028e \u0287\u0265\u0250\u0287 \u028e\u00f8n \u0265\u0250\u028c\u01dd ndl\u00f8\u0250d\u01ddd \u0250 \u028c\u0250l\u1d09d \u1d09\u026f\u0250\u0183\u01dd (\u2c63N\u01e4 \u0250nd \u0248\u2c63\u0246\u01e4).", "Please verify that your webcam is connected and that you have allowed your browser to access it.": "\u2c63l\u01dd\u0250s\u01dd \u028c\u01dd\u0279\u1d09\u025f\u028e \u0287\u0265\u0250\u0287 \u028e\u00f8n\u0279 \u028d\u01ddb\u0254\u0250\u026f \u1d09s \u0254\u00f8nn\u01dd\u0254\u0287\u01ddd \u0250nd \u0287\u0265\u0250\u0287 \u028e\u00f8n \u0265\u0250\u028c\u01dd \u0250ll\u00f8\u028d\u01ddd \u028e\u00f8n\u0279 b\u0279\u00f8\u028ds\u01dd\u0279 \u0287\u00f8 \u0250\u0254\u0254\u01ddss \u1d09\u0287.", @@ -1108,12 +1127,14 @@ "Profile": "\u2c63\u0279\u00f8\u025f\u1d09l\u01dd", "Profile Image": "\u2c63\u0279\u00f8\u025f\u1d09l\u01dd \u0197\u026f\u0250\u0183\u01dd", "Profile image for {username}": "\u2c63\u0279\u00f8\u025f\u1d09l\u01dd \u1d09\u026f\u0250\u0183\u01dd \u025f\u00f8\u0279 {username}", + "Program type": "\u2c63\u0279\u00f8\u0183\u0279\u0250\u026f \u0287\u028ed\u01dd", "Programs": "\u2c63\u0279\u00f8\u0183\u0279\u0250\u026fs", "Promote another member to Admin to remove your admin rights": "\u2c63\u0279\u00f8\u026f\u00f8\u0287\u01dd \u0250n\u00f8\u0287\u0265\u01dd\u0279 \u026f\u01dd\u026fb\u01dd\u0279 \u0287\u00f8 \u023ad\u026f\u1d09n \u0287\u00f8 \u0279\u01dd\u026f\u00f8\u028c\u01dd \u028e\u00f8n\u0279 \u0250d\u026f\u1d09n \u0279\u1d09\u0183\u0265\u0287s", "Public": "\u2c63nbl\u1d09\u0254", "Publish": "\u2c63nbl\u1d09s\u0265", - "Publish %(display_name)s": "\u2c63nbl\u1d09s\u0265 %(display_name)s", - "Publish all unpublished changes for this %(item)s?": "\u2c63nbl\u1d09s\u0265 \u0250ll nndnbl\u1d09s\u0265\u01ddd \u0254\u0265\u0250n\u0183\u01dds \u025f\u00f8\u0279 \u0287\u0265\u1d09s %(item)s?", + "Publish all unpublished changes for this {item}?": "\u2c63nbl\u1d09s\u0265 \u0250ll nndnbl\u1d09s\u0265\u01ddd \u0254\u0265\u0250n\u0183\u01dds \u025f\u00f8\u0279 \u0287\u0265\u1d09s {item}?", + "Publish this program?": "\u2c63nbl\u1d09s\u0265 \u0287\u0265\u1d09s d\u0279\u00f8\u0183\u0279\u0250\u026f?", + "Publish {display_name}": "\u2c63nbl\u1d09s\u0265 {display_name}", "Published (not yet released)": "\u2c63nbl\u1d09s\u0265\u01ddd (n\u00f8\u0287 \u028e\u01dd\u0287 \u0279\u01ddl\u01dd\u0250s\u01ddd)", "Published and Live": "\u2c63nbl\u1d09s\u0265\u01ddd \u0250nd \u0141\u1d09\u028c\u01dd", "Publishing": "\u2c63nbl\u1d09s\u0265\u1d09n\u0183", @@ -1142,10 +1163,12 @@ "Released:": "\u024c\u01ddl\u01dd\u0250s\u01ddd:", "Removal is in progress. To avoid errors, stay on this page until the process is complete.": "\u024c\u01dd\u026f\u00f8\u028c\u0250l \u1d09s \u1d09n d\u0279\u00f8\u0183\u0279\u01ddss. \u0166\u00f8 \u0250\u028c\u00f8\u1d09d \u01dd\u0279\u0279\u00f8\u0279s, s\u0287\u0250\u028e \u00f8n \u0287\u0265\u1d09s d\u0250\u0183\u01dd nn\u0287\u1d09l \u0287\u0265\u01dd d\u0279\u00f8\u0254\u01ddss \u1d09s \u0254\u00f8\u026fdl\u01dd\u0287\u01dd.", "Remove": "\u024c\u01dd\u026f\u00f8\u028c\u01dd", + "Remove %(name)s from the program": "\u024c\u01dd\u026f\u00f8\u028c\u01dd %(name)s \u025f\u0279\u00f8\u026f \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f", "Remove chapter %(chapterDisplayName)s": "\u024c\u01dd\u026f\u00f8\u028c\u01dd \u0254\u0265\u0250d\u0287\u01dd\u0279 %(chapterDisplayName)s", "Remove from Invalidation Table": "\u024c\u01dd\u026f\u00f8\u028c\u01dd \u025f\u0279\u00f8\u026f \u0197n\u028c\u0250l\u1d09d\u0250\u0287\u1d09\u00f8n \u0166\u0250bl\u01dd", "Remove from List": "\u024c\u01dd\u026f\u00f8\u028c\u01dd \u025f\u0279\u00f8\u026f \u0141\u1d09s\u0287", "Remove link": "\u024c\u01dd\u026f\u00f8\u028c\u01dd l\u1d09n\u029e", + "Remove run %(key)s from the program": "\u024c\u01dd\u026f\u00f8\u028c\u01dd \u0279nn %(key)s \u025f\u0279\u00f8\u026f \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f", "Remove subsection %(subsectionDisplayName)s": "\u024c\u01dd\u026f\u00f8\u028c\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n %(subsectionDisplayName)s", "Remove this team member?": "\u024c\u01dd\u026f\u00f8\u028c\u01dd \u0287\u0265\u1d09s \u0287\u01dd\u0250\u026f \u026f\u01dd\u026fb\u01dd\u0279?", "Remove unit %(unitName)s": "\u024c\u01dd\u026f\u00f8\u028c\u01dd nn\u1d09\u0287 %(unitName)s", @@ -1190,8 +1213,10 @@ "Row properties": "\u024c\u00f8\u028d d\u0279\u00f8d\u01dd\u0279\u0287\u1d09\u01dds", "Row type": "\u024c\u00f8\u028d \u0287\u028ed\u01dd", "Rows": "\u024c\u00f8\u028ds", + "Run %(key)s": "\u024cnn %(key)s", "Save": "S\u0250\u028c\u01dd", "Save Changes": "S\u0250\u028c\u01dd \u023b\u0265\u0250n\u0183\u01dds", + "Save Course": "S\u0250\u028c\u01dd \u023b\u00f8n\u0279s\u01dd", "Save changes": "S\u0250\u028c\u01dd \u0254\u0265\u0250n\u0183\u01dds", "Saved cohort": "S\u0250\u028c\u01ddd \u0254\u00f8\u0265\u00f8\u0279\u0287", "Saving": "S\u0250\u028c\u1d09n\u0183", @@ -1203,6 +1228,7 @@ "Search all posts": "S\u01dd\u0250\u0279\u0254\u0265 \u0250ll d\u00f8s\u0287s", "Search teams": "S\u01dd\u0250\u0279\u0254\u0265 \u0287\u01dd\u0250\u026fs", "Section": "S\u01dd\u0254\u0287\u1d09\u00f8n", + "Section Visibility": "S\u01dd\u0254\u0287\u1d09\u00f8n V\u1d09s\u1d09b\u1d09l\u1d09\u0287\u028e", "See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "S\u01dd\u01dd \u0250ll \u0287\u01dd\u0250\u026fs \u1d09n \u028e\u00f8n\u0279 \u0254\u00f8n\u0279s\u01dd, \u00f8\u0279\u0183\u0250n\u1d09z\u01ddd b\u028e \u0287\u00f8d\u1d09\u0254. \u0248\u00f8\u1d09n \u0250 \u0287\u01dd\u0250\u026f \u0287\u00f8 \u0254\u00f8ll\u0250b\u00f8\u0279\u0250\u0287\u01dd \u028d\u1d09\u0287\u0265 \u00f8\u0287\u0265\u01dd\u0279 l\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u0265\u00f8 \u0250\u0279\u01dd \u1d09n\u0287\u01dd\u0279\u01dds\u0287\u01ddd \u1d09n \u0287\u0265\u01dd s\u0250\u026f\u01dd \u0287\u00f8d\u1d09\u0254 \u0250s \u028e\u00f8n \u0250\u0279\u01dd.", "Select Course Run": "S\u01ddl\u01dd\u0254\u0287 \u023b\u00f8n\u0279s\u01dd \u024cnn", "Select a Content Group": "S\u01ddl\u01dd\u0254\u0287 \u0250 \u023b\u00f8n\u0287\u01ddn\u0287 \u01e4\u0279\u00f8nd", @@ -1212,6 +1238,7 @@ "Select a prerequisite subsection and enter a minimum score percentage to limit access to this subsection.": "S\u01ddl\u01dd\u0254\u0287 \u0250 d\u0279\u01dd\u0279\u01ddbn\u1d09s\u1d09\u0287\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u0250nd \u01ddn\u0287\u01dd\u0279 \u0250 \u026f\u1d09n\u1d09\u026fn\u026f s\u0254\u00f8\u0279\u01dd d\u01dd\u0279\u0254\u01ddn\u0287\u0250\u0183\u01dd \u0287\u00f8 l\u1d09\u026f\u1d09\u0287 \u0250\u0254\u0254\u01ddss \u0287\u00f8 \u0287\u0265\u1d09s snbs\u01dd\u0254\u0287\u1d09\u00f8n.", "Select a time allotment for the exam. If it is over 24 hours, type in the amount of time. You can grant individual learners extra time to complete the exam through the Instructor Dashboard.": "S\u01ddl\u01dd\u0254\u0287 \u0250 \u0287\u1d09\u026f\u01dd \u0250ll\u00f8\u0287\u026f\u01ddn\u0287 \u025f\u00f8\u0279 \u0287\u0265\u01dd \u01ddx\u0250\u026f. \u0197\u025f \u1d09\u0287 \u1d09s \u00f8\u028c\u01dd\u0279 24 \u0265\u00f8n\u0279s, \u0287\u028ed\u01dd \u1d09n \u0287\u0265\u01dd \u0250\u026f\u00f8nn\u0287 \u00f8\u025f \u0287\u1d09\u026f\u01dd. \u024e\u00f8n \u0254\u0250n \u0183\u0279\u0250n\u0287 \u1d09nd\u1d09\u028c\u1d09dn\u0250l l\u01dd\u0250\u0279n\u01dd\u0279s \u01ddx\u0287\u0279\u0250 \u0287\u1d09\u026f\u01dd \u0287\u00f8 \u0254\u00f8\u026fdl\u01dd\u0287\u01dd \u0287\u0265\u01dd \u01ddx\u0250\u026f \u0287\u0265\u0279\u00f8n\u0183\u0265 \u0287\u0265\u01dd \u0197ns\u0287\u0279n\u0254\u0287\u00f8\u0279 \u0110\u0250s\u0265b\u00f8\u0250\u0279d.", "Select all": "S\u01ddl\u01dd\u0254\u0287 \u0250ll", + "Select an organization": "S\u01ddl\u01dd\u0254\u0287 \u0250n \u00f8\u0279\u0183\u0250n\u1d09z\u0250\u0287\u1d09\u00f8n", "Select the course-wide discussion topics that you want to divide by cohort.": "S\u01ddl\u01dd\u0254\u0287 \u0287\u0265\u01dd \u0254\u00f8n\u0279s\u01dd-\u028d\u1d09d\u01dd d\u1d09s\u0254nss\u1d09\u00f8n \u0287\u00f8d\u1d09\u0254s \u0287\u0265\u0250\u0287 \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 d\u1d09\u028c\u1d09d\u01dd b\u028e \u0254\u00f8\u0265\u00f8\u0279\u0287.", "Select the time zone for displaying course dates. If you do not specify a ": "S\u01ddl\u01dd\u0254\u0287 \u0287\u0265\u01dd \u0287\u1d09\u026f\u01dd z\u00f8n\u01dd \u025f\u00f8\u0279 d\u1d09sdl\u0250\u028e\u1d09n\u0183 \u0254\u00f8n\u0279s\u01dd d\u0250\u0287\u01dds. \u0197\u025f \u028e\u00f8n d\u00f8 n\u00f8\u0287 sd\u01dd\u0254\u1d09\u025f\u028e \u0250 ", "Selected tab": "S\u01ddl\u01dd\u0254\u0287\u01ddd \u0287\u0250b", @@ -1243,10 +1270,12 @@ "Show Discussion": "S\u0265\u00f8\u028d \u0110\u1d09s\u0254nss\u1d09\u00f8n", "Show Previews": "S\u0265\u00f8\u028d \u2c63\u0279\u01dd\u028c\u1d09\u01dd\u028ds", "Show blocks": "S\u0265\u00f8\u028d bl\u00f8\u0254\u029es", + "Show entire subsection": "S\u0265\u00f8\u028d \u01ddn\u0287\u1d09\u0279\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n", "Show invisible characters": "S\u0265\u00f8\u028d \u1d09n\u028c\u1d09s\u1d09bl\u01dd \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s", "Show me other ways to sign in or register": "S\u0265\u00f8\u028d \u026f\u01dd \u00f8\u0287\u0265\u01dd\u0279 \u028d\u0250\u028es \u0287\u00f8 s\u1d09\u0183n \u1d09n \u00f8\u0279 \u0279\u01dd\u0183\u1d09s\u0287\u01dd\u0279", "Show notes": "S\u0265\u00f8\u028d n\u00f8\u0287\u01dds", "Show posts by %(username)s.": "S\u0265\u00f8\u028d d\u00f8s\u0287s b\u028e %(username)s.", + "Show posts by {username}.": "S\u0265\u00f8\u028d d\u00f8s\u0287s b\u028e {username}.", "Showing all responses": "S\u0265\u00f8\u028d\u1d09n\u0183 \u0250ll \u0279\u01ddsd\u00f8ns\u01dds", "Showing first response": [ "S\u0265\u00f8\u028d\u1d09n\u0183 \u025f\u1d09\u0279s\u0287 \u0279\u01ddsd\u00f8ns\u01dd", @@ -1269,8 +1298,10 @@ "Signatory field(s) has invalid data.": "S\u1d09\u0183n\u0250\u0287\u00f8\u0279\u028e \u025f\u1d09\u01ddld(s) \u0265\u0250s \u1d09n\u028c\u0250l\u1d09d d\u0250\u0287\u0250.", "Signature Image": "S\u1d09\u0183n\u0250\u0287n\u0279\u01dd \u0197\u026f\u0250\u0183\u01dd", "Skip": "S\u029e\u1d09d", + "Slug used to generate links to the marketing site.": "Sln\u0183 ns\u01ddd \u0287\u00f8 \u0183\u01ddn\u01dd\u0279\u0250\u0287\u01dd l\u1d09n\u029es \u0287\u00f8 \u0287\u0265\u01dd \u026f\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 s\u1d09\u0287\u01dd.", "Some Rights Reserved": "S\u00f8\u026f\u01dd \u024c\u1d09\u0183\u0265\u0287s \u024c\u01dds\u01dd\u0279\u028c\u01ddd", "Some content in this unit is visible only to particular content groups": "S\u00f8\u026f\u01dd \u0254\u00f8n\u0287\u01ddn\u0287 \u1d09n \u0287\u0265\u1d09s nn\u1d09\u0287 \u1d09s \u028c\u1d09s\u1d09bl\u01dd \u00f8nl\u028e \u0287\u00f8 d\u0250\u0279\u0287\u1d09\u0254nl\u0250\u0279 \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nds", + "Some images in this post have been omitted": "S\u00f8\u026f\u01dd \u1d09\u026f\u0250\u0183\u01dds \u1d09n \u0287\u0265\u1d09s d\u00f8s\u0287 \u0265\u0250\u028c\u01dd b\u01dd\u01ddn \u00f8\u026f\u1d09\u0287\u0287\u01ddd", "Something went wrong changing this enrollment. Please try again.": "S\u00f8\u026f\u01dd\u0287\u0265\u1d09n\u0183 \u028d\u01ddn\u0287 \u028d\u0279\u00f8n\u0183 \u0254\u0265\u0250n\u0183\u1d09n\u0183 \u0287\u0265\u1d09s \u01ddn\u0279\u00f8ll\u026f\u01ddn\u0287. \u2c63l\u01dd\u0250s\u01dd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n.", "Sorry": "S\u00f8\u0279\u0279\u028e", "Sorry, no results were found.": "S\u00f8\u0279\u0279\u028e, n\u00f8 \u0279\u01ddsnl\u0287s \u028d\u01dd\u0279\u01dd \u025f\u00f8nnd.", @@ -1289,9 +1320,10 @@ "Square": "Sbn\u0250\u0279\u01dd", "Staff": "S\u0287\u0250\u025f\u025f", "Staff Only": "S\u0287\u0250\u025f\u025f \u00d8nl\u028e", - "Staff and Students": "S\u0287\u0250\u025f\u025f \u0250nd S\u0287nd\u01ddn\u0287s", + "Staff and Learners": "S\u0287\u0250\u025f\u025f \u0250nd \u0141\u01dd\u0250\u0279n\u01dd\u0279s", "Start": "S\u0287\u0250\u0279\u0287", "Start Date": "S\u0287\u0250\u0279\u0287 \u0110\u0250\u0287\u01dd", + "Start Date: %(date)s": "S\u0287\u0250\u0279\u0287 \u0110\u0250\u0287\u01dd: %(date)s", "Start generating certificates for all students in this course?": "S\u0287\u0250\u0279\u0287 \u0183\u01ddn\u01dd\u0279\u0250\u0287\u1d09n\u0183 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 \u0250ll s\u0287nd\u01ddn\u0287s \u1d09n \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", "Start of transcript. Skip to the end.": "S\u0287\u0250\u0279\u0287 \u00f8\u025f \u0287\u0279\u0250ns\u0254\u0279\u1d09d\u0287. S\u029e\u1d09d \u0287\u00f8 \u0287\u0265\u01dd \u01ddnd.", "Start regenerating certificates for students in this course?": "S\u0287\u0250\u0279\u0287 \u0279\u01dd\u0183\u01ddn\u01dd\u0279\u0250\u0287\u1d09n\u0183 \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds \u025f\u00f8\u0279 s\u0287nd\u01ddn\u0287s \u1d09n \u0287\u0265\u1d09s \u0254\u00f8n\u0279s\u01dd?", @@ -1309,7 +1341,7 @@ "Strikethrough": "S\u0287\u0279\u1d09\u029e\u01dd\u0287\u0265\u0279\u00f8n\u0183\u0265", "Student": "S\u0287nd\u01ddn\u0287", "Student Removed from certificate white list successfully.": "S\u0287nd\u01ddn\u0287 \u024c\u01dd\u026f\u00f8\u028c\u01ddd \u025f\u0279\u00f8\u026f \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd \u028d\u0265\u1d09\u0287\u01dd l\u1d09s\u0287 sn\u0254\u0254\u01ddss\u025fnll\u028e.", - "Student Visibility": "S\u0287nd\u01ddn\u0287 V\u1d09s\u1d09b\u1d09l\u1d09\u0287\u028e", + "Student email or username": "S\u0287nd\u01ddn\u0287 \u01dd\u026f\u0250\u1d09l \u00f8\u0279 ns\u01dd\u0279n\u0250\u026f\u01dd", "Student username/email field is required and can not be empty. ": "S\u0287nd\u01ddn\u0287 ns\u01dd\u0279n\u0250\u026f\u01dd/\u01dd\u026f\u0250\u1d09l \u025f\u1d09\u01ddld \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd \u0250nd \u0254\u0250n n\u00f8\u0287 b\u01dd \u01dd\u026fd\u0287\u028e. ", "Studio's having trouble saving your work": "S\u0287nd\u1d09\u00f8's \u0265\u0250\u028c\u1d09n\u0183 \u0287\u0279\u00f8nbl\u01dd s\u0250\u028c\u1d09n\u0183 \u028e\u00f8n\u0279 \u028d\u00f8\u0279\u029e", "Studio:": "S\u0287nd\u1d09\u00f8:", @@ -1322,6 +1354,9 @@ "Submitted": "Snb\u026f\u1d09\u0287\u0287\u01ddd", "Subscript": "Snbs\u0254\u0279\u1d09d\u0287", "Subsection": "Snbs\u01dd\u0254\u0287\u1d09\u00f8n", + "Subsection Visibility": "Snbs\u01dd\u0254\u0287\u1d09\u00f8n V\u1d09s\u1d09b\u1d09l\u1d09\u0287\u028e", + "Subsection is hidden after due date": "Snbs\u01dd\u0254\u0287\u1d09\u00f8n \u1d09s \u0265\u1d09dd\u01ddn \u0250\u025f\u0287\u01dd\u0279 dn\u01dd d\u0250\u0287\u01dd", + "Subtitle": "Snb\u0287\u1d09\u0287l\u01dd", "Success": "Sn\u0254\u0254\u01ddss", "Success! Problem attempts reset for problem '<%= problem_id %>' and student '<%= student_id %>'.": "Sn\u0254\u0254\u01ddss! \u2c63\u0279\u00f8bl\u01dd\u026f \u0250\u0287\u0287\u01dd\u026fd\u0287s \u0279\u01dds\u01dd\u0287 \u025f\u00f8\u0279 d\u0279\u00f8bl\u01dd\u026f '<%= problem_id %>' \u0250nd s\u0287nd\u01ddn\u0287 '<%= student_id %>'.", "Successfully deleted student state for user {user}": "Sn\u0254\u0254\u01ddss\u025fnll\u028e d\u01ddl\u01dd\u0287\u01ddd s\u0287nd\u01ddn\u0287 s\u0287\u0250\u0287\u01dd \u025f\u00f8\u0279 ns\u01dd\u0279 {user}", @@ -1416,13 +1451,16 @@ "The organization that this signatory belongs to, as it should appear on certificates.": "\u0166\u0265\u01dd \u00f8\u0279\u0183\u0250n\u1d09z\u0250\u0287\u1d09\u00f8n \u0287\u0265\u0250\u0287 \u0287\u0265\u1d09s s\u1d09\u0183n\u0250\u0287\u00f8\u0279\u028e b\u01ddl\u00f8n\u0183s \u0287\u00f8, \u0250s \u1d09\u0287 s\u0265\u00f8nld \u0250dd\u01dd\u0250\u0279 \u00f8n \u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds.", "The page \"{route}\" could not be found.": "\u0166\u0265\u01dd d\u0250\u0183\u01dd \"{route}\" \u0254\u00f8nld n\u00f8\u0287 b\u01dd \u025f\u00f8nnd.", "The photo of your face matches the photo on your ID.": "\u0166\u0265\u01dd d\u0265\u00f8\u0287\u00f8 \u00f8\u025f \u028e\u00f8n\u0279 \u025f\u0250\u0254\u01dd \u026f\u0250\u0287\u0254\u0265\u01dds \u0287\u0265\u01dd d\u0265\u00f8\u0287\u00f8 \u00f8n \u028e\u00f8n\u0279 \u0197\u0110.", + "The public display name of the program.": "\u0166\u0265\u01dd dnbl\u1d09\u0254 d\u1d09sdl\u0250\u028e n\u0250\u026f\u01dd \u00f8\u025f \u0287\u0265\u01dd d\u0279\u00f8\u0183\u0279\u0250\u026f.", "The raw error message is:": "\u0166\u0265\u01dd \u0279\u0250\u028d \u01dd\u0279\u0279\u00f8\u0279 \u026f\u01ddss\u0250\u0183\u01dd \u1d09s:", "The selected content group does not exist": "\u0166\u0265\u01dd s\u01ddl\u01dd\u0254\u0287\u01ddd \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd d\u00f8\u01dds n\u00f8\u0287 \u01ddx\u1d09s\u0287", "The team \"{team}\" could not be found.": "\u0166\u0265\u01dd \u0287\u01dd\u0250\u026f \"{team}\" \u0254\u00f8nld n\u00f8\u0287 b\u01dd \u025f\u00f8nnd.", "The thread you selected has been deleted. Please select another thread.": "\u0166\u0265\u01dd \u0287\u0265\u0279\u01dd\u0250d \u028e\u00f8n s\u01ddl\u01dd\u0254\u0287\u01ddd \u0265\u0250s b\u01dd\u01ddn d\u01ddl\u01dd\u0287\u01ddd. \u2c63l\u01dd\u0250s\u01dd s\u01ddl\u01dd\u0254\u0287 \u0250n\u00f8\u0287\u0265\u01dd\u0279 \u0287\u0265\u0279\u01dd\u0250d.", "The timed transcript for the first video file does not appear to be the same as the timed transcript for the second video file.": "\u0166\u0265\u01dd \u0287\u1d09\u026f\u01ddd \u0287\u0279\u0250ns\u0254\u0279\u1d09d\u0287 \u025f\u00f8\u0279 \u0287\u0265\u01dd \u025f\u1d09\u0279s\u0287 \u028c\u1d09d\u01dd\u00f8 \u025f\u1d09l\u01dd d\u00f8\u01dds n\u00f8\u0287 \u0250dd\u01dd\u0250\u0279 \u0287\u00f8 b\u01dd \u0287\u0265\u01dd s\u0250\u026f\u01dd \u0250s \u0287\u0265\u01dd \u0287\u1d09\u026f\u01ddd \u0287\u0279\u0250ns\u0254\u0279\u1d09d\u0287 \u025f\u00f8\u0279 \u0287\u0265\u01dd s\u01dd\u0254\u00f8nd \u028c\u1d09d\u01dd\u00f8 \u025f\u1d09l\u01dd.", "The timed transcript for this video on edX is out of date, but YouTube has a current timed transcript for this video.": "\u0166\u0265\u01dd \u0287\u1d09\u026f\u01ddd \u0287\u0279\u0250ns\u0254\u0279\u1d09d\u0287 \u025f\u00f8\u0279 \u0287\u0265\u1d09s \u028c\u1d09d\u01dd\u00f8 \u00f8n \u01dddX \u1d09s \u00f8n\u0287 \u00f8\u025f d\u0250\u0287\u01dd, bn\u0287 \u024e\u00f8n\u0166nb\u01dd \u0265\u0250s \u0250 \u0254n\u0279\u0279\u01ddn\u0287 \u0287\u1d09\u026f\u01ddd \u0287\u0279\u0250ns\u0254\u0279\u1d09d\u0287 \u025f\u00f8\u0279 \u0287\u0265\u1d09s \u028c\u1d09d\u01dd\u00f8.", + "The title entered here will override the title set for the individual run of the course. It will be displayed on the XSeries progress page and in marketing presentations.": "\u0166\u0265\u01dd \u0287\u1d09\u0287l\u01dd \u01ddn\u0287\u01dd\u0279\u01ddd \u0265\u01dd\u0279\u01dd \u028d\u1d09ll \u00f8\u028c\u01dd\u0279\u0279\u1d09d\u01dd \u0287\u0265\u01dd \u0287\u1d09\u0287l\u01dd s\u01dd\u0287 \u025f\u00f8\u0279 \u0287\u0265\u01dd \u1d09nd\u1d09\u028c\u1d09dn\u0250l \u0279nn \u00f8\u025f \u0287\u0265\u01dd \u0254\u00f8n\u0279s\u01dd. \u0197\u0287 \u028d\u1d09ll b\u01dd d\u1d09sdl\u0250\u028e\u01ddd \u00f8n \u0287\u0265\u01dd XS\u01dd\u0279\u1d09\u01dds d\u0279\u00f8\u0183\u0279\u01ddss d\u0250\u0183\u01dd \u0250nd \u1d09n \u026f\u0250\u0279\u029e\u01dd\u0287\u1d09n\u0183 d\u0279\u01dds\u01ddn\u0287\u0250\u0287\u1d09\u00f8ns.", "The topic \"{topic}\" could not be found.": "\u0166\u0265\u01dd \u0287\u00f8d\u1d09\u0254 \"{topic}\" \u0254\u00f8nld n\u00f8\u0287 b\u01dd \u025f\u00f8nnd.", + "The unique number that identifies your course within your organization, e.g. CS101.": "\u0166\u0265\u01dd nn\u1d09bn\u01dd nn\u026fb\u01dd\u0279 \u0287\u0265\u0250\u0287 \u1d09d\u01ddn\u0287\u1d09\u025f\u1d09\u01dds \u028e\u00f8n\u0279 \u0254\u00f8n\u0279s\u01dd \u028d\u1d09\u0287\u0265\u1d09n \u028e\u00f8n\u0279 \u00f8\u0279\u0183\u0250n\u1d09z\u0250\u0287\u1d09\u00f8n, \u01dd.\u0183. \u023bS101.", "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.": "\u0166\u0265\u01dd \u028d\u01dd\u1d09\u0183\u0265\u0287 \u00f8\u025f \u0250ll \u0250ss\u1d09\u0183n\u026f\u01ddn\u0287s \u00f8\u025f \u0287\u0265\u1d09s \u0287\u028ed\u01dd \u0250s \u0250 d\u01dd\u0279\u0254\u01ddn\u0287\u0250\u0183\u01dd \u00f8\u025f \u0287\u0265\u01dd \u0287\u00f8\u0287\u0250l \u0183\u0279\u0250d\u01dd, \u025f\u00f8\u0279 \u01ddx\u0250\u026fdl\u01dd, 40. \u0110\u00f8 n\u00f8\u0287 \u1d09n\u0254lnd\u01dd \u0287\u0265\u01dd d\u01dd\u0279\u0254\u01ddn\u0287 s\u028e\u026fb\u00f8l.", "The {cohortGroupName} cohort has been created. You can manually add students to this cohort below.": "\u0166\u0265\u01dd {cohortGroupName} \u0254\u00f8\u0265\u00f8\u0279\u0287 \u0265\u0250s b\u01dd\u01ddn \u0254\u0279\u01dd\u0250\u0287\u01ddd. \u024e\u00f8n \u0254\u0250n \u026f\u0250nn\u0250ll\u028e \u0250dd s\u0287nd\u01ddn\u0287s \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287 b\u01ddl\u00f8\u028d.", "There are invalid keywords in your email. Check the following keywords and try again.": "\u0166\u0265\u01dd\u0279\u01dd \u0250\u0279\u01dd \u1d09n\u028c\u0250l\u1d09d \u029e\u01dd\u028e\u028d\u00f8\u0279ds \u1d09n \u028e\u00f8n\u0279 \u01dd\u026f\u0250\u1d09l. \u023b\u0265\u01dd\u0254\u029e \u0287\u0265\u01dd \u025f\u00f8ll\u00f8\u028d\u1d09n\u0183 \u029e\u01dd\u028e\u028d\u00f8\u0279ds \u0250nd \u0287\u0279\u028e \u0250\u0183\u0250\u1d09n.", @@ -1548,6 +1586,8 @@ "Unfollow": "\u0244n\u025f\u00f8ll\u00f8\u028d", "Ungraded": "\u0244n\u0183\u0279\u0250d\u01ddd", "Unit": "\u0244n\u1d09\u0287", + "Unit Visibility": "\u0244n\u1d09\u0287 V\u1d09s\u1d09b\u1d09l\u1d09\u0287\u028e", + "Units inherit the visibility setting of the subsection they are in. If you make this subsection visible to learners, published units that were previously hidden also become visible. Only units that were explicitly hidden remain hidden regardless of the option you select for this subsection.": "\u0244n\u1d09\u0287s \u1d09n\u0265\u01dd\u0279\u1d09\u0287 \u0287\u0265\u01dd \u028c\u1d09s\u1d09b\u1d09l\u1d09\u0287\u028e s\u01dd\u0287\u0287\u1d09n\u0183 \u00f8\u025f \u0287\u0265\u01dd snbs\u01dd\u0254\u0287\u1d09\u00f8n \u0287\u0265\u01dd\u028e \u0250\u0279\u01dd \u1d09n. \u0197\u025f \u028e\u00f8n \u026f\u0250\u029e\u01dd \u0287\u0265\u1d09s snbs\u01dd\u0254\u0287\u1d09\u00f8n \u028c\u1d09s\u1d09bl\u01dd \u0287\u00f8 l\u01dd\u0250\u0279n\u01dd\u0279s, dnbl\u1d09s\u0265\u01ddd nn\u1d09\u0287s \u0287\u0265\u0250\u0287 \u028d\u01dd\u0279\u01dd d\u0279\u01dd\u028c\u1d09\u00f8nsl\u028e \u0265\u1d09dd\u01ddn \u0250ls\u00f8 b\u01dd\u0254\u00f8\u026f\u01dd \u028c\u1d09s\u1d09bl\u01dd. \u00d8nl\u028e nn\u1d09\u0287s \u0287\u0265\u0250\u0287 \u028d\u01dd\u0279\u01dd \u01ddxdl\u1d09\u0254\u1d09\u0287l\u028e \u0265\u1d09dd\u01ddn \u0279\u01dd\u026f\u0250\u1d09n \u0265\u1d09dd\u01ddn \u0279\u01dd\u0183\u0250\u0279dl\u01ddss \u00f8\u025f \u0287\u0265\u01dd \u00f8d\u0287\u1d09\u00f8n \u028e\u00f8n s\u01ddl\u01dd\u0254\u0287 \u025f\u00f8\u0279 \u0287\u0265\u1d09s snbs\u01dd\u0254\u0287\u1d09\u00f8n.", "Unknown": "\u0244n\u029en\u00f8\u028dn", "Unknown Error Occurred.": "\u0244n\u029en\u00f8\u028dn \u0246\u0279\u0279\u00f8\u0279 \u00d8\u0254\u0254n\u0279\u0279\u01ddd.", "Unknown user: {user}": "\u0244n\u029en\u00f8\u028dn ns\u01dd\u0279: {user}", @@ -1581,6 +1621,7 @@ "Upload PDF": "\u0244dl\u00f8\u0250d \u2c63\u0110F", "Upload Photo": "\u0244dl\u00f8\u0250d \u2c63\u0265\u00f8\u0287\u00f8", "Upload Signature Image": "\u0244dl\u00f8\u0250d S\u1d09\u0183n\u0250\u0287n\u0279\u01dd \u0197\u026f\u0250\u0183\u01dd", + "Upload a CSV file": "\u0244dl\u00f8\u0250d \u0250 \u023bSV \u025f\u1d09l\u01dd", "Upload a comma separated values (.csv) file that contains the usernames or email addresses of learners who have been given exceptions. Include the username or email address in the first comma separated field. You can include an optional note describing the reason for the exception in the second comma separated field.": "\u0244dl\u00f8\u0250d \u0250 \u0254\u00f8\u026f\u026f\u0250 s\u01ddd\u0250\u0279\u0250\u0287\u01ddd \u028c\u0250ln\u01dds (.\u0254s\u028c) \u025f\u1d09l\u01dd \u0287\u0265\u0250\u0287 \u0254\u00f8n\u0287\u0250\u1d09ns \u0287\u0265\u01dd ns\u01dd\u0279n\u0250\u026f\u01dds \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss\u01dds \u00f8\u025f l\u01dd\u0250\u0279n\u01dd\u0279s \u028d\u0265\u00f8 \u0265\u0250\u028c\u01dd b\u01dd\u01ddn \u0183\u1d09\u028c\u01ddn \u01ddx\u0254\u01ddd\u0287\u1d09\u00f8ns. \u0197n\u0254lnd\u01dd \u0287\u0265\u01dd ns\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss \u1d09n \u0287\u0265\u01dd \u025f\u1d09\u0279s\u0287 \u0254\u00f8\u026f\u026f\u0250 s\u01ddd\u0250\u0279\u0250\u0287\u01ddd \u025f\u1d09\u01ddld. \u024e\u00f8n \u0254\u0250n \u1d09n\u0254lnd\u01dd \u0250n \u00f8d\u0287\u1d09\u00f8n\u0250l n\u00f8\u0287\u01dd d\u01dds\u0254\u0279\u1d09b\u1d09n\u0183 \u0287\u0265\u01dd \u0279\u01dd\u0250s\u00f8n \u025f\u00f8\u0279 \u0287\u0265\u01dd \u01ddx\u0254\u01ddd\u0287\u1d09\u00f8n \u1d09n \u0287\u0265\u01dd s\u01dd\u0254\u00f8nd \u0254\u00f8\u026f\u026f\u0250 s\u01ddd\u0250\u0279\u0250\u0287\u01ddd \u025f\u1d09\u01ddld.", "Upload a new PDF to \u201c<%= name %>\u201d": "\u0244dl\u00f8\u0250d \u0250 n\u01dd\u028d \u2c63\u0110F \u0287\u00f8 \u201c<%= name %>\u201d", "Upload an image": "\u0244dl\u00f8\u0250d \u0250n \u1d09\u026f\u0250\u0183\u01dd", @@ -1723,6 +1764,7 @@ "Will Be Visible To:": "W\u1d09ll \u0243\u01dd V\u1d09s\u1d09bl\u01dd \u0166\u00f8:", "Words: {0}": "W\u00f8\u0279ds: {0}", "Would you like to sign in using your %(providerName)s credentials?": "W\u00f8nld \u028e\u00f8n l\u1d09\u029e\u01dd \u0287\u00f8 s\u1d09\u0183n \u1d09n ns\u1d09n\u0183 \u028e\u00f8n\u0279 %(providerName)s \u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250ls?", + "XSeries": "XS\u01dd\u0279\u1d09\u01dds", "XSeries Program Certificates": "XS\u01dd\u0279\u1d09\u01dds \u2c63\u0279\u00f8\u0183\u0279\u0250\u026f \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dds", "Year of Birth": "\u024e\u01dd\u0250\u0279 \u00f8\u025f \u0243\u1d09\u0279\u0287\u0265", "Yes, allow edits to the active Certificate": "\u024e\u01dds, \u0250ll\u00f8\u028d \u01ddd\u1d09\u0287s \u0287\u00f8 \u0287\u0265\u01dd \u0250\u0254\u0287\u1d09\u028c\u01dd \u023b\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd", @@ -1840,6 +1882,7 @@ "certificate.credential_url": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.\u0254\u0279\u01ddd\u01ddn\u0287\u1d09\u0250l_n\u0279l", "certificate.display_name": "\u0254\u01dd\u0279\u0287\u1d09\u025f\u1d09\u0254\u0250\u0287\u01dd.d\u1d09sdl\u0250\u028e_n\u0250\u026f\u01dd", "close": "\u0254l\u00f8s\u01dd", + "confirm": "\u0254\u00f8n\u025f\u1d09\u0279\u026f", "content group": "\u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd", "correct": "\u0254\u00f8\u0279\u0279\u01dd\u0254\u0287", "country": "\u0254\u00f8nn\u0287\u0279\u028e", @@ -1868,6 +1911,7 @@ "formLabel": "\u025f\u00f8\u0279\u026f\u0141\u0250b\u01ddl", "gettext(": "\u0183\u01dd\u0287\u0287\u01ddx\u0287(", "group configuration": "\u0183\u0279\u00f8nd \u0254\u00f8n\u025f\u1d09\u0183n\u0279\u0250\u0287\u1d09\u00f8n", + "image omitted": "\u1d09\u026f\u0250\u0183\u01dd \u00f8\u026f\u1d09\u0287\u0287\u01ddd", "incorrect": "\u1d09n\u0254\u00f8\u0279\u0279\u01dd\u0254\u0287", "language": "l\u0250n\u0183n\u0250\u0183\u01dd", "last activity": "l\u0250s\u0287 \u0250\u0254\u0287\u1d09\u028c\u1d09\u0287\u028e", @@ -1902,6 +1946,10 @@ "\u0287\u0265\u01dd\u0279\u01dd \u1d09s \u0254n\u0279\u0279\u01ddn\u0287l\u028e %(numVotes)s \u028c\u00f8\u0287\u01dd", "\u0287\u0265\u01dd\u0279\u01dd \u0250\u0279\u01dd \u0254n\u0279\u0279\u01ddn\u0287l\u028e %(numVotes)s \u028c\u00f8\u0287\u01dds" ], + "there is currently {numVotes} vote": [ + "\u0287\u0265\u01dd\u0279\u01dd \u1d09s \u0254n\u0279\u0279\u01ddn\u0287l\u028e {numVotes} \u028c\u00f8\u0287\u01dd", + "\u0287\u0265\u01dd\u0279\u01dd \u0250\u0279\u01dd \u0254n\u0279\u0279\u01ddn\u0287l\u028e {numVotes} \u028c\u00f8\u0287\u01dds" + ], "timed": "\u0287\u1d09\u026f\u01ddd", "title": "\u0287\u1d09\u0287l\u01dd", "type": "\u0287\u028ed\u01dd", @@ -1911,7 +1959,24 @@ "username or email": "ns\u01dd\u0279n\u0250\u026f\u01dd \u00f8\u0279 \u01dd\u026f\u0250\u1d09l", "with %(release_date_from)s": "\u028d\u1d09\u0287\u0265 %(release_date_from)s", "with %(section_or_subsection)s": "\u028d\u1d09\u0287\u0265 %(section_or_subsection)s", + "{0} is invalid": "{0} \u1d09s \u1d09n\u028c\u0250l\u1d09d", + "{0} is required": "{0} \u1d09s \u0279\u01ddbn\u1d09\u0279\u01ddd", + "{0} must be a number": "{0} \u026fns\u0287 b\u01dd \u0250 nn\u026fb\u01dd\u0279", + "{0} must be a valid email": "{0} \u026fns\u0287 b\u01dd \u0250 \u028c\u0250l\u1d09d \u01dd\u026f\u0250\u1d09l", + "{0} must be a valid url": "{0} \u026fns\u0287 b\u01dd \u0250 \u028c\u0250l\u1d09d n\u0279l", + "{0} must be accepted": "{0} \u026fns\u0287 b\u01dd \u0250\u0254\u0254\u01ddd\u0287\u01ddd", + "{0} must be at least {1} characters": "{0} \u026fns\u0287 b\u01dd \u0250\u0287 l\u01dd\u0250s\u0287 {1} \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s", + "{0} must be at most {1} characters": "{0} \u026fns\u0287 b\u01dd \u0250\u0287 \u026f\u00f8s\u0287 {1} \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s", + "{0} must be between {1} and {2}": "{0} \u026fns\u0287 b\u01dd b\u01dd\u0287\u028d\u01dd\u01ddn {1} \u0250nd {2}", + "{0} must be between {1} and {2} characters": "{0} \u026fns\u0287 b\u01dd b\u01dd\u0287\u028d\u01dd\u01ddn {1} \u0250nd {2} \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s", + "{0} must be greater than or equal to {1}": "{0} \u026fns\u0287 b\u01dd \u0183\u0279\u01dd\u0250\u0287\u01dd\u0279 \u0287\u0265\u0250n \u00f8\u0279 \u01ddbn\u0250l \u0287\u00f8 {1}", + "{0} must be less than or equal to {1}": "{0} \u026fns\u0287 b\u01dd l\u01ddss \u0287\u0265\u0250n \u00f8\u0279 \u01ddbn\u0250l \u0287\u00f8 {1}", + "{0} must be one of: gettext( {1}": "{0} \u026fns\u0287 b\u01dd \u00f8n\u01dd \u00f8\u025f: \u0183\u01dd\u0287\u0287\u01ddx\u0287( {1}", + "{0} must be the same as {1}": "{0} \u026fns\u0287 b\u01dd \u0287\u0265\u01dd s\u0250\u026f\u01dd \u0250s {1}", + "{0} must be {1} characters": "{0} \u026fns\u0287 b\u01dd {1} \u0254\u0265\u0250\u0279\u0250\u0254\u0287\u01dd\u0279s", + "{0} must only contain digits": "{0} \u026fns\u0287 \u00f8nl\u028e \u0254\u00f8n\u0287\u0250\u1d09n d\u1d09\u0183\u1d09\u0287s", "{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}\u0243\u0279\u00f8\u028ds\u01dd \u0287\u01dd\u0250\u026fs \u1d09n \u00f8\u0287\u0265\u01dd\u0279 \u0287\u00f8d\u1d09\u0254s{span_end} \u00f8\u0279 {search_span_start}s\u01dd\u0250\u0279\u0254\u0265 \u0287\u01dd\u0250\u026fs{span_end} \u1d09n \u0287\u0265\u1d09s \u0287\u00f8d\u1d09\u0254. \u0197\u025f \u028e\u00f8n s\u0287\u1d09ll \u0254\u0250n'\u0287 \u025f\u1d09nd \u0250 \u0287\u01dd\u0250\u026f \u0287\u00f8 \u027e\u00f8\u1d09n, {create_span_start}\u0254\u0279\u01dd\u0250\u0287\u01dd \u0250 n\u01dd\u028d \u0287\u01dd\u0250\u026f \u1d09n \u0287\u0265\u1d09s \u0287\u00f8d\u1d09\u0254{span_end}.", + "{display_name} Settings": "{display_name} S\u01dd\u0287\u0287\u1d09n\u0183s", "{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} \u1d09s \u0250l\u0279\u01dd\u0250d\u028e \u00f8n \u0287\u0265\u01dd {container} \u0287\u01dd\u0250\u026f. \u024c\u01dd\u0254\u0265\u01dd\u0254\u029e \u0287\u0265\u01dd \u01dd\u026f\u0250\u1d09l \u0250dd\u0279\u01ddss \u1d09\u025f \u028e\u00f8n \u028d\u0250n\u0287 \u0287\u00f8 \u0250dd \u0250 n\u01dd\u028d \u026f\u01dd\u026fb\u01dd\u0279.", "{hours}:{minutes} (current UTC time)": "{hours}:{minutes} (\u0254n\u0279\u0279\u01ddn\u0287 \u0244\u0166\u023b \u0287\u1d09\u026f\u01dd)", "{numMoved} student was removed from {oldCohort}": [ @@ -1922,15 +1987,31 @@ "{numPresent} s\u0287nd\u01ddn\u0287 \u028d\u0250s \u0250l\u0279\u01dd\u0250d\u028e \u1d09n \u0287\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287", "{numPresent} s\u0287nd\u01ddn\u0287s \u028d\u01dd\u0279\u01dd \u0250l\u0279\u01dd\u0250d\u028e \u1d09n \u0287\u0265\u01dd \u0254\u00f8\u0265\u00f8\u0279\u0287" ], + "{numResponses} other response": [ + "{numResponses} \u00f8\u0287\u0265\u01dd\u0279 \u0279\u01ddsd\u00f8ns\u01dd", + "{numResponses} \u00f8\u0287\u0265\u01dd\u0279 \u0279\u01ddsd\u00f8ns\u01dds" + ], + "{numResponses} response": [ + "{numResponses} \u0279\u01ddsd\u00f8ns\u01dd", + "{numResponses} \u0279\u01ddsd\u00f8ns\u01dds" + ], "{numUsersAdded} student has been added to this cohort": [ "{numUsersAdded} s\u0287nd\u01ddn\u0287 \u0265\u0250s b\u01dd\u01ddn \u0250dd\u01ddd \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287", "{numUsersAdded} s\u0287nd\u01ddn\u0287s \u0265\u0250\u028c\u01dd b\u01dd\u01ddn \u0250dd\u01ddd \u0287\u00f8 \u0287\u0265\u1d09s \u0254\u00f8\u0265\u00f8\u0279\u0287" ], + "{numVotes} Vote": [ + "{numVotes} V\u00f8\u0287\u01dd", + "{numVotes} V\u00f8\u0287\u01dds" + ], "{organization}\\'s logo": "{organization}\\'s l\u00f8\u0183\u00f8", "{platform_name} learners can see my:": "{platform_name} l\u01dd\u0250\u0279n\u01dd\u0279s \u0254\u0250n s\u01dd\u01dd \u026f\u028e:", "{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}W\u0250\u0279n\u1d09n\u0183:{screen_reader_end} N\u00f8 \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nds \u01ddx\u1d09s\u0287.", "{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}W\u0250\u0279n\u1d09n\u0183:{screen_reader_end} \u0166\u0265\u01dd d\u0279\u01dd\u028c\u1d09\u00f8nsl\u028e s\u01ddl\u01dd\u0254\u0287\u01ddd \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd \u028d\u0250s d\u01ddl\u01dd\u0287\u01ddd. S\u01ddl\u01dd\u0254\u0287 \u0250n\u00f8\u0287\u0265\u01dd\u0279 \u0254\u00f8n\u0287\u01ddn\u0287 \u0183\u0279\u00f8nd.", "{totalItems} total": "{totalItems} \u0287\u00f8\u0287\u0250l", + "{unread_count} new comment": [ + "{unread_count} n\u01dd\u028d \u0254\u00f8\u026f\u026f\u01ddn\u0287", + "{unread_count} n\u01dd\u028d \u0254\u00f8\u026f\u026f\u01ddn\u0287s" + ], "\u2026": "\u2026" }; diff --git a/cms/static/js/i18n/rtl/djangojs.js b/cms/static/js/i18n/rtl/djangojs.js index 4c084263fd..f987b764c0 100644 --- a/cms/static/js/i18n/rtl/djangojs.js +++ b/cms/static/js/i18n/rtl/djangojs.js @@ -33,7 +33,6 @@ "%(cohort_name)s (%(user_count)s)": "%(cohort_name)s (%(user_count)s)", "%(comments_count)s %(span_sr_open)scomments %(span_close)s": "%(comments_count)s %(span_sr_open)s\u0630\u062e\u0648\u0648\u062b\u0631\u0641\u0633 %(span_close)s", "%(comments_count)s %(span_sr_open)scomments (%(unread_comments_count)s unread comments)%(span_close)s": "%(comments_count)s %(span_sr_open)s\u0630\u062e\u0648\u0648\u062b\u0631\u0641\u0633 (%(unread_comments_count)s \u0639\u0631\u0642\u062b\u0634\u064a \u0630\u062e\u0648\u0648\u062b\u0631\u0641\u0633)%(span_close)s", - "%(display_name)s Settings": "%(display_name)s \u0633\u062b\u0641\u0641\u0647\u0631\u0644\u0633", "%(download_link_start)sDownload this image (right-click or option-click, save as)%(link_end)s and then %(upload_link_start)supload%(link_end)s it to your backpack.": "%(download_link_start)s\u064a\u062e\u0635\u0631\u0645\u062e\u0634\u064a \u0641\u0627\u0647\u0633 \u0647\u0648\u0634\u0644\u062b (\u0642\u0647\u0644\u0627\u0641-\u0630\u0645\u0647\u0630\u0646 \u062e\u0642 \u062e\u062d\u0641\u0647\u062e\u0631-\u0630\u0645\u0647\u0630\u0646, \u0633\u0634\u062f\u062b \u0634\u0633)%(link_end)s \u0634\u0631\u064a \u0641\u0627\u062b\u0631 %(upload_link_start)s\u0639\u062d\u0645\u062e\u0634\u064a%(link_end)s \u0647\u0641 \u0641\u062e \u063a\u062e\u0639\u0642 \u0632\u0634\u0630\u0646\u062d\u0634\u0630\u0646.", "%(errorCount)s error found in form.": [ "%(errorCount)s \u062b\u0642\u0642\u062e\u0642 \u0628\u062e\u0639\u0631\u064a \u0647\u0631 \u0628\u062e\u0642\u0648.", @@ -139,6 +138,7 @@ "A driver's license, passport, or other government-issued ID with your name and photo": "\u0634 \u064a\u0642\u0647\u062f\u062b\u0642'\u0633 \u0645\u0647\u0630\u062b\u0631\u0633\u062b, \u062d\u0634\u0633\u0633\u062d\u062e\u0642\u0641, \u062e\u0642 \u062e\u0641\u0627\u062b\u0642 \u0644\u062e\u062f\u062b\u0642\u0631\u0648\u062b\u0631\u0641-\u0647\u0633\u0633\u0639\u062b\u064a \u0647\u064a \u0635\u0647\u0641\u0627 \u063a\u062e\u0639\u0642 \u0631\u0634\u0648\u062b \u0634\u0631\u064a \u062d\u0627\u062e\u0641\u062e", "A list of courses you have just enrolled in as a verified student": "\u0634 \u0645\u0647\u0633\u0641 \u062e\u0628 \u0630\u062e\u0639\u0642\u0633\u062b\u0633 \u063a\u062e\u0639 \u0627\u0634\u062f\u062b \u062a\u0639\u0633\u0641 \u062b\u0631\u0642\u062e\u0645\u0645\u062b\u064a \u0647\u0631 \u0634\u0633 \u0634 \u062f\u062b\u0642\u0647\u0628\u0647\u062b\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641", "A name that identifies your team (maximum 255 characters).": "\u0634 \u0631\u0634\u0648\u062b \u0641\u0627\u0634\u0641 \u0647\u064a\u062b\u0631\u0641\u0647\u0628\u0647\u062b\u0633 \u063a\u062e\u0639\u0642 \u0641\u062b\u0634\u0648 (\u0648\u0634\u0637\u0647\u0648\u0639\u0648 255 \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633).", + "A short description of the program, including concepts covered and expected outcomes (255 character limit).": "\u0634 \u0633\u0627\u062e\u0642\u0641 \u064a\u062b\u0633\u0630\u0642\u0647\u062d\u0641\u0647\u062e\u0631 \u062e\u0628 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648, \u0647\u0631\u0630\u0645\u0639\u064a\u0647\u0631\u0644 \u0630\u062e\u0631\u0630\u062b\u062d\u0641\u0633 \u0630\u062e\u062f\u062b\u0642\u062b\u064a \u0634\u0631\u064a \u062b\u0637\u062d\u062b\u0630\u0641\u062b\u064a \u062e\u0639\u0641\u0630\u062e\u0648\u062b\u0633 (255 \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642 \u0645\u0647\u0648\u0647\u0641).", "A short description of the team to help other learners understand the goals or direction of the team (maximum 300 characters).": "\u0634 \u0633\u0627\u062e\u0642\u0641 \u064a\u062b\u0633\u0630\u0642\u0647\u062d\u0641\u0647\u062e\u0631 \u062e\u0628 \u0641\u0627\u062b \u0641\u062b\u0634\u0648 \u0641\u062e \u0627\u062b\u0645\u062d \u062e\u0641\u0627\u062b\u0642 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0639\u0631\u064a\u062b\u0642\u0633\u0641\u0634\u0631\u064a \u0641\u0627\u062b \u0644\u062e\u0634\u0645\u0633 \u062e\u0642 \u064a\u0647\u0642\u062b\u0630\u0641\u0647\u062e\u0631 \u062e\u0628 \u0641\u0627\u062b \u0641\u062b\u0634\u0648 (\u0648\u0634\u0637\u0647\u0648\u0639\u0648 300 \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633).", "A valid email address is required": "\u0634 \u062f\u0634\u0645\u0647\u064a \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633 \u0647\u0633 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a", "ABCDEFGHIJKLMNOPQRSTUVWXYZ": "\u0634\u0632\u0630\u064a\u062b\u0628\u0644\u0627\u0647\u062a\u0646\u0645\u0648\u0631\u062e\u062d\u0636\u0642\u0633\u0641\u0639\u062f\u0635\u0637\u063a\u0638", @@ -146,7 +146,6 @@ "About Me": "\u0634\u0632\u062e\u0639\u0641 \u0648\u062b", "About You": "\u0634\u0632\u062e\u0639\u0641 \u063a\u062e\u0639", "About me": "\u0634\u0632\u062e\u0639\u0641 \u0648\u062b", - "Access": "\u0634\u0630\u0630\u062b\u0633\u0633", "Accomplishments": "\u0634\u0630\u0630\u062e\u0648\u062d\u0645\u0647\u0633\u0627\u0648\u062b\u0631\u0641\u0633", "Accomplishments Pagination": "\u0634\u0630\u0630\u062e\u0648\u062d\u0645\u0647\u0633\u0627\u0648\u062b\u0631\u0641\u0633 \u062d\u0634\u0644\u0647\u0631\u0634\u0641\u0647\u062e\u0631", "Account Information": "\u0634\u0630\u0630\u062e\u0639\u0631\u0641 \u0647\u0631\u0628\u062e\u0642\u0648\u0634\u0641\u0647\u062e\u0631", @@ -176,9 +175,11 @@ "Add a Response": "\u0634\u064a\u064a \u0634 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b", "Add a clear and descriptive title to encourage participation.": "\u0634\u064a\u064a \u0634 \u0630\u0645\u062b\u0634\u0642 \u0634\u0631\u064a \u064a\u062b\u0633\u0630\u0642\u0647\u062d\u0641\u0647\u062f\u062b \u0641\u0647\u0641\u0645\u062b \u0641\u062e \u062b\u0631\u0630\u062e\u0639\u0642\u0634\u0644\u062b \u062d\u0634\u0642\u0641\u0647\u0630\u0647\u062d\u0634\u0641\u0647\u062e\u0631.", "Add a comment": "\u0634\u064a\u064a \u0634 \u0630\u062e\u0648\u0648\u062b\u0631\u0641", + "Add a course": "\u0634\u064a\u064a \u0634 \u0630\u062e\u0639\u0642\u0633\u062b", "Add a learning outcome here": "\u0634\u064a\u064a \u0634 \u0645\u062b\u0634\u0642\u0631\u0647\u0631\u0644 \u062e\u0639\u0641\u0630\u062e\u0648\u062b \u0627\u062b\u0642\u062b", "Add a response:": "\u0634\u064a\u064a \u0634 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b:", "Add another group": "\u0634\u064a\u064a \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0644\u0642\u062e\u0639\u062d", + "Add another run": "\u0634\u064a\u064a \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0642\u0639\u0631", "Add language": "\u0634\u064a\u064a \u0645\u0634\u0631\u0644\u0639\u0634\u0644\u062b", "Add notes about this learner": "\u0634\u064a\u064a \u0631\u062e\u0641\u062b\u0633 \u0634\u0632\u062e\u0639\u0641 \u0641\u0627\u0647\u0633 \u0645\u062b\u0634\u0642\u0631\u062b\u0642", "Add students to this cohort": "\u0634\u064a\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641", @@ -196,6 +197,8 @@ "Adjust video volume": "\u0634\u064a\u062a\u0639\u0633\u0641 \u062f\u0647\u064a\u062b\u062e \u062f\u062e\u0645\u0639\u0648\u062b", "Admin": "\u0634\u064a\u0648\u0647\u0631", "Advanced": "\u0634\u064a\u062f\u0634\u0631\u0630\u062b\u064a", + "After the subsection\\'s due date has passed, learners can no longer access its content. The subsection remains included in grade calculations.": "\u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631\\'\u0633 \u064a\u0639\u062b \u064a\u0634\u0641\u062b \u0627\u0634\u0633 \u062d\u0634\u0633\u0633\u062b\u064a, \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0630\u0634\u0631 \u0631\u062e \u0645\u062e\u0631\u0644\u062b\u0642 \u0634\u0630\u0630\u062b\u0633\u0633 \u0647\u0641\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641. \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0642\u062b\u0648\u0634\u0647\u0631\u0633 \u0647\u0631\u0630\u0645\u0639\u064a\u062b\u064a \u0647\u0631 \u0644\u0642\u0634\u064a\u062b \u0630\u0634\u0645\u0630\u0639\u0645\u0634\u0641\u0647\u062e\u0631\u0633.", + "After you publish this program, you cannot add or remove course codes or remove course runs.": "\u0634\u0628\u0641\u062b\u0642 \u063a\u062e\u0639 \u062d\u0639\u0632\u0645\u0647\u0633\u0627 \u0641\u0627\u0647\u0633 \u062d\u0642\u062e\u0644\u0642\u0634\u0648, \u063a\u062e\u0639 \u0630\u0634\u0631\u0631\u062e\u0641 \u0634\u064a\u064a \u062e\u0642 \u0642\u062b\u0648\u062e\u062f\u062b \u0630\u062e\u0639\u0642\u0633\u062b \u0630\u062e\u064a\u062b\u0633 \u062e\u0642 \u0642\u062b\u0648\u062e\u062f\u062b \u0630\u062e\u0639\u0642\u0633\u062b \u0642\u0639\u0631\u0633.", "Align center": "\u0634\u0645\u0647\u0644\u0631 \u0630\u062b\u0631\u0641\u062b\u0642", "Align left": "\u0634\u0645\u0647\u0644\u0631 \u0645\u062b\u0628\u0641", "Align right": "\u0634\u0645\u0647\u0644\u0631 \u0642\u0647\u0644\u0627\u0641", @@ -254,8 +257,6 @@ "Answer hidden": "\u0634\u0631\u0633\u0635\u062b\u0642 \u0627\u0647\u064a\u064a\u062b\u0631", "Answer:": "\u0634\u0631\u0633\u0635\u062b\u0642:", "Any content that has listed this content as a prerequisite will also have access limitations removed.": "\u0634\u0631\u063a \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0641\u0627\u0634\u0641 \u0627\u0634\u0633 \u0645\u0647\u0633\u0641\u062b\u064a \u0641\u0627\u0647\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0634\u0633 \u0634 \u062d\u0642\u062b\u0642\u062b\u0636\u0639\u0647\u0633\u0647\u0641\u062b \u0635\u0647\u0645\u0645 \u0634\u0645\u0633\u062e \u0627\u0634\u062f\u062b \u0634\u0630\u0630\u062b\u0633\u0633 \u0645\u0647\u0648\u0647\u0641\u0634\u0641\u0647\u062e\u0631\u0633 \u0642\u062b\u0648\u062e\u062f\u062b\u064a.", - "Any subsections or units that are explicitly hidden from students will remain hidden after you clear this option for the section.": "\u0634\u0631\u063a \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631\u0633 \u062e\u0642 \u0639\u0631\u0647\u0641\u0633 \u0641\u0627\u0634\u0641 \u0634\u0642\u062b \u062b\u0637\u062d\u0645\u0647\u0630\u0647\u0641\u0645\u063a \u0627\u0647\u064a\u064a\u062b\u0631 \u0628\u0642\u062e\u0648 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0635\u0647\u0645\u0645 \u0642\u062b\u0648\u0634\u0647\u0631 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u063a\u062e\u0639 \u0630\u0645\u062b\u0634\u0642 \u0641\u0627\u0647\u0633 \u062e\u062d\u0641\u0647\u062e\u0631 \u0628\u062e\u0642 \u0641\u0627\u062b \u0633\u062b\u0630\u0641\u0647\u062e\u0631.", - "Any units that are explicitly hidden from students will remain hidden after you clear this option for the subsection.": "\u0634\u0631\u063a \u0639\u0631\u0647\u0641\u0633 \u0641\u0627\u0634\u0641 \u0634\u0642\u062b \u062b\u0637\u062d\u0645\u0647\u0630\u0647\u0641\u0645\u063a \u0627\u0647\u064a\u064a\u062b\u0631 \u0628\u0642\u062e\u0648 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0635\u0647\u0645\u0645 \u0642\u062b\u0648\u0634\u0647\u0631 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u063a\u062e\u0639 \u0630\u0645\u062b\u0634\u0642 \u0641\u0627\u0647\u0633 \u062e\u062d\u0641\u0647\u062e\u0631 \u0628\u062e\u0642 \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631.", "Are you having trouble finding a team to join?": "\u0634\u0642\u062b \u063a\u062e\u0639 \u0627\u0634\u062f\u0647\u0631\u0644 \u0641\u0642\u062e\u0639\u0632\u0645\u062b \u0628\u0647\u0631\u064a\u0647\u0631\u0644 \u0634 \u0641\u062b\u0634\u0648 \u0641\u062e \u062a\u062e\u0647\u0631?", "Are you sure you want to delete this comment?": "\u0634\u0642\u062b \u063a\u062e\u0639 \u0633\u0639\u0642\u062b \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u064a\u062b\u0645\u062b\u0641\u062b \u0641\u0627\u0647\u0633 \u0630\u062e\u0648\u0648\u062b\u0631\u0641?", "Are you sure you want to delete this page? This action cannot be undone.": "\u0634\u0642\u062b \u063a\u062e\u0639 \u0633\u0639\u0642\u062b \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u064a\u062b\u0645\u062b\u0641\u062b \u0641\u0627\u0647\u0633 \u062d\u0634\u0644\u062b? \u0641\u0627\u0647\u0633 \u0634\u0630\u0641\u0647\u062e\u0631 \u0630\u0634\u0631\u0631\u062e\u0641 \u0632\u062b \u0639\u0631\u064a\u062e\u0631\u062b.", @@ -304,7 +305,6 @@ "Bulk Exceptions": "\u0632\u0639\u0645\u0646 \u062b\u0637\u0630\u062b\u062d\u0641\u0647\u062e\u0631\u0633", "Bullet list": "\u0632\u0639\u0645\u0645\u062b\u0641 \u0645\u0647\u0633\u0641", "Bulleted List (Ctrl+U)": "\u0632\u0639\u0645\u0645\u062b\u0641\u062b\u064a \u0645\u0647\u0633\u0641 (\u0630\u0641\u0642\u0645+\u0639)", - "By default, submitted exams are available for review after the due date has passed. Select this option to keep exams hidden after that date.": "\u0632\u063a \u064a\u062b\u0628\u0634\u0639\u0645\u0641, \u0633\u0639\u0632\u0648\u0647\u0641\u0641\u062b\u064a \u062b\u0637\u0634\u0648\u0633 \u0634\u0642\u062b \u0634\u062f\u0634\u0647\u0645\u0634\u0632\u0645\u062b \u0628\u062e\u0642 \u0642\u062b\u062f\u0647\u062b\u0635 \u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u062b \u064a\u0639\u062b \u064a\u0634\u0641\u062b \u0627\u0634\u0633 \u062d\u0634\u0633\u0633\u062b\u064a. \u0633\u062b\u0645\u062b\u0630\u0641 \u0641\u0627\u0647\u0633 \u062e\u062d\u0641\u0647\u062e\u0631 \u0641\u062e \u0646\u062b\u062b\u062d \u062b\u0637\u0634\u0648\u0633 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u0634\u0641 \u064a\u0634\u0641\u062b.", "By: Community TA": "\u0632\u063a: \u0630\u062e\u0648\u0648\u0639\u0631\u0647\u0641\u063a \u0641\u0634", "By: Staff": "\u0632\u063a: \u0633\u0641\u0634\u0628\u0628", "Can we match the photo you took with the one on your ID?": "\u0630\u0634\u0631 \u0635\u062b \u0648\u0634\u0641\u0630\u0627 \u0641\u0627\u062b \u062d\u0627\u062e\u0641\u062e \u063a\u062e\u0639 \u0641\u062e\u062e\u0646 \u0635\u0647\u0641\u0627 \u0641\u0627\u062b \u062e\u0631\u062b \u062e\u0631 \u063a\u062e\u0639\u0642 \u0647\u064a?", @@ -336,7 +336,7 @@ "Change Manually": "\u0630\u0627\u0634\u0631\u0644\u062b \u0648\u0634\u0631\u0639\u0634\u0645\u0645\u063a", "Change My Email Address": "\u0630\u0627\u0634\u0631\u0644\u062b \u0648\u063a \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633", "Change image": "\u0630\u0627\u0634\u0631\u0644\u062b \u0647\u0648\u0634\u0644\u062b", - "Change the settings for %(display_name)s": "\u0630\u0627\u0634\u0631\u0644\u062b \u0641\u0627\u062b \u0633\u062b\u0641\u0641\u0647\u0631\u0644\u0633 \u0628\u062e\u0642 %(display_name)s", + "Change the settings for {display_name}": "\u0630\u0627\u0634\u0631\u0644\u062b \u0641\u0627\u062b \u0633\u062b\u0641\u0641\u0647\u0631\u0644\u0633 \u0628\u062e\u0642 {display_name}", "Chapter Asset": "\u0630\u0627\u0634\u062d\u0641\u062b\u0642 \u0634\u0633\u0633\u062b\u0641", "Chapter Name": "\u0630\u0627\u0634\u062d\u0641\u062b\u0642 \u0631\u0634\u0648\u062b", "Chapter information": "\u0630\u0627\u0634\u062d\u0641\u062b\u0642 \u0647\u0631\u0628\u062e\u0642\u0648\u0634\u0641\u0647\u062e\u0631", @@ -431,7 +431,7 @@ "Correct failed component": "\u0630\u062e\u0642\u0642\u062b\u0630\u0641 \u0628\u0634\u0647\u0645\u062b\u064a \u0630\u062e\u0648\u062d\u062e\u0631\u062b\u0631\u0641", "Could not find Certificate Exception in white list. Please refresh the page and try again": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u062b\u0637\u0630\u062b\u062d\u0641\u0647\u062e\u0631 \u0647\u0631 \u0635\u0627\u0647\u0641\u062b \u0645\u0647\u0633\u0641. \u062d\u0645\u062b\u0634\u0633\u062b \u0642\u062b\u0628\u0642\u062b\u0633\u0627 \u0641\u0627\u062b \u062d\u0634\u0644\u062b \u0634\u0631\u064a \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631", "Could not find Certificate Invalidation in the list. Please refresh the page and try again": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0647\u0631\u062f\u0634\u0645\u0647\u064a\u0634\u0641\u0647\u062e\u0631 \u0647\u0631 \u0641\u0627\u062b \u0645\u0647\u0633\u0641. \u062d\u0645\u062b\u0634\u0633\u062b \u0642\u062b\u0628\u0642\u062b\u0633\u0627 \u0641\u0627\u062b \u062d\u0634\u0644\u062b \u0634\u0631\u064a \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631", - "Could not find a user with username or email address '<%= identifier %>'.": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0634 \u0639\u0633\u062b\u0642 \u0635\u0647\u0641\u0627 \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b \u062e\u0642 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633 '<%= identifier %>'.", + "Could not find a user with username or email address '<%- identifier %>'.": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0634 \u0639\u0633\u062b\u0642 \u0635\u0647\u0641\u0627 \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b \u062e\u0642 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633 '<%- identifier %>'.", "Could not find the specified string.": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0641\u0627\u062b \u0633\u062d\u062b\u0630\u0647\u0628\u0647\u062b\u064a \u0633\u0641\u0642\u0647\u0631\u0644.", "Could not find users associated with the following identifiers:": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0628\u0647\u0631\u064a \u0639\u0633\u062b\u0642\u0633 \u0634\u0633\u0633\u062e\u0630\u0647\u0634\u0641\u062b\u064a \u0635\u0647\u0641\u0627 \u0641\u0627\u062b \u0628\u062e\u0645\u0645\u062e\u0635\u0647\u0631\u0644 \u0647\u064a\u062b\u0631\u0641\u0647\u0628\u0647\u062b\u0642\u0633:", "Could not parse certificate JSON. %(message)s": "\u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u062d\u0634\u0642\u0633\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u062a\u0633\u062e\u0631. %(message)s", @@ -442,6 +442,7 @@ "Country of residence": "\u0630\u062e\u0639\u0631\u0641\u0642\u063a \u062e\u0628 \u0642\u062b\u0633\u0647\u064a\u062b\u0631\u0630\u062b", "Country or Region": "\u0630\u062e\u0639\u0631\u0641\u0642\u063a \u062e\u0642 \u0642\u062b\u0644\u0647\u062e\u0631", "Course": "\u0630\u062e\u0639\u0642\u0633\u062b", + "Course Code": "\u0630\u062e\u0639\u0642\u0633\u062b \u0630\u062e\u064a\u062b", "Course Credit Requirements": "\u0630\u062e\u0639\u0642\u0633\u062b \u0630\u0642\u062b\u064a\u0647\u0641 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u0648\u062b\u0631\u0641\u0633", "Course End": "\u0630\u062e\u0639\u0642\u0633\u062b \u062b\u0631\u064a", "Course Handouts": "\u0630\u062e\u0639\u0642\u0633\u062b \u0627\u0634\u0631\u064a\u062e\u0639\u0641\u0633", @@ -461,6 +462,7 @@ "Create": "\u0630\u0642\u062b\u0634\u0641\u062b", "Create Re-run": "\u0630\u0642\u062b\u0634\u0641\u062b \u0642\u062b-\u0642\u0639\u0631", "Create a %(link_start)sMozilla Backpack%(link_end)s account, or log in to your existing account": "\u0630\u0642\u062b\u0634\u0641\u062b \u0634 %(link_start)s\u0648\u062e\u0638\u0647\u0645\u0645\u0634 \u0632\u0634\u0630\u0646\u062d\u0634\u0630\u0646%(link_end)s \u0634\u0630\u0630\u062e\u0639\u0631\u0641, \u062e\u0642 \u0645\u062e\u0644 \u0647\u0631 \u0641\u062e \u063a\u062e\u0639\u0642 \u062b\u0637\u0647\u0633\u0641\u0647\u0631\u0644 \u0634\u0630\u0630\u062e\u0639\u0631\u0641", + "Create a New Program": "\u0630\u0642\u062b\u0634\u0641\u062b \u0634 \u0631\u062b\u0635 \u062d\u0642\u062e\u0644\u0642\u0634\u0648", "Create a New Team": "\u0630\u0642\u062b\u0634\u0641\u062b \u0634 \u0631\u062b\u0635 \u0641\u062b\u0634\u0648", "Create a content group": "\u0630\u0642\u062b\u0634\u0641\u062b \u0634 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d", "Create a new account": "\u0630\u0642\u062b\u0634\u0641\u062b \u0634 \u0631\u062b\u0635 \u0634\u0630\u0630\u062e\u0639\u0631\u0641", @@ -497,6 +499,8 @@ "Delete Page Confirmation": "\u064a\u062b\u0645\u062b\u0641\u062b \u062d\u0634\u0644\u062b \u0630\u062e\u0631\u0628\u0647\u0642\u0648\u0634\u0641\u0647\u062e\u0631", "Delete Team": "\u064a\u062b\u0645\u062b\u0641\u062b \u0641\u062b\u0634\u0648", "Delete column": "\u064a\u062b\u0645\u062b\u0641\u062b \u0630\u062e\u0645\u0639\u0648\u0631", + "Delete course": "\u064a\u062b\u0645\u062b\u0641\u062b \u0630\u062e\u0639\u0642\u0633\u062b", + "Delete course run": "\u064a\u062b\u0645\u062b\u0641\u062b \u0630\u062e\u0639\u0642\u0633\u062b \u0642\u0639\u0631", "Delete row": "\u064a\u062b\u0645\u062b\u0641\u062b \u0642\u062e\u0635", "Delete student '<%= student_id %>'s state on problem '<%= problem_id %>'?": "\u064a\u062b\u0645\u062b\u0641\u062b \u0633\u0641\u0639\u064a\u062b\u0631\u0641 '<%= student_id %>'\u0633 \u0633\u0641\u0634\u0641\u062b \u062e\u0631 \u062d\u0642\u062e\u0632\u0645\u062b\u0648 '<%= problem_id %>'?", "Delete table": "\u064a\u062b\u0645\u062b\u0641\u062b \u0641\u0634\u0632\u0645\u062b", @@ -568,6 +572,12 @@ "Edit Your Name": "\u062b\u064a\u0647\u0641 \u063a\u062e\u0639\u0642 \u0631\u0634\u0648\u062b", "Edit post title": "\u062b\u064a\u0647\u0641 \u062d\u062e\u0633\u0641 \u0641\u0647\u0641\u0645\u062b", "Edit the name": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u0631\u0634\u0648\u062b", + "Edit the program marketing slug": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648 \u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u0633\u0645\u0639\u0644", + "Edit the program subtitle": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648 \u0633\u0639\u0632\u0641\u0647\u0641\u0645\u062b", + "Edit the program title": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648 \u0641\u0647\u0641\u0645\u062b", + "Edit the program\\'s marketing slug.": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648\\'\u0633 \u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u0633\u0645\u0639\u0644.", + "Edit the program\\'s name.": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648\\'\u0633 \u0631\u0634\u0648\u062b.", + "Edit the program\\'s subtitle.": "\u062b\u064a\u0647\u0641 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648\\'\u0633 \u0633\u0639\u0632\u0641\u0647\u0641\u0645\u062b.", "Edit this certificate?": "\u062b\u064a\u0647\u0641 \u0641\u0627\u0647\u0633 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b?", "Editable": "\u062b\u064a\u0647\u0641\u0634\u0632\u0645\u062b", "Editing comment": "\u062b\u064a\u0647\u0641\u0647\u0631\u0644 \u0630\u062e\u0648\u0648\u062b\u0631\u0641", @@ -652,13 +662,11 @@ "Error: Import failed.": "\u062b\u0642\u0642\u062e\u0642: \u0647\u0648\u062d\u062e\u0642\u0641 \u0628\u0634\u0647\u0645\u062b\u064a.", "Error: Replacing failed.": "\u062b\u0642\u0642\u062e\u0642: \u0642\u062b\u062d\u0645\u0634\u0630\u0647\u0631\u0644 \u0628\u0634\u0647\u0645\u062b\u064a.", "Error: Uploading failed.": "\u062b\u0642\u0642\u062e\u0642: \u0639\u062d\u0645\u062e\u0634\u064a\u0647\u0631\u0644 \u0628\u0634\u0647\u0645\u062b\u064a.", - "Error: User '<%= username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u062b\u0642\u0642\u062e\u0642: \u0639\u0633\u062b\u0642 '<%= username %>' \u0627\u0634\u0633 \u0631\u062e\u0641 \u063a\u062b\u0641 \u0634\u0630\u0641\u0647\u062f\u0634\u0641\u062b\u064a \u0641\u0627\u062b\u0647\u0642 \u0634\u0630\u0630\u062e\u0639\u0631\u0641. \u0639\u0633\u062b\u0642\u0633 \u0648\u0639\u0633\u0641 \u0630\u0642\u062b\u0634\u0641\u062b \u0634\u0631\u064a \u0634\u0630\u0641\u0647\u062f\u0634\u0641\u062b \u0641\u0627\u062b\u0647\u0642 \u0634\u0630\u0630\u062e\u0639\u0631\u0641\u0633 \u0632\u062b\u0628\u062e\u0642\u062b \u0641\u0627\u062b\u063a \u0630\u0634\u0631 \u0632\u062b \u0634\u0633\u0633\u0647\u0644\u0631\u062b\u064a \u0634 \u0642\u062e\u0645\u062b.", + "Error: User '<%- username %>' has not yet activated their account. Users must create and activate their accounts before they can be assigned a role.": "\u062b\u0642\u0642\u062e\u0642: \u0639\u0633\u062b\u0642 '<%- username %>' \u0627\u0634\u0633 \u0631\u062e\u0641 \u063a\u062b\u0641 \u0634\u0630\u0641\u0647\u062f\u0634\u0641\u062b\u064a \u0641\u0627\u062b\u0647\u0642 \u0634\u0630\u0630\u062e\u0639\u0631\u0641. \u0639\u0633\u062b\u0642\u0633 \u0648\u0639\u0633\u0641 \u0630\u0642\u062b\u0634\u0641\u062b \u0634\u0631\u064a \u0634\u0630\u0641\u0647\u062f\u0634\u0641\u062b \u0641\u0627\u062b\u0647\u0642 \u0634\u0630\u0630\u062e\u0639\u0631\u0641\u0633 \u0632\u062b\u0628\u062e\u0642\u062b \u0641\u0627\u062b\u063a \u0630\u0634\u0631 \u0632\u062b \u0634\u0633\u0633\u0647\u0644\u0631\u062b\u064a \u0634 \u0642\u062e\u0645\u062b.", "Error: You cannot remove yourself from the Instructor group!": "\u062b\u0642\u0642\u062e\u0642: \u063a\u062e\u0639 \u0630\u0634\u0631\u0631\u062e\u0641 \u0642\u062b\u0648\u062e\u062f\u062b \u063a\u062e\u0639\u0642\u0633\u062b\u0645\u0628 \u0628\u0642\u062e\u0648 \u0641\u0627\u062b \u0647\u0631\u0633\u0641\u0642\u0639\u0630\u0641\u062e\u0642 \u0644\u0642\u062e\u0639\u062d!", "Errors": "\u062b\u0642\u0642\u062e\u0642\u0633", "Everyone who has staff privileges in this course": "\u062b\u062f\u062b\u0642\u063a\u062e\u0631\u062b \u0635\u0627\u062e \u0627\u0634\u0633 \u0633\u0641\u0634\u0628\u0628 \u062d\u0642\u0647\u062f\u0647\u0645\u062b\u0644\u062b\u0633 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0630\u062e\u0639\u0642\u0633\u062b", "Exam Types": "\u062b\u0637\u0634\u0648 \u0641\u063a\u062d\u062b\u0633", - "Exam will be visible after due date": "\u062b\u0637\u0634\u0648 \u0635\u0647\u0645\u0645 \u0632\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0634\u0628\u0641\u062b\u0642 \u064a\u0639\u062b \u064a\u0634\u0641\u062b", - "Exam will remain hidden after due date": "\u062b\u0637\u0634\u0648 \u0635\u0647\u0645\u0645 \u0642\u062b\u0648\u0634\u0647\u0631 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u064a\u0639\u062b \u064a\u0634\u0641\u062b", "Exception Granted": "\u062b\u0637\u0630\u062b\u062d\u0641\u0647\u062e\u0631 \u0644\u0642\u0634\u0631\u0641\u062b\u064a", "Exit full browser": "\u062b\u0637\u0647\u0641 \u0628\u0639\u0645\u0645 \u0632\u0642\u062e\u0635\u0633\u062b\u0642", "Expand All": "\u062b\u0637\u062d\u0634\u0631\u064a \u0634\u0645\u0645", @@ -701,6 +709,7 @@ "Forgot password?": "\u0628\u062e\u0642\u0644\u062e\u0641 \u062d\u0634\u0633\u0633\u0635\u062e\u0642\u064a?", "Format": "\u0628\u062e\u0642\u0648\u0634\u0641", "Formats": "\u0628\u062e\u0642\u0648\u0634\u0641\u0633", + "Free text notes": "\u0628\u0642\u062b\u062b \u0641\u062b\u0637\u0641 \u0631\u062e\u0641\u062b\u0633", "Frequently Asked Questions": "\u0628\u0642\u062b\u0636\u0639\u062b\u0631\u0641\u0645\u063a \u0634\u0633\u0646\u062b\u064a \u0636\u0639\u062b\u0633\u0641\u0647\u062e\u0631\u0633", "Full Name": "\u0628\u0639\u0645\u0645 \u0631\u0634\u0648\u062b", "Full Profile": "\u0628\u0639\u0645\u0645 \u062d\u0642\u062e\u0628\u0647\u0645\u062b", @@ -757,10 +766,11 @@ "Hide Answer": "\u0627\u0647\u064a\u062b \u0634\u0631\u0633\u0635\u062b\u0642", "Hide Deprecated Settings": "\u0627\u0647\u064a\u062b \u064a\u062b\u062d\u0642\u062b\u0630\u0634\u0641\u062b\u064a \u0633\u062b\u0641\u0641\u0647\u0631\u0644\u0633", "Hide Discussion": "\u0627\u0647\u064a\u062b \u064a\u0647\u0633\u0630\u0639\u0633\u0633\u0647\u062e\u0631", - "Hide Exam After Due Date": "\u0627\u0647\u064a\u062b \u062b\u0637\u0634\u0648 \u0634\u0628\u0641\u062b\u0642 \u064a\u0639\u062b \u064a\u0634\u0641\u062b", "Hide Previews": "\u0627\u0647\u064a\u062b \u062d\u0642\u062b\u062f\u0647\u062b\u0635\u0633", "Hide closed captions": "\u0627\u0647\u064a\u062b \u0630\u0645\u062e\u0633\u062b\u064a \u0630\u0634\u062d\u0641\u0647\u062e\u0631\u0633", - "Hide from students": "\u0627\u0647\u064a\u062b \u0628\u0642\u062e\u0648 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633", + "Hide content after due date": "\u0627\u0647\u064a\u062b \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0634\u0628\u0641\u062b\u0642 \u064a\u0639\u062b \u064a\u0634\u0641\u062b", + "Hide entire subsection": "\u0627\u0647\u064a\u062b \u062b\u0631\u0641\u0647\u0642\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631", + "Hide from learners": "\u0627\u0647\u064a\u062b \u0628\u0642\u062e\u0648 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633", "Hide notes": "\u0627\u0647\u064a\u062b \u0631\u062e\u0641\u062b\u0633", "Hiding from Students": "\u0627\u0647\u064a\u0647\u0631\u0644 \u0628\u0642\u062e\u0648 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633", "High Definition": "\u0627\u0647\u0644\u0627 \u064a\u062b\u0628\u0647\u0631\u0647\u0641\u0647\u062e\u0631", @@ -774,13 +784,13 @@ "ID": "\u0647\u064a", "ID-Verification is not required for this Professional Education course.": "\u0647\u064a-\u062f\u062b\u0642\u0647\u0628\u0647\u0630\u0634\u0641\u0647\u062e\u0631 \u0647\u0633 \u0631\u062e\u0641 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u062d\u0642\u062e\u0628\u062b\u0633\u0633\u0647\u062e\u0631\u0634\u0645 \u062b\u064a\u0639\u0630\u0634\u0641\u0647\u062e\u0631 \u0630\u062e\u0639\u0642\u0633\u062b.", "Identity Verification In Progress": "\u0647\u064a\u062b\u0631\u0641\u0647\u0641\u063a \u062f\u062b\u0642\u0647\u0628\u0647\u0630\u0634\u0641\u0647\u062e\u0631 \u0647\u0631 \u062d\u0642\u062e\u0644\u0642\u062b\u0633\u0633", - "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students.": "\u0647\u0628 \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0634\u0633 \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633\u0645\u063a \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0634\u0631\u064a \u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a \u0641\u062e \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633, \u0634\u0631\u063a \u0630\u0627\u0634\u0631\u0644\u062b\u0633 \u063a\u062e\u0639 \u0648\u0634\u064a\u062b \u0641\u062e \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0627\u062b\u0631 \u0647\u0641 \u0635\u0634\u0633 \u0627\u0647\u064a\u064a\u062b\u0631 \u0635\u0647\u0645\u0645 \u0631\u062e\u0635 \u0632\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633.", + "If the unit was previously published and released to learners, any changes you made to the unit when it was hidden will now be visible to learners.": "\u0647\u0628 \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0634\u0633 \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633\u0645\u063a \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0634\u0631\u064a \u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a \u0641\u062e \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633, \u0634\u0631\u063a \u0630\u0627\u0634\u0631\u0644\u062b\u0633 \u063a\u062e\u0639 \u0648\u0634\u064a\u062b \u0641\u062e \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0627\u062b\u0631 \u0647\u0641 \u0635\u0634\u0633 \u0627\u0647\u064a\u064a\u062b\u0631 \u0635\u0647\u0645\u0645 \u0631\u062e\u0635 \u0632\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633.", "If the unit was previously published and released to students, any changes you made to the unit when it was hidden will now be visible to students. Do you want to proceed?": "\u0647\u0628 \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0634\u0633 \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633\u0645\u063a \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0634\u0631\u064a \u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a \u0641\u062e \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633, \u0634\u0631\u063a \u0630\u0627\u0634\u0631\u0644\u062b\u0633 \u063a\u062e\u0639 \u0648\u0634\u064a\u062b \u0641\u062e \u0641\u0627\u062b \u0639\u0631\u0647\u0641 \u0635\u0627\u062b\u0631 \u0647\u0641 \u0635\u0634\u0633 \u0627\u0647\u064a\u064a\u062b\u0631 \u0635\u0647\u0645\u0645 \u0631\u062e\u0635 \u0632\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633. \u064a\u062e \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u062d\u0642\u062e\u0630\u062b\u062b\u064a?", "If you do not yet have an account, use the button below to register.": "\u0647\u0628 \u063a\u062e\u0639 \u064a\u062e \u0631\u062e\u0641 \u063a\u062b\u0641 \u0627\u0634\u062f\u062b \u0634\u0631 \u0634\u0630\u0630\u062e\u0639\u0631\u0641, \u0639\u0633\u062b \u0641\u0627\u062b \u0632\u0639\u0641\u0641\u062e\u0631 \u0632\u062b\u0645\u062e\u0635 \u0641\u062e \u0642\u062b\u0644\u0647\u0633\u0641\u062b\u0642.", "If you don't verify your identity now, you can still explore your course from your dashboard. You will receive periodic reminders from %(platformName)s to verify your identity.": "\u0647\u0628 \u063a\u062e\u0639 \u064a\u062e\u0631'\u0641 \u062f\u062b\u0642\u0647\u0628\u063a \u063a\u062e\u0639\u0642 \u0647\u064a\u062b\u0631\u0641\u0647\u0641\u063a \u0631\u062e\u0635, \u063a\u062e\u0639 \u0630\u0634\u0631 \u0633\u0641\u0647\u0645\u0645 \u062b\u0637\u062d\u0645\u062e\u0642\u062b \u063a\u062e\u0639\u0642 \u0630\u062e\u0639\u0642\u0633\u062b \u0628\u0642\u062e\u0648 \u063a\u062e\u0639\u0642 \u064a\u0634\u0633\u0627\u0632\u062e\u0634\u0642\u064a. \u063a\u062e\u0639 \u0635\u0647\u0645\u0645 \u0642\u062b\u0630\u062b\u0647\u062f\u062b \u062d\u062b\u0642\u0647\u062e\u064a\u0647\u0630 \u0642\u062b\u0648\u0647\u0631\u064a\u062b\u0642\u0633 \u0628\u0642\u062e\u0648 %(platformName)s \u0641\u062e \u062f\u062b\u0642\u0647\u0628\u063a \u063a\u062e\u0639\u0642 \u0647\u064a\u062b\u0631\u0641\u0647\u0641\u063a.", "If you leave, you can no longer post in this team's discussions. Your place will be available to another learner.": "\u0647\u0628 \u063a\u062e\u0639 \u0645\u062b\u0634\u062f\u062b, \u063a\u062e\u0639 \u0630\u0634\u0631 \u0631\u062e \u0645\u062e\u0631\u0644\u062b\u0642 \u062d\u062e\u0633\u0641 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648'\u0633 \u064a\u0647\u0633\u0630\u0639\u0633\u0633\u0647\u062e\u0631\u0633. \u063a\u062e\u0639\u0642 \u062d\u0645\u0634\u0630\u062b \u0635\u0647\u0645\u0645 \u0632\u062b \u0634\u062f\u0634\u0647\u0645\u0634\u0632\u0645\u062b \u0641\u062e \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0645\u062b\u0634\u0642\u0631\u062b\u0642.", "If you make significant changes, make sure you notify members of the team before making these changes.": "\u0647\u0628 \u063a\u062e\u0639 \u0648\u0634\u0646\u062b \u0633\u0647\u0644\u0631\u0647\u0628\u0647\u0630\u0634\u0631\u0641 \u0630\u0627\u0634\u0631\u0644\u062b\u0633, \u0648\u0634\u0646\u062b \u0633\u0639\u0642\u062b \u063a\u062e\u0639 \u0631\u062e\u0641\u0647\u0628\u063a \u0648\u062b\u0648\u0632\u062b\u0642\u0633 \u062e\u0628 \u0641\u0627\u062b \u0641\u062b\u0634\u0648 \u0632\u062b\u0628\u062e\u0642\u062b \u0648\u0634\u0646\u0647\u0631\u0644 \u0641\u0627\u062b\u0633\u062b \u0630\u0627\u0634\u0631\u0644\u062b\u0633.", - "If you make this %(xblockType)s visible to students, students will be able to see its content after the release date has passed and you have published the unit.": "\u0647\u0628 \u063a\u062e\u0639 \u0648\u0634\u0646\u062b \u0641\u0627\u0647\u0633 %(xblockType)s \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633, \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0635\u0647\u0645\u0645 \u0632\u062b \u0634\u0632\u0645\u062b \u0641\u062e \u0633\u062b\u062b \u0647\u0641\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u062b \u0642\u062b\u0645\u062b\u0634\u0633\u062b \u064a\u0634\u0641\u062b \u0627\u0634\u0633 \u062d\u0634\u0633\u0633\u062b\u064a \u0634\u0631\u064a \u063a\u062e\u0639 \u0627\u0634\u062f\u062b \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0641\u0627\u062b \u0639\u0631\u0647\u0641.", + "If you make this %(xblockType)s visible to learners, learners will be able to see its content after the release date has passed and you have published the unit. Only units that are explicitly hidden from learners will remain hidden after you clear this option for the %(xblockType)s.": "\u0647\u0628 \u063a\u062e\u0639 \u0648\u0634\u0646\u062b \u0641\u0627\u0647\u0633 %(xblockType)s \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633, \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0647\u0645\u0645 \u0632\u062b \u0634\u0632\u0645\u062b \u0641\u062e \u0633\u062b\u062b \u0647\u0641\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u062b \u0642\u062b\u0645\u062b\u0634\u0633\u062b \u064a\u0634\u0641\u062b \u0627\u0634\u0633 \u062d\u0634\u0633\u0633\u062b\u064a \u0634\u0631\u064a \u063a\u062e\u0639 \u0627\u0634\u062f\u062b \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0641\u0627\u062b \u0639\u0631\u0647\u0641. \u062e\u0631\u0645\u063a \u0639\u0631\u0647\u0641\u0633 \u0641\u0627\u0634\u0641 \u0634\u0642\u062b \u062b\u0637\u062d\u0645\u0647\u0630\u0647\u0641\u0645\u063a \u0627\u0647\u064a\u064a\u062b\u0631 \u0628\u0642\u062e\u0648 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0647\u0645\u0645 \u0642\u062b\u0648\u0634\u0647\u0631 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u063a\u062e\u0639 \u0630\u0645\u062b\u0634\u0642 \u0641\u0627\u0647\u0633 \u062e\u062d\u0641\u0647\u062e\u0631 \u0628\u062e\u0642 \u0641\u0627\u062b %(xblockType)s.", "If you use the Advanced Editor, this problem will be converted to XML and you will not be able to return to the Simple Editor Interface.\n\nProceed to the Advanced Editor and convert this problem to XML?": "\u0647\u0628 \u063a\u062e\u0639 \u0639\u0633\u062b \u0641\u0627\u062b \u0634\u064a\u062f\u0634\u0631\u0630\u062b\u064a \u062b\u064a\u0647\u0641\u062e\u0642, \u0641\u0627\u0647\u0633 \u062d\u0642\u062e\u0632\u0645\u062b\u0648 \u0635\u0647\u0645\u0645 \u0632\u062b \u0630\u062e\u0631\u062f\u062b\u0642\u0641\u062b\u064a \u0641\u062e \u0637\u0648\u0645 \u0634\u0631\u064a \u063a\u062e\u0639 \u0635\u0647\u0645\u0645 \u0631\u062e\u0641 \u0632\u062b \u0634\u0632\u0645\u062b \u0641\u062e \u0642\u062b\u0641\u0639\u0642\u0631 \u0641\u062e \u0641\u0627\u062b \u0633\u0647\u0648\u062d\u0645\u062b \u062b\u064a\u0647\u0641\u062e\u0642 \u0647\u0631\u0641\u062b\u0642\u0628\u0634\u0630\u062b.\n\n\u062d\u0642\u062e\u0630\u062b\u062b\u064a \u0641\u062e \u0641\u0627\u062b \u0634\u064a\u062f\u0634\u0631\u0630\u062b\u064a \u062b\u064a\u0647\u0641\u062e\u0642 \u0634\u0631\u064a \u0630\u062e\u0631\u062f\u062b\u0642\u0641 \u0641\u0627\u0647\u0633 \u062d\u0642\u062e\u0632\u0645\u062b\u0648 \u0641\u062e \u0637\u0648\u0645?", "Ignore": "\u0647\u0644\u0631\u062e\u0642\u062b", "Ignore all": "\u0647\u0644\u0631\u062e\u0642\u062b \u0634\u0645\u0645", @@ -849,6 +859,8 @@ "Learn more about {license_name}": "\u0645\u062b\u0634\u0642\u0631 \u0648\u062e\u0642\u062b \u0634\u0632\u062e\u0639\u0641 {license_name}", "Learners are added to this cohort automatically.": "\u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0634\u0642\u062b \u0634\u064a\u064a\u062b\u064a \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641 \u0634\u0639\u0641\u062e\u0648\u0634\u0641\u0647\u0630\u0634\u0645\u0645\u063a.", "Learners are added to this cohort only when you provide their email addresses or usernames on this page.": "\u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0634\u0642\u062b \u0634\u064a\u064a\u062b\u064a \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641 \u062e\u0631\u0645\u063a \u0635\u0627\u062b\u0631 \u063a\u062e\u0639 \u062d\u0642\u062e\u062f\u0647\u064a\u062b \u0641\u0627\u062b\u0647\u0642 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633\u062b\u0633 \u062e\u0642 \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b\u0633 \u062e\u0631 \u0641\u0627\u0647\u0633 \u062d\u0634\u0644\u062b.", + "Learners do not see the subsection in the course outline. The subsection is not included in grade calculations.": "\u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u064a\u062e \u0631\u062e\u0641 \u0633\u062b\u062b \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0647\u0631 \u0641\u0627\u062b \u0630\u062e\u0639\u0642\u0633\u062b \u062e\u0639\u0641\u0645\u0647\u0631\u062b. \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0647\u0633 \u0631\u062e\u0641 \u0647\u0631\u0630\u0645\u0639\u064a\u062b\u064a \u0647\u0631 \u0644\u0642\u0634\u064a\u062b \u0630\u0634\u0645\u0630\u0639\u0645\u0634\u0641\u0647\u062e\u0631\u0633.", + "Learners see the published subsection and can access its content.": "\u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0633\u062b\u062b \u0641\u0627\u062b \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0634\u0631\u064a \u0630\u0634\u0631 \u0634\u0630\u0630\u062b\u0633\u0633 \u0647\u0641\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641.", "Learners who require verification must pass the selected checkpoint to see the content in this unit. Learners who do not require verification see this content by default.": "\u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0627\u062e \u0642\u062b\u0636\u0639\u0647\u0642\u062b \u062f\u062b\u0642\u0647\u0628\u0647\u0630\u0634\u0641\u0647\u062e\u0631 \u0648\u0639\u0633\u0641 \u062d\u0634\u0633\u0633 \u0641\u0627\u062b \u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a \u0630\u0627\u062b\u0630\u0646\u062d\u062e\u0647\u0631\u0641 \u0641\u062e \u0633\u062b\u062b \u0641\u0627\u062b \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0639\u0631\u0647\u0641. \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0627\u062e \u064a\u062e \u0631\u062e\u0641 \u0642\u062b\u0636\u0639\u0647\u0642\u062b \u062f\u062b\u0642\u0647\u0628\u0647\u0630\u0634\u0641\u0647\u062e\u0631 \u0633\u062b\u062b \u0641\u0627\u0647\u0633 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0632\u063a \u064a\u062b\u0628\u0634\u0639\u0645\u0641.", "Learning Outcome": "\u0645\u062b\u0634\u0642\u0631\u0647\u0631\u0644 \u062e\u0639\u0641\u0630\u062e\u0648\u062b", "Leave Team": "\u0645\u062b\u0634\u062f\u062b \u0641\u062b\u0634\u0648", @@ -882,6 +894,7 @@ "\u0645\u062e\u0634\u064a \u0631\u062b\u0637\u0641 %(num_items)s \u0642\u062b\u0633\u0639\u0645\u0641", "\u0645\u062e\u0634\u064a \u0631\u062b\u0637\u0641 %(num_items)s \u0642\u062b\u0633\u0639\u0645\u0641\u0633" ], + "Load next {numResponses} responses": "\u0645\u062e\u0634\u064a \u0631\u062b\u0637\u0641 {numResponses} \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b\u0633", "Loading": "\u0645\u062e\u0634\u064a\u0647\u0631\u0644", "Loading content": "\u0645\u062e\u0634\u064a\u0647\u0631\u0644 \u0630\u062e\u0631\u0641\u062b\u0631\u0641", "Loading data...": "\u0645\u062e\u0634\u064a\u0647\u0631\u0644 \u064a\u0634\u0641\u0634...", @@ -910,6 +923,8 @@ "Mark as Answer": "\u0648\u0634\u0642\u0646 \u0634\u0633 \u0634\u0631\u0633\u0635\u062b\u0642", "Mark enrollment code as unused": "\u0648\u0634\u0642\u0646 \u062b\u0631\u0642\u062e\u0645\u0645\u0648\u062b\u0631\u0641 \u0630\u062e\u064a\u062b \u0634\u0633 \u0639\u0631\u0639\u0633\u062b\u064a", "Markdown Editing Help": "\u0648\u0634\u0642\u0646\u064a\u062e\u0635\u0631 \u062b\u064a\u0647\u0641\u0647\u0631\u0644 \u0627\u062b\u0645\u062d", + "Marketing Slug": "\u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u0633\u0645\u0639\u0644", + "Marketing Slug is required.": "\u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u0633\u0645\u0639\u0644 \u0647\u0633 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a.", "Match case": "\u0648\u0634\u0641\u0630\u0627 \u0630\u0634\u0633\u062b", "Max file size exceeded": "\u0648\u0634\u0637 \u0628\u0647\u0645\u062b \u0633\u0647\u0638\u062b \u062b\u0637\u0630\u062b\u062b\u064a\u062b\u064a", "Maximum": "\u0648\u0634\u0637\u0647\u0648\u0639\u0648", @@ -918,6 +933,7 @@ "Message:": "\u0648\u062b\u0633\u0633\u0634\u0644\u062b:", "Middle": "\u0648\u0647\u064a\u064a\u0645\u062b", "Minimum Score:": "\u0648\u0647\u0631\u0647\u0648\u0639\u0648 \u0633\u0630\u062e\u0642\u062b:", + "Mode: %(mode)s": "\u0648\u062e\u064a\u062b: %(mode)s", "Module state successfully deleted.": "\u0648\u062e\u064a\u0639\u0645\u062b \u0633\u0641\u0634\u0641\u062b \u0633\u0639\u0630\u0630\u062b\u0633\u0633\u0628\u0639\u0645\u0645\u063a \u064a\u062b\u0645\u062b\u0641\u062b\u064a.", "More": "\u0648\u062e\u0642\u062b", "Must complete verification checkpoint": "\u0648\u0639\u0633\u0641 \u0630\u062e\u0648\u062d\u0645\u062b\u0641\u062b \u062f\u062b\u0642\u0647\u0628\u0647\u0630\u0634\u0641\u0647\u062e\u0631 \u0630\u0627\u062b\u0630\u0646\u062d\u062e\u0647\u0631\u0641", @@ -958,8 +974,8 @@ "No receipt available": "\u0631\u062e \u0642\u062b\u0630\u062b\u0647\u062d\u0641 \u0634\u062f\u0634\u0647\u0645\u0634\u0632\u0645\u062b", "No results": "\u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633", "No results found for \"%(query_string)s\". Please try searching again.": "\u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0628\u062e\u0639\u0631\u064a \u0628\u062e\u0642 \"%(query_string)s\". \u062d\u0645\u062b\u0634\u0633\u062b \u0641\u0642\u063a \u0633\u062b\u0634\u0642\u0630\u0627\u0647\u0631\u0644 \u0634\u0644\u0634\u0647\u0631.", - "No results found for %(original_query)s. ": "\u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0628\u062e\u0639\u0631\u064a \u0628\u062e\u0642 %(original_query)s. ", "No results found for %(original_query)s. Showing results for %(suggested_query)s.": "\u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0628\u062e\u0639\u0631\u064a \u0628\u062e\u0642 %(original_query)s. \u0633\u0627\u062e\u0635\u0647\u0631\u0644 \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0628\u062e\u0642 %(suggested_query)s.", + "No results found for {original_query}. ": "\u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0628\u062e\u0639\u0631\u064a \u0628\u062e\u0642 {original_query}. ", "No sources": "\u0631\u062e \u0633\u062e\u0639\u0642\u0630\u062b\u0633", "No tasks currently running.": "\u0631\u062e \u0641\u0634\u0633\u0646\u0633 \u0630\u0639\u0642\u0642\u062b\u0631\u0641\u0645\u063a \u0642\u0639\u0631\u0631\u0647\u0631\u0644.", "No threads matched your query.": "\u0631\u062e \u0641\u0627\u0642\u062b\u0634\u064a\u0633 \u0648\u0634\u0641\u0630\u0627\u062b\u064a \u063a\u062e\u0639\u0642 \u0636\u0639\u062b\u0642\u063a.", @@ -973,6 +989,7 @@ "Not in Use": "\u0631\u062e\u0641 \u0647\u0631 \u0639\u0633\u062b", "Not selected": "\u0631\u062e\u0641 \u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a", "Note": "\u0631\u062e\u0641\u062b", + "Note: Do not hide graded assignments after they have been released.": "\u0631\u062e\u0641\u062b: \u064a\u062e \u0631\u062e\u0641 \u0627\u0647\u064a\u062b \u0644\u0642\u0634\u064a\u062b\u064a \u0634\u0633\u0633\u0647\u0644\u0631\u0648\u062b\u0631\u0641\u0633 \u0634\u0628\u0641\u062b\u0642 \u0641\u0627\u062b\u063a \u0627\u0634\u062f\u062b \u0632\u062b\u062b\u0631 \u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a.", "Note: Students can be in only one cohort. Adding students to this group overrides any previous group assignment.": "\u0631\u062e\u0641\u062b: \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0630\u0634\u0631 \u0632\u062b \u0647\u0631 \u062e\u0631\u0645\u063a \u062e\u0631\u062b \u0630\u062e\u0627\u062e\u0642\u0641. \u0634\u064a\u064a\u0647\u0631\u0644 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0641\u062e \u0641\u0627\u0647\u0633 \u0644\u0642\u062e\u0639\u062d \u062e\u062f\u062b\u0642\u0642\u0647\u064a\u062b\u0633 \u0634\u0631\u063a \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633 \u0644\u0642\u062e\u0639\u062d \u0634\u0633\u0633\u0647\u0644\u0631\u0648\u062b\u0631\u0641.", "Noted in:": "\u0631\u062e\u0641\u062b\u064a \u0647\u0631:", "Notes": "\u0631\u062e\u0641\u062b\u0633", @@ -1069,9 +1086,11 @@ "Please print this page for your records; it serves as your receipt. You will also receive an email with the same information.": "\u062d\u0645\u062b\u0634\u0633\u062b \u062d\u0642\u0647\u0631\u0641 \u0641\u0627\u0647\u0633 \u062d\u0634\u0644\u062b \u0628\u062e\u0642 \u063a\u062e\u0639\u0642 \u0642\u062b\u0630\u062e\u0642\u064a\u0633; \u0647\u0641 \u0633\u062b\u0642\u062f\u062b\u0633 \u0634\u0633 \u063a\u062e\u0639\u0642 \u0642\u062b\u0630\u062b\u0647\u062d\u0641. \u063a\u062e\u0639 \u0635\u0647\u0645\u0645 \u0634\u0645\u0633\u062e \u0642\u062b\u0630\u062b\u0647\u062f\u062b \u0634\u0631 \u062b\u0648\u0634\u0647\u0645 \u0635\u0647\u0641\u0627 \u0641\u0627\u062b \u0633\u0634\u0648\u062b \u0647\u0631\u0628\u062e\u0642\u0648\u0634\u0641\u0647\u062e\u0631.", "Please provide a description of the link destination.": "\u062d\u0645\u062b\u0634\u0633\u062b \u062d\u0642\u062e\u062f\u0647\u064a\u062b \u0634 \u064a\u062b\u0633\u0630\u0642\u0647\u062d\u0641\u0647\u062e\u0631 \u062e\u0628 \u0641\u0627\u062b \u0645\u0647\u0631\u0646 \u064a\u062b\u0633\u0641\u0647\u0631\u0634\u0641\u0647\u062e\u0631.", "Please provide a valid URL.": "\u062d\u0645\u062b\u0634\u0633\u062b \u062d\u0642\u062e\u062f\u0647\u064a\u062b \u0634 \u062f\u0634\u0645\u0647\u064a \u0639\u0642\u0645.", + "Please select a Course Run": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u0630\u062e\u0639\u0642\u0633\u062b \u0642\u0639\u0631", "Please select a PDF file to upload.": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u062d\u064a\u0628 \u0628\u0647\u0645\u062b \u0641\u062e \u0639\u062d\u0645\u062e\u0634\u064a.", "Please select a course date": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u0630\u062e\u0639\u0642\u0633\u062b \u064a\u0634\u0641\u062b", "Please select a file in .srt format.": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u0628\u0647\u0645\u062b \u0647\u0631 .\u0633\u0642\u0641 \u0628\u062e\u0642\u0648\u0634\u0641.", + "Please select a valid organization.": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u062f\u0634\u0645\u0647\u064a \u062e\u0642\u0644\u0634\u0631\u0647\u0638\u0634\u0641\u0647\u062e\u0631.", "Please specify a reason.": "\u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062d\u062b\u0630\u0647\u0628\u063a \u0634 \u0642\u062b\u0634\u0633\u062e\u0631.", "Please verify that you have uploaded a valid image (PNG and JPEG).": "\u062d\u0645\u062b\u0634\u0633\u062b \u062f\u062b\u0642\u0647\u0628\u063a \u0641\u0627\u0634\u0641 \u063a\u062e\u0639 \u0627\u0634\u062f\u062b \u0639\u062d\u0645\u062e\u0634\u064a\u062b\u064a \u0634 \u062f\u0634\u0645\u0647\u064a \u0647\u0648\u0634\u0644\u062b (\u062d\u0631\u0644 \u0634\u0631\u064a \u062a\u062d\u062b\u0644).", "Please verify that your webcam is connected and that you have allowed your browser to access it.": "\u062d\u0645\u062b\u0634\u0633\u062b \u062f\u062b\u0642\u0647\u0628\u063a \u0641\u0627\u0634\u0641 \u063a\u062e\u0639\u0642 \u0635\u062b\u0632\u0630\u0634\u0648 \u0647\u0633 \u0630\u062e\u0631\u0631\u062b\u0630\u0641\u062b\u064a \u0634\u0631\u064a \u0641\u0627\u0634\u0641 \u063a\u062e\u0639 \u0627\u0634\u062f\u062b \u0634\u0645\u0645\u062e\u0635\u062b\u064a \u063a\u062e\u0639\u0642 \u0632\u0642\u062e\u0635\u0633\u062b\u0642 \u0641\u062e \u0634\u0630\u0630\u062b\u0633\u0633 \u0647\u0641.", @@ -1108,12 +1127,14 @@ "Profile": "\u062d\u0642\u062e\u0628\u0647\u0645\u062b", "Profile Image": "\u062d\u0642\u062e\u0628\u0647\u0645\u062b \u0647\u0648\u0634\u0644\u062b", "Profile image for {username}": "\u062d\u0642\u062e\u0628\u0647\u0645\u062b \u0647\u0648\u0634\u0644\u062b \u0628\u062e\u0642 {username}", + "Program type": "\u062d\u0642\u062e\u0644\u0642\u0634\u0648 \u0641\u063a\u062d\u062b", "Programs": "\u062d\u0642\u062e\u0644\u0642\u0634\u0648\u0633", "Promote another member to Admin to remove your admin rights": "\u062d\u0642\u062e\u0648\u062e\u0641\u062b \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0648\u062b\u0648\u0632\u062b\u0642 \u0641\u062e \u0634\u064a\u0648\u0647\u0631 \u0641\u062e \u0642\u062b\u0648\u062e\u062f\u062b \u063a\u062e\u0639\u0642 \u0634\u064a\u0648\u0647\u0631 \u0642\u0647\u0644\u0627\u0641\u0633", "Public": "\u062d\u0639\u0632\u0645\u0647\u0630", "Publish": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627", - "Publish %(display_name)s": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627 %(display_name)s", - "Publish all unpublished changes for this %(item)s?": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627 \u0634\u0645\u0645 \u0639\u0631\u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0630\u0627\u0634\u0631\u0644\u062b\u0633 \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 %(item)s?", + "Publish all unpublished changes for this {item}?": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627 \u0634\u0645\u0645 \u0639\u0631\u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0630\u0627\u0634\u0631\u0644\u062b\u0633 \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 {item}?", + "Publish this program?": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627 \u0641\u0627\u0647\u0633 \u062d\u0642\u062e\u0644\u0642\u0634\u0648?", + "Publish {display_name}": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627 {display_name}", "Published (not yet released)": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a (\u0631\u062e\u0641 \u063a\u062b\u0641 \u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a)", "Published and Live": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0634\u0631\u064a \u0645\u0647\u062f\u062b", "Publishing": "\u062d\u0639\u0632\u0645\u0647\u0633\u0627\u0647\u0631\u0644", @@ -1142,10 +1163,12 @@ "Released:": "\u0642\u062b\u0645\u062b\u0634\u0633\u062b\u064a:", "Removal is in progress. To avoid errors, stay on this page until the process is complete.": "\u0642\u062b\u0648\u062e\u062f\u0634\u0645 \u0647\u0633 \u0647\u0631 \u062d\u0642\u062e\u0644\u0642\u062b\u0633\u0633. \u0641\u062e \u0634\u062f\u062e\u0647\u064a \u062b\u0642\u0642\u062e\u0642\u0633, \u0633\u0641\u0634\u063a \u062e\u0631 \u0641\u0627\u0647\u0633 \u062d\u0634\u0644\u062b \u0639\u0631\u0641\u0647\u0645 \u0641\u0627\u062b \u062d\u0642\u062e\u0630\u062b\u0633\u0633 \u0647\u0633 \u0630\u062e\u0648\u062d\u0645\u062b\u0641\u062b.", "Remove": "\u0642\u062b\u0648\u062e\u062f\u062b", + "Remove %(name)s from the program": "\u0642\u062b\u0648\u062e\u062f\u062b %(name)s \u0628\u0642\u062e\u0648 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648", "Remove chapter %(chapterDisplayName)s": "\u0642\u062b\u0648\u062e\u062f\u062b \u0630\u0627\u0634\u062d\u0641\u062b\u0642 %(chapterDisplayName)s", "Remove from Invalidation Table": "\u0642\u062b\u0648\u062e\u062f\u062b \u0628\u0642\u062e\u0648 \u0647\u0631\u062f\u0634\u0645\u0647\u064a\u0634\u0641\u0647\u062e\u0631 \u0641\u0634\u0632\u0645\u062b", "Remove from List": "\u0642\u062b\u0648\u062e\u062f\u062b \u0628\u0642\u062e\u0648 \u0645\u0647\u0633\u0641", "Remove link": "\u0642\u062b\u0648\u062e\u062f\u062b \u0645\u0647\u0631\u0646", + "Remove run %(key)s from the program": "\u0642\u062b\u0648\u062e\u062f\u062b \u0642\u0639\u0631 %(key)s \u0628\u0642\u062e\u0648 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648", "Remove subsection %(subsectionDisplayName)s": "\u0642\u062b\u0648\u062e\u062f\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 %(subsectionDisplayName)s", "Remove this team member?": "\u0642\u062b\u0648\u062e\u062f\u062b \u0641\u0627\u0647\u0633 \u0641\u062b\u0634\u0648 \u0648\u062b\u0648\u0632\u062b\u0642?", "Remove unit %(unitName)s": "\u0642\u062b\u0648\u062e\u062f\u062b \u0639\u0631\u0647\u0641 %(unitName)s", @@ -1190,8 +1213,10 @@ "Row properties": "\u0642\u062e\u0635 \u062d\u0642\u062e\u062d\u062b\u0642\u0641\u0647\u062b\u0633", "Row type": "\u0642\u062e\u0635 \u0641\u063a\u062d\u062b", "Rows": "\u0642\u062e\u0635\u0633", + "Run %(key)s": "\u0642\u0639\u0631 %(key)s", "Save": "\u0633\u0634\u062f\u062b", "Save Changes": "\u0633\u0634\u062f\u062b \u0630\u0627\u0634\u0631\u0644\u062b\u0633", + "Save Course": "\u0633\u0634\u062f\u062b \u0630\u062e\u0639\u0642\u0633\u062b", "Save changes": "\u0633\u0634\u062f\u062b \u0630\u0627\u0634\u0631\u0644\u062b\u0633", "Saved cohort": "\u0633\u0634\u062f\u062b\u064a \u0630\u062e\u0627\u062e\u0642\u0641", "Saving": "\u0633\u0634\u062f\u0647\u0631\u0644", @@ -1203,6 +1228,7 @@ "Search all posts": "\u0633\u062b\u0634\u0642\u0630\u0627 \u0634\u0645\u0645 \u062d\u062e\u0633\u0641\u0633", "Search teams": "\u0633\u062b\u0634\u0642\u0630\u0627 \u0641\u062b\u0634\u0648\u0633", "Section": "\u0633\u062b\u0630\u0641\u0647\u062e\u0631", + "Section Visibility": "\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u062f\u0647\u0633\u0647\u0632\u0647\u0645\u0647\u0641\u063a", "See all teams in your course, organized by topic. Join a team to collaborate with other learners who are interested in the same topic as you are.": "\u0633\u062b\u062b \u0634\u0645\u0645 \u0641\u062b\u0634\u0648\u0633 \u0647\u0631 \u063a\u062e\u0639\u0642 \u0630\u062e\u0639\u0642\u0633\u062b, \u062e\u0642\u0644\u0634\u0631\u0647\u0638\u062b\u064a \u0632\u063a \u0641\u062e\u062d\u0647\u0630. \u062a\u062e\u0647\u0631 \u0634 \u0641\u062b\u0634\u0648 \u0641\u062e \u0630\u062e\u0645\u0645\u0634\u0632\u062e\u0642\u0634\u0641\u062b \u0635\u0647\u0641\u0627 \u062e\u0641\u0627\u062b\u0642 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0627\u062e \u0634\u0642\u062b \u0647\u0631\u0641\u062b\u0642\u062b\u0633\u0641\u062b\u064a \u0647\u0631 \u0641\u0627\u062b \u0633\u0634\u0648\u062b \u0641\u062e\u062d\u0647\u0630 \u0634\u0633 \u063a\u062e\u0639 \u0634\u0642\u062b.", "Select Course Run": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0630\u062e\u0639\u0642\u0633\u062b \u0642\u0639\u0631", "Select a Content Group": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d", @@ -1212,6 +1238,7 @@ "Select a prerequisite subsection and enter a minimum score percentage to limit access to this subsection.": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u062d\u0642\u062b\u0642\u062b\u0636\u0639\u0647\u0633\u0647\u0641\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0634\u0631\u064a \u062b\u0631\u0641\u062b\u0642 \u0634 \u0648\u0647\u0631\u0647\u0648\u0639\u0648 \u0633\u0630\u062e\u0642\u062b \u062d\u062b\u0642\u0630\u062b\u0631\u0641\u0634\u0644\u062b \u0641\u062e \u0645\u0647\u0648\u0647\u0641 \u0634\u0630\u0630\u062b\u0633\u0633 \u0641\u062e \u0641\u0627\u0647\u0633 \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631.", "Select a time allotment for the exam. If it is over 24 hours, type in the amount of time. You can grant individual learners extra time to complete the exam through the Instructor Dashboard.": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0634 \u0641\u0647\u0648\u062b \u0634\u0645\u0645\u062e\u0641\u0648\u062b\u0631\u0641 \u0628\u062e\u0642 \u0641\u0627\u062b \u062b\u0637\u0634\u0648. \u0647\u0628 \u0647\u0641 \u0647\u0633 \u062e\u062f\u062b\u0642 24 \u0627\u062e\u0639\u0642\u0633, \u0641\u063a\u062d\u062b \u0647\u0631 \u0641\u0627\u062b \u0634\u0648\u062e\u0639\u0631\u0641 \u062e\u0628 \u0641\u0647\u0648\u062b. \u063a\u062e\u0639 \u0630\u0634\u0631 \u0644\u0642\u0634\u0631\u0641 \u0647\u0631\u064a\u0647\u062f\u0647\u064a\u0639\u0634\u0645 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u062b\u0637\u0641\u0642\u0634 \u0641\u0647\u0648\u062b \u0641\u062e \u0630\u062e\u0648\u062d\u0645\u062b\u0641\u062b \u0641\u0627\u062b \u062b\u0637\u0634\u0648 \u0641\u0627\u0642\u062e\u0639\u0644\u0627 \u0641\u0627\u062b \u0647\u0631\u0633\u0641\u0642\u0639\u0630\u0641\u062e\u0642 \u064a\u0634\u0633\u0627\u0632\u062e\u0634\u0642\u064a.", "Select all": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0634\u0645\u0645", + "Select an organization": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0634\u0631 \u062e\u0642\u0644\u0634\u0631\u0647\u0638\u0634\u0641\u0647\u062e\u0631", "Select the course-wide discussion topics that you want to divide by cohort.": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0641\u0627\u062b \u0630\u062e\u0639\u0642\u0633\u062b-\u0635\u0647\u064a\u062b \u064a\u0647\u0633\u0630\u0639\u0633\u0633\u0647\u062e\u0631 \u0641\u062e\u062d\u0647\u0630\u0633 \u0641\u0627\u0634\u0641 \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u064a\u0647\u062f\u0647\u064a\u062b \u0632\u063a \u0630\u062e\u0627\u062e\u0642\u0641.", "Select the time zone for displaying course dates. If you do not specify a ": "\u0633\u062b\u0645\u062b\u0630\u0641 \u0641\u0627\u062b \u0641\u0647\u0648\u062b \u0638\u062e\u0631\u062b \u0628\u062e\u0642 \u064a\u0647\u0633\u062d\u0645\u0634\u063a\u0647\u0631\u0644 \u0630\u062e\u0639\u0642\u0633\u062b \u064a\u0634\u0641\u062b\u0633. \u0647\u0628 \u063a\u062e\u0639 \u064a\u062e \u0631\u062e\u0641 \u0633\u062d\u062b\u0630\u0647\u0628\u063a \u0634 ", "Selected tab": "\u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a \u0641\u0634\u0632", @@ -1243,10 +1270,12 @@ "Show Discussion": "\u0633\u0627\u062e\u0635 \u064a\u0647\u0633\u0630\u0639\u0633\u0633\u0647\u062e\u0631", "Show Previews": "\u0633\u0627\u062e\u0635 \u062d\u0642\u062b\u062f\u0647\u062b\u0635\u0633", "Show blocks": "\u0633\u0627\u062e\u0635 \u0632\u0645\u062e\u0630\u0646\u0633", + "Show entire subsection": "\u0633\u0627\u062e\u0635 \u062b\u0631\u0641\u0647\u0642\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631", "Show invisible characters": "\u0633\u0627\u062e\u0635 \u0647\u0631\u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633", "Show me other ways to sign in or register": "\u0633\u0627\u062e\u0635 \u0648\u062b \u062e\u0641\u0627\u062b\u0642 \u0635\u0634\u063a\u0633 \u0641\u062e \u0633\u0647\u0644\u0631 \u0647\u0631 \u062e\u0642 \u0642\u062b\u0644\u0647\u0633\u0641\u062b\u0642", "Show notes": "\u0633\u0627\u062e\u0635 \u0631\u062e\u0641\u062b\u0633", "Show posts by %(username)s.": "\u0633\u0627\u062e\u0635 \u062d\u062e\u0633\u0641\u0633 \u0632\u063a %(username)s.", + "Show posts by {username}.": "\u0633\u0627\u062e\u0635 \u062d\u062e\u0633\u0641\u0633 \u0632\u063a {username}.", "Showing all responses": "\u0633\u0627\u062e\u0635\u0647\u0631\u0644 \u0634\u0645\u0645 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b\u0633", "Showing first response": [ "\u0633\u0627\u062e\u0635\u0647\u0631\u0644 \u0628\u0647\u0642\u0633\u0641 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b", @@ -1269,8 +1298,10 @@ "Signatory field(s) has invalid data.": "\u0633\u0647\u0644\u0631\u0634\u0641\u062e\u0642\u063a \u0628\u0647\u062b\u0645\u064a(\u0633) \u0627\u0634\u0633 \u0647\u0631\u062f\u0634\u0645\u0647\u064a \u064a\u0634\u0641\u0634.", "Signature Image": "\u0633\u0647\u0644\u0631\u0634\u0641\u0639\u0642\u062b \u0647\u0648\u0634\u0644\u062b", "Skip": "\u0633\u0646\u0647\u062d", + "Slug used to generate links to the marketing site.": "\u0633\u0645\u0639\u0644 \u0639\u0633\u062b\u064a \u0641\u062e \u0644\u062b\u0631\u062b\u0642\u0634\u0641\u062b \u0645\u0647\u0631\u0646\u0633 \u0641\u062e \u0641\u0627\u062b \u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u0633\u0647\u0641\u062b.", "Some Rights Reserved": "\u0633\u062e\u0648\u062b \u0642\u0647\u0644\u0627\u0641\u0633 \u0642\u062b\u0633\u062b\u0642\u062f\u062b\u064a", "Some content in this unit is visible only to particular content groups": "\u0633\u062e\u0648\u062b \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0639\u0631\u0647\u0641 \u0647\u0633 \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u062e\u0631\u0645\u063a \u0641\u062e \u062d\u0634\u0642\u0641\u0647\u0630\u0639\u0645\u0634\u0642 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d\u0633", + "Some images in this post have been omitted": "\u0633\u062e\u0648\u062b \u0647\u0648\u0634\u0644\u062b\u0633 \u0647\u0631 \u0641\u0627\u0647\u0633 \u062d\u062e\u0633\u0641 \u0627\u0634\u062f\u062b \u0632\u062b\u062b\u0631 \u062e\u0648\u0647\u0641\u0641\u062b\u064a", "Something went wrong changing this enrollment. Please try again.": "\u0633\u062e\u0648\u062b\u0641\u0627\u0647\u0631\u0644 \u0635\u062b\u0631\u0641 \u0635\u0642\u062e\u0631\u0644 \u0630\u0627\u0634\u0631\u0644\u0647\u0631\u0644 \u0641\u0627\u0647\u0633 \u062b\u0631\u0642\u062e\u0645\u0645\u0648\u062b\u0631\u0641. \u062d\u0645\u062b\u0634\u0633\u062b \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631.", "Sorry": "\u0633\u062e\u0642\u0642\u063a", "Sorry, no results were found.": "\u0633\u062e\u0642\u0642\u063a, \u0631\u062e \u0642\u062b\u0633\u0639\u0645\u0641\u0633 \u0635\u062b\u0642\u062b \u0628\u062e\u0639\u0631\u064a.", @@ -1289,9 +1320,10 @@ "Square": "\u0633\u0636\u0639\u0634\u0642\u062b", "Staff": "\u0633\u0641\u0634\u0628\u0628", "Staff Only": "\u0633\u0641\u0634\u0628\u0628 \u062e\u0631\u0645\u063a", - "Staff and Students": "\u0633\u0641\u0634\u0628\u0628 \u0634\u0631\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633", + "Staff and Learners": "\u0633\u0641\u0634\u0628\u0628 \u0634\u0631\u064a \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633", "Start": "\u0633\u0641\u0634\u0642\u0641", "Start Date": "\u0633\u0641\u0634\u0642\u0641 \u064a\u0634\u0641\u062b", + "Start Date: %(date)s": "\u0633\u0641\u0634\u0642\u0641 \u064a\u0634\u0641\u062b: %(date)s", "Start generating certificates for all students in this course?": "\u0633\u0641\u0634\u0642\u0641 \u0644\u062b\u0631\u062b\u0642\u0634\u0641\u0647\u0631\u0644 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b\u0633 \u0628\u062e\u0642 \u0634\u0645\u0645 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0630\u062e\u0639\u0642\u0633\u062b?", "Start of transcript. Skip to the end.": "\u0633\u0641\u0634\u0642\u0641 \u062e\u0628 \u0641\u0642\u0634\u0631\u0633\u0630\u0642\u0647\u062d\u0641. \u0633\u0646\u0647\u062d \u0641\u062e \u0641\u0627\u062b \u062b\u0631\u064a.", "Start regenerating certificates for students in this course?": "\u0633\u0641\u0634\u0642\u0641 \u0642\u062b\u0644\u062b\u0631\u062b\u0642\u0634\u0641\u0647\u0631\u0644 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b\u0633 \u0628\u062e\u0642 \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0630\u062e\u0639\u0642\u0633\u062b?", @@ -1309,7 +1341,7 @@ "Strikethrough": "\u0633\u0641\u0642\u0647\u0646\u062b\u0641\u0627\u0642\u062e\u0639\u0644\u0627", "Student": "\u0633\u0641\u0639\u064a\u062b\u0631\u0641", "Student Removed from certificate white list successfully.": "\u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u0642\u062b\u0648\u062e\u062f\u062b\u064a \u0628\u0642\u062e\u0648 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b \u0635\u0627\u0647\u0641\u062b \u0645\u0647\u0633\u0641 \u0633\u0639\u0630\u0630\u062b\u0633\u0633\u0628\u0639\u0645\u0645\u063a.", - "Student Visibility": "\u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u062f\u0647\u0633\u0647\u0632\u0647\u0645\u0647\u0641\u063a", + "Student email or username": "\u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u062b\u0648\u0634\u0647\u0645 \u062e\u0642 \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b", "Student username/email field is required and can not be empty. ": "\u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b/\u062b\u0648\u0634\u0647\u0645 \u0628\u0647\u062b\u0645\u064a \u0647\u0633 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a \u0634\u0631\u064a \u0630\u0634\u0631 \u0631\u062e\u0641 \u0632\u062b \u062b\u0648\u062d\u0641\u063a. ", "Studio's having trouble saving your work": "\u0633\u0641\u0639\u064a\u0647\u062e'\u0633 \u0627\u0634\u062f\u0647\u0631\u0644 \u0641\u0642\u062e\u0639\u0632\u0645\u062b \u0633\u0634\u062f\u0647\u0631\u0644 \u063a\u062e\u0639\u0642 \u0635\u062e\u0642\u0646", "Studio:": "\u0633\u0641\u0639\u064a\u0647\u062e:", @@ -1322,6 +1354,9 @@ "Submitted": "\u0633\u0639\u0632\u0648\u0647\u0641\u0641\u062b\u064a", "Subscript": "\u0633\u0639\u0632\u0633\u0630\u0642\u0647\u062d\u0641", "Subsection": "\u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631", + "Subsection Visibility": "\u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u062f\u0647\u0633\u0647\u0632\u0647\u0645\u0647\u0641\u063a", + "Subsection is hidden after due date": "\u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0647\u0633 \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0628\u0641\u062b\u0642 \u064a\u0639\u062b \u064a\u0634\u0641\u062b", + "Subtitle": "\u0633\u0639\u0632\u0641\u0647\u0641\u0645\u062b", "Success": "\u0633\u0639\u0630\u0630\u062b\u0633\u0633", "Success! Problem attempts reset for problem '<%= problem_id %>' and student '<%= student_id %>'.": "\u0633\u0639\u0630\u0630\u062b\u0633\u0633! \u062d\u0642\u062e\u0632\u0645\u062b\u0648 \u0634\u0641\u0641\u062b\u0648\u062d\u0641\u0633 \u0642\u062b\u0633\u062b\u0641 \u0628\u062e\u0642 \u062d\u0642\u062e\u0632\u0645\u062b\u0648 '<%= problem_id %>' \u0634\u0631\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641 '<%= student_id %>'.", "Successfully deleted student state for user {user}": "\u0633\u0639\u0630\u0630\u062b\u0633\u0633\u0628\u0639\u0645\u0645\u063a \u064a\u062b\u0645\u062b\u0641\u062b\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u0633\u0641\u0634\u0641\u062b \u0628\u062e\u0642 \u0639\u0633\u062b\u0642 {user}", @@ -1416,13 +1451,16 @@ "The organization that this signatory belongs to, as it should appear on certificates.": "\u0641\u0627\u062b \u062e\u0642\u0644\u0634\u0631\u0647\u0638\u0634\u0641\u0647\u062e\u0631 \u0641\u0627\u0634\u0641 \u0641\u0627\u0647\u0633 \u0633\u0647\u0644\u0631\u0634\u0641\u062e\u0642\u063a \u0632\u062b\u0645\u062e\u0631\u0644\u0633 \u0641\u062e, \u0634\u0633 \u0647\u0641 \u0633\u0627\u062e\u0639\u0645\u064a \u0634\u062d\u062d\u062b\u0634\u0642 \u062e\u0631 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b\u0633.", "The page \"{route}\" could not be found.": "\u0641\u0627\u062b \u062d\u0634\u0644\u062b \"{route}\" \u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0632\u062b \u0628\u062e\u0639\u0631\u064a.", "The photo of your face matches the photo on your ID.": "\u0641\u0627\u062b \u062d\u0627\u062e\u0641\u062e \u062e\u0628 \u063a\u062e\u0639\u0642 \u0628\u0634\u0630\u062b \u0648\u0634\u0641\u0630\u0627\u062b\u0633 \u0641\u0627\u062b \u062d\u0627\u062e\u0641\u062e \u062e\u0631 \u063a\u062e\u0639\u0642 \u0647\u064a.", + "The public display name of the program.": "\u0641\u0627\u062b \u062d\u0639\u0632\u0645\u0647\u0630 \u064a\u0647\u0633\u062d\u0645\u0634\u063a \u0631\u0634\u0648\u062b \u062e\u0628 \u0641\u0627\u062b \u062d\u0642\u062e\u0644\u0642\u0634\u0648.", "The raw error message is:": "\u0641\u0627\u062b \u0642\u0634\u0635 \u062b\u0642\u0642\u062e\u0642 \u0648\u062b\u0633\u0633\u0634\u0644\u062b \u0647\u0633:", "The selected content group does not exist": "\u0641\u0627\u062b \u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d \u064a\u062e\u062b\u0633 \u0631\u062e\u0641 \u062b\u0637\u0647\u0633\u0641", "The team \"{team}\" could not be found.": "\u0641\u0627\u062b \u0641\u062b\u0634\u0648 \"{team}\" \u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0632\u062b \u0628\u062e\u0639\u0631\u064a.", "The thread you selected has been deleted. Please select another thread.": "\u0641\u0627\u062b \u0641\u0627\u0642\u062b\u0634\u064a \u063a\u062e\u0639 \u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a \u0627\u0634\u0633 \u0632\u062b\u062b\u0631 \u064a\u062b\u0645\u062b\u0641\u062b\u064a. \u062d\u0645\u062b\u0634\u0633\u062b \u0633\u062b\u0645\u062b\u0630\u0641 \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0641\u0627\u0642\u062b\u0634\u064a.", "The timed transcript for the first video file does not appear to be the same as the timed transcript for the second video file.": "\u0641\u0627\u062b \u0641\u0647\u0648\u062b\u064a \u0641\u0642\u0634\u0631\u0633\u0630\u0642\u0647\u062d\u0641 \u0628\u062e\u0642 \u0641\u0627\u062b \u0628\u0647\u0642\u0633\u0641 \u062f\u0647\u064a\u062b\u062e \u0628\u0647\u0645\u062b \u064a\u062e\u062b\u0633 \u0631\u062e\u0641 \u0634\u062d\u062d\u062b\u0634\u0642 \u0641\u062e \u0632\u062b \u0641\u0627\u062b \u0633\u0634\u0648\u062b \u0634\u0633 \u0641\u0627\u062b \u0641\u0647\u0648\u062b\u064a \u0641\u0642\u0634\u0631\u0633\u0630\u0642\u0647\u062d\u0641 \u0628\u062e\u0642 \u0641\u0627\u062b \u0633\u062b\u0630\u062e\u0631\u064a \u062f\u0647\u064a\u062b\u062e \u0628\u0647\u0645\u062b.", "The timed transcript for this video on edX is out of date, but YouTube has a current timed transcript for this video.": "\u0641\u0627\u062b \u0641\u0647\u0648\u062b\u064a \u0641\u0642\u0634\u0631\u0633\u0630\u0642\u0647\u062d\u0641 \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u062f\u0647\u064a\u062b\u062e \u062e\u0631 \u062b\u064a\u0637 \u0647\u0633 \u062e\u0639\u0641 \u062e\u0628 \u064a\u0634\u0641\u062b, \u0632\u0639\u0641 \u063a\u062e\u0639\u0641\u0639\u0632\u062b \u0627\u0634\u0633 \u0634 \u0630\u0639\u0642\u0642\u062b\u0631\u0641 \u0641\u0647\u0648\u062b\u064a \u0641\u0642\u0634\u0631\u0633\u0630\u0642\u0647\u062d\u0641 \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u062f\u0647\u064a\u062b\u062e.", + "The title entered here will override the title set for the individual run of the course. It will be displayed on the XSeries progress page and in marketing presentations.": "\u0641\u0627\u062b \u0641\u0647\u0641\u0645\u062b \u062b\u0631\u0641\u062b\u0642\u062b\u064a \u0627\u062b\u0642\u062b \u0635\u0647\u0645\u0645 \u062e\u062f\u062b\u0642\u0642\u0647\u064a\u062b \u0641\u0627\u062b \u0641\u0647\u0641\u0645\u062b \u0633\u062b\u0641 \u0628\u062e\u0642 \u0641\u0627\u062b \u0647\u0631\u064a\u0647\u062f\u0647\u064a\u0639\u0634\u0645 \u0642\u0639\u0631 \u062e\u0628 \u0641\u0627\u062b \u0630\u062e\u0639\u0642\u0633\u062b. \u0647\u0641 \u0635\u0647\u0645\u0645 \u0632\u062b \u064a\u0647\u0633\u062d\u0645\u0634\u063a\u062b\u064a \u062e\u0631 \u0641\u0627\u062b \u0637\u0633\u062b\u0642\u0647\u062b\u0633 \u062d\u0642\u062e\u0644\u0642\u062b\u0633\u0633 \u062d\u0634\u0644\u062b \u0634\u0631\u064a \u0647\u0631 \u0648\u0634\u0642\u0646\u062b\u0641\u0647\u0631\u0644 \u062d\u0642\u062b\u0633\u062b\u0631\u0641\u0634\u0641\u0647\u062e\u0631\u0633.", "The topic \"{topic}\" could not be found.": "\u0641\u0627\u062b \u0641\u062e\u062d\u0647\u0630 \"{topic}\" \u0630\u062e\u0639\u0645\u064a \u0631\u062e\u0641 \u0632\u062b \u0628\u062e\u0639\u0631\u064a.", + "The unique number that identifies your course within your organization, e.g. CS101.": "\u0641\u0627\u062b \u0639\u0631\u0647\u0636\u0639\u062b \u0631\u0639\u0648\u0632\u062b\u0642 \u0641\u0627\u0634\u0641 \u0647\u064a\u062b\u0631\u0641\u0647\u0628\u0647\u062b\u0633 \u063a\u062e\u0639\u0642 \u0630\u062e\u0639\u0642\u0633\u062b \u0635\u0647\u0641\u0627\u0647\u0631 \u063a\u062e\u0639\u0642 \u062e\u0642\u0644\u0634\u0631\u0647\u0638\u0634\u0641\u0647\u062e\u0631, \u062b.\u0644. \u0630\u0633101.", "The weight of all assignments of this type as a percentage of the total grade, for example, 40. Do not include the percent symbol.": "\u0641\u0627\u062b \u0635\u062b\u0647\u0644\u0627\u0641 \u062e\u0628 \u0634\u0645\u0645 \u0634\u0633\u0633\u0647\u0644\u0631\u0648\u062b\u0631\u0641\u0633 \u062e\u0628 \u0641\u0627\u0647\u0633 \u0641\u063a\u062d\u062b \u0634\u0633 \u0634 \u062d\u062b\u0642\u0630\u062b\u0631\u0641\u0634\u0644\u062b \u062e\u0628 \u0641\u0627\u062b \u0641\u062e\u0641\u0634\u0645 \u0644\u0642\u0634\u064a\u062b, \u0628\u062e\u0642 \u062b\u0637\u0634\u0648\u062d\u0645\u062b, 40. \u064a\u062e \u0631\u062e\u0641 \u0647\u0631\u0630\u0645\u0639\u064a\u062b \u0641\u0627\u062b \u062d\u062b\u0642\u0630\u062b\u0631\u0641 \u0633\u063a\u0648\u0632\u062e\u0645.", "The {cohortGroupName} cohort has been created. You can manually add students to this cohort below.": "\u0641\u0627\u062b {cohortGroupName} \u0630\u062e\u0627\u062e\u0642\u0641 \u0627\u0634\u0633 \u0632\u062b\u062b\u0631 \u0630\u0642\u062b\u0634\u0641\u062b\u064a. \u063a\u062e\u0639 \u0630\u0634\u0631 \u0648\u0634\u0631\u0639\u0634\u0645\u0645\u063a \u0634\u064a\u064a \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641 \u0632\u062b\u0645\u062e\u0635.", "There are invalid keywords in your email. Check the following keywords and try again.": "\u0641\u0627\u062b\u0642\u062b \u0634\u0642\u062b \u0647\u0631\u062f\u0634\u0645\u0647\u064a \u0646\u062b\u063a\u0635\u062e\u0642\u064a\u0633 \u0647\u0631 \u063a\u062e\u0639\u0642 \u062b\u0648\u0634\u0647\u0645. \u0630\u0627\u062b\u0630\u0646 \u0641\u0627\u062b \u0628\u062e\u0645\u0645\u062e\u0635\u0647\u0631\u0644 \u0646\u062b\u063a\u0635\u062e\u0642\u064a\u0633 \u0634\u0631\u064a \u0641\u0642\u063a \u0634\u0644\u0634\u0647\u0631.", @@ -1548,6 +1586,8 @@ "Unfollow": "\u0639\u0631\u0628\u062e\u0645\u0645\u062e\u0635", "Ungraded": "\u0639\u0631\u0644\u0642\u0634\u064a\u062b\u064a", "Unit": "\u0639\u0631\u0647\u0641", + "Unit Visibility": "\u0639\u0631\u0647\u0641 \u062f\u0647\u0633\u0647\u0632\u0647\u0645\u0647\u0641\u063a", + "Units inherit the visibility setting of the subsection they are in. If you make this subsection visible to learners, published units that were previously hidden also become visible. Only units that were explicitly hidden remain hidden regardless of the option you select for this subsection.": "\u0639\u0631\u0647\u0641\u0633 \u0647\u0631\u0627\u062b\u0642\u0647\u0641 \u0641\u0627\u062b \u062f\u0647\u0633\u0647\u0632\u0647\u0645\u0647\u0641\u063a \u0633\u062b\u0641\u0641\u0647\u0631\u0644 \u062e\u0628 \u0641\u0627\u062b \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u0641\u0627\u062b\u063a \u0634\u0642\u062b \u0647\u0631. \u0647\u0628 \u063a\u062e\u0639 \u0648\u0634\u0646\u062b \u0641\u0627\u0647\u0633 \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631 \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633, \u062d\u0639\u0632\u0645\u0647\u0633\u0627\u062b\u064a \u0639\u0631\u0647\u0641\u0633 \u0641\u0627\u0634\u0641 \u0635\u062b\u0642\u062b \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633\u0645\u063a \u0627\u0647\u064a\u064a\u062b\u0631 \u0634\u0645\u0633\u062e \u0632\u062b\u0630\u062e\u0648\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b. \u062e\u0631\u0645\u063a \u0639\u0631\u0647\u0641\u0633 \u0641\u0627\u0634\u0641 \u0635\u062b\u0642\u062b \u062b\u0637\u062d\u0645\u0647\u0630\u0647\u0641\u0645\u063a \u0627\u0647\u064a\u064a\u062b\u0631 \u0642\u062b\u0648\u0634\u0647\u0631 \u0627\u0647\u064a\u064a\u062b\u0631 \u0642\u062b\u0644\u0634\u0642\u064a\u0645\u062b\u0633\u0633 \u062e\u0628 \u0641\u0627\u062b \u062e\u062d\u0641\u0647\u062e\u0631 \u063a\u062e\u0639 \u0633\u062b\u0645\u062b\u0630\u0641 \u0628\u062e\u0642 \u0641\u0627\u0647\u0633 \u0633\u0639\u0632\u0633\u062b\u0630\u0641\u0647\u062e\u0631.", "Unknown": "\u0639\u0631\u0646\u0631\u062e\u0635\u0631", "Unknown Error Occurred.": "\u0639\u0631\u0646\u0631\u062e\u0635\u0631 \u062b\u0642\u0642\u062e\u0642 \u062e\u0630\u0630\u0639\u0642\u0642\u062b\u064a.", "Unknown user: {user}": "\u0639\u0631\u0646\u0631\u062e\u0635\u0631 \u0639\u0633\u062b\u0642: {user}", @@ -1581,6 +1621,7 @@ "Upload PDF": "\u0639\u062d\u0645\u062e\u0634\u064a \u062d\u064a\u0628", "Upload Photo": "\u0639\u062d\u0645\u062e\u0634\u064a \u062d\u0627\u062e\u0641\u062e", "Upload Signature Image": "\u0639\u062d\u0645\u062e\u0634\u064a \u0633\u0647\u0644\u0631\u0634\u0641\u0639\u0642\u062b \u0647\u0648\u0634\u0644\u062b", + "Upload a CSV file": "\u0639\u062d\u0645\u062e\u0634\u064a \u0634 \u0630\u0633\u062f \u0628\u0647\u0645\u062b", "Upload a comma separated values (.csv) file that contains the usernames or email addresses of learners who have been given exceptions. Include the username or email address in the first comma separated field. You can include an optional note describing the reason for the exception in the second comma separated field.": "\u0639\u062d\u0645\u062e\u0634\u064a \u0634 \u0630\u062e\u0648\u0648\u0634 \u0633\u062b\u062d\u0634\u0642\u0634\u0641\u062b\u064a \u062f\u0634\u0645\u0639\u062b\u0633 (.\u0630\u0633\u062f) \u0628\u0647\u0645\u062b \u0641\u0627\u0634\u0641 \u0630\u062e\u0631\u0641\u0634\u0647\u0631\u0633 \u0641\u0627\u062b \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b\u0633 \u062e\u0642 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633\u062b\u0633 \u062e\u0628 \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0635\u0627\u062e \u0627\u0634\u062f\u062b \u0632\u062b\u062b\u0631 \u0644\u0647\u062f\u062b\u0631 \u062b\u0637\u0630\u062b\u062d\u0641\u0647\u062e\u0631\u0633. \u0647\u0631\u0630\u0645\u0639\u064a\u062b \u0641\u0627\u062b \u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b \u062e\u0642 \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633 \u0647\u0631 \u0641\u0627\u062b \u0628\u0647\u0642\u0633\u0641 \u0630\u062e\u0648\u0648\u0634 \u0633\u062b\u062d\u0634\u0642\u0634\u0641\u062b\u064a \u0628\u0647\u062b\u0645\u064a. \u063a\u062e\u0639 \u0630\u0634\u0631 \u0647\u0631\u0630\u0645\u0639\u064a\u062b \u0634\u0631 \u062e\u062d\u0641\u0647\u062e\u0631\u0634\u0645 \u0631\u062e\u0641\u062b \u064a\u062b\u0633\u0630\u0642\u0647\u0632\u0647\u0631\u0644 \u0641\u0627\u062b \u0642\u062b\u0634\u0633\u062e\u0631 \u0628\u062e\u0642 \u0641\u0627\u062b \u062b\u0637\u0630\u062b\u062d\u0641\u0647\u062e\u0631 \u0647\u0631 \u0641\u0627\u062b \u0633\u062b\u0630\u062e\u0631\u064a \u0630\u062e\u0648\u0648\u0634 \u0633\u062b\u062d\u0634\u0642\u0634\u0641\u062b\u064a \u0628\u0647\u062b\u0645\u064a.", "Upload a new PDF to \u201c<%= name %>\u201d": "\u0639\u062d\u0645\u062e\u0634\u064a \u0634 \u0631\u062b\u0635 \u062d\u064a\u0628 \u0641\u062e \u201c<%= name %>\u201d", "Upload an image": "\u0639\u062d\u0645\u062e\u0634\u064a \u0634\u0631 \u0647\u0648\u0634\u0644\u062b", @@ -1723,6 +1764,7 @@ "Will Be Visible To:": "\u0635\u0647\u0645\u0645 \u0632\u062b \u062f\u0647\u0633\u0647\u0632\u0645\u062b \u0641\u062e:", "Words: {0}": "\u0635\u062e\u0642\u064a\u0633: {0}", "Would you like to sign in using your %(providerName)s credentials?": "\u0635\u062e\u0639\u0645\u064a \u063a\u062e\u0639 \u0645\u0647\u0646\u062b \u0641\u062e \u0633\u0647\u0644\u0631 \u0647\u0631 \u0639\u0633\u0647\u0631\u0644 \u063a\u062e\u0639\u0642 %(providerName)s \u0630\u0642\u062b\u064a\u062b\u0631\u0641\u0647\u0634\u0645\u0633?", + "XSeries": "\u0637\u0633\u062b\u0642\u0647\u062b\u0633", "XSeries Program Certificates": "\u0637\u0633\u062b\u0642\u0647\u062b\u0633 \u062d\u0642\u062e\u0644\u0642\u0634\u0648 \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b\u0633", "Year of Birth": "\u063a\u062b\u0634\u0642 \u062e\u0628 \u0632\u0647\u0642\u0641\u0627", "Yes, allow edits to the active Certificate": "\u063a\u062b\u0633, \u0634\u0645\u0645\u062e\u0635 \u062b\u064a\u0647\u0641\u0633 \u0641\u062e \u0641\u0627\u062b \u0634\u0630\u0641\u0647\u062f\u062b \u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b", @@ -1840,6 +1882,7 @@ "certificate.credential_url": "\u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b.\u0630\u0642\u062b\u064a\u062b\u0631\u0641\u0647\u0634\u0645_\u0639\u0642\u0645", "certificate.display_name": "\u0630\u062b\u0642\u0641\u0647\u0628\u0647\u0630\u0634\u0641\u062b.\u064a\u0647\u0633\u062d\u0645\u0634\u063a_\u0631\u0634\u0648\u062b", "close": "\u0630\u0645\u062e\u0633\u062b", + "confirm": "\u0630\u062e\u0631\u0628\u0647\u0642\u0648", "content group": "\u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d", "correct": "\u0630\u062e\u0642\u0642\u062b\u0630\u0641", "country": "\u0630\u062e\u0639\u0631\u0641\u0642\u063a", @@ -1868,6 +1911,7 @@ "formLabel": "\u0628\u062e\u0642\u0648\u0645\u0634\u0632\u062b\u0645", "gettext(": "\u0644\u062b\u0641\u0641\u062b\u0637\u0641(", "group configuration": "\u0644\u0642\u062e\u0639\u062d \u0630\u062e\u0631\u0628\u0647\u0644\u0639\u0642\u0634\u0641\u0647\u062e\u0631", + "image omitted": "\u0647\u0648\u0634\u0644\u062b \u062e\u0648\u0647\u0641\u0641\u062b\u064a", "incorrect": "\u0647\u0631\u0630\u062e\u0642\u0642\u062b\u0630\u0641", "language": "\u0645\u0634\u0631\u0644\u0639\u0634\u0644\u062b", "last activity": "\u0645\u0634\u0633\u0641 \u0634\u0630\u0641\u0647\u062f\u0647\u0641\u063a", @@ -1902,6 +1946,10 @@ "\u0641\u0627\u062b\u0642\u062b \u0647\u0633 \u0630\u0639\u0642\u0642\u062b\u0631\u0641\u0645\u063a %(numVotes)s \u062f\u062e\u0641\u062b", "\u0641\u0627\u062b\u0642\u062b \u0634\u0642\u062b \u0630\u0639\u0642\u0642\u062b\u0631\u0641\u0645\u063a %(numVotes)s \u062f\u062e\u0641\u062b\u0633" ], + "there is currently {numVotes} vote": [ + "\u0641\u0627\u062b\u0642\u062b \u0647\u0633 \u0630\u0639\u0642\u0642\u062b\u0631\u0641\u0645\u063a {numVotes} \u062f\u062e\u0641\u062b", + "\u0641\u0627\u062b\u0642\u062b \u0634\u0642\u062b \u0630\u0639\u0642\u0642\u062b\u0631\u0641\u0645\u063a {numVotes} \u062f\u062e\u0641\u062b\u0633" + ], "timed": "\u0641\u0647\u0648\u062b\u064a", "title": "\u0641\u0647\u0641\u0645\u062b", "type": "\u0641\u063a\u062d\u062b", @@ -1911,7 +1959,24 @@ "username or email": "\u0639\u0633\u062b\u0642\u0631\u0634\u0648\u062b \u062e\u0642 \u062b\u0648\u0634\u0647\u0645", "with %(release_date_from)s": "\u0635\u0647\u0641\u0627 %(release_date_from)s", "with %(section_or_subsection)s": "\u0635\u0647\u0641\u0627 %(section_or_subsection)s", + "{0} is invalid": "{0} \u0647\u0633 \u0647\u0631\u062f\u0634\u0645\u0647\u064a", + "{0} is required": "{0} \u0647\u0633 \u0642\u062b\u0636\u0639\u0647\u0642\u062b\u064a", + "{0} must be a number": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634 \u0631\u0639\u0648\u0632\u062b\u0642", + "{0} must be a valid email": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634 \u062f\u0634\u0645\u0647\u064a \u062b\u0648\u0634\u0647\u0645", + "{0} must be a valid url": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634 \u062f\u0634\u0645\u0647\u064a \u0639\u0642\u0645", + "{0} must be accepted": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634\u0630\u0630\u062b\u062d\u0641\u062b\u064a", + "{0} must be at least {1} characters": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634\u0641 \u0645\u062b\u0634\u0633\u0641 {1} \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633", + "{0} must be at most {1} characters": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0634\u0641 \u0648\u062e\u0633\u0641 {1} \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633", + "{0} must be between {1} and {2}": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0632\u062b\u0641\u0635\u062b\u062b\u0631 {1} \u0634\u0631\u064a {2}", + "{0} must be between {1} and {2} characters": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0632\u062b\u0641\u0635\u062b\u062b\u0631 {1} \u0634\u0631\u064a {2} \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633", + "{0} must be greater than or equal to {1}": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0644\u0642\u062b\u0634\u0641\u062b\u0642 \u0641\u0627\u0634\u0631 \u062e\u0642 \u062b\u0636\u0639\u0634\u0645 \u0641\u062e {1}", + "{0} must be less than or equal to {1}": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0645\u062b\u0633\u0633 \u0641\u0627\u0634\u0631 \u062e\u0642 \u062b\u0636\u0639\u0634\u0645 \u0641\u062e {1}", + "{0} must be one of: gettext( {1}": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u062e\u0631\u062b \u062e\u0628: \u0644\u062b\u0641\u0641\u062b\u0637\u0641( {1}", + "{0} must be the same as {1}": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b \u0641\u0627\u062b \u0633\u0634\u0648\u062b \u0634\u0633 {1}", + "{0} must be {1} characters": "{0} \u0648\u0639\u0633\u0641 \u0632\u062b {1} \u0630\u0627\u0634\u0642\u0634\u0630\u0641\u062b\u0642\u0633", + "{0} must only contain digits": "{0} \u0648\u0639\u0633\u0641 \u062e\u0631\u0645\u063a \u0630\u062e\u0631\u0641\u0634\u0647\u0631 \u064a\u0647\u0644\u0647\u0641\u0633", "{browse_span_start}Browse teams in other topics{span_end} or {search_span_start}search teams{span_end} in this topic. If you still can't find a team to join, {create_span_start}create a new team in this topic{span_end}.": "{browse_span_start}\u0632\u0642\u062e\u0635\u0633\u062b \u0641\u062b\u0634\u0648\u0633 \u0647\u0631 \u062e\u0641\u0627\u062b\u0642 \u0641\u062e\u062d\u0647\u0630\u0633{span_end} \u062e\u0642 {search_span_start}\u0633\u062b\u0634\u0642\u0630\u0627 \u0641\u062b\u0634\u0648\u0633{span_end} \u0647\u0631 \u0641\u0627\u0647\u0633 \u0641\u062e\u062d\u0647\u0630. \u0647\u0628 \u063a\u062e\u0639 \u0633\u0641\u0647\u0645\u0645 \u0630\u0634\u0631'\u0641 \u0628\u0647\u0631\u064a \u0634 \u0641\u062b\u0634\u0648 \u0641\u062e \u062a\u062e\u0647\u0631, {create_span_start}\u0630\u0642\u062b\u0634\u0641\u062b \u0634 \u0631\u062b\u0635 \u0641\u062b\u0634\u0648 \u0647\u0631 \u0641\u0627\u0647\u0633 \u0641\u062e\u062d\u0647\u0630{span_end}.", + "{display_name} Settings": "{display_name} \u0633\u062b\u0641\u0641\u0647\u0631\u0644\u0633", "{email} is already on the {container} team. Recheck the email address if you want to add a new member.": "{email} \u0647\u0633 \u0634\u0645\u0642\u062b\u0634\u064a\u063a \u062e\u0631 \u0641\u0627\u062b {container} \u0641\u062b\u0634\u0648. \u0642\u062b\u0630\u0627\u062b\u0630\u0646 \u0641\u0627\u062b \u062b\u0648\u0634\u0647\u0645 \u0634\u064a\u064a\u0642\u062b\u0633\u0633 \u0647\u0628 \u063a\u062e\u0639 \u0635\u0634\u0631\u0641 \u0641\u062e \u0634\u064a\u064a \u0634 \u0631\u062b\u0635 \u0648\u062b\u0648\u0632\u062b\u0642.", "{hours}:{minutes} (current UTC time)": "{hours}:{minutes} (\u0630\u0639\u0642\u0642\u062b\u0631\u0641 \u0639\u0641\u0630 \u0641\u0647\u0648\u062b)", "{numMoved} student was removed from {oldCohort}": [ @@ -1922,15 +1987,31 @@ "{numPresent} \u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u0635\u0634\u0633 \u0634\u0645\u0642\u062b\u0634\u064a\u063a \u0647\u0631 \u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641", "{numPresent} \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0635\u062b\u0642\u062b \u0634\u0645\u0642\u062b\u0634\u064a\u063a \u0647\u0631 \u0641\u0627\u062b \u0630\u062e\u0627\u062e\u0642\u0641" ], + "{numResponses} other response": [ + "{numResponses} \u062e\u0641\u0627\u062b\u0642 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b", + "{numResponses} \u062e\u0641\u0627\u062b\u0642 \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b\u0633" + ], + "{numResponses} response": [ + "{numResponses} \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b", + "{numResponses} \u0642\u062b\u0633\u062d\u062e\u0631\u0633\u062b\u0633" + ], "{numUsersAdded} student has been added to this cohort": [ "{numUsersAdded} \u0633\u0641\u0639\u064a\u062b\u0631\u0641 \u0627\u0634\u0633 \u0632\u062b\u062b\u0631 \u0634\u064a\u064a\u062b\u064a \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641", "{numUsersAdded} \u0633\u0641\u0639\u064a\u062b\u0631\u0641\u0633 \u0627\u0634\u062f\u062b \u0632\u062b\u062b\u0631 \u0634\u064a\u064a\u062b\u064a \u0641\u062e \u0641\u0627\u0647\u0633 \u0630\u062e\u0627\u062e\u0642\u0641" ], + "{numVotes} Vote": [ + "{numVotes} \u062f\u062e\u0641\u062b", + "{numVotes} \u062f\u062e\u0641\u062b\u0633" + ], "{organization}\\'s logo": "{organization}\\'\u0633 \u0645\u062e\u0644\u062e", "{platform_name} learners can see my:": "{platform_name} \u0645\u062b\u0634\u0642\u0631\u062b\u0642\u0633 \u0630\u0634\u0631 \u0633\u062b\u062b \u0648\u063a:", "{screen_reader_start}Warning:{screen_reader_end} No content groups exist.": "{screen_reader_start}\u0635\u0634\u0642\u0631\u0647\u0631\u0644:{screen_reader_end} \u0631\u062e \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d\u0633 \u062b\u0637\u0647\u0633\u0641.", "{screen_reader_start}Warning:{screen_reader_end} The previously selected content group was deleted. Select another content group.": "{screen_reader_start}\u0635\u0634\u0642\u0631\u0647\u0631\u0644:{screen_reader_end} \u0641\u0627\u062b \u062d\u0642\u062b\u062f\u0647\u062e\u0639\u0633\u0645\u063a \u0633\u062b\u0645\u062b\u0630\u0641\u062b\u064a \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d \u0635\u0634\u0633 \u064a\u062b\u0645\u062b\u0641\u062b\u064a. \u0633\u062b\u0645\u062b\u0630\u0641 \u0634\u0631\u062e\u0641\u0627\u062b\u0642 \u0630\u062e\u0631\u0641\u062b\u0631\u0641 \u0644\u0642\u062e\u0639\u062d.", "{totalItems} total": "{totalItems} \u0641\u062e\u0641\u0634\u0645", + "{unread_count} new comment": [ + "{unread_count} \u0631\u062b\u0635 \u0630\u062e\u0648\u0648\u062b\u0631\u0641", + "{unread_count} \u0631\u062b\u0635 \u0630\u062e\u0648\u0648\u062b\u0631\u0641\u0633" + ], "\u2026": "\u2026" }; diff --git a/cms/static/js/models/component_template.js b/cms/static/js/models/component_template.js index 3b55f559dc..39356d9feb 100644 --- a/cms/static/js/models/component_template.js +++ b/cms/static/js/models/component_template.js @@ -10,7 +10,8 @@ define(["backbone"], function (Backbone) { // category (may or may not match "type") // boilerplate_name (may be null) // is_common (only used for problems) - templates: [] + templates: [], + support_legend: {} }, parse: function (response) { // Returns true only for templates that both have no boilerplate and are of @@ -24,6 +25,7 @@ define(["backbone"], function (Backbone) { this.type = response.type; this.templates = response.templates; this.display_name = response.display_name; + this.support_legend = response.support_legend; // Sort the templates. this.templates.sort(function (a, b) { diff --git a/cms/static/js/models/group_configuration.js b/cms/static/js/models/group_configuration.js index 78a62332d9..7211ddd56d 100644 --- a/cms/static/js/models/group_configuration.js +++ b/cms/static/js/models/group_configuration.js @@ -1,6 +1,6 @@ define([ 'backbone', 'underscore', 'gettext', 'js/models/group', 'js/collections/group', - 'backbone.associations', 'coffee/src/main' + 'backbone.associations', 'cms/js/main' ], function(Backbone, _, gettext, GroupModel, GroupCollection) { 'use strict'; diff --git a/cms/static/js/models/textbook.js b/cms/static/js/models/textbook.js index b59948f191..e796a52474 100644 --- a/cms/static/js/models/textbook.js +++ b/cms/static/js/models/textbook.js @@ -1,5 +1,5 @@ define(["backbone", "underscore", "gettext", "js/models/chapter", "js/collections/chapter", - "backbone.associations", "coffee/src/main"], + "backbone.associations", "cms/js/main"], function(Backbone, _, gettext, ChapterModel, ChapterCollection) { var Textbook = Backbone.AssociatedModel.extend({ diff --git a/cms/static/js/programs/collections/auto_auth_collection.js b/cms/static/js/programs/collections/auto_auth_collection.js new file mode 100644 index 0000000000..2d768df115 --- /dev/null +++ b/cms/static/js/programs/collections/auto_auth_collection.js @@ -0,0 +1,10 @@ +define([ + 'backbone', + 'js/programs/utils/auth_utils' + ], + function( Backbone, auth ) { + 'use strict'; + + return Backbone.Collection.extend(auth.autoSync); + } +); diff --git a/cms/static/js/programs/collections/course_runs_collection.js b/cms/static/js/programs/collections/course_runs_collection.js new file mode 100644 index 0000000000..71567b1bf1 --- /dev/null +++ b/cms/static/js/programs/collections/course_runs_collection.js @@ -0,0 +1,59 @@ +define([ + 'backbone', + 'jquery', + 'js/programs/utils/api_config', + 'js/programs/collections/auto_auth_collection', + 'jquery.cookie' + ], + function( Backbone, $, apiConfig, AutoAuthCollection ) { + 'use strict'; + + return AutoAuthCollection.extend({ + allRuns: [], + + initialize: function(models, options) { + // Ignore pagination and give me everything + var orgStr = options.organization.key, + queries = '?org=' + orgStr + '&username=' + apiConfig.get('username') + '&page_size=1000'; + + this.url = apiConfig.get('lmsBaseUrl') + 'api/courses/v1/courses/' + queries; + }, + + /* + * Abridged version of Backbone.Collection.Create that does not + * save the updated Collection back to the server + * (code based on original function - http://backbonejs.org/docs/backbone.html#section-134) + */ + create: function(model, options) { + options = options ? _.clone(options) : {}; + model = this._prepareModel(model, options); + + if (!!model) { + this.add(model, options); + return model; + } + }, + + parse: function(data) { + this.allRuns = data.results; + + // Because pagination is ignored just set results + return data.results; + }, + + // Adds a run back into the model for selection + addRun: function(id) { + var courseRun = _.findWhere( this.allRuns, { id: id }); + + this.create(courseRun); + }, + + // Removes a run from the model for selection + removeRun: function(id) { + var courseRun = this.where({id: id}); + + this.remove(courseRun); + } + }); + } +); diff --git a/cms/static/js/programs/collections/programs_collection.js b/cms/static/js/programs/collections/programs_collection.js new file mode 100644 index 0000000000..da23f30c96 --- /dev/null +++ b/cms/static/js/programs/collections/programs_collection.js @@ -0,0 +1,13 @@ +define([ + 'backbone', + 'jquery', + 'js/programs/models/program_model' + ], + function( Backbone, $, ProgramModel ) { + 'use strict'; + + return Backbone.Collection.extend({ + model: ProgramModel + }); + } +); diff --git a/cms/static/js/programs/models/api_config_model.js b/cms/static/js/programs/models/api_config_model.js new file mode 100644 index 0000000000..55fcd70316 --- /dev/null +++ b/cms/static/js/programs/models/api_config_model.js @@ -0,0 +1,17 @@ +define([ + 'backbone' + ], + function( Backbone ) { + 'use strict'; + + return Backbone.Model.extend({ + defaults: { + username: '', + lmsBaseUrl: '', + programsApiUrl: '', + authUrl: '/programs/id_token/', + idToken: '' + } + }); + } +); diff --git a/cms/static/js/programs/models/auto_auth_model.js b/cms/static/js/programs/models/auto_auth_model.js new file mode 100644 index 0000000000..8a61e3a8ad --- /dev/null +++ b/cms/static/js/programs/models/auto_auth_model.js @@ -0,0 +1,10 @@ +define([ + 'backbone', + 'js/programs/utils/auth_utils' + ], + function( Backbone, auth ) { + 'use strict'; + + return Backbone.Model.extend(auth.autoSync); + } +); diff --git a/cms/static/js/programs/models/course_model.js b/cms/static/js/programs/models/course_model.js new file mode 100644 index 0000000000..b72a00207a --- /dev/null +++ b/cms/static/js/programs/models/course_model.js @@ -0,0 +1,38 @@ +define([ + 'backbone', + 'jquery', + 'js/programs/utils/api_config', + 'js/programs/models/auto_auth_model', + 'jquery.cookie', + 'gettext' + ], + function( Backbone, $, apiConfig, AutoAuthModel ) { + 'use strict'; + + return AutoAuthModel.extend({ + + validation: { + key: { + required: true, + maxLength: 64 + }, + display_name: { + required: true, + maxLength: 128 + } + }, + + labels: { + key: gettext('Course Code'), + display_name: gettext('Course Title') + }, + + defaults: { + display_name: false, + key: false, + organization: [], + run_modes: [] + } + }); + } +); diff --git a/cms/static/js/programs/models/course_run_model.js b/cms/static/js/programs/models/course_run_model.js new file mode 100644 index 0000000000..9e41a7e52e --- /dev/null +++ b/cms/static/js/programs/models/course_run_model.js @@ -0,0 +1,17 @@ +define([ + 'backbone' + ], + function( Backbone ) { + 'use strict'; + + return Backbone.Model.extend({ + defaults: { + course_key: '', + mode_slug: 'verified', + sku: '', + start_date: '', + run_key: '' + } + }); + } +); diff --git a/cms/static/js/programs/models/organizations_model.js b/cms/static/js/programs/models/organizations_model.js new file mode 100644 index 0000000000..19fd43f082 --- /dev/null +++ b/cms/static/js/programs/models/organizations_model.js @@ -0,0 +1,16 @@ +define([ + 'js/programs/utils/api_config', + 'js/programs/models/auto_auth_model' + ], + function( apiConfig, AutoAuthModel ) { + 'use strict'; + + return AutoAuthModel.extend({ + + url: function() { + return apiConfig.get('programsApiUrl') + 'organizations/?page_size=1000'; + } + + }); + } +); diff --git a/cms/static/js/programs/models/program_model.js b/cms/static/js/programs/models/program_model.js new file mode 100644 index 0000000000..16776338a9 --- /dev/null +++ b/cms/static/js/programs/models/program_model.js @@ -0,0 +1,106 @@ +define([ + 'backbone', + 'jquery', + 'js/programs/utils/api_config', + 'js/programs/models/auto_auth_model', + 'gettext', + 'jquery.cookie' + ], + function( Backbone, $, apiConfig, AutoAuthModel, gettext ) { + 'use strict'; + + return AutoAuthModel.extend({ + + // Backbone.Validation rules. + // See: http://thedersen.com/projects/backbone-validation/#configure-validation-rules-on-the-model. + validation: { + name: { + required: true, + maxLength: 255 + }, + subtitle: { + // The underlying Django model does not require a subtitle. + maxLength: 255 + }, + category: { + required: true, + oneOf: ['xseries', 'micromasters'] + }, + organizations: 'validateOrganizations', + marketing_slug: { + maxLength: 255 + } + }, + + initialize: function() { + this.url = apiConfig.get('programsApiUrl') + 'programs/' + this.id + '/'; + }, + + validateOrganizations: function( orgArray ) { + /** + * The array passed to this method contains a single object representing + * the selected organization; the object contains the organization's key. + * In the future, multiple organizations might be associated with a program. + */ + var i, + len = orgArray ? orgArray.length : 0; + + for ( i = 0; i < len; i++ ) { + if ( orgArray[i].key === 'false' ) { + return gettext('Please select a valid organization.'); + } + } + }, + + getConfig: function( options ) { + var patch = options && options.patch, + params = patch ? this.get('id') + '/' : '', + config = _.extend({ validate: true, parse: true }, { + type: patch ? 'PATCH' : 'POST', + url: apiConfig.get('programsApiUrl') + 'programs/' + params, + contentType: patch ? 'application/merge-patch+json' : 'application/json', + context: this, + // NB: setting context fails in tests + success: _.bind( this.saveSuccess, this ), + error: _.bind( this.saveError, this ) + }); + + if ( patch ) { + config.data = JSON.stringify( options.update ) || this.attributes; + } + + return config; + }, + + patch: function( data ) { + this.save({ + patch: true, + update: data + }); + }, + + save: function( options ) { + var method, + patch = options && options.patch ? true : false, + config = this.getConfig( options ); + + /** + * Simplified version of code from the default Backbone save function + * http://backbonejs.org/docs/backbone.html#section-87 + */ + method = this.isNew() ? 'create' : ( patch ? 'patch' : 'update' ); + + this.sync( method, this, config ); + }, + + saveError: function( jqXHR ) { + this.trigger( 'error', jqXHR ); + }, + + saveSuccess: function( data ) { + this.set({ id: data.id }); + this.trigger( 'sync', this ); + } + }); + } +); diff --git a/cms/static/js/programs/program_admin_app.js b/cms/static/js/programs/program_admin_app.js new file mode 100644 index 0000000000..1e5d293bf3 --- /dev/null +++ b/cms/static/js/programs/program_admin_app.js @@ -0,0 +1,10 @@ +(function() { + 'use strict'; + require([ + 'js/programs/views/program_admin_app_view' + ], + function( ProgramAdminAppView ) { + return new ProgramAdminAppView(); + } + ); +})(); diff --git a/cms/static/js/programs/router.js b/cms/static/js/programs/router.js new file mode 100644 index 0000000000..a5ebcb1d87 --- /dev/null +++ b/cms/static/js/programs/router.js @@ -0,0 +1,65 @@ +define([ + 'backbone', + 'js/programs/views/program_creator_view', + 'js/programs/views/program_details_view', + 'js/programs/models/program_model' + ], + function( Backbone, ProgramCreatorView, ProgramDetailsView, ProgramModel ) { + 'use strict'; + + return Backbone.Router.extend({ + root: '/program/', + + routes: { + 'new': 'programCreator', + ':id': 'programDetails' + }, + + initialize: function( options ) { + this.homeUrl = options.homeUrl; + }, + + goHome: function() { + window.location.href = this.homeUrl; + }, + + loadProgramDetails: function() { + this.programDetailsView = new ProgramDetailsView({ + model: this.programModel + }); + }, + + programCreator: function() { + if ( this.programCreatorView ) { + this.programCreatorView.destroy(); + } + + this.programCreatorView = new ProgramCreatorView({ + router: this + }); + }, + + programDetails: function( id ) { + this.programModel = new ProgramModel({ + id: id + }); + + this.programModel.on( 'sync', this.loadProgramDetails, this ); + this.programModel.fetch(); + }, + + /** + * Starts the router. + */ + start: function () { + if ( !Backbone.history.started ) { + Backbone.history.start({ + pushState: true, + root: this.root + }); + } + return this; + } + }); + } +); diff --git a/cms/static/js/programs/shims/gettext.js b/cms/static/js/programs/shims/gettext.js new file mode 100644 index 0000000000..45d4fa7450 --- /dev/null +++ b/cms/static/js/programs/shims/gettext.js @@ -0,0 +1,22 @@ +/** + * the Programs application loads gettext identity library via django, thus + * components reference gettext globally so a shim is added here to reflect + * the text so tests can be run if modules reference gettext + */ +(function() { + 'use strict'; + + if ( !window.gettext ) { + window.gettext = function (text) { + return text; + }; + } + + if ( !window.interpolate ) { + window.interpolate = function (text) { + return text; + }; + } + + return window; +})(); diff --git a/cms/static/js/programs/utils/api_config.js b/cms/static/js/programs/utils/api_config.js new file mode 100644 index 0000000000..5924363b27 --- /dev/null +++ b/cms/static/js/programs/utils/api_config.js @@ -0,0 +1,21 @@ +define([ + 'js/programs/models/api_config_model' + ], + function( ApiConfigModel ) { + 'use strict'; + + /** + * This js module implements the Singleton pattern for an instance + * of the ApiConfigModel Backbone model. It returns the same shared + * instance of that model anywhere it is required. + */ + var instance; + + if (instance === undefined) { + instance = new ApiConfigModel(); + } + + return instance; + + } +); diff --git a/cms/static/js/programs/utils/auth_utils.js b/cms/static/js/programs/utils/auth_utils.js new file mode 100644 index 0000000000..30bd541edf --- /dev/null +++ b/cms/static/js/programs/utils/auth_utils.js @@ -0,0 +1,89 @@ +define([ + 'jquery', + 'underscore', + 'js/programs/utils/api_config' + ], + function( $, _, apiConfig ) { + 'use strict'; + + var auth = { + autoSync: { + /** + * Override Backbone.sync to seamlessly attempt (re-)authentication when necessary. + * + * If a 401 error response is encountered while making a request to the Programs, + * API, this wrapper will attempt to request an id token from a custom endpoint + * via AJAX. Then the original request will be retried once more. + * + * Any other response than 401 on the original API request, or any error occurring + * on the retried API request (including 401), will be handled by the base sync + * implementation. + * + */ + sync: function( method, model, options ) { + + var oldError = options.error; + + this._setHeaders( options ); + + options.notifyOnError = false; // suppress Studio error pop-up that will happen if we get a 401 + + options.error = function(xhr, textStatus, errorThrown) { + if (xhr && xhr.status === 401) { + // attempt auth and retry + this._updateToken(function() { + // restore the original error handler + options.error = oldError; + options.notifyOnError = true; // if it fails again, let Studio notify. + delete options.xhr; // remove the failed (401) xhr from the last try. + + // update authorization header + this._setHeaders( options ); + + Backbone.sync.call(this, method, model, options); + }.bind(this)); + } else if (oldError) { + // fall back to the original error handler + oldError.call(this, xhr, textStatus, errorThrown); + } + }.bind(this); + return Backbone.sync.call(this, method, model, options); + }, + + /** + * Fix up headers on an imminent AJAX sync, ensuring that the JWT token is enclosed + * and that credentials are included when the request is being made cross-domain. + */ + _setHeaders: function( ajaxOptions ) { + ajaxOptions.headers = _.extend ( ajaxOptions.headers || {}, { + Authorization: 'JWT ' + apiConfig.get( 'idToken' ) + }); + ajaxOptions.xhrFields = _.extend( ajaxOptions.xhrFields || {}, { + withCredentials: true + }); + }, + + /** + * Fetch a new id token from the configured endpoint, update the api config, + * and invoke the specified callback. + */ + _updateToken: function( success ) { + + $.ajax({ + url: apiConfig.get('authUrl'), + xhrFields: { + // See: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials + withCredentials: true + }, + crossDomain: true + }).done(function ( data ) { + // save the newly-retrieved id token + apiConfig.set( 'idToken', data.id_token ); + }).done( success ); + } + } + }; + + return auth; + } +); diff --git a/cms/static/js/programs/utils/constants.js b/cms/static/js/programs/utils/constants.js new file mode 100644 index 0000000000..e60dea9a0b --- /dev/null +++ b/cms/static/js/programs/utils/constants.js @@ -0,0 +1,16 @@ +/** + * Reusable constants + */ +define([], function() { + 'use strict'; + + return { + keyCodes: { + tab: 9, + enter: 13, + esc: 27, + up: 38, + down: 40 + } + }; +}); diff --git a/cms/static/js/programs/utils/validation_config.js b/cms/static/js/programs/utils/validation_config.js new file mode 100644 index 0000000000..e9df3c6a3d --- /dev/null +++ b/cms/static/js/programs/utils/validation_config.js @@ -0,0 +1,70 @@ +define([ + 'backbone', + 'backbone.validation', + 'underscore', + 'gettext' + ], + function( Backbone, BackboneValidation, _, gettext ) { + 'use strict'; + + var errorClass = 'has-error', + messageEl = '.field-message', + messageContent = '.field-message-content'; + + // These are the same messages provided by Backbone.Validation, + // marked for translation. + // See: http://thedersen.com/projects/backbone-validation/#overriding-the-default-error-messages. + _.extend( Backbone.Validation.messages, { + required: gettext( '{0} is required' ), + acceptance: gettext( '{0} must be accepted' ), + min: gettext( '{0} must be greater than or equal to {1}' ), + max: gettext( '{0} must be less than or equal to {1}' ), + range: gettext( '{0} must be between {1} and {2}' ), + length: gettext( '{0} must be {1} characters' ), + minLength: gettext( '{0} must be at least {1} characters' ), + maxLength: gettext( '{0} must be at most {1} characters' ), + rangeLength: gettext( '{0} must be between {1} and {2} characters' ), + oneOf: gettext( '{0} must be one of: {1}' ), + equalTo: gettext( '{0} must be the same as {1}' ), + digits: gettext( '{0} must only contain digits' ), + number: gettext( '{0} must be a number' ), + email: gettext( '{0} must be a valid email' ), + url: gettext( '{0} must be a valid url' ), + inlinePattern: gettext( '{0} is invalid' ) + }); + + _.extend( Backbone.Validation.callbacks, { + // Gets called when a previously invalid field in the + // view becomes valid. Removes any error message. + valid: function( view, attr, selector ) { + var $input = view.$( '[' + selector + '~="' + attr + '"]' ), + $message = $input.siblings( messageEl ); + + $input.removeClass( errorClass ) + .removeAttr( 'data-error' ); + + $message.removeClass( errorClass ) + .find( messageContent ) + .text( '' ); + }, + + // Gets called when a field in the view becomes invalid. + // Adds a error message. + invalid: function( view, attr, error, selector ) { + var $input = view.$( '[' + selector + '~="' + attr + '"]' ), + $message = $input.siblings( messageEl ); + + $input.addClass( errorClass ) + .attr( 'data-error', error ); + + $message.addClass( errorClass ) + .find( messageContent ) + .text( $input.data('error') ); + } + }); + + Backbone.Validation.configure({ + labelFormatter: 'label' + }); + } +); diff --git a/cms/static/js/programs/views/confirm_modal_view.js b/cms/static/js/programs/views/confirm_modal_view.js new file mode 100644 index 0000000000..82db156b06 --- /dev/null +++ b/cms/static/js/programs/views/confirm_modal_view.js @@ -0,0 +1,59 @@ +define([ + 'backbone', + 'jquery', + 'underscore', + 'js/programs/utils/constants', + 'text!templates/programs/confirm_modal.underscore', + 'edx-ui-toolkit/js/utils/html-utils', + 'gettext' + ], + function( Backbone, $, _, constants, ModalTpl, HtmlUtils ) { + 'use strict'; + + return Backbone.View.extend({ + events: { + 'click .js-cancel': 'destroy', + 'click .js-confirm': 'confirm', + 'keydown': 'handleKeydown' + }, + + tpl: HtmlUtils.template( ModalTpl ), + + initialize: function( options ) { + this.$parentEl = $( options.parentEl ); + this.callback = options.callback; + this.content = options.content; + this.render(); + }, + + render: function() { + HtmlUtils.setHtml(this.$el, this.tpl( this.content )); + HtmlUtils.setHtml(this.$parentEl, HtmlUtils.HTML(this.$el)); + this.postRender(); + }, + + postRender: function() { + this.$el.find('.js-focus-first').focus(); + }, + + confirm: function() { + this.callback(); + this.destroy(); + }, + + destroy: function() { + this.undelegateEvents(); + this.remove(); + this.$parentEl.html(''); + }, + + handleKeydown: function( event ) { + var keyCode = event.keyCode; + + if ( keyCode === constants.keyCodes.esc ) { + this.destroy(); + } + } + }); + } +); diff --git a/cms/static/js/programs/views/course_details_view.js b/cms/static/js/programs/views/course_details_view.js new file mode 100644 index 0000000000..7025ec07ee --- /dev/null +++ b/cms/static/js/programs/views/course_details_view.js @@ -0,0 +1,204 @@ +define([ + 'backbone', + 'backbone.validation', + 'jquery', + 'underscore', + 'js/programs/models/course_model', + 'js/programs/models/course_run_model', + 'js/programs/models/program_model', + 'js/programs/views/course_run_view', + 'text!templates/programs/course_details.underscore', + 'edx-ui-toolkit/js/utils/html-utils', + 'gettext', + 'js/programs/utils/validation_config' + ], + function( Backbone, BackboneValidation, $, _, CourseModel, CourseRunModel, + ProgramModel, CourseRunView, ListTpl, HtmlUtils ) { + 'use strict'; + + return Backbone.View.extend({ + parentEl: '.js-course-list', + + className: 'course-details', + + events: { + 'click .js-remove-course': 'destroy', + 'click .js-select-course': 'setCourse', + 'click .js-add-course-run': 'addCourseRun' + }, + + tpl: HtmlUtils.template( ListTpl ), + + initialize: function( options ) { + this.model = new CourseModel(); + Backbone.Validation.bind( this ); + this.$parentEl = $( this.parentEl ); + + // For managing subViews + this.courseRunViews = []; + this.courseRuns = options.courseRuns; + this.programModel = options.programModel; + + if ( options.courseData ) { + this.model.set(options.courseData); + } else { + this.model.set({run_modes: []}); + } + + // Need a unique value for field ids so using model cid + this.model.set({cid: this.model.cid}); + this.model.on('change:run_modes', this.updateRuns, this); + this.render(); + }, + + render: function() { + HtmlUtils.setHtml(this.$el, this.tpl(this.formatData())); + this.$parentEl.append( this.$el ); + this.postRender(); + }, + + postRender: function() { + var runs = this.model.get('run_modes'); + if ( runs && runs.length > 0 ) { + this.addCourseRuns(); + } + }, + + addCourseRun: function(event) { + var $runsContainer = this.$el.find('.js-course-runs'), + runModel = new CourseRunModel(), + runView; + + event.preventDefault(); + + runModel.set({course_key: undefined}); + + runView = new CourseRunView({ + model: runModel, + courseModel: this.model, + courseRuns: this.courseRuns, + programStatus: this.programModel.get('status'), + $parentEl: $runsContainer + }); + + this.courseRunViews.push( runView ); + }, + + addCourseRuns: function() { + // Create run views + var runs = this.model.get('run_modes'), + $runsContainer = this.$el.find('.js-course-runs'); + + _.each( runs, function( run ) { + var runModel = new CourseRunModel(), + runView; + + runModel.set(run); + + runView = new CourseRunView({ + model: runModel, + courseModel: this.model, + courseRuns: this.courseRuns, + programStatus: this.programModel.get('status'), + $parentEl: $runsContainer + }); + + this.courseRunViews.push( runView ); + + return runView; + }.bind(this) ); + }, + + addCourseToProgram: function() { + var courseCodes = this.programModel.get('course_codes'), + courseData = this.model.toJSON(); + + if ( this.programModel.isValid( true ) ) { + // We don't want to save the cid so omit it + courseCodes.push( _.omit(courseData, 'cid') ); + this.programModel.patch({ course_codes: courseCodes }); + } + }, + // Delete this view + destroy: function() { + Backbone.Validation.unbind(this); + this.destroyChildren(); + this.undelegateEvents(); + this.removeCourseFromProgram(); + this.remove(); + }, + + destroyChildren: function() { + var runs = this.courseRunViews; + + _.each( runs, function( run ) { + run.removeRun(); + }); + }, + + // Format data to be passed to the template + formatData: function() { + var data = $.extend( {}, + { courseRuns: this.courseRuns.models }, + _.omit( this.programModel.toJSON(), 'run_modes'), + this.model.toJSON() + ); + + return data; + }, + + removeCourseFromProgram: function() { + var courseCodes = this.programModel.get('course_codes'), + key = this.model.get('key'), + name = this.model.get('display_name'), + update = []; + + update = _.reject( courseCodes, function(course) { + return course.key === key && course.display_name === name; + }); + + this.programModel.patch({ course_codes: update }); + }, + + setCourse: function( event ) { + var $form = this.$('.js-course-form'), + title = $form.find('.display-name').val(), + key = $form.find('.course-key').val(); + + event.preventDefault(); + + this.model.set({ + display_name: title, + key: key, + organization: this.programModel.get('organizations')[0] + }); + + if ( this.model.isValid(true) ) { + this.addCourseToProgram(); + this.updateDOM(); + this.addCourseRuns(); + } + }, + + updateDOM: function() { + HtmlUtils.setHtml(this.$el, this.tpl( this.formatData() ) ); + }, + + updateRuns: function() { + var courseCodes = this.programModel.get('course_codes'), + key = this.model.get('key'), + name = this.model.get('display_name'), + index; + + if ( this.programModel.isValid( true ) ) { + index = _.findIndex( courseCodes, function(course) { + return course.key === key && course.display_name === name; + }); + courseCodes[index] = this.model.toJSON(); + + this.programModel.patch({ course_codes: courseCodes }); + } + } + }); + } +); diff --git a/cms/static/js/programs/views/course_run_view.js b/cms/static/js/programs/views/course_run_view.js new file mode 100644 index 0000000000..7284493b66 --- /dev/null +++ b/cms/static/js/programs/views/course_run_view.js @@ -0,0 +1,113 @@ +define([ + 'backbone', + 'jquery', + 'underscore', + 'text!templates/programs/course_run.underscore', + 'edx-ui-toolkit/js/utils/html-utils' + ], + function ( Backbone, $, _, CourseRunTpl, HtmlUtils ) { + 'use strict'; + + return Backbone.View.extend({ + events: { + 'change .js-course-run-select': 'selectRun', + 'click .js-remove-run': 'removeRun' + }, + + tpl: HtmlUtils.template( CourseRunTpl ), + + initialize: function( options ) { + /** + * Need the run model for the template, and the courseModel + * to keep parent view up to date with run changes + */ + this.courseModel = options.courseModel; + this.courseRuns = options.courseRuns; + this.programStatus = options.programStatus; + + this.model.on('change', this.render, this); + this.courseRuns.on('update', this.updateDropdown, this); + + this.$parentEl = options.$parentEl; + this.render(); + }, + + render: function() { + var data = this.model.attributes; + + data.programStatus = this.programStatus; + + if ( !!this.courseRuns ) { + data.courseRuns = this.courseRuns.toJSON(); + } + + HtmlUtils.setHtml(this.$el, this.tpl( data ) ); + this.$parentEl.append( this.$el ); + }, + + // Delete this view + destroy: function() { + this.undelegateEvents(); + this.remove(); + }, + + // Data returned from courseList API is not the correct format + formatData: function( data ) { + return { + course_key: data.id, + mode_slug: 'verified', + start_date: data.start, + sku: '' + }; + }, + + removeRun: function() { + // Update run_modes array on programModel + var startDate = this.model.get('start_date'), + courseKey = this.model.get('course_key'), + /** + * NB: cloning the array so the model will fire a change event when + * the updated version is saved back to the model + */ + runs = _.clone(this.courseModel.get('run_modes')), + updatedRuns = []; + + updatedRuns = _.reject( runs, function( obj ) { + return obj.start_date === startDate && + obj.course_key === courseKey; + }); + + this.courseModel.set({ + run_modes: updatedRuns + }); + + this.courseRuns.addRun(courseKey); + + this.destroy(); + }, + + selectRun: function(event) { + var id = $(event.currentTarget).val(), + runObj = _.findWhere(this.courseRuns.allRuns, {id: id}), + /** + * NB: cloning the array so the model will fire a change event when + * the updated version is saved back to the model + */ + runs = _.clone(this.courseModel.get('run_modes')), + data = this.formatData(runObj); + + this.model.set( data ); + runs.push(data); + this.courseModel.set({run_modes: runs}); + this.courseRuns.removeRun(id); + }, + + // If a run has not been selected update the dropdown options + updateDropdown: function() { + if ( !this.model.get('course_key') ) { + this.render(); + } + } + }); + } +); diff --git a/cms/static/js/programs/views/program_admin_app_view.js b/cms/static/js/programs/views/program_admin_app_view.js new file mode 100644 index 0000000000..4f0a5e184b --- /dev/null +++ b/cms/static/js/programs/views/program_admin_app_view.js @@ -0,0 +1,68 @@ +(function() { + 'use strict'; + + define([ + 'backbone', + 'js/programs/router', + 'js/programs/utils/api_config' + ], + function( Backbone, ProgramRouter, apiConfig ) { + return Backbone.View.extend({ + el: '.js-program-admin', + + events: { + 'click .js-app-click': 'navigate' + }, + + initialize: function() { + apiConfig.set({ + lmsBaseUrl: this.$el.data('lms-base-url'), + programsApiUrl: this.$el.data('programs-api-url'), + authUrl: this.$el.data('auth-url'), + username: this.$el.data('username') + }); + + this.app = new ProgramRouter({ + homeUrl: this.$el.data('home-url') + }); + this.app.start(); + }, + + /** + * Navigate to a new page within the app. + * + * Attempts to open the link in a new tab/window behave as the user expects, however the app + * and data will be reloaded in the new tab/window. + * + * @param {Event} event - Event being handled. + * @returns {boolean} - Indicates if event handling succeeded (always true). + */ + navigate: function (event) { + var url = $(event.target).attr('href').replace( this.app.root, '' ); + + /** + * Handle the cases where the user wants to open the link in a new tab/window. + * event.which === 2 checks for the middle mouse button (https://api.jquery.com/event.which/) + */ + if ( event.ctrlKey || event.shiftKey || event.metaKey || event.which === 2 ) { + return true; + } + + // We'll take it from here... + event.preventDefault(); + + // Process the navigation in the app/router. + if ( url === Backbone.history.getFragment() && url === '' ) { + /** + * Note: We must call the index directly since Backbone + * does not support routing to the same route. + */ + this.app.index(); + } else { + this.app.navigate( url, { trigger: true } ); + } + } + }); + } + ); +})(); diff --git a/cms/static/js/programs/views/program_creator_view.js b/cms/static/js/programs/views/program_creator_view.js new file mode 100644 index 0000000000..6f07486cdf --- /dev/null +++ b/cms/static/js/programs/views/program_creator_view.js @@ -0,0 +1,112 @@ +define([ + 'backbone', + 'backbone.validation', + 'jquery', + 'underscore', + 'js/programs/models/organizations_model', + 'js/programs/models/program_model', + 'text!templates/programs/program_creator_form.underscore', + 'edx-ui-toolkit/js/utils/html-utils', + 'gettext', + 'js/programs/utils/validation_config' + ], + function ( Backbone, BackboneValidation, $, _, OrganizationsModel, ProgramModel, ListTpl, HtmlUtils ) { + 'use strict'; + + return Backbone.View.extend({ + parentEl: '.js-program-admin', + + events: { + 'click .js-create-program': 'createProgram', + 'click .js-abort-view': 'abort' + }, + + tpl: HtmlUtils.template( ListTpl ), + + initialize: function( options ) { + this.$parentEl = $( this.parentEl ); + + this.model = new ProgramModel(); + this.model.on( 'sync', this.saveSuccess, this ); + this.model.on( 'error', this.saveError, this ); + + // Hook up validation. + // See: http://thedersen.com/projects/backbone-validation/#validation-binding. + Backbone.Validation.bind( this ); + + this.organizations = new OrganizationsModel(); + this.organizations.on( 'sync', this.render, this ); + this.organizations.fetch(); + + this.router = options.router; + }, + + render: function() { + HtmlUtils.setHtml( + this.$el, + this.tpl( { + orgs: this.organizations.get('results') + }) + ); + + HtmlUtils.setHtml(this.$parentEl, HtmlUtils.HTML( this.$el )); + }, + + abort: function( event ) { + event.preventDefault(); + this.router.goHome(); + }, + + createProgram: function( event ) { + var data = this.getData(); + + event.preventDefault(); + this.model.set( data ); + + // Check if the model is valid before saving. Invalid attributes are looked + // up by name. The corresponding elements receieve an `invalid` class and a + // `data-error` attribute. Both are removed when formerly invalid attributes + // become valid. + // See: http://thedersen.com/projects/backbone-validation/#isvalid. + if ( this.model.isValid(true) ) { + this.model.save(); + } + }, + + destroy: function() { + // Unhook validation. + // See: http://thedersen.com/projects/backbone-validation/#unbinding. + Backbone.Validation.unbind(this); + + this.undelegateEvents(); + this.remove(); + }, + + getData: function() { + return { + name: this.$el.find( '.program-name' ).val(), + subtitle: this.$el.find( '.program-subtitle' ).val(), + category: this.$el.find( '.program-type' ).val(), + marketing_slug: this.$el.find( '.program-marketing-slug' ).val(), + organizations: [{ + key: this.$el.find( '.program-org' ).val() + }] + }; + }, + + goToView: function( uri ) { + Backbone.history.navigate( uri, { trigger: true } ); + this.destroy(); + }, + + // TODO: add user messaging to show errors + saveError: function( jqXHR ) { + console.log( 'saveError: ', jqXHR ); + }, + + saveSuccess: function() { + this.goToView( String( this.model.get( 'id' ) ) ); + } + }); + } +); diff --git a/cms/static/js/programs/views/program_details_view.js b/cms/static/js/programs/views/program_details_view.js new file mode 100644 index 0000000000..2fb9fafc6a --- /dev/null +++ b/cms/static/js/programs/views/program_details_view.js @@ -0,0 +1,207 @@ +define([ + 'backbone', + 'backbone.validation', + 'jquery', + 'underscore', + 'js/programs/collections/course_runs_collection', + 'js/programs/models/program_model', + 'js/programs/views/confirm_modal_view', + 'js/programs/views/course_details_view', + 'text!templates/programs/program_details.underscore', + 'edx-ui-toolkit/js/utils/html-utils', + 'gettext', + 'js/programs/utils/validation_config' + ], + function( Backbone, BackboneValidation, $, _, CourseRunsCollection, + ProgramModel, ModalView, CourseView, ListTpl, + HtmlUtils ) { + 'use strict'; + + return Backbone.View.extend({ + el: '.js-program-admin', + + events: { + 'blur .js-inline-edit input': 'checkEdit', + 'click .js-add-course': 'addCourse', + 'click .js-enable-edit': 'editField', + 'click .js-publish-program': 'confirmPublish' + }, + + tpl: HtmlUtils.template( ListTpl ), + + initialize: function() { + Backbone.Validation.bind( this ); + + this.courseRuns = new CourseRunsCollection([], { + organization: this.model.get('organizations')[0] + }); + this.courseRuns.fetch(); + this.courseRuns.on('sync', this.setAvailableCourseRuns, this); + this.render(); + }, + + render: function() { + HtmlUtils.setHtml(this.$el, this.tpl( this.model.toJSON() ) ); + this.postRender(); + }, + + postRender: function() { + var courses = this.model.get( 'course_codes' ); + + _.each( courses, function( course ) { + var title = course.key + 'Course'; + + this[ title ] = new CourseView({ + courseRuns: this.courseRuns, + programModel: this.model, + courseData: course + }); + }.bind(this) ); + + // Stop listening to the model sync set when publishing + this.model.off( 'sync' ); + }, + + addCourse: function() { + return new CourseView({ + courseRuns: this.courseRuns, + programModel: this.model + }); + }, + + checkEdit: function( event ) { + var $input = $(event.target), + $span = $input.prevAll('.js-model-value'), + $btn = $input.next('.js-enable-edit'), + value = $input.val(), + key = $input.data('field'), + data = {}; + + data[key] = value; + + $input.addClass('is-hidden'); + $btn.removeClass('is-hidden'); + $span.removeClass('is-hidden'); + + if ( this.model.get( key ) !== value ) { + this.model.set( data ); + + if ( this.model.isValid( true ) ) { + this.model.patch( data ); + $span.text( value ); + } + } + }, + + /** + * Loads modal that user clicks a confirmation button + * in to publish the course (or they can cancel out of it) + */ + confirmPublish: function( event ) { + event.preventDefault(); + + /** + * Update validation to make marketing slug required + * Note that because this validation is not required for + * the program creation form and is only happening here + * it makes sense to have the validation at the view level + */ + if ( this.model.isValid( true ) && this.validateMarketingSlug() ) { + this.modalView = new ModalView({ + model: this.model, + callback: _.bind( this.publishProgram, this ), + content: this.getModalContent(), + parentEl: '.js-publish-modal', + parentView: this + }); + } + }, + + editField: function( event ) { + /** + * Making the assumption that users can only see + * programs that they have permission to edit + */ + var $btn = $( event.currentTarget ), + $el = $btn.prev( 'input' ); + + event.preventDefault(); + + $el.prevAll( '.js-model-value' ).addClass( 'is-hidden' ); + $el.removeClass( 'is-hidden' ) + .addClass( 'edit' ) + .focus(); + $btn.addClass( 'is-hidden' ); + }, + + getModalContent: function() { + /* jshint maxlen: 300 */ + return { + name: gettext('confirm'), + title: gettext('Publish this program?'), + body: gettext( + 'After you publish this program, you cannot add or remove course codes or remove course runs.' + ), + cta: { + cancel: gettext('Cancel'), + confirm: gettext('Publish') + } + }; + }, + + publishProgram: function() { + var data = { + status: 'active' + }; + + this.model.set( data, { silent: true } ); + this.model.on( 'sync', this.render, this ); + this.model.patch( data ); + }, + + setAvailableCourseRuns: function() { + var allRuns = this.courseRuns.toJSON(), + courses = this.model.get('course_codes'), + selectedRuns, + availableRuns = allRuns; + + if (courses.length) { + selectedRuns = _.pluck( courses, 'run_modes' ); + selectedRuns = _.flatten( selectedRuns ); + } + + availableRuns = _.reject(allRuns, function(run) { + var selectedCourseRun = _.findWhere( selectedRuns, { + course_key: run.id, + start_date: run.start + }); + + return !_.isUndefined(selectedCourseRun); + }); + + this.courseRuns.set(availableRuns); + }, + + validateMarketingSlug: function() { + var isValid = false, + $input = {}, + $message = {}; + + if ( this.model.get( 'marketing_slug' ).length > 0 ) { + isValid = true; + } else { + $input = this.$el.find( '#program-marketing-slug' ); + $message = $input.siblings( '.field-message' ); + + // Update DOM + $input.addClass( 'has-error' ); + $message.addClass( 'has-error' ); + $message.find( '.field-message-content' ) + .text( gettext( 'Marketing Slug is required.') ); + } + + return isValid; + } + }); + } +); diff --git a/cms/static/js/spec/models/auto_auth_model_spec.js b/cms/static/js/spec/models/auto_auth_model_spec.js new file mode 100644 index 0000000000..bdec67c1be --- /dev/null +++ b/cms/static/js/spec/models/auto_auth_model_spec.js @@ -0,0 +1,116 @@ +define([ + 'underscore', + 'backbone', + 'jquery', + 'js/programs/utils/api_config', + 'js/programs/models/auto_auth_model' + ], + function( _, Backbone, $, apiConfig, AutoAuthModel ) { + 'use strict'; + + describe('AutoAuthModel', function () { + + var model, + testErrorCallback, + fakeAjaxDeferred, + spyOnBackboneSync, + callSync, + checkAuthAttempted, + dummyModel = {'dummy': 'model'}, + authUrl = apiConfig.get( 'authUrl' ); + + beforeEach( function() { + + // instance under test + model = new AutoAuthModel(); + + // stand-in for the error callback a caller might pass with options to Backbone.Model.sync + testErrorCallback = jasmine.createSpy(); + + fakeAjaxDeferred = $.Deferred(); + spyOn( $, 'ajax' ).and.returnValue( fakeAjaxDeferred ); + return fakeAjaxDeferred; + + }); + + spyOnBackboneSync = function( status ) { + // set up Backbone.sync to invoke its error callback with the desired HTTP status + spyOn( Backbone, 'sync' ).and.callFake( function(method, model, options) { + var fakeXhr = options.xhr = { status: status }; + options.error(fakeXhr, 0, ''); + }); + }; + + callSync = function(options) { + var params, + syncOptions = _.extend( { error: testErrorCallback }, options || {} ); + + model.sync('GET', dummyModel, syncOptions); + + // make sure Backbone.sync was called with custom error handling + expect( Backbone.sync.calls.count() ).toEqual(1); + params = _.object( ['method', 'model', 'options'], Backbone.sync.calls.mostRecent().args ); + expect( params.method ).toEqual( 'GET' ); + expect( params.model ).toEqual( dummyModel ); + expect( params.options.error ).not.toEqual( testErrorCallback ); + return params; + }; + + checkAuthAttempted = function(isExpected) { + if (isExpected) { + expect( $.ajax ).toHaveBeenCalled(); + expect( $.ajax.calls.mostRecent().args[0].url ).toEqual( authUrl ); + } else { + expect( $.ajax ).not.toHaveBeenCalled(); + } + }; + + it( 'should exist', function () { + expect( model ).toBeDefined(); + }); + + it( 'should intercept 401 errors and attempt auth', function() { + + var callParams; + + spyOnBackboneSync(401); + + callSync(); + + // make sure the auth attempt was initiated + checkAuthAttempted(true); + + // fire the success handler for the fake ajax call, with id token response data + fakeAjaxDeferred.resolve( {id_token: 'test-id-token'} ); + + // make sure the original request was retried with token, and without custom error handling + expect( Backbone.sync.calls.count() ).toEqual(2); + callParams = _.object( ['method', 'model', 'options'], Backbone.sync.calls.mostRecent().args ); + expect( callParams.method ).toEqual( 'GET' ); + expect( callParams.model ).toEqual( dummyModel ); + expect( callParams.options.error ).toEqual( testErrorCallback ); + expect( callParams.options.headers.Authorization ).toEqual( 'JWT test-id-token' ); + + }); + + it( 'should not intercept non-401 errors', function() { + + spyOnBackboneSync(403); + + // invoke AutoAuthModel.sync + callSync(); + + // make sure NO auth attempt was initiated + checkAuthAttempted(false); + + // make sure the original request was not retried + expect( Backbone.sync.calls.count() ).toEqual(1); + + // make sure the default error handling was invoked + expect( testErrorCallback ).toHaveBeenCalled(); + + }); + + }); + } +); diff --git a/cms/static/js/spec/models/component_template_spec.js b/cms/static/js/spec/models/component_template_spec.js index 1e544e1a97..871cf88456 100644 --- a/cms/static/js/spec/models/component_template_spec.js +++ b/cms/static/js/spec/models/component_template_spec.js @@ -49,7 +49,8 @@ define(["js/models/component_template"], "boilerplate_name": "alternate_word_cloud.yaml", "display_name": "Word Cloud" }], - "type": "problem" + "type": "problem", + "support_legend": {"show_legend": false} }; it('orders templates correctly', function () { diff --git a/cms/static/js/spec/models/group_configuration_spec.js b/cms/static/js/spec/models/group_configuration_spec.js index 5a441b809d..30d2b19955 100644 --- a/cms/static/js/spec/models/group_configuration_spec.js +++ b/cms/static/js/spec/models/group_configuration_spec.js @@ -1,5 +1,5 @@ define([ - 'backbone', 'coffee/src/main', 'js/models/group_configuration', + 'backbone', 'cms/js/main', 'js/models/group_configuration', 'js/models/group', 'js/collections/group', 'squire' ], function (Backbone, main, GroupConfigurationModel, GroupModel, GroupCollection, Squire) { 'use strict'; diff --git a/cms/static/js/spec/views/container_spec.js b/cms/static/js/spec/views/container_spec.js index 9d8edebc3e..49b796663e 100644 --- a/cms/static/js/spec/views/container_spec.js +++ b/cms/static/js/spec/views/container_spec.js @@ -1,6 +1,6 @@ define([ "jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "js/spec_helpers/edit_helpers", "js/views/container", "js/models/xblock_info", "jquery.simulate", - "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "xmodule", "cms/js/main", "xblock/cms.runtime.v1"], function ($, AjaxHelpers, EditHelpers, ContainerView, XBlockInfo) { describe("Container View", function () { diff --git a/cms/static/js/spec/views/pages/container_spec.js b/cms/static/js/spec/views/pages/container_spec.js index 9d6ec66a11..af49575a78 100644 --- a/cms/static/js/spec/views/pages/container_spec.js +++ b/cms/static/js/spec/views/pages/container_spec.js @@ -1,7 +1,9 @@ define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/template_helpers", "js/spec_helpers/edit_helpers", - "js/views/pages/container", "js/views/pages/paged_container", "js/models/xblock_info", "jquery.simulate"], - function ($, _, str, AjaxHelpers, TemplateHelpers, EditHelpers, ContainerPage, PagedContainerPage, XBlockInfo) { + "js/views/pages/container", "js/views/pages/paged_container", "js/models/xblock_info", + "js/collections/component_template", "jquery.simulate"], + function ($, _, str, AjaxHelpers, TemplateHelpers, EditHelpers, ContainerPage, PagedContainerPage, + XBlockInfo, ComponentTemplates) { 'use strict'; function parameterized_suite(label, globalPageOptions) { @@ -55,18 +57,19 @@ define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/sp ); }; - getContainerPage = function (options) { + getContainerPage = function (options, componentTemplates) { var default_options = { model: model, - templates: EditHelpers.mockComponentTemplates, + templates: componentTemplates === undefined ? + EditHelpers.mockComponentTemplates : componentTemplates, el: $('#content') }; return new PageClass(_.extend(options || {}, globalPageOptions, default_options)); }; - renderContainerPage = function (test, html, options) { + renderContainerPage = function (test, html, options, componentTemplates) { requests = AjaxHelpers.requests(test); - containerPage = getContainerPage(options); + containerPage = getContainerPage(options, componentTemplates); containerPage.render(); respondWithHtml(html); AjaxHelpers.expectJsonRequest(requests, 'GET', '/xblock/locator-container'); @@ -652,6 +655,138 @@ define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/sp "parent_locator": "locator-group-A" }); }); + + it('does not show the support legend if show_legend is false', function () { + // By default, show_legend is false in the mock component Templates. + renderContainerPage(this, mockContainerXBlockHtml); + showTemplatePicker(); + expect(containerPage.$('.support-documentation').length).toBe(0); + }); + + it('does show the support legend if show_legend is true', function () { + var templates = new ComponentTemplates([ + { + "templates": [ + { + "category": "html", + "boilerplate_name": null, + "display_name": "Text" + }, { + "category": "html", + "boilerplate_name": "announcement.yaml", + "display_name": "Announcement" + }, { + "category": "html", + "boilerplate_name": "raw.yaml", + "display_name": "Raw HTML" + }], + "type": "html", + "support_legend": { + "show_legend": true, + "documentation_label": "Documentation Label:", + "allow_unsupported_xblocks": false + } + }], + { + parse: true + }), supportDocumentation; + renderContainerPage(this, mockContainerXBlockHtml, {}, templates); + showTemplatePicker(); + supportDocumentation = containerPage.$('.support-documentation'); + // On this page, groups are being shown, each of which has a new component menu. + expect(supportDocumentation.length).toBeGreaterThan(0); + + // check that the documentation label is displayed + expect($(supportDocumentation[0]).find('.support-documentation-link').text().trim()) + .toBe('Documentation Label:'); + + // show_unsupported_xblocks is false, so only 2 support levels should be shown + expect($(supportDocumentation[0]).find('.support-documentation-level').length).toBe(2); + }); + + it('does show unsupported level if enabled', function () { + var templates = new ComponentTemplates([ + { + "templates": [ + { + "category": "html", + "boilerplate_name": null, + "display_name": "Text" + }, { + "category": "html", + "boilerplate_name": "announcement.yaml", + "display_name": "Announcement" + }, { + "category": "html", + "boilerplate_name": "raw.yaml", + "display_name": "Raw HTML" + }], + "type": "html", + "support_legend": { + "show_legend": true, + "documentation_label": "Documentation Label:", + "allow_unsupported_xblocks": true + } + }], + { + parse: true + }), supportDocumentation; + renderContainerPage(this, mockContainerXBlockHtml, {}, templates); + showTemplatePicker(); + supportDocumentation = containerPage.$('.support-documentation'); + + // show_unsupported_xblocks is true, so 3 support levels should be shown + expect($(supportDocumentation[0]).find('.support-documentation-level').length).toBe(3); + + // verify only one has the unsupported item + expect($(supportDocumentation[0]).find('.fa-circle-o').length).toBe(1); + }); + + it('does render support level indicators if present in JSON', function () { + var templates = new ComponentTemplates([ + { + "templates": [ + { + "category": "html", + "boilerplate_name": null, + "display_name": "Text", + "support_level": "fs" + }, { + "category": "html", + "boilerplate_name": "announcement.yaml", + "display_name": "Announcement", + "support_level": "ps" + }, { + "category": "html", + "boilerplate_name": "raw.yaml", + "display_name": "Raw HTML", + "support_level": "us" + }], + "type": "html", + "support_legend": { + "show_legend": true, + "documentation_label": "Documentation Label:", + "allow_unsupported_xblocks": true + } + }], + { + parse: true + }), supportLevelIndicators, getScreenReaderText; + renderContainerPage(this, mockContainerXBlockHtml, {}, templates); + showTemplatePicker(); + + supportLevelIndicators = $(containerPage.$('.new-component-template')[0]) + .find('.support-level'); + expect(supportLevelIndicators.length).toBe(3); + + getScreenReaderText = function(index){ + return $($(supportLevelIndicators[index]).siblings()[0]).text().trim(); + }; + // Verify one level of each type was rendered. + expect(getScreenReaderText(0)).toBe('Fully Supported'); + expect(getScreenReaderText(1)).toBe('Provisionally Supported'); + expect(getScreenReaderText(2)).toBe('Not Supported'); + }); }); }); }); diff --git a/cms/static/js/spec/views/pages/container_subviews_spec.js b/cms/static/js/spec/views/pages/container_subviews_spec.js index 22af2fb667..66c6997e0a 100644 --- a/cms/static/js/spec/views/pages/container_subviews_spec.js +++ b/cms/static/js/spec/views/pages/container_subviews_spec.js @@ -434,7 +434,7 @@ define(["jquery", "underscore", "underscore.string", "edx-ui-toolkit/js/utils/sp expect(visibilityCopy).toContain('Staff Only'); expect(containerPage.$(bitPublishingCss)).toHaveClass(staffOnlyClass); } else { - expect(visibilityCopy).toBe('Staff and Students'); + expect(visibilityCopy).toBe('Staff and Learners'); expect(containerPage.$(bitPublishingCss)).not.toHaveClass(staffOnlyClass); verifyExplicitStaffOnly(false); verifyImplicitStaffOnly(false); diff --git a/cms/static/js/spec/views/pages/course_outline_spec.js b/cms/static/js/spec/views/pages/course_outline_spec.js index efbe55607a..7d59717898 100644 --- a/cms/static/js/spec/views/pages/course_outline_spec.js +++ b/cms/static/js/spec/views/pages/course_outline_spec.js @@ -7,10 +7,10 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j describe("CourseOutlinePage", function() { var createCourseOutlinePage, displayNameInput, model, outlinePage, requests, getItemsOfType, getItemHeaders, verifyItemsExpanded, expandItemsAndVerifyState, - collapseItemsAndVerifyState, createMockCourseJSON, createMockSectionJSON, createMockSubsectionJSON, - verifyTypePublishable, mockCourseJSON, mockEmptyCourseJSON, mockSingleSectionCourseJSON, - createMockVerticalJSON, createMockIndexJSON, mockCourseEntranceExamJSON, - mockOutlinePage = readFixtures('mock/mock-course-outline-page.underscore'), + collapseItemsAndVerifyState, selectBasicSettings, selectAdvancedSettings, createMockCourseJSON, + createMockSectionJSON, createMockSubsectionJSON, verifyTypePublishable, mockCourseJSON, + mockEmptyCourseJSON, mockSingleSectionCourseJSON, createMockVerticalJSON, createMockIndexJSON, + mockCourseEntranceExamJSON, mockOutlinePage = readFixtures('mock/mock-course-outline-page.underscore'), mockRerunNotification = readFixtures('mock/mock-course-rerun-notification.underscore'); createMockCourseJSON = function(options, children) { @@ -137,6 +137,14 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j verifyItemsExpanded(type, false); }; + selectBasicSettings = function() { + this.$(".modal-section .settings-tab-button[data-tab='basic']").click(); + }; + + selectAdvancedSettings = function() { + this.$(".modal-section .settings-tab-button[data-tab='advanced']").click(); + }; + createCourseOutlinePage = function(test, courseJSON, createOnly) { requests = AjaxHelpers.requests(test); model = new XBlockOutlineInfo(courseJSON, { parse: true }); @@ -230,8 +238,8 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j 'course-outline', 'xblock-string-field-editor', 'modal-button', 'basic-modal', 'course-outline-modal', 'release-date-editor', 'due-date-editor', 'grading-editor', 'publish-editor', - 'staff-lock-editor', 'settings-modal-tabs', 'timed-examination-preference-editor', - 'access-editor' + 'staff-lock-editor','content-visibility-editor', 'settings-modal-tabs', + 'timed-examination-preference-editor', 'access-editor' ]); appendSetFixtures(mockOutlinePage); mockCourseJSON = createMockCourseJSON({}, [ @@ -535,8 +543,10 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("due_date")).not.toExist(); expect($("grading_format")).not.toExist(); - // Staff lock controls are always visible + // Staff lock controls are always visible on the advanced tab + selectAdvancedSettings(); expect($("#staff_lock")).toExist(); + selectBasicSettings(); $(".wrapper-modal-window .action-save").click(); AjaxHelpers.expectJsonRequest(requests, 'POST', '/xblock/mock-section', { "metadata":{ @@ -605,43 +615,33 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j }); describe("Subsection", function() { - var getDisplayNameWrapper, setEditModalValues, mockServerValuesJson, - selectDisableSpecialExams, selectBasicSettings, selectAdvancedSettings, - selectAccessSettings, selectTimedExam, selectProctoredExam, selectPracticeExam, + var getDisplayNameWrapper, setEditModalValues, setContentVisibility, mockServerValuesJson, + selectDisableSpecialExams, selectTimedExam, selectProctoredExam, selectPracticeExam, selectPrerequisite, selectLastPrerequisiteSubsection, checkOptionFieldVisibility; getDisplayNameWrapper = function() { return getItemHeaders('subsection').find('.wrapper-xblock-field'); }; - setEditModalValues = function (start_date, due_date, grading_type, is_locked) { + setEditModalValues = function (start_date, due_date, grading_type) { $("#start_date").val(start_date); $("#due_date").val(due_date); $("#grading_type").val(grading_type); - $("#staff_lock").prop('checked', is_locked); + }; + + setContentVisibility = function (visibility) { + $('input[name=content-visibility][value='+visibility+']').prop('checked', true); }; selectDisableSpecialExams = function() { this.$("input.no_special_exam").prop('checked', true).trigger('change'); }; - selectBasicSettings = function() { - this.$(".modal-section .settings-tab-button[data-tab='basic']").click(); - }; - - selectAdvancedSettings = function() { - this.$(".modal-section .settings-tab-button[data-tab='advanced']").click(); - }; - - selectAccessSettings = function() { - this.$(".modal-section .settings-tab-button[data-tab='access']").click(); - }; - - selectTimedExam = function(time_limit, hide_after_due) { + selectTimedExam = function(time_limit) { this.$("input.timed_exam").prop('checked', true).trigger('change'); this.$(".field-time-limit input").val(time_limit); this.$(".field-time-limit input").trigger('focusout'); - this.$('.field-hide-after-due input').prop('checked', hide_after_due).trigger('change'); + setContentVisibility("hide_after_due"); }; selectProctoredExam = function(time_limit) { @@ -666,10 +666,9 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j }; // Helper to validate oft-checked additional option fields' visibility - checkOptionFieldVisibility = function(time_limit, review_rules, hide_after_due) { + checkOptionFieldVisibility = function(time_limit, review_rules) { expect($('.field-time-limit').is(':visible')).toBe(time_limit); expect($('.field-exam-review-rules').is(':visible')).toBe(review_rules); - expect($('.field-hide-after-due').is(':visible')).toBe(hide_after_due); }; // Contains hard-coded dates because dates are presented in different formats. @@ -767,7 +766,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j selectBasicSettings(); expect($('.modal-section .settings-tab-button[data-tab="basic"]')).toHaveClass('active'); expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).not.toHaveClass('active'); - expect($('.modal-section .settings-tab-button[data-tab="access"]')).not.toHaveClass('active'); }); it('can show advanced settings', function() { @@ -776,20 +774,11 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j selectAdvancedSettings(); expect($('.modal-section .settings-tab-button[data-tab="basic"]')).not.toHaveClass('active'); expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).toHaveClass('active'); - expect($('.modal-section .settings-tab-button[data-tab="access"]')).not.toHaveClass('active'); - }); - - it('can show access settings', function() { - createCourseOutlinePage(this, mockCourseJSON, false); - outlinePage.$('.outline-subsection .configure-button').click(); - selectAccessSettings(); - expect($('.modal-section .settings-tab-button[data-tab="basic"]')).not.toHaveClass('active'); - expect($('.modal-section .settings-tab-button[data-tab="advanced"]')).not.toHaveClass('active'); - expect($('.modal-section .settings-tab-button[data-tab="access"]')).toHaveClass('active'); }); it('does not show settings tab headers if there is only one tab to show', function() { - var mockSubsectionJSON = createMockSubsectionJSON({}, []); + var mockVerticalJSON = createMockVerticalJSON({}, []); + var mockSubsectionJSON = createMockSubsectionJSON({}, [mockVerticalJSON]); delete mockSubsectionJSON.is_prereq; delete mockSubsectionJSON.prereqs; delete mockSubsectionJSON.prereq; @@ -801,7 +790,7 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j createMockSectionJSON({}, [mockSubsectionJSON]) ]); createCourseOutlinePage(this, mockCourseJSON, false); - outlinePage.$('.outline-subsection .configure-button').click(); + outlinePage.$('.outline-unit .configure-button').click(); expect($(".settings-tabs-header").length).toBe(0); }); @@ -818,7 +807,7 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($(".edit-settings-release").length).toBe(0); expect($(".grading-due-date").length).toBe(0); expect($(".edit-settings-grading").length).toBe(1); - expect($(".edit-staff-lock").length).toBe(1); + expect($(".edit-content-visibility").length).toBe(1); }); it('can select valid time', function() { @@ -847,16 +836,16 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('can be edited', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); - selectTimedExam("02:30", true); + selectTimedExam("02:30"); $(".wrapper-modal-window .action-save").click(); AjaxHelpers.expectJsonRequest(requests, 'POST', '/xblock/mock-subsection', { "graderType":"Lab", "publish": "republish", "isPrereq": false, "metadata":{ - "visible_to_staff_only": true, + "visible_to_staff_only": null, "start":"2014-07-09T00:00:00.000Z", "due":"2014-07-10T00:00:00.000Z", "exam_review_rules": "", @@ -892,21 +881,21 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("#start_date").val()).toBe('7/9/2014'); expect($("#due_date").val()).toBe('7/10/2014'); expect($("#grading_type").val()).toBe('Lab'); - expect($("#staff_lock").is(":checked")).toBe(true); + expect($("input[name=content-visibility][value=staff_only]").is(":checked")).toBe(true); expect($("input.timed_exam").is(":checked")).toBe(true); expect($("input.proctored_exam").is(":checked")).toBe(false); expect($("input.no_special_exam").is(":checked")).toBe(false); expect($("input.practice_exam").is(":checked")).toBe(false); expect($(".field-time-limit input").val()).toBe("02:30"); - expect($(".field-hide-after-due input").is(":checked")).toBe(true); }); it('can hide time limit and hide after due fields when the None radio box is selected', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); selectDisableSpecialExams(); + setContentVisibility("staff_only"); // all additional options should be hidden expect($('.exam-options').is(':hidden')).toBe(true); @@ -915,12 +904,13 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('can select the practice exam', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); selectPracticeExam("00:30"); + setContentVisibility("staff_only"); - // time limit should be visible, review rules and hide after due should be hidden - checkOptionFieldVisibility(true, false, false); + // time limit should be visible, review rules should be hidden + checkOptionFieldVisibility(true, false); $(".wrapper-modal-window .action-save").click(); }); @@ -928,12 +918,12 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('can select the timed exam', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); selectTimedExam("00:30"); - // time limit and hide after due should be visible, review rules should be hidden - checkOptionFieldVisibility(true, false, true); + // time limit should be visible, review rules should be hidden + checkOptionFieldVisibility(true, false); $(".wrapper-modal-window .action-save").click(); }); @@ -941,12 +931,13 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('can select the Proctored exam option', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); selectProctoredExam("00:30"); + setContentVisibility("staff_only"); - // time limit and review rules should be visible, hide after due should be hidden - checkOptionFieldVisibility(true, true, false); + // time limit and review rules should be visible + checkOptionFieldVisibility(true, true); $(".wrapper-modal-window .action-save").click(); @@ -955,9 +946,10 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('entering invalid time format uses default value of 30 minutes.', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); selectAdvancedSettings(); selectProctoredExam("abcd"); + setContentVisibility("staff_only"); // time limit field should be visible and have the correct value expect($('.field-time-limit').is(':visible')).toBe(true); @@ -992,7 +984,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("input.no_special_exam").is(":checked")).toBe(true); expect($("input.practice_exam").is(":checked")).toBe(false); expect($(".field-time-limit input").val()).toBe("02:30"); - expect($('.field-hide-after-due').is(':hidden')).toBe(true); }); it('can show a saved timed exam correctly when hide_after_due is true', function() { @@ -1022,7 +1013,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("input.no_special_exam").is(":checked")).toBe(false); expect($("input.practice_exam").is(":checked")).toBe(false); expect($(".field-time-limit input").val()).toBe("00:10"); - expect($('.field-hide-after-due input').is(":checked")).toBe(true); }); it('can show a saved timed exam correctly when hide_after_due is true', function() { @@ -1081,7 +1071,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("input.no_special_exam").is(":checked")).toBe(false); expect($("input.practice_exam").is(":checked")).toBe(true); expect($(".field-time-limit input").val()).toBe("02:30"); - expect($('.field-hide-after-due').is(':hidden')).toBe(true); }); it('can show a saved proctored exam correctly', function() { @@ -1110,7 +1099,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("input.no_special_exam").is(":checked")).toBe(false); expect($("input.practice_exam").is(":checked")).toBe(false); expect($(".field-time-limit input").val()).toBe("02:30"); - expect($('.field-hide-after-due').is(':hidden')).toBe(true); }); it('does not show proctored settings if proctored exams not enabled', function() { @@ -1138,7 +1126,6 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("input.timed_exam").is(":checked")).toBe(true); expect($("input.no_special_exam").is(":checked")).toBe(false); expect($(".field-time-limit input").val()).toBe("02:30"); - expect($('.field-hide-after-due input').is(":checked")).toBe(true); }); it('can select prerequisite', function() { @@ -1300,7 +1287,7 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j ]); createCourseOutlinePage(this, mockCourseWithPreqsJSON, false); outlinePage.$('.outline-subsection .configure-button').click(); - selectAccessSettings(); + selectAdvancedSettings(); selectLastPrerequisiteSubsection(''); expect($('#prereq_min_score_error').css('display')).toBe('none'); selectLastPrerequisiteSubsection('80'); @@ -1314,7 +1301,8 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j it('release date, due date, grading type, and staff lock can be cleared.', function() { createCourseOutlinePage(this, mockCourseJSON, false); outlinePage.$('.outline-item .outline-subsection .configure-button').click(); - setEditModalValues("7/9/2014", "7/10/2014", "Lab", true); + setEditModalValues("7/9/2014", "7/10/2014", "Lab"); + setContentVisibility("staff_only"); $(".wrapper-modal-window .action-save").click(); // This is the response for the change operation. @@ -1339,7 +1327,7 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("#start_date").val()).toBe('7/9/2014'); expect($("#due_date").val()).toBe('7/10/2014'); expect($("#grading_type").val()).toBe('Lab'); - expect($("#staff_lock").is(":checked")).toBe(true); + expect($("input[name=content-visibility][value=staff_only]").is(":checked")).toBe(true); $(".wrapper-modal-window .scheduled-date-input .action-clear").click(); $(".wrapper-modal-window .due-date-input .action-clear").click(); @@ -1347,7 +1335,7 @@ define(["jquery", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/j expect($("#due_date").val()).toBe(''); $("#grading_type").val('notgraded'); - $("#staff_lock").prop('checked', false); + setContentVisibility("visible"); $(".wrapper-modal-window .action-save").click(); diff --git a/cms/static/js/spec/views/programs/program_creator_spec.js b/cms/static/js/spec/views/programs/program_creator_spec.js new file mode 100644 index 0000000000..56de3e1439 --- /dev/null +++ b/cms/static/js/spec/views/programs/program_creator_spec.js @@ -0,0 +1,252 @@ +define([ + 'backbone', + 'jquery', + 'js/programs/views/program_creator_view' + ], + function( Backbone, $, ProgramCreatorView ) { + 'use strict'; + + describe('ProgramCreatorView', function () { + var view = {}, + Router = Backbone.Router.extend({ + initialize: function( options ) { + this.homeUrl = options.homeUrl; + }, + goHome: function() { + window.location.href = this.homeUrl; + } + }), + organizations = { + count: 1, + previous: null, + 'num_pages': 1, + results:[{ + 'display_name': 'test-org-display_name', + 'key': 'test-org-key' + }], + next: null + }, + sampleInput, + completeForm = function( data ) { + view.$el.find('#program-name').val( data.name ); + view.$el.find('#program-subtitle').val( data.subtitle ); + view.$el.find('#program-org').val( data.organizations ); + + if ( data.category ) { + view.$el.find('#program-type').val( data.category ); + } + + if ( data.marketing_slug ) { + view.$el.find('#program-marketing-slug').val( data.marketing_slug ); + } + }, + verifyValidation = function ( data, invalidAttr ) { + var errorClass = 'has-error', + $invalidElement = view.$el.find( '[name="' + invalidAttr + '"]' ), + $errorMsg = $invalidElement.siblings('.field-message'), + inputErrorMsg = ''; + + completeForm( data ); + + view.$el.find('.js-create-program').click(); + inputErrorMsg = $invalidElement.data('error'); + + expect( view.model.save ).not.toHaveBeenCalled(); + expect( $invalidElement ).toHaveClass( errorClass ); + expect( $errorMsg ).toHaveClass( errorClass ); + expect( inputErrorMsg ).toBeDefined(); + expect( $errorMsg.find('.field-message-content').html() ).toEqual( inputErrorMsg ); + }; + + var validateFormSubmitted = function(view, programId){ + expect( $.ajax ).toHaveBeenCalled(); + expect( view.saveSuccess ).toHaveBeenCalled(); + expect( view.goToView ).toHaveBeenCalledWith( String( programId ) ); + expect( view.saveError ).not.toHaveBeenCalled(); + }; + + beforeEach( function() { + // Set the DOM + setFixtures( '
' ); + + jasmine.clock().install(); + + spyOn( ProgramCreatorView.prototype, 'saveSuccess' ).and.callThrough(); + spyOn( ProgramCreatorView.prototype, 'goToView' ).and.callThrough(); + spyOn( ProgramCreatorView.prototype, 'saveError' ).and.callThrough(); + spyOn( Router.prototype, 'goHome' ); + + sampleInput = { + category: 'xseries', + organizations: 'test-org-key', + name: 'Test Course Name', + subtitle: 'Test Course Subtitle', + marketing_slug: 'test-management' + }; + + view = new ProgramCreatorView({ + router: new Router({ + homeUrl: '/author/home' + }) + }); + + view.organizations.set( organizations ); + view.render(); + }); + + afterEach( function() { + view.destroy(); + + jasmine.clock().uninstall(); + }); + + it( 'should exist', function () { + expect( view ).toBeDefined(); + }); + + it ( 'should get the form data', function() { + var formData = {}; + + completeForm( sampleInput ); + formData = view.getData(); + + expect( formData.name ).toEqual( sampleInput.name ); + expect( formData.subtitle ).toEqual( sampleInput.subtitle ); + expect( formData.organizations[0].key ).toEqual( sampleInput.organizations ); + }); + + it( 'should submit the form when the user clicks submit', function() { + var programId = 123; + + completeForm( sampleInput ); + + spyOn( $, 'ajax' ).and.callFake( function( event ) { + event.success({ id: programId }); + }); + + view.$el.find('.js-create-program').click(); + + validateFormSubmitted(view, programId); + }); + + it( 'should submit the form correctly when creating micromasters program ', function(){ + var programId = 221; + sampleInput.category = 'micromasters'; + + completeForm( sampleInput ); + + spyOn( $, 'ajax' ).and.callFake( function( event ) { + event.success({ id: programId }); + }); + + view.$el.find('.js-create-program').click(); + + validateFormSubmitted(view, programId); + }); + + it( 'should run the saveError when model save failures occur', function() { + spyOn( $, 'ajax' ).and.callFake( function( event ) { + event.error(); + }); + + // Fill out the form with valid data so that form model validation doesn't + // prevent the model from being saved. + completeForm( sampleInput ); + view.$el.find('.js-create-program').click(); + + expect( $.ajax ).toHaveBeenCalled(); + expect( view.saveSuccess ).not.toHaveBeenCalled(); + expect( view.saveError ).toHaveBeenCalled(); + }); + + it( 'should set the model when valid form data is submitted', function() { + completeForm( sampleInput ); + + spyOn( $, 'ajax' ).and.callFake( function( event ) { + event.success({ id: 10001110101 }); + }); + + view.$el.find('.js-create-program').click(); + + expect( view.model.get('name') ).toEqual( sampleInput.name ); + expect( view.model.get('subtitle') ).toEqual( sampleInput.subtitle ); + expect( view.model.get('organizations')[0].key ).toEqual( sampleInput.organizations ); + expect( view.model.get('marketing_slug') ).toEqual( sampleInput.marketing_slug ); + }); + + it( 'should not set the model when bad program type selected', function() { + var invalidInput = $.extend({}, sampleInput); + spyOn( view.model, 'save' ); + + // No name provided. + invalidInput.category = ''; + verifyValidation( invalidInput, 'category' ); + + // bad program type name + invalidInput.name = 'badprogramtype'; + verifyValidation( invalidInput, 'category' ); + }); + + it( 'should not set the model when an invalid program name is submitted', function() { + var invalidInput = $.extend({}, sampleInput); + + spyOn( view.model, 'save' ); + + // No name provided. + invalidInput.name = ''; + verifyValidation( invalidInput, 'name' ); + + // Name is too long. + invalidInput.name = 'x'.repeat(256); + verifyValidation( invalidInput, 'name' ); + }); + + it( 'should not set the model when an invalid program subtitle is submitted', function() { + var invalidInput = $.extend({}, sampleInput); + + spyOn( view.model, 'save' ); + + // Subtitle is too long. + invalidInput.subtitle = 'x'.repeat(300); + verifyValidation( invalidInput, 'subtitle' ); + }); + + it( 'should not set the model when an invalid category is submitted', function() { + var invalidInput = $.extend({}, sampleInput); + + spyOn( view.model, 'save' ); + + // Category other than 'xseries' selected. + invalidInput.category = 'yseries'; + verifyValidation( invalidInput, 'category' ); + }); + + it( 'should not set the model when an invalid organization key is submitted', function() { + var invalidInput = $.extend({}, sampleInput); + + spyOn( view.model, 'save' ); + + // No organization selected. + invalidInput.organizations = 'false'; + verifyValidation( invalidInput, 'organizations' ); + }); + + it( 'should not set the model when an invalid marketing slug is submitted', function() { + var invalidInput = $.extend({}, sampleInput); + + spyOn( view.model, 'save' ); + + // Marketing slug is too long. + invalidInput.marketing_slug = 'x'.repeat(256); + verifyValidation( invalidInput, 'marketing_slug' ); + }); + + it( 'should abort the view when the cancel button is clicked', function() { + completeForm( sampleInput ); + expect( view.$parentEl.html().length ).toBeGreaterThan( 0 ); + view.$el.find('.js-abort-view').click(); + expect( view.router.goHome ).toHaveBeenCalled(); + }); + }); + } +); diff --git a/cms/static/js/spec/views/programs/program_details_spec.js b/cms/static/js/spec/views/programs/program_details_spec.js new file mode 100644 index 0000000000..b84b123dd8 --- /dev/null +++ b/cms/static/js/spec/views/programs/program_details_spec.js @@ -0,0 +1,533 @@ +define([ + 'jquery', + 'js/programs/collections/course_runs_collection', + 'js/programs/models/program_model', + 'js/programs/views/course_run_view', + 'js/programs/views/program_details_view', + 'js/programs/utils/constants' + ], + function( $, CourseRunsCollection, ProgramModel, CourseRunView, + ProgramDetailsView, constants ) { + 'use strict'; + + /* jshint maxlen: 300 */ + describe('ProgramDetailsView', function () { + var view = {}, + model = {}, + courseRunsList = [ + { + id: 'course-v1:edX+DemoX+Demo_Course', + name: 'edX Demonstration Course', + number: 'DemoX', + org: 'edX', + short_description: null, + effort: null, + media: { + course_image: { + uri: '/asset-v1:edX+DemoX+Demo_Course+type@asset+block@images_course_image.jpg' + }, + course_video: { + uri: null + } + }, + start: 'May 23, 2015', + start_type: 'timestamp', + start_display: 'Feb. 5, 2013', + end: null, + enrollment_start: null, + enrollment_end: null, + blocks_url: 'http://127.0.0.1:8000/api/courses/v1/blocks/?course_id=course-v1%3AedX%2BDemoX%2BDemo_Course' + }, + { + id: 'course-v1:edx+Krampus25+2015_12_05', + name: 'Krampusnacht', + number: 'Krampus25', + org: 'edx', + short_description: null, + effort: null, + media: { + course_image: { + uri: '/asset-v1:edx+Krampus25+2015_12_05+type@asset+block@images_course_image.jpg' + }, + course_video: { + uri: null + } + }, + start: '2030-01-01T00:00:00Z', + start_type: 'empty', + start_display: null, + end: null, + enrollment_start: null, + enrollment_end: null, + blocks_url: 'http://127.0.0.1:8000/api/courses/v1/blocks/?course_id=course-v1%3Aedx%2BKrampus25%2B2015_12_05' + }, + { + id: 'course-v1:edx+shiaLB101+2016_01', + name: 'Shia "The Beef"', + number: 'shiaLB101', + org: 'edx', + short_description: null, + effort: null, + media: { + course_image: { + uri: '/asset-v1:edx+shiaLB101+2016_01+type@asset+block@images_course_image.jpg' + }, + course_video: { + uri: null + } + }, + start: '2030-01-01T00:00:00Z', + start_type: 'empty', + start_display: null, + end: null, + enrollment_start: null, + enrollment_end: null, + blocks_url: 'http://127.0.0.1:8000/api/courses/v1/blocks/?course_id=course-v1%3Aedx%2BshiaLB101%2B2016_01' + } + ], + programData = { + category: 'xseries', + course_codes: [{ + display_name: 'test-course-display_name', + key: 'test-course-key', + organization: { + display_name: 'test-org-display_name', + key: 'test-org-key' + }, + run_modes: [ + { + course_key: 'course-v1:edX+DemoX+Demo_Course', + mode_slug: 'honor', + sku: null, + start: 'May 23, 2015' + }, { + course_key: 'course-v1:edX+DemoX+Demo_Course', + mode_slug: 'honor', + sku: null, + start: 'August 01, 2015' + }, { + course_key: 'course-v1:edX+DemoX+Demo_Course', + mode_slug: 'honor', + sku: null, + start: 'December 11, 2015' + } + ] + }], + created: '2015-10-20T18:11:46.854451Z', + id: 5, + marketing_slug: 'test-program-slug', + modified: '2015-10-20T18:11:46.854735Z', + name: 'test-program-5', + organizations: [{ + display_name: 'test-org-display_name', + key: 'test-org-key' + }], + status: 'unpublished', + subtitle: 'test-subtitle' + }, + testTimeoutInterval = 100, + errorClass = 'has-error', + addCourse, + completeCourseForm, + dropdownSelect, + editField, + keyPress, + openPublishModal, + resetCourseCodes, + testHidingButtonsAfterPublish, + testInvalidUpdate, + testUnchangedFieldBlur, + testUpdatedFieldBlur; + + addCourse = function() { + var $addCourseBtn = view.$el.find('.js-add-course').first(), + $form, + $submitBtn; + + expect( view.$el.find('.course-details').length ).toEqual( 1 ); + $addCourseBtn.click(); + $form = view.$('.js-course-form'); + $submitBtn = $form.find('.js-select-course'); + completeCourseForm(); + $submitBtn.click(); + expect( $form.find('.field-message.has-error').length ).toEqual( 0 ); + }; + + completeCourseForm = function() { + var $form = view.$('.js-course-form'); + + $form.find('.course-key').val('123'); + $form.find('.display-name').val('test course 1'); + }; + + dropdownSelect = function( $select, value ) { + $select.find('option:selected').prop('selected', false); + $select.val(value).prop('selected', true); + $select.trigger('change'); + }; + + editField = function( el, str ) { + var $input = view.$el.find( el ), + $btn = $input.next( '.js-enable-edit' ); + + expect( document.activeElement ).not.toEqual( $input[0] ); + expect( $input ).not.toHaveClass( 'edit' ); + expect( $input ).toHaveClass( 'is-hidden' ); + + $btn.click(); + + $input.val( str ); + + // Enable editing + expect( $input ).not.toHaveClass( 'is-hidden' ); + expect( $input ).toHaveClass( 'edit' ); + }; + + keyPress = function( $el, key ) { + $el.trigger({ + type: 'keydown', + keyCode: key, + which: key, + charCode: key + }); + }; + + openPublishModal = function() { + var $publishBtn = view.$el.find('.js-publish-program'), + defaultStatus = programData.status, + publishedStatus = 'active'; + + expect( view.modalView ).not.toBeDefined(); + expect( view.model.get( 'status' ) ).toEqual( defaultStatus ); + expect( view.model.get( 'status' ) ).not.toEqual( publishedStatus ); + + $publishBtn.click(); + }; + + resetCourseCodes = function() { + var originalRun = programData.course_codes[0]; + + programData.course_codes = [originalRun]; + }; + + testUnchangedFieldBlur = function( el ) { + var $input = view.$el.find( el ), + $btn = view.$el.find( '.js-add-course' ), + title = $input.val(), + update = title; + + editField( el, update ); + $btn.focus(); + $input.blur(); + + expect( title ).toEqual( update ); + expect( view.model.save ).not.toHaveBeenCalled(); + }; + + testUpdatedFieldBlur = function( el, update ) { + var $input = view.$el.find( el ), + $btn = view.$el.find( '.js-add-course' ); + + expect( $input.val() ).not.toEqual( update ); + + editField( el, update ); + + $btn.focus(); + $input.blur(); + + expect( $input.val() ).toEqual( update ); + expect( view.model.save ).toHaveBeenCalled(); + }; + + testHidingButtonsAfterPublish = function( el ) { + expect( view.$el.find( el ).length ).toBeGreaterThan( 0 ); + view.model.set({ status: 'active' }); + view.render(); + expect( view.$el.find( el ).length ).toEqual( 0 ); + }; + + testInvalidUpdate = function( el, update ) { + var $input = view.$el.find( el ), + $btn = view.$el.find( '.js-add-course' ); + + editField( el, update ); + + $btn.focus(); + $input.blur(); + + expect( $input ).toHaveClass( errorClass ); + expect( view.model.save ).not.toHaveBeenCalled(); + }; + + beforeEach( function() { + // Set the DOM + setFixtures( '
' ); + + jasmine.clock().install(); + + spyOn( ProgramModel.prototype, 'set' ).and.callThrough(); + spyOn( ProgramModel.prototype, 'save' ); + spyOn( CourseRunsCollection.prototype, 'fetch' ); + + model = new ProgramModel(); + model.set( programData ); + + view = new ProgramDetailsView({ + model: model + }); + + view.courseRuns.set( courseRunsList ); + view.courseRuns.parse({ results: courseRunsList }); + }); + + afterEach( function() { + resetCourseCodes(); + view.undelegateEvents(); + view.remove(); + + jasmine.clock().uninstall(); + }); + + describe( 'View data', function() { + it( 'should exist', function () { + expect( view ).toBeDefined(); + }); + + it( 'should render all of the run_modes from the model', function() { + var $runs = view.$el.find('.js-course-runs'), + domLength = $runs.find('.js-remove-run').length, + objLength = programData.course_codes[0].run_modes.length; + + expect( domLength ).toEqual( objLength ); + }); + }); + + describe( 'Delete data', function() { + it( 'should remove a course when the delete button is clicked', function() { + var $el = view.$el.find('.js-course-list'), + $removeRunBtn = $el.find('.js-remove-course').first(), + count = programData.course_codes.length; + + expect( $el.find('.js-remove-course').length ).toEqual( count ); + $removeRunBtn.click(); + + setTimeout( function() { + expect( $el.find('.js-remove-course').length ).toEqual( count - 1 ); + }, testTimeoutInterval ); + + jasmine.clock().tick( testTimeoutInterval + 1 ); + }); + + it( 'should remove a course run when the delete button is clicked', function() { + var $runs = view.$el.find('.js-course-runs'), + $removeRunBtn = $runs.find('.js-remove-run').first(), + count = programData.course_codes[0].run_modes.length; + + expect( $runs.find('.js-remove-run').length ).toEqual( count ); + $removeRunBtn.click(); + + setTimeout( function() { + expect( $runs.find('.js-remove-run').length ).toEqual( count - 1 ); + }, testTimeoutInterval ); + + jasmine.clock().tick( testTimeoutInterval + 1 ); + }); + + it( 'should not show the delete course button if program status is not unpublished', function() { + testHidingButtonsAfterPublish('.js-remove-course'); + }); + + it( 'should not show the add course button if program status is not unpublished', function() { + testHidingButtonsAfterPublish('.js-add-course'); + }); + + it( 'should not show the delete run button if program status is not unpublished', function() { + testHidingButtonsAfterPublish('.js-remove-run'); + }); + }); + + describe( 'Add data', function() { + it( 'should add a new course details view on click of the add course button', function() { + var $btn = view.$el.find('.js-add-course').first(); + + expect( view.$('.js-course-form').length ).toEqual( 0 ); + $btn.click(); + expect( view.$('.js-course-form').length ).toEqual( 1 ); + }); + + it( 'should add a course when the form is submitted', function() { + addCourse(); + }); + + it( 'should not submit the course form when it is incomplete', function() { + var $addCourseBtn = view.$el.find('.js-add-course').first(), + $form, + $submitBtn; + + expect( view.$el.find('.course-details').length ).toEqual( 1 ); + $addCourseBtn.click(); + $form = view.$('.js-course-form'); + expect( $form.find('.field-message.has-error').length ).toEqual( 0 ); + $submitBtn = $form.find('.js-select-course'); + $submitBtn.click(); + expect( $form.find('.field-message.has-error').length ).toEqual( 2 ); + }); + + it( 'should allow a user to add a course run', function() { + var runSelect = '.js-course-run-select', + $runSelect, + savedRunCount = programData.course_codes[0].run_modes.length; + + addCourse(); + expect( view.$(runSelect).length ).toEqual(0); + view.$('.js-add-course-run').first().click(); + + $runSelect = view.$(runSelect); + expect( $runSelect.length ).toEqual(1); + expect( view.$('.js-remove-run').length ).toEqual(savedRunCount); + dropdownSelect($runSelect, courseRunsList[0].id); + expect( view.$(runSelect).length ).toEqual(0); + expect( view.$('.js-remove-run').length ).toEqual(savedRunCount + 1); + }); + + it( 'should update the course run dropdown if multiple are open and one is selected', function() { + var runSelect = '.js-course-run-select', + $addRunBtn, + $courseView, + courseRunOptionsCount = courseRunsList.length + 1; + + addCourse(); + expect( view.$(runSelect).length ).toEqual(0); + + $courseView = view.$('.course-container').last(); + $addRunBtn = $courseView.find('.js-add-course-run'); + $addRunBtn.click(); + + expect( view.$(runSelect).length ).toEqual(1); + expect( view.$(runSelect).find('option').length ).toEqual(courseRunOptionsCount); + + $addRunBtn.click(); + expect( view.$(runSelect).length ).toEqual(2); + + dropdownSelect(view.$(runSelect).first(), courseRunsList[0].id); + expect( view.$(runSelect).length ).toEqual(1); + expect( view.$(runSelect).find('option').length ).toEqual(courseRunOptionsCount - 1); + }); + }); + + describe( 'Edit data', function() { + it( 'should enable a user to edit the name, subtitle and marketing slug fields', function() { + editField( '.program-name', 'name' ); + editField( '.program-subtitle', 'subtitle' ); + editField( '.program-marketing-slug', 'marketing-slug' ); + }); + + it( 'should not send an API call if a user does not change the value of an editable field', function() { + testUnchangedFieldBlur( '.program-name' ); + testUnchangedFieldBlur( '.program-subtitle' ); + testUnchangedFieldBlur( '.program-marketing-slug' ); + }); + + it( 'should send an API call if a user changes the value of an editable field', function() { + testUpdatedFieldBlur( '.program-name', 'new-title' ); + testUpdatedFieldBlur( '.program-subtitle', 'new-subtitle' ); + testUpdatedFieldBlur( '.program-marketing-slug', 'new-marketing-slug' ); + }); + + it( 'should show error messaging if the updated required field is empty', function() { + testInvalidUpdate( '.program-name', '' ); + }); + + it( 'should show error messaging if the updated field value is too long', function() { + var chars256 = 'x'.repeat(256); + + testInvalidUpdate( '.program-name', chars256 ); + testInvalidUpdate( '.program-subtitle', chars256 ); + testInvalidUpdate( '.program-marketing-slug', chars256 ); + }); + + it( 'should create a POST config object by default', function() { + var config = view.model.getConfig(); + + expect( config.type ).toEqual( 'POST' ); + expect( config.contentType ).toEqual( 'application/json' ); + expect( config.data ).not.toBeDefined(); + }); + + it( 'should create a PATCH config object when passed in object sets patch as true', function() { + var data = { name: 'patched name' }, + config = view.model.getConfig({ + patch: true, + update: data + }); + + expect( config.type ).toEqual( 'PATCH' ); + expect( config.contentType ).toEqual( 'application/merge-patch+json' ); + expect( config.data ).toBeDefined(); + expect( config.data ).toEqual( JSON.stringify( data ) ); + }); + }); + + describe( 'Publish a Program', function() { + it( 'should open the publish modal when the publish button is clicked', function() { + openPublishModal(); + expect( view.modalView ).toBeDefined(); + }); + + it( 'should publish a program when the publish confirm button is clicked', function() { + var defaultStatus = programData.status, + publishedStatus = 'active'; + + openPublishModal(); + expect( view.modalView ).toBeDefined(); + + view.$el.find('.js-confirm').click(); + + // Model should be set and save called + expect( view.model.set ).toHaveBeenCalled(); + expect( view.model.get( 'status' ) ).not.toEqual( defaultStatus ); + expect( view.model.get( 'status' ) ).toEqual( publishedStatus ); + expect( view.model.save ).toHaveBeenCalled(); + + // Publish button should be removed once API has completed its call + expect( view.$el.find('.js-publish-program').length ).toEqual( 1 ); + view.model.trigger( 'sync' ); + expect( view.$el.find('.js-publish-program').length ).toEqual( 0 ); + }); + + it( 'should show a validation error when publish button pressed if validation fails', function() { + var $input = view.$el.find( '#program-marketing-slug' ); + + view.model.set('marketing_slug', ''); + openPublishModal(); + expect( view.modalView ).not.toBeDefined(); + expect( $input ).toHaveClass( errorClass ); + }); + + it( 'should destroy the publish modal when the cancel button is clicked', function() { + openPublishModal(); + expect( view.modalView ).toBeDefined(); + + // Close the modal + view.$el.find('.js-cancel').click(); + + // Expect the modal DOM elements to not be there anymore + expect( view.$el.find('.js-cancel').length ).toEqual( 0 ); + expect( view.modalView.$parentEl.html().length ).toEqual( 0 ); + }); + + it( 'should destroy the publish modal when the esc key is pressed', function() { + openPublishModal(); + expect( view.modalView ).toBeDefined(); + + // Close the modal + keyPress( view.modalView.$el, constants.keyCodes.esc ); + + // Expect the modal DOM elements to not be there anymore + expect( view.$el.find('.js-cancel').length ).toEqual( 0 ); + expect( view.modalView.$parentEl.html().length ).toEqual( 0 ); + }); + }); + }); + } +); diff --git a/cms/static/js/spec/views/xblock_spec.js b/cms/static/js/spec/views/xblock_spec.js index 23fa1eeadb..4dedc78a89 100644 --- a/cms/static/js/spec/views/xblock_spec.js +++ b/cms/static/js/spec/views/xblock_spec.js @@ -1,5 +1,5 @@ define(["jquery", "URI", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/components/utils/view_utils", - "js/views/xblock", "js/models/xblock_info", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/views/xblock", "js/models/xblock_info", "xmodule", "cms/js/main", "xblock/cms.runtime.v1"], function ($, URI, AjaxHelpers, ViewUtils, XBlockView, XBlockInfo) { "use strict"; describe("XBlockView", function() { diff --git a/cms/static/js/spec_helpers/edit_helpers.js b/cms/static/js/spec_helpers/edit_helpers.js index 4d46e6af42..885e5f7bf9 100644 --- a/cms/static/js/spec_helpers/edit_helpers.js +++ b/cms/static/js/spec_helpers/edit_helpers.js @@ -3,7 +3,7 @@ */ define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpers", "common/js/spec_helpers/template_helpers", "js/spec_helpers/modal_helpers", "js/views/modals/edit_xblock", - "js/collections/component_template", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/collections/component_template", "xmodule", "cms/js/main", "xblock/cms.runtime.v1"], function($, _, AjaxHelpers, TemplateHelpers, modal_helpers, EditXBlockModal, ComponentTemplates) { var installMockXBlock, uninstallMockXBlock, installMockXModule, uninstallMockXModule, @@ -41,12 +41,13 @@ define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpe mockComponentTemplates = new ComponentTemplates([ { - templates: [ + "templates": [ { - category: 'discussion', - display_name: 'Discussion' + "category": "discussion", + "display_name": "Discussion" }], - type: 'discussion' + "type": "discussion", + "support_legend": {"show_legend": false} }, { "templates": [ { @@ -62,7 +63,8 @@ define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpe "boilerplate_name": "raw.yaml", "display_name": "Raw HTML" }], - "type": "html" + "type": "html", + "support_legend": {"show_legend": false} }], { parse: true @@ -76,6 +78,8 @@ define(["jquery", "underscore", "edx-ui-toolkit/js/utils/spec-helpers/ajax-helpe TemplateHelpers.installTemplate('add-xblock-component-button'); TemplateHelpers.installTemplate('add-xblock-component-menu'); TemplateHelpers.installTemplate('add-xblock-component-menu-problem'); + TemplateHelpers.installTemplate('add-xblock-component-support-legend'); + TemplateHelpers.installTemplate('add-xblock-component-support-level'); // Add templates needed by the edit XBlock modal TemplateHelpers.installTemplate('edit-xblock-modal'); diff --git a/cms/static/js/utils/date_utils.js b/cms/static/js/utils/date_utils.js index db2b9ff726..ee96162063 100644 --- a/cms/static/js/utils/date_utils.js +++ b/cms/static/js/utils/date_utils.js @@ -52,7 +52,10 @@ function($, date, TriggerChangeEventOnEnter) { // given a pair of inputs (datepicker and timepicker), return a JS Date // object that corresponds to the datetime.js that they represent. Assume // UTC timezone, NOT the timezone of the user's browser. - var date = $(datepickerInput).datepicker("getDate"), time = null; + var date = null, time = null; + if (datepickerInput.length > 0) { + date = $(datepickerInput).datepicker("getDate"); + } if (timepickerInput.length > 0) { time = $(timepickerInput).timepicker("getTime"); } diff --git a/cms/static/js/views/components/add_xblock_menu.js b/cms/static/js/views/components/add_xblock_menu.js index e3a148e5b3..811528afd0 100644 --- a/cms/static/js/views/components/add_xblock_menu.js +++ b/cms/static/js/views/components/add_xblock_menu.js @@ -1,5 +1,5 @@ -define(["jquery", "js/views/baseview"], - function ($, BaseView) { +define(["jquery", "js/views/baseview", 'edx-ui-toolkit/js/utils/html-utils'], + function ($, BaseView, HtmlUtils) { return BaseView.extend({ className: function () { @@ -9,8 +9,19 @@ define(["jquery", "js/views/baseview"], BaseView.prototype.initialize.call(this); var template_name = this.model.type === "problem" ? "add-xblock-component-menu-problem" : "add-xblock-component-menu"; + var support_indicator_template = this.loadTemplate("add-xblock-component-support-level"); + var support_legend_template = this.loadTemplate("add-xblock-component-support-legend"); this.template = this.loadTemplate(template_name); - this.$el.html(this.template({type: this.model.type, templates: this.model.templates})); + HtmlUtils.setHtml( + this.$el, + HtmlUtils.HTML(this.template({ + type: this.model.type, templates: this.model.templates, + support_legend: this.model.support_legend, + support_indicator_template: support_indicator_template, + support_legend_template: support_legend_template, + HtmlUtils: HtmlUtils + })) + ); // Make the tabs on problems into "real tabs" this.$('.tab-group').tabs(); } diff --git a/cms/static/js/views/modals/course_outline_modals.js b/cms/static/js/views/modals/course_outline_modals.js index ee4a202d88..340f52e605 100644 --- a/cms/static/js/views/modals/course_outline_modals.js +++ b/cms/static/js/views/modals/course_outline_modals.js @@ -7,14 +7,15 @@ */ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', 'js/views/modals/base_modal', 'date', 'js/views/utils/xblock_utils', - 'js/utils/date_utils' + 'js/utils/date_utils', 'edx-ui-toolkit/js/utils/html-utils', + 'edx-ui-toolkit/js/utils/string-utils' ], function( - $, Backbone, _, gettext, BaseView, BaseModal, date, XBlockViewUtils, DateUtils + $, Backbone, _, gettext, BaseView, BaseModal, date, XBlockViewUtils, DateUtils, HtmlUtils, StringUtils ) { 'use strict'; var CourseOutlineXBlockModal, SettingsXBlockModal, PublishXBlockModal, AbstractEditor, BaseDateEditor, - ReleaseDateEditor, DueDateEditor, GradingEditor, PublishEditor, StaffLockEditor, - VerificationAccessEditor, TimedExaminationPreferenceEditor, AccessEditor; + ReleaseDateEditor, DueDateEditor, GradingEditor, PublishEditor, AbstractVisibilityEditor, StaffLockEditor, + ContentVisibilityEditor, VerificationAccessEditor, TimedExaminationPreferenceEditor, AccessEditor; CourseOutlineXBlockModal = BaseModal.extend({ events : _.extend({}, BaseModal.prototype.events, { @@ -105,9 +106,9 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', SettingsXBlockModal = CourseOutlineXBlockModal.extend({ getTitle: function () { - return interpolate( - gettext('%(display_name)s Settings'), - { display_name: this.model.get('display_name') }, true + return StringUtils.interpolate( + gettext('{display_name} Settings'), + { display_name: this.model.get('display_name') } ); }, @@ -115,9 +116,10 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', var message = ''; var tabs = this.options.tabs; if (!tabs || tabs.length < 2) { - message = interpolate( - gettext('Change the settings for %(display_name)s'), - { display_name: this.model.get('display_name') }, true); + message = StringUtils.interpolate( + gettext('Change the settings for {display_name}'), + { display_name: this.model.get('display_name') } + ); } return message; }, @@ -127,7 +129,7 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', if (tabs && tabs.length > 0) { if (tabs.length > 1) { var tabsTemplate = this.loadTemplate('settings-modal-tabs'); - this.$('.modal-section').html(tabsTemplate({tabs: tabs})); + HtmlUtils.setHtml(this.$('.modal-section'), HtmlUtils.HTML(tabsTemplate({tabs: tabs}))); _.each(this.options.tabs, function(tab) { this.options.editors.push.apply( this.options.editors, @@ -196,16 +198,16 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', }, getTitle: function () { - return interpolate( - gettext('Publish %(display_name)s'), - { display_name: this.model.get('display_name') }, true + return StringUtils.interpolate( + gettext('Publish {display_name}'), + { display_name: this.model.get('display_name') } ); }, getIntroductionMessage: function () { - return interpolate( - gettext('Publish all unpublished changes for this %(item)s?'), - { item: this.options.xblockType }, true + return StringUtils.interpolate( + gettext('Publish all unpublished changes for this {item}?'), + { item: this.options.xblockType } ); }, @@ -233,7 +235,7 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', enable_timed_exam: this.options.enable_timed_exams }, this.getContext())); - this.$el.html(html); + HtmlUtils.setHtml(this.$el, HtmlUtils.HTML(html)); this.parentElement.append(this.$el); }, @@ -343,7 +345,7 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', this.$('.exam-options').hide(); this.$('.field-time-limit input').val('00:00'); }, - selectSpecialExam: function (showRulesField, showHideAfterDueField) { + selectSpecialExam: function (showRulesField) { this.$('.exam-options').show(); this.$('.field-time-limit').show(); if (!this.isValidTimeLimit(this.$('.field-time-limit input').val())) { @@ -355,24 +357,18 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', else { this.$('.field-exam-review-rules').hide(); } - if (showHideAfterDueField) { - this.$('.field-hide-after-due').show(); - } - else { - this.$('.field-hide-after-due').hide(); - } }, setTimedExam: function (event) { event.preventDefault(); - this.selectSpecialExam(false, true); + this.selectSpecialExam(false); }, setPracticeExam: function (event) { event.preventDefault(); - this.selectSpecialExam(false, false); + this.selectSpecialExam(false); }, setProctoredExam: function (event) { event.preventDefault(); - this.selectSpecialExam(true, false); + this.selectSpecialExam(true); }, timeLimitFocusout: function(event) { event.preventDefault(); @@ -395,12 +391,10 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', this.setExamTime(this.model.get('default_time_limit_minutes')); this.setReviewRules(this.model.get('exam_review_rules')); - this.setHideAfterDue(this.model.get('hide_after_due')); }, setExamType: function(is_time_limited, is_proctored_exam, is_practice_exam) { this.$('.field-time-limit').hide(); this.$('.field-exam-review-rules').hide(); - this.$('.field-hide-after-due').hide(); if (!is_time_limited) { this.$('input.no_special_exam').prop('checked', true); @@ -421,7 +415,6 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', // if the subsection is not time limited, then // here we rightfully assume that it just a timed exam this.$('input.timed_exam').prop('checked', true); - this.$('.field-hide-after-due').show(); } }, setExamTime: function(value) { @@ -431,9 +424,6 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', setReviewRules: function (value) { this.$('.field-exam-review-rules textarea').val(value); }, - setHideAfterDue: function(value) { - this.$('.field-hide-after-due input').prop('checked', value); - }, isValidTimeLimit: function(time_limit) { var pattern = new RegExp('^\\d{1,2}:[0-5][0-9]$'); return pattern.test(time_limit) && time_limit !== "00:00"; @@ -459,7 +449,6 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', var is_proctored_exam; var time_limit = this.getExamTimeLimit(); var exam_review_rules = this.$('.field-exam-review-rules textarea').val(); - var hide_after_due = this.$('.field-hide-after-due input').is(':checked'); if (this.$('input.no_special_exam').is(':checked')){ is_time_limited = false; @@ -484,7 +473,6 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', 'is_practice_exam': is_practice_exam, 'is_time_limited': is_time_limited, 'exam_review_rules': exam_review_rules, - 'hide_after_due': hide_after_due, // We have to use the legacy field name // as the Ajax handler directly populates // the xBlocks fields. We will have to @@ -590,9 +578,11 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', } }); - StaffLockEditor = AbstractEditor.extend({ - templateName: 'staff-lock-editor', - className: 'edit-staff-lock', + AbstractVisibilityEditor = AbstractEditor.extend({ + afterRender: function () { + AbstractEditor.prototype.afterRender.call(this); + }, + isModelLocked: function() { return this.model.get('has_explicit_staff_lock'); }, @@ -601,8 +591,19 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', return this.model.get('ancestor_has_staff_lock'); }, + getContext: function () { + return { + hasExplicitStaffLock: this.isModelLocked(), + ancestorLocked: this.isAncestorLocked() + }; + } + }); + + StaffLockEditor = AbstractVisibilityEditor.extend({ + templateName: 'staff-lock-editor', + className: 'edit-staff-lock', afterRender: function () { - AbstractEditor.prototype.afterRender.call(this); + AbstractVisibilityEditor.prototype.afterRender.call(this); this.setLock(this.isModelLocked()); }, @@ -619,19 +620,100 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', }, getRequestData: function() { - return this.hasChanges() ? { - publish: 'republish', - metadata: { - visible_to_staff_only: this.isLocked() ? true : null + if (this.hasChanges()) { + return { + publish: 'republish', + metadata: { + visible_to_staff_only: this.isLocked() ? true : null } - } : {}; + }; + } else { + return {}; + } + }, + }); + + ContentVisibilityEditor = AbstractVisibilityEditor.extend({ + templateName: 'content-visibility-editor', + className: 'edit-content-visibility', + events: { + 'change input[name=content-visibility]': 'toggleUnlockWarning' + }, + + modelVisibility: function() { + if (this.model.get('has_explicit_staff_lock')) { + return 'staff_only'; + } else if (this.model.get('hide_after_due')) { + return 'hide_after_due'; + } else { + return 'visible'; + } + }, + + afterRender: function () { + AbstractVisibilityEditor.prototype.afterRender.call(this); + this.setVisibility(this.modelVisibility()); + this.$('input[name=content-visibility]:checked').change(); + }, + + setVisibility: function(value) { + this.$('input[name=content-visibility][value='+value+']').prop('checked', true); + }, + + currentVisibility: function() { + return this.$('input[name=content-visibility]:checked').val(); + }, + + hasChanges: function() { + return this.modelVisibility() !== this.currentVisibility(); + }, + + toggleUnlockWarning: function() { + var warning = this.$('.staff-lock .tip-warning'); + if (warning) { + var display; + if (this.currentVisibility() !== 'staff_only') { + display = 'block'; + } else { + display = 'none'; + } + $.each(warning, function(_, element) { + element.style.display = display; + }); + } + }, + + getRequestData: function() { + if (this.hasChanges()) { + var metadata = {}; + if (this.currentVisibility() === 'staff_only') { + metadata.visible_to_staff_only = true; + metadata.hide_after_due = null; + } + else if (this.currentVisibility() === 'hide_after_due') { + metadata.visible_to_staff_only = null; + metadata.hide_after_due = true; + } else { + metadata.visible_to_staff_only = null; + metadata.hide_after_due = null; + } + + return { + publish: 'republish', + metadata: metadata + }; + } + else { + return {}; + } }, getContext: function () { - return { - hasExplicitStaffLock: this.isModelLocked(), - ancestorLocked: this.isAncestorLocked() - }; + return $.extend( + {}, + AbstractVisibilityEditor.prototype.getContext.call(this), + { hide_after_due: this.modelVisibility() === 'hide_after_due'} + ); } }); @@ -748,41 +830,45 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', }, getEditModal: function (xblockInfo, options) { - var editors = []; + var tabs = []; - - if (xblockInfo.isChapter()) { - editors = [ReleaseDateEditor, StaffLockEditor]; - } else if (xblockInfo.isSequential()) { - tabs.push({ - name: 'basic', - displayName: gettext('Basic'), - editors: [ReleaseDateEditor, GradingEditor, DueDateEditor, StaffLockEditor] - }); - - if (options.enable_proctored_exams || options.enable_timed_exams) { - tabs.push({ - name: 'advanced', - displayName: gettext('Advanced'), - editors: [TimedExaminationPreferenceEditor] - }); - } - - if (typeof(xblockInfo.get('is_prereq')) !== 'undefined') { - tabs.push({ - name: 'access', - // Translators: This label refers to access to course content. - displayName: gettext('Access'), - editors: [AccessEditor] - }); - } - } else if (xblockInfo.isVertical()) { + var editors = []; + if (xblockInfo.isVertical()) { editors = [StaffLockEditor]; if (xblockInfo.hasVerifiedCheckpoints()) { editors.push(VerificationAccessEditor); } + } else { + tabs = [ + { + name: 'basic', + displayName: gettext('Basic'), + editors: [] + }, + { + name: 'advanced', + displayName: gettext('Advanced'), + editors: [] + } + ]; + if (xblockInfo.isChapter()) { + tabs[0].editors = [ReleaseDateEditor]; + tabs[1].editors = [StaffLockEditor]; + } else if (xblockInfo.isSequential()) { + tabs[0].editors = [ReleaseDateEditor, GradingEditor, DueDateEditor]; + tabs[1].editors = [ContentVisibilityEditor]; + + if (options.enable_proctored_exams || options.enable_timed_exams) { + tabs[1].editors.push(TimedExaminationPreferenceEditor); + } + + if (typeof(xblockInfo.get('is_prereq')) !== 'undefined') { + tabs[1].editors.push(AccessEditor); + } + } } + /* globals course */ if (course.get('self_paced')) { editors = _.without(editors, ReleaseDateEditor, DueDateEditor); @@ -790,6 +876,7 @@ define(['jquery', 'backbone', 'underscore', 'gettext', 'js/views/baseview', tab.editors = _.without(tab.editors, ReleaseDateEditor, DueDateEditor); }); } + return new SettingsXBlockModal($.extend({ tabs: tabs, editors: editors, diff --git a/cms/static/karma_cms_squire.conf.js b/cms/static/karma_cms_squire.conf.js index d8bdda0c98..a5c81fceae 100644 --- a/cms/static/karma_cms_squire.conf.js +++ b/cms/static/karma_cms_squire.conf.js @@ -22,6 +22,7 @@ var options = { // Otherwise Istanbul which is used for coverage tracking will cause tests to not run. sourceFiles: [ {pattern: 'coffee/src/**/!(*spec).js'}, + {pattern: 'cms/js/**/!(*spec|djangojs).js'}, {pattern: 'js/**/!(*spec|djangojs).js'} ], diff --git a/cms/static/sass/_base-v2.scss b/cms/static/sass/_base-v2.scss new file mode 100644 index 0000000000..14a6c676a1 --- /dev/null +++ b/cms/static/sass/_base-v2.scss @@ -0,0 +1,15 @@ +// studio - base styling +// ==================== +html { + height: 102%; // force scrollbar to prevent jump when scroll appears, cannot use overflow because it breaks drag +} + +body { + min-width: $fg-min-width; + background: $gray-l5; + color: $gray-d2; +} + +footer.primary{ + font-size: font-size(x-small); +} diff --git a/cms/static/sass/_base.scss b/cms/static/sass/_base.scss index a8dd687fb6..d86b59869b 100644 --- a/cms/static/sass/_base.scss +++ b/cms/static/sass/_base.scss @@ -590,35 +590,6 @@ hr.divide { } } -.tooltip { - @include transition(opacity $tmg-f3 ease-out 0s); - @include font-size(12); - @extend %t-regular; - @extend %ui-depth5; - position: absolute; - top: 0; - left: 0; - padding: 0 10px; - border-radius: 3px; - background: rgba(0, 0, 0, 0.85); - line-height: 26px; - color: $white; - pointer-events: none; - opacity: 0.0; - - &:after { - @include font-size(20); - content: '▾'; - display: block; - position: absolute; - bottom: -14px; - left: 50%; - margin-left: -7px; - color: rgba(0, 0, 0, 0.85); - } -} - - // +Utility - Basic // ==================== diff --git a/cms/static/sass/_build-v1.scss b/cms/static/sass/_build-v1.scss index 36c86d4d34..23b66d8db7 100644 --- a/cms/static/sass/_build-v1.scss +++ b/cms/static/sass/_build-v1.scss @@ -10,7 +10,7 @@ // +Base - Utilities // ==================== -@import 'variables'; +@import 'partials/variables'; @import 'mixins'; @import 'mixins-inherited'; @@ -45,6 +45,7 @@ @import 'elements/modal-window'; @import 'elements/uploaded-assets'; // layout for asset tables @import 'elements/creative-commons'; +@import 'elements/tooltip'; // +Base - Specific Views // ==================== diff --git a/cms/static/sass/_build-v2.scss b/cms/static/sass/_build-v2.scss index 2a032042f6..7335783fbd 100644 --- a/cms/static/sass/_build-v2.scss +++ b/cms/static/sass/_build-v2.scss @@ -7,3 +7,13 @@ @import 'config'; // Extensions +@import 'partials/variables'; +@import 'mixins-v2'; +@import 'base-v2'; +@import 'elements-v2/controls'; +@import 'elements-v2/header'; +@import 'elements-v2/navigation'; +@import 'elements/footer'; +@import 'elements-v2/sock'; +@import 'elements-v2/tooltip'; +@import 'programs/build'; diff --git a/cms/static/sass/_mixins-v2.scss b/cms/static/sass/_mixins-v2.scss new file mode 100644 index 0000000000..86031b4c7e --- /dev/null +++ b/cms/static/sass/_mixins-v2.scss @@ -0,0 +1,4 @@ +// pill button +%ui-btn-pill { + border-radius: ($baseline/5); +} diff --git a/cms/static/sass/assets/_edx-icons.scss b/cms/static/sass/assets/_edx-icons.scss deleted file mode 100644 index eb24b632e4..0000000000 --- a/cms/static/sass/assets/_edx-icons.scss +++ /dev/null @@ -1,14 +0,0 @@ -// common - assets - ux pattern library icons -// ==================== - -// +Base - Utilities -// ==================== -@import 'variables'; - -@font-face { - font-family: 'edx-icons'; - src: - url('#{$static-path}/fonts/edx-icons/edx-icons.woff') format('woff'), // NOTE: woff2 format currently not supported by IcoMoon font output - url('#{$static-path}/fonts/edx-icons/edx-icons.ttf') format('truetype'); - font-weight: 300; -} diff --git a/cms/static/sass/edx-icons.scss b/cms/static/sass/edx-icons.scss deleted file mode 100644 index a5e94f8c70..0000000000 --- a/cms/static/sass/edx-icons.scss +++ /dev/null @@ -1,15 +0,0 @@ -// studio - edx-icons -// ==================== - -// Table of Contents -// * +Libs and Resets -// * +edx-icons - - -// +Libs and Resets -// ==================== -@import 'bourbon/bourbon'; // lib - bourbon - -// +edx-icons -// ==================== -@import 'assets/edx-icons'; // load the edx-icons fonts diff --git a/cms/static/sass/elements-v2/_controls.scss b/cms/static/sass/elements-v2/_controls.scss new file mode 100644 index 0000000000..69116366ad --- /dev/null +++ b/cms/static/sass/elements-v2/_controls.scss @@ -0,0 +1,45 @@ +// +UI Dropdown Button - Extend +// ==================== +%ui-btn-dd { + @extend %ui-btn; + @extend %ui-btn-pill; + padding:($baseline/4) ($baseline/2); + border-width: 1px; + border-style: solid; + border-color: transparent; + text-align: center; + + &:hover, &:active { + @extend %ui-fake-link; + border-color: $gray-l3; + } + + &.current, &.active, &.is-selected { + box-shadow: inset 0 1px 2px 1px $shadow-l1; + border-color: $gray-l3; + } +} + +// +UI Nav Dropdown Button - Extend +// ==================== +%ui-btn-dd-nav-primary { + @extend %ui-btn-dd; + background: $white; + border-color: $white; + color: $gray-d1; + + &:hover, &:active { + background: $white; + color: $blue-s1; + } + + &.current, &.active { + background: $white; + color: $gray-d4; + + &:hover, &:active { + color: $blue-s1; + } + } +} + diff --git a/cms/static/sass/elements-v2/_header.scss b/cms/static/sass/elements-v2/_header.scss new file mode 100644 index 0000000000..f04a3d93c9 --- /dev/null +++ b/cms/static/sass/elements-v2/_header.scss @@ -0,0 +1,172 @@ +// studio - elements - global header +// ==================== + +.wrapper-header { + position: relative; + width: 100%; + box-shadow: 0 1px 2px 0 $shadow-l1; + margin: 0; + padding: 0 $baseline; + background: $white; + + header.primary { + @include clearfix(); + @include span(12); + @include float(none); + box-sizing: border-box; + max-width: $fg-max-width; + min-width: $fg-min-width; + margin: 0 auto; + } + + // ==================== + + // basic layout + .wrapper-l, .wrapper-r { + background: $white; + } + + .wrapper-l { + @include span(7); + } + + .wrapper-r { + @include span(4 last); + @include text-align(right); + } + + .branding, .info-course, .nav-course, .nav-account, .nav-pitch { + box-sizing: border-box; + display: inline-block; + vertical-align: middle; + } + + .user-language-selector { + width: 120px; + display: inline-block; + margin: 0 10px 0 5px; + vertical-align: sub; + + .language-selector { + width: 120px; + } + } + + .nav-account { + width: auto; + } + + // basic layout - nav items + .nav-dd { + .nav-item { + display: inline-block; + vertical-align: middle; + + &:last-child { + margin-right: 0; + } + + .title{ + @extend %ui-btn-dd-nav-primary; + @include transition(all $tmg-f2 ease-in-out 0s); + line-height: 16px; + margin-top: 6px; + font-size: font-size(base); + font-weight: font-weight(semi-bold); + .nav-sub .nav-item { + .icon { + display: inline-block; + vertical-align: middle; + margin-right: ($baseline/4); + } + } + } + } + + .nav-item a { + color: $gray-d1; + + &:hover, + &:focus { + color: $blue-s1; + } + } + } + + // ==================== + + // specific elements - branding + .branding { + padding: ($baseline*0.75) 0; + + .brand-link { + display: block; + + .brand-image { + max-height: ($baseline*2); + display: block; + } + } + } + + // ==================== + + // specific elements - account-based nav + .nav-account { + position: relative; + padding: ($baseline*0.75) 0; + + .nav-sub { + @include text-align(left); + } + + .nav-account-help { + + .wrapper-nav-sub { + width: ($baseline*10); + } + } + + .nav-account-user { + + .title { + max-width: ($baseline*6.5); + display: inline-block; + max-width: 84%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + } + + .settings-language-form { + margin-top: 4px; + .language-selector { + width: 130px; + } + } + } +} +// ==================== + +// CASE: user signed in +.is-signedin { + + .wrapper-l { + width: flex-grid(8,12); + } + + .wrapper-r { + width: flex-grid(4,12); + } + + .branding { + @include margin-right(2%); + } + + .nav-account { + top: ($baseline/4); + } +} + + diff --git a/cms/static/sass/elements-v2/_navigation.scss b/cms/static/sass/elements-v2/_navigation.scss new file mode 100644 index 0000000000..ce4b43225c --- /dev/null +++ b/cms/static/sass/elements-v2/_navigation.scss @@ -0,0 +1,22 @@ +// skip navigation +.nav-skip, +.transcript-skip { + @include left(0); + font-size: font-size(small); + display: inline-block; + position: absolute; + top: -($baseline*30); + overflow: hidden; + background: $white; + border-bottom: 1px solid $gray-l4; + padding: ($baseline*0.75) ($baseline/2); + + &:focus, + &:active { + position: relative; + top: auto; + width: auto; + height: auto; + margin: 0; + } +} diff --git a/cms/static/sass/elements-v2/_sock.scss b/cms/static/sass/elements-v2/_sock.scss new file mode 100644 index 0000000000..c34daf795a --- /dev/null +++ b/cms/static/sass/elements-v2/_sock.scss @@ -0,0 +1,135 @@ +// studio - elements - support sock +// ==================== + +.wrapper-sock { + @include clearfix(); + position: relative; + margin: ($baseline*2) 0 0 0; + border-top: 1px solid $gray-l4; + width: 100%; + + .wrapper-inner { + @include linear-gradient($gray-d3 0%, $gray-d3 98%, $black 100%); + display: none; + width: 100% !important; + border-bottom: 1px solid $white; + padding: 0 $baseline !important; + } + + // sock - actions + .list-cta { + @extend %ui-depth1; + position: absolute; + top: -($baseline*0.75); + width: 100%; + margin: 0 auto; + text-align: center; + + .cta-show-sock { + @extend %ui-btn-pill; + background: $gray-l5; + font-size: font-size(x-small); + padding: ($baseline/2) $baseline; + color: $gray; + + .icon { + @include margin-right($baseline/4); + } + + &:hover { + background: $blue; + color: $white; + } + } + } + + // sock - additional help + .sock { + @include clearfix(); + @include span(12); + max-width: $fg-max-width; + min-width: $fg-min-width; + margin: 0 auto; + padding: ($baseline*2) 0; + color: $gray-l3; + + // shared elements + .support, + .feedback { + box-sizing: border-box; + + .title { + color: $white; + margin-bottom: ($baseline/2); + } + + .copy { + margin: 0 0 $baseline 0; + } + + .list-actions { + list-style: none; + + .action-item { + @include float(left); + @include margin-right($baseline/2); + margin-bottom: ($baseline/2); + + &:last-child { + @include margin-right(0); + } + + .action { + display: block; + + .icon { + vertical-align: middle; + @include margin-right($baseline/4); + } + } + + .tip { + @extend .sr-only; + } + } + + .action-primary { + @extend %btn-brand; + @extend %btn-small; + } + } + } + + // studio support content + .support { + @include float(left); + @include span(8); + margin-right: flex-gutter(); + + .action-item { + width: flexgrid(4,8); + } + } + + // studio feedback content + .feedback { + @include float(left); + @include span(4); + .action-item { + width: flexgrid(4,4); + } + } + } + + // case: sock content is shown + &.is-shown { + border-color: $gray-d3; + + .list-cta .cta-show-sock { + background: $gray-d3; + border-color: $gray-d3; + color: $white; + font-size: font-size(small); + } + } +} diff --git a/cms/static/sass/elements-v2/_tooltip.scss b/cms/static/sass/elements-v2/_tooltip.scss new file mode 100644 index 0000000000..ef826da644 --- /dev/null +++ b/cms/static/sass/elements-v2/_tooltip.scss @@ -0,0 +1,25 @@ +.tooltip { + @include transition(opacity $tmg-f3 ease-out 0s); + position: absolute; + top: 0; + left: 0; + padding: 0 10px; + border-radius: 3px; + background: $black-t4; + line-height: 26px; + font-size: font-size(x-small); + color: $white; + pointer-events: none; + opacity: 0; + + &:after { + font-size: font-size(x-large); + content: '▾'; + display: block; + position: absolute; + bottom: -14px; + left: 50%; + margin-left: -7px; + color: $black-t4; + } +} diff --git a/cms/static/sass/elements/_modal-window.scss b/cms/static/sass/elements/_modal-window.scss index 12636be084..4a5ec294c9 100644 --- a/cms/static/sass/elements/_modal-window.scss +++ b/cms/static/sass/elements/_modal-window.scss @@ -669,8 +669,13 @@ } } - .edit-staff-lock { + .edit-staff-lock, .edit-content-visibility { margin-bottom: $baseline; + + .tip { + font-weight: bold; + font-size: 12px; + } } // UI: staff lock section diff --git a/cms/static/sass/elements/_modules.scss b/cms/static/sass/elements/_modules.scss index 33805dec34..af82c1c87f 100644 --- a/cms/static/sass/elements/_modules.scss +++ b/cms/static/sass/elements/_modules.scss @@ -168,18 +168,47 @@ // specific menu types &.new-component-problem { - padding-bottom: ($baseline/2); - .problem-type-tabs { display: inline-block; } } + + .support-documentation { + float: right; + @include margin($baseline, 0, ($baseline/2), ($baseline/2)); + @include font-size(14); + + .support-documentation-level { + padding-right: ($baseline/2); + } + + .support-documentation-link { + // Override JQuery ui-widget-content link color (black) with our usual link color and hover action. + color: $uxpl-blue-base; + text-decoration: none; + padding-right: ($baseline/2); + + &:hover { + color: $uxpl-blue-hover-active; + text-decoration: underline; + } + } + } + + .support-level { + padding-right: ($baseline/2); + } + + .icon { + color: $uxpl-primary-accent; + } } // individual menus // -------------------- .new-component-template { @include clearfix(); + margin-bottom: 0; li { border: none; @@ -190,7 +219,7 @@ } } - .button-component { + .button-component { @include clearfix(); @include transition(none); @extend %t-demi-strong; @@ -201,11 +230,16 @@ background: $white; color: $gray-d3; text-align: left; + font-family: $f-sans-serif; &:hover { @include transition(background-color $tmg-f2 linear 0s); background: tint($green,30%); color: $white; + + .icon { + color: $white; + } } } } diff --git a/cms/static/sass/elements/_tooltip.scss b/cms/static/sass/elements/_tooltip.scss new file mode 100644 index 0000000000..77c42d63de --- /dev/null +++ b/cms/static/sass/elements/_tooltip.scss @@ -0,0 +1,27 @@ +.tooltip { + @include transition(opacity $tmg-f3 ease-out 0s); + @include font-size(12); + @extend %t-regular; + @extend %ui-depth5; + position: absolute; + top: 0; + left: 0; + padding: 0 10px; + border-radius: 3px; + background: rgba(0, 0, 0, 0.85); + line-height: 26px; + color: $white; + pointer-events: none; + opacity: 0.0; + + &:after { + @include font-size(20); + content: '▾'; + display: block; + position: absolute; + bottom: -14px; + left: 50%; + margin-left: -7px; + color: rgba(0, 0, 0, 0.85); + } +} \ No newline at end of file diff --git a/cms/static/sass/partials/_variables.scss b/cms/static/sass/partials/_variables.scss index 4e9f1dac9d..746be35ea1 100644 --- a/cms/static/sass/partials/_variables.scss +++ b/cms/static/sass/partials/_variables.scss @@ -39,6 +39,16 @@ $f-monospace: 'Bitstream Vera Sans Mono', Consolas, Courier, monospace; // ==================== $transparent: rgba(0,0,0,0); // used when color value is needed for UI width/transitions but element is transparent +// +Colors - UXPL new pattern library colors +// ==================== +$uxpl-blue-base: rgba(0, 116, 180, 1); // wcag2a compliant +$uxpl-blue-hover-active: lighten($uxpl-blue-base, 7%); // wcag2a compliant + +$uxpl-green-base: rgba(0, 129, 0, 1); // wcag2a compliant +$uxpl-green-hover-active: lighten($uxpl-green-base, 7%); // wcag2a compliant + +$uxpl-primary-accent: rgb(14, 166, 236); + // +Colors - Primary // ==================== $black: rgb(0,0,0); @@ -46,6 +56,7 @@ $black-t0: rgba($black, 0.125); $black-t1: rgba($black, 0.25); $black-t2: rgba($black, 0.5); $black-t3: rgba($black, 0.75); +$black-t4: rgba($black, 0.85); $white: rgb(255,255,255); $white-t0: rgba($white, 0.125); @@ -87,12 +98,6 @@ $blue-t1: rgba($blue, 0.25); $blue-t2: rgba($blue, 0.50); $blue-t3: rgba($blue, 0.75); -$uxpl-blue-base: rgba(0, 116, 180, 1); // wcag2a compliant -$uxpl-blue-hover-active: lighten($uxpl-blue-base, 7%); // wcag2a compliant - -$uxpl-green-base: rgba(0, 129, 0, 1); // wcag2a compliant -$uxpl-green-hover-active: lighten($uxpl-green-base, 7%); // wcag2a compliant - $pink: rgb(183, 37, 103); // #b72567; $pink-l1: tint($pink,20%); $pink-l2: tint($pink,40%); diff --git a/cms/static/sass/programs/_app-container.scss b/cms/static/sass/programs/_app-container.scss new file mode 100644 index 0000000000..b53b329126 --- /dev/null +++ b/cms/static/sass/programs/_app-container.scss @@ -0,0 +1,10 @@ + +// ------------------------------ +// Programs: App Container + +// About: styling for setting up the wrapper. +.program-app { + &.layout-1q3q { + max-width: 1250px; + } +} diff --git a/cms/static/sass/programs/_build.scss b/cms/static/sass/programs/_build.scss new file mode 100644 index 0000000000..272dcbe63f --- /dev/null +++ b/cms/static/sass/programs/_build.scss @@ -0,0 +1,9 @@ +// ------------------------------ +// Programs: Main Style Compile + +// About: Sass compile for the Programs IDA. + +@import 'components'; +@import 'views'; +@import 'modals'; +@import 'app-container'; diff --git a/cms/static/sass/programs/_components.scss b/cms/static/sass/programs/_components.scss new file mode 100644 index 0000000000..b59e018bb9 --- /dev/null +++ b/cms/static/sass/programs/_components.scss @@ -0,0 +1,99 @@ +// ------------------------------ +// Programs: Components + +// About: styling for specific UI components ranging from global to modular. + +// #BUTTONS +// #FORMS + + +// ------------------------------ +// #BUTTONS +// ------------------------------ +.btn { + &.btn-delete, + &.btn-edit { + border: none; + background: none; + color: palette(grayscale, base); + + &:hover, + &:focus, + &:active { + color: palette(grayscale, black); + } + } + + &.full { + width: 100%; + } + + &.right { + @include float(right); + } + + &.btn-create { + background: palette(success, base); + border-color: palette(success, base); + + // STATE: hover and focus + &:hover, + &.is-hovered, + &:focus, + &.is-focused { + background: shade($success, 33%); + color: $btn-default-focus-color; + } + + // STATE: is pressed or active + &:active, + &.is-pressed, + &.is-active { + border-color: shade($success, 33%); + background: shade($success, 33%); + } + + .text { + margin-left: 5px; + } + } + + .icon, + .text { + vertical-align: middle; + } + + .icon { + font-size: 16px; + } +} + +// ------------------------------ +// #FORMS +// ------------------------------ +.field { + .invalid { + border: 2px solid palette(error, base); + } + + .field-input, + .field-hint, + .field-message { + min-with: 300px; + width: 50%; + + &.is-hidden { + @extend .is-hidden; + } + } + + .copy { + vertical-align: middle; + } +} + +.form-group { + &.bg-white { + background-color: palette(grayscale, white); + } +} diff --git a/cms/static/sass/programs/_modals.scss b/cms/static/sass/programs/_modals.scss new file mode 100644 index 0000000000..890e609dcc --- /dev/null +++ b/cms/static/sass/programs/_modals.scss @@ -0,0 +1,76 @@ +// ------------------------------ +// Programs: Modals + +// About: styling for modals. +.modal-window-overlay { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + background-color: palette(grayscale-cool, x-dark); + opacity: 0.5; + z-index: 1000; +} + +.modal-window { + position: absolute; + background-color: palette(grayscale, black); + width: 80%; + left: 10%; + top: 40%; + z-index: 1001; +} + +.modal-content { + margin: 5px; + padding: 20px; + background-color: palette(grayscale-cool, x-dark); + border-top: 5px solid palette(warning, base); + + .copy { + color: palette(grayscale, white); + } + + .emphasized { + color: palette(grayscale, white-t); + font-weight: font-weight(bold); + } +} + +.modal-actions { + padding: 10px 20px; + + .btn { + color: palette(grayscale, white-t); + } + + .btn-brand { + background: palette(warning, base); + border-color: palette(warning, base); + + &:hover, + &:focus, + &:active { + background: palette(warning, dark); + border-color: palette(warning, dark);; + } + } + + .btn-neutral { + background: transparent; + border-color: transparent; + &:hover, + &:focus, + &:active { + border-color: palette(grayscale-cool, light) + } + } +} + +@include breakpoint( $bp-screen-sm ) { + .modal-window { + width: 440px; + left: calc( 50% - 220px ); + } +} diff --git a/cms/static/sass/programs/_views.scss b/cms/static/sass/programs/_views.scss new file mode 100644 index 0000000000..a4b9f282fe --- /dev/null +++ b/cms/static/sass/programs/_views.scss @@ -0,0 +1,62 @@ + +// ------------------------------ +// Programs: Views + +// About: styling for specific views. + +// ------------------------------ +// #PROGRAM LISTS +// ------------------------------ +.program-list { + list-style-type: none; + padding-left: 0; + + .program-details { + .name { + font-size: 2rem; + } + + .status { + @include float(right); + } + + .category { + color: palette(grayscale, base); + } + } +} + +.app-header { + @include clearfix(); + border-bottom: 1px solid palette(grayscale, base); + margin-bottom: 20px; +} + +.course-container { + .subtitle { + color: palette(grayscale, base); + } +} + +.run-container { + position: relative; + margin: { + bottom: 20px; + }; + + &:before { + content: ''; + width: 5px; + height: calc( 100% + 1px ); + background: palette(grayscale, base); + position: absolute; + top: 0; + left: 0; + } +} + +.course-container { + margin: { + bottom: 20px; + }; +} diff --git a/cms/static/sass/studio-main-v2.scss b/cms/static/sass/studio-main-v2.scss index cd355d5a7d..f31bcb3817 100644 --- a/cms/static/sass/studio-main-v2.scss +++ b/cms/static/sass/studio-main-v2.scss @@ -12,3 +12,4 @@ $pattern-library-path: '../edx-pattern-library' !default; // Load the shared build @import 'build-v2'; +@import 'programs/build'; diff --git a/cms/templates/asset_index.html b/cms/templates/asset_index.html index 48a6559ecd..53746bb795 100644 --- a/cms/templates/asset_index.html +++ b/cms/templates/asset_index.html @@ -13,7 +13,7 @@ <%namespace name='static' file='static_content.html'/> <%block name="header_extras"> -% for template_name in ["asset-library", "asset"]: +% for template_name in ["asset"]: diff --git a/cms/templates/course_outline.html b/cms/templates/course_outline.html index 85539600f5..c3753c31d6 100644 --- a/cms/templates/course_outline.html +++ b/cms/templates/course_outline.html @@ -1,6 +1,6 @@ <%page expression_filter="h"/> <%inherit file="base.html" /> -<%def name="online_help_token()"><% return "outline" %> +<%def name="online_help_token()"><% return "develop_course" %> <%! import logging from util.date_utils import get_default_time_display @@ -26,7 +26,7 @@ from openedx.core.djangolib.markup import HTML, Text <%block name="header_extras"> -% for template_name in ['course-outline', 'xblock-string-field-editor', 'basic-modal', 'modal-button', 'course-outline-modal', 'due-date-editor', 'release-date-editor', 'grading-editor', 'publish-editor', 'staff-lock-editor', 'verification-access-editor', 'timed-examination-preference-editor', 'access-editor', 'settings-modal-tabs']: +% for template_name in ['course-outline', 'xblock-string-field-editor', 'basic-modal', 'modal-button', 'course-outline-modal', 'due-date-editor', 'release-date-editor', 'grading-editor', 'publish-editor', 'staff-lock-editor', 'content-visibility-editor', 'verification-access-editor', 'timed-examination-preference-editor', 'access-editor', 'settings-modal-tabs']: @@ -42,7 +42,7 @@ from openedx.core.djangolib.markup import HTML, Text

${_("This course was created as a re-run. Some manual configuration is needed.")}

-

${_("No course content is currently visible, and no students are enrolled. Be sure to review and reset all dates, including the Course Start Date; set up the course team; review course updates and other assets for dated material; and seed the discussions and wiki.")}

+

${_("No course content is currently visible, and no learners are enrolled. Be sure to review and reset all dates, including the Course Start Date; set up the course team; review course updates and other assets for dated material; and seed the discussions and wiki.")}

- + + <%= HtmlUtils.HTML(support_legend_template({support_legend: support_legend})) %> diff --git a/cms/templates/js/add-xblock-component-menu.underscore b/cms/templates/js/add-xblock-component-menu.underscore index f5f9760648..2e31f06bf5 100644 --- a/cms/templates/js/add-xblock-component-menu.underscore +++ b/cms/templates/js/add-xblock-component-menu.underscore @@ -10,20 +10,23 @@ <% for (var i = 0; i < templates.length; i++) { %> <% if (!templates[i].boilerplate_name) { %>
  • -
  • <% } else { %>
  • -
  • <% } %> <% } %> - + + <%= HtmlUtils.HTML(support_legend_template({support_legend: support_legend})) %> <% } %> diff --git a/cms/templates/js/add-xblock-component-support-legend.underscore b/cms/templates/js/add-xblock-component-support-legend.underscore new file mode 100644 index 0000000000..488d0e1f69 --- /dev/null +++ b/cms/templates/js/add-xblock-component-support-legend.underscore @@ -0,0 +1,22 @@ +<% if (support_legend.show_legend) { %> + + + <%- support_legend.documentation_label %> + + + + <%- gettext('Supported') %> + + + + <%- gettext('Provisional') %> + + <% if (support_legend.allow_unsupported_xblocks) { %> + + + <%- gettext('Not Supported') %> + + <% } %> + +<% } %> diff --git a/cms/templates/js/add-xblock-component-support-level.underscore b/cms/templates/js/add-xblock-component-support-level.underscore new file mode 100644 index 0000000000..f2b8ebc090 --- /dev/null +++ b/cms/templates/js/add-xblock-component-support-level.underscore @@ -0,0 +1,10 @@ +<% if (support_level === "fs"){ %> + + <%- gettext('Fully Supported') %> +<% } else if (support_level === "ps"){ %> + + <%- gettext('Provisionally Supported') %> +<% } else if (support_level === "us"){ %> + + <%- gettext('Not Supported') %> +<% } %> diff --git a/cms/templates/js/content-visibility-editor.underscore b/cms/templates/js/content-visibility-editor.underscore new file mode 100644 index 0000000000..4c1093461e --- /dev/null +++ b/cms/templates/js/content-visibility-editor.underscore @@ -0,0 +1,34 @@ +
    + + +
    diff --git a/cms/templates/js/course-outline.underscore b/cms/templates/js/course-outline.underscore index 340f4dd1e4..2b9fbb8d40 100644 --- a/cms/templates/js/course-outline.underscore +++ b/cms/templates/js/course-outline.underscore @@ -177,17 +177,6 @@ if (is_proctored_exam) { <% } %>

    -
    -

    - <% if (!is_proctored_exam && xblockInfo.get('hide_after_due')) { %> - - <%- gettext("Exam will remain hidden after due date") %> - <% } else { %> - - <%- gettext("Exam will be visible after due date") %> - <% } %> -

    -
    <% } else if (xblockInfo.get('due_date') || xblockInfo.get('graded')) { %>

    @@ -200,6 +189,14 @@ if (is_proctored_exam) {

    <% } %> +
    +

    + <% if (xblockInfo.get('hide_after_due')) { %> + + <%- gettext("Subsection is hidden after due date") %> + <% } %> +

    +
    <% } %> <% if (statusMessage) { %>
    diff --git a/cms/templates/js/programs/confirm_modal.underscore b/cms/templates/js/programs/confirm_modal.underscore new file mode 100644 index 0000000000..cafe897837 --- /dev/null +++ b/cms/templates/js/programs/confirm_modal.underscore @@ -0,0 +1,24 @@ + diff --git a/cms/templates/js/programs/course_details.underscore b/cms/templates/js/programs/course_details.underscore new file mode 100644 index 0000000000..42aa7684e0 --- /dev/null +++ b/cms/templates/js/programs/course_details.underscore @@ -0,0 +1,49 @@ +
    +<% if ( display_name ) { %> + <%- display_name %> + <% if ( status === 'unpublished' ) { %> + + <% } %> +

    <%- organization.display_name %> / <%- key %> +

    + <% if ( courseRuns.length > -1 ) { %> + + <% } %> +<% } else { %> +
    +
    +
    + + +
    + +
    +
    +

    <%- gettext('The unique number that identifies your course within your organization, e.g. CS101.') %>

    +
    +
    +
    + + +
    + +
    +
    +

    <%- gettext('The title entered here will override the title set for the individual run of the course. It will be displayed on the XSeries progress page and in marketing presentations.') %>

    +
    +
    + +
    +
    +<% } %> +
    diff --git a/cms/templates/js/programs/course_run.underscore b/cms/templates/js/programs/course_run.underscore new file mode 100644 index 0000000000..11264a8f96 --- /dev/null +++ b/cms/templates/js/programs/course_run.underscore @@ -0,0 +1,36 @@ +
    + <% if ( !_.isUndefined(course_key) ) { %> + <%- interpolate( + gettext('Run %(key)s'), + { key: course_key }, + true + ) %> + <% if ( programStatus === 'unpublished' ) { %> + + <% } %> +
    <%- interpolate( + gettext('Start Date: %(date)s'), + { date: start_date }, + true + ) %>
    +
    <%- interpolate( + gettext('Mode: %(mode)s'), + { mode: mode_slug }, + true + ) %>
    + <% } else { %> + + <% } %> +
    diff --git a/cms/templates/js/programs/program_creator_form.underscore b/cms/templates/js/programs/program_creator_form.underscore new file mode 100644 index 0000000000..4fe47ce691 --- /dev/null +++ b/cms/templates/js/programs/program_creator_form.underscore @@ -0,0 +1,67 @@ +

    <%- gettext('Create a New Program') %>

    +
    +
    +
    + + +
    + +
    +
    + +
    + + +
    + +
    +
    + +
    + + +
    + +
    +
    +

    <%- gettext('The public display name of the program.') %>

    +
    +
    + +
    + + +
    + +
    +
    +

    <%- gettext('A short description of the program, including concepts covered and expected outcomes (255 character limit).') %>

    +
    +
    + +
    + + +
    + +
    +
    +

    <%- gettext('Slug used to generate links to the marketing site.') %>

    +
    +
    + +
    + + +
    +
    +
    diff --git a/cms/templates/js/programs/program_details.underscore b/cms/templates/js/programs/program_details.underscore new file mode 100644 index 0000000000..bb606fb03b --- /dev/null +++ b/cms/templates/js/programs/program_details.underscore @@ -0,0 +1,63 @@ +
    +
    +
    +
    + <%- name %> + + + +
    + +
    +
    + +
    + <%- subtitle %> + + + +
    + +
    +
    + +
    + <%- marketing_slug %> + + + +
    + +
    +
    +
    + +
    + <% if ( status === 'unpublished' ) { %> + + <% } %> +
    +
    +
    +
    +
    + <% if ( status === 'unpublished' ) { %> + + <% } %> +
    + +
    diff --git a/cms/templates/js/publish-xblock.underscore b/cms/templates/js/publish-xblock.underscore index 738e635985..44b0f8641e 100644 --- a/cms/templates/js/publish-xblock.underscore +++ b/cms/templates/js/publish-xblock.underscore @@ -81,7 +81,7 @@ var visibleToStaffOnly = visibilityState === 'staff_only'; <% } %>

    <% } else { %> -

    <%- gettext("Staff and Students") %>

    +

    <%- gettext("Staff and Learners") %>

    <% } %> <% if (hasContentGroupComponents) { %>

    @@ -97,10 +97,13 @@ var visibleToStaffOnly = visibilityState === 'staff_only'; <% } else { %> <% } %> - <%- gettext('Hide from students') %> + <%- gettext('Hide from learners') %> +

    + <%- gettext("Note: Do not hide graded assignments after they have been released.") %> +

    diff --git a/cms/templates/js/release-date-editor.underscore b/cms/templates/js/release-date-editor.underscore index 6d558d34b0..cc62f36bf5 100644 --- a/cms/templates/js/release-date-editor.underscore +++ b/cms/templates/js/release-date-editor.underscore @@ -1,14 +1,14 @@ - + diff --git a/cms/templates/widgets/sock.html b/cms/templates/widgets/sock.html index 5c3cfc5a1b..b271376a9c 100644 --- a/cms/templates/widgets/sock.html +++ b/cms/templates/widgets/sock.html @@ -1,8 +1,8 @@ +<%page expression_filter="h" args="online_help_token" /> <%! from django.utils.translation import ugettext as _ from django.core.urlresolvers import reverse %> -<%page args="online_help_token"/>
    • @@ -15,8 +15,7 @@ from django.core.urlresolvers import reverse
      -

      ${_("{studio_name} Documentation").format(studio_name=settings.STUDIO_NAME)}

      - +

      ${_("{studio_name} Documentation").format(studio_name=settings.STUDIO_NAME)}

      <%! from django.conf import settings diff --git a/cms/templates/widgets/user_dropdown.html b/cms/templates/widgets/user_dropdown.html new file mode 100644 index 0000000000..bebc2e21d0 --- /dev/null +++ b/cms/templates/widgets/user_dropdown.html @@ -0,0 +1,54 @@ +<%page expression_filter="h"/> +<%namespace name='static' file='../static_content.html'/> +<%! + from django.conf import settings + from django.core.urlresolvers import reverse + from django.utils.translation import ugettext as _ +%> + +% if uses_pattern_library: + + +% else: +

      + + ${_("Currently signed in as:")} + + + +

      + + +% endif \ No newline at end of file diff --git a/common/djangoapps/student/management/commands/get_grades.py b/common/djangoapps/student/management/commands/get_grades.py index 25aff6a322..3759eaf575 100644 --- a/common/djangoapps/student/management/commands/get_grades.py +++ b/common/djangoapps/student/management/commands/get_grades.py @@ -2,11 +2,12 @@ Management command to generate a list of grades for all students that are enrolled in a course. """ -from courseware import grades, courses -from certificates.models import GeneratedCertificate from django.test.client import RequestFactory from django.core.management.base import BaseCommand, CommandError import os +from lms.djangoapps.courseware import courses +from lms.djangoapps.certificates.models import GeneratedCertificate +from lms.djangoapps.grades import course_grades from opaque_keys import InvalidKeyError from opaque_keys.edx.keys import CourseKey from opaque_keys.edx.locations import SlashSeparatedCourseKey @@ -117,7 +118,7 @@ class Command(BaseCommand): count, total, hours, minutes) start = datetime.datetime.now() request.user = student - grade = grades.grade(student, request, course) + grade = course_grades.summary(student, request, course) if not header: header = [section['label'] for section in grade[u'section_breakdown']] rows.append(["email", "username", "certificate-grade", "grade"] + header) diff --git a/common/djangoapps/student/management/commands/manage_user.py b/common/djangoapps/student/management/commands/manage_user.py index fed69c7771..dcfdf79af4 100644 --- a/common/djangoapps/student/management/commands/manage_user.py +++ b/common/djangoapps/student/management/commands/manage_user.py @@ -4,7 +4,7 @@ Django users, set/unset permission bits, and associate groups by name. """ from django.contrib.auth import get_user_model -from django.contrib.auth.models import Group +from django.contrib.auth.models import Group, BaseUserManager from django.core.management.base import BaseCommand, CommandError from django.db import transaction from django.utils.translation import gettext as _ @@ -81,7 +81,10 @@ class Command(BaseCommand): ) if created: - user.set_unusable_password() + # Set the password to a random, unknown, but usable password + # allowing self-service password resetting. Cases where unusable + # passwords are required, should be explicit, and will be handled below. + user.set_password(BaseUserManager().make_random_password(25)) self.stderr.write(_('Created new user: "{}"').format(user)) else: # NOTE, we will not update the email address of an existing user. diff --git a/common/djangoapps/terrain/stubs/catalog.py b/common/djangoapps/terrain/stubs/catalog.py new file mode 100644 index 0000000000..6ba8f0ae32 --- /dev/null +++ b/common/djangoapps/terrain/stubs/catalog.py @@ -0,0 +1,43 @@ +""" +Stub implementation of catalog service for acceptance tests +""" +import re +import urlparse + +from .http import StubHttpRequestHandler, StubHttpService + + +class StubCatalogServiceHandler(StubHttpRequestHandler): # pylint: disable=missing-docstring + + def do_GET(self): # pylint: disable=invalid-name, missing-docstring + pattern_handlers = { + r'/api/v1/course_runs/(?P[^/+]+(/|\+)[^/+]+(/|\+)[^/?]+)/$': self.get_course_run, + } + + if self.match_pattern(pattern_handlers): + return + + self.send_response(404, content="404 Not Found") + + def match_pattern(self, pattern_handlers): + """ + Find the correct handler method given the path info from the HTTP request. + """ + path = urlparse.urlparse(self.path).path + for pattern in pattern_handlers: + match = re.match(pattern, path) + if match: + pattern_handlers[pattern](*match.groups()) + return True + return None + + def get_course_run(self, course_id): + """ + Stubs a catalog course run endpoint. + """ + course_run = self.server.config.get('course_run.{}'.format(course_id), []) + self.send_json_response(course_run) + + +class StubCatalogService(StubHttpService): # pylint: disable=missing-docstring + HANDLER_CLASS = StubCatalogServiceHandler diff --git a/common/djangoapps/terrain/stubs/start.py b/common/djangoapps/terrain/stubs/start.py index ad6d826eac..9bb35d70a3 100644 --- a/common/djangoapps/terrain/stubs/start.py +++ b/common/djangoapps/terrain/stubs/start.py @@ -13,6 +13,7 @@ from .lti import StubLtiService from .video_source import VideoSourceHttpService from .edxnotes import StubEdxNotesService from .programs import StubProgramsService +from .catalog import StubCatalogService USAGE = "USAGE: python -m stubs.start SERVICE_NAME PORT_NUM [CONFIG_KEY=CONFIG_VAL, ...]" @@ -26,6 +27,7 @@ SERVICES = { 'edxnotes': StubEdxNotesService, 'programs': StubProgramsService, 'ecommerce': StubEcommerceService, + 'catalog': StubCatalogService, } # Log to stdout, including debug messages diff --git a/common/djangoapps/terrain/ui_helpers.py b/common/djangoapps/terrain/ui_helpers.py index 905b84f096..47ab031232 100644 --- a/common/djangoapps/terrain/ui_helpers.py +++ b/common/djangoapps/terrain/ui_helpers.py @@ -39,7 +39,7 @@ REQUIREJS_WAIT = { # Unit page re.compile(r'^Unit \|'): [ "jquery", "js/base", "js/models/xblock_info", "js/views/pages/container", - "js/collections/component_template", "xmodule", "coffee/src/main", "xblock/cms.runtime.v1"], + "js/collections/component_template", "xmodule", "cms/js/main", "xblock/cms.runtime.v1"], # Content - Outline # Note that calling your org, course number, or display name, 'course' will mess this up @@ -49,18 +49,18 @@ REQUIREJS_WAIT = { # Dashboard re.compile(r'^Studio Home \|'): [ "js/sock", "gettext", "js/base", - "jquery.ui", "coffee/src/main", "underscore"], + "jquery.ui", "cms/js/main", "underscore"], # Upload re.compile(r'^\s*Files & Uploads'): [ - 'js/base', 'jquery.ui', 'coffee/src/main', 'underscore', + 'js/base', 'jquery.ui', 'cms/js/main', 'underscore', 'js/views/assets', 'js/views/asset' ], # Pages re.compile(r'^Pages \|'): [ 'js/models/explicit_url', 'js/views/tabs', - 'xmodule', 'coffee/src/main', 'xblock/cms.runtime.v1' + 'xmodule', 'cms/js/main', 'xblock/cms.runtime.v1' ], } diff --git a/common/djangoapps/xblock_django/api.py b/common/djangoapps/xblock_django/api.py index 1abb431916..1173ade5c2 100644 --- a/common/djangoapps/xblock_django/api.py +++ b/common/djangoapps/xblock_django/api.py @@ -22,11 +22,11 @@ def disabled_xblocks(): def authorable_xblocks(allow_unsupported=False, name=None): """ - If Studio XBlock support state is enabled (via `XBlockStudioConfigurationFlag`), this method returns - the QuerySet of XBlocks that can be created in Studio (by default, only fully supported and provisionally - supported). If `XBlockStudioConfigurationFlag` is not enabled, this method returns None. - Note that this method does not take into account fully disabled xblocks (as returned - by `disabled_xblocks`) or deprecated xblocks (as returned by `deprecated_xblocks`). + This method returns the QuerySet of XBlocks that can be created in Studio (by default, only fully supported + and provisionally supported XBlocks), as stored in `XBlockStudioConfiguration`. + Note that this method does NOT check the value `XBlockStudioConfigurationFlag`, nor does it take into account + fully disabled xblocks (as returned by `disabled_xblocks`) or deprecated xblocks + (as returned by `deprecated_xblocks`). Arguments: allow_unsupported (bool): If `True`, enabled but unsupported XBlocks will also be returned. @@ -36,13 +36,10 @@ def authorable_xblocks(allow_unsupported=False, name=None): name (str): If provided, filters the returned XBlocks to those with the provided name. This is useful for XBlocks with lots of template types. Returns: - QuerySet: If `XBlockStudioConfigurationFlag` is enabled, returns authorable XBlocks, - taking into account `support_level`, `enabled` and `name` (if specified). - If `XBlockStudioConfigurationFlag` is disabled, returns None. + QuerySet: Returns authorable XBlocks, taking into account `support_level`, `enabled` and `name` + (if specified) as specified by `XBlockStudioConfiguration`. Does not take into account whether or not + `XBlockStudioConfigurationFlag` is enabled. """ - if not XBlockStudioConfigurationFlag.is_enabled(): - return None - blocks = XBlockStudioConfiguration.objects.current_set().filter(enabled=True) if not allow_unsupported: blocks = blocks.exclude(support_level=XBlockStudioConfiguration.UNSUPPORTED) diff --git a/common/djangoapps/xblock_django/models.py b/common/djangoapps/xblock_django/models.py index 5a2442d5c9..bdac48d963 100644 --- a/common/djangoapps/xblock_django/models.py +++ b/common/djangoapps/xblock_django/models.py @@ -41,27 +41,10 @@ class XBlockDisableConfig(ConfigurationModel): return block_type in config.disabled_blocks.split() - @classmethod - def disabled_create_block_types(cls): - """ Return list of deprecated XBlock types. Merges types in settings file and field. """ - - config = cls.current() - xblock_types = config.disabled_create_blocks.split() if config.enabled else [] - - # Merge settings list with one in the admin config; - if hasattr(settings, 'DEPRECATED_ADVANCED_COMPONENT_TYPES'): - xblock_types.extend( - xblock_type for xblock_type in settings.DEPRECATED_ADVANCED_COMPONENT_TYPES - if xblock_type not in xblock_types - ) - - return xblock_types - def __unicode__(self): config = XBlockDisableConfig.current() - return u"Disabled xblocks = {disabled_xblocks}\nDeprecated xblocks = {disabled_create_block_types}".format( - disabled_xblocks=config.disabled_blocks, - disabled_create_block_types=config.disabled_create_block_types + return u"Disabled xblocks = {disabled_xblocks}".format( + disabled_xblocks=config.disabled_blocks ) diff --git a/common/djangoapps/xblock_django/tests/test_api.py b/common/djangoapps/xblock_django/tests/test_api.py index a1e56eafc9..2778bab620 100644 --- a/common/djangoapps/xblock_django/tests/test_api.py +++ b/common/djangoapps/xblock_django/tests/test_api.py @@ -61,28 +61,21 @@ class XBlockSupportTestCase(CacheIsolationTestCase): disabled_xblock_names = [block.name for block in disabled_xblocks()] self.assertItemsEqual(["survey", "poll"], disabled_xblock_names) - def test_authorable_blocks_flag_disabled(self): - """ - Tests authorable_xblocks returns None if the configuration flag is not enabled. - """ - self.assertFalse(XBlockStudioConfigurationFlag.is_enabled()) - self.assertIsNone(authorable_xblocks()) - def test_authorable_blocks_empty_model(self): """ - Tests authorable_xblocks returns an empty list if the configuration flag is enabled but - the XBlockStudioConfiguration table is empty. + Tests authorable_xblocks returns an empty list if XBlockStudioConfiguration table is empty, regardless + of whether or not XBlockStudioConfigurationFlag is enabled. """ - XBlockStudioConfigurationFlag(enabled=True).save() XBlockStudioConfiguration.objects.all().delete() + self.assertFalse(XBlockStudioConfigurationFlag.is_enabled()) + self.assertEqual(0, len(authorable_xblocks(allow_unsupported=True))) + XBlockStudioConfigurationFlag(enabled=True).save() self.assertEqual(0, len(authorable_xblocks(allow_unsupported=True))) def test_authorable_blocks(self): """ - Tests authorable_xblocks when configuration flag is enabled and name is not specified. + Tests authorable_xblocks when name is not specified. """ - XBlockStudioConfigurationFlag(enabled=True).save() - authorable_xblock_names = [block.name for block in authorable_xblocks()] self.assertItemsEqual(["done", "problem", "problem", "html"], authorable_xblock_names) @@ -99,7 +92,7 @@ class XBlockSupportTestCase(CacheIsolationTestCase): def test_authorable_blocks_by_name(self): """ - Tests authorable_xblocks when configuration flag is enabled and name is specified. + Tests authorable_xblocks when name is specified. """ def verify_xblock_fields(name, template, support_level, block): """ @@ -109,8 +102,6 @@ class XBlockSupportTestCase(CacheIsolationTestCase): self.assertEqual(template, block.template) self.assertEqual(support_level, block.support_level) - XBlockStudioConfigurationFlag(enabled=True).save() - # There are no xblocks with name video. authorable_blocks = authorable_xblocks(name="video") self.assertEqual(0, len(authorable_blocks)) diff --git a/common/djangoapps/xblock_django/tests/test_models.py b/common/djangoapps/xblock_django/tests/test_models.py deleted file mode 100644 index 72b73f642a..0000000000 --- a/common/djangoapps/xblock_django/tests/test_models.py +++ /dev/null @@ -1,58 +0,0 @@ -""" -Tests for deprecated xblocks in XBlockDisableConfig. -""" -import ddt - -from mock import patch -from django.test import TestCase -from xblock_django.models import XBlockDisableConfig - - -@ddt.ddt -class XBlockDisableConfigTestCase(TestCase): - """ - Tests for the DjangoXBlockUserService. - """ - def setUp(self): - super(XBlockDisableConfigTestCase, self).setUp() - - # Initialize the deprecated modules settings with empty list - XBlockDisableConfig.objects.create( - disabled_blocks='', enabled=True - ) - - @ddt.data( - ('poll', ['poll']), - ('poll survey annotatable textannotation', ['poll', 'survey', 'annotatable', 'textannotation']), - ('', []) - ) - @ddt.unpack - def test_deprecated_blocks_splitting(self, xblocks, expected_result): - """ - Tests that it correctly splits the xblocks defined in field. - """ - XBlockDisableConfig.objects.create( - disabled_create_blocks=xblocks, enabled=True - ) - - self.assertEqual( - XBlockDisableConfig.disabled_create_block_types(), expected_result - ) - - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', ['poll', 'survey']) - def test_deprecated_blocks_file(self): - """ - Tests that deprecated modules contain entries from settings file DEPRECATED_ADVANCED_COMPONENT_TYPES - """ - self.assertEqual(XBlockDisableConfig.disabled_create_block_types(), ['poll', 'survey']) - - @patch('django.conf.settings.DEPRECATED_ADVANCED_COMPONENT_TYPES', ['poll', 'survey']) - def test_deprecated_blocks_file_and_config(self): - """ - Tests that deprecated types defined in both settings and config model are read. - """ - XBlockDisableConfig.objects.create( - disabled_create_blocks='annotatable', enabled=True - ) - - self.assertEqual(XBlockDisableConfig.disabled_create_block_types(), ['annotatable', 'poll', 'survey']) diff --git a/common/djangoapps/xblock_django/tests/test_user_service.py b/common/djangoapps/xblock_django/tests/test_user_service.py index 0b4e8c0c72..1783bd274f 100644 --- a/common/djangoapps/xblock_django/tests/test_user_service.py +++ b/common/djangoapps/xblock_django/tests/test_user_service.py @@ -8,10 +8,13 @@ from xblock_django.user_service import ( ATTR_KEY_USER_ID, ATTR_KEY_USERNAME, ATTR_KEY_USER_IS_STAFF, + ATTR_KEY_USER_PREFERENCES, + USER_PREFERENCES_WHITE_LIST, ) from student.models import anonymous_id_for_user from student.tests.factories import UserFactory, AnonymousUserFactory from opaque_keys.edx.keys import CourseKey +from openedx.core.djangoapps.user_api.preferences.api import set_user_preference class UserServiceTestCase(TestCase): @@ -22,6 +25,9 @@ class UserServiceTestCase(TestCase): super(UserServiceTestCase, self).setUp() self.user = UserFactory(username="tester", email="test@tester.com") self.user.profile.name = "Test Tester" + set_user_preference(self.user, 'pref-lang', 'en') + set_user_preference(self.user, 'time_zone', 'US/Pacific') + set_user_preference(self.user, 'not_white_listed', 'hidden_value') self.anon_user = AnonymousUserFactory() def assert_is_anon_xb_user(self, xb_user): @@ -42,6 +48,12 @@ class UserServiceTestCase(TestCase): self.assertEqual(xb_user.opt_attrs[ATTR_KEY_USERNAME], dj_user.username) self.assertEqual(xb_user.opt_attrs[ATTR_KEY_USER_ID], dj_user.id) self.assertFalse(xb_user.opt_attrs[ATTR_KEY_USER_IS_STAFF]) + self.assertTrue( + all( + pref in USER_PREFERENCES_WHITE_LIST + for pref in xb_user.opt_attrs[ATTR_KEY_USER_PREFERENCES] + ) + ) def test_convert_anon_user(self): """ diff --git a/common/djangoapps/xblock_django/user_service.py b/common/djangoapps/xblock_django/user_service.py index 3adb5cb65b..3816c29690 100644 --- a/common/djangoapps/xblock_django/user_service.py +++ b/common/djangoapps/xblock_django/user_service.py @@ -3,13 +3,16 @@ Support for converting a django user to an XBlock user """ from django.contrib.auth.models import User from opaque_keys.edx.keys import CourseKey -from xblock.reference.user_service import XBlockUser, UserService +from openedx.core.djangoapps.user_api.preferences.api import get_user_preferences from student.models import anonymous_id_for_user, get_user_by_username_or_email +from xblock.reference.user_service import XBlockUser, UserService ATTR_KEY_IS_AUTHENTICATED = 'edx-platform.is_authenticated' ATTR_KEY_USER_ID = 'edx-platform.user_id' ATTR_KEY_USERNAME = 'edx-platform.username' ATTR_KEY_USER_IS_STAFF = 'edx-platform.user_is_staff' +ATTR_KEY_USER_PREFERENCES = 'edx-platform.user_preferences' +USER_PREFERENCES_WHITE_LIST = ['pref-lang', 'time_zone'] class DjangoXBlockUserService(UserService): @@ -69,6 +72,12 @@ class DjangoXBlockUserService(UserService): xblock_user.opt_attrs[ATTR_KEY_USER_ID] = django_user.id xblock_user.opt_attrs[ATTR_KEY_USERNAME] = django_user.username xblock_user.opt_attrs[ATTR_KEY_USER_IS_STAFF] = django_user.user_is_staff + user_preferences = get_user_preferences(django_user) + xblock_user.opt_attrs[ATTR_KEY_USER_PREFERENCES] = { + pref: user_preferences.get(pref) + for pref in USER_PREFERENCES_WHITE_LIST + if pref in user_preferences + } else: xblock_user.opt_attrs[ATTR_KEY_IS_AUTHENTICATED] = False diff --git a/common/lib/xmodule/xmodule/course_module.py b/common/lib/xmodule/xmodule/course_module.py index f35d40e431..b1ef5a2f0a 100644 --- a/common/lib/xmodule/xmodule/course_module.py +++ b/common/lib/xmodule/xmodule/course_module.py @@ -408,7 +408,7 @@ class CourseFields(object): ) advanced_modules = List( display_name=_("Advanced Module List"), - help=_("Enter the names of the advanced components to use in your course."), + help=_("Enter the names of the advanced modules to use in your course."), scope=Scope.settings ) has_children = True @@ -830,6 +830,15 @@ class CourseFields(object): }, scope=Scope.settings ) + allow_unsupported_xblocks = Boolean( + display_name=_("Add Unsupported Problems and Tools"), + help=_( + "Enter true or false. If true, you can add unsupported problems and tools to your course in Studio. " + "Unsupported problems and tools are not recommended for use in courses due to non-compliance with one or " + "more of the base requirements, such as testing, accessibility, internationalization, and documentation." + ), + scope=Scope.settings, default=False + ) class CourseModule(CourseFields, SequenceModule): # pylint: disable=abstract-method diff --git a/common/lib/xmodule/xmodule/js/spec/main_requirejs.js b/common/lib/xmodule/xmodule/js/spec/main_requirejs.js index d4692469e5..119d4e564f 100644 --- a/common/lib/xmodule/xmodule/js/spec/main_requirejs.js +++ b/common/lib/xmodule/xmodule/js/spec/main_requirejs.js @@ -35,20 +35,11 @@ baseUrl: '/base/', paths: { "moment": "common_static/js/vendor/moment.min", - "modernizr": "common_static/edx-pattern-library/js/modernizr-custom", - "afontgarde": "common_static/edx-pattern-library/js/afontgarde", - "edxicons": "common_static/edx-pattern-library/js/edx-icons", "draggabilly": "common_static/js/vendor/draggabilly", 'edx-ui-toolkit': 'common_static/edx-ui-toolkit' }, "moment": { exports: "moment" - }, - "modernizr": { - exports: "Modernizr" - }, - "afontgarde": { - exports: "AFontGarde" } }); }).call(this, RequireJS.requirejs, RequireJS.define); diff --git a/common/lib/xmodule/xmodule/modulestore/tests/test_cross_modulestore_import_export.py b/common/lib/xmodule/xmodule/modulestore/tests/test_cross_modulestore_import_export.py index 7ebef5e4d5..042198113f 100644 --- a/common/lib/xmodule/xmodule/modulestore/tests/test_cross_modulestore_import_export.py +++ b/common/lib/xmodule/xmodule/modulestore/tests/test_cross_modulestore_import_export.py @@ -121,6 +121,9 @@ class CrossStoreXMLRoundtrip(CourseComparisonTest, PartitionTestCase): self.exclude_field(None, 'wiki_slug') self.exclude_field(None, 'xml_attributes') self.exclude_field(None, 'parent') + # discussion_ids are auto-generated based on usage_id, so they should change across + # modulestores - see TNL-5001 + self.exclude_field(None, 'discussion_id') self.ignore_asset_key('_id') self.ignore_asset_key('uploadDate') self.ignore_asset_key('content_son') diff --git a/common/lib/xmodule/xmodule/seq_module.py b/common/lib/xmodule/xmodule/seq_module.py index abe377b98b..11933b0930 100644 --- a/common/lib/xmodule/xmodule/seq_module.py +++ b/common/lib/xmodule/xmodule/seq_module.py @@ -4,6 +4,8 @@ xModule implementation of a learning sequence # pylint: disable=abstract-method import collections +from datetime import datetime +from django.utils.timezone import UTC import json import logging from pkg_resources import resource_string @@ -38,13 +40,22 @@ class SequenceFields(object): # NOTE: Position is 1-indexed. This is silly, but there are now student # positions saved on prod, so it's not easy to fix. position = Integer(help="Last tab viewed in this sequence", scope=Scope.user_state) + due = Date( display_name=_("Due Date"), help=_("Enter the date by which problems are due."), scope=Scope.settings, ) - # Entrance Exam flag -- see cms/contentstore/views/entrance_exam.py for usage + hide_after_due = Boolean( + display_name=_("Hide sequence content After Due Date"), + help=_( + "If set, the sequence content is hidden for non-staff users after the due date has passed." + ), + default=False, + scope=Scope.settings, + ) + is_entrance_exam = Boolean( display_name=_("Is Entrance Exam"), help=_( @@ -97,16 +108,6 @@ class ProctoringFields(object): scope=Scope.settings, ) - hide_after_due = Boolean( - display_name=_("Hide Exam Results After Due Date"), - help=_( - "This setting overrides the default behavior of showing exam results after the due date has passed." - " Currently only supported for timed exams." - ), - default=False, - scope=Scope.settings, - ) - is_practice_exam = Boolean( display_name=_("Is Practice Exam"), help=_( @@ -177,73 +178,91 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule): raise NotFoundError('Unexpected dispatch type') + @classmethod + def verify_current_content_visibility(cls, due, hide_after_due): + """ + Returns whether the content visibility policy passes + for the given due date and hide_after_due values and + the current date-time. + """ + return ( + not due or + not hide_after_due or + datetime.now(UTC()) < due + ) + def student_view(self, context): + context = context or {} + self._capture_basic_metrics() + banner_text = None + special_html_view = self._hidden_content_student_view(context) or self._special_exam_student_view() + if special_html_view: + masquerading_as_specific_student = context.get('specific_masquerade', False) + banner_text, special_html = special_html_view + if special_html and not masquerading_as_specific_student: + return Fragment(special_html) + return self._student_view(context, banner_text) + + def _special_exam_student_view(self): + """ + Checks whether this sequential is a special exam. If so, returns + a banner_text or the fragment to display depending on whether + staff is masquerading. + """ + if self.is_time_limited: + special_exam_html = self._time_limited_student_view() + if special_exam_html: + banner_text = _("This exam is hidden from the learner.") + return banner_text, special_exam_html + + def _hidden_content_student_view(self, context): + """ + Checks whether the content of this sequential is hidden from the + runtime user. If so, returns a banner_text or the fragment to + display depending on whether staff is masquerading. + """ + if not self._can_user_view_content(): + subsection_format = (self.format or _("subsection")).lower() # pylint: disable=no-member + + # Translators: subsection_format refers to the assignment + # type of the subsection, such as Homework, Lab, Exam, etc. + banner_text = _( + "Because the due date has passed, " + "this {subsection_format} is hidden from the learner." + ).format(subsection_format=subsection_format) + + hidden_content_html = self.system.render_template( + 'hidden_content.html', + { + 'subsection_format': subsection_format, + 'progress_url': context.get('progress_url'), + } + ) + + return banner_text, hidden_content_html + + def _can_user_view_content(self): + """ + Returns whether the runtime user can view the content + of this sequential. + """ + return ( + self.runtime.user_is_staff or + self.verify_current_content_visibility(self.due, self.hide_after_due) + ) + + def _student_view(self, context, banner_text=None): + """ + Returns the rendered student view of the content of this + sequential. If banner_text is given, it is added to the + content. + """ display_items = self.get_display_items() - - # If we're rendering this sequence, but no position is set yet, - # or exceeds the length of the displayable items, - # default the position to the first element - if context.get('requested_child') == 'first': - self.position = 1 - elif context.get('requested_child') == 'last': - self.position = len(display_items) or 1 - elif self.position is None or self.position > len(display_items): - self.position = 1 - - ## Returns a set of all types of all sub-children - contents = [] + self._update_position(context, len(display_items)) fragment = Fragment() - context = context or {} - - bookmarks_service = self.runtime.service(self, "bookmarks") - context["username"] = self.runtime.service(self, "user").get_current_user().opt_attrs['edx-platform.username'] - - parent_module = self.get_parent() - display_names = [ - parent_module.display_name_with_default, - self.display_name_with_default - ] - - # We do this up here because proctored exam functionality could bypass - # rendering after this section. - self._capture_basic_metrics() - - # Is this sequential part of a timed or proctored exam? - masquerading = context.get('specific_masquerade', False) - special_exam_html = None - if self.is_time_limited: - special_exam_html = self._time_limited_student_view(context) - - # Do we have an applicable alternate rendering - # from the edx_proctoring subsystem? - if special_exam_html and not masquerading: - fragment.add_content(special_exam_html) - return fragment - - for child in display_items: - is_bookmarked = bookmarks_service.is_bookmarked(usage_key=child.scope_ids.usage_id) - context["bookmarked"] = is_bookmarked - - progress = child.get_progress() - rendered_child = child.render(STUDENT_VIEW, context) - fragment.add_frag_resources(rendered_child) - - childinfo = { - 'content': rendered_child.content, - 'page_title': getattr(child, 'tooltip_title', ''), - 'progress_status': Progress.to_js_status_str(progress), - 'progress_detail': Progress.to_js_detail_str(progress), - 'type': child.get_icon_class(), - 'id': child.scope_ids.usage_id.to_deprecated_string(), - 'bookmarked': is_bookmarked, - 'path': " > ".join(display_names + [child.display_name_with_default]), - } - - contents.append(childinfo) - params = { - 'items': contents, + 'items': self._render_student_view_for_items(context, display_items, fragment), 'element_id': self.location.html_id(), 'item_id': self.location.to_deprecated_string(), 'position': self.position, @@ -251,17 +270,66 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule): 'ajax_url': self.system.ajax_url, 'next_url': context.get('next_url'), 'prev_url': context.get('prev_url'), - 'override_hidden_exam': masquerading and special_exam_html is not None, + 'banner_text': banner_text, } - fragment.add_content(self.system.render_template("seq_module.html", params)) self._capture_full_seq_item_metrics(display_items) self._capture_current_unit_metrics(display_items) - # Get all descendant XBlock types and counts return fragment + def _update_position(self, context, number_of_display_items): + """ + Update the user's sequential position given the context and the + number_of_display_items + """ + # If we're rendering this sequence, but no position is set yet, + # or exceeds the length of the displayable items, + # default the position to the first element + if context.get('requested_child') == 'first': + self.position = 1 + elif context.get('requested_child') == 'last': + self.position = number_of_display_items or 1 + elif self.position is None or self.position > number_of_display_items: + self.position = 1 + + def _render_student_view_for_items(self, context, display_items, fragment): + """ + Updates the given fragment with rendered student views of the given + display_items. Returns a list of dict objects with information about + the given display_items. + """ + bookmarks_service = self.runtime.service(self, "bookmarks") + context["username"] = self.runtime.service(self, "user").get_current_user().opt_attrs['edx-platform.username'] + display_names = [ + self.get_parent().display_name_with_default, + self.display_name_with_default + ] + contents = [] + for item in display_items: + is_bookmarked = bookmarks_service.is_bookmarked(usage_key=item.scope_ids.usage_id) + context["bookmarked"] = is_bookmarked + + progress = item.get_progress() + rendered_item = item.render(STUDENT_VIEW, context) + fragment.add_frag_resources(rendered_item) + + iteminfo = { + 'content': rendered_item.content, + 'page_title': getattr(item, 'tooltip_title', ''), + 'progress_status': Progress.to_js_status_str(progress), + 'progress_detail': Progress.to_js_detail_str(progress), + 'type': item.get_icon_class(), + 'id': item.scope_ids.usage_id.to_deprecated_string(), + 'bookmarked': is_bookmarked, + 'path': " > ".join(display_names + [item.display_name_with_default]), + } + + contents.append(iteminfo) + + return contents + def _locations_in_subtree(self, node): """ The usage keys for all descendants of an XBlock/XModule as a flat list. @@ -328,7 +396,7 @@ class SequenceModule(SequenceFields, ProctoringFields, XModule): for block_type, count in curr_block_counts.items(): newrelic.agent.add_custom_parameter('seq.current.block_counts.{}'.format(block_type), count) - def _time_limited_student_view(self, context): + def _time_limited_student_view(self): """ Delegated rendering of a student view when in a time limited view. This ultimately calls down into edx_proctoring diff --git a/common/lib/xmodule/xmodule/tests/test_sequence.py b/common/lib/xmodule/xmodule/tests/test_sequence.py index fedb839d5e..f98319bee9 100644 --- a/common/lib/xmodule/xmodule/tests/test_sequence.py +++ b/common/lib/xmodule/xmodule/tests/test_sequence.py @@ -2,6 +2,10 @@ Tests for sequence module. """ # pylint: disable=no-member +from datetime import timedelta +import ddt +from django.utils.timezone import now +from freezegun import freeze_time from mock import Mock from xblock.reference.user_service import XBlockUser, UserService from xmodule.tests import get_test_system @@ -24,10 +28,15 @@ class StubUserService(UserService): return user +@ddt.ddt class SequenceBlockTestCase(XModuleXmlImportTest): """ Tests for the Sequence Module. """ + TODAY = now() + TOMORROW = TODAY + timedelta(days=1) + DAY_AFTER_TOMORROW = TOMORROW + timedelta(days=1) + @classmethod def setUpClass(cls): super(SequenceBlockTestCase, cls).setUpClass() @@ -54,13 +63,16 @@ class SequenceBlockTestCase(XModuleXmlImportTest): chapter_1 = xml.ChapterFactory.build(parent=course) # has 2 child sequences xml.ChapterFactory.build(parent=course) # has 0 child sequences chapter_3 = xml.ChapterFactory.build(parent=course) # has 1 child sequence - chapter_4 = xml.ChapterFactory.build(parent=course) # has 2 child sequences + chapter_4 = xml.ChapterFactory.build(parent=course) # has 1 child sequence, with hide_after_due xml.SequenceFactory.build(parent=chapter_1) xml.SequenceFactory.build(parent=chapter_1) sequence_3_1 = xml.SequenceFactory.build(parent=chapter_3) # has 3 verticals - xml.SequenceFactory.build(parent=chapter_4) - xml.SequenceFactory.build(parent=chapter_4) + xml.SequenceFactory.build( # sequence_4_1 + parent=chapter_4, + hide_after_due=str(True), + due=str(cls.TOMORROW), + ) for _ in range(3): xml.VerticalFactory.build(parent=sequence_3_1) @@ -98,9 +110,7 @@ class SequenceBlockTestCase(XModuleXmlImportTest): def test_render_student_view(self): html = self._get_rendered_student_view( self.sequence_3_1, - requested_child=None, - next_url='NextSequential', - prev_url='PrevSequential' + extra_context=dict(next_url='NextSequential', prev_url='PrevSequential'), ) self._assert_view_at_position(html, expected_position=1) self.assertIn(unicode(self.sequence_3_1.location), html) @@ -115,20 +125,15 @@ class SequenceBlockTestCase(XModuleXmlImportTest): html = self._get_rendered_student_view(self.sequence_3_1, requested_child='last') self._assert_view_at_position(html, expected_position=3) - def _get_rendered_student_view(self, sequence, requested_child, next_url=None, prev_url=None): + def _get_rendered_student_view(self, sequence, requested_child=None, extra_context=None): """ Returns the rendered student view for the given sequence and the requested_child parameter. """ - return sequence.xmodule_runtime.render( - sequence, - STUDENT_VIEW, - { - 'requested_child': requested_child, - 'next_url': next_url, - 'prev_url': prev_url, - }, - ).content + context = {'requested_child': requested_child} + if extra_context: + context.update(extra_context) + return sequence.xmodule_runtime.render(sequence, STUDENT_VIEW, context).content def _assert_view_at_position(self, rendered_html, expected_position): """ @@ -140,3 +145,46 @@ class SequenceBlockTestCase(XModuleXmlImportTest): html = self._get_rendered_student_view(self.sequence_3_1, requested_child=None) for child in self.sequence_3_1.children: self.assertIn("'page_title': '{}'".format(child.name), html) + + def test_hidden_content_before_due(self): + html = self._get_rendered_student_view(self.sequence_4_1) + self.assertIn("seq_module.html", html) + self.assertIn("'banner_text': None", html) + + @freeze_time(DAY_AFTER_TOMORROW) + @ddt.data( + (None, 'subsection'), + ('Homework', 'homework'), + ) + @ddt.unpack + def test_hidden_content_past_due(self, format_type, expected_text): + progress_url = 'http://test_progress_link' + self._set_sequence_format(self.sequence_4_1, format_type) + html = self._get_rendered_student_view( + self.sequence_4_1, + extra_context=dict(progress_url=progress_url), + ) + self.assertIn("hidden_content.html", html) + self.assertIn(progress_url, html) + self.assertIn("'subsection_format': '{}'".format(expected_text), html) + + @freeze_time(DAY_AFTER_TOMORROW) + def test_masquerade_hidden_content_past_due(self): + self._set_sequence_format(self.sequence_4_1, "Homework") + html = self._get_rendered_student_view( + self.sequence_4_1, + extra_context=dict(specific_masquerade=True), + ) + self.assertIn("seq_module.html", html) + self.assertIn( + "'banner_text': 'Because the due date has passed, " + "this homework is hidden from the learner.'", + html + ) + + def _set_sequence_format(self, sequence, format_type): + """ + Sets the format field on the given sequence to the + given value. + """ + sequence._xmodule.format = format_type # pylint: disable=protected-access diff --git a/common/lib/xmodule/xmodule/xml_module.py b/common/lib/xmodule/xmodule/xml_module.py index eacfb2037f..fa70cc3634 100644 --- a/common/lib/xmodule/xmodule/xml_module.py +++ b/common/lib/xmodule/xmodule/xml_module.py @@ -335,7 +335,7 @@ class XmlParserMixin(object): """ # VS[compat] -- just have the url_name lookup, once translation is done - url_name = node.get('url_name', node.get('slug')) + url_name = cls._get_url_name(node) def_id = id_generator.create_definition(node.tag, url_name) usage_id = id_generator.create_usage(def_id) aside_children = [] @@ -344,8 +344,7 @@ class XmlParserMixin(object): if is_pointer_tag(node): # new style: # read the actual definition file--named using url_name.replace(':','/') - filepath = cls._format_filepath(node.tag, name_to_pathname(url_name)) - definition_xml = cls.load_file(filepath, runtime.resources_fs, def_id) + definition_xml, filepath = cls.load_definition_xml(node, runtime, def_id) aside_children = runtime.parse_asides(definition_xml, def_id, usage_id, id_generator) else: filepath = None @@ -408,6 +407,23 @@ class XmlParserMixin(object): return xblock + @classmethod + def _get_url_name(cls, node): + """ + Reads url_name attribute from the node + """ + return node.get('url_name', node.get('slug')) + + @classmethod + def load_definition_xml(cls, node, runtime, def_id): + """ + Loads definition_xml stored in a dedicated file + """ + url_name = cls._get_url_name(node) + filepath = cls._format_filepath(node.tag, name_to_pathname(url_name)) + definition_xml = cls.load_file(filepath, runtime.resources_fs, def_id) + return definition_xml, filepath + @classmethod def _format_filepath(cls, category, name): return u'{category}/{name}.{ext}'.format(category=category, diff --git a/common/static/common/js/discussion/discussion_router.js b/common/static/common/js/discussion/discussion_router.js index 14ce7a6bf4..c490d575b9 100644 --- a/common/static/common/js/discussion/discussion_router.js +++ b/common/static/common/js/discussion/discussion_router.js @@ -1,4 +1,4 @@ -/* globals DiscussionThreadListView, DiscussionThreadView, DiscussionUtil, NewPostView */ +/* globals DiscussionThreadListView, DiscussionThreadView, DiscussionUtil, NewPostView, Thread */ (function() { 'use strict'; var __hasProp = {}.hasOwnProperty, @@ -18,9 +18,20 @@ return child; }; + function getSingleThreadRoute(commentable_id, thread_id) { + return commentable_id + "/threads/" + thread_id; + } + if (typeof Backbone !== "undefined" && Backbone !== null) { this.DiscussionRouter = (function(_super) { + var allThreadsRoute = "", + singleThreadRoute = getSingleThreadRoute(":forum_name", ":thread_id"), // :forum_name/threads/:thread_id + routes = {}; + + routes[allThreadsRoute] = "allThreads"; + routes[singleThreadRoute] = "showThread"; + __extends(DiscussionRouter, _super); function DiscussionRouter() { @@ -40,16 +51,16 @@ this.showMain = function() { return DiscussionRouter.prototype.showMain.apply(self, arguments); }; + this.renderThreadView = function() { + return DiscussionRouter.prototype.renderThreadView.apply(self, arguments); + }; this.setActiveThread = function() { return DiscussionRouter.prototype.setActiveThread.apply(self, arguments); }; return DiscussionRouter.__super__.constructor.apply(this, arguments); } - DiscussionRouter.prototype.routes = { - "": "allThreads", - ":forum_name/threads/:thread_id": "showThread" - }; + DiscussionRouter.prototype.routes = routes; DiscussionRouter.prototype.initialize = function(options) { var self = this; @@ -82,23 +93,50 @@ DiscussionRouter.prototype.allThreads = function() { this.nav.updateSidebar(); - return this.nav.goHome(); + this.nav.goHome(); }; DiscussionRouter.prototype.setActiveThread = function() { if (this.thread) { - return this.nav.setActiveThread(this.thread.get("id")); - } else { - return this.nav.goHome; + this.nav.setActiveThread(this.thread.get("id")); } }; DiscussionRouter.prototype.showThread = function(forum_name, thread_id) { + var self = this; this.thread = this.discussion.get(thread_id); + + if (this.thread) { + this.renderThreadView(); + return; + } + + // if thread is not loaded yet for some reason - try loading it + DiscussionUtil.safeAjax({ + url: DiscussionUtil.urlFor('retrieve_single_thread', forum_name, thread_id) + }).done(function(data) { + // if succeded - proceed normally + self.thread = new Thread(data.content); + self.discussion.add(self.thread); + self.renderThreadView(); + }).fail(function(xhr) { + // otherwise display error message and navigate to all threads view + var errorMsg; + if (xhr.status === 404) { + errorMsg = gettext("The thread you selected has been deleted. Please select another thread."); + } else { + errorMsg = gettext("We had some trouble loading more responses. Please try again."); + } + DiscussionUtil.discussionAlert(gettext("Sorry"), errorMsg); + this.allThreads(); + }); + }; + + DiscussionRouter.prototype.renderThreadView = function() { this.thread.set("unread_comments_count", 0); this.thread.set("read", true); this.setActiveThread(); - return this.showMain(); + this.showMain(); }; DiscussionRouter.prototype.showMain = function() { @@ -123,26 +161,23 @@ this.main.on("thread:responses:rendered", function() { return self.nav.updateSidebar(); }); - return this.thread.on("thread:thread_type_updated", this.showMain); + this.thread.on("thread:thread_type_updated", this.showMain); }; DiscussionRouter.prototype.navigateToThread = function(thread_id) { - var thread; + var thread, targetThreadRoute; thread = this.discussion.get(thread_id); - return this.navigate("" + (thread.get("commentable_id")) + "/threads/" + thread_id, { - trigger: true - }); + targetThreadRoute = getSingleThreadRoute(thread.get("commentable_id"), thread_id); + this.navigate(targetThreadRoute, {trigger: true}); }; DiscussionRouter.prototype.navigateToAllThreads = function() { - return this.navigate("", { - trigger: true - }); + this.navigate(allThreadsRoute, {trigger: true}); }; DiscussionRouter.prototype.showNewPost = function() { var self = this; - return $('.forum-content').fadeOut({ + $('.forum-content').fadeOut({ duration: 200, complete: function() { return self.newPost.fadeIn(200).focus(); @@ -151,7 +186,7 @@ }; DiscussionRouter.prototype.hideNewPost = function() { - return this.newPost.fadeOut({ + this.newPost.fadeOut({ duration: 200, complete: function() { return $('.forum-content').fadeIn(200).find('.thread-wrapper').focus(); diff --git a/common/static/common/js/discussion/main.js b/common/static/common/js/discussion/main.js index 866a3491d1..5f34c6af9d 100644 --- a/common/static/common/js/discussion/main.js +++ b/common/static/common/js/discussion/main.js @@ -34,10 +34,11 @@ course_settings: course_settings }); /* jshint +W031*/ - return Backbone.history.start({ - pushState: true, - root: "/courses/" + $$course_id + "/discussion/forum/" - }); + if (!Backbone.History.started) { + Backbone.history.start({pushState: true, root: "/courses/" + $$course_id + "/discussion/forum/"}); + } else { + Backbone.history.loadUrl(window.location.pathname); + } } }; DiscussionProfileApp = { diff --git a/common/static/common/js/discussion/utils.js b/common/static/common/js/discussion/utils.js index be3066b079..e4f7b1cb8a 100644 --- a/common/static/common/js/discussion/utils.js +++ b/common/static/common/js/discussion/utils.js @@ -1,4 +1,4 @@ -/* globals $$course_id, Content, Markdown, URI */ +/* globals $$course_id, Content, Markdown, MathJax, URI */ (function() { 'use strict'; this.DiscussionUtil = (function() { @@ -65,7 +65,7 @@ DiscussionUtil.generateDiscussionLink = function(cls, txt, handler) { return $("") .addClass("discussion-link").attr("href", "#") - .addClass(cls).html(txt).click(function() {return handler(this);}); + .addClass(cls).text(txt).click(function() {return handler(this);}); }; DiscussionUtil.urlFor = function(name, param, param1, param2) { @@ -134,15 +134,17 @@ }; DiscussionUtil.showLoadingIndicator = function(element, takeFocus) { - this.$_loading = $( - "
      " + - gettext("Loading content") + - "
      " + var animElem = edx.HtmlUtils.joinHtml( + edx.HtmlUtils.HTML("
      "), + gettext("Loading content"), + edx.HtmlUtils.HTML("
      ") ); - element.after(this.$_loading); + var $animElem = $(animElem.toString()); + element.after($animElem); + this.$_loading = $animElem; if (takeFocus) { this.makeFocusTrap(this.$_loading); - return this.$_loading.focus(); + this.$_loading.focus(); } }; @@ -151,42 +153,35 @@ }; DiscussionUtil.discussionAlert = function(header, body) { - var alertDiv, alertTrigger; + var $alertDiv, $alertTrigger; + // Prevents "text" is undefined in underscore.js in tests - looks like some tests use + // discussions somehow, but never append discussion fixtures or reset them; this causes + // entire test suite (lms, cms, common) to fail due to unhandled JS exception + var popupTemplate = $("#alert-popup").html() || ""; if ($("#discussion-alert").length === 0) { - alertDiv = $( - "
      -
      +
      diff --git a/lms/templates/hidden_content.html b/lms/templates/hidden_content.html new file mode 100644 index 0000000000..7e6f4b5c04 --- /dev/null +++ b/lms/templates/hidden_content.html @@ -0,0 +1,26 @@ +<%page expression_filter="h"/> +<%! +from django.utils.translation import ugettext as _ +from openedx.core.djangolib.markup import HTML, Text +%> + +
      +

      + ${_("The due date for this {subsection_format} has passed.").format( + subsection_format=subsection_format, + )} +

      +
      +

      + ${Text(_( + "Because the due date has passed, this {subsection_format} " + "is no longer available.{line_break}If you have completed this {subsection_format}, " + "your grade is available on the {link_start}progress page{link_end}." + )).format( + subsection_format=subsection_format, + line_break=HTML("
      "), + link_start=HTML("").format(progress_url), + link_end=HTML(""), + )} +

      +
      diff --git a/lms/templates/instructor/instructor_dashboard_2/certificate-bulk-white-list.underscore b/lms/templates/instructor/instructor_dashboard_2/certificate-bulk-white-list.underscore index 462f7a0501..f16557a2a3 100644 --- a/lms/templates/instructor/instructor_dashboard_2/certificate-bulk-white-list.underscore +++ b/lms/templates/instructor/instructor_dashboard_2/certificate-bulk-white-list.underscore @@ -4,14 +4,15 @@ <%- gettext("Upload a comma separated values (.csv) file that contains the usernames or email addresses of learners who have been given exceptions. Include the username or email address in the first comma separated field. You can include an optional note describing the reason for the exception in the second comma separated field.") %>

      -
      - " /> -
      - <%- gettext("Browse") %> - +
      + + +
      -
      -
      +
      diff --git a/lms/templates/instructor/instructor_dashboard_2/certificate-invalidation.underscore b/lms/templates/instructor/instructor_dashboard_2/certificate-invalidation.underscore index 98cd3504ac..9b0cfadfc8 100644 --- a/lms/templates/instructor/instructor_dashboard_2/certificate-invalidation.underscore +++ b/lms/templates/instructor/instructor_dashboard_2/certificate-invalidation.underscore @@ -3,9 +3,16 @@

      - - +
      + + +
      +
      + + +

      +
      diff --git a/lms/templates/instructor/instructor_dashboard_2/certificate-white-list-editor.underscore b/lms/templates/instructor/instructor_dashboard_2/certificate-white-list-editor.underscore index 6f707db514..1bc7f2f7bc 100644 --- a/lms/templates/instructor/instructor_dashboard_2/certificate-white-list-editor.underscore +++ b/lms/templates/instructor/instructor_dashboard_2/certificate-white-list-editor.underscore @@ -2,11 +2,14 @@

      <%- gettext("Enter the username or email address of each learner that you want to add as an exception.") %>

      - - + + + + +
      - +
      diff --git a/lms/templates/instructor/instructor_dashboard_2/certificates.html b/lms/templates/instructor/instructor_dashboard_2/certificates.html index 914927d714..abd9b55374 100644 --- a/lms/templates/instructor/instructor_dashboard_2/certificates.html +++ b/lms/templates/instructor/instructor_dashboard_2/certificates.html @@ -51,59 +51,59 @@ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_str
    % if not section_data['is_self_paced']: -
    +
    -
    -

    ${_("Student-Generated Certificates")}

    - % if section_data['enabled_for_course']: -
    - - - -
    - % elif section_data['can_enable_for_course']: -
    - - - -
    - % else: -

    ${_("You must successfully generate example certificates before you enable student-generated certificates.")}

    - - % endif -
    +
    +

    ${_("Student-Generated Certificates")}

    + % if section_data['enabled_for_course']: +
    + + + +
    + % elif section_data['can_enable_for_course']: +
    + + + +
    + % else: +

    ${_("You must successfully generate example certificates before you enable student-generated certificates.")}

    + + % endif +
    % endif % if section_data['instructor_generation_enabled'] and not (section_data['enabled_for_course'] and section_data['html_cert_enabled']): -
    +
    -
    -

    ${_("Generate Certificates")}

    -
    - % if section_data['html_cert_enabled'] and section_data['active_certificate'] is None: -

    ${_("Course certificate generation requires an activated web certificate configuration.")}

    - - % else: -

    - ${_("When you are ready to generate certificates for your course, click Generate Certificates. You do not need to do this if you have set the certificate mode to on-demand generation.")} -

    - - %endif -
    -
    -
    +
    +

    ${_("Generate Certificates")}

    +
    + % if section_data['html_cert_enabled'] and section_data['active_certificate'] is None: +

    ${_("Course certificate generation requires an activated web certificate configuration.")}

    + + % else: +

    + ${_("When you are ready to generate certificates for your course, click Generate Certificates. You do not need to do this if you have set the certificate mode to on-demand generation.")} +

    + + %endif +
    +
    +
    %if settings.FEATURES.get('ENABLE_INSTRUCTOR_BACKGROUND_TASKS'): -
    -
    -

    ${_("Pending Tasks")}

    -
    -

    ${_("The status for any active tasks appears in a table below.")}

    -
    -
    -
    -
    +
    +
    +

    ${_("Pending Tasks")}

    +
    +

    ${_("The status for any active tasks appears in a table below.")}

    +
    +
    +
    +
    %endif % endif @@ -114,27 +114,31 @@ from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_str

    ${_('To regenerate certificates for your course, choose the learners who will receive regenerated certificates and click Regenerate Certificates.')}

    - - -
    - -
    - -
    -
    - +
    + ${_('Choose learner types for regeneration')} +
    + +
    +
    + +
    +
    + +
    +
    +

    diff --git a/lms/templates/instructor/instructor_dashboard_2/membership.html b/lms/templates/instructor/instructor_dashboard_2/membership.html index 548abdb0bc..d065cfbffd 100644 --- a/lms/templates/instructor/instructor_dashboard_2/membership.html +++ b/lms/templates/instructor/instructor_dashboard_2/membership.html @@ -92,15 +92,14 @@ from openedx.core.djangoapps.course_groups.partition_scheme import get_cohorted_

    ${_("To register and enroll a list of users in this course, choose a CSV file that contains the following columns in this exact order: email, username, name, and country. Please include one student per row and do not include any headers, footers, or blank lines.")}

    - - -
    - Browse - - + + +
    - +
    diff --git a/lms/templates/learner_dashboard/course_card.underscore b/lms/templates/learner_dashboard/course_card.underscore index e50ec8e8c5..fe035c459c 100644 --- a/lms/templates/learner_dashboard/course_card.underscore +++ b/lms/templates/learner_dashboard/course_card.underscore @@ -1,33 +1,31 @@

    - <% if (course_url){ %> - + <% if ( marketing_url || course_url ) { %> + <%- display_name %> - <% }else{ %> + <% } else { %> <%- display_name %> <% } %>

    - <% if (start_date && end_date){ %> + <% if (start_date && end_date) { %> <%- start_date %> - <%- end_date %> - <% } %> diff --git a/lms/templates/learner_dashboard/course_enroll.underscore b/lms/templates/learner_dashboard/course_enroll.underscore index 8db361e8cf..ab733d5410 100644 --- a/lms/templates/learner_dashboard/course_enroll.underscore +++ b/lms/templates/learner_dashboard/course_enroll.underscore @@ -1,18 +1,18 @@ -<% if (is_enrolled){ %> +<% if (is_enrolled) { %>
    <%- gettext('enrolled') %>
    - <% if (is_enrollment_open || is_course_ended){ %> + <% if (is_enrollment_open || is_course_ended) { %> - <% if (is_enrollment_open){ %> + <% if (is_enrollment_open) { %> <%- gettext('View Course') %> - <% } else if (course_ended){ %> + <% } else if (is_course_ended) { %> <%- gettext('View Archived Course') %> <% } %> <% } %> -<% }else{ %> - <% if (enrollable_run_modes.length > 0){ %> +<% } else { %> + <% if (enrollable_run_modes.length > 0) { %>
    <%- gettext('not enrolled') %>
    - <% if (enrollable_run_modes.length > 1){ %> + <% if (enrollable_run_modes.length > 1) { %>
    <%- gettext('Please select a course date') %> @@ -24,10 +24,10 @@ - <% _.each (enrollable_run_modes, function(runMode){ %> + <% _.each (enrollable_run_modes, function(runMode) { %>