├── .annotation_safe_list.yml ├── .babelrc ├── .coveragerc ├── .coveragerc-local ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github ├── CODEOWNERS ├── actions │ ├── unit-tests │ │ └── action.yml │ └── verify-tests-count │ │ └── action.yml ├── dependabot.yml ├── pull_request_template.md ├── renovate.json └── workflows │ ├── add-depr-ticket-to-depr-board.yml │ ├── add-remove-label-on-comment.yml │ ├── check-for-tutorial-prs.yml │ ├── ci-static-analysis.yml │ ├── commitlint.yml │ ├── docker-compose.yml.mysqldbdump │ ├── docker-publish.yml │ ├── docs-build-check.yml │ ├── init │ └── 01.sql │ ├── js-tests.yml │ ├── lint-imports.yml │ ├── lockfileversion-check.yml │ ├── migrations-check-mysql8.yml │ ├── migrations-check.yml │ ├── pr-automerge-open-release.yml │ ├── publish-ci-docker-image.yml │ ├── pylint-checks.yml │ ├── quality-checks.yml │ ├── self-assign-issue.yml │ ├── shellcheck.yml │ ├── static-assets-check.yml │ ├── unit-test-shards.json │ ├── unit-tests-gh-hosted.yml │ ├── unit-tests.yml │ ├── upgrade-one-python-dependency.yml │ ├── upgrade-python-requirements.yml │ ├── verify-dunder-init.yml │ └── verify-gha-unit-tests-count.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .pii_annotations.yml ├── .readthedocs.yaml ├── .stylelintignore ├── .tx └── config ├── CHANGELOG.rst ├── Dockerfile ├── LICENSE ├── Makefile ├── README.rst ├── cms ├── README.rst ├── __init__.py ├── celery.py ├── conftest.py ├── djangoapps │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── urls.py │ │ └── v1 │ │ │ ├── __init__.py │ │ │ ├── serializers │ │ │ ├── __init__.py │ │ │ └── course_runs.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_serializers │ │ │ │ ├── __init__.py │ │ │ │ └── test_course_runs.py │ │ │ ├── test_views │ │ │ │ ├── __init__.py │ │ │ │ └── test_course_runs.py │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ └── views │ │ │ ├── __init__.py │ │ │ └── course_runs.py │ ├── cms_user_tasks │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── signals.py │ │ ├── tasks.py │ │ └── tests.py │ ├── contentstore │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── test_import.py │ │ │ │ ├── test_quality.py │ │ │ │ └── test_validation.py │ │ │ ├── urls.py │ │ │ └── views │ │ │ │ ├── __init__.py │ │ │ │ ├── course_import.py │ │ │ │ ├── course_quality.py │ │ │ │ ├── course_validation.py │ │ │ │ └── utils.py │ │ ├── apps.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── tests │ │ │ │ └── __init__.py │ │ │ ├── waffle.py │ │ │ └── waffle_utils.py │ │ ├── course_group_config.py │ │ ├── course_info_model.py │ │ ├── courseware_index.py │ │ ├── debug_file_uploader.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 0001-validation-at-course-save.rst │ │ │ │ ├── 0002-restful-studio-apis-for-MFE.rst │ │ │ │ └── 0003-hybrid-approach-for-public-apis.rst │ │ ├── errors.py │ │ ├── exams.py │ │ ├── exceptions.py │ │ ├── git_export_utils.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── backfill_course_outlines.py │ │ │ │ ├── backfill_course_tabs.py │ │ │ │ ├── backfill_orgs_and_org_courses.py │ │ │ │ ├── clean_cert_name.py │ │ │ │ ├── clean_stale_certificate_available_dates.py │ │ │ │ ├── cleanup_assets.py │ │ │ │ ├── compare_course_index_entries.py │ │ │ │ ├── create_course.py │ │ │ │ ├── delete_course.py │ │ │ │ ├── delete_orphans.py │ │ │ │ ├── edit_course_tabs.py │ │ │ │ ├── empty_asset_trashcan.py │ │ │ │ ├── export.py │ │ │ │ ├── export_all_courses.py │ │ │ │ ├── export_content_library.py │ │ │ │ ├── export_olx.py │ │ │ │ ├── fix_not_found.py │ │ │ │ ├── force_publish.py │ │ │ │ ├── generate_courses.py │ │ │ │ ├── git_export.py │ │ │ │ ├── import.py │ │ │ │ ├── import_content_library.py │ │ │ │ ├── prompt.py │ │ │ │ ├── reindex_course.py │ │ │ │ ├── reindex_library.py │ │ │ │ ├── reset_course_content.py │ │ │ │ ├── restore_asset_from_trashcan.py │ │ │ │ ├── sync_courses.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── data │ │ │ │ │ ├── Version0_drafts.tar.gz │ │ │ │ │ └── Version1_drafts.tar.gz │ │ │ │ ├── test_backfill_course_outlines.py │ │ │ │ ├── test_backfill_course_tabs.py │ │ │ │ ├── test_backfill_orgs_and_org_courses.py │ │ │ │ ├── test_clean_stale_certificate_availability_dates.py │ │ │ │ ├── test_cleanup_assets.py │ │ │ │ ├── test_create_course.py │ │ │ │ ├── test_delete_course.py │ │ │ │ ├── test_delete_orphans.py │ │ │ │ ├── test_export.py │ │ │ │ ├── test_export_all_courses.py │ │ │ │ ├── test_export_olx.py │ │ │ │ ├── test_fix_not_found.py │ │ │ │ ├── test_force_publish.py │ │ │ │ ├── test_generate_courses.py │ │ │ │ ├── test_git_export.py │ │ │ │ ├── test_import.py │ │ │ │ ├── test_reindex_courses.py │ │ │ │ ├── test_reindex_library.py │ │ │ │ ├── test_reset_course_content.py │ │ │ │ └── test_sync_courses.py │ │ │ │ ├── update_course_outline.py │ │ │ │ ├── utils.py │ │ │ │ └── xlint.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_add_assets_page_flag.py │ │ │ ├── 0003_remove_assets_page_flag.py │ │ │ ├── 0004_remove_push_notification_configmodel_table.py │ │ │ ├── 0005_add_enable_checklists_quality_waffle_flag.py │ │ │ ├── 0006_courseoutlineregenerate.py │ │ │ ├── 0007_backfillcoursetabsconfig.py │ │ │ ├── 0008_cleanstalecertificateavailabilitydatesconfig.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── outlines.py │ │ ├── outlines_regenerate.py │ │ ├── proctoring.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ ├── v0 │ │ │ │ ├── __init__.py │ │ │ │ ├── serializers │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── advanced_settings.py │ │ │ │ │ └── tabs.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_advanced_settings.py │ │ │ │ │ └── test_tabs.py │ │ │ │ ├── urls.py │ │ │ │ └── views │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── advanced_settings.py │ │ │ │ │ └── tabs.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── rules.py │ │ ├── signals │ │ │ ├── __init__.py │ │ │ ├── handlers.py │ │ │ ├── signals.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_handlers.py │ │ ├── storage.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_admin.py │ │ │ ├── test_clone_course.py │ │ │ ├── test_contentstore.py │ │ │ ├── test_core_caching.py │ │ │ ├── test_course_create_rerun.py │ │ │ ├── test_course_listing.py │ │ │ ├── test_course_settings.py │ │ │ ├── test_courseware_index.py │ │ │ ├── test_crud.py │ │ │ ├── test_exams.py │ │ │ ├── test_export_git.py │ │ │ ├── test_gating.py │ │ │ ├── test_i18n.py │ │ │ ├── test_import.py │ │ │ ├── test_import_draft_order.py │ │ │ ├── test_import_pure_xblock.py │ │ │ ├── test_libraries.py │ │ │ ├── test_orphan.py │ │ │ ├── test_outlines.py │ │ │ ├── test_permissions.py │ │ │ ├── test_proctoring.py │ │ │ ├── test_request_event.py │ │ │ ├── test_signals.py │ │ │ ├── test_tasks.py │ │ │ ├── test_transcripts_utils.py │ │ │ ├── test_users_default_role.py │ │ │ ├── test_utils.py │ │ │ ├── test_video_utils.py │ │ │ ├── tests.py │ │ │ └── utils.py │ │ ├── toggles.py │ │ ├── utils.py │ │ ├── video_utils.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── access.py │ │ │ ├── assets.py │ │ │ ├── block.py │ │ │ ├── certificates.py │ │ │ ├── checklists.py │ │ │ ├── component.py │ │ │ ├── course.py │ │ │ ├── dev.py │ │ │ ├── entrance_exam.py │ │ │ ├── error.py │ │ │ ├── export_git.py │ │ │ ├── helpers.py │ │ │ ├── import_export.py │ │ │ ├── library.py │ │ │ ├── organization.py │ │ │ ├── preview.py │ │ │ ├── public.py │ │ │ ├── session_kv_store.py │ │ │ ├── tabs.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_access.py │ │ │ ├── test_assets.py │ │ │ ├── test_block.py │ │ │ ├── test_certificates.py │ │ │ ├── test_clipboard_paste.py │ │ │ ├── test_container_page.py │ │ │ ├── test_course_index.py │ │ │ ├── test_course_updates.py │ │ │ ├── test_credit_eligibility.py │ │ │ ├── test_discussion_enabled.py │ │ │ ├── test_entrance_exam.py │ │ │ ├── test_exam_settings_view.py │ │ │ ├── test_gating.py │ │ │ ├── test_group_configurations.py │ │ │ ├── test_header_menu.py │ │ │ ├── test_helpers.py │ │ │ ├── test_import_export.py │ │ │ ├── test_library.py │ │ │ ├── test_organizations.py │ │ │ ├── test_preview.py │ │ │ ├── test_tabs.py │ │ │ ├── test_textbooks.py │ │ │ ├── test_transcript_settings.py │ │ │ ├── test_transcripts.py │ │ │ ├── test_unit_page.py │ │ │ ├── test_user.py │ │ │ ├── test_videos.py │ │ │ └── utils.py │ │ │ ├── transcript_settings.py │ │ │ ├── transcripts_ajax.py │ │ │ ├── user.py │ │ │ └── videos.py │ ├── course_creators │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_add_org_support_for_course_creators.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_admin.py │ │ │ └── test_views.py │ │ └── views.py │ ├── coursegraph │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── dump_to_neo4j.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_dump_to_neo4j.py │ │ │ │ └── utils.py │ │ ├── models.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_admin.py │ ├── export_course_metadata │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── export_course_metadata_for_all_courses.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_export_course_metadata_for_all_courses.py │ │ ├── signals.py │ │ ├── storage.py │ │ ├── tasks.py │ │ ├── test_signals.py │ │ └── toggles.py │ ├── maintenance │ │ ├── __init__.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── models │ │ ├── __init__.py │ │ └── settings │ │ │ ├── __init__.py │ │ │ ├── course_grading.py │ │ │ ├── course_metadata.py │ │ │ ├── encoder.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_settings.py │ │ │ └── waffle.py │ ├── pipeline_js │ │ ├── __init__.py │ │ ├── js │ │ │ └── xmodule.js │ │ └── utils.py │ └── xblock_config │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0001_squashed_0003_move_course_edit_lti_fields_enabled_flag_model_to_lti_consumer.py │ │ ├── 0002_courseeditltifieldsenabledflag.py │ │ ├── 0003_move_course_edit_lti_fields_enabled_flag_model_to_lti_consumer.py │ │ └── __init__.py │ │ └── models.py ├── docker_cms_gunicorn.py ├── envs │ ├── __init__.py │ ├── analytics_exporter.py │ ├── bok_choy.auth.json │ ├── bok_choy.env.json │ ├── bok_choy.py │ ├── bok_choy.yml │ ├── bok_choy_docker.auth.json │ ├── bok_choy_docker.env.json │ ├── bok_choy_docker.py │ ├── bok_choy_docker.yml │ ├── common.py │ ├── devstack-experimental.yml │ ├── devstack.py │ ├── devstack_docker.py │ ├── devstack_optimized.py │ ├── devstack_with_worker.py │ ├── docker-production.py │ ├── help_tokens.ini │ ├── openstack.py │ ├── production.py │ ├── test.py │ └── test_static_optimized.py ├── lib │ ├── __init__.py │ └── xblock │ │ ├── __init__.py │ │ ├── authoring_mixin.py │ │ ├── field_data.py │ │ ├── runtime.py │ │ ├── tagging │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20170116_1541.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tagging.py │ │ └── test.py │ │ └── test │ │ ├── __init__.py │ │ ├── test_authoring_mixin.py │ │ └── test_runtime.py ├── pytest.ini ├── startup.py ├── static │ ├── cms │ │ └── js │ │ │ ├── build.js │ │ │ ├── main.js │ │ │ ├── require-config.js │ │ │ ├── spec │ │ │ ├── main.js │ │ │ ├── main_spec.js │ │ │ ├── main_squire.js │ │ │ ├── main_webpack.js │ │ │ └── xblock │ │ │ │ └── cms.runtime.v1_spec.js │ │ │ └── xblock │ │ │ └── cms.runtime.v1.js │ ├── common │ ├── edx-ui-toolkit │ ├── fonts │ │ ├── CreativeCommons │ │ │ ├── cc.eot │ │ │ ├── cc.svg │ │ │ ├── cc.ttf │ │ │ └── cc.woff │ │ └── OpenSans │ │ │ ├── OpenSans-Bold-webfont.ttf │ │ │ ├── OpenSans-Bold-webfont.woff │ │ │ ├── OpenSans-Bold-webfont.woff2 │ │ │ ├── OpenSans-BoldItalic-webfont.ttf │ │ │ ├── OpenSans-BoldItalic-webfont.woff │ │ │ ├── OpenSans-BoldItalic-webfont.woff2 │ │ │ ├── OpenSans-Italic-webfont.ttf │ │ │ ├── OpenSans-Italic-webfont.woff │ │ │ ├── OpenSans-Italic-webfont.woff2 │ │ │ ├── OpenSans-Light-webfont.ttf │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ ├── OpenSans-Light-webfont.woff2 │ │ │ ├── OpenSans-LightItalic-webfont.ttf │ │ │ ├── OpenSans-LightItalic-webfont.woff │ │ │ ├── OpenSans-LightItalic-webfont.woff2 │ │ │ ├── OpenSans-Regular-webfont.ttf │ │ │ ├── OpenSans-Regular-webfont.woff │ │ │ ├── OpenSans-Regular-webfont.woff2 │ │ │ ├── OpenSans-Semibold-webfont.ttf │ │ │ ├── OpenSans-Semibold-webfont.woff │ │ │ ├── OpenSans-Semibold-webfont.woff2 │ │ │ ├── OpenSans-SemiboldItalic-webfont.ttf │ │ │ ├── OpenSans-SemiboldItalic-webfont.woff │ │ │ └── OpenSans-SemiboldItalic-webfont.woff2 │ ├── images │ │ ├── bg-micro-stripes.png │ │ ├── choice-example.png │ │ ├── cms-editor_checkbox.png │ │ ├── cms-editor_checkbox.svg │ │ ├── cms-editor_dropdown.png │ │ ├── cms-editor_dropdown.svg │ │ ├── cms-editor_explanation.png │ │ ├── cms-editor_explanation.svg │ │ ├── cms-editor_heading.png │ │ ├── cms-editor_heading.svg │ │ ├── cms-editor_number.png │ │ ├── cms-editor_number.svg │ │ ├── cms-editor_radio.png │ │ ├── cms-editor_radio.svg │ │ ├── cms-editor_text.png │ │ ├── cms-editor_text.svg │ │ ├── drag-handles.png │ │ ├── explanation-example.png │ │ ├── header-example.png │ │ ├── hiw-feature1.png │ │ ├── hiw-feature2.png │ │ ├── hiw-feature3.png │ │ ├── large-advanced-icon.png │ │ ├── large-discussion-icon.png │ │ ├── large-drag-and-drop-v2-icon.png │ │ ├── large-html-icon.png │ │ ├── large-library-icon.png │ │ ├── large-openassessment-icon.png │ │ ├── large-problem-icon.png │ │ ├── large-text-icon.png │ │ ├── large-video-icon.png │ │ ├── multi-example.png │ │ ├── number-example.png │ │ ├── preview-lms-staticpages.png │ │ ├── search-icon.png │ │ ├── select-example.png │ │ ├── spinner-on-grey.gif │ │ ├── string-example.png │ │ ├── studio-logo.png │ │ ├── thumb-hiw-feature1.png │ │ ├── thumb-hiw-feature2.png │ │ ├── thumb-hiw-feature3.png │ │ └── video-images │ │ │ └── default_video_image.png │ ├── js │ │ ├── base.js │ │ ├── certificates │ │ │ ├── collections │ │ │ │ ├── certificates.js │ │ │ │ └── signatories.js │ │ │ ├── factories │ │ │ │ └── certificates_page_factory.js │ │ │ ├── models │ │ │ │ ├── certificate.js │ │ │ │ └── signatory.js │ │ │ ├── spec │ │ │ │ ├── custom_matchers.js │ │ │ │ ├── models │ │ │ │ │ └── certificate_spec.js │ │ │ │ └── views │ │ │ │ │ ├── certificate_details_spec.js │ │ │ │ │ ├── certificate_editor_spec.js │ │ │ │ │ ├── certificate_preview_spec.js │ │ │ │ │ └── certificates_list_spec.js │ │ │ └── views │ │ │ │ ├── certificate_details.js │ │ │ │ ├── certificate_editor.js │ │ │ │ ├── certificate_item.js │ │ │ │ ├── certificate_preview.js │ │ │ │ ├── certificates_list.js │ │ │ │ ├── certificates_page.js │ │ │ │ ├── signatory_details.js │ │ │ │ └── signatory_editor.js │ │ ├── collections │ │ │ ├── asset.js │ │ │ ├── chapter.js │ │ │ ├── component_template.js │ │ │ ├── course_grader.js │ │ │ ├── course_update.js │ │ │ ├── group.js │ │ │ ├── group_configuration.js │ │ │ ├── metadata.js │ │ │ └── textbook.js │ │ ├── factories │ │ │ ├── asset_index.js │ │ │ ├── base.js │ │ │ ├── container.js │ │ │ ├── context_course.js │ │ │ ├── course_create_rerun.js │ │ │ ├── course_info.js │ │ │ ├── edit_tabs.js │ │ │ ├── export.js │ │ │ ├── group_configurations.js │ │ │ ├── index.js │ │ │ ├── library.js │ │ │ ├── manage_users.js │ │ │ ├── manage_users_lib.js │ │ │ ├── outline.js │ │ │ ├── settings.js │ │ │ ├── settings_advanced.js │ │ │ ├── settings_graders.js │ │ │ ├── textbooks.js │ │ │ ├── videos_index.js │ │ │ └── xblock_validation.js │ │ ├── features │ │ │ └── import │ │ │ │ ├── factories │ │ │ │ └── import.js │ │ │ │ └── views │ │ │ │ └── import.js │ │ ├── features_jsx │ │ │ ├── .eslintrc.js │ │ │ └── studio │ │ │ │ └── CourseOrLibraryListing.jsx │ │ ├── i18n │ │ │ ├── am │ │ │ │ └── djangojs.js │ │ │ ├── ar │ │ │ │ └── djangojs.js │ │ │ ├── az │ │ │ │ └── djangojs.js │ │ │ ├── bg-bg │ │ │ │ └── djangojs.js │ │ │ ├── bn-bd │ │ │ │ └── djangojs.js │ │ │ ├── bn-in │ │ │ │ └── djangojs.js │ │ │ ├── bs │ │ │ │ └── djangojs.js │ │ │ ├── ca │ │ │ │ └── djangojs.js │ │ │ ├── ca@valencia │ │ │ │ └── djangojs.js │ │ │ ├── cs │ │ │ │ └── djangojs.js │ │ │ ├── cy │ │ │ │ └── djangojs.js │ │ │ ├── da │ │ │ │ └── djangojs.js │ │ │ ├── de-de │ │ │ │ └── djangojs.js │ │ │ ├── el │ │ │ │ └── djangojs.js │ │ │ ├── en-uk │ │ │ │ └── djangojs.js │ │ │ ├── en │ │ │ │ └── djangojs.js │ │ │ ├── en@lolcat │ │ │ │ └── djangojs.js │ │ │ ├── en@pirate │ │ │ │ └── djangojs.js │ │ │ ├── eo │ │ │ │ └── djangojs.js │ │ │ ├── es-419 │ │ │ │ └── djangojs.js │ │ │ ├── es-ar │ │ │ │ └── djangojs.js │ │ │ ├── es-ec │ │ │ │ └── djangojs.js │ │ │ ├── es-es │ │ │ │ └── djangojs.js │ │ │ ├── es-mx │ │ │ │ └── djangojs.js │ │ │ ├── es-pe │ │ │ │ └── djangojs.js │ │ │ ├── et-ee │ │ │ │ └── djangojs.js │ │ │ ├── eu-es │ │ │ │ └── djangojs.js │ │ │ ├── fa-ir │ │ │ │ └── djangojs.js │ │ │ ├── fa │ │ │ │ └── djangojs.js │ │ │ ├── fake2 │ │ │ │ └── djangojs.js │ │ │ ├── fi-fi │ │ │ │ └── djangojs.js │ │ │ ├── fil │ │ │ │ └── djangojs.js │ │ │ ├── fr │ │ │ │ └── djangojs.js │ │ │ ├── gl │ │ │ │ └── djangojs.js │ │ │ ├── gu │ │ │ │ └── djangojs.js │ │ │ ├── he │ │ │ │ └── djangojs.js │ │ │ ├── hi │ │ │ │ └── djangojs.js │ │ │ ├── hr │ │ │ │ └── djangojs.js │ │ │ ├── hu │ │ │ │ └── djangojs.js │ │ │ ├── hy-am │ │ │ │ └── djangojs.js │ │ │ ├── id │ │ │ │ └── djangojs.js │ │ │ ├── it-it │ │ │ │ └── djangojs.js │ │ │ ├── ja-jp │ │ │ │ └── djangojs.js │ │ │ ├── kk-kz │ │ │ │ └── djangojs.js │ │ │ ├── km-kh │ │ │ │ └── djangojs.js │ │ │ ├── kn │ │ │ │ └── djangojs.js │ │ │ ├── ko-kr │ │ │ │ └── djangojs.js │ │ │ ├── lt-lt │ │ │ │ └── djangojs.js │ │ │ ├── ml │ │ │ │ └── djangojs.js │ │ │ ├── mn │ │ │ │ └── djangojs.js │ │ │ ├── mr │ │ │ │ └── djangojs.js │ │ │ ├── ms │ │ │ │ └── djangojs.js │ │ │ ├── nb │ │ │ │ └── djangojs.js │ │ │ ├── ne │ │ │ │ └── djangojs.js │ │ │ ├── nl-nl │ │ │ │ └── djangojs.js │ │ │ ├── or │ │ │ │ └── djangojs.js │ │ │ ├── pl │ │ │ │ └── djangojs.js │ │ │ ├── pt-br │ │ │ │ └── djangojs.js │ │ │ ├── pt-pt │ │ │ │ └── djangojs.js │ │ │ ├── ro │ │ │ │ └── djangojs.js │ │ │ ├── rtl │ │ │ │ └── djangojs.js │ │ │ ├── ru │ │ │ │ └── djangojs.js │ │ │ ├── si │ │ │ │ └── djangojs.js │ │ │ ├── sk │ │ │ │ └── djangojs.js │ │ │ ├── sl │ │ │ │ └── djangojs.js │ │ │ ├── sq │ │ │ │ └── djangojs.js │ │ │ ├── sr │ │ │ │ └── djangojs.js │ │ │ ├── sv │ │ │ │ └── djangojs.js │ │ │ ├── sw │ │ │ │ └── djangojs.js │ │ │ ├── ta │ │ │ │ └── djangojs.js │ │ │ ├── te │ │ │ │ └── djangojs.js │ │ │ ├── th │ │ │ │ └── djangojs.js │ │ │ ├── tr-tr │ │ │ │ └── djangojs.js │ │ │ ├── uk │ │ │ │ └── djangojs.js │ │ │ ├── ur │ │ │ │ └── djangojs.js │ │ │ ├── uz │ │ │ │ └── djangojs.js │ │ │ ├── vi │ │ │ │ └── djangojs.js │ │ │ ├── zh-cn │ │ │ │ └── djangojs.js │ │ │ ├── zh-hk │ │ │ │ └── djangojs.js │ │ │ └── zh-tw │ │ │ │ └── djangojs.js │ │ ├── index.js │ │ ├── maintenance │ │ │ └── force_publish_course.js │ │ ├── models │ │ │ ├── active_video_upload.js │ │ │ ├── asset.js │ │ │ ├── assignment_grade.js │ │ │ ├── chapter.js │ │ │ ├── checklist.js │ │ │ ├── component_template.js │ │ │ ├── course.js │ │ │ ├── course_info.js │ │ │ ├── course_update.js │ │ │ ├── custom_sync_xblock_info.js │ │ │ ├── explicit_url.js │ │ │ ├── group.js │ │ │ ├── group_configuration.js │ │ │ ├── license.js │ │ │ ├── location.js │ │ │ ├── metadata.js │ │ │ ├── module_info.js │ │ │ ├── section.js │ │ │ ├── settings │ │ │ │ ├── advanced.js │ │ │ │ ├── course_details.js │ │ │ │ ├── course_grader.js │ │ │ │ └── course_grading_policy.js │ │ │ ├── textbook.js │ │ │ ├── uploads.js │ │ │ ├── validation_helpers.js │ │ │ ├── xblock_container_info.js │ │ │ ├── xblock_info.js │ │ │ ├── xblock_outline_info.js │ │ │ └── xblock_validation.js │ │ ├── sock.js │ │ ├── spec │ │ │ ├── factories │ │ │ │ └── xblock_validation_spec.js │ │ │ ├── models │ │ │ │ ├── component_template_spec.js │ │ │ │ ├── course_spec.js │ │ │ │ ├── explicit_url_spec.js │ │ │ │ ├── group_configuration_spec.js │ │ │ │ ├── license_spec.js │ │ │ │ ├── metadata_spec.js │ │ │ │ ├── section_spec.js │ │ │ │ ├── settings_course_grader_spec.js │ │ │ │ ├── settings_grading_spec.js │ │ │ │ ├── textbook_spec.js │ │ │ │ ├── upload_spec.js │ │ │ │ ├── xblock_info_spec.js │ │ │ │ └── xblock_validation_spec.js │ │ │ ├── utils │ │ │ │ ├── drag_and_drop_spec.js │ │ │ │ ├── handle_iframe_binding_spec.js │ │ │ │ └── module_spec.js │ │ │ ├── video │ │ │ │ ├── file_uploader_editor_spec.js │ │ │ │ ├── transcripts │ │ │ │ │ ├── editor_spec.js │ │ │ │ │ ├── file_uploader_spec.js │ │ │ │ │ ├── message_manager_spec.js │ │ │ │ │ ├── utils_spec.js │ │ │ │ │ └── videolist_spec.js │ │ │ │ └── translations_editor_spec.js │ │ │ └── views │ │ │ │ ├── active_video_upload_list_spec.js │ │ │ │ ├── assets_spec.js │ │ │ │ ├── assets_squire_spec.js │ │ │ │ ├── baseview_spec.js │ │ │ │ ├── container_spec.js │ │ │ │ ├── course_info_spec.js │ │ │ │ ├── course_video_settings_spec.js │ │ │ │ ├── group_configuration_spec.js │ │ │ │ ├── license_spec.js │ │ │ │ ├── metadata_edit_spec.js │ │ │ │ ├── modals │ │ │ │ ├── base_modal_spec.js │ │ │ │ ├── edit_xblock_spec.js │ │ │ │ ├── move_xblock_modal_spec.js │ │ │ │ └── validation_error_modal_spec.js │ │ │ │ ├── module_edit_spec.js │ │ │ │ ├── move_xblock_spec.js │ │ │ │ ├── paged_container_spec.js │ │ │ │ ├── pages │ │ │ │ ├── container_spec.js │ │ │ │ ├── container_subviews_spec.js │ │ │ │ ├── course_outline_spec.js │ │ │ │ ├── course_rerun_spec.js │ │ │ │ ├── group_configurations_spec.js │ │ │ │ ├── index_spec.js │ │ │ │ └── library_users_spec.js │ │ │ │ ├── paging_spec.js │ │ │ │ ├── previous_video_upload_list_spec.js │ │ │ │ ├── previous_video_upload_spec.js │ │ │ │ ├── settings │ │ │ │ └── main_spec.js │ │ │ │ ├── textbook_spec.js │ │ │ │ ├── unit_outline_spec.js │ │ │ │ ├── upload_spec.js │ │ │ │ ├── video_thumbnail_spec.js │ │ │ │ ├── video_transcripts_spec.js │ │ │ │ ├── xblock_editor_spec.js │ │ │ │ ├── xblock_spec.js │ │ │ │ ├── xblock_string_field_editor_spec.js │ │ │ │ └── xblock_validation_spec.js │ │ ├── spec_helpers │ │ │ ├── assertion_helpers.js │ │ │ ├── edit_helpers.js │ │ │ ├── modal_helpers.js │ │ │ └── validation_helpers.js │ │ ├── utils │ │ │ ├── cancel_on_escape.js │ │ │ ├── change_on_enter.js │ │ │ ├── date_utils.js │ │ │ ├── drag_and_drop.js │ │ │ ├── handle_iframe_binding.js │ │ │ ├── modal.js │ │ │ ├── module.js │ │ │ └── templates.js │ │ ├── views │ │ │ ├── abstract_editor.js │ │ │ ├── active_video_upload.js │ │ │ ├── active_video_upload_list.js │ │ │ ├── asset.js │ │ │ ├── assets.js │ │ │ ├── baseview.js │ │ │ ├── components │ │ │ │ ├── add_xblock.js │ │ │ │ ├── add_xblock_button.js │ │ │ │ └── add_xblock_menu.js │ │ │ ├── container.js │ │ │ ├── content_group_editor.js │ │ │ ├── course_highlights_enable.js │ │ │ ├── course_info_edit.js │ │ │ ├── course_info_handout.js │ │ │ ├── course_info_helper.js │ │ │ ├── course_info_update.js │ │ │ ├── course_outline.js │ │ │ ├── course_rerun.js │ │ │ ├── course_video_settings.js │ │ │ ├── course_video_sharing_enable.js │ │ │ ├── edit_chapter.js │ │ │ ├── edit_textbook.js │ │ │ ├── experiment_group_edit.js │ │ │ ├── export.js │ │ │ ├── group_configuration_details.js │ │ │ ├── group_configuration_editor.js │ │ │ ├── group_configuration_item.js │ │ │ ├── group_configurations_list.js │ │ │ ├── instructor_info.js │ │ │ ├── learning_info.js │ │ │ ├── library_container.js │ │ │ ├── license.js │ │ │ ├── list.js │ │ │ ├── list_item.js │ │ │ ├── list_item_editor.js │ │ │ ├── list_textbooks.js │ │ │ ├── manage_users_and_roles.js │ │ │ ├── metadata.js │ │ │ ├── modals │ │ │ │ ├── base_modal.js │ │ │ │ ├── course_outline_modals.js │ │ │ │ ├── edit_xblock.js │ │ │ │ ├── move_xblock_modal.js │ │ │ │ └── validation_error_modal.js │ │ │ ├── module_edit.js │ │ │ ├── move_xblock_breadcrumb.js │ │ │ ├── move_xblock_list.js │ │ │ ├── paged_container.js │ │ │ ├── pages │ │ │ │ ├── base_page.js │ │ │ │ ├── container.js │ │ │ │ ├── container_subviews.js │ │ │ │ ├── course_outline.js │ │ │ │ ├── group_configurations.js │ │ │ │ └── paged_container.js │ │ │ ├── paging.js │ │ │ ├── paging_header.js │ │ │ ├── partition_group_details.js │ │ │ ├── partition_group_item.js │ │ │ ├── partition_group_list.js │ │ │ ├── previous_video_upload.js │ │ │ ├── previous_video_upload_list.js │ │ │ ├── settings │ │ │ │ ├── advanced.js │ │ │ │ ├── grader.js │ │ │ │ ├── grading.js │ │ │ │ └── main.js │ │ │ ├── show_textbook.js │ │ │ ├── tabs.js │ │ │ ├── unit_outline.js │ │ │ ├── unit_outline_child.js │ │ │ ├── uploads.js │ │ │ ├── utils │ │ │ │ ├── create_course_utils.js │ │ │ │ ├── create_library_utils.js │ │ │ │ ├── create_utils_base.js │ │ │ │ ├── move_xblock_utils.js │ │ │ │ └── xblock_utils.js │ │ │ ├── validation.js │ │ │ ├── video │ │ │ │ ├── transcripts │ │ │ │ │ ├── editor.js │ │ │ │ │ ├── file_uploader.js │ │ │ │ │ ├── message_manager.js │ │ │ │ │ ├── metadata_videolist.js │ │ │ │ │ └── utils.js │ │ │ │ └── translations_editor.js │ │ │ ├── video_status.js │ │ │ ├── video_thumbnail.js │ │ │ ├── video_transcripts.js │ │ │ ├── xblock.js │ │ │ ├── xblock_access_editor.js │ │ │ ├── xblock_editor.js │ │ │ ├── xblock_outline.js │ │ │ ├── xblock_string_field_editor.js │ │ │ └── xblock_validation.js │ │ ├── xblock │ │ │ └── authoring.js │ │ └── xblock_asides │ │ │ └── structured_tags.js │ ├── karma_cms.conf.js │ ├── karma_cms_squire.conf.js │ ├── karma_cms_webpack.conf.js │ ├── sass │ │ ├── .gitignore │ │ ├── README.txt │ │ ├── _base.scss │ │ ├── _build-v1.scss │ │ ├── _build.scss │ │ ├── _config.scss │ │ ├── _developer.scss │ │ ├── _mixins-inherited.scss │ │ ├── _mixins.scss │ │ ├── _reset.scss │ │ ├── _shame.scss │ │ ├── assets │ │ │ ├── _anims.scss │ │ │ ├── _fonts.scss │ │ │ └── _graphics.scss │ │ ├── bootstrap │ │ │ ├── _base.scss │ │ │ ├── _components.scss │ │ │ ├── _footer.scss │ │ │ ├── _header.scss │ │ │ ├── _layouts.scss │ │ │ ├── _legacy.scss │ │ │ ├── _mixins.scss │ │ │ ├── _navigation.scss │ │ │ ├── _variables.scss │ │ │ └── studio-main.scss │ │ ├── contexts │ │ │ └── _ie.scss │ │ ├── edx-pattern-library-shims │ │ ├── elements │ │ │ ├── _codemirror-overrides.scss │ │ │ ├── _controls.scss │ │ │ ├── _creative-commons.scss │ │ │ ├── _footer.scss │ │ │ ├── _forms.scss │ │ │ ├── _header.scss │ │ │ ├── _icons.scss │ │ │ ├── _layout.scss │ │ │ ├── _modal-window.scss │ │ │ ├── _modal.scss │ │ │ ├── _modules.scss │ │ │ ├── _navigation.scss │ │ │ ├── _pagination.scss │ │ │ ├── _sock.scss │ │ │ ├── _system-feedback.scss │ │ │ ├── _system-help.scss │ │ │ ├── _tooltip.scss │ │ │ ├── _typography.scss │ │ │ ├── _uploaded-assets.scss │ │ │ ├── _vendor.scss │ │ │ ├── _xblocks.scss │ │ │ └── _xmodules.scss │ │ ├── partials │ │ │ └── cms │ │ │ │ └── theme │ │ │ │ ├── _extras.scss │ │ │ │ ├── _variables-v1.scss │ │ │ │ └── _variables.scss │ │ ├── studio-main-v1-rtl.scss │ │ ├── studio-main-v1.scss │ │ ├── vendor │ │ │ └── bi-app │ │ │ │ ├── _bi-app-ltr.scss │ │ │ │ ├── _bi-app-rtl.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _variables-ltr.scss │ │ │ │ └── _variables-rtl.scss │ │ ├── views │ │ │ ├── _account.scss │ │ │ ├── _assets.scss │ │ │ ├── _certificates.scss │ │ │ ├── _container.scss │ │ │ ├── _course-create.scss │ │ │ ├── _dashboard.scss │ │ │ ├── _export-git.scss │ │ │ ├── _export.scss │ │ │ ├── _group-configuration.scss │ │ │ ├── _import.scss │ │ │ ├── _index.scss │ │ │ ├── _maintenance.scss │ │ │ ├── _outline.scss │ │ │ ├── _settings.scss │ │ │ ├── _static-pages.scss │ │ │ ├── _textbooks.scss │ │ │ ├── _updates.scss │ │ │ ├── _users.scss │ │ │ └── _video-upload.scss │ │ └── xmodule │ │ │ └── _headings.scss │ ├── templates │ └── xmodule_js ├── templates │ ├── 404.html │ ├── 500.html │ ├── accessibility.html │ ├── admin │ │ └── base_site.html │ ├── asset_index.html │ ├── base.html │ ├── certificates.html │ ├── checklists.html │ ├── component.html │ ├── container.html │ ├── content_libraries │ │ └── xblock_iframe.html │ ├── course-create-rerun.html │ ├── course_info.html │ ├── course_outline.html │ ├── dev │ │ └── dev_mode.html │ ├── edit-tabs.html │ ├── emails │ │ ├── course_creator_admin_subject.txt │ │ ├── course_creator_admin_user_pending.txt │ │ ├── course_creator_denied.txt │ │ ├── course_creator_granted.txt │ │ ├── course_creator_revoked.txt │ │ ├── course_creator_subject.txt │ │ ├── user_task_complete_email.txt │ │ └── user_task_complete_email_subject.txt │ ├── error.html │ ├── export.html │ ├── export_git.html │ ├── fragments │ │ ├── standalone-page-bootstrap.html │ │ └── standalone-page-fragment.html │ ├── group_configurations.html │ ├── howitworks.html │ ├── html_error.html │ ├── import.html │ ├── index.html │ ├── js │ │ ├── access-editor.underscore │ │ ├── active-video-upload-list.underscore │ │ ├── active-video-upload.underscore │ │ ├── add-xblock-component-button.underscore │ │ ├── add-xblock-component-menu-problem.underscore │ │ ├── add-xblock-component-menu.underscore │ │ ├── add-xblock-component-support-legend.underscore │ │ ├── add-xblock-component-support-level.underscore │ │ ├── add-xblock-component.underscore │ │ ├── advanced_entry.underscore │ │ ├── asset-library.underscore │ │ ├── asset-upload-modal.underscore │ │ ├── asset.underscore │ │ ├── basic-modal.underscore │ │ ├── certificate-details.underscore │ │ ├── certificate-editor.underscore │ │ ├── certificate-web-preview.underscore │ │ ├── container-access.underscore │ │ ├── container-message.underscore │ │ ├── content-group-editor.underscore │ │ ├── content-visibility-editor.underscore │ │ ├── copy-clipboard-button.underscore │ │ ├── course-highlights-enable.underscore │ │ ├── course-instructor-details.underscore │ │ ├── course-outline-modal.underscore │ │ ├── course-outline.underscore │ │ ├── course-settings-learning-fields.underscore │ │ ├── course-video-settings-update-org-credentials-footer.underscore │ │ ├── course-video-settings-update-settings-footer.underscore │ │ ├── course-video-settings.underscore │ │ ├── course-video-sharing-enable.underscore │ │ ├── course-video-transcript-preferences.underscore │ │ ├── course-video-transcript-provider-empty.underscore │ │ ├── course-video-transcript-provider-selected.underscore │ │ ├── course_grade_cutoff.underscore │ │ ├── course_grade_policy.underscore │ │ ├── course_info_handouts.underscore │ │ ├── course_info_update.underscore │ │ ├── discussion-editor.underscore │ │ ├── due-date-editor.underscore │ │ ├── edit-chapter.underscore │ │ ├── edit-textbook.underscore │ │ ├── edit-title-button.underscore │ │ ├── edit-xblock-modal.underscore │ │ ├── editor-mode-button.underscore │ │ ├── grading-editor.underscore │ │ ├── group-configuration-details.underscore │ │ ├── group-configuration-editor.underscore │ │ ├── group-edit.underscore │ │ ├── highlights-editor.underscore │ │ ├── highlights-enable-editor.underscore │ │ ├── license-selector.underscore │ │ ├── list.underscore │ │ ├── maintenance │ │ │ └── force-published-course-response.underscore │ │ ├── metadata-dict-entry.underscore │ │ ├── metadata-editor.underscore │ │ ├── metadata-file-uploader-entry.underscore │ │ ├── metadata-file-uploader-item.underscore │ │ ├── metadata-list-entry.underscore │ │ ├── metadata-number-entry.underscore │ │ ├── metadata-option-entry.underscore │ │ ├── metadata-option-public-access.underscore │ │ ├── metadata-string-entry.underscore │ │ ├── mock │ │ │ ├── mock-bad-javascript-container-xblock.underscore │ │ │ ├── mock-bad-xblock-container-xblock.underscore │ │ │ ├── mock-collapsible-view.underscore │ │ │ ├── mock-container-page.underscore │ │ │ ├── mock-container-paged-xblock.underscore │ │ │ ├── mock-container-xblock.underscore │ │ │ ├── mock-course-outline-page.underscore │ │ │ ├── mock-course-rerun-notification.underscore │ │ │ ├── mock-create-course-rerun.underscore │ │ │ ├── mock-empty-container-xblock.underscore │ │ │ ├── mock-group-configuration-page.underscore │ │ │ ├── mock-index-page.underscore │ │ │ ├── mock-manage-users-lib-ro.underscore │ │ │ ├── mock-manage-users-lib.underscore │ │ │ ├── mock-modal.underscore │ │ │ ├── mock-outline.underscore │ │ │ ├── mock-paged-container-xblock.underscore │ │ │ ├── mock-settings-page.underscore │ │ │ ├── mock-unit-page.underscore │ │ │ ├── mock-updated-container-xblock.underscore │ │ │ ├── mock-updated-xblock.underscore │ │ │ ├── mock-xblock-editor-with-custom-buttons.underscore │ │ │ ├── mock-xblock-editor.underscore │ │ │ ├── mock-xblock-paged.underscore │ │ │ ├── mock-xblock-visibility-editor.underscore │ │ │ ├── mock-xblock.underscore │ │ │ ├── mock-xmodule-editor-with-custom-tabs.underscore │ │ │ ├── mock-xmodule-editor.underscore │ │ │ └── mock-xmodule-settings-only-editor.underscore │ │ ├── modal-button.underscore │ │ ├── move-xblock-breadcrumb.underscore │ │ ├── move-xblock-list.underscore │ │ ├── move-xblock-modal.underscore │ │ ├── no-textbooks.underscore │ │ ├── paging-header.underscore │ │ ├── partition-group-details.underscore │ │ ├── previous-video-upload-list.underscore │ │ ├── previous-video-upload.underscore │ │ ├── publish-editor.underscore │ │ ├── publish-history.underscore │ │ ├── publish-xblock.underscore │ │ ├── release-date-editor.underscore │ │ ├── section-name-edit.underscore │ │ ├── self-paced-due-date-editor.underscore │ │ ├── settings-modal-tabs.underscore │ │ ├── show-correctness-editor.underscore │ │ ├── show-textbook.underscore │ │ ├── signatory-actions.underscore │ │ ├── signatory-details.underscore │ │ ├── signatory-editor.underscore │ │ ├── staff-lock-editor.underscore │ │ ├── team-member.underscore │ │ ├── timed-examination-preference-editor.underscore │ │ ├── transcript-organization-credentials.underscore │ │ ├── unit-access-editor.underscore │ │ ├── unit-outline.underscore │ │ ├── upload-dialog.underscore │ │ ├── validation-error-modal.underscore │ │ ├── verification-access-editor.underscore │ │ ├── video-status.underscore │ │ ├── video-thumbnail-error.underscore │ │ ├── video-thumbnail.underscore │ │ ├── video-transcript-upload-status.underscore │ │ ├── video-transcripts.underscore │ │ ├── video │ │ │ ├── metadata-translations-entry.underscore │ │ │ ├── metadata-translations-item.underscore │ │ │ └── transcripts │ │ │ │ ├── file-upload.underscore │ │ │ │ ├── messages │ │ │ │ ├── transcripts-choose.underscore │ │ │ │ ├── transcripts-found.underscore │ │ │ │ ├── transcripts-import.underscore │ │ │ │ ├── transcripts-not-found.underscore │ │ │ │ ├── transcripts-replace.underscore │ │ │ │ ├── transcripts-uploaded.underscore │ │ │ │ └── transcripts-use-existing.underscore │ │ │ │ └── metadata-videolist-entry.underscore │ │ ├── xblock-access-editor.underscore │ │ ├── xblock-outline.underscore │ │ ├── xblock-string-field-editor.underscore │ │ └── xblock-validation-messages.underscore │ ├── library.html │ ├── maintenance │ │ ├── _announcement_delete.html │ │ ├── _announcement_edit.html │ │ ├── _announcement_index.html │ │ ├── _force_publish_course.html │ │ ├── base.html │ │ ├── container.html │ │ └── index.html │ ├── manage_users.html │ ├── manage_users_lib.html │ ├── registration │ │ ├── activation_complete.html │ │ └── activation_invalid.html │ ├── settings.html │ ├── settings_advanced.html │ ├── settings_graders.html │ ├── structured_tags_block.html │ ├── studio_xblock_wrapper.html │ ├── textbooks.html │ ├── ux │ │ └── reference │ │ │ ├── bootstrap │ │ │ └── course-settings.html │ │ │ ├── fragments │ │ │ └── course-settings.html │ │ │ ├── index.html │ │ │ └── v1 │ │ │ └── course-settings.html │ ├── videos_index.html │ ├── videos_index_pagination.html │ ├── visibility_editor.html │ └── widgets │ │ ├── deprecated-course-key-warning.html │ │ ├── footer.html │ │ ├── header.html │ │ ├── html-edit.html │ │ ├── metadata-edit.html │ │ ├── metadata-only-edit.html │ │ ├── problem-edit.html │ │ ├── raw-edit.html │ │ ├── segment-io-footer.html │ │ ├── segment-io.html │ │ ├── sequence-edit.html │ │ ├── sock.html │ │ ├── sock_links.html │ │ ├── sock_links_extra.html │ │ ├── source-edit.html │ │ ├── tabs-aggregator.html │ │ ├── tabs │ │ └── metadata-edit-tab.html │ │ ├── user_dropdown.html │ │ └── video │ │ ├── codemirror-edit.html │ │ └── transcripts.html ├── urls.py ├── urls_dev.py └── wsgi.py ├── codecov.yml ├── common ├── .gitignore ├── README.rst ├── __init__.py ├── djangoapps │ ├── __init__.py │ ├── course_action_state │ │ ├── __init__.py │ │ ├── managers.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_managers.py │ │ │ └── test_rerun_manager.py │ ├── course_modes │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── helpers.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_coursemode_expiration_datetime_is_explicit.py │ │ │ ├── 0003_auto_20151113_1443.py │ │ │ ├── 0004_auto_20151113_1457.py │ │ │ ├── 0005_auto_20151217_0958.py │ │ │ ├── 0006_auto_20160208_1407.py │ │ │ ├── 0007_coursemode_bulk_sku.py │ │ │ ├── 0008_course_key_field_to_foreign_key.py │ │ │ ├── 0009_suggested_prices_to_charfield.py │ │ │ ├── 0010_archived_suggested_prices_to_charfield.py │ │ │ ├── 0011_change_regex_for_comma_separated_ints.py │ │ │ ├── 0012_historicalcoursemode.py │ │ │ ├── 0013_auto_20200115_2022.py │ │ │ ├── 0014_auto_20230207_1212.py │ │ │ ├── 0015_expiration_datetime_explicit_admin.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── signals.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_admin.py │ │ │ ├── test_models.py │ │ │ ├── test_signals.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── database_fixups │ │ ├── __init__.py │ │ └── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ ├── edxmako │ │ ├── README │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── backend.py │ │ ├── makoloader.py │ │ ├── paths.py │ │ ├── request_context.py │ │ ├── services.py │ │ ├── shortcuts.py │ │ ├── template.py │ │ └── tests.py │ ├── entitlements │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-course-uuid-retrieved-by-api.rst │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── expire_old_entitlements.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_expire_old_entitlements.py │ │ │ │ └── update_entitlement_mode.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20171102_0719.py │ │ │ ├── 0003_auto_20171205_1431.py │ │ │ ├── 0004_auto_20171206_1729.py │ │ │ ├── 0005_courseentitlementsupportdetail.py │ │ │ ├── 0006_courseentitlementsupportdetail_action.py │ │ │ ├── 0007_change_expiration_period_default.py │ │ │ ├── 0008_auto_20180328_1107.py │ │ │ ├── 0009_courseentitlement_refund_locked.py │ │ │ ├── 0010_backfill_refund_lock.py │ │ │ ├── 0011_historicalcourseentitlement.py │ │ │ ├── 0012_allow_blank_order_number_values.py │ │ │ ├── 0013_historicalcourseentitlementsupportdetail.py │ │ │ ├── 0014_auto_20200115_2022.py │ │ │ ├── 0015_add_unique_together_constraint.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── filters.py │ │ │ │ ├── permissions.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_serializers.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── signals.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_models.py │ │ │ ├── test_tasks.py │ │ │ └── test_utils.py │ │ └── utils.py │ ├── pipeline_mako │ │ ├── __init__.py │ │ ├── helpers │ │ │ ├── __init__.py │ │ │ └── studiofrontend.py │ │ ├── templates │ │ │ ├── mako │ │ │ │ ├── css.html │ │ │ │ ├── inline_js.html │ │ │ │ └── js.html │ │ │ ├── static_content.html │ │ │ ├── test_exists.html │ │ │ └── test_optional_include_mako.html │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_render.py │ │ │ └── test_static_content.py │ ├── split_modulestore_django │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_data_migration.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_models.py │ ├── static_replace │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ └── clear_collectstatic_cache.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_assetexcludedextensionsconfig.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── services.py │ │ ├── test │ │ │ ├── __init__.py │ │ │ └── test_static_replace.py │ │ └── wrapper.py │ ├── status │ │ ├── __init__.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_update_help_text.py │ │ │ ├── 0003_help_text_note_html.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── status.py │ │ └── tests.py │ ├── student │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── auth.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-anonymous-user-id-generation.rst │ │ ├── email_helpers.py │ │ ├── emails.py │ │ ├── forms.py │ │ ├── helpers.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ ├── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── _create_users.py │ │ │ │ ├── add_to_group.py │ │ │ │ ├── anonymized_id_mapping.py │ │ │ │ ├── assigngroups.py │ │ │ │ ├── bulk_change_enrollment.py │ │ │ │ ├── bulk_change_enrollment_csv.py │ │ │ │ ├── bulk_unenroll.py │ │ │ │ ├── bulk_update_email.py │ │ │ │ ├── change_eligibility_deadline.py │ │ │ │ ├── change_enrollment.py │ │ │ │ ├── change_enterprise_user_username.py │ │ │ │ ├── create_random_users.py │ │ │ │ ├── create_test_users.py │ │ │ │ ├── populate_created_on_site_user_attribute.py │ │ │ │ ├── recover_account.py │ │ │ │ ├── set_staff.py │ │ │ │ ├── set_superuser.py │ │ │ │ ├── transfer_students.py │ │ │ │ └── unsubscribe_user_email.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_bulk_change_enrollment.py │ │ │ │ ├── test_bulk_change_enrollment_csv.py │ │ │ │ ├── test_bulk_unenroll.py │ │ │ │ ├── test_change_eligibility_deadline.py │ │ │ │ ├── test_change_enrollment.py │ │ │ │ ├── test_change_enterprise_user_username.py │ │ │ │ ├── test_create_random_users.py │ │ │ │ ├── test_create_test_users.py │ │ │ │ ├── test_populate_created_on_site_user_attribute.py │ │ │ │ ├── test_recover_account.py │ │ │ │ ├── test_transfer_students.py │ │ │ │ └── test_unsubscribe_user_email.py │ │ ├── message_types.py │ │ ├── middleware.py │ │ ├── migrations │ │ │ ├── 0001_squashed_0031_auto_20200317_1122.py │ │ │ ├── 0032_removed_logout_view_configuration.py │ │ │ ├── 0033_userprofile_state.py │ │ │ ├── 0034_courseenrollmentcelebration.py │ │ │ ├── 0035_bulkchangeenrollmentconfiguration.py │ │ │ ├── 0036_userpasswordtogglehistory.py │ │ │ ├── 0037_linkedinaddtoprofileconfiguration_updates.py │ │ │ ├── 0038_auto_20201021_1256.py │ │ │ ├── 0039_anon_id_context.py │ │ │ ├── 0040_usercelebration.py │ │ │ ├── 0041_registration_activation_timestamp.py │ │ │ ├── 0042_allow_certificate_null_20210427_1519.py │ │ │ ├── 0043_remove_userprofile_allow_certificate.py │ │ │ ├── 0044_courseenrollmentcelebration_celebrate_weekly_goal.py │ │ │ └── __init__.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── course_enrollment.py │ │ │ └── user.py │ │ ├── models_api.py │ │ ├── role_helpers.py │ │ ├── roles.py │ │ ├── signals │ │ │ ├── __init__.py │ │ │ ├── receivers.py │ │ │ └── signals.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── email │ │ │ │ ├── test.txt │ │ │ │ └── test_subject.txt │ │ │ ├── factories.py │ │ │ ├── test_activate_account.py │ │ │ ├── test_admin_views.py │ │ │ ├── test_api.py │ │ │ ├── test_authz.py │ │ │ ├── test_bulk_email_settings.py │ │ │ ├── test_certificates.py │ │ │ ├── test_configuration_overrides.py │ │ │ ├── test_course_listing.py │ │ │ ├── test_credit.py │ │ │ ├── test_email.py │ │ │ ├── test_enrollment.py │ │ │ ├── test_events.py │ │ │ ├── test_filters.py │ │ │ ├── test_helpers.py │ │ │ ├── test_linkedin.py │ │ │ ├── test_long_username_email.py │ │ │ ├── test_models.py │ │ │ ├── test_parental_controls.py │ │ │ ├── test_password_policy.py │ │ │ ├── test_receivers.py │ │ │ ├── test_recent_enrollments.py │ │ │ ├── test_refunds.py │ │ │ ├── test_retirement.py │ │ │ ├── test_roles.py │ │ │ ├── test_tasks.py │ │ │ ├── test_user_profile_properties.py │ │ │ ├── test_userstanding.py │ │ │ ├── test_views.py │ │ │ └── tests.py │ │ ├── toggles.py │ │ ├── urls.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── dashboard.py │ │ │ └── management.py │ ├── terrain │ │ ├── __init__.py │ │ └── stubs │ │ │ ├── __init__.py │ │ │ ├── catalog.py │ │ │ ├── comments.py │ │ │ ├── data │ │ │ ├── ora_graded_rubric.xml │ │ │ └── ora_rubric.xml │ │ │ ├── ecommerce.py │ │ │ ├── edxnotes.py │ │ │ ├── http.py │ │ │ ├── lti.py │ │ │ ├── start.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_edxnotes.py │ │ │ ├── test_http.py │ │ │ ├── test_lti_stub.py │ │ │ ├── test_video.py │ │ │ ├── test_xqueue_stub.py │ │ │ └── test_youtube_stub.py │ │ │ ├── video_source.py │ │ │ ├── xqueue.py │ │ │ └── youtube.py │ ├── third_party_auth │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_permissions.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── appleid.py │ │ ├── apps.py │ │ ├── decorators.py │ │ ├── docs │ │ │ └── how_tos │ │ │ │ └── migrating_apple_users_in_teams.rst │ │ ├── dummy.py │ │ ├── exceptions.py │ │ ├── identityserver3.py │ │ ├── lti.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── generate_and_store_apple_transfer_ids.py │ │ │ │ ├── generate_and_store_new_apple_ids.py │ │ │ │ ├── remove_social_auth_users.py │ │ │ │ ├── saml.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_data │ │ │ │ │ ├── another-testshib-providers.xml │ │ │ │ │ └── testshib-providers.xml │ │ │ │ ├── test_generate_and_store_apple_transfer_ids.py │ │ │ │ ├── test_generate_and_store_new_apple_ids.py │ │ │ │ ├── test_remove_social_auth_users.py │ │ │ │ ├── test_saml.py │ │ │ │ └── test_update_new_apple_ids_in_social_auth.py │ │ │ │ └── update_new_apple_ids_in_social_auth.py │ │ ├── middleware.py │ │ ├── migrations │ │ │ ├── 0001_squashed_0026_auto_20200401_1932.py │ │ │ ├── 0002_auto_20200721_1650.py │ │ │ ├── 0002_samlproviderconfig_country.py │ │ │ ├── 0003_samlconfiguration_is_public.py │ │ │ ├── 0004_auto_20200919_0955.py │ │ │ ├── 0005_auto_20210723_1527.py │ │ │ ├── 0006_auto_20220314_1551.py │ │ │ ├── 0007_samlproviderconfig_was_valid_at.py │ │ │ ├── 0008_auto_20220324_1422.py │ │ │ ├── 0009_historicalusersocialauth.py │ │ │ ├── 0010_delete_historicalusersocialauth.py │ │ │ ├── 0011_applemigrationuseridinfo.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── pipeline.py │ │ ├── provider.py │ │ ├── saml.py │ │ ├── saml_configuration │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_saml_configuration.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── samlproviderconfig │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_samlproviderconfig.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── samlproviderdata │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_samlproviderdata.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── settings.py │ │ ├── strategy.py │ │ ├── tasks.py │ │ ├── templates │ │ │ └── third_party_auth │ │ │ │ └── post_custom_auth_entry.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── data │ │ │ │ ├── __init__.py │ │ │ │ ├── lti_cannot_add_get_params.txt │ │ │ │ ├── lti_garbage.txt │ │ │ │ ├── lti_invalid_signature.txt │ │ │ │ ├── lti_old_timestamp.txt │ │ │ │ ├── lti_valid_request.txt │ │ │ │ ├── lti_valid_request_with_get_params.txt │ │ │ │ ├── saml_identity_provider_mock_data.py │ │ │ │ ├── saml_key.key │ │ │ │ ├── saml_key.pub │ │ │ │ ├── saml_key_alt.key │ │ │ │ ├── saml_key_alt.pub │ │ │ │ ├── testshib_metadata.xml │ │ │ │ ├── testshib_metadata_with_cache_duration.xml │ │ │ │ └── testshib_saml_response.xml │ │ │ ├── factories.py │ │ │ ├── samlutils.py │ │ │ ├── specs │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── test_azuread.py │ │ │ │ ├── test_generic.py │ │ │ │ ├── test_google.py │ │ │ │ ├── test_linkedin.py │ │ │ │ ├── test_lti.py │ │ │ │ ├── test_testshib.py │ │ │ │ └── test_twitter.py │ │ │ ├── test_admin.py │ │ │ ├── test_decorators.py │ │ │ ├── test_identityserver3.py │ │ │ ├── test_lti.py │ │ │ ├── test_middleware.py │ │ │ ├── test_models.py │ │ │ ├── test_pipeline.py │ │ │ ├── test_pipeline_integration.py │ │ │ ├── test_provider.py │ │ │ ├── test_saml.py │ │ │ ├── test_settings.py │ │ │ ├── test_utils.py │ │ │ ├── test_views.py │ │ │ ├── testutil.py │ │ │ └── utils.py │ │ ├── toggles.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── track │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── backends │ │ │ ├── __init__.py │ │ │ ├── logger.py │ │ │ ├── mongodb.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_logger.py │ │ │ │ └── test_mongodb.py │ │ ├── contexts.py │ │ ├── event_transaction_utils.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ ├── commands │ │ │ │ ├── __init__.py │ │ │ │ └── tracked_dummy_command.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_tracked_command.py │ │ │ └── tracked_command.py │ │ ├── middleware.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_delete_trackinglog.py │ │ │ └── __init__.py │ │ ├── segment.py │ │ ├── shim.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_contexts.py │ │ │ ├── test_middleware.py │ │ │ ├── test_segment.py │ │ │ ├── test_shim.py │ │ │ ├── test_tracker.py │ │ │ └── test_util.py │ │ ├── tracker.py │ │ ├── transformers.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── segmentio.py │ │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── test_segmentio.py │ │ │ └── test_views.py │ ├── util │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── block_utils.py │ │ ├── cache.py │ │ ├── config_parse.py │ │ ├── course.py │ │ ├── date_utils.py │ │ ├── db.py │ │ ├── disable_rate_limit.py │ │ ├── file.py │ │ ├── json_request.py │ │ ├── keyword_substitution.py │ │ ├── memcache.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_data__default_rate_limit_config.py │ │ │ └── __init__.py │ │ ├── milestones_helpers.py │ │ ├── model_utils.py │ │ ├── models.py │ │ ├── monitoring.py │ │ ├── password_policy_validators.py │ │ ├── query.py │ │ ├── string_utils.py │ │ ├── testing.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── fixtures │ │ │ │ ├── test_keyword_coursename_sub.json │ │ │ │ └── test_keywordsub_multiple_tags.json │ │ │ ├── mixins │ │ │ │ ├── __init__.py │ │ │ │ └── discovery.py │ │ │ ├── test_codejail_includes.py │ │ │ ├── test_course.py │ │ │ ├── test_date_utils.py │ │ │ ├── test_db.py │ │ │ ├── test_disable_rate_limit.py │ │ │ ├── test_django_utils.py │ │ │ ├── test_file.py │ │ │ ├── test_json_request.py │ │ │ ├── test_keyword_sub_utils.py │ │ │ ├── test_memcache.py │ │ │ ├── test_milestones_helpers.py │ │ │ ├── test_password_policy_validators.py │ │ │ ├── test_sandboxing.py │ │ │ └── test_string_utils.py │ │ ├── url.py │ │ ├── validate_on_save.py │ │ └── views.py │ └── xblock_django │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── constants.py │ │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ └── ensure_indexes.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20160204_0809.py │ │ ├── 0003_add_new_config_models.py │ │ ├── 0004_delete_xblock_disable_config.py │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ ├── __init__.py │ │ ├── test_api.py │ │ └── test_user_service.py │ │ └── user_service.py ├── static │ ├── .gitignore │ ├── applets │ │ └── capa │ │ │ ├── Protex.jar │ │ │ └── genex.jar │ ├── common │ │ ├── js │ │ │ ├── components │ │ │ │ ├── BlockBrowser │ │ │ │ │ ├── .eslintrc.js │ │ │ │ │ ├── components │ │ │ │ │ │ └── BlockBrowser │ │ │ │ │ │ │ ├── BlockBrowser.jsx │ │ │ │ │ │ │ ├── BlockBrowser.test.jsx │ │ │ │ │ │ │ ├── BlockBrowserContainer.jsx │ │ │ │ │ │ │ ├── __snapshots__ │ │ │ │ │ │ │ └── BlockBrowser.test.jsx.snap │ │ │ │ │ │ │ └── test-block-tree.json │ │ │ │ │ ├── data │ │ │ │ │ │ ├── actions │ │ │ │ │ │ │ ├── constants.js │ │ │ │ │ │ │ └── courseBlocks.js │ │ │ │ │ │ ├── api │ │ │ │ │ │ │ └── client.js │ │ │ │ │ │ ├── reducers │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ ├── selectors │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── store.js │ │ │ │ │ └── index.jsx │ │ │ │ ├── ExperimentalCarousel.jsx │ │ │ │ ├── utils │ │ │ │ │ └── view_utils.js │ │ │ │ └── views │ │ │ │ │ ├── feedback.js │ │ │ │ │ ├── feedback_alert.js │ │ │ │ │ ├── feedback_notification.js │ │ │ │ │ ├── feedback_prompt.js │ │ │ │ │ ├── list.js │ │ │ │ │ ├── paginated_view.js │ │ │ │ │ ├── paging_footer.js │ │ │ │ │ ├── paging_header.js │ │ │ │ │ ├── search_field.js │ │ │ │ │ └── tabbed_view.js │ │ │ ├── discussion │ │ │ │ ├── content.js │ │ │ │ ├── discussion.js │ │ │ │ ├── mathjax_include.js │ │ │ │ ├── models │ │ │ │ │ ├── discussion_course_settings.js │ │ │ │ │ └── discussion_user.js │ │ │ │ ├── utils.js │ │ │ │ └── views │ │ │ │ │ ├── discussion_content_view.js │ │ │ │ │ ├── discussion_inline_view.js │ │ │ │ │ ├── discussion_thread_edit_view.js │ │ │ │ │ ├── discussion_thread_list_view.js │ │ │ │ │ ├── discussion_thread_profile_view.js │ │ │ │ │ ├── discussion_thread_show_view.js │ │ │ │ │ ├── discussion_thread_view.js │ │ │ │ │ ├── discussion_topic_menu_view.js │ │ │ │ │ ├── new_post_view.js │ │ │ │ │ ├── response_comment_edit_view.js │ │ │ │ │ ├── response_comment_show_view.js │ │ │ │ │ ├── response_comment_view.js │ │ │ │ │ ├── thread_response_edit_view.js │ │ │ │ │ ├── thread_response_show_view.js │ │ │ │ │ └── thread_response_view.js │ │ │ ├── jasmine.common.conf.js │ │ │ ├── jasmine_stack_trace.js │ │ │ ├── karma.common.conf.js │ │ │ ├── spec │ │ │ │ ├── components │ │ │ │ │ ├── feedback_spec.js │ │ │ │ │ ├── list_spec.js │ │ │ │ │ ├── paginated_view_spec.js │ │ │ │ │ ├── paging_footer_spec.js │ │ │ │ │ ├── paging_header_spec.js │ │ │ │ │ ├── search_field_spec.js │ │ │ │ │ ├── tabbed_view_spec.js │ │ │ │ │ └── view_utils_spec.js │ │ │ │ ├── discussion │ │ │ │ │ ├── content_spec.js │ │ │ │ │ ├── utils_spec.js │ │ │ │ │ └── view │ │ │ │ │ │ ├── discussion_content_view_spec.js │ │ │ │ │ │ ├── discussion_inline_view_spec.js │ │ │ │ │ │ ├── discussion_thread_edit_view_spec.js │ │ │ │ │ │ ├── discussion_thread_list_view_spec.js │ │ │ │ │ │ ├── discussion_thread_profile_view_spec.js │ │ │ │ │ │ ├── discussion_thread_show_view_spec.js │ │ │ │ │ │ ├── discussion_thread_view_spec.js │ │ │ │ │ │ ├── discussion_topic_menu_view_spec.js │ │ │ │ │ │ ├── discussion_view_spec_helper.js │ │ │ │ │ │ ├── new_post_view_spec.js │ │ │ │ │ │ ├── response_comment_show_view_spec.js │ │ │ │ │ │ ├── response_comment_view_spec.js │ │ │ │ │ │ ├── thread_response_show_view_spec.js │ │ │ │ │ │ └── thread_response_view_spec.js │ │ │ │ ├── main_requirejs.js │ │ │ │ ├── utils │ │ │ │ │ └── edx.utils.validate_spec.js │ │ │ │ └── xblock │ │ │ │ │ ├── core_spec.js │ │ │ │ │ └── runtime.v1_spec.js │ │ │ ├── spec_helpers │ │ │ │ ├── discussion_spec_helper.js │ │ │ │ ├── jasmine-extensions.js │ │ │ │ ├── jasmine-stealth.js │ │ │ │ ├── jasmine-waituntil.js │ │ │ │ ├── page_helpers.js │ │ │ │ ├── template_helpers.js │ │ │ │ └── view_helpers.js │ │ │ ├── utils │ │ │ │ ├── edx.utils.validate.js │ │ │ │ └── require-serial.js │ │ │ └── xblock │ │ │ │ ├── core.js │ │ │ │ └── runtime.v1.js │ │ └── templates │ │ │ ├── components │ │ │ ├── paginated-view.underscore │ │ │ ├── paging-footer.underscore │ │ │ ├── paging-header.underscore │ │ │ ├── search-field.underscore │ │ │ ├── system-feedback.underscore │ │ │ ├── tab.underscore │ │ │ ├── tabbed_view.underscore │ │ │ └── tabpanel.underscore │ │ │ ├── discussion │ │ │ └── templates.underscore │ │ │ └── image-modal.underscore │ ├── css │ │ ├── tinymce-studio-content-fonts.css │ │ ├── tinymce-studio-content.css │ │ └── vendor │ │ │ ├── edxnotes │ │ │ └── annotator.min.css │ │ │ ├── font-awesome.css │ │ │ ├── html5-input-polyfills │ │ │ └── number-polyfill.css │ │ │ ├── jquery.qtip.min.css │ │ │ ├── normalize.css │ │ │ ├── pdfjs │ │ │ ├── cmaps │ │ │ │ ├── 78-EUC-H.bcmap │ │ │ │ ├── 78-EUC-V.bcmap │ │ │ │ ├── 78-H.bcmap │ │ │ │ ├── 78-RKSJ-H.bcmap │ │ │ │ ├── 78-RKSJ-V.bcmap │ │ │ │ ├── 78-V.bcmap │ │ │ │ ├── 78ms-RKSJ-H.bcmap │ │ │ │ ├── 78ms-RKSJ-V.bcmap │ │ │ │ ├── 83pv-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-H.bcmap │ │ │ │ ├── 90ms-RKSJ-V.bcmap │ │ │ │ ├── 90msp-RKSJ-H.bcmap │ │ │ │ ├── 90msp-RKSJ-V.bcmap │ │ │ │ ├── 90pv-RKSJ-H.bcmap │ │ │ │ ├── 90pv-RKSJ-V.bcmap │ │ │ │ ├── Add-H.bcmap │ │ │ │ ├── Add-RKSJ-H.bcmap │ │ │ │ ├── Add-RKSJ-V.bcmap │ │ │ │ ├── Add-V.bcmap │ │ │ │ ├── Adobe-CNS1-0.bcmap │ │ │ │ ├── Adobe-CNS1-1.bcmap │ │ │ │ ├── Adobe-CNS1-2.bcmap │ │ │ │ ├── Adobe-CNS1-3.bcmap │ │ │ │ ├── Adobe-CNS1-4.bcmap │ │ │ │ ├── Adobe-CNS1-5.bcmap │ │ │ │ ├── Adobe-CNS1-6.bcmap │ │ │ │ ├── Adobe-CNS1-UCS2.bcmap │ │ │ │ ├── Adobe-GB1-0.bcmap │ │ │ │ ├── Adobe-GB1-1.bcmap │ │ │ │ ├── Adobe-GB1-2.bcmap │ │ │ │ ├── Adobe-GB1-3.bcmap │ │ │ │ ├── Adobe-GB1-4.bcmap │ │ │ │ ├── Adobe-GB1-5.bcmap │ │ │ │ ├── Adobe-GB1-UCS2.bcmap │ │ │ │ ├── Adobe-Japan1-0.bcmap │ │ │ │ ├── Adobe-Japan1-1.bcmap │ │ │ │ ├── Adobe-Japan1-2.bcmap │ │ │ │ ├── Adobe-Japan1-3.bcmap │ │ │ │ ├── Adobe-Japan1-4.bcmap │ │ │ │ ├── Adobe-Japan1-5.bcmap │ │ │ │ ├── Adobe-Japan1-6.bcmap │ │ │ │ ├── Adobe-Japan1-UCS2.bcmap │ │ │ │ ├── Adobe-Korea1-0.bcmap │ │ │ │ ├── Adobe-Korea1-1.bcmap │ │ │ │ ├── Adobe-Korea1-2.bcmap │ │ │ │ ├── Adobe-Korea1-UCS2.bcmap │ │ │ │ ├── B5-H.bcmap │ │ │ │ ├── B5-V.bcmap │ │ │ │ ├── B5pc-H.bcmap │ │ │ │ ├── B5pc-V.bcmap │ │ │ │ ├── CNS-EUC-H.bcmap │ │ │ │ ├── CNS-EUC-V.bcmap │ │ │ │ ├── CNS1-H.bcmap │ │ │ │ ├── CNS1-V.bcmap │ │ │ │ ├── CNS2-H.bcmap │ │ │ │ ├── CNS2-V.bcmap │ │ │ │ ├── ETHK-B5-H.bcmap │ │ │ │ ├── ETHK-B5-V.bcmap │ │ │ │ ├── ETen-B5-H.bcmap │ │ │ │ ├── ETen-B5-V.bcmap │ │ │ │ ├── ETenms-B5-H.bcmap │ │ │ │ ├── ETenms-B5-V.bcmap │ │ │ │ ├── EUC-H.bcmap │ │ │ │ ├── EUC-V.bcmap │ │ │ │ ├── Ext-H.bcmap │ │ │ │ ├── Ext-RKSJ-H.bcmap │ │ │ │ ├── Ext-RKSJ-V.bcmap │ │ │ │ ├── Ext-V.bcmap │ │ │ │ ├── GB-EUC-H.bcmap │ │ │ │ ├── GB-EUC-V.bcmap │ │ │ │ ├── GB-H.bcmap │ │ │ │ ├── GB-V.bcmap │ │ │ │ ├── GBK-EUC-H.bcmap │ │ │ │ ├── GBK-EUC-V.bcmap │ │ │ │ ├── GBK2K-H.bcmap │ │ │ │ ├── GBK2K-V.bcmap │ │ │ │ ├── GBKp-EUC-H.bcmap │ │ │ │ ├── GBKp-EUC-V.bcmap │ │ │ │ ├── GBT-EUC-H.bcmap │ │ │ │ ├── GBT-EUC-V.bcmap │ │ │ │ ├── GBT-H.bcmap │ │ │ │ ├── GBT-V.bcmap │ │ │ │ ├── GBTpc-EUC-H.bcmap │ │ │ │ ├── GBTpc-EUC-V.bcmap │ │ │ │ ├── GBpc-EUC-H.bcmap │ │ │ │ ├── GBpc-EUC-V.bcmap │ │ │ │ ├── H.bcmap │ │ │ │ ├── HKdla-B5-H.bcmap │ │ │ │ ├── HKdla-B5-V.bcmap │ │ │ │ ├── HKdlb-B5-H.bcmap │ │ │ │ ├── HKdlb-B5-V.bcmap │ │ │ │ ├── HKgccs-B5-H.bcmap │ │ │ │ ├── HKgccs-B5-V.bcmap │ │ │ │ ├── HKm314-B5-H.bcmap │ │ │ │ ├── HKm314-B5-V.bcmap │ │ │ │ ├── HKm471-B5-H.bcmap │ │ │ │ ├── HKm471-B5-V.bcmap │ │ │ │ ├── HKscs-B5-H.bcmap │ │ │ │ ├── HKscs-B5-V.bcmap │ │ │ │ ├── Hankaku.bcmap │ │ │ │ ├── Hiragana.bcmap │ │ │ │ ├── KSC-EUC-H.bcmap │ │ │ │ ├── KSC-EUC-V.bcmap │ │ │ │ ├── KSC-H.bcmap │ │ │ │ ├── KSC-Johab-H.bcmap │ │ │ │ ├── KSC-Johab-V.bcmap │ │ │ │ ├── KSC-V.bcmap │ │ │ │ ├── KSCms-UHC-H.bcmap │ │ │ │ ├── KSCms-UHC-HW-H.bcmap │ │ │ │ ├── KSCms-UHC-HW-V.bcmap │ │ │ │ ├── KSCms-UHC-V.bcmap │ │ │ │ ├── KSCpc-EUC-H.bcmap │ │ │ │ ├── KSCpc-EUC-V.bcmap │ │ │ │ ├── Katakana.bcmap │ │ │ │ ├── LICENSE │ │ │ │ ├── NWP-H.bcmap │ │ │ │ ├── NWP-V.bcmap │ │ │ │ ├── RKSJ-H.bcmap │ │ │ │ ├── RKSJ-V.bcmap │ │ │ │ ├── Roman.bcmap │ │ │ │ ├── UniCNS-UCS2-H.bcmap │ │ │ │ ├── UniCNS-UCS2-V.bcmap │ │ │ │ ├── UniCNS-UTF16-H.bcmap │ │ │ │ ├── UniCNS-UTF16-V.bcmap │ │ │ │ ├── UniCNS-UTF32-H.bcmap │ │ │ │ ├── UniCNS-UTF32-V.bcmap │ │ │ │ ├── UniCNS-UTF8-H.bcmap │ │ │ │ ├── UniCNS-UTF8-V.bcmap │ │ │ │ ├── UniGB-UCS2-H.bcmap │ │ │ │ ├── UniGB-UCS2-V.bcmap │ │ │ │ ├── UniGB-UTF16-H.bcmap │ │ │ │ ├── UniGB-UTF16-V.bcmap │ │ │ │ ├── UniGB-UTF32-H.bcmap │ │ │ │ ├── UniGB-UTF32-V.bcmap │ │ │ │ ├── UniGB-UTF8-H.bcmap │ │ │ │ ├── UniGB-UTF8-V.bcmap │ │ │ │ ├── UniJIS-UCS2-H.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-H.bcmap │ │ │ │ ├── UniJIS-UCS2-HW-V.bcmap │ │ │ │ ├── UniJIS-UCS2-V.bcmap │ │ │ │ ├── UniJIS-UTF16-H.bcmap │ │ │ │ ├── UniJIS-UTF16-V.bcmap │ │ │ │ ├── UniJIS-UTF32-H.bcmap │ │ │ │ ├── UniJIS-UTF32-V.bcmap │ │ │ │ ├── UniJIS-UTF8-H.bcmap │ │ │ │ ├── UniJIS-UTF8-V.bcmap │ │ │ │ ├── UniJIS2004-UTF16-H.bcmap │ │ │ │ ├── UniJIS2004-UTF16-V.bcmap │ │ │ │ ├── UniJIS2004-UTF32-H.bcmap │ │ │ │ ├── UniJIS2004-UTF32-V.bcmap │ │ │ │ ├── UniJIS2004-UTF8-H.bcmap │ │ │ │ ├── UniJIS2004-UTF8-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-HW-V.bcmap │ │ │ │ ├── UniJISPro-UCS2-V.bcmap │ │ │ │ ├── UniJISPro-UTF8-V.bcmap │ │ │ │ ├── UniJISX0213-UTF32-H.bcmap │ │ │ │ ├── UniJISX0213-UTF32-V.bcmap │ │ │ │ ├── UniJISX02132004-UTF32-H.bcmap │ │ │ │ ├── UniJISX02132004-UTF32-V.bcmap │ │ │ │ ├── UniKS-UCS2-H.bcmap │ │ │ │ ├── UniKS-UCS2-V.bcmap │ │ │ │ ├── UniKS-UTF16-H.bcmap │ │ │ │ ├── UniKS-UTF16-V.bcmap │ │ │ │ ├── UniKS-UTF32-H.bcmap │ │ │ │ ├── UniKS-UTF32-V.bcmap │ │ │ │ ├── UniKS-UTF8-H.bcmap │ │ │ │ ├── UniKS-UTF8-V.bcmap │ │ │ │ ├── V.bcmap │ │ │ │ └── WP-Symbol.bcmap │ │ │ ├── images │ │ │ │ ├── annotation-check.svg │ │ │ │ ├── annotation-comment.svg │ │ │ │ ├── annotation-help.svg │ │ │ │ ├── annotation-insert.svg │ │ │ │ ├── annotation-key.svg │ │ │ │ ├── annotation-newparagraph.svg │ │ │ │ ├── annotation-noicon.svg │ │ │ │ ├── annotation-note.svg │ │ │ │ ├── annotation-paragraph.svg │ │ │ │ ├── findbarButton-next-rtl.png │ │ │ │ ├── findbarButton-next-rtl@2x.png │ │ │ │ ├── findbarButton-next.png │ │ │ │ ├── findbarButton-next@2x.png │ │ │ │ ├── findbarButton-previous-rtl.png │ │ │ │ ├── findbarButton-previous-rtl@2x.png │ │ │ │ ├── findbarButton-previous.png │ │ │ │ ├── findbarButton-previous@2x.png │ │ │ │ ├── grab.cur │ │ │ │ ├── grabbing.cur │ │ │ │ ├── loading-icon.gif │ │ │ │ ├── loading-small.png │ │ │ │ ├── loading-small@2x.png │ │ │ │ ├── secondaryToolbarButton-documentProperties.png │ │ │ │ ├── secondaryToolbarButton-documentProperties@2x.png │ │ │ │ ├── secondaryToolbarButton-firstPage.png │ │ │ │ ├── secondaryToolbarButton-firstPage@2x.png │ │ │ │ ├── secondaryToolbarButton-handTool.png │ │ │ │ ├── secondaryToolbarButton-handTool@2x.png │ │ │ │ ├── secondaryToolbarButton-lastPage.png │ │ │ │ ├── secondaryToolbarButton-lastPage@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw.png │ │ │ │ ├── secondaryToolbarButton-rotateCcw@2x.png │ │ │ │ ├── secondaryToolbarButton-rotateCw.png │ │ │ │ ├── secondaryToolbarButton-rotateCw@2x.png │ │ │ │ ├── shadow.png │ │ │ │ ├── texture.png │ │ │ │ ├── toolbarButton-bookmark.png │ │ │ │ ├── toolbarButton-bookmark@2x.png │ │ │ │ ├── toolbarButton-download.png │ │ │ │ ├── toolbarButton-download@2x.png │ │ │ │ ├── toolbarButton-menuArrows.png │ │ │ │ ├── toolbarButton-menuArrows@2x.png │ │ │ │ ├── toolbarButton-openFile.png │ │ │ │ ├── toolbarButton-openFile@2x.png │ │ │ │ ├── toolbarButton-pageDown-rtl.png │ │ │ │ ├── toolbarButton-pageDown-rtl@2x.png │ │ │ │ ├── toolbarButton-pageDown.png │ │ │ │ ├── toolbarButton-pageDown@2x.png │ │ │ │ ├── toolbarButton-pageUp-rtl.png │ │ │ │ ├── toolbarButton-pageUp-rtl@2x.png │ │ │ │ ├── toolbarButton-pageUp.png │ │ │ │ ├── toolbarButton-pageUp@2x.png │ │ │ │ ├── toolbarButton-presentationMode.png │ │ │ │ ├── toolbarButton-presentationMode@2x.png │ │ │ │ ├── toolbarButton-print.png │ │ │ │ ├── toolbarButton-print@2x.png │ │ │ │ ├── toolbarButton-search.png │ │ │ │ ├── toolbarButton-search@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle-rtl@2x.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle.png │ │ │ │ ├── toolbarButton-secondaryToolbarToggle@2x.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl.png │ │ │ │ ├── toolbarButton-sidebarToggle-rtl@2x.png │ │ │ │ ├── toolbarButton-sidebarToggle.png │ │ │ │ ├── toolbarButton-sidebarToggle@2x.png │ │ │ │ ├── toolbarButton-viewAttachments.png │ │ │ │ ├── toolbarButton-viewAttachments@2x.png │ │ │ │ ├── toolbarButton-viewOutline-rtl.png │ │ │ │ ├── toolbarButton-viewOutline-rtl@2x.png │ │ │ │ ├── toolbarButton-viewOutline.png │ │ │ │ ├── toolbarButton-viewOutline@2x.png │ │ │ │ ├── toolbarButton-viewThumbnail.png │ │ │ │ ├── toolbarButton-viewThumbnail@2x.png │ │ │ │ ├── toolbarButton-zoomIn.png │ │ │ │ ├── toolbarButton-zoomIn@2x.png │ │ │ │ ├── toolbarButton-zoomOut.png │ │ │ │ └── toolbarButton-zoomOut@2x.png │ │ │ └── viewer.css │ │ │ ├── slickgrid │ │ │ ├── images │ │ │ │ ├── actions.gif │ │ │ │ ├── ajax-loader-small.gif │ │ │ │ ├── arrow_redo.png │ │ │ │ ├── arrow_right_peppermint.png │ │ │ │ ├── arrow_right_spearmint.png │ │ │ │ ├── arrow_undo.png │ │ │ │ ├── bullet_blue.png │ │ │ │ ├── bullet_star.png │ │ │ │ ├── bullet_toggle_minus.png │ │ │ │ ├── bullet_toggle_plus.png │ │ │ │ ├── calendar.gif │ │ │ │ ├── collapse.gif │ │ │ │ ├── comment_yellow.gif │ │ │ │ ├── down.gif │ │ │ │ ├── drag-handle.png │ │ │ │ ├── editor-helper-bg.gif │ │ │ │ ├── expand.gif │ │ │ │ ├── header-bg.gif │ │ │ │ ├── header-columns-bg.gif │ │ │ │ ├── header-columns-over-bg.gif │ │ │ │ ├── help.png │ │ │ │ ├── info.gif │ │ │ │ ├── listview.gif │ │ │ │ ├── pencil.gif │ │ │ │ ├── row-over-bg.gif │ │ │ │ ├── sort-asc.gif │ │ │ │ ├── sort-asc.png │ │ │ │ ├── sort-desc.gif │ │ │ │ ├── sort-desc.png │ │ │ │ ├── stripes.png │ │ │ │ ├── tag_red.png │ │ │ │ ├── tick.png │ │ │ │ ├── user_identity.gif │ │ │ │ └── user_identity_plus.gif │ │ │ ├── slick.grid.css │ │ │ └── smoothness │ │ │ │ ├── images │ │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ │ └── jquery-ui-1.8.16.custom.css │ │ │ └── ui-lightness │ │ │ ├── images │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_228ef1_256x240.png │ │ │ ├── ui-icons_ef8c08_256x240.png │ │ │ ├── ui-icons_ffd27a_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ └── jquery-ui-1.8.22.custom.css │ ├── data │ │ └── geoip │ │ │ ├── GeoLite2-Country.mmdb │ │ │ └── README │ ├── edx-ui-toolkit │ │ └── js │ ├── fonts │ │ ├── OpenSans │ │ │ ├── OpenSans-Bold-webfont.ttf │ │ │ ├── OpenSans-Bold-webfont.woff │ │ │ ├── OpenSans-Bold-webfont.woff2 │ │ │ ├── OpenSans-BoldItalic-webfont.ttf │ │ │ ├── OpenSans-BoldItalic-webfont.woff │ │ │ ├── OpenSans-BoldItalic-webfont.woff2 │ │ │ ├── OpenSans-Italic-webfont.ttf │ │ │ ├── OpenSans-Italic-webfont.woff │ │ │ ├── OpenSans-Italic-webfont.woff2 │ │ │ ├── OpenSans-Light-webfont.ttf │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ ├── OpenSans-Light-webfont.woff2 │ │ │ ├── OpenSans-LightItalic-webfont.ttf │ │ │ ├── OpenSans-LightItalic-webfont.woff │ │ │ ├── OpenSans-LightItalic-webfont.woff2 │ │ │ ├── OpenSans-Regular-webfont.ttf │ │ │ ├── OpenSans-Regular-webfont.woff │ │ │ ├── OpenSans-Regular-webfont.woff2 │ │ │ ├── OpenSans-Semibold-webfont.ttf │ │ │ ├── OpenSans-Semibold-webfont.woff │ │ │ ├── OpenSans-Semibold-webfont.woff2 │ │ │ ├── OpenSans-SemiboldItalic-webfont.ttf │ │ │ ├── OpenSans-SemiboldItalic-webfont.woff │ │ │ └── OpenSans-SemiboldItalic-webfont.woff2 │ │ └── vendor │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── images │ │ ├── arrow-left.png │ │ ├── arrow-right.png │ │ ├── capa │ │ │ └── vsepr │ │ │ │ ├── AX2E0-3D-balls.png │ │ │ │ ├── AX2E1-3D-balls.png │ │ │ │ ├── AX2E2-3D-balls.png │ │ │ │ ├── AX2E3-3D-balls.png │ │ │ │ ├── AX3E0-3D-balls.png │ │ │ │ ├── AX3E1-3D-balls.png │ │ │ │ ├── AX3E2-3D-balls.png │ │ │ │ ├── AX4E0-3D-balls.png │ │ │ │ ├── AX4E1-3D-balls.png │ │ │ │ ├── AX4E2-3D-balls.png │ │ │ │ ├── AX5E1-3D-balls.png │ │ │ │ ├── AX5E2-3D-balls.png │ │ │ │ ├── AX6E0-3D-balls.png │ │ │ │ ├── AX6E1-3D-balls.png │ │ │ │ ├── AX7E0-3D-balls.png │ │ │ │ ├── AX8E0-3D-balls.png │ │ │ │ ├── AX9E0-3D-balls.png │ │ │ │ ├── Bent-3D-balls.png │ │ │ │ ├── Linear-3D-balls.png │ │ │ │ ├── Linear-stick.png │ │ │ │ ├── Octahedral-3D-balls.png │ │ │ │ ├── Octahedral-stick.png │ │ │ │ ├── Pentagonal-bipyramidal-3D-balls.png │ │ │ │ ├── Pentagonal-planar-3D-balls.png │ │ │ │ ├── Pentagonal-pyramidal-3D-balls.png │ │ │ │ ├── Pyramidal-3D-balls.png │ │ │ │ ├── Seesaw-3D-balls.png │ │ │ │ ├── Square-antiprismatic-3D-balls.png │ │ │ │ ├── Square-planar-3D-balls.png │ │ │ │ ├── T-shaped-3D-balls.png │ │ │ │ ├── Tetrahedral-3D-balls.png │ │ │ │ ├── Tetrahedral-stick.png │ │ │ │ ├── Trigonal-3D-balls.png │ │ │ │ ├── Trigonal-bipyramidal-3D-balls.png │ │ │ │ ├── Trigonal-bipyramidal-stick.png │ │ │ │ └── Trigonal-planar-stick.png │ │ ├── cc.png │ │ ├── closed-arrow.png │ │ ├── correct-icon.png │ │ ├── fontawesome │ │ │ ├── arrows-alt.svg │ │ │ ├── caret-left.svg │ │ │ ├── caret-right.svg │ │ │ ├── caret-up.svg │ │ │ ├── cc.svg │ │ │ ├── compress.svg │ │ │ ├── list-alt.svg │ │ │ ├── pause.svg │ │ │ ├── play.svg │ │ │ ├── quote-left.svg │ │ │ ├── step-forward.svg │ │ │ ├── volume-down.svg │ │ │ ├── volume-off.svg │ │ │ └── volume-up.svg │ │ ├── fullscreen.png │ │ ├── green-pointer.png │ │ ├── hd.png │ │ ├── high_pass_filter.png │ │ ├── incorrect-icon.png │ │ ├── info-icon.png │ │ ├── ml_grading_icon.png │ │ ├── mute.png │ │ ├── open-arrow.png │ │ ├── partially-correct-icon.png │ │ ├── peer_grading_icon.png │ │ ├── placeholder-faculty.png │ │ ├── placeholder-image.png │ │ ├── sequence-nav │ │ │ ├── document-icon-current.png │ │ │ ├── document-icon-normal.png │ │ │ ├── document-icon-visited.png │ │ │ ├── edit.png │ │ │ ├── history.png │ │ │ ├── list-finished.png │ │ │ ├── list-icon-current.png │ │ │ ├── list-icon-normal.png │ │ │ ├── list-icon-visited.png │ │ │ ├── list-unfinished.png │ │ │ ├── list-unstarted.png │ │ │ ├── next-icon.png │ │ │ ├── previous-icon.png │ │ │ ├── status │ │ │ │ ├── check.png │ │ │ │ ├── dash.png │ │ │ │ ├── not-started.png │ │ │ │ └── wrong.png │ │ │ ├── video-icon-current.png │ │ │ ├── video-icon-normal.png │ │ │ ├── video-icon-visited.png │ │ │ └── view.png │ │ ├── slider-handle.png │ │ ├── spinner.gif │ │ ├── unanswered-icon.png │ │ ├── vcr.png │ │ ├── voltage_divider.png │ │ └── volume.png │ ├── js │ │ ├── RequireJS-namespace-undefine.js │ │ ├── RequireJS-namespace.js │ │ ├── capa │ │ │ ├── README │ │ │ ├── annotationinput.js │ │ │ ├── chemical_equation_preview.js │ │ │ ├── choicetextinput.js │ │ │ ├── design-protein-2d.js │ │ │ ├── drag_and_drop.js │ │ │ ├── drag_and_drop │ │ │ │ ├── base_image.js │ │ │ │ ├── config_parser.js │ │ │ │ ├── container.js │ │ │ │ ├── draggable_events.js │ │ │ │ ├── draggable_logic.js │ │ │ │ ├── draggables.js │ │ │ │ ├── main.js │ │ │ │ ├── scroller.js │ │ │ │ ├── state.js │ │ │ │ ├── targets.js │ │ │ │ └── update_input.js │ │ │ ├── edit-a-gene.js │ │ │ ├── fixtures │ │ │ │ └── jsinput.html │ │ │ ├── genex │ │ │ │ ├── 21B31BA00E7CE7B6BD63DD13A8586A45.cache.html │ │ │ │ ├── 63308EE54E8033A708B414CAC05B0C32.cache.html │ │ │ │ ├── 7AC57DC6EC8C1D8672DDF6E6D4EF57CC.cache.html │ │ │ │ ├── 9B4F4D4EFA24CDE2E4287CC07897F249.cache.html │ │ │ │ ├── A069AC107D79C29D6237614AC340F0C0.cache.html │ │ │ │ ├── C6220FCC8B9234FEAD8D826A73C6D2A4.cache.html │ │ │ │ ├── clear.cache.gif │ │ │ │ ├── genex.css │ │ │ │ ├── genex.nocache.js │ │ │ │ ├── hosted.html │ │ │ │ └── images │ │ │ │ │ ├── circles.png │ │ │ │ │ ├── circles_ie6.png │ │ │ │ │ ├── corner.png │ │ │ │ │ ├── corner_ie6.png │ │ │ │ │ ├── hborder.png │ │ │ │ │ ├── hborder_ie6.png │ │ │ │ │ ├── thumb_horz.png │ │ │ │ │ ├── thumb_vertical.png │ │ │ │ │ ├── vborder.png │ │ │ │ │ └── vborder_ie6.png │ │ │ ├── jsinput │ │ │ │ ├── jsinput_example.css │ │ │ │ ├── jsinput_example.html │ │ │ │ └── jsinput_example.js │ │ │ ├── protex │ │ │ │ ├── 39CC89519B0E1FCB47B935AC9FE13D7B.cache.html │ │ │ │ ├── 6E05B1CD5BFCAF7D53C7C64D84318178.cache.html │ │ │ │ ├── C824A958AB642DC2213DFFDAC640BEAA.cache.html │ │ │ │ ├── D9267DE8FB02F8B995B4A58C66C76E29.cache.html │ │ │ │ ├── F275492F7098103BCB05F4F86ABF6218.cache.html │ │ │ │ ├── F3301B0E65F38C7FCF2EF3764B3BB0B6.cache.html │ │ │ │ ├── clear.cache.gif │ │ │ │ ├── hosted.html │ │ │ │ ├── protex.css │ │ │ │ ├── protex.nocache.js │ │ │ │ └── scrollTableLoading.gif │ │ │ ├── schematicinput.js │ │ │ ├── spec │ │ │ │ ├── formula_equation_preview_spec.js │ │ │ │ └── jsinput_spec.js │ │ │ ├── src │ │ │ │ ├── formula_equation_preview.js │ │ │ │ ├── jschannel.js │ │ │ │ └── jsinput.js │ │ │ └── symbolic_mathjax_preprocessor.js │ │ ├── fixtures │ │ │ ├── dashboard-fixture.html │ │ │ ├── lang-edx-fixture.html │ │ │ └── sr-fixture.html │ │ ├── spec │ │ │ ├── CSS3_workarounds_spec.js │ │ │ ├── accessibility_tools_spec.js │ │ │ ├── jquery.immediateDescendents_spec.js │ │ │ ├── lang_edx_spec.js │ │ │ ├── logger_spec.js │ │ │ ├── string_utils_spec.js │ │ │ ├── tooltip_manager_spec.js │ │ │ └── utility_spec.js │ │ ├── src │ │ │ ├── CSS3_workarounds.js │ │ │ ├── CookiePolicyBanner.jsx │ │ │ ├── ReactRenderer.jsx │ │ │ ├── accessibility_tools.js │ │ │ ├── ajax_prefix.js │ │ │ ├── ie_shim.js │ │ │ ├── jquery.immediateDescendents.js │ │ │ ├── jquery.timeago.locale.js │ │ │ ├── jquery_extend_patch.js │ │ │ ├── lang_edx.js │ │ │ ├── logger.js │ │ │ ├── string_utils.js │ │ │ ├── tooltip_manager.js │ │ │ ├── utility.js │ │ │ ├── xproblem.js │ │ │ └── youtube_fallback.js │ │ ├── test │ │ │ ├── add_ajax_prefix.js │ │ │ └── i18n.js │ │ └── vendor │ │ │ ├── CodeMirror │ │ │ ├── BUILD_README.txt │ │ │ ├── accessible.diff │ │ │ ├── addons │ │ │ │ ├── closetag.js │ │ │ │ ├── comment.js │ │ │ │ ├── css.js │ │ │ │ ├── dialog │ │ │ │ │ ├── dialog.css │ │ │ │ │ └── dialog.js │ │ │ │ ├── diff.js │ │ │ │ ├── edx_markdown.js │ │ │ │ ├── formatting.js │ │ │ │ ├── htmlembedded.js │ │ │ │ ├── htmlmixed.js │ │ │ │ ├── javascript.js │ │ │ │ ├── match-highlighter.js │ │ │ │ ├── python.js │ │ │ │ ├── search.js │ │ │ │ ├── searchcursor.js │ │ │ │ ├── xml.js │ │ │ │ └── yaml.js │ │ │ ├── codemirror-accessible.js │ │ │ ├── codemirror.css │ │ │ ├── codemirror.js │ │ │ ├── javascript.js │ │ │ ├── octave.js │ │ │ ├── python.js │ │ │ ├── stex.js │ │ │ └── xml.js │ │ │ ├── URI.min.js │ │ │ ├── afontgarde │ │ │ └── afontgarde.css │ │ │ ├── annotator.js │ │ │ ├── annotator.min.js │ │ │ ├── annotator.store.js │ │ │ ├── annotator.store.min.js │ │ │ ├── annotator.tags.js │ │ │ ├── annotator.tags.min.js │ │ │ ├── backbone-associations-min.js │ │ │ ├── backbone-relational.js │ │ │ ├── backbone-relational.min.js │ │ │ ├── codemirror-compressed.js │ │ │ ├── date.js │ │ │ ├── domReady.js │ │ │ ├── draggabilly.js │ │ │ ├── edxnotes │ │ │ └── annotator-full.min.js │ │ │ ├── flot │ │ │ ├── excanvas.js │ │ │ ├── excanvas.min.js │ │ │ ├── jquery.colorhelpers.js │ │ │ ├── jquery.colorhelpers.min.js │ │ │ ├── jquery.flot.axislabels.js │ │ │ ├── jquery.flot.crosshair.js │ │ │ ├── jquery.flot.crosshair.min.js │ │ │ ├── jquery.flot.fillbetween.js │ │ │ ├── jquery.flot.fillbetween.min.js │ │ │ ├── jquery.flot.image.js │ │ │ ├── jquery.flot.image.min.js │ │ │ ├── jquery.flot.js │ │ │ ├── jquery.flot.min.js │ │ │ ├── jquery.flot.navigate.js │ │ │ ├── jquery.flot.navigate.min.js │ │ │ ├── jquery.flot.pie.js │ │ │ ├── jquery.flot.pie.min.js │ │ │ ├── jquery.flot.resize.js │ │ │ ├── jquery.flot.resize.min.js │ │ │ ├── jquery.flot.selection.js │ │ │ ├── jquery.flot.selection.min.js │ │ │ ├── jquery.flot.stack.js │ │ │ ├── jquery.flot.stack.min.js │ │ │ ├── jquery.flot.symbol.js │ │ │ ├── jquery.flot.symbol.min.js │ │ │ ├── jquery.flot.threshold.js │ │ │ └── jquery.flot.threshold.min.js │ │ │ ├── html5-input-polyfills │ │ │ └── number-polyfill.js │ │ │ ├── jQuery-File-Upload │ │ │ ├── README.md │ │ │ ├── blueimp-file-upload.jquery.json │ │ │ ├── cors │ │ │ │ ├── postmessage.html │ │ │ │ └── result.html │ │ │ ├── css │ │ │ │ ├── demo-ie8.css │ │ │ │ ├── demo.css │ │ │ │ ├── jquery.fileupload-ui-noscript.css │ │ │ │ ├── jquery.fileupload-ui.css │ │ │ │ └── style.css │ │ │ ├── img │ │ │ │ ├── loading.gif │ │ │ │ └── progressbar.gif │ │ │ └── js │ │ │ │ ├── app.js │ │ │ │ ├── cors │ │ │ │ ├── jquery.postmessage-transport.js │ │ │ │ └── jquery.xdr-transport.js │ │ │ │ ├── jquery.fileupload-angular.js │ │ │ │ ├── jquery.fileupload-audio.js │ │ │ │ ├── jquery.fileupload-image.js │ │ │ │ ├── jquery.fileupload-jquery-ui.js │ │ │ │ ├── jquery.fileupload-process.js │ │ │ │ ├── jquery.fileupload-ui.js │ │ │ │ ├── jquery.fileupload-validate.js │ │ │ │ ├── jquery.fileupload-video.js │ │ │ │ ├── jquery.fileupload.js │ │ │ │ ├── jquery.iframe-transport.js │ │ │ │ ├── main.js │ │ │ │ └── vendor │ │ │ │ └── jquery.ui.widget.js │ │ │ ├── jasmine-imagediff.js │ │ │ ├── jquery-jvectormap-1.1.1 │ │ │ ├── jquery-jvectormap-1.1.1.css │ │ │ ├── jquery-jvectormap-1.1.1.min.js │ │ │ └── jquery-jvectormap-world-mill-en.js │ │ │ ├── jquery-ui.min.js │ │ │ ├── jquery.ajaxQueue.js │ │ │ ├── jquery.ba-bbq.min.js │ │ │ ├── jquery.cookie.js │ │ │ ├── jquery.event.drag-2.2.js │ │ │ ├── jquery.event.drop-2.2.js │ │ │ ├── jquery.form.js │ │ │ ├── jquery.inlineedit.js │ │ │ ├── jquery.leanModal.js │ │ │ ├── jquery.qtip.min.js │ │ │ ├── jquery.simulate.js │ │ │ ├── jquery.smooth-scroll.min.js │ │ │ ├── jquery.tablednd.js │ │ │ ├── jquery.timeago.js │ │ │ ├── jquery.truncate.js │ │ │ ├── jquery.ui.draggable.js │ │ │ ├── json2.js │ │ │ ├── markitup │ │ │ ├── jquery.markitup.js │ │ │ ├── sets │ │ │ │ └── wiki │ │ │ │ │ ├── images │ │ │ │ │ ├── bold.png │ │ │ │ │ ├── clean.png │ │ │ │ │ ├── code.png │ │ │ │ │ ├── h1.png │ │ │ │ │ ├── h2.png │ │ │ │ │ ├── h3.png │ │ │ │ │ ├── h4.png │ │ │ │ │ ├── h5.png │ │ │ │ │ ├── image.png │ │ │ │ │ ├── italic.png │ │ │ │ │ ├── link.png │ │ │ │ │ ├── list-bullet.png │ │ │ │ │ ├── list-numeric.png │ │ │ │ │ ├── picture.png │ │ │ │ │ ├── preview.png │ │ │ │ │ ├── quotes.png │ │ │ │ │ ├── stroke.png │ │ │ │ │ └── url.png │ │ │ │ │ ├── set.js │ │ │ │ │ └── style.css │ │ │ └── skins │ │ │ │ └── simple │ │ │ │ ├── images │ │ │ │ ├── handle.png │ │ │ │ ├── menu.png │ │ │ │ └── submenu.png │ │ │ │ └── style.css │ │ │ ├── mersenne-twister-min.js │ │ │ ├── mock-ajax.js │ │ │ ├── noreferrer.js │ │ │ ├── pdfjs │ │ │ ├── EDX_README │ │ │ ├── compatibility.js │ │ │ ├── debugger.js │ │ │ ├── l10n.js │ │ │ ├── locale │ │ │ │ ├── ach │ │ │ │ │ └── viewer.properties │ │ │ │ ├── af │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ak │ │ │ │ │ └── viewer.properties │ │ │ │ ├── an │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ar │ │ │ │ │ └── viewer.properties │ │ │ │ ├── as │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ast │ │ │ │ │ └── viewer.properties │ │ │ │ ├── az │ │ │ │ │ └── viewer.properties │ │ │ │ ├── be │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bg │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bn-BD │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bn-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── br │ │ │ │ │ └── viewer.properties │ │ │ │ ├── bs │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ca │ │ │ │ │ └── viewer.properties │ │ │ │ ├── cs │ │ │ │ │ └── viewer.properties │ │ │ │ ├── csb │ │ │ │ │ └── viewer.properties │ │ │ │ ├── cy │ │ │ │ │ └── viewer.properties │ │ │ │ ├── da │ │ │ │ │ └── viewer.properties │ │ │ │ ├── de │ │ │ │ │ └── viewer.properties │ │ │ │ ├── el │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-GB │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-US │ │ │ │ │ └── viewer.properties │ │ │ │ ├── en-ZA │ │ │ │ │ └── viewer.properties │ │ │ │ ├── eo │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-AR │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-CL │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-ES │ │ │ │ │ └── viewer.properties │ │ │ │ ├── es-MX │ │ │ │ │ └── viewer.properties │ │ │ │ ├── et │ │ │ │ │ └── viewer.properties │ │ │ │ ├── eu │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fa │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ff │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fi │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── fy-NL │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ga-IE │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gd │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── gu-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── he │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hi-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hu │ │ │ │ │ └── viewer.properties │ │ │ │ ├── hy-AM │ │ │ │ │ └── viewer.properties │ │ │ │ ├── id │ │ │ │ │ └── viewer.properties │ │ │ │ ├── is │ │ │ │ │ └── viewer.properties │ │ │ │ ├── it │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ja │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ka │ │ │ │ │ └── viewer.properties │ │ │ │ ├── kk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── km │ │ │ │ │ └── viewer.properties │ │ │ │ ├── kn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ko │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ku │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lg │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lij │ │ │ │ │ └── viewer.properties │ │ │ │ ├── locale.properties │ │ │ │ ├── lt │ │ │ │ │ └── viewer.properties │ │ │ │ ├── lv │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mai │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ml │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── mr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ms │ │ │ │ │ └── viewer.properties │ │ │ │ ├── my │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nb-NO │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nn-NO │ │ │ │ │ └── viewer.properties │ │ │ │ ├── nso │ │ │ │ │ └── viewer.properties │ │ │ │ ├── oc │ │ │ │ │ └── viewer.properties │ │ │ │ ├── or │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pa-IN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pt-BR │ │ │ │ │ └── viewer.properties │ │ │ │ ├── pt-PT │ │ │ │ │ └── viewer.properties │ │ │ │ ├── rm │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ro │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ru │ │ │ │ │ └── viewer.properties │ │ │ │ ├── rw │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sah │ │ │ │ │ └── viewer.properties │ │ │ │ ├── si │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── son │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sq │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sv-SE │ │ │ │ │ └── viewer.properties │ │ │ │ ├── sw │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ta-LK │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ta │ │ │ │ │ └── viewer.properties │ │ │ │ ├── te │ │ │ │ │ └── viewer.properties │ │ │ │ ├── th │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tl │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tn │ │ │ │ │ └── viewer.properties │ │ │ │ ├── tr │ │ │ │ │ └── viewer.properties │ │ │ │ ├── uk │ │ │ │ │ └── viewer.properties │ │ │ │ ├── ur │ │ │ │ │ └── viewer.properties │ │ │ │ ├── vi │ │ │ │ │ └── viewer.properties │ │ │ │ ├── wo │ │ │ │ │ └── viewer.properties │ │ │ │ ├── xh │ │ │ │ │ └── viewer.properties │ │ │ │ ├── zh-CN │ │ │ │ │ └── viewer.properties │ │ │ │ ├── zh-TW │ │ │ │ │ └── viewer.properties │ │ │ │ └── zu │ │ │ │ │ └── viewer.properties │ │ │ ├── pdf.js │ │ │ ├── pdf.worker.js │ │ │ ├── viewer.html │ │ │ └── viewer.js │ │ │ ├── requirejs │ │ │ └── text.js │ │ │ ├── slick.core.js │ │ │ ├── slick.dataview.js │ │ │ ├── slick.editors.js │ │ │ ├── slick.formatters.js │ │ │ ├── slick.grid.js │ │ │ ├── slick.groupitemmetadataprovider.js │ │ │ ├── slick.remotemodel.js │ │ │ ├── timepicker │ │ │ ├── datepair.js │ │ │ ├── jquery.timepicker.css │ │ │ ├── jquery.timepicker.js │ │ │ └── jquery.timepicker.min.js │ │ │ ├── tinymce │ │ │ ├── BUILD_README.md │ │ │ └── js │ │ │ │ └── tinymce │ │ │ │ ├── icons │ │ │ │ └── default │ │ │ │ │ ├── icons.js │ │ │ │ │ └── icons.min.js │ │ │ │ ├── jquery.tinymce.min.js │ │ │ │ ├── langs │ │ │ │ └── readme.md │ │ │ │ ├── license.txt │ │ │ │ ├── plugins │ │ │ │ ├── advlist │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── anchor │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autolink │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autoresize │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── autosave │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── bbcode │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── charmap │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── code │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── codemirror │ │ │ │ │ ├── langs │ │ │ │ │ │ ├── cs_CZ.js │ │ │ │ │ │ ├── de.js │ │ │ │ │ │ ├── en.js │ │ │ │ │ │ ├── es_ES.js │ │ │ │ │ │ ├── fr_FR.js │ │ │ │ │ │ ├── nl.js │ │ │ │ │ │ ├── pt_BR.js │ │ │ │ │ │ ├── pt_PT.js │ │ │ │ │ │ ├── ru.js │ │ │ │ │ │ ├── uk.js │ │ │ │ │ │ └── zh_TW.js │ │ │ │ │ ├── plugin.js │ │ │ │ │ ├── plugin.min.js │ │ │ │ │ └── source.html │ │ │ │ ├── codesample │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── colorpicker │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── contextmenu │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── directionality │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── emoticons │ │ │ │ │ ├── js │ │ │ │ │ │ ├── emojis.js │ │ │ │ │ │ └── emojis.min.js │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullpage │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── fullscreen │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── help │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── hr │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── image │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── imagetools │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── importcss │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── insertdatetime │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── legacyoutput │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── link │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── lists │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── media │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── nonbreaking │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── noneditable │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── pagebreak │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── paste │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── preview │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── print │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── quickbars │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── save │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── searchreplace │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── spellchecker │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── tabfocus │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── table │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── template │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textcolor │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── textpattern │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── toc │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualblocks │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── visualchars │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ └── wordcount │ │ │ │ │ ├── plugin.js │ │ │ │ │ └── plugin.min.js │ │ │ │ ├── readme.md │ │ │ │ ├── skins │ │ │ │ ├── content │ │ │ │ │ └── studio-tmce5 │ │ │ │ │ │ ├── content.css │ │ │ │ │ │ └── content.min.css │ │ │ │ ├── skintool.json │ │ │ │ └── ui │ │ │ │ │ └── studio-tmce5 │ │ │ │ │ ├── content.css │ │ │ │ │ ├── content.inline.css │ │ │ │ │ ├── content.inline.min.css │ │ │ │ │ ├── content.min.css │ │ │ │ │ ├── content.mobile.css │ │ │ │ │ ├── content.mobile.min.css │ │ │ │ │ ├── fonts │ │ │ │ │ └── tinymce-mobile.woff │ │ │ │ │ ├── skin.css │ │ │ │ │ ├── skin.min.css │ │ │ │ │ ├── skin.mobile.css │ │ │ │ │ └── skin.mobile.min.css │ │ │ │ ├── themes │ │ │ │ ├── mobile │ │ │ │ │ ├── theme.js │ │ │ │ │ └── theme.min.js │ │ │ │ └── silver │ │ │ │ │ ├── theme.js │ │ │ │ │ └── theme.min.js │ │ │ │ ├── tinymce.d.ts │ │ │ │ ├── tinymce.full.min.js │ │ │ │ ├── tinymce.js │ │ │ │ └── tinymce.min.js │ │ │ └── url.min.js │ ├── karma_common.conf.js │ ├── karma_common_requirejs.conf.js │ └── sass │ │ ├── _mixins-inherited.scss │ │ ├── _mixins.scss │ │ ├── assets │ │ └── _anims.scss │ │ ├── bourbon │ │ ├── _bourbon-deprecated-upcoming.scss │ │ ├── _bourbon.scss │ │ ├── addons │ │ │ ├── _button.scss │ │ │ ├── _clearfix.scss │ │ │ ├── _directional-values.scss │ │ │ ├── _ellipsis.scss │ │ │ ├── _font-family.scss │ │ │ ├── _hide-text.scss │ │ │ ├── _html5-input-types.scss │ │ │ ├── _position.scss │ │ │ ├── _prefixer.scss │ │ │ ├── _retina-image.scss │ │ │ ├── _size.scss │ │ │ ├── _timing-functions.scss │ │ │ ├── _triangle.scss │ │ │ └── _word-wrap.scss │ │ ├── css3 │ │ │ ├── _animation.scss │ │ │ ├── _appearance.scss │ │ │ ├── _backface-visibility.scss │ │ │ ├── _background-image.scss │ │ │ ├── _background.scss │ │ │ ├── _border-image.scss │ │ │ ├── _border-radius.scss │ │ │ ├── _box-sizing.scss │ │ │ ├── _calc.scss │ │ │ ├── _columns.scss │ │ │ ├── _filter.scss │ │ │ ├── _flex-box.scss │ │ │ ├── _font-face.scss │ │ │ ├── _font-feature-settings.scss │ │ │ ├── _hidpi-media-query.scss │ │ │ ├── _hyphens.scss │ │ │ ├── _image-rendering.scss │ │ │ ├── _keyframes.scss │ │ │ ├── _linear-gradient.scss │ │ │ ├── _perspective.scss │ │ │ ├── _placeholder.scss │ │ │ ├── _radial-gradient.scss │ │ │ ├── _transform.scss │ │ │ ├── _transition.scss │ │ │ └── _user-select.scss │ │ ├── functions │ │ │ ├── _assign.scss │ │ │ ├── _color-lightness.scss │ │ │ ├── _flex-grid.scss │ │ │ ├── _golden-ratio.scss │ │ │ ├── _grid-width.scss │ │ │ ├── _modular-scale.scss │ │ │ ├── _px-to-em.scss │ │ │ ├── _px-to-rem.scss │ │ │ ├── _strip-units.scss │ │ │ ├── _tint-shade.scss │ │ │ ├── _transition-property-name.scss │ │ │ └── _unpack.scss │ │ ├── helpers │ │ │ ├── _convert-units.scss │ │ │ ├── _gradient-positions-parser.scss │ │ │ ├── _is-num.scss │ │ │ ├── _linear-angle-parser.scss │ │ │ ├── _linear-gradient-parser.scss │ │ │ ├── _linear-positions-parser.scss │ │ │ ├── _linear-side-corner-parser.scss │ │ │ ├── _radial-arg-parser.scss │ │ │ ├── _radial-gradient-parser.scss │ │ │ ├── _radial-positions-parser.scss │ │ │ ├── _render-gradients.scss │ │ │ ├── _shape-size-stripper.scss │ │ │ └── _str-to-num.scss │ │ └── settings │ │ │ ├── _asset-pipeline.scss │ │ │ ├── _prefixer.scss │ │ │ └── _px-to-em.scss │ │ ├── edx-pattern-library-shims │ │ ├── _breadcrumbs.scss │ │ ├── _buttons.scss │ │ ├── _form.scss │ │ └── base │ │ │ └── _variables.scss │ │ └── neat │ │ ├── _neat-helpers.scss │ │ ├── _neat.scss │ │ ├── functions │ │ ├── _new-breakpoint.scss │ │ └── _private.scss │ │ ├── grid │ │ ├── _fill-parent.scss │ │ ├── _grid.scss │ │ ├── _media.scss │ │ ├── _omega.scss │ │ ├── _outer-container.scss │ │ ├── _pad.scss │ │ ├── _private.scss │ │ ├── _reset.scss │ │ ├── _row.scss │ │ ├── _shift.scss │ │ ├── _span-columns.scss │ │ ├── _to-deprecate.scss │ │ └── _visual-grid.scss │ │ └── settings │ │ ├── _grid.scss │ │ └── _visual-grid.scss ├── templates │ ├── admin │ │ └── student │ │ │ └── loginfailures │ │ │ └── change_form_template.html │ ├── edxnotes_wrapper.html │ ├── emails │ │ ├── contact_us_feedback_email_body.txt │ │ ├── contact_us_feedback_email_subject.txt │ │ ├── sync_learner_profile_data_email_change_body.txt │ │ └── sync_learner_profile_data_email_change_subject.txt │ ├── mathjax_include.html │ ├── student │ │ └── edx_ace │ │ │ ├── accountactivation │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ │ ├── accountrecovery │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ │ ├── emailchange │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ │ ├── emailchangeconfirmation │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ │ ├── proctoringrequirements │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ │ └── recoveryemailcreate │ │ │ └── email │ │ │ ├── body.html │ │ │ ├── body.txt │ │ │ ├── from_name.txt │ │ │ ├── head.html │ │ │ └── subject.txt │ ├── xblock_wrapper.html │ └── xmodule_shim.html └── test │ ├── __init__.py │ ├── conftest.py │ ├── data │ ├── 2014 │ │ ├── about │ │ │ └── overview.html │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014.xml │ │ ├── info │ │ │ ├── handouts.html │ │ │ └── updates.html │ │ ├── policies │ │ │ ├── 2014 │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ │ └── assets.json │ │ └── tabs │ │ │ └── 8e4cce2b4aaf4ba28b1220804619e41f.html │ ├── 2014_Uni │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014_Uni.xml │ │ └── policies │ │ │ ├── 2014_Uni │ │ │ └── policy.json │ │ │ └── assets.json │ ├── aside │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── html │ │ │ ├── toyhtml.html │ │ │ └── toyhtml.xml │ │ ├── info │ │ │ └── handouts.html │ │ ├── policies │ │ │ ├── 2012_Fall.json │ │ │ └── assets.json │ │ ├── static │ │ │ ├── another_static.txt │ │ │ ├── handouts │ │ │ │ └── sample_handout.txt │ │ │ ├── just_a_test.jpg │ │ │ ├── sample_static.txt │ │ │ └── textbook.pdf │ │ └── tabs │ │ │ ├── resources.html │ │ │ └── syllabus.html │ ├── badge_classes │ │ └── common │ │ │ └── test │ │ │ └── data │ │ │ └── badges │ │ │ ├── good.png │ │ │ ├── good_JqUIhJW.png │ │ │ ├── good_yvMZMQb.png │ │ │ └── unbalanced.png │ ├── capa │ │ ├── prog1.py │ │ ├── prog2.py │ │ └── prog3.py │ ├── conditional │ │ ├── README.md │ │ ├── conditional │ │ │ └── condone.xml │ │ ├── course.xml │ │ ├── html │ │ │ ├── congrats.xml │ │ │ └── secret_page.xml │ │ └── problem │ │ │ └── choiceprob.xml │ ├── conditional_and_poll │ │ ├── README.md │ │ ├── about │ │ │ └── 2013_Spring │ │ │ │ ├── overview.html │ │ │ │ ├── prerequisites.html │ │ │ │ ├── short_description.html │ │ │ │ └── video.html │ │ ├── chapter │ │ │ └── Staff.xml │ │ ├── conditional │ │ │ └── condone.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2013_Spring.xml │ │ ├── creating_course.xml │ │ ├── html │ │ │ └── secret_page.xml │ │ ├── info │ │ │ └── 2013_Spring │ │ │ │ ├── handouts.html │ │ │ │ └── updates.html │ │ ├── policies │ │ │ └── 2013_Spring │ │ │ │ └── policy.json │ │ ├── problem │ │ │ └── choiceprob.xml │ │ ├── roots │ │ │ └── 2013_Spring.xml │ │ ├── sequential │ │ │ └── Problem_Demos.xml │ │ └── static │ │ │ ├── README │ │ │ └── images │ │ │ ├── course_image.jpg │ │ │ └── professor-sandel.jpg │ ├── course_after_rename │ │ ├── about │ │ │ └── overview.html │ │ ├── assets │ │ │ └── assets.xml │ │ ├── chapter │ │ │ └── renamed_chapter.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── course.xml │ │ ├── drafts │ │ │ └── vertical │ │ │ │ └── f8ee1d2026e048b884d2ff6c4daa9def.xml │ │ ├── policies │ │ │ ├── 2015 │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ │ └── assets.json │ │ ├── sequential │ │ │ └── 761dd4188c3e49f390a8d2a47156f503.xml │ │ └── vertical │ │ │ └── f8ee1d2026e048b884d2ff6c4daa9def.xml │ ├── course_before_rename │ │ ├── about │ │ │ └── overview.html │ │ ├── assets │ │ │ └── assets.xml │ │ ├── chapter │ │ │ └── b9870b9af59841a49e6e02765d0e3bbf.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── course.xml │ │ ├── drafts │ │ │ └── vertical │ │ │ │ └── f8ee1d2026e048b884d2ff6c4daa9def.xml │ │ ├── policies │ │ │ ├── 2015 │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ │ └── assets.json │ │ ├── sequential │ │ │ └── 761dd4188c3e49f390a8d2a47156f503.xml │ │ └── vertical │ │ │ └── f8ee1d2026e048b884d2ff6c4daa9def.xml │ ├── course_ignore │ │ ├── README.md │ │ ├── about │ │ │ └── index.html │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014_Fall.xml │ │ └── static │ │ │ └── example.txt │ ├── course_info_updates │ │ ├── about │ │ │ └── overview.html │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014_T1.xml │ │ ├── info │ │ │ ├── handouts.html │ │ │ ├── updates.html │ │ │ └── updates.items.json │ │ └── policies │ │ │ ├── 2014_T1 │ │ │ ├── grading_policy.json │ │ │ └── policy.json │ │ │ └── assets.json │ ├── embedded_python │ │ ├── course.xml │ │ ├── course │ │ │ └── 2013_Spring.xml │ │ └── roots │ │ │ └── 2013_Spring.xml │ ├── empty │ │ └── .gitkeep │ ├── graded │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── grading_policy.json │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ └── roots │ │ │ └── 2012_Fall.xml │ ├── import_draft_order │ │ ├── chapter │ │ │ └── 3247df3732ea492380e45a4ea1918ffa.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── import_draft_order.xml │ │ ├── drafts │ │ │ └── vertical │ │ │ │ ├── a.xml │ │ │ │ ├── asecond.xml │ │ │ │ ├── b.xml │ │ │ │ ├── c.xml │ │ │ │ ├── d.xml │ │ │ │ ├── z.xml │ │ │ │ └── zsecond.xml │ │ ├── policies │ │ │ ├── assets.json │ │ │ └── import_draft_order │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ ├── sequential │ │ │ ├── 0f4f7649b10141b0bdc9922dcf94515a.xml │ │ │ └── secondseq.xml │ │ ├── static │ │ │ └── subs-esLhHcdKGWvKs.srt │ │ └── vertical │ │ │ ├── 5a05be9d59fc4bb79282c94c9e6b88c7.xml │ │ │ ├── second.xml │ │ │ └── secondsubsection.xml │ ├── imports │ │ ├── 2015.lzdwNM.tar.gz │ │ ├── bad_course.tar.gz │ │ ├── bad_library.tar.gz │ │ ├── entrance_exam_course.2015.tar.gz │ │ ├── funny_cat_video.mp4 │ │ ├── get_html_exception_test.tar.gz │ │ └── library.HhJfPD.tar.gz │ ├── library_empty_problem │ │ ├── library.xml │ │ ├── policies │ │ │ └── assets.json │ │ └── problem │ │ │ ├── afe9dbb29b724181944f56617c72b3e5.xml │ │ │ └── ba28f97e8f33414e9a5de0068508f7fa.xml │ ├── manual-testing-complete │ │ ├── about │ │ │ ├── overview.html │ │ │ └── short_description.html │ │ ├── annotatable │ │ │ ├── 0edc5e96bacc449eaae9fe8b5be75994.xml │ │ │ ├── 0f9fc83830694ffc8fead4fcf7aa8d39.xml │ │ │ ├── 473ab1a4c5064c919ae483ecc86a8df7.xml │ │ │ ├── 5b18cea952a84fb1a34db345a476175a.xml │ │ │ ├── 90e352a0316a4dc68baaca0308f002e3.xml │ │ │ ├── c0a3b20598dc4ebba704a51a309251db.xml │ │ │ └── e13a327cc54f4e56bda64c5e9627edd1.xml │ │ ├── assets │ │ │ └── assets.xml │ │ ├── chapter │ │ │ ├── 2df1fe87253549199f30cabb19e14b7c.xml │ │ │ ├── 3d216a50442f4cd5a1d4171c68f13f58.xml │ │ │ ├── 5bb7a5ab824f460580a756a4f347377c.xml │ │ │ ├── 60989ac1589241ed9dbca0f2070276fd.xml │ │ │ ├── a0178ff300514e24829e239604dce12c.xml │ │ │ ├── a64a6f63f75d430aa71e6ce113c5b4d2.xml │ │ │ ├── ab97a6dbfafd48868c36bed4c8c5391d.xml │ │ │ ├── be8a64868f2f460ea490e001a25e588d.xml │ │ │ └── ce2fd991d84b4a5ca75350eb8e350627.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014.xml │ │ ├── drafts │ │ │ ├── html │ │ │ │ ├── fd120d9503334db5a2ce53c2e0162128.html │ │ │ │ └── fd120d9503334db5a2ce53c2e0162128.xml │ │ │ ├── problem │ │ │ │ ├── 29fe8cca3a99412c801c5b9ce53780c5.xml │ │ │ │ ├── 370cfd42f00843578f50e32545356ef1.xml │ │ │ │ ├── 5904f30aba7a41d3ab1609e58bb5a6c2.xml │ │ │ │ ├── 5c49dcff565848b8a4834ee8b3beeebc.xml │ │ │ │ └── 7e39859879f24e8689861024d4f7cb1e.xml │ │ │ └── vertical │ │ │ │ ├── 006fa27802794e20a0e04e146a7e4e66.xml │ │ │ │ ├── 084d74e8d1494817ac5661ae5893fd61.xml │ │ │ │ ├── 0b73083f132c4ecb8ea24a363efcbc68.xml │ │ │ │ ├── 11b926ee2cde42259b5165b918de0493.xml │ │ │ │ ├── 14d2052331234fd68fdbd984a2ec8396.xml │ │ │ │ ├── 1f17ac7c38b2421b8c6027c3652366c6.xml │ │ │ │ ├── 32b9f88c4c164dd69ae87a0754516267.xml │ │ │ │ ├── 38105f0357534b4999bbc1dcf82c9148.xml │ │ │ │ ├── 4755fc0ee7ff4ed19a720b61810064d1.xml │ │ │ │ ├── 47735fdcfbf1444dbabbd5a09df1a790.xml │ │ │ │ ├── 5bac2ffd65ea4f988bcf474fe93257e6.xml │ │ │ │ ├── 7897479a19e24871bbbdc02457aa3c0b.xml │ │ │ │ ├── 90c15baa6c004d3f90b43af405968de3.xml │ │ │ │ ├── 9a63361c946c4b6486e233d21b4947be.xml │ │ │ │ ├── a4bfead3b0204b15a988d77a5d7f58f2.xml │ │ │ │ └── ccc9fb7ada404ba0986b3fca4056b831.xml │ │ ├── html │ │ │ ├── 82e9d374eeb944489d5decdb6b8fbd76.html │ │ │ ├── 82e9d374eeb944489d5decdb6b8fbd76.xml │ │ │ └── Duplicate_URL_Name.xml │ │ ├── info │ │ │ ├── handouts.html │ │ │ ├── updates.html │ │ │ └── updates.items.json │ │ ├── lti │ │ │ └── b05c0297100f41e888ddadf82b3ce1b2.xml │ │ ├── policies │ │ │ ├── 2014 │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ │ └── assets.json │ │ ├── problem │ │ │ ├── 009f9b6b79404206a2c316117099fed5.xml │ │ │ ├── 11bbd906f12d4cbdbca3050d68cea79f.xml │ │ │ ├── 29fe8cca3a99412c801c5b9ce53780c5.xml │ │ │ ├── 2f7da8477d8748f0aad0f7fc2134b84f.xml │ │ │ ├── 35501134637b4c2b8cfe07ba5e6492bb.xml │ │ │ ├── 3a1e2c95f8a54bc98b65e9373dafc86e.xml │ │ │ ├── 427a1515100a4d08b959ba5852a1630d.xml │ │ │ ├── 440e298f5b804377bc31d06a3f783a5c.xml │ │ │ ├── 45c30a061c3f473499a32d7e14f4a750.xml │ │ │ ├── 45c317cb93d447f293ce982a2eccd77d.xml │ │ │ ├── 5c49dcff565848b8a4834ee8b3beeebc.xml │ │ │ ├── 5e3b300353974a42875052a21823e39b.xml │ │ │ ├── 70257670b9dd45c8afd5abd3c9fe606f.xml │ │ │ ├── 8a5a7653bf804a968c17d398cb91aa4e.xml │ │ │ ├── 9497fab9cc6f4187ba17d23731b614bf.xml │ │ │ ├── 9992192a14ce47fcb71f77d7e77c821c.xml │ │ │ ├── a473cecce312487a8339995bde24be53.xml │ │ │ ├── a5ca9b0f09cc4798bb53e5840e625301.xml │ │ │ ├── b6b80c6b383f4c3c80efc32b968368dc.xml │ │ │ ├── c2ee6e8917fe4c97ac99d7b616ff0b89.xml │ │ │ ├── d0bdd7c3487d4f94b7bcd207f110c20a.xml │ │ │ ├── d30b3812201a46af88d30bd4c7c009e6.xml │ │ │ ├── dcada38f8944442799ac2fed42201641.xml │ │ │ └── eb248c5260254ce094c157ffb8352d16.xml │ │ ├── sequential │ │ │ ├── 01a66b857fad4221b01f742ec0e86c49.xml │ │ │ ├── 0cd40e13b4a045aba07d4f626c8b32de.xml │ │ │ ├── 0d0e69d08e95436fbbf1be4c6dfec48a.xml │ │ │ ├── 0e86943b2cb54a56a1a14c13da3f388d.xml │ │ │ ├── 158963ff751747e3945f3834dd30e5fb.xml │ │ │ ├── 17d39634673a4151b6f337a5c216eb52.xml │ │ │ ├── 1dd8f4178f2a4b9cb09f37c5d6230f9d.xml │ │ │ ├── 21b1a19dbe264a98b06ce9567a3e4171.xml │ │ │ ├── 2db8efb4573842c8854648a3ac9e52a4.xml │ │ │ ├── 2e23db09e8b5472cbae9624208e3e1d7.xml │ │ │ ├── 30e61af5a8d74833bb66e19ccea1e5d8.xml │ │ │ ├── 313d1bb9031c4d529c7018248d6fff52.xml │ │ │ ├── 345d618ca88944668d86586f83bff338.xml │ │ │ ├── 363603b2c7d34d26a3baa9de29be2211.xml │ │ │ ├── 3aa3759deca94e1783b7dc9c148cd483.xml │ │ │ ├── 3b115f75b12b42699a3148ea0ffee76b.xml │ │ │ ├── 4026dba735fe450faf81f766c63bef8b.xml │ │ │ ├── 47b7432f998c45abad9f79effeda60bf.xml │ │ │ ├── 4cd0b5b3dd3343b5937fea80ec5005cc.xml │ │ │ ├── 508e5fa820b643b1a329e2ab5dd59393.xml │ │ │ ├── 589cf38cfb22450a901818b48d4b7ff5.xml │ │ │ ├── 613404c6df1445ed81f12883dde30a41.xml │ │ │ ├── 67c9c6cd94fe498fb1dc965c35eca3d3.xml │ │ │ ├── 6c4c10b89cc449fcbde0006c47e3ee26.xml │ │ │ ├── 7a598df4cc4345138332c1d19ecd963d.xml │ │ │ ├── 7fe9686bb8fe4edba75867ddd1d7b1c5.xml │ │ │ ├── 8ad25eec767f40ae81bcc7555778c91e.xml │ │ │ ├── 948737f132254c2aa65f6024edee7e68.xml │ │ │ ├── aa338c6acd1e498ca8d4ccf6ded72f9b.xml │ │ │ ├── ac37154b78454cecaad080221cf1dbd5.xml │ │ │ ├── b857bc7d37c74e38b51741340da91dcd.xml │ │ │ ├── bb9bc5a7d0d945cea2a77e3d85f28c41.xml │ │ │ ├── bba59b360c344a1db0eb3239e2381484.xml │ │ │ ├── bd0b30ef8bea48ff86559be1cbe2fa49.xml │ │ │ ├── c18b834531e14a3fb070dabf16380541.xml │ │ │ ├── c59bd9a5a7ec4b31a95515c14bb9f552.xml │ │ │ ├── c681c865017d4c0ea931f7345aa79277.xml │ │ │ ├── c76b46a765e24c1f9f51de2b49131be0.xml │ │ │ ├── ca6fc483ef064fa7b275f9e712f041f6.xml │ │ │ ├── d0e7879a63a4429fb1223a22443681b9.xml │ │ │ ├── d49ee0959c564c8d8b55660ca5fa9bcd.xml │ │ │ ├── d6d7e96bf6a441a4b4e7c7eac0d0e573.xml │ │ │ ├── d7d631967807476485aa26ba0c39a992.xml │ │ │ ├── d912a92ed03d4f818661a1636b8a6f9b.xml │ │ │ ├── dc2b88afd57241f9bcd2dcbd03c6c2f3.xml │ │ │ ├── f09502cf408742c2aa3c92705ab1dce7.xml │ │ │ ├── f0e52b8eec5647ffb6013aef62b3d309.xml │ │ │ ├── f585fca58e5c4fe8ab231a5f62701de3.xml │ │ │ ├── f58fd90cbd794cad881692d3b6e5cdbf.xml │ │ │ ├── f9372e3b199a4986a46c8d18e094b931.xml │ │ │ └── fbbe37e2980c4f0d96b0b8ac45c0378b.xml │ │ ├── static │ │ │ ├── 1.pdf │ │ │ ├── Screen Shot 2013-04-16 at 1.43.36 PM.png │ │ │ └── subs_OEoXaMPEzfM.srt.sjson │ │ ├── tabs │ │ │ └── 8e4cce2b4aaf4ba28b1220804619e41f.html │ │ ├── vertical │ │ │ ├── 0a1602f0f191422ba5ed727f903627b2.xml │ │ │ ├── 0b693c2547674645a8afd0be4c57b8b7.xml │ │ │ ├── 0b73083f132c4ecb8ea24a363efcbc68.xml │ │ │ ├── 18b50987e2d84bcca2cfc74ef6b25275.xml │ │ │ ├── 193fbc9bb9184ba685d01430cb2025d3.xml │ │ │ ├── 1f17ac7c38b2421b8c6027c3652366c6.xml │ │ │ ├── 224cff129b784243a79f08dd7203151c.xml │ │ │ ├── 4aeec80b652c4cc2bf38c248d6440c9f.xml │ │ │ ├── 50c89b9bf3bc40c2bb723fc7d1c756d1.xml │ │ │ ├── 53142c50e5284f9798e8e0cab8471528.xml │ │ │ ├── 536b3582ce354e9da79f157077172bb3.xml │ │ │ ├── 572f898249da49bc9ee426804302aa24.xml │ │ │ ├── 6b1a4d545905465ca491f0115b6e759b.xml │ │ │ ├── 6b54ae89dc554f77b4dd94e1d9911df6.xml │ │ │ ├── 6cb018f4cc884e98b9df621b4cc54a29.xml │ │ │ ├── 81323bb6c1cd4b83b8cd1e9b8fb119a7.xml │ │ │ ├── 856a9709ac974c92b539710bb64fb4c5.xml │ │ │ ├── 93113ad02cac43659c0e1833880408f3.xml │ │ │ ├── 999c7e94329144cdb844aec9671fc8ca.xml │ │ │ ├── 99ab6b79e2b6426f9bc7e07e8540a655.xml │ │ │ ├── Duplicate_URL_Name.xml │ │ │ ├── a99ab4f608de41e9927d281dcfbd4343.xml │ │ │ ├── b34ef5e4257b4a34a60c2679aeeb5455.xml │ │ │ ├── be87d2061b8f41be87293fcc643514c7.xml │ │ │ ├── c641d8fe821440bea1781287d05fdc82.xml │ │ │ ├── c7c39a80da5f4ac4935ab83790528063.xml │ │ │ ├── c87ff358615846b08b85f66ebce94fb3.xml │ │ │ ├── cd6b719c0f9c46e7abd2d44c37d49cd8.xml │ │ │ ├── da4f07aceaf542f5b1807c779a719067.xml │ │ │ ├── ddd289f35194456eaa470a3fd0d08ca2.xml │ │ │ ├── de8fb6b7e0904de3a39db9d4bfaab6a2.xml │ │ │ ├── e81c7ddcf5434387a2a6163ca973520c.xml │ │ │ ├── e8a308821e204375905bedc227fa769f.xml │ │ │ ├── e9c213fb60134b93a3b1b4ba882cb1a7.xml │ │ │ ├── ec70919ea9c24ed192e37e7d022d4133.xml │ │ │ └── f3387cc263aa4e2e9070b6954a9c1b90.xml │ │ ├── video │ │ │ └── 37ec61cf011c429db8cb5f49b47681f7.xml │ │ └── word_cloud │ │ │ └── 5d607a74f7214eaa92079c3195e0badb.xml │ ├── pure_xblock │ │ └── course.xml │ ├── pure_xblock_draft │ │ ├── chapter │ │ │ └── 150311f8087e47f4858f7db44df32ee5.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── drafts │ │ │ └── vertical │ │ │ │ └── 5e8c6159aebf497db24c6eaea9d4982b.xml │ │ └── sequential │ │ │ └── b68bb50c4f1f41a3abeec1dac309087d.xml │ ├── pure_xblock_public │ │ └── course.xml │ ├── scoreable │ │ ├── README │ │ ├── about │ │ │ └── overview.html │ │ ├── assets │ │ │ └── assets.xml │ │ ├── chapter │ │ │ └── chapter1.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── course.xml │ │ ├── library_content │ │ │ └── library_content.xml │ │ ├── lti │ │ │ ├── library_lti.xml │ │ │ └── lti.xml │ │ ├── policies │ │ │ ├── assets.json │ │ │ └── course │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ ├── problem │ │ │ ├── capa.xml │ │ │ ├── library_mc.xml │ │ │ └── library_text.xml │ │ ├── sequential │ │ │ └── sequential1.xml │ │ └── vertical │ │ │ ├── vertical1_capa.xml │ │ │ ├── vertical2_ora.xml │ │ │ ├── vertical3_sga.xml │ │ │ ├── vertical4_lti.xml │ │ │ ├── vertical5_lti_consumer.xml │ │ │ ├── vertical6_library_content.xml │ │ │ └── vertical7_dndv2.xml │ ├── self_assessment │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ ├── roots │ │ │ └── 2012_Fall.xml │ │ └── selfassessment │ │ │ └── SampleQuestion.xml │ ├── simple │ │ ├── README.md │ │ ├── course.xml │ │ ├── html │ │ │ └── toylab.html │ │ ├── problem │ │ │ ├── L1_Problem_1.xml │ │ │ └── ps01-simple.xml │ │ └── static │ │ │ └── images_course_image.jpg │ ├── simple_with_draft │ │ ├── README.md │ │ ├── course.xml │ │ ├── drafts │ │ │ └── vertical │ │ │ │ └── test_vertical.xml │ │ ├── html │ │ │ └── toylab.html │ │ └── problem │ │ │ ├── L1_Problem_1.xml │ │ │ └── ps01-simple.xml │ ├── split_course_with_static_tabs │ │ ├── course.xml │ │ ├── course │ │ │ └── course.xml │ │ ├── policies │ │ │ ├── assets.json │ │ │ └── course │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ └── tabs │ │ │ └── test_page.html │ ├── split_test_block │ │ └── course.xml │ ├── split_test_block_draft │ │ ├── chapter │ │ │ └── 7ba42782322541d29a4d1be1eae4e4e8.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 3111.xml │ │ ├── drafts │ │ │ ├── html │ │ │ │ ├── 5f2b89070ad64ea7846800c11d44ed72.html │ │ │ │ └── 5f2b89070ad64ea7846800c11d44ed72.xml │ │ │ ├── problem │ │ │ │ └── 50cef3605ec6445b9f11360640d9a192.xml │ │ │ ├── split_test │ │ │ │ └── fb34c21fe64941999eaead421a8711b8.xml │ │ │ └── vertical │ │ │ │ ├── 0faf29473cf1497baa33fcc828b179cd.xml │ │ │ │ ├── 5276f65d0e184dcca0841044576a540b.xml │ │ │ │ └── 9f0941d021414798836ef140fb5f6841.xml │ │ ├── policies │ │ │ ├── 3111 │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ │ └── assets.json │ │ └── sequential │ │ │ └── 75f1ab8297514713b8d8935f6745a0f7.xml │ ├── static │ │ ├── contains.sh │ │ ├── door_2.ogg │ │ ├── picture1.jpg │ │ ├── picture2.jpg │ │ └── picture3.jpg │ ├── test_about_blob_end_date │ │ ├── README.md │ │ ├── about │ │ │ └── end_date.html │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ └── policies │ │ │ └── 2012_Fall.json │ ├── test_end │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ └── policies │ │ │ └── 2012_Fall.json │ ├── test_exam_registration │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── html │ │ │ ├── toylab.html │ │ │ └── toylab.xml │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ └── roots │ │ │ └── 2012_Fall.xml │ ├── test_import_course │ │ ├── about │ │ │ └── end_date.html │ │ ├── chapter │ │ │ └── vertical_container.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── info │ │ │ └── handouts.html │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ ├── sequential │ │ │ └── vertical_sequential.xml │ │ ├── static │ │ │ ├── handouts │ │ │ │ └── sample_handout.txt │ │ │ └── sample_static.txt │ │ ├── static_import │ │ │ └── should_be_imported.html │ │ ├── tabs │ │ │ ├── resources.html │ │ │ └── syllabus.html │ │ ├── vertical │ │ │ └── vertical_test.xml │ │ └── video │ │ │ └── separate_file_video.xml │ ├── test_import_course_2 │ │ ├── about │ │ │ └── end_date.html │ │ ├── chapter │ │ │ └── vertical_container.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2014_Fall.xml │ │ ├── info │ │ │ └── handouts.html │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ ├── sequential │ │ │ └── vertical_sequential.xml │ │ ├── vertical │ │ │ └── vertical_test.xml │ │ └── video │ │ │ └── separate_file_video.xml │ ├── test_start_date │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── html │ │ │ ├── toylab.html │ │ │ └── toylab.xml │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ └── roots │ │ │ └── 2012_Fall.xml │ ├── test_unicode │ │ ├── about │ │ │ └── end_date.html │ │ ├── chapter │ │ │ └── simple_html.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── policies │ │ │ └── 2012_Fall.json │ │ ├── sequential │ │ │ └── vertical_sequential.xml │ │ ├── tabs │ │ │ └── ®esources.html │ │ └── vertical │ │ │ └── vertical_test.xml │ ├── toy │ │ ├── README.md │ │ ├── about │ │ │ ├── 2012_Fall │ │ │ │ └── effort.html │ │ │ ├── end_date.html │ │ │ └── short_description.html │ │ ├── chapter │ │ │ ├── handout_container.xml │ │ │ ├── poll_test.xml │ │ │ ├── secret │ │ │ │ └── magic.xml │ │ │ └── vertical_container.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2012_Fall.xml │ │ ├── html │ │ │ ├── badlink.html │ │ │ ├── badlink.xml │ │ │ ├── just_img.html │ │ │ ├── just_img.xml │ │ │ ├── nonportable.html │ │ │ ├── nonportable.xml │ │ │ ├── nonportable_link.html │ │ │ ├── nonportable_link.xml │ │ │ ├── secret │ │ │ │ ├── toylab.html │ │ │ │ └── toylab.xml │ │ │ ├── toyhtml.html │ │ │ ├── toyhtml.xml │ │ │ ├── toyjumpto.html │ │ │ ├── toyjumpto.xml │ │ │ ├── with_styling.html │ │ │ └── with_styling.xml │ │ ├── info │ │ │ └── handouts.html │ │ ├── policies │ │ │ ├── 2012_Fall.json │ │ │ └── assets.json │ │ ├── roots │ │ │ └── 2012_Fall.xml │ │ ├── sequential │ │ │ └── vertical_sequential.xml │ │ ├── static │ │ │ ├── another_static.txt │ │ │ ├── handouts │ │ │ │ └── sample_handout.txt │ │ │ ├── just_a_test.jpg │ │ │ ├── sample_static.html │ │ │ └── textbook.pdf │ │ ├── tabs │ │ │ ├── resources.html │ │ │ └── syllabus.html │ │ ├── vertical │ │ │ └── vertical_test.xml │ │ └── video │ │ │ ├── separate_file_video.xml │ │ │ └── video_with_end_time.xml │ ├── two_toys │ │ ├── README │ │ ├── chapter │ │ │ └── Overview.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── TT_2012_Fall.xml │ │ ├── policies │ │ │ └── TT_2012_Fall │ │ │ │ ├── grading_policy.json │ │ │ │ └── policy.json │ │ ├── video │ │ │ ├── Video_Resources.xml │ │ │ └── Welcome.xml │ │ └── videosequence │ │ │ └── Toy_Videos.xml │ ├── uploads │ │ ├── .gitignore │ │ ├── 1mb_transcripts.srt │ │ ├── Signature-0.png │ │ ├── Signature-1.png │ │ ├── asset.html │ │ ├── auto_reg_enrollment.csv │ │ ├── auto_reg_enrollment_errors_warnings.csv │ │ ├── chinese_transcripts.srt │ │ ├── chinese_transcripts_with_BOM.srt │ │ ├── cohort_users_missing_cohort_column.csv │ │ ├── cohort_users_missing_user_columns.csv │ │ ├── english_single_transcript.srt │ │ ├── generic_csv.csv │ │ ├── image.jpg │ │ ├── larger_image.jpg │ │ ├── list-icon-visited.png │ │ ├── python_lib.zip │ │ ├── python_lib_zip │ │ │ ├── README.txt │ │ │ ├── number_helpers.py │ │ │ └── sub │ │ │ │ ├── __init__.py │ │ │ │ └── submodule.py │ │ ├── simplified_chinese.srt │ │ ├── studio-uploads │ │ │ ├── file-0.png │ │ │ ├── file-1.png │ │ │ ├── file-10.png │ │ │ ├── file-11.png │ │ │ ├── file-12.png │ │ │ ├── file-13.pdf │ │ │ ├── file-14.pdf │ │ │ ├── file-15.pdf │ │ │ ├── file-16.pdf │ │ │ ├── file-17.pdf │ │ │ ├── file-18.pdf │ │ │ ├── file-19.pdf │ │ │ ├── file-2.png │ │ │ ├── file-20.pdf │ │ │ ├── file-21.pdf │ │ │ ├── file-22.pdf │ │ │ ├── file-23.pdf │ │ │ ├── file-24.pdf │ │ │ ├── file-25.pdf │ │ │ ├── file-26.js │ │ │ ├── file-27.js │ │ │ ├── file-28.js │ │ │ ├── file-29.js │ │ │ ├── file-3.png │ │ │ ├── file-30.js │ │ │ ├── file-31.js │ │ │ ├── file-32.js │ │ │ ├── file-33.js │ │ │ ├── file-34.js │ │ │ ├── file-35.js │ │ │ ├── file-36.js │ │ │ ├── file-37.js │ │ │ ├── file-38.js │ │ │ ├── file-39.txt │ │ │ ├── file-4.png │ │ │ ├── file-40.txt │ │ │ ├── file-41.txt │ │ │ ├── file-42.txt │ │ │ ├── file-43.txt │ │ │ ├── file-44.txt │ │ │ ├── file-45.txt │ │ │ ├── file-46.txt │ │ │ ├── file-47.txt │ │ │ ├── file-48.txt │ │ │ ├── file-49.txt │ │ │ ├── file-5.png │ │ │ ├── file-50.txt │ │ │ ├── file-6.png │ │ │ ├── file-7.png │ │ │ ├── file-8.png │ │ │ └── file-9.png │ │ ├── subs_3_yD_cEKoCk.srt.sjson │ │ ├── subs_OEoXaMPEzfM.srt.sjson │ │ ├── subs_b7xgknqkQk8.srt.sjson │ │ ├── subs_t__eq_exist.srt.sjson │ │ ├── subs_t_neq_exist.srt.sjson │ │ ├── subs_t_not_exist.srt.sjson │ │ ├── textbook.pdf │ │ ├── traditional_chinese.srt │ │ ├── transcript.srt │ │ ├── uk_transcripts.sjson │ │ ├── uk_transcripts.srt │ │ └── zh_subs_OEoXaMPEzfM.srt.sjson │ ├── word_cloud │ │ ├── README.md │ │ ├── about │ │ │ └── 2013_Spring │ │ │ │ ├── overview.html │ │ │ │ ├── prerequisites.html │ │ │ │ ├── short_description.html │ │ │ │ └── video.html │ │ ├── chapter │ │ │ └── Staff.xml │ │ ├── course.xml │ │ ├── course │ │ │ └── 2013_Spring.xml │ │ ├── creating_course.xml │ │ ├── info │ │ │ └── 2013_Spring │ │ │ │ ├── handouts.html │ │ │ │ └── updates.html │ │ ├── policies │ │ │ └── 2013_Spring │ │ │ │ └── policy.json │ │ ├── roots │ │ │ └── 2013_Spring.xml │ │ ├── sequential │ │ │ └── Problem_Demos.xml │ │ ├── static │ │ │ └── README │ │ └── word_cloud │ │ │ └── cloud.xml │ └── xml_dag │ │ ├── README.md │ │ ├── course.xml │ │ ├── course │ │ └── 2012_Fall.xml │ │ ├── html │ │ ├── toyhtml.html │ │ └── toyhtml.xml │ │ ├── policies │ │ └── 2012_Fall.json │ │ ├── static │ │ └── just_a_test.jpg │ │ └── vertical │ │ └── vertical_test.xml │ ├── db_fixtures │ ├── bulk_email_flag.json │ ├── certificates_web_view.json │ ├── commerce_config.json │ ├── edx-notes_client.json │ ├── edx-organizations.json │ ├── edxval.json │ ├── enterprise.json │ ├── released_lang.json │ ├── sites.json │ ├── third_party_auth.json │ ├── unicode_user.json │ ├── waffle_flags.json │ └── xblock_configuration.json │ ├── pacts │ ├── __init__.py │ └── middleware.py │ ├── pytest.ini │ ├── templates │ ├── edxmako.html │ ├── theme-footer.html │ ├── theme-google-analytics.html │ ├── theme-head-extra.html │ └── theme-header.html │ ├── test-theme │ ├── cms │ │ └── static │ │ │ ├── css │ │ │ └── .gitignore │ │ │ └── sass │ │ │ └── partials │ │ │ └── _variables.scss │ └── lms │ │ ├── static │ │ ├── css │ │ │ └── .gitignore │ │ ├── images │ │ │ └── logo.png │ │ └── sass │ │ │ └── partials │ │ │ └── base │ │ │ └── _variables.scss │ │ └── templates │ │ ├── courseware │ │ ├── courses.html │ │ ├── progress.html │ │ └── test-theme-custom.html │ │ ├── dashboard.html │ │ ├── footer.html │ │ └── static_templates │ │ └── embargo.html │ └── utils.py ├── conf └── locale │ ├── ar │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── babel_mako.cfg │ ├── babel_third_party.cfg │ ├── babel_underscore.cfg │ ├── ca │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── config.yaml │ ├── de_DE │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── el │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── en │ └── LC_MESSAGES │ │ ├── django.po │ │ └── djangojs.po │ ├── eo │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── es_419 │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── eu_ES │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── fa_IR │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── fr │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── he │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── hi │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── id │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── it_IT │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── ja_JP │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── ka │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── ko_KR │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── lt_LT │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── lv │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── mn │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── pl │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── pt_BR │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── pt_PT │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── rtl │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── ru │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── sk │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── sw_KE │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── th │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── tr_TR │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── uk │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── vi │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── zh_CN │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ ├── zh_HANS │ └── LC_MESSAGES │ │ ├── django.mo │ │ ├── django.po │ │ ├── djangojs.mo │ │ └── djangojs.po │ └── zh_TW │ └── LC_MESSAGES │ ├── django.mo │ ├── django.po │ ├── djangojs.mo │ └── djangojs.po ├── conftest.py ├── db_keyword_overrides.yml ├── doc.rst.j2 ├── docs ├── __init__.py ├── api │ ├── .gitignore │ ├── Makefile │ ├── __init__.py │ ├── conf.py │ └── index.rst ├── decisions │ ├── 0001-courses-in-lms.rst │ ├── 0002-inter-app-apis.rst │ ├── 0003-reduce-bokchoy-testing.rst │ ├── 0004-managing-django-settings.rst │ ├── 0005-studio-lms-subdomain-boundaries.rst │ ├── 0006-role-of-xblock.rst │ ├── 0007-sys-path-modification-removal.rst │ ├── 0008-secret-key-usage.rst │ ├── 0009_simplify_ratelimiting.rst │ ├── 0010-extract-enrollment-python-api.rst │ ├── 0011-limit-modulestore-use-in-lms.rst │ ├── 0012-emit-course-completion-events.rst │ ├── 0013-cms-vs-studio.rst │ ├── 0013-library-reference-content-block.rst │ ├── 0014-justifying-new-apps.rst │ ├── 0015-sub-project-dissolution.rst │ ├── 0016-add-notifications-app.rst │ └── 0017-reimplement-asset-processing.rst ├── docs_settings.py ├── guides │ ├── .gitignore │ ├── Makefile │ ├── __init__.py │ ├── celery.rst │ ├── conf.py │ ├── docstrings │ │ ├── cms_index.rst │ │ ├── common_djangoapps.rst │ │ ├── common_index.rst │ │ ├── docstrings.rst │ │ └── lms_index.rst │ ├── extension_points.rst │ ├── extensions │ │ └── tinymce_plugins.rst │ ├── frontend │ │ ├── bootstrap.rst │ │ ├── javascript.rst │ │ ├── static_assets.rst │ │ └── styling.rst │ ├── guides.rst │ ├── hooks │ │ ├── events.rst │ │ ├── filters.rst │ │ └── index.rst │ ├── index.rst │ ├── make.bat │ ├── studio_oauth.rst │ ├── testing │ │ ├── test_pyramid.png │ │ └── testing.rst │ └── v1_sass_pipeline.webp ├── sw2sphinxopenapi.py ├── swagger.yaml └── technical │ ├── .gitignore │ ├── Makefile │ ├── conf.py │ ├── featuretoggles.rst │ ├── index.rst │ └── settings.rst ├── jest.config.js ├── lms ├── README.rst ├── __init__.py ├── celery.py ├── djangoapps │ ├── __init__.py │ ├── badges │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── apps.py │ │ ├── backends │ │ │ ├── __init__.py │ │ │ ├── badgr.py │ │ │ ├── base.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── dummy_backend.py │ │ │ │ └── test_badgr_backend.py │ │ ├── events │ │ │ ├── __init__.py │ │ │ ├── course_complete.py │ │ │ ├── course_meta.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_course_complete.py │ │ │ │ └── test_course_meta.py │ │ ├── handlers.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_data__migrate_assertions.py │ │ │ ├── 0003_schema__add_event_configuration.py │ │ │ ├── 0004_badgeclass_badgr_server_slug.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── service.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ └── test_models.py │ │ └── utils.py │ ├── branding │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── api_urls.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_api.py │ │ │ ├── test_models.py │ │ │ ├── test_page.py │ │ │ └── test_views.py │ │ └── views.py │ ├── bulk_email │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── data.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 001-bulk-email-content-sanitization.rst │ │ ├── fixtures │ │ │ ├── course_email_template.json │ │ │ ├── plain-html-no-newlines-or-tabs.txt │ │ │ ├── plain-html-no-newlines.txt │ │ │ └── plain-html.txt │ │ ├── forms.py │ │ ├── message_types.py │ │ ├── messages.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_data__load_course_email_template.py │ │ │ ├── 0003_config_model_feature_flag.py │ │ │ ├── 0004_add_email_targets.py │ │ │ ├── 0005_move_target_data.py │ │ │ ├── 0006_course_mode_targets.py │ │ │ ├── 0007_disabledcourse.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── models_api.py │ │ ├── policies.py │ │ ├── signals.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_api.py │ │ │ ├── test_course_optout.py │ │ │ ├── test_email.py │ │ │ ├── test_err_handling.py │ │ │ ├── test_forms.py │ │ │ ├── test_models.py │ │ │ ├── test_signals.py │ │ │ ├── test_tasks.py │ │ │ └── test_views.py │ │ ├── toggles.py │ │ ├── urls.py │ │ └── views.py │ ├── bulk_enroll │ │ ├── __init__.py │ │ ├── serializers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── bulk_user_retirement │ │ ├── __init__.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── ccx │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v0 │ │ │ │ ├── __init__.py │ │ │ │ ├── paginators.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── custom_exception.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_customcourseforedx_structure_json.py │ │ │ ├── 0003_add_master_course_staff_in_ccx.py │ │ │ ├── 0004_seed_forum_roles_in_ccx_courses.py │ │ │ ├── 0005_change_ccx_coach_to_staff.py │ │ │ ├── 0006_set_display_name_as_override.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── modulestore.py │ │ ├── overrides.py │ │ ├── permissions.py │ │ ├── plugins.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_ccx_modulestore.py │ │ │ ├── test_field_override_performance.py │ │ │ ├── test_models.py │ │ │ ├── test_overrides.py │ │ │ ├── test_tasks.py │ │ │ ├── test_utils.py │ │ │ ├── test_views.py │ │ │ └── utils.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── certificates │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apis │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v0 │ │ │ │ ├── __init__.py │ │ │ │ ├── permissions.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── apps.py │ │ ├── config.py │ │ ├── data.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 001-allowlist-cert-requirements.rst │ │ │ │ ├── 002-cert-requirements.rst │ │ │ │ ├── 003-web-certs.rst │ │ │ │ ├── 004-cert-status.rst │ │ │ │ ├── 005-cert-display-settings.rst │ │ │ │ ├── 006-cert-date-override.rst │ │ │ │ ├── 007-transfer-certificate-signatures-from-mongo.rst │ │ │ │ └── 008-certificate-model-remnants.rst │ │ ├── generation.py │ │ ├── generation_handler.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── cert_generation.py │ │ │ │ ├── regenerate_noidv_cert.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_cert_generation.py │ │ │ │ └── test_regenerate_noidv_cert.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_data__certificatehtmlviewconfiguration_data.py │ │ │ ├── 0003_data__default_modes.py │ │ │ ├── 0004_certificategenerationhistory.py │ │ │ ├── 0005_auto_20151208_0801.py │ │ │ ├── 0006_certificatetemplateasset_asset_slug.py │ │ │ ├── 0007_certificateinvalidation.py │ │ │ ├── 0008_schema__remove_badges.py │ │ │ ├── 0009_certificategenerationcoursesetting_language_self_generation.py │ │ │ ├── 0010_certificatetemplate_language.py │ │ │ ├── 0011_certificatetemplate_alter_unique.py │ │ │ ├── 0012_certificategenerationcoursesetting_include_hours_of_effort.py │ │ │ ├── 0013_remove_certificategenerationcoursesetting_enabled.py │ │ │ ├── 0014_change_eligible_certs_manager.py │ │ │ ├── 0015_add_masters_choice.py │ │ │ ├── 0016_historicalgeneratedcertificate.py │ │ │ ├── 0017_add_mode_20201118_1725.py │ │ │ ├── 0018_historicalcertificateinvalidation.py │ │ │ ├── 0019_allowlistgenerationconfiguration.py │ │ │ ├── 0020_remove_existing_mgmt_cmd_args.py │ │ │ ├── 0021_remove_certificate_allowlist_duplicate_records.py │ │ │ ├── 0022_add_unique_constraints_to_certificatewhitelist_model.py │ │ │ ├── 0023_certificategenerationcommandconfiguration.py │ │ │ ├── 0024_delete_allowlistgenerationconfiguration.py │ │ │ ├── 0025_cleanup_certificate_errors.py │ │ │ ├── 0026_certificateallowlist.py │ │ │ ├── 0027_historicalcertificateallowlist.py │ │ │ ├── 0028_allowlist_data_20210615_2033.py │ │ │ ├── 0029_allowlist_created_20210623_1417.py │ │ │ ├── 0030_delete_certificatewhitelist.py │ │ │ ├── 0031_certificatedateoverride_historicalcertificatedateoverride.py │ │ │ ├── 0032_change_certificatedateoverride_date.py │ │ │ ├── 0033_auto_20220307_1100.py │ │ │ ├── 0034_auto_20220401_1213.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── permissions.py │ │ ├── services.py │ │ ├── signals.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_api.py │ │ │ ├── test_data.py │ │ │ ├── test_events.py │ │ │ ├── test_filters.py │ │ │ ├── test_generation.py │ │ │ ├── test_generation_handler.py │ │ │ ├── test_models.py │ │ │ ├── test_services.py │ │ │ ├── test_signals.py │ │ │ ├── test_support_views.py │ │ │ ├── test_tasks.py │ │ │ ├── test_utils.py │ │ │ ├── test_views.py │ │ │ ├── test_webview_views.py │ │ │ └── tests.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── support.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_filters.py │ │ │ └── webview.py │ ├── commerce │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ ├── v0 │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── permissions.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_serializers.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── exceptions.py │ │ ├── http.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── configure_commerce.py │ │ │ │ ├── create_orders_for_old_enterprise_course_enrollment.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_configure_commerce.py │ │ │ │ └── test_create_orders_for_old_enterprise_course_enrollmnet.py │ │ ├── migrations │ │ │ ├── 0001_data__add_ecommerce_service_user.py │ │ │ ├── 0002_commerceconfiguration.py │ │ │ ├── 0003_auto_20160329_0709.py │ │ │ ├── 0004_auto_20160531_0950.py │ │ │ ├── 0005_commerceconfiguration_enable_automatic_refund_approval.py │ │ │ ├── 0006_auto_20170424_1734.py │ │ │ ├── 0007_auto_20180313_0609.py │ │ │ ├── 0008_auto_20191024_2048.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── signals.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── mocks.py │ │ │ ├── test_signals.py │ │ │ ├── test_utils.py │ │ │ └── test_views.py │ │ └── utils.py │ ├── course_api │ │ ├── __init__.py │ │ ├── api.py │ │ ├── blocks │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── forms.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── helpers.py │ │ │ │ ├── pacts │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── api-block-contract.json │ │ │ │ │ ├── verify_pact.py │ │ │ │ │ └── views.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_serializers.py │ │ │ │ └── test_views.py │ │ │ ├── toggles.py │ │ │ ├── transformers │ │ │ │ ├── __init__.py │ │ │ │ ├── block_completion.py │ │ │ │ ├── block_counts.py │ │ │ │ ├── block_depth.py │ │ │ │ ├── blocks_api.py │ │ │ │ ├── extra_fields.py │ │ │ │ ├── milestones.py │ │ │ │ ├── navigation.py │ │ │ │ ├── student_view.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_block_completion.py │ │ │ │ │ ├── test_block_counts.py │ │ │ │ │ ├── test_block_depth.py │ │ │ │ │ ├── test_extra_fields.py │ │ │ │ │ ├── test_milestones.py │ │ │ │ │ ├── test_navigation.py │ │ │ │ │ ├── test_student_view.py │ │ │ │ │ ├── test_video_stream_priority.py │ │ │ │ │ └── test_video_urls.py │ │ │ │ ├── video_stream_priority.py │ │ │ │ └── video_urls.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── exceptions.py │ │ ├── forms.py │ │ ├── permissions.py │ │ ├── serializers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── mixins.py │ │ │ ├── test_api.py │ │ │ ├── test_forms.py │ │ │ ├── test_permissions.py │ │ │ ├── test_serializers.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── course_blocks │ │ ├── __init__.py │ │ ├── api.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── transformers │ │ │ ├── __init__.py │ │ │ ├── access_denied_filter.py │ │ │ ├── hidden_content.py │ │ │ ├── library_content.py │ │ │ ├── load_override_data.py │ │ │ ├── split_test.py │ │ │ ├── start_date.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── helpers.py │ │ │ │ ├── test_hidden_content.py │ │ │ │ ├── test_library_content.py │ │ │ │ ├── test_load_override_data.py │ │ │ │ ├── test_split_test.py │ │ │ │ ├── test_start_date.py │ │ │ │ ├── test_user_partitions.py │ │ │ │ └── test_visibility.py │ │ │ ├── user_partitions.py │ │ │ ├── utils.py │ │ │ └── visibility.py │ │ ├── usage_info.py │ │ └── utils.py │ ├── course_goals │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── weekly_learning_goals_design.rst │ │ ├── handlers.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── goal_reminder_email.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_goal_reminder_email.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20171010_1129.py │ │ │ ├── 0003_historicalcoursegoal.py │ │ │ ├── 0004_auto_20210806_0137.py │ │ │ ├── 0005_useractivity.py │ │ │ ├── 0006_add_unsubscribe_token.py │ │ │ ├── 0007_set_unsubscribe_token_default.py │ │ │ ├── 0008_coursegoalreminderstatus.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── templates │ │ │ └── course_goals │ │ │ │ └── edx_ace │ │ │ │ └── goalreminder │ │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ └── test_user_activity.py │ ├── course_home_api │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── course_metadata │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ └── views.py │ │ ├── dates │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ └── views.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── outline │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_goals.py │ │ │ │ └── test_view.py │ │ │ ├── v1 │ │ │ │ └── __init__.py │ │ │ └── views.py │ │ ├── progress │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ └── views.py │ │ ├── serializers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_utils.py │ │ │ └── utils.py │ │ ├── toggles.py │ │ ├── urls.py │ │ └── utils.py │ ├── course_wiki │ │ ├── __init__.py │ │ ├── editors.py │ │ ├── middleware.py │ │ ├── plugins │ │ │ ├── __init__.py │ │ │ ├── course_app.py │ │ │ └── markdownedx │ │ │ │ ├── __init__.py │ │ │ │ ├── mdx_mathjax.py │ │ │ │ ├── mdx_video.py │ │ │ │ └── wiki_plugin.py │ │ ├── settings.py │ │ ├── tab.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_access.py │ │ │ ├── test_comprehensive_theming.py │ │ │ ├── test_middleware.py │ │ │ ├── test_tab.py │ │ │ └── tests.py │ │ ├── utils.py │ │ └── views.py │ ├── courseware │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── access.py │ │ ├── access_response.py │ │ ├── access_utils.py │ │ ├── admin.py │ │ ├── block_render.py │ │ ├── config.py │ │ ├── constants.py │ │ ├── context_processor.py │ │ ├── course_tools.py │ │ ├── courses.py │ │ ├── courseware_access_exception.py │ │ ├── date_summary.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 0001-xblock-content-overrides.rst │ │ │ │ ├── 0002-permissions-via-django-rules.rst │ │ │ │ ├── 0003-permissions-via-bridgekeeper.rst │ │ │ │ └── 0004-personalized-relative-dates.rst │ │ ├── entrance_exams.py │ │ ├── exceptions.py │ │ ├── field_overrides.py │ │ ├── fields.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── clean_xml.py │ │ │ │ ├── dump_course_ids.py │ │ │ │ ├── dump_course_ids_with_filter.py │ │ │ │ ├── dump_course_structure.py │ │ │ │ ├── import.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_dump_course.py │ │ ├── masquerade.py │ │ ├── middleware.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_coursedynamicupgradedeadlineconfiguration_dynamicupgradedeadlineconfiguration.py │ │ │ ├── 0003_auto_20170825_0935.py │ │ │ ├── 0004_auto_20171010_1639.py │ │ │ ├── 0005_orgdynamicupgradedeadlineconfiguration.py │ │ │ ├── 0006_remove_module_id_index.py │ │ │ ├── 0007_remove_done_index.py │ │ │ ├── 0008_move_idde_to_edx_when.py │ │ │ ├── 0009_auto_20190703_1955.py │ │ │ ├── 0010_auto_20190709_1559.py │ │ │ ├── 0011_csm_id_bigint.py │ │ │ ├── 0012_adjust_fields.py │ │ │ ├── 0013_auto_20191001_1858.py │ │ │ ├── 0014_fix_nan_value_for_global_speed.py │ │ │ ├── 0015_add_courseware_stats_index.py │ │ │ ├── 0016_lastseencoursewaretimezone.py │ │ │ ├── 0017_financialassistanceconfiguration.py │ │ │ └── __init__.py │ │ ├── model_data.py │ │ ├── models.py │ │ ├── permissions.py │ │ ├── plugins.py │ │ ├── rules.py │ │ ├── self_paced_overrides.py │ │ ├── services.py │ │ ├── student_field_overrides.py │ │ ├── tabs.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── animport.py │ │ │ ├── factories.py │ │ │ ├── helpers.py │ │ │ ├── pacts │ │ │ │ ├── __init__.py │ │ │ │ ├── course-xblock-handler-contract.json │ │ │ │ ├── verify_pact.py │ │ │ │ └── views.py │ │ │ ├── test_about.py │ │ │ ├── test_access.py │ │ │ ├── test_block_render.py │ │ │ ├── test_comprehensive_theming.py │ │ │ ├── test_context_processor.py │ │ │ ├── test_course_survey.py │ │ │ ├── test_course_tools.py │ │ │ ├── test_courses.py │ │ │ ├── test_credit_requirements.py │ │ │ ├── test_date_summary.py │ │ │ ├── test_discussion_xblock.py │ │ │ ├── test_draft_modulestore.py │ │ │ ├── test_entrance_exam.py │ │ │ ├── test_favicon.py │ │ │ ├── test_field_overrides.py │ │ │ ├── test_filters.py │ │ │ ├── test_footer.py │ │ │ ├── test_group_access.py │ │ │ ├── test_i18n.py │ │ │ ├── test_lti_integration.py │ │ │ ├── test_masquerade.py │ │ │ ├── test_middleware.py │ │ │ ├── test_model_data.py │ │ │ ├── test_navigation.py │ │ │ ├── test_rules.py │ │ │ ├── test_self_paced_overrides.py │ │ │ ├── test_services.py │ │ │ ├── test_sharing_sites.py │ │ │ ├── test_split_module.py │ │ │ ├── test_submitting_problems.py │ │ │ ├── test_tabs.py │ │ │ ├── test_user_state_client.py │ │ │ ├── test_utils.py │ │ │ ├── test_video_handlers.py │ │ │ ├── test_video_mongo.py │ │ │ ├── test_video_xml.py │ │ │ ├── test_view_authentication.py │ │ │ ├── test_views.py │ │ │ ├── test_word_cloud.py │ │ │ └── tests.py │ │ ├── testutils.py │ │ ├── toggles.py │ │ ├── transformers.py │ │ ├── user_state_client.py │ │ ├── utils.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── index.py │ │ │ └── views.py │ ├── coursewarehistoryextended │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_force_studentmodule_index.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── tests.py │ ├── debug │ │ ├── __init__.py │ │ └── views.py │ ├── discussion │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── settings.py │ │ │ └── waffle.py │ │ ├── django_comment_client │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── base │ │ │ │ ├── __init__.py │ │ │ │ ├── event_transformers.py │ │ │ │ ├── tests.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── constants.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── permissions.py │ │ │ ├── settings.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── group_id.py │ │ │ │ ├── mock_cs_server │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── mock_cs_server.py │ │ │ │ │ └── test_mock_cs_server.py │ │ │ │ ├── test.mustache │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── unicode.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ └── utils.py │ │ ├── exceptions.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── assign_role.py │ │ │ │ ├── assign_roles_for_course.py │ │ │ │ ├── create_roles_for_existing.py │ │ │ │ ├── get_discussion_link.py │ │ │ │ ├── reload_forum_users.py │ │ │ │ ├── seed_permissions_roles.py │ │ │ │ ├── show_permissions.py │ │ │ │ ├── sync_user_info.py │ │ │ │ └── update_user_discussion_stats.py │ │ ├── notification_prefs │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── tests.py │ │ │ └── views.py │ │ ├── plugins.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── exceptions.py │ │ │ ├── forms.py │ │ │ ├── pagination.py │ │ │ ├── permissions.py │ │ │ ├── render.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_pagination.py │ │ │ │ ├── test_permissions.py │ │ │ │ ├── test_render.py │ │ │ │ ├── test_serializers.py │ │ │ │ ├── test_utils.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ └── common.py │ │ ├── signals │ │ │ ├── __init__.py │ │ │ └── handlers.py │ │ ├── static │ │ │ └── discussion │ │ │ │ ├── js │ │ │ │ ├── discussion_board_factory.js │ │ │ │ ├── discussion_profile_page_factory.js │ │ │ │ ├── discussion_router.js │ │ │ │ ├── spec │ │ │ │ │ ├── discussion_board_factory_spec.js │ │ │ │ │ ├── discussion_board_view_spec.js │ │ │ │ │ ├── discussion_profile_page_factory_spec.js │ │ │ │ │ └── views │ │ │ │ │ │ └── discussion_user_profile_view_spec.js │ │ │ │ └── views │ │ │ │ │ ├── discussion_board_view.js │ │ │ │ │ ├── discussion_fake_breadcrumbs.js │ │ │ │ │ ├── discussion_search_view.js │ │ │ │ │ └── discussion_user_profile_view.js │ │ │ │ └── templates │ │ │ │ ├── discussion-home.underscore │ │ │ │ ├── fake-breadcrumbs.underscore │ │ │ │ ├── search.underscore │ │ │ │ └── user-profile.underscore │ │ ├── tasks.py │ │ ├── templates │ │ │ └── discussion │ │ │ │ ├── discussion_board_fragment.html │ │ │ │ ├── discussion_board_js.template │ │ │ │ ├── discussion_private_fragment.html │ │ │ │ ├── discussion_profile_page.html │ │ │ │ ├── edx_ace │ │ │ │ ├── reportedcontentnotification │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ └── responsenotification │ │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ │ └── maintenance_fragment.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_signals.py │ │ │ ├── test_tasks.py │ │ │ └── test_views.py │ │ ├── toggles.py │ │ ├── toggles_utils.py │ │ ├── urls.py │ │ └── views.py │ ├── edxnotes │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── api_urls.py │ │ ├── decorators.py │ │ ├── exceptions.py │ │ ├── helpers.py │ │ ├── plugins.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── email_marketing │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── apps.py │ │ └── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20160623_1656.py │ │ │ ├── 0003_auto_20160715_1145.py │ │ │ ├── 0004_emailmarketingconfiguration_welcome_email_send_delay.py │ │ │ ├── 0005_emailmarketingconfiguration_user_registration_cookie_timeout_delay.py │ │ │ ├── 0006_auto_20170711_0615.py │ │ │ ├── 0007_auto_20170809_0653.py │ │ │ ├── 0008_auto_20170809_0539.py │ │ │ ├── 0009_remove_emailmarketingconfiguration_sailthru_activation_template.py │ │ │ ├── 0010_auto_20180425_0800.py │ │ │ ├── 0011_delete_emailmarketingconfiguration.py │ │ │ └── __init__.py │ ├── experiments │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── factories.py │ │ ├── filters.py │ │ ├── flags.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20170627_1402.py │ │ │ ├── 0003_auto_20170713_1148.py │ │ │ ├── 0004_historicalexperimentkeyvalue.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── permissions.py │ │ ├── routers.py │ │ ├── serializers.py │ │ ├── stable_bucketing.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_flags.py │ │ │ ├── test_utils.py │ │ │ ├── test_views.py │ │ │ └── test_views_custom.py │ │ ├── testutils.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── views.py │ │ └── views_custom.py │ ├── gating │ │ ├── __init__.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── signals.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_api.py │ │ │ ├── test_integration.py │ │ │ └── test_signals.py │ ├── grades │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ └── __init__.py │ │ │ └── waffle.py │ │ ├── constants.py │ │ ├── context.py │ │ ├── course_data.py │ │ ├── course_grade.py │ │ ├── course_grade_factory.py │ │ ├── docs │ │ │ ├── background.rst │ │ │ ├── code-classes-signals-transformer.rst │ │ │ ├── data-model.rst │ │ │ ├── decisions │ │ │ │ ├── 0001-gradebook-api.rst │ │ │ │ ├── 0002-gradebook-front-end.rst │ │ │ │ ├── 0003-persistent-grades.rst │ │ │ │ ├── 0004-persistent-grade-overrides.rst │ │ │ │ ├── 0005-grade-freeze.rst │ │ │ │ └── 0006-overrides-applied-separately.rst │ │ │ ├── diagrams.rst │ │ │ ├── how_tos │ │ │ │ ├── README.rst │ │ │ │ └── how-to-regrade-everyone-in-a-course.rst │ │ │ └── images │ │ │ │ ├── background_assignment_grade.png │ │ │ │ ├── background_overall_grade.png │ │ │ │ ├── background_problem_score.png │ │ │ │ ├── code-classes.png │ │ │ │ ├── diagrams-cg-writes.png │ │ │ │ ├── diagrams-component.png │ │ │ │ ├── diagrams-course-grade-factory.png │ │ │ │ └── diagrams-physical.png │ │ ├── events.py │ │ ├── exceptions.py │ │ ├── grade_utils.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── compute_grades.py │ │ │ │ ├── recalculate_learner_grades.py │ │ │ │ ├── recalculate_subsection_grades.py │ │ │ │ ├── send_segment_events_for_failed_learners.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_compute_grades.py │ │ │ │ ├── test_recalculate_learner_grades.py │ │ │ │ ├── test_recalculate_subsection_grades.py │ │ │ │ └── test_send_segment_events_for_failed_learners.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_rename_last_edited_field.py │ │ │ ├── 0003_coursepersistentgradesflag_persistentgradesenabledflag.py │ │ │ ├── 0004_visibleblocks_course_id.py │ │ │ ├── 0005_multiple_course_flags.py │ │ │ ├── 0006_persistent_course_grades.py │ │ │ ├── 0007_add_passed_timestamp_column.py │ │ │ ├── 0008_persistentsubsectiongrade_first_attempted.py │ │ │ ├── 0009_auto_20170111_1507.py │ │ │ ├── 0010_auto_20170112_1156.py │ │ │ ├── 0011_null_edited_time.py │ │ │ ├── 0012_computegradessetting.py │ │ │ ├── 0013_persistentsubsectiongradeoverride.py │ │ │ ├── 0014_persistentsubsectiongradeoverridehistory.py │ │ │ ├── 0015_historicalpersistentsubsectiongradeoverride.py │ │ │ ├── 0016_auto_20190703_1446.py │ │ │ ├── 0017_delete_manual_psgoverride_table.py │ │ │ ├── 0018_add_waffle_flag_defaults.py │ │ │ ├── 0019_auto_20220912_0855.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── models_api.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── gradebook_views.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_gradebook_views.py │ │ │ │ ├── test_grading_policy_view.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ ├── utils.py │ │ │ │ └── views.py │ │ ├── scores.py │ │ ├── services.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── production.py │ │ │ └── test.py │ │ ├── signals │ │ │ ├── __init__.py │ │ │ ├── handlers.py │ │ │ └── signals.py │ │ ├── subsection_grade.py │ │ ├── subsection_grade_factory.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── base.py │ │ │ ├── integration │ │ │ │ ├── __init__.py │ │ │ │ ├── test_access.py │ │ │ │ ├── test_events.py │ │ │ │ └── test_problems.py │ │ │ ├── test_api.py │ │ │ ├── test_course_data.py │ │ │ ├── test_course_grade.py │ │ │ ├── test_course_grade_factory.py │ │ │ ├── test_events.py │ │ │ ├── test_models.py │ │ │ ├── test_scores.py │ │ │ ├── test_services.py │ │ │ ├── test_signals.py │ │ │ ├── test_subsection_grade.py │ │ │ ├── test_subsection_grade_factory.py │ │ │ ├── test_tasks.py │ │ │ ├── test_transformer.py │ │ │ └── utils.py │ │ ├── transformer.py │ │ └── util_services.py │ ├── instructor │ │ ├── __init__.py │ │ ├── access.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── enrollment.py │ │ ├── message_types.py │ │ ├── permissions.py │ │ ├── services.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ ├── devstack.py │ │ │ ├── production.py │ │ │ └── test.py │ │ ├── static │ │ │ └── instructor │ │ │ │ ├── .eslintrc.js │ │ │ │ └── ProblemBrowser │ │ │ │ ├── components │ │ │ │ ├── Main │ │ │ │ │ ├── Main.jsx │ │ │ │ │ ├── Main.test.jsx │ │ │ │ │ ├── MainContainer.jsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ │ └── Main.test.jsx.snap │ │ │ │ └── ReportStatus │ │ │ │ │ ├── ReportStatus.jsx │ │ │ │ │ ├── ReportStatus.test.jsx │ │ │ │ │ ├── ReportStatusContainer.jsx │ │ │ │ │ └── __snapshots__ │ │ │ │ │ └── ReportStatus.test.jsx.snap │ │ │ │ ├── data │ │ │ │ ├── actions │ │ │ │ │ ├── constants.js │ │ │ │ │ └── problemResponses.js │ │ │ │ ├── api │ │ │ │ │ └── client.js │ │ │ │ ├── reducers │ │ │ │ │ └── index.js │ │ │ │ └── store.js │ │ │ │ └── index.jsx │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_access.py │ │ │ ├── test_api.py │ │ │ ├── test_api_email_localization.py │ │ │ ├── test_certificates.py │ │ │ ├── test_email.py │ │ │ ├── test_enrollment.py │ │ │ ├── test_proctoring.py │ │ │ ├── test_services.py │ │ │ ├── test_spoc_gradebook.py │ │ │ ├── test_tools.py │ │ │ ├── utils.py │ │ │ └── views │ │ │ │ ├── __init__.py │ │ │ │ └── test_instructor_dashboard.py │ │ ├── toggles.py │ │ ├── urls.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── api_urls.py │ │ │ ├── gradebook_api.py │ │ │ ├── instructor_dashboard.py │ │ │ ├── instructor_task_helpers.py │ │ │ └── tools.py │ ├── instructor_analytics │ │ ├── __init__.py │ │ ├── basic.py │ │ ├── csvs.py │ │ ├── distributions.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ └── __init__.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_basic.py │ │ │ ├── test_csvs.py │ │ │ └── test_distributions.py │ ├── instructor_task │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── api_helper.py │ │ ├── apps.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ └── waffle.py │ │ ├── data.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 001-scheduling-instructor-tasks.rst │ │ │ │ └── 002-processing-scheduled-instructor-tasks.rst │ │ ├── exceptions.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── fail_old_tasks.py │ │ │ │ ├── process_scheduled_instructor_tasks.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_fail_old_tasks.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_gradereportsetting.py │ │ │ ├── 0003_alter_task_input_field.py │ │ │ ├── 0004_historicalinstructortaskschedule_instructortaskschedule.py │ │ │ ├── 0005_alter_instructortaskschedule_task.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── permissions.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── subtasks.py │ │ ├── tasks.py │ │ ├── tasks_base.py │ │ ├── tasks_helper │ │ │ ├── __init__.py │ │ │ ├── certs.py │ │ │ ├── enrollments.py │ │ │ ├── grades.py │ │ │ ├── misc.py │ │ │ ├── module_state.py │ │ │ ├── runner.py │ │ │ └── utils.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_api.py │ │ │ ├── test_api_helper.py │ │ │ ├── test_base.py │ │ │ ├── test_integration.py │ │ │ ├── test_models.py │ │ │ ├── test_subtasks.py │ │ │ ├── test_tasks.py │ │ │ ├── test_tasks_helper.py │ │ │ └── test_views.py │ │ └── views.py │ ├── learner_dashboard │ │ ├── 001-zoom-lti-pro-configuration.rst │ │ ├── PROGRAMS.rst │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v0 │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── config │ │ │ ├── __init__.py │ │ │ └── waffle.py │ │ ├── program_views.py │ │ ├── programs.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_programs.py │ │ │ ├── test_utils.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── utils.py │ ├── learner_home │ │ ├── README.md │ │ ├── __init__.py │ │ ├── docs │ │ │ ├── 001-remove-course-limit.rst │ │ │ └── 002-core-versus-experimental-code.rst │ │ ├── mock │ │ │ ├── __init__.py │ │ │ ├── mock_data.json │ │ │ ├── mock_views.py │ │ │ └── urls.py │ │ ├── serializers.py │ │ ├── test_serializers.py │ │ ├── test_utils.py │ │ ├── test_views.py │ │ ├── test_waffle.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── views.py │ │ └── waffle.py │ ├── learner_recommendations │ │ ├── __init__.py │ │ ├── serializers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_data.py │ │ │ ├── test_serializers.py │ │ │ ├── test_utils.py │ │ │ └── test_views.py │ │ ├── toggles.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── lms_initialization │ │ ├── __init__.py │ │ └── apps.py │ ├── lms_xblock │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── field_data.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── mixin.py │ │ ├── models.py │ │ ├── runtime.py │ │ └── test │ │ │ ├── __init__.py │ │ │ └── test_runtime.py │ ├── lti_provider │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── resend_lti_scores.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_resend_lti_scores.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20160325_0407.py │ │ │ ├── 0003_auto_20161118_1040.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── outcomes.py │ │ ├── signals.py │ │ ├── signature_validator.py │ │ ├── tasks.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_outcomes.py │ │ │ ├── test_signature_validator.py │ │ │ ├── test_tasks.py │ │ │ ├── test_users.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ ├── users.py │ │ └── views.py │ ├── mailing │ │ ├── __init__.py │ │ └── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── mailchimp_id.py │ │ │ ├── mailchimp_sync_announcements.py │ │ │ └── mailchimp_sync_course.py │ ├── mfe_config_api │ │ ├── __init__.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-mfe-config-api.rst │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── mobile_api │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── context_processor.py │ │ ├── course_info │ │ │ ├── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── decorators.py │ │ ├── errors.py │ │ ├── middleware.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20160406_0904.py │ │ │ ├── 0003_ignore_mobile_available_flag.py │ │ │ ├── 0004_mobileconfig.py │ │ │ └── __init__.py │ │ ├── mobile_platform.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_context_processor.py │ │ │ ├── test_decorator.py │ │ │ ├── test_middleware.py │ │ │ ├── test_milestones.py │ │ │ ├── test_mobile_platform.py │ │ │ └── test_model.py │ │ ├── testutils.py │ │ ├── urls.py │ │ ├── users │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ └── utils.py │ ├── monitoring │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-monitoring-by-code-owner.rst │ │ └── scripts │ │ │ ├── clean_unmapped_view_modules.py │ │ │ └── generate_code_owner_mappings.py │ ├── ora_staff_grader │ │ ├── README.md │ │ ├── __init__.py │ │ ├── constants.py │ │ ├── errors.py │ │ ├── lms.postman_collection.json │ │ ├── mock │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── data │ │ │ │ ├── course_metadata.json │ │ │ │ ├── ora_metadata.json │ │ │ │ ├── responses.json │ │ │ │ └── submissions.json │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── ora_api.py │ │ ├── serializers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_data.py │ │ │ ├── test_serializers.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── program_enrollments │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── grades.py │ │ │ ├── linking.py │ │ │ ├── reading.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_grades.py │ │ │ │ ├── test_linking.py │ │ │ │ ├── test_reading.py │ │ │ │ └── test_writing.py │ │ │ └── writing.py │ │ ├── apps.py │ │ ├── constants.py │ │ ├── doc_images │ │ │ └── pe_uml.png │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 0001-program-enrollment-data-integrity.rst │ │ │ │ ├── 0002-matriculation-on-user_social_auth_change.rst │ │ │ │ └── 0003-enrollments-into-course-shared-by-programs.rst │ │ ├── exceptions.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── expire_waiting_enrollments.py │ │ │ │ ├── link_program_enrollments.py │ │ │ │ ├── migrate_saml_uids.py │ │ │ │ ├── reset_enrollment_data.py │ │ │ │ ├── send_program_course_nudge_email.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_expire_waiting_enrollments.py │ │ │ │ ├── test_link_program_enrollments.py │ │ │ │ ├── test_migrate_saml_uids.py │ │ │ │ ├── test_reset_enrollment_data.py │ │ │ │ ├── test_send_program_course_nudge_email.py │ │ │ │ └── utils.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_historicalprogramcourseenrollment_programcourseenrollment.py │ │ │ ├── 0003_auto_20190424_1622.py │ │ │ ├── 0004_add_programcourseenrollment_relatedname.py │ │ │ ├── 0005_canceled_not_withdrawn.py │ │ │ ├── 0006_add_the_correct_constraints.py │ │ │ ├── 0007_waiting_programcourseenrollment_constraint.py │ │ │ ├── 0008_add_ended_programenrollment_status.py │ │ │ ├── 0009_update_course_enrollment_field_to_foreign_key.py │ │ │ ├── 0010_add_courseaccessroleassignment.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── readme.rst │ │ ├── rest_api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ ├── utils.py │ │ │ │ └── views.py │ │ ├── signals.py │ │ ├── tasks.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_admin.py │ │ │ ├── test_models.py │ │ │ ├── test_signals.py │ │ │ └── test_tasks.py │ ├── rss_proxy │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_models.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── save_for_later │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── urls.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── apps.py │ │ ├── helper.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── send_course_reminder_emails.py │ │ │ │ ├── send_program_reminder_emails.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_send_course_reminder_emails.py │ │ │ │ └── test_send_program_reminder_emails.py │ │ ├── message_types.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20220322_1621.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── signals.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ └── test_signals.py │ │ └── urls.py │ ├── static_template_view │ │ ├── __init__.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views.py │ ├── staticbook │ │ ├── __init__.py │ │ ├── tests.py │ │ └── views.py │ ├── support │ │ ├── __init__.py │ │ ├── decorators.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-sso-history-in-support.rst │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── static │ │ │ └── support │ │ │ │ ├── js │ │ │ │ ├── certificates_factory.js │ │ │ │ ├── collections │ │ │ │ │ ├── certificate.js │ │ │ │ │ └── enrollment.js │ │ │ │ ├── enrollment_factory.js │ │ │ │ ├── manage_user_factory.js │ │ │ │ ├── models │ │ │ │ │ ├── certificate.js │ │ │ │ │ ├── enrollment.js │ │ │ │ │ └── manage_user.js │ │ │ │ ├── spec │ │ │ │ │ ├── collections │ │ │ │ │ │ └── enrollment_spec.js │ │ │ │ │ ├── models │ │ │ │ │ │ └── enrollment_spec.js │ │ │ │ │ └── views │ │ │ │ │ │ ├── certificates_spec.js │ │ │ │ │ │ ├── enrollment_modal_spec.js │ │ │ │ │ │ └── enrollment_spec.js │ │ │ │ ├── spec_helpers │ │ │ │ │ └── enrollment_helpers.js │ │ │ │ └── views │ │ │ │ │ ├── certificates.js │ │ │ │ │ ├── enrollment.js │ │ │ │ │ ├── enrollment_modal.js │ │ │ │ │ └── manage_user.js │ │ │ │ ├── jsx │ │ │ │ ├── .eslintrc.js │ │ │ │ ├── entitlements │ │ │ │ │ ├── components │ │ │ │ │ │ ├── EntitlementForm │ │ │ │ │ │ │ ├── container.jsx │ │ │ │ │ │ │ └── index.jsx │ │ │ │ │ │ ├── Main │ │ │ │ │ │ │ ├── Main.jsx │ │ │ │ │ │ │ └── MainContainer.jsx │ │ │ │ │ │ ├── Search │ │ │ │ │ │ │ ├── Search.jsx │ │ │ │ │ │ │ └── SearchContainer.jsx │ │ │ │ │ │ └── Table │ │ │ │ │ │ │ ├── EntitlementSupportTable.jsx │ │ │ │ │ │ │ └── EntitlementSupportTableContainer.jsx │ │ │ │ │ ├── data │ │ │ │ │ │ ├── actions │ │ │ │ │ │ │ ├── entitlement.js │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ └── form.js │ │ │ │ │ │ ├── api │ │ │ │ │ │ │ ├── client.js │ │ │ │ │ │ │ └── endpoints.js │ │ │ │ │ │ ├── constants │ │ │ │ │ │ │ ├── actionTypes.js │ │ │ │ │ │ │ └── formTypes.js │ │ │ │ │ │ ├── reducers │ │ │ │ │ │ │ ├── entitlements.js │ │ │ │ │ │ │ ├── error.js │ │ │ │ │ │ │ ├── form.js │ │ │ │ │ │ │ └── index.js │ │ │ │ │ │ └── store.js │ │ │ │ │ └── index.jsx │ │ │ │ ├── errors_list.jsx │ │ │ │ ├── file_upload.jsx │ │ │ │ ├── logged_in_user.jsx │ │ │ │ ├── logged_out_user.jsx │ │ │ │ ├── program_enrollments │ │ │ │ │ ├── index.jsx │ │ │ │ │ └── inspector.jsx │ │ │ │ ├── single_support_form.jsx │ │ │ │ ├── success.jsx │ │ │ │ └── upload_progress.jsx │ │ │ │ └── templates │ │ │ │ ├── certificates.underscore │ │ │ │ ├── certificates_results.underscore │ │ │ │ ├── enrollment-modal.underscore │ │ │ │ ├── enrollment.underscore │ │ │ │ └── manage_user.underscore │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── certificate.py │ │ │ ├── contact_us.py │ │ │ ├── course_entitlements.py │ │ │ ├── enrollments.py │ │ │ ├── feature_based_enrollments.py │ │ │ ├── index.py │ │ │ ├── manage_user.py │ │ │ ├── onboarding_status.py │ │ │ ├── program_enrollments.py │ │ │ ├── sso_records.py │ │ │ └── utils.py │ ├── survey │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── exceptions.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── signals.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_models.py │ │ │ ├── test_signals.py │ │ │ ├── test_utils.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── teams │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── api_urls.py │ │ ├── csv.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-field-to-store-enabled-disabled-status.rst │ │ ├── errors.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── reindex_course_team.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_reindex_course_team.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_slug_field_ids.py │ │ │ ├── 0003_courseteam_organization_protected.py │ │ │ ├── 0004_alter_defaults.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── plugins.py │ │ ├── search_indexes.py │ │ ├── serializers.py │ │ ├── services.py │ │ ├── static │ │ │ └── teams │ │ │ │ ├── js │ │ │ │ ├── .eslintrc.json │ │ │ │ ├── collections │ │ │ │ │ ├── base.js │ │ │ │ │ ├── my_teams.js │ │ │ │ │ ├── team.js │ │ │ │ │ └── topic.js │ │ │ │ ├── models │ │ │ │ │ ├── team.js │ │ │ │ │ ├── team_membership.js │ │ │ │ │ └── topic.js │ │ │ │ ├── spec │ │ │ │ │ ├── collections │ │ │ │ │ │ └── topic_collection_spec.js │ │ │ │ │ ├── teams_tab_factory_spec.js │ │ │ │ │ └── views │ │ │ │ │ │ ├── edit_team_members_spec.js │ │ │ │ │ │ ├── edit_team_spec.js │ │ │ │ │ │ ├── instructor_tools_spec.js │ │ │ │ │ │ ├── manage_spec.js │ │ │ │ │ │ ├── my_teams_spec.js │ │ │ │ │ │ ├── team_card_spec.js │ │ │ │ │ │ ├── team_discussion_spec.js │ │ │ │ │ │ ├── team_profile_header_actions_spec.js │ │ │ │ │ │ ├── team_profile_spec.js │ │ │ │ │ │ ├── teams_spec.js │ │ │ │ │ │ ├── teams_tab_spec.js │ │ │ │ │ │ ├── topic_card_spec.js │ │ │ │ │ │ ├── topic_teams_spec.js │ │ │ │ │ │ └── topics_spec.js │ │ │ │ ├── spec_helpers │ │ │ │ │ └── team_spec_helpers.js │ │ │ │ ├── teams_tab_factory.js │ │ │ │ ├── utils │ │ │ │ │ └── team_analytics.js │ │ │ │ └── views │ │ │ │ │ ├── edit_team.js │ │ │ │ │ ├── edit_team_members.js │ │ │ │ │ ├── instructor_tools.js │ │ │ │ │ ├── manage.js │ │ │ │ │ ├── my_teams.js │ │ │ │ │ ├── team_card.js │ │ │ │ │ ├── team_discussion.js │ │ │ │ │ ├── team_profile.js │ │ │ │ │ ├── team_profile_header_actions.js │ │ │ │ │ ├── team_utils.js │ │ │ │ │ ├── teams.js │ │ │ │ │ ├── teams_tab.js │ │ │ │ │ ├── teams_tabbed_view.js │ │ │ │ │ ├── topic_card.js │ │ │ │ │ ├── topic_teams.js │ │ │ │ │ └── topics.js │ │ │ │ └── templates │ │ │ │ ├── date.underscore │ │ │ │ ├── edit-team-member.underscore │ │ │ │ ├── edit-team.underscore │ │ │ │ ├── instructor-tools.underscore │ │ │ │ ├── manage.underscore │ │ │ │ ├── team-actions.underscore │ │ │ │ ├── team-assignment.underscore │ │ │ │ ├── team-country-language.underscore │ │ │ │ ├── team-member.underscore │ │ │ │ ├── team-membership-details.underscore │ │ │ │ ├── team-profile-header-actions.underscore │ │ │ │ ├── team-profile.underscore │ │ │ │ ├── teams.underscore │ │ │ │ ├── teams_tab.underscore │ │ │ │ └── topics.underscore │ │ ├── templates │ │ │ └── teams │ │ │ │ └── teams.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_api.py │ │ │ ├── test_csv.py │ │ │ ├── test_models.py │ │ │ ├── test_serializers.py │ │ │ ├── test_services.py │ │ │ └── test_views.py │ │ ├── toggles.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── views.py │ │ └── waffle.py │ ├── tests │ │ ├── __init__.py │ │ └── test_utils.py │ ├── user_tours │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── handlers.py │ │ ├── management │ │ │ ├── __init__.py │ │ │ └── commands │ │ │ │ ├── __init__.py │ │ │ │ ├── backpopulate_user_tours.py │ │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_backpopulate_user_tours.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20230110_0905.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_handlers.py │ │ ├── urls.py │ │ └── v1 │ │ │ ├── __init__.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_views.py │ │ │ └── views.py │ ├── utils.py │ └── verify_student │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── emails.py │ │ ├── exceptions.py │ │ ├── image.py │ │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── backfill_sso_verifications_for_old_account_links.py │ │ │ ├── manual_verifications.py │ │ │ ├── retry_failed_photo_verifications.py │ │ │ ├── send_verification_expiry_email.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_backfill_sso_verifications_for_old_account_links.py │ │ │ ├── test_manual_verify_student.py │ │ │ ├── test_retry_failed_photo_verifications.py │ │ │ ├── test_send_verification_expiry_email.py │ │ │ └── test_trigger_softwaresecurephotoverifications_post_save_signal.py │ │ │ └── trigger_softwaresecurephotoverifications_post_save_signal.py │ │ ├── message_types.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20151124_1024.py │ │ ├── 0003_auto_20151113_1443.py │ │ ├── 0004_delete_historical_records.py │ │ ├── 0005_remove_deprecated_models.py │ │ ├── 0006_ssoverification.py │ │ ├── 0007_idverificationaggregate.py │ │ ├── 0008_populate_idverificationaggregate.py │ │ ├── 0009_remove_id_verification_aggregate.py │ │ ├── 0010_manualverification.py │ │ ├── 0011_add_fields_to_sspv.py │ │ ├── 0012_sspverificationretryconfig.py │ │ ├── 0013_add_expiration_date_field.py │ │ ├── 0014_remove_softwaresecurephotoverification_expiry_date.py │ │ └── __init__.py │ │ ├── models.py │ │ ├── services.py │ │ ├── signals.py │ │ ├── ssencrypt.py │ │ ├── tasks.py │ │ ├── tests │ │ ├── __init__.py │ │ ├── factories.py │ │ ├── fake_software_secure.py │ │ ├── test_fake_software_secure.py │ │ ├── test_integration.py │ │ ├── test_models.py │ │ ├── test_services.py │ │ ├── test_signals.py │ │ ├── test_ssencrypt.py │ │ ├── test_tasks.py │ │ ├── test_utils.py │ │ └── test_views.py │ │ ├── toggles.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py ├── docker_lms_gunicorn.py ├── envs │ ├── __init__.py │ ├── analytics_exporter.py │ ├── bok_choy.py │ ├── bok_choy.yml │ ├── bok_choy_docker.py │ ├── bok_choy_docker.yml │ ├── common.py │ ├── devstack-experimental.yml │ ├── devstack.py │ ├── devstack_docker.py │ ├── devstack_optimized.py │ ├── devstack_with_worker.py │ ├── docker-production.py │ ├── docs │ │ ├── README.rst │ │ └── images │ │ │ └── lms_settings.png │ ├── help_tokens.ini │ ├── minimal.yml │ ├── openstack.py │ ├── pact.py │ ├── production.py │ ├── static.py │ ├── test.py │ └── test_static_optimized.py ├── lib │ ├── __init__.py │ ├── courseware_search │ │ ├── __init__.py │ │ ├── lms_filter_generator.py │ │ ├── lms_result_processor.py │ │ ├── lms_search_initializer.py │ │ └── test │ │ │ ├── __init__.py │ │ │ ├── test_lms_filter_generator.py │ │ │ └── test_lms_result_processor.py │ ├── tests │ │ ├── __init__.py │ │ └── test_utils.py │ ├── utils.py │ └── xblock │ │ ├── __init__.py │ │ └── test │ │ ├── __init__.py │ │ └── test_mixin.py ├── startup.py ├── static │ ├── .gitignore │ ├── .hgignore │ ├── audio │ │ └── camera_capture.wav │ ├── certificates │ │ ├── fonts │ │ │ ├── Domine │ │ │ │ ├── Domine-Bold-webfont.ttf │ │ │ │ ├── Domine-Bold-webfont.woff │ │ │ │ ├── Domine-Bold-webfont.woff2 │ │ │ │ ├── Domine-Regular-webfont.ttf │ │ │ │ ├── Domine-Regular-webfont.woff │ │ │ │ └── Domine-Regular-webfont.woff2 │ │ │ └── OpenSans │ │ │ │ ├── OpenSans-Bold-webfont.ttf │ │ │ │ ├── OpenSans-Bold-webfont.woff │ │ │ │ ├── OpenSans-Bold-webfont.woff2 │ │ │ │ ├── OpenSans-BoldItalic-webfont.ttf │ │ │ │ ├── OpenSans-BoldItalic-webfont.woff │ │ │ │ ├── OpenSans-BoldItalic-webfont.woff2 │ │ │ │ ├── OpenSans-Italic-webfont.ttf │ │ │ │ ├── OpenSans-Italic-webfont.woff │ │ │ │ ├── OpenSans-Italic-webfont.woff2 │ │ │ │ ├── OpenSans-Light-webfont.ttf │ │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ │ ├── OpenSans-Light-webfont.woff2 │ │ │ │ ├── OpenSans-LightItalic-webfont.ttf │ │ │ │ ├── OpenSans-LightItalic-webfont.woff │ │ │ │ ├── OpenSans-LightItalic-webfont.woff2 │ │ │ │ ├── OpenSans-Regular-webfont.ttf │ │ │ │ ├── OpenSans-Regular-webfont.woff │ │ │ │ ├── OpenSans-Regular-webfont.woff2 │ │ │ │ ├── OpenSans-Semibold-webfont.ttf │ │ │ │ ├── OpenSans-Semibold-webfont.woff │ │ │ │ ├── OpenSans-Semibold-webfont.woff2 │ │ │ │ ├── OpenSans-SemiboldItalic-webfont.ttf │ │ │ │ ├── OpenSans-SemiboldItalic-webfont.woff │ │ │ │ └── OpenSans-SemiboldItalic-webfont.woff2 │ │ ├── images │ │ │ ├── backpack-logo.png │ │ │ ├── backpack-ui.png │ │ │ ├── bg-verified.png │ │ │ ├── demo-sig1.png │ │ │ ├── demo-sig2.png │ │ │ ├── demo-sig3.png │ │ │ ├── demo-user-profile.png │ │ │ ├── ico-honor.png │ │ │ ├── ico-honor.svg │ │ │ ├── ico-mozillaopenbadges.png │ │ │ ├── ico-verified.png │ │ │ └── ico-verified.svg │ │ └── sass │ │ │ ├── _base.scss │ │ │ ├── _build.scss │ │ │ ├── _components.scss │ │ │ ├── _config.scss │ │ │ ├── _layouts.scss │ │ │ ├── _overrides.scss │ │ │ ├── _print.scss │ │ │ ├── _utilities.scss │ │ │ ├── _views.scss │ │ │ ├── main-ltr.scss │ │ │ └── main-rtl.scss │ ├── common │ ├── completion │ │ └── js │ │ │ ├── .eslintrc.js │ │ │ ├── CompletionOnViewService.js │ │ │ ├── ViewedEvent.js │ │ │ └── spec │ │ │ └── ViewedEvent_spec.js │ ├── course_bookmarks │ ├── course_experience │ ├── course_search │ ├── discussion │ ├── edx-ui-toolkit │ ├── fonts │ │ └── CreativeCommons │ │ │ ├── cc.eot │ │ │ ├── cc.svg │ │ │ ├── cc.ttf │ │ │ └── cc.woff │ ├── images │ │ ├── amplifier-slider-handle.png │ │ ├── app │ │ │ ├── app_store_badge_135x40.svg │ │ │ └── google_play_badge_45.png │ │ ├── arrow-upright-icon.svg │ │ ├── bg-footer-divider.jpg │ │ ├── bulk_email │ │ │ ├── FacebookIcon.png │ │ │ ├── FacebookIcon_gray.png │ │ │ ├── GooglePlusIcon.png │ │ │ ├── GooglePlusIcon_gray.png │ │ │ ├── LinkedInIcon.png │ │ │ ├── LinkedInIcon_gray.png │ │ │ ├── MeetupIcon.png │ │ │ ├── MeetupIcon_gray.png │ │ │ ├── TwitterIcon.png │ │ │ ├── TwitterIcon_gray.png │ │ │ ├── VKontakteIcon.png │ │ │ ├── VKontakteIcon_gray.png │ │ │ ├── YoutubeIcon.png │ │ │ ├── YoutubeIcon_gray.png │ │ │ └── edXHeaderImage.jpg │ │ ├── bullet-closed.png │ │ ├── bullet-open.png │ │ ├── calc-icon.png │ │ ├── calendar-icon.png │ │ ├── cert-verified-thumb.png │ │ ├── certificates │ │ │ ├── audit.png │ │ │ ├── honor.png │ │ │ ├── professional.png │ │ │ └── verified.png │ │ ├── close-calc-icon.png │ │ ├── correct-icon.png │ │ ├── default-badges │ │ │ ├── honor.png │ │ │ ├── professional.png │ │ │ └── verified.png │ │ ├── edx-home-graphic.png │ │ ├── edx-theme │ │ │ ├── edx-background-banner-account.png │ │ │ └── edx-logo-77x36.png │ │ ├── edx-verified-mini-cert.png │ │ ├── favicon.ico │ │ ├── goalreminder-desktop-hero.png │ │ ├── goalreminder-mobile-hero.png │ │ ├── graded.png │ │ ├── homepage-hero-video-thumb.jpg │ │ ├── honor-ribbon.png │ │ ├── icon-sm-professional.png │ │ ├── icon-sm-verified.png │ │ ├── icon-sm-xseries-black.png │ │ ├── icon-sm-xseries-white.png │ │ ├── incorrect-icon.png │ │ ├── info-icon.png │ │ ├── launch-icon.svg │ │ ├── learner_analytics_dashboard │ │ │ ├── analytics-grading.png │ │ │ ├── streak-1140x768.jpg │ │ │ ├── streak-768x517.jpg │ │ │ └── streak-trophy.png │ │ ├── link-icon.png │ │ ├── linkedin_add_to_profile.png │ │ ├── logo-large.png │ │ ├── logo.png │ │ ├── opencourseware.png │ │ ├── openedx-logo-tag-dark.png │ │ ├── openedx-logo-tag-light.png │ │ ├── openedx-logo-tag.png │ │ ├── pencils.jpg │ │ ├── play.png │ │ ├── problem-editor-icons.png │ │ ├── profiles │ │ │ ├── default_120.png │ │ │ ├── default_30.png │ │ │ ├── default_50.png │ │ │ └── default_500.png │ │ ├── programs │ │ │ ├── micromasters-icon.svg │ │ │ ├── micromasters-program-details.svg │ │ │ ├── professional-certificate-program-details.svg │ │ │ ├── program-certificate-micromasters.gif │ │ │ ├── program-certificate-professional-certificate.gif │ │ │ ├── program-certificate-xseries.gif │ │ │ ├── sample-cert.png │ │ │ ├── xseries-icon.svg │ │ │ └── xseries-program-details.svg │ │ ├── restart-icon.svg │ │ ├── search-icon.png │ │ ├── show-hide-discussion-icon.png │ │ ├── slide-left-icon.png │ │ ├── slide-right-icon.png │ │ ├── small-header-home-icon.png │ │ ├── social │ │ │ ├── facebook-sharing.png │ │ │ ├── google-plus-sharing.png │ │ │ ├── ico-social-facebook.png │ │ │ ├── ico-social-google.png │ │ │ ├── ico-social-meetup.png │ │ │ ├── ico-social-twitter.png │ │ │ ├── ico-social-youtube.png │ │ │ └── twitter-sharing.png │ │ ├── spanish-goalreminder-desktop-hero.png │ │ ├── spanish-goalreminder-mobile-hero.png │ │ ├── spinner.gif │ │ ├── textbook │ │ │ ├── textbook-left.png │ │ │ └── textbook-right.png │ │ ├── treeview-default.gif │ │ ├── ui-icons_222222_256x240.png │ │ ├── vcert-ribbon-s.png │ │ ├── verified-ribbon.png │ │ ├── warning-icon.svg │ │ ├── white-error-icon.png │ │ ├── wiki-icons.png │ │ ├── wmd-buttons-transparent.png │ │ └── wmd-buttons.png │ ├── js │ │ ├── Markdown.Converter.js │ │ ├── Markdown.Editor.js │ │ ├── Markdown.Sanitizer.js │ │ ├── RequireJS-namespace-undefine.js │ │ ├── accessible_components │ │ │ └── StatusBarAlert.jsx │ │ ├── ajax-error.js │ │ ├── api_admin │ │ │ ├── catalog_preview_factory.js │ │ │ └── views │ │ │ │ └── catalog_preview.js │ │ ├── bootstrap-alert.js │ │ ├── bootstrap-collapse.js │ │ ├── bootstrap-modal.js │ │ ├── bootstrap-transition.js │ │ ├── bootstrap.min.js │ │ ├── calculator.js │ │ ├── ccx │ │ │ └── schedule.js │ │ ├── certificates │ │ │ ├── certificates.js │ │ │ ├── collections │ │ │ │ ├── certificate_allowlist.js │ │ │ │ └── certificate_invalidation_collection.js │ │ │ ├── factories │ │ │ │ ├── certificate_allowlist_factory.js │ │ │ │ └── certificate_invalidation_factory.js │ │ │ ├── models │ │ │ │ ├── certificate_exception.js │ │ │ │ └── certificate_invalidation.js │ │ │ └── views │ │ │ │ ├── certificate_allowlist.js │ │ │ │ ├── certificate_allowlist_editor.js │ │ │ │ ├── certificate_bulk_allowlist.js │ │ │ │ └── certificate_invalidation_view.js │ │ ├── commerce │ │ │ ├── credit.js │ │ │ └── track_ecommerce_events.js │ │ ├── components │ │ │ ├── card │ │ │ │ └── views │ │ │ │ │ └── card.js │ │ │ └── header │ │ │ │ ├── models │ │ │ │ └── header.js │ │ │ │ └── views │ │ │ │ └── header.js │ │ ├── course_info.js │ │ ├── course_sharing │ │ │ └── course_sharing_events.js │ │ ├── course_survey.js │ │ ├── courseware.js │ │ ├── courseware │ │ │ ├── accordion_events.js │ │ │ ├── certificates_api.js │ │ │ ├── course_info_events.js │ │ │ ├── courseware_factory.js │ │ │ ├── credit_progress.js │ │ │ └── toggle_element_visibility.js │ │ ├── customwmd.js │ │ ├── dashboard │ │ │ ├── credit.js │ │ │ ├── donation.js │ │ │ ├── dropdown.js │ │ │ ├── legacy.js │ │ │ └── track_events.js │ │ ├── dateutil_factory.js │ │ ├── demographics_collection │ │ │ ├── DemographicsCollectionBanner.jsx │ │ │ ├── DemographicsCollectionModal.jsx │ │ │ ├── MultiselectDropdown.jsx │ │ │ ├── SelectWithInput.jsx │ │ │ └── Wizard.jsx │ │ ├── dialog_tab_controls.js │ │ ├── discovery │ │ │ ├── collection.js │ │ │ ├── collections │ │ │ │ └── filters.js │ │ │ ├── discovery_factory.js │ │ │ ├── models │ │ │ │ ├── course_card.js │ │ │ │ ├── course_discovery.js │ │ │ │ ├── facet_option.js │ │ │ │ ├── filter.js │ │ │ │ └── search_state.js │ │ │ └── views │ │ │ │ ├── course_card.js │ │ │ │ ├── courses_listing.js │ │ │ │ ├── facet.js │ │ │ │ ├── facets.js │ │ │ │ ├── filter_bar.js │ │ │ │ ├── filter_label.js │ │ │ │ ├── refine_sidebar.js │ │ │ │ └── search_form.js │ │ ├── discussions_management │ │ │ ├── models │ │ │ │ ├── course_discussions_detail.js │ │ │ │ └── course_discussions_settings.js │ │ │ └── views │ │ │ │ ├── discussions.js │ │ │ │ ├── discussions_dashboard_factory.js │ │ │ │ ├── divided_discussions.js │ │ │ │ ├── divided_discussions_course_wide.js │ │ │ │ └── divided_discussions_inline.js │ │ ├── edxnotes │ │ │ ├── collections │ │ │ │ ├── notes.js │ │ │ │ └── tabs.js │ │ │ ├── models │ │ │ │ ├── note.js │ │ │ │ └── tab.js │ │ │ ├── plugins │ │ │ │ ├── accessibility.js │ │ │ │ ├── caret_navigation.js │ │ │ │ ├── events.js │ │ │ │ ├── scroller.js │ │ │ │ ├── search_override.js │ │ │ │ └── store_error_handler.js │ │ │ ├── utils │ │ │ │ ├── logger.js │ │ │ │ ├── notes_collector.js │ │ │ │ ├── template.js │ │ │ │ └── utils.js │ │ │ └── views │ │ │ │ ├── note_group.js │ │ │ │ ├── note_item.js │ │ │ │ ├── notes_factory.js │ │ │ │ ├── notes_page.js │ │ │ │ ├── notes_visibility_factory.js │ │ │ │ ├── page_factory.js │ │ │ │ ├── search_box.js │ │ │ │ ├── shim.js │ │ │ │ ├── tab_item.js │ │ │ │ ├── tab_panel.js │ │ │ │ ├── tab_view.js │ │ │ │ ├── tabs │ │ │ │ ├── course_structure.js │ │ │ │ ├── recent_activity.js │ │ │ │ ├── search_results.js │ │ │ │ └── tags.js │ │ │ │ ├── tabs_list.js │ │ │ │ └── visibility_decorator.js │ │ ├── feedback_form.js │ │ ├── financial-assistance │ │ │ ├── financial_assistance_form_factory.js │ │ │ ├── models │ │ │ │ └── financial_assistance_model.js │ │ │ └── views │ │ │ │ └── financial_assistance_form_view.js │ │ ├── fixtures │ │ │ ├── accordion.html │ │ │ ├── calculator.html │ │ │ ├── ccx │ │ │ │ ├── schedule.html │ │ │ │ └── schedule.json │ │ │ ├── course_sharing │ │ │ │ └── course_listings.html │ │ │ ├── courseware │ │ │ │ ├── course_info_events.html │ │ │ │ ├── course_updates.html │ │ │ │ └── link_clicked_events.html │ │ │ ├── dashboard │ │ │ │ └── dashboard.html │ │ │ ├── discovery.html │ │ │ ├── donation.underscore │ │ │ ├── edxnotes │ │ │ │ ├── edxnotes.html │ │ │ │ ├── edxnotes_wrapper.html │ │ │ │ └── toggle_notes.html │ │ │ ├── feedback_form.html │ │ │ ├── instructor_dashboard │ │ │ │ ├── autoenrollment.html │ │ │ │ ├── data_download.html │ │ │ │ ├── membership.html │ │ │ │ ├── send_email.html │ │ │ │ └── student_admin.html │ │ │ ├── items.json │ │ │ ├── staff_grading.html │ │ │ └── tab.html │ │ ├── footer-edx.js │ │ ├── form.ext.js │ │ ├── groups │ │ │ ├── collections │ │ │ │ └── cohort.js │ │ │ ├── models │ │ │ │ ├── cohort.js │ │ │ │ ├── content_group.js │ │ │ │ └── course_cohort_settings.js │ │ │ └── views │ │ │ │ ├── cohort_editor.js │ │ │ │ ├── cohort_form.js │ │ │ │ ├── cohorts.js │ │ │ │ ├── cohorts_dashboard_factory.js │ │ │ │ └── course_cohort_settings_notification.js │ │ ├── header │ │ │ └── header.js │ │ ├── header_factory.js │ │ ├── histogram.js │ │ ├── i18n │ │ │ ├── am │ │ │ │ └── djangojs.js │ │ │ ├── ar │ │ │ │ └── djangojs.js │ │ │ ├── az │ │ │ │ └── djangojs.js │ │ │ ├── bg-bg │ │ │ │ └── djangojs.js │ │ │ ├── bn-bd │ │ │ │ └── djangojs.js │ │ │ ├── bn-in │ │ │ │ └── djangojs.js │ │ │ ├── bs │ │ │ │ └── djangojs.js │ │ │ ├── ca │ │ │ │ └── djangojs.js │ │ │ ├── ca@valencia │ │ │ │ └── djangojs.js │ │ │ ├── cs │ │ │ │ └── djangojs.js │ │ │ ├── cy │ │ │ │ └── djangojs.js │ │ │ ├── da │ │ │ │ └── djangojs.js │ │ │ ├── de-de │ │ │ │ └── djangojs.js │ │ │ ├── el │ │ │ │ └── djangojs.js │ │ │ ├── en-uk │ │ │ │ └── djangojs.js │ │ │ ├── en │ │ │ │ └── djangojs.js │ │ │ ├── en@lolcat │ │ │ │ └── djangojs.js │ │ │ ├── en@pirate │ │ │ │ └── djangojs.js │ │ │ ├── eo │ │ │ │ └── djangojs.js │ │ │ ├── es-419 │ │ │ │ └── djangojs.js │ │ │ ├── es-ar │ │ │ │ └── djangojs.js │ │ │ ├── es-ec │ │ │ │ └── djangojs.js │ │ │ ├── es-es │ │ │ │ └── djangojs.js │ │ │ ├── es-mx │ │ │ │ └── djangojs.js │ │ │ ├── es-pe │ │ │ │ └── djangojs.js │ │ │ ├── et-ee │ │ │ │ └── djangojs.js │ │ │ ├── eu-es │ │ │ │ └── djangojs.js │ │ │ ├── fa-ir │ │ │ │ └── djangojs.js │ │ │ ├── fa │ │ │ │ └── djangojs.js │ │ │ ├── fake2 │ │ │ │ └── djangojs.js │ │ │ ├── fi-fi │ │ │ │ └── djangojs.js │ │ │ ├── fil │ │ │ │ └── djangojs.js │ │ │ ├── fr │ │ │ │ └── djangojs.js │ │ │ ├── gl │ │ │ │ └── djangojs.js │ │ │ ├── gu │ │ │ │ └── djangojs.js │ │ │ ├── he │ │ │ │ └── djangojs.js │ │ │ ├── hi │ │ │ │ └── djangojs.js │ │ │ ├── hr │ │ │ │ └── djangojs.js │ │ │ ├── hu │ │ │ │ └── djangojs.js │ │ │ ├── hy-am │ │ │ │ └── djangojs.js │ │ │ ├── id │ │ │ │ └── djangojs.js │ │ │ ├── it-it │ │ │ │ └── djangojs.js │ │ │ ├── ja-jp │ │ │ │ └── djangojs.js │ │ │ ├── kk-kz │ │ │ │ └── djangojs.js │ │ │ ├── km-kh │ │ │ │ └── djangojs.js │ │ │ ├── kn │ │ │ │ └── djangojs.js │ │ │ ├── ko-kr │ │ │ │ └── djangojs.js │ │ │ ├── lt-lt │ │ │ │ └── djangojs.js │ │ │ ├── ml │ │ │ │ └── djangojs.js │ │ │ ├── mn │ │ │ │ └── djangojs.js │ │ │ ├── mr │ │ │ │ └── djangojs.js │ │ │ ├── ms │ │ │ │ └── djangojs.js │ │ │ ├── nb │ │ │ │ └── djangojs.js │ │ │ ├── ne │ │ │ │ └── djangojs.js │ │ │ ├── nl-nl │ │ │ │ └── djangojs.js │ │ │ ├── or │ │ │ │ └── djangojs.js │ │ │ ├── pl │ │ │ │ └── djangojs.js │ │ │ ├── pt-br │ │ │ │ └── djangojs.js │ │ │ ├── pt-pt │ │ │ │ └── djangojs.js │ │ │ ├── ro │ │ │ │ └── djangojs.js │ │ │ ├── rtl │ │ │ │ └── djangojs.js │ │ │ ├── ru │ │ │ │ └── djangojs.js │ │ │ ├── si │ │ │ │ └── djangojs.js │ │ │ ├── sk │ │ │ │ └── djangojs.js │ │ │ ├── sl │ │ │ │ └── djangojs.js │ │ │ ├── sq │ │ │ │ └── djangojs.js │ │ │ ├── sr │ │ │ │ └── djangojs.js │ │ │ ├── sv │ │ │ │ └── djangojs.js │ │ │ ├── sw │ │ │ │ └── djangojs.js │ │ │ ├── ta │ │ │ │ └── djangojs.js │ │ │ ├── te │ │ │ │ └── djangojs.js │ │ │ ├── th │ │ │ │ └── djangojs.js │ │ │ ├── tr-tr │ │ │ │ └── djangojs.js │ │ │ ├── uk │ │ │ │ └── djangojs.js │ │ │ ├── ur │ │ │ │ └── djangojs.js │ │ │ ├── uz │ │ │ │ └── djangojs.js │ │ │ ├── vi │ │ │ │ └── djangojs.js │ │ │ ├── zh-cn │ │ │ │ └── djangojs.js │ │ │ ├── zh-hk │ │ │ │ └── djangojs.js │ │ │ └── zh-tw │ │ │ │ └── djangojs.js │ │ ├── ie11_find_array.js │ │ ├── instructor_dashboard │ │ │ ├── certificates.js │ │ │ ├── cohort_management.js │ │ │ ├── course_info.js │ │ │ ├── data_download.js │ │ │ ├── data_download_2.js │ │ │ ├── discussions_management.js │ │ │ ├── e-commerce.js │ │ │ ├── ecommerce.js │ │ │ ├── extensions.js │ │ │ ├── instructor_dashboard.js │ │ │ ├── membership.js │ │ │ ├── metrics.js │ │ │ ├── open_response_assessment.js │ │ │ ├── proctoring.js │ │ │ ├── send_email.js │ │ │ ├── student_admin.js │ │ │ └── util.js │ │ ├── jquery.ajaxfileupload.js │ │ ├── jquery.allLoaded.js │ │ ├── jquery.autocomplete.js │ │ ├── jquery.gradebook.js │ │ ├── jquery.treeview.js │ │ ├── jwt_auth │ │ │ ├── .eslintrc.js │ │ │ ├── AxiosCsrfTokenService.js │ │ │ ├── AxiosJwtTokenService.js │ │ │ ├── README.rst │ │ │ ├── interceptors │ │ │ │ └── createRetryInterceptor.js │ │ │ └── utils.js │ │ ├── leanModal.js │ │ ├── learner_analytics_dashboard │ │ │ ├── CircleChart.jsx │ │ │ ├── CircleChartLegend.jsx │ │ │ ├── Discussions.jsx │ │ │ ├── DueDates.jsx │ │ │ ├── GradeTable.jsx │ │ │ └── LearnerAnalyticsDashboard.jsx │ │ ├── learner_dashboard │ │ │ ├── .eslintrc.js │ │ │ ├── EnterpriseLearnerPortalModal.jsx │ │ │ ├── RecommendationsPanel.jsx │ │ │ ├── Static2UCallouts.jsx │ │ │ ├── certificate_api.js │ │ │ ├── collections │ │ │ │ ├── course_card_collection.js │ │ │ │ ├── program_collection.js │ │ │ │ └── program_progress_collection.js │ │ │ ├── course_entitlement_factory.js │ │ │ ├── entitlement_unenrollment_factory.js │ │ │ ├── models │ │ │ │ ├── course_card_model.js │ │ │ │ ├── course_enroll_model.js │ │ │ │ ├── course_entitlement_model.js │ │ │ │ ├── program_model.js │ │ │ │ └── program_subscription_model.js │ │ │ ├── program_details_factory.js │ │ │ ├── program_list_factory.js │ │ │ ├── spec │ │ │ │ ├── collection_list_view_spec.js │ │ │ │ ├── course_card_view_spec.js │ │ │ │ ├── course_enroll_view_spec.js │ │ │ │ ├── course_entitlement_view_spec.js │ │ │ │ ├── entitlement_unenrollment_view_spec.js │ │ │ │ ├── program_alert_list_view_spec.js │ │ │ │ ├── program_card_view_spec.js │ │ │ │ ├── program_details_header_spec.js │ │ │ │ ├── program_details_sidebar_view_spec.js │ │ │ │ ├── program_details_view_spec.js │ │ │ │ ├── program_list_header_view_spec.js │ │ │ │ ├── progress_circle_view_spec.js │ │ │ │ ├── sidebar_view_spec.js │ │ │ │ └── unenroll_view_spec.js │ │ │ ├── unenrollment_factory.js │ │ │ └── views │ │ │ │ ├── certificate_list_view.js │ │ │ │ ├── certificate_status_view.js │ │ │ │ ├── collection_list_view.js │ │ │ │ ├── course_card_view.js │ │ │ │ ├── course_enroll_view.js │ │ │ │ ├── course_entitlement_view.js │ │ │ │ ├── entitlement_unenrollment_view.js │ │ │ │ ├── expired_notification_view.js │ │ │ │ ├── explore_new_programs_view.js │ │ │ │ ├── program_alert_list_view.js │ │ │ │ ├── program_card_view.js │ │ │ │ ├── program_details_sidebar_view.js │ │ │ │ ├── program_details_view.js │ │ │ │ ├── program_header_view.js │ │ │ │ ├── program_list_header_view.js │ │ │ │ ├── progress_circle_view.js │ │ │ │ ├── sidebar_view.js │ │ │ │ ├── subscription_upsell_view.js │ │ │ │ ├── unenroll_view.js │ │ │ │ └── upgrade_message_view.js │ │ ├── logout.js │ │ ├── main.js │ │ ├── mathjax_accessible.js │ │ ├── mathjax_delay_renderer.js │ │ ├── models │ │ │ └── notification.js │ │ ├── modules │ │ │ └── tab.js │ │ ├── navigation.js │ │ ├── pdf-analytics.js │ │ ├── pending_tasks.js │ │ ├── program_marketing.js │ │ ├── query-params.js │ │ ├── shoppingcart │ │ │ └── shoppingcart.js │ │ ├── slick.min.js │ │ ├── spec │ │ │ ├── api_admin │ │ │ │ └── catalog_preview_spec.js │ │ │ ├── calculator_spec.js │ │ │ ├── ccx │ │ │ │ └── schedule_spec.js │ │ │ ├── components │ │ │ │ ├── card │ │ │ │ │ └── card_spec.js │ │ │ │ └── header │ │ │ │ │ └── header_spec.js │ │ │ ├── course_sharing │ │ │ │ └── course_sharing_events_spec.js │ │ │ ├── courseware │ │ │ │ ├── course_info_events_spec.js │ │ │ │ ├── link_clicked_events_spec.js │ │ │ │ └── updates_visibility_spec.js │ │ │ ├── courseware_spec.js │ │ │ ├── dashboard │ │ │ │ ├── donation.js │ │ │ │ ├── dropdown_spec.js │ │ │ │ └── track_events_spec.js │ │ │ ├── dateutil_factory_spec.js │ │ │ ├── discovery │ │ │ │ ├── collections │ │ │ │ │ └── filters_spec.js │ │ │ │ ├── discovery_factory_spec.js │ │ │ │ ├── models │ │ │ │ │ ├── course_card_spec.js │ │ │ │ │ ├── course_directory_spec.js │ │ │ │ │ ├── facet_option_spec.js │ │ │ │ │ ├── filter_spec.js │ │ │ │ │ └── search_state_spec.js │ │ │ │ └── views │ │ │ │ │ ├── course_card_spec.js │ │ │ │ │ ├── courses_listing_spec.js │ │ │ │ │ ├── filter_bar_spec.js │ │ │ │ │ ├── filter_label_spec.js │ │ │ │ │ ├── refine_sidebar_spec.js │ │ │ │ │ └── search_form_spec.js │ │ │ ├── edxnotes │ │ │ │ ├── collections │ │ │ │ │ └── notes_spec.js │ │ │ │ ├── helpers.js │ │ │ │ ├── models │ │ │ │ │ ├── note_spec.js │ │ │ │ │ └── tab_spec.js │ │ │ │ ├── plugins │ │ │ │ │ ├── accessibility_spec.js │ │ │ │ │ ├── caret_navigation_spec.js │ │ │ │ │ ├── events_spec.js │ │ │ │ │ ├── scroller_spec.js │ │ │ │ │ └── store_error_handler_spec.js │ │ │ │ ├── utils │ │ │ │ │ ├── logger_spec.js │ │ │ │ │ └── notes_collector_spec.js │ │ │ │ └── views │ │ │ │ │ ├── note_item_spec.js │ │ │ │ │ ├── notes_factory_spec.js │ │ │ │ │ ├── notes_page_spec.js │ │ │ │ │ ├── notes_visibility_factory_spec.js │ │ │ │ │ ├── search_box_spec.js │ │ │ │ │ ├── shim_spec.js │ │ │ │ │ ├── tab_item_spec.js │ │ │ │ │ ├── tab_view_spec.js │ │ │ │ │ ├── tabs │ │ │ │ │ ├── course_structure_spec.js │ │ │ │ │ ├── recent_activity_spec.js │ │ │ │ │ ├── search_results_spec.js │ │ │ │ │ └── tags_spec.js │ │ │ │ │ ├── tabs_list_spec.js │ │ │ │ │ └── visibility_decorator_spec.js │ │ │ ├── feedback_form_spec.js │ │ │ ├── financial-assistance │ │ │ │ └── financial_assistance_form_view_spec.js │ │ │ ├── groups │ │ │ │ └── views │ │ │ │ │ ├── cohorts_spec.js │ │ │ │ │ └── discussions_spec.js │ │ │ ├── helper.js │ │ │ ├── histogram_spec.js │ │ │ ├── instructor_dashboard │ │ │ │ ├── certificates_bulk_exception_spec.js │ │ │ │ ├── certificates_exception_spec.js │ │ │ │ ├── certificates_invalidation_spec.js │ │ │ │ ├── certificates_spec.js │ │ │ │ ├── data_download_spec.js │ │ │ │ ├── ecommerce_spec.js │ │ │ │ ├── membership_auth_spec.js │ │ │ │ ├── membership_spec.js │ │ │ │ ├── send_email_spec.js │ │ │ │ └── student_admin_spec.js │ │ │ ├── markdown_editor_spec.js │ │ │ ├── modules │ │ │ │ └── tab_spec.js │ │ │ ├── navigation_spec.js │ │ │ ├── requirejs_spec.js │ │ │ ├── shoppingcart │ │ │ │ └── shoppingcart_spec.js │ │ │ ├── staff_debug_actions_spec.js │ │ │ ├── student_account │ │ │ │ ├── access_spec.js │ │ │ │ ├── account_settings_factory_spec.js │ │ │ │ ├── account_settings_fields_helpers.js │ │ │ │ ├── account_settings_fields_spec.js │ │ │ │ ├── account_settings_view_spec.js │ │ │ │ ├── emailoptin_spec.js │ │ │ │ ├── enrollment_spec.js │ │ │ │ ├── finish_auth_spec.js │ │ │ │ ├── helpers.js │ │ │ │ ├── hinted_login_spec.js │ │ │ │ ├── institution_login_spec.js │ │ │ │ ├── login_spec.js │ │ │ │ ├── logistration_factory_spec.js │ │ │ │ ├── multiple_enterprise_spec.js │ │ │ │ ├── password_reset_spec.js │ │ │ │ ├── register_spec.js │ │ │ │ ├── shoppingcart_spec.js │ │ │ │ └── utils_spec.js │ │ │ ├── verify_student │ │ │ │ ├── image_input_spec.js │ │ │ │ ├── make_payment_step_view_ab_testing_spec.js │ │ │ │ ├── make_payment_step_view_spec.js │ │ │ │ ├── pay_and_verify_view_spec.js │ │ │ │ ├── reverify_view_spec.js │ │ │ │ ├── review_photos_step_view_spec.js │ │ │ │ └── webcam_photo_view_spec.js │ │ │ └── views │ │ │ │ ├── fields_helpers.js │ │ │ │ ├── fields_spec.js │ │ │ │ ├── file_uploader_spec.js │ │ │ │ ├── message_banner_spec.js │ │ │ │ └── notification_spec.js │ │ ├── split.js │ │ ├── staff_debug_actions.js │ │ ├── sticky_filter.js │ │ ├── student_account │ │ │ ├── AccountsClient.js │ │ │ ├── StudentAccountDeletionInitializer.js │ │ │ ├── components │ │ │ │ ├── .eslintrc.js │ │ │ │ ├── PasswordResetConfirmation.jsx │ │ │ │ ├── PasswordResetInput.jsx │ │ │ │ ├── StudentAccountDeletion.jsx │ │ │ │ ├── StudentAccountDeletionModal.jsx │ │ │ │ ├── removeLoggedInCookies.js │ │ │ │ └── spec │ │ │ │ │ └── PasswordResetConfirmation_spec.js │ │ │ ├── emailoptin.js │ │ │ ├── enrollment.js │ │ │ ├── logistration_factory.js │ │ │ ├── models │ │ │ │ ├── AccountRecoveryModel.js │ │ │ │ ├── LoginModel.js │ │ │ │ ├── PasswordResetModel.js │ │ │ │ ├── RegisterModel.js │ │ │ │ ├── user_account_model.js │ │ │ │ └── user_preferences_model.js │ │ │ ├── multiple_enterprise.js │ │ │ ├── shoppingcart.js │ │ │ ├── tos_modal.js │ │ │ ├── utils.js │ │ │ └── views │ │ │ │ ├── AccessView.js │ │ │ │ ├── FinishAuthView.js │ │ │ │ ├── FormView.js │ │ │ │ ├── HintedLoginView.js │ │ │ │ ├── InstitutionLoginView.js │ │ │ │ ├── LoginView.js │ │ │ │ ├── PasswordResetView.js │ │ │ │ ├── RegisterView.js │ │ │ │ ├── account_section_view.js │ │ │ │ ├── account_settings_factory.js │ │ │ │ ├── account_settings_fields.js │ │ │ │ ├── account_settings_view.js │ │ │ │ └── finish_auth_factory.js │ │ ├── toggle_login_modal.js │ │ ├── user_dropdown_v1.js │ │ ├── utils │ │ │ ├── animation.js │ │ │ ├── facebook.js │ │ │ └── navigation.js │ │ ├── vendor │ │ │ ├── backbone-super.js │ │ │ ├── history.js │ │ │ ├── jquery.ajax-retry.js │ │ │ ├── jquery.qubit.js │ │ │ ├── urlify.js │ │ │ └── xdomain.min.js │ │ ├── verify_student │ │ │ ├── CameraCapture.as │ │ │ ├── CameraCapture.swf │ │ │ ├── incourse_reverify.js │ │ │ ├── models │ │ │ │ └── verification_model.js │ │ │ ├── pay_and_verify.js │ │ │ ├── reverify.js │ │ │ └── views │ │ │ │ ├── enrollment_confirmation_step_view.js │ │ │ │ ├── error_view.js │ │ │ │ ├── face_photo_step_view.js │ │ │ │ ├── id_photo_step_view.js │ │ │ │ ├── image_input_view.js │ │ │ │ ├── incourse_reverify_view.js │ │ │ │ ├── intro_step_view.js │ │ │ │ ├── make_payment_step_view.js │ │ │ │ ├── pay_and_verify_view.js │ │ │ │ ├── reverify_success_step_view.js │ │ │ │ ├── reverify_view.js │ │ │ │ ├── review_photos_step_view.js │ │ │ │ ├── step_view.js │ │ │ │ └── webcam_photo_view.js │ │ ├── views │ │ │ ├── base_dashboard_view.js │ │ │ ├── fields.js │ │ │ ├── file_uploader.js │ │ │ ├── image_field.js │ │ │ ├── message_banner.js │ │ │ └── notification.js │ │ └── wiki │ │ │ ├── CodeMirror.init.js │ │ │ └── accessible.js │ ├── karma_lms.conf.js │ ├── learner_profile │ ├── lms │ │ ├── fixtures │ │ │ └── preview │ │ │ │ └── course_preview.html │ │ └── js │ │ │ ├── build.js │ │ │ ├── preview │ │ │ └── preview_factory.js │ │ │ ├── require-config.js │ │ │ ├── spec │ │ │ ├── main.js │ │ │ ├── main_requirejs_coffee.js │ │ │ └── preview │ │ │ │ └── preview_factory_spec.js │ │ │ └── xblock │ │ │ └── lms.runtime.v1.js │ ├── sass │ │ ├── .gitignore │ │ ├── README.txt │ │ ├── _build-base-v1-rtl.scss │ │ ├── _build-base-v1.scss │ │ ├── _build-course.scss │ │ ├── _build-footer-edx.scss │ │ ├── _build-lms-v1.scss │ │ ├── _build-mobile.scss │ │ ├── _config.scss │ │ ├── _developer.scss │ │ ├── _experiments.scss │ │ ├── _header.scss │ │ ├── _mixins-inherited.scss │ │ ├── _mixins.scss │ │ ├── _notifications.scss │ │ ├── _shame.scss │ │ ├── _variables.scss │ │ ├── base │ │ │ ├── _animations.scss │ │ │ ├── _base.scss │ │ │ ├── _build.scss │ │ │ ├── _extends.scss │ │ │ ├── _grid-settings.scss │ │ │ ├── _headings.scss │ │ │ ├── _layouts.scss │ │ │ ├── _mixins.scss │ │ │ ├── _reset.scss │ │ │ ├── _utilities.scss │ │ │ ├── _variables-ltr.scss │ │ │ └── _variables-rtl.scss │ │ ├── bootstrap │ │ │ ├── _base.scss │ │ │ ├── _build.scss │ │ │ ├── _components.scss │ │ │ ├── _footer.scss │ │ │ ├── _header.scss │ │ │ ├── _layouts.scss │ │ │ ├── _legacy.scss │ │ │ ├── _navigation.scss │ │ │ ├── _variables.scss │ │ │ ├── elements │ │ │ │ ├── _banners.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _program-card.scss │ │ │ │ └── _progress-circle.scss │ │ │ └── lms-main.scss │ │ ├── course │ │ │ ├── _auto-cert.scss │ │ │ ├── _dates.scss │ │ │ ├── _gradebook.scss │ │ │ ├── _profile.scss │ │ │ ├── _student-notes.scss │ │ │ ├── _syllabus.scss │ │ │ ├── _tabs.scss │ │ │ ├── _textbook.scss │ │ │ ├── base │ │ │ │ ├── _base.scss │ │ │ │ ├── _extends.scss │ │ │ │ └── _mixins.scss │ │ │ ├── ccx_coach │ │ │ │ └── _dashboard.scss │ │ │ ├── courseware │ │ │ │ ├── _amplifier.scss │ │ │ │ ├── _courseware.scss │ │ │ │ └── _sidebar.scss │ │ │ ├── instructor │ │ │ │ ├── _email.scss │ │ │ │ └── _instructor_2.scss │ │ │ ├── layout │ │ │ │ ├── _banner_cta.scss │ │ │ │ ├── _courseware_header.scss │ │ │ │ ├── _courseware_preview.scss │ │ │ │ └── _footer.scss │ │ │ ├── modules │ │ │ │ ├── _calculator.scss │ │ │ │ ├── _student-notes.scss │ │ │ │ └── _timer.scss │ │ │ └── wiki │ │ │ │ ├── _basic-html.scss │ │ │ │ ├── _create.scss │ │ │ │ ├── _sidebar.scss │ │ │ │ ├── _table.scss │ │ │ │ └── _wiki.scss │ │ ├── discussion │ │ │ ├── _build-discussion.scss │ │ │ ├── _discussion-v1.scss │ │ │ ├── _discussion.scss │ │ │ ├── _layouts.scss │ │ │ ├── _mixins.scss │ │ │ ├── elements │ │ │ │ ├── _actions.scss │ │ │ │ ├── _editor.scss │ │ │ │ ├── _labels.scss │ │ │ │ └── _navigation.scss │ │ │ ├── inline-discussion-rtl.scss │ │ │ ├── inline-discussion.scss │ │ │ ├── lms-discussion-bootstrap.scss │ │ │ ├── utilities │ │ │ │ ├── _developer.scss │ │ │ │ ├── _shame.scss │ │ │ │ ├── _v1-compatibility.scss │ │ │ │ ├── _variables-bootstrap.scss │ │ │ │ ├── _variables-v1.scss │ │ │ │ └── _variables-v2.scss │ │ │ └── views │ │ │ │ ├── _create-edit-post.scss │ │ │ │ ├── _home.scss │ │ │ │ ├── _inline.scss │ │ │ │ ├── _response.scss │ │ │ │ ├── _search.scss │ │ │ │ └── _thread.scss │ │ ├── edx-pattern-library-shims │ │ ├── elements │ │ │ ├── _banners.scss │ │ │ ├── _controls.scss │ │ │ ├── _course-card.scss │ │ │ ├── _creative-commons.scss │ │ │ ├── _icons.scss │ │ │ ├── _navigation.scss │ │ │ ├── _pagination.scss │ │ │ ├── _program-card.scss │ │ │ ├── _progress-circle.scss │ │ │ ├── _system-feedback.scss │ │ │ └── _typography.scss │ │ ├── features │ │ │ ├── _announcements.scss │ │ │ ├── _bookmarks-v1.scss │ │ │ ├── _bookmarks.scss │ │ │ ├── _content-type-gating.scss │ │ │ ├── _course-duration-limits.scss │ │ │ ├── _course-experience.scss │ │ │ ├── _course-search.scss │ │ │ ├── _course-sock.scss │ │ │ ├── _course-upgrade-message.scss │ │ │ ├── _learner-profile.scss │ │ │ └── _unsupported-browser-alert.scss │ │ ├── lms-course-rtl.scss │ │ ├── lms-course.scss │ │ ├── lms-footer-edx-rtl.scss │ │ ├── lms-footer-edx.scss │ │ ├── lms-footer-rtl.scss │ │ ├── lms-footer.scss │ │ ├── lms-main-v1-rtl.scss │ │ ├── lms-main-v1.scss │ │ ├── lms-mobile-rtl.scss │ │ ├── lms-mobile.scss │ │ ├── mobile │ │ │ └── _main.scss │ │ ├── multicourse │ │ │ ├── _about_pages.scss │ │ │ ├── _account.scss │ │ │ ├── _course_about.scss │ │ │ ├── _courses.scss │ │ │ ├── _dashboard.scss │ │ │ ├── _entitlement_dashboard.scss │ │ │ ├── _error-pages.scss │ │ │ ├── _help.scss │ │ │ ├── _home.scss │ │ │ ├── _jobs.scss │ │ │ ├── _media-kit.scss │ │ │ ├── _press_release.scss │ │ │ └── _survey-page.scss │ │ ├── partials │ │ │ ├── README.rst │ │ │ └── lms │ │ │ │ └── theme │ │ │ │ ├── _extras-v2.scss │ │ │ │ ├── _extras.scss │ │ │ │ ├── _variables-v1.scss │ │ │ │ └── _variables.scss │ │ ├── search │ │ │ ├── _instant-search.scss │ │ │ └── _search.scss │ │ ├── shared │ │ │ ├── _activation_messages.scss │ │ │ ├── _alerts_pattern_library_shim.scss │ │ │ ├── _course_filter.scss │ │ │ ├── _course_object.scss │ │ │ ├── _fields.scss │ │ │ ├── _footer-edx.scss │ │ │ ├── _footer.scss │ │ │ ├── _forms.scss │ │ │ ├── _header.scss │ │ │ ├── _help-tab.scss │ │ │ ├── _modal.scss │ │ │ ├── _tooltips.scss │ │ │ └── _unsubscribe.scss │ │ ├── vendor │ │ │ └── bi-app │ │ │ │ ├── _bi-app-ltr.scss │ │ │ │ ├── _bi-app-rtl.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _variables-ltr.scss │ │ │ │ └── _variables-rtl.scss │ │ └── views │ │ │ ├── _account-settings.scss │ │ │ ├── _api-access.scss │ │ │ ├── _course-entitlements.scss │ │ │ ├── _decoupled-verification.scss │ │ │ ├── _entitlement-support-page.scss │ │ │ ├── _financial-assistance.scss │ │ │ ├── _homepage.scss │ │ │ ├── _login-register.scss │ │ │ ├── _oauth2.scss │ │ │ ├── _program-details.scss │ │ │ ├── _program-list.scss │ │ │ ├── _program-marketing-page.scss │ │ │ ├── _shoppingcart.scss │ │ │ ├── _support.scss │ │ │ ├── _teams.scss │ │ │ ├── _track_selection.scss │ │ │ └── _verification.scss │ ├── support │ ├── teams │ ├── templates │ └── xmodule_js ├── templates │ ├── .gitignore │ ├── .hgignore │ ├── _gated_content.html │ ├── admin │ │ ├── base_site.html │ │ ├── external_user_ids │ │ │ ├── generate_external_ids_form.html │ │ │ └── generate_external_user_ids.html │ │ └── user_api │ │ │ └── accounts │ │ │ └── cancel_retirement_action.html │ ├── annotatable.html │ ├── api_admin │ │ ├── api_access_request_email_approved.txt │ │ ├── api_access_request_email_denied.txt │ │ ├── api_access_request_email_new_request.txt │ │ ├── api_access_request_form.html │ │ ├── catalog-error.underscore │ │ ├── catalog-results.underscore │ │ ├── catalogs │ │ │ ├── edit.html │ │ │ ├── list.html │ │ │ └── search.html │ │ ├── status.html │ │ └── terms_of_service.html │ ├── book_toc.xml │ ├── bookmark_button.html │ ├── bulk_email │ │ ├── confirm_unsubscribe.html │ │ ├── edx_ace │ │ │ └── bulkemail │ │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ └── unsubscribe_success.html │ ├── calculator │ │ └── toggle_calculator.html │ ├── ccx │ │ ├── coach_dashboard.html │ │ ├── enrollment.html │ │ ├── grading_policy.html │ │ ├── schedule.html │ │ ├── schedule.underscore │ │ └── student_admin.html │ ├── certificates │ │ ├── _about-accomplishments.html │ │ ├── _about-edx.html │ │ ├── _accomplishment-banner.html │ │ ├── _accomplishment-footer.html │ │ ├── _accomplishment-header.html │ │ ├── _accomplishment-introduction.html │ │ ├── _accomplishment-rendering.html │ │ ├── _assets-secondary.html │ │ ├── _badges-modal.html │ │ ├── _edx-accomplishment-print-help.html │ │ ├── accomplishment-base.html │ │ ├── invalid.html │ │ ├── server-error.html │ │ ├── url_unsupported.html │ │ └── valid.html │ ├── components │ │ ├── card │ │ │ └── card.underscore │ │ └── header │ │ │ └── header.underscore │ ├── conditional_ajax.html │ ├── conditional_block.html │ ├── course.html │ ├── course_modes │ │ ├── _upgrade_button.html │ │ ├── choose.html │ │ ├── error.html │ │ ├── fbe.html │ │ ├── track_selection.html │ │ └── unfbe.html │ ├── courses_list.html │ ├── courseware │ │ ├── accordion.html │ │ ├── course_about.html │ │ ├── course_about_sidebar_header.html │ │ ├── course_navigation.html │ │ ├── course_updates.html │ │ ├── courses.html │ │ ├── courseware-chromeless.html │ │ ├── courseware-error.html │ │ ├── courseware.html │ │ ├── error-message.html │ │ ├── experiments.html │ │ ├── gradebook.html │ │ ├── news.html │ │ ├── proctored-exam-controls.underscore │ │ ├── proctored-exam-status.underscore │ │ ├── program_marketing.html │ │ ├── progress.html │ │ ├── progress_graph.js │ │ ├── static_tab.html │ │ ├── submission_history.html │ │ ├── syllabus.html │ │ ├── tab-view.html │ │ ├── tabs.html │ │ ├── welcome-back.html │ │ └── xqa_interface.html │ ├── credit_notifications │ │ ├── credit_eligibility_email.html │ │ ├── credit_eligibility_email.txt │ │ ├── credit_notification.css │ │ └── edx-logo-header.png │ ├── dashboard.html │ ├── dashboard │ │ ├── _dashboard_announcements.html │ │ ├── _dashboard_certificate_information.html │ │ ├── _dashboard_course_listing.html │ │ ├── _dashboard_course_resume.html │ │ ├── _dashboard_credit_info.html │ │ ├── _dashboard_entitlement_actions.html │ │ ├── _dashboard_entitlement_unenrollment_modal.html │ │ ├── _dashboard_show_consent.html │ │ ├── _dashboard_third_party_error.html │ │ ├── _entitlement_reason_survey.html │ │ ├── _reason_survey.html │ │ └── donation.underscore │ ├── debug │ │ └── run_python_form.html │ ├── discovery │ │ ├── course_card.underscore │ │ ├── facet.underscore │ │ ├── facet_option.underscore │ │ ├── filter.underscore │ │ └── filter_bar.underscore │ ├── discussion │ │ ├── _discussion_inline.html │ │ ├── _discussion_inline_studio.html │ │ ├── _filter_dropdown.html │ │ ├── _js_body_dependencies.html │ │ ├── _js_head_dependencies.html │ │ ├── _thread_list_template.html │ │ ├── _underscore_templates.html │ │ └── _user_profile.html │ ├── edxnotes │ │ ├── edxnotes.html │ │ ├── note-item.underscore │ │ ├── tab-item.underscore │ │ └── toggle_notes.html │ ├── email_change_failed.html │ ├── email_change_successful.html │ ├── email_exists.html │ ├── emails │ │ ├── business_order_confirmation_email.txt │ │ ├── failed_verification_email.txt │ │ ├── order_confirmation_email.txt │ │ ├── passed_verification_email.txt │ │ ├── photo_submission_confirmation.txt │ │ ├── reject_name_change.txt │ │ └── reverification_processed.txt │ ├── embargo │ │ ├── default_courseware.html │ │ └── default_enrollment.html │ ├── enroll_staff.html │ ├── enroll_students.html │ ├── enrollment │ │ └── course_enrollment_message.html │ ├── experiments │ │ ├── dashboard_metadata.html │ │ └── user_metadata.html │ ├── extauth_failure.html │ ├── feedback_email.txt │ ├── fields │ │ ├── field_dropdown.underscore │ │ ├── field_dropdown_account.underscore │ │ ├── field_image.underscore │ │ ├── field_link.underscore │ │ ├── field_link_account.underscore │ │ ├── field_order_history.underscore │ │ ├── field_readonly.underscore │ │ ├── field_readonly_account.underscore │ │ ├── field_social_link_account.underscore │ │ ├── field_text.underscore │ │ ├── field_text_account.underscore │ │ ├── field_textarea.underscore │ │ └── message_banner.underscore │ ├── file-upload.underscore │ ├── financial-assistance │ │ ├── apply.html │ │ ├── financial-assistance.html │ │ ├── financial_assessment_form.underscore │ │ └── financial_assessment_submitted.underscore │ ├── footer.html │ ├── forgot_password_modal.html │ ├── fragments │ │ ├── standalone-page-bootstrap.html │ │ └── standalone-page-fragment.html │ ├── goal_reminder_banner.html │ ├── header.html │ ├── header │ │ ├── brand.html │ │ ├── header.html │ │ ├── navbar-authenticated.html │ │ ├── navbar-logo-header.html │ │ ├── navbar-not-authenticated.html │ │ └── user_dropdown.html │ ├── hidden_content.html │ ├── identity.xml │ ├── index.html │ ├── index_overlay.html │ ├── index_promo_video.html │ ├── instructor │ │ ├── edx_ace │ │ │ ├── accountcreationandenrollment │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── addbetatester │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── allowedenroll │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── allowedunenroll │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── enrolledunenroll │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── enrollenrolled │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ └── removebetatester │ │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ └── instructor_dashboard_2 │ │ │ ├── add_coupon_modal.html │ │ │ ├── certificate-allowlist-editor.underscore │ │ │ ├── certificate-allowlist.underscore │ │ │ ├── certificate-bulk-allowlist.underscore │ │ │ ├── certificate-invalidation.underscore │ │ │ ├── certificates.html │ │ │ ├── cohort-discussions-category.underscore │ │ │ ├── cohort-discussions-subcategory.underscore │ │ │ ├── cohort-editor.underscore │ │ │ ├── cohort-form.underscore │ │ │ ├── cohort-group-header.underscore │ │ │ ├── cohort-selector.underscore │ │ │ ├── cohort-state.underscore │ │ │ ├── cohort_management.html │ │ │ ├── cohorts.underscore │ │ │ ├── course_info.html │ │ │ ├── data_download.html │ │ │ ├── data_download_2.html │ │ │ ├── data_download_2 │ │ │ ├── certificates.html │ │ │ ├── grading.html │ │ │ ├── problem_report.html │ │ │ └── reports.html │ │ │ ├── discussions.underscore │ │ │ ├── discussions_management.html │ │ │ ├── divided-discussions-course-wide.underscore │ │ │ ├── divided-discussions-inline.underscore │ │ │ ├── edit_coupon_modal.html │ │ │ ├── enrollment-code-lookup-links.underscore │ │ │ ├── extensions.html │ │ │ ├── generate_registarion_codes_modal.html │ │ │ ├── instructor_analytics.html │ │ │ ├── instructor_dashboard_2.html │ │ │ ├── invalidate_registration_code_modal.html │ │ │ ├── membership-list-widget.underscore │ │ │ ├── membership.html │ │ │ ├── notification.underscore │ │ │ ├── open_response_assessment.html │ │ │ ├── send_email.html │ │ │ ├── set_course_mode_price_modal.html │ │ │ ├── special_exams.html │ │ │ └── student_admin.html │ ├── invalid_email_key.html │ ├── learner_dashboard │ │ ├── _dashboard_navigation_courses.html │ │ ├── _dashboard_navigation_programs.html │ │ ├── certificate_icon.underscore │ │ ├── certificate_list.underscore │ │ ├── certificate_status.underscore │ │ ├── course_card.underscore │ │ ├── course_enroll.underscore │ │ ├── course_entitlement.underscore │ │ ├── empty_programs_list.underscore │ │ ├── expired_notification.underscore │ │ ├── explore_new_programs.underscore │ │ ├── program_alert_list_view.underscore │ │ ├── program_card.underscore │ │ ├── program_details.html │ │ ├── program_details_fragment.html │ │ ├── program_details_sidebar.underscore │ │ ├── program_details_tab_view.underscore │ │ ├── program_details_view.underscore │ │ ├── program_header_view.underscore │ │ ├── program_list_header_view.underscore │ │ ├── programs.html │ │ ├── programs_fragment.html │ │ ├── progress_circle_segment.underscore │ │ ├── progress_circle_view.underscore │ │ ├── sidebar.underscore │ │ ├── subscription_upsell_view.underscore │ │ ├── upgrade_message.underscore │ │ ├── upgrade_message_subscription.underscore │ │ └── verification_popover.underscore │ ├── library-block-author-preview-header.html │ ├── logout.html │ ├── lti.html │ ├── lti_form.html │ ├── main.html │ ├── main_django.html │ ├── manage_user_standing.html │ ├── modal │ │ └── _modal-settings-language.html │ ├── module-error.html │ ├── navigation │ │ ├── bootstrap │ │ │ ├── navbar-authenticated.html │ │ │ └── navbar-logo-header.html │ │ ├── navbar-authenticated.html │ │ ├── navbar-logo-header.html │ │ ├── navbar-not-authenticated.html │ │ └── navigation.html │ ├── oauth2_provider │ │ ├── README.rst │ │ └── authorize.html │ ├── page_banner.html │ ├── pdf_viewer.html │ ├── peer_grading │ │ ├── peer_grading.html │ │ ├── peer_grading_closed.html │ │ └── peer_grading_problem.html │ ├── poll.html │ ├── preview_menu.html │ ├── problem.html │ ├── problem_ajax.html │ ├── problem_notifications.html │ ├── provider_login.html │ ├── public_video.html │ ├── public_video_share_embed.html │ ├── registration │ │ ├── account_activation_sidebar_notice.html │ │ ├── password_reset_complete.html │ │ ├── password_reset_confirm.html │ │ └── password_reset_done.html │ ├── resubscribe.html │ ├── save_for_later │ │ └── edx_ace │ │ │ └── saveforlater │ │ │ └── email │ │ │ ├── body.html │ │ │ ├── body.txt │ │ │ ├── from_name.txt │ │ │ ├── head.html │ │ │ └── subject.txt │ ├── secondary_email_change_failed.html │ ├── secondary_email_change_successful.html │ ├── seq_block.html │ ├── signup_modal.html │ ├── split_test_author_view.html │ ├── split_test_staff_view.html │ ├── split_test_student_view.html │ ├── staff_problem_info.html │ ├── static_htmlbook.html │ ├── static_pdfbook.html │ ├── static_templates │ │ ├── 404.html │ │ ├── 429.html │ │ ├── about.html │ │ ├── blog.html │ │ ├── contact.html │ │ ├── donate.html │ │ ├── embargo.html │ │ ├── faq.html │ │ ├── help.html │ │ ├── honor.html │ │ ├── jobs.html │ │ ├── media-kit.html │ │ ├── news.html │ │ ├── press.html │ │ ├── privacy.html │ │ ├── server-down.html │ │ ├── server-error.html │ │ ├── server-overloaded.html │ │ ├── sitemap.xml │ │ └── tos.html │ ├── staticbook.html │ ├── student_account │ │ ├── access.underscore │ │ ├── account.underscore │ │ ├── account_settings.html │ │ ├── account_settings.underscore │ │ ├── account_settings_section.underscore │ │ ├── enterprise_sidebar.html │ │ ├── finish_auth.html │ │ ├── form_errors.underscore │ │ ├── form_field.underscore │ │ ├── form_status.underscore │ │ ├── form_success.underscore │ │ ├── hinted_login.underscore │ │ ├── institution_login.underscore │ │ ├── institution_register.underscore │ │ ├── login.underscore │ │ ├── login_and_register.html │ │ ├── password_reset.underscore │ │ └── register.underscore │ ├── studio_render_children_view.html │ ├── studio_render_paged_children_view.html │ ├── support │ │ ├── certificates.html │ │ ├── contact_us.html │ │ ├── enrollment.html │ │ ├── entitlement.html │ │ ├── feature_based_enrollments.html │ │ ├── index.html │ │ ├── link_program_enrollments.html │ │ ├── manage_user.html │ │ └── program_enrollments_inspector.html │ ├── survey │ │ └── survey.html │ ├── tab_module.html │ ├── tracking_log.html │ ├── unsubscribe.html │ ├── user_dropdown.html │ ├── using.html │ ├── ux │ │ └── reference │ │ │ ├── bootstrap │ │ │ ├── course-skeleton.html │ │ │ └── unit-page.html │ │ │ ├── fragments │ │ │ └── unit-fragment.html │ │ │ ├── index.html │ │ │ └── v1 │ │ │ ├── course-skeleton.html │ │ │ └── unit-page.html │ ├── verify_student │ │ ├── _verification_help.html │ │ ├── edx_ace │ │ │ ├── verificationapproved │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── verificationexpiry │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ └── verificationsubmitted │ │ │ │ └── email │ │ │ │ ├── body.html │ │ │ │ ├── body.txt │ │ │ │ ├── from_name.txt │ │ │ │ ├── head.html │ │ │ │ └── subject.txt │ │ ├── enrollment_confirmation_step.underscore │ │ ├── error.underscore │ │ ├── face_photo_step.underscore │ │ ├── id_photo_step.underscore │ │ ├── image_input.underscore │ │ ├── incourse_reverify.html │ │ ├── incourse_reverify.underscore │ │ ├── intro_step.underscore │ │ ├── make_payment_step.underscore │ │ ├── make_payment_step_ab_testing.underscore │ │ ├── missed_deadline.html │ │ ├── pay_and_verify.html │ │ ├── reverify.html │ │ ├── reverify_not_allowed.html │ │ ├── reverify_success_step.underscore │ │ ├── review_photos_step.underscore │ │ ├── test │ │ │ └── fake_softwaresecure_response.html │ │ └── webcam_photo.underscore │ ├── vert_module.html │ ├── video.html │ ├── video_modal.html │ ├── widgets │ │ ├── cookie-consent.html │ │ ├── footer-language-selector.html │ │ ├── html-edit.html │ │ ├── optimizely.html │ │ ├── segment-io-footer.html │ │ └── segment-io.html │ ├── wiki │ │ ├── article.html │ │ ├── base.html │ │ ├── create.html │ │ ├── delete.html │ │ ├── edit.html │ │ ├── history.html │ │ ├── includes │ │ │ ├── anonymous_blocked.html │ │ │ ├── article_menu.html │ │ │ ├── breadcrumbs.html │ │ │ ├── cheatsheet.html │ │ │ ├── editor.html │ │ │ ├── editor_widget.html │ │ │ └── form.html │ │ ├── plugins │ │ │ └── attachments │ │ │ │ └── index.html │ │ └── preview_inline.html │ ├── word_cloud.html │ └── xrds.xml ├── tests.py ├── urls.py ├── wsgi.py └── wsgi_apache_lms.py ├── manage.py ├── mypy.ini ├── openedx.yaml ├── openedx ├── README.rst ├── __init__.py ├── core │ ├── __init__.py │ ├── apidocs.py │ ├── constants.py │ ├── djangoapps │ │ ├── __init__.py │ │ ├── ace_common │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── message.py │ │ │ ├── settings │ │ │ │ ├── __init__.py │ │ │ │ ├── common.py │ │ │ │ ├── devstack.py │ │ │ │ └── production.py │ │ │ ├── template_context.py │ │ │ ├── templates │ │ │ │ └── ace_common │ │ │ │ │ └── edx_ace │ │ │ │ │ └── common │ │ │ │ │ ├── base_body.html │ │ │ │ │ ├── base_head.html │ │ │ │ │ ├── return_to_course_cta.html │ │ │ │ │ ├── upsell_cta.html │ │ │ │ │ └── upsell_cta.txt │ │ │ ├── templatetags │ │ │ │ ├── __init__.py │ │ │ │ └── ace.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_message.py │ │ │ │ ├── test_templatetags.py │ │ │ │ └── test_tracking.py │ │ │ └── tracking.py │ │ ├── agreements │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── readme.rst │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── api_admin │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api │ │ │ │ ├── __init__.py │ │ │ │ ├── filters.py │ │ │ │ ├── urls.py │ │ │ │ └── v1 │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── serializers.py │ │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_views.py │ │ │ │ │ ├── urls.py │ │ │ │ │ └── views.py │ │ │ ├── decorators.py │ │ │ ├── forms.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── create_api_access_request.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_create_api_access_request.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160325_1604.py │ │ │ │ ├── 0003_auto_20160404_1618.py │ │ │ │ ├── 0004_auto_20160412_1506.py │ │ │ │ ├── 0005_auto_20160414_1232.py │ │ │ │ ├── 0006_catalog.py │ │ │ │ ├── 0007_delete_historical_api_records.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ ├── urls.py │ │ │ ├── views.py │ │ │ └── widgets.py │ │ ├── auth_exchange │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_views.py │ │ │ │ └── utils.py │ │ │ └── views.py │ │ ├── bookmarks │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── api_impl.py │ │ │ ├── apps.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── serializers.py │ │ │ ├── services.py │ │ │ ├── settings │ │ │ │ ├── __init__.py │ │ │ │ ├── common.py │ │ │ │ └── production.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_services.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── cache_toolbox │ │ │ ├── COPYING │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── app_settings.py │ │ │ ├── core.py │ │ │ ├── middleware.py │ │ │ ├── model.py │ │ │ ├── templatetags │ │ │ │ ├── __init__.py │ │ │ │ └── cache_toolbox.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_middleware.py │ │ ├── catalog │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── cache.py │ │ │ ├── constants.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 001-programs-cache.rst │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── cache_programs.py │ │ │ │ │ ├── create_catalog_integrations.py │ │ │ │ │ ├── sync_course_runs.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_cache_programs.py │ │ │ │ │ ├── test_create_catalog_integrations.py │ │ │ │ │ └── test_sync_course_runs.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_catalogintegration_username.py │ │ │ │ ├── 0003_catalogintegration_page_size.py │ │ │ │ ├── 0004_auto_20170616_0618.py │ │ │ │ ├── 0005_catalogintegration_long_term_cache_ttl.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_utils.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── ccxcon │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial_ccxcon_model.py │ │ │ │ ├── 0002_auto_20160325_0407.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_signals.py │ │ │ │ └── test_tasks.py │ │ ├── commerce │ │ │ ├── __init__.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ └── __init__.py │ │ │ └── utils.py │ │ ├── common_initialization │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ └── checks.py │ │ ├── common_views │ │ │ ├── __init__.py │ │ │ └── xblock.py │ │ ├── config_model_utils │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── migrations │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── utils.py │ │ ├── content │ │ │ ├── __init__.py │ │ │ ├── block_structure │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── api.py │ │ │ │ ├── apps.py │ │ │ │ ├── block_structure.py │ │ │ │ ├── config │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── models.py │ │ │ │ ├── exceptions.py │ │ │ │ ├── factory.py │ │ │ │ ├── management │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── commands │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── generate_course_blocks.py │ │ │ │ │ │ └── tests │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ └── test_generate_course_blocks.py │ │ │ │ ├── manager.py │ │ │ │ ├── migrations │ │ │ │ │ ├── 0001_config.py │ │ │ │ │ ├── 0002_blockstructuremodel.py │ │ │ │ │ ├── 0003_blockstructuremodel_storage.py │ │ │ │ │ ├── 0004_blockstructuremodel_usagekeywithrun.py │ │ │ │ │ ├── 0005_trim_leading_slashes_in_data_path.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── signals.py │ │ │ │ ├── store.py │ │ │ │ ├── tasks.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── helpers.py │ │ │ │ │ ├── test_block_structure.py │ │ │ │ │ ├── test_factory.py │ │ │ │ │ ├── test_manager.py │ │ │ │ │ ├── test_models.py │ │ │ │ │ ├── test_signals.py │ │ │ │ │ ├── test_store.py │ │ │ │ │ ├── test_tasks.py │ │ │ │ │ ├── test_transformer_registry.py │ │ │ │ │ └── test_transformers.py │ │ │ │ ├── transformer.py │ │ │ │ ├── transformer_registry.py │ │ │ │ └── transformers.py │ │ │ ├── course_overviews │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── api.py │ │ │ │ ├── apps.py │ │ │ │ ├── management │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── commands │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── backfill_history.py │ │ │ │ │ │ ├── generate_course_overview.py │ │ │ │ │ │ ├── simulate_publish.py │ │ │ │ │ │ └── tests │ │ │ │ │ │ ├── __init__.py │ │ │ │ │ │ ├── test_generate_course_overview.py │ │ │ │ │ │ └── test_simulate_publish.py │ │ │ │ ├── migrations │ │ │ │ │ ├── 0001_initial.py │ │ │ │ │ ├── 0002_add_course_catalog_fields.py │ │ │ │ │ ├── 0003_courseoverviewgeneratedhistory.py │ │ │ │ │ ├── 0004_courseoverview_org.py │ │ │ │ │ ├── 0005_delete_courseoverviewgeneratedhistory.py │ │ │ │ │ ├── 0006_courseoverviewimageset.py │ │ │ │ │ ├── 0007_courseoverviewimageconfig.py │ │ │ │ │ ├── 0008_remove_courseoverview_facebook_url.py │ │ │ │ │ ├── 0009_readd_facebook_url.py │ │ │ │ │ ├── 0010_auto_20160329_2317.py │ │ │ │ │ ├── 0011_courseoverview_marketing_url.py │ │ │ │ │ ├── 0012_courseoverview_eligible_for_financial_aid.py │ │ │ │ │ ├── 0013_courseoverview_language.py │ │ │ │ │ ├── 0014_courseoverview_certificate_available_date.py │ │ │ │ │ ├── 0015_historicalcourseoverview.py │ │ │ │ │ ├── 0016_simulatecoursepublishconfig.py │ │ │ │ │ ├── 0017_auto_20191002_0823.py │ │ │ │ │ ├── 0018_add_start_end_in_CourseOverview.py │ │ │ │ │ ├── 0019_improve_courseoverviewtab.py │ │ │ │ │ ├── 0020_courseoverviewtab_url_slug.py │ │ │ │ │ ├── 0021_courseoverviewtab_link.py │ │ │ │ │ ├── 0022_courseoverviewtab_is_hidden.py │ │ │ │ │ ├── 0023_courseoverview_banner_image_url.py │ │ │ │ │ ├── 0024_overview_adds_has_highlights.py │ │ │ │ │ ├── 0025_auto_20210702_1602.py │ │ │ │ │ ├── 0026_courseoverview_entrance_exam.py │ │ │ │ │ ├── 0027_auto_20221102_1109.py │ │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── serializers.py │ │ │ │ ├── signals.py │ │ │ │ ├── tasks.py │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── factories.py │ │ │ │ │ ├── test_api.py │ │ │ │ │ ├── test_course_overviews.py │ │ │ │ │ ├── test_serializers.py │ │ │ │ │ ├── test_signals.py │ │ │ │ │ └── test_tasks.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-add-external-id-mapping.rst │ │ │ └── learning_sequences │ │ │ │ ├── README.rst │ │ │ │ ├── __init__.py │ │ │ │ ├── admin.py │ │ │ │ ├── api │ │ │ │ ├── __init__.py │ │ │ │ ├── outlines.py │ │ │ │ ├── permissions.py │ │ │ │ ├── processors │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── base.py │ │ │ │ │ ├── content_gating.py │ │ │ │ │ ├── enrollment.py │ │ │ │ │ ├── enrollment_track_partition_groups.py │ │ │ │ │ ├── milestones.py │ │ │ │ │ ├── schedule.py │ │ │ │ │ ├── special_exams.py │ │ │ │ │ └── visibility.py │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_data.py │ │ │ │ │ └── test_outlines.py │ │ │ │ ├── apps.py │ │ │ │ ├── data.py │ │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-extensions-to-inter-app-apis.rst │ │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_coursesectionsequence_inaccessible_after_due.py │ │ │ │ ├── 0003_create_course_context_for_course_specific_models.py │ │ │ │ ├── 0004_coursecontext_self_paced.py │ │ │ │ ├── 0005_coursecontext_days_early_for_beta.py │ │ │ │ ├── 0006_coursecontext_entrance_exam_id.py │ │ │ │ ├── 0007_coursesequenceexam.py │ │ │ │ ├── 0008_add_learning_context_title_index.py │ │ │ │ ├── 0009_contenterror_publishreport.py │ │ │ │ ├── 0010_add_publishreport_indexes.py │ │ │ │ ├── 0011_course_meta_names.py │ │ │ │ ├── 0012_add_user_partition_group.py │ │ │ │ ├── 0013_through_model_for_user_partition_groups_1.py │ │ │ │ ├── 0014_remove_user_partition_group_duplicates.py │ │ │ │ ├── 0015_add_user_partition_group_unique_constraint.py │ │ │ │ ├── 0016_through_model_for_user_partition_groups_2.py │ │ │ │ └── __init__.py │ │ │ │ ├── models.py │ │ │ │ ├── services.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── content_libraries │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── auth.py │ │ │ ├── constants.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ ├── 0001-index-libraries-in-elasticsearch.rst │ │ │ │ │ └── 0002-libraries-lti-provider.rst │ │ │ ├── libraries_index.py │ │ │ ├── library_bundle.py │ │ │ ├── library_context.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── content_libraries_import.py │ │ │ │ │ └── reindex_content_library.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_group_permissions.py │ │ │ │ ├── 0003_contentlibrary_type.py │ │ │ │ ├── 0004_contentlibrary_license.py │ │ │ │ ├── 0005_contentlibraryblockimporttask.py │ │ │ │ ├── 0005_ltigradedresource_ltiprofile.py │ │ │ │ ├── 0006_auto_20210615_1916.py │ │ │ │ ├── 0007_merge_20210818_0614.py │ │ │ │ ├── 0008_auto_20210818_2148.py │ │ │ │ ├── 0009_alter_contentlibrary_authorized_lti_configs.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── signal_handlers.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_auth.py │ │ │ │ ├── test_command_content_libraries_import.py │ │ │ │ ├── test_content_libraries.py │ │ │ │ ├── test_libraries_index.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_runtime.py │ │ │ │ ├── test_static_assets.py │ │ │ │ ├── test_views_lti.py │ │ │ │ └── user_state_block.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── content_staging │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── data.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── serializers.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_clipboard.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── contentserver │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── caching.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_cdnuseragentsconfig.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── test │ │ │ │ ├── __init__.py │ │ │ │ └── test_contentserver.py │ │ ├── cookie_metadata │ │ │ ├── __init__.py │ │ │ ├── middleware.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_cookie_name_change.py │ │ ├── cors_csrf │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── authentication.py │ │ │ ├── decorators.py │ │ │ ├── helpers.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── templates │ │ │ │ └── cors_csrf │ │ │ │ │ └── xdomain_proxy.html │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_authentication.py │ │ │ │ ├── test_decorators.py │ │ │ │ ├── test_middleware.py │ │ │ │ └── test_views.py │ │ │ └── views.py │ │ ├── course_apps │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 001-course-apps.rst │ │ │ ├── handlers.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── cache_course_app_status.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── plugins.py │ │ │ ├── rest_api │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── v1 │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── urls.py │ │ │ │ │ └── views.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_notes_app.py │ │ │ │ ├── test_proctoring_app.py │ │ │ │ ├── test_wiki_app.py │ │ │ │ └── utils.py │ │ │ └── toggles.py │ │ ├── course_date_signals │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── handlers.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests.py │ │ │ └── utils.py │ │ ├── course_groups │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── cohorts.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_change_inline_default_cohort_value.py │ │ │ │ ├── 0003_auto_20170609_1455.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── partition_scheme.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── signals │ │ │ │ ├── __init__.py │ │ │ │ └── signals.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── helpers.py │ │ │ │ ├── test_api_views.py │ │ │ │ ├── test_cohorts.py │ │ │ │ ├── test_events.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_partition_scheme.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── course_live │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ └── waffle.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 001-course-live.rst │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20220617_1822.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── permissions.py │ │ │ ├── plugins.py │ │ │ ├── providers.py │ │ │ ├── serializers.py │ │ │ ├── tab.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_tab.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── courseware_api │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-record-architecture-decisions.rst │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── pacts │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── api-courseware-contract.json │ │ │ │ │ ├── verify_pact.py │ │ │ │ │ └── views.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── crawlers │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20170419_0018.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_models.py │ │ ├── credentials │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ └── site_config.rst │ │ │ ├── helpers.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── clean_certificate_available_date.py │ │ │ │ │ ├── create_credentials_api_configuration.py │ │ │ │ │ ├── notify_credentials.py │ │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_create_credentials_api_configuration.py │ │ │ │ │ └── test_notify_credentials.py │ │ │ │ │ └── update_credentials_available_date.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160325_0631.py │ │ │ │ ├── 0003_auto_20170525_1109.py │ │ │ │ ├── 0004_notifycredentialsconfig.py │ │ │ │ ├── 0005_remove_existing_mgmt_cmd_args.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── settings │ │ │ │ ├── __init__.py │ │ │ │ ├── common.py │ │ │ │ ├── devstack.py │ │ │ │ ├── production.py │ │ │ │ └── test.py │ │ │ ├── signals.py │ │ │ ├── tasks │ │ │ │ ├── __init__.py │ │ │ │ └── v1 │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── credit │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api │ │ │ │ ├── __init__.py │ │ │ │ ├── eligibility.py │ │ │ │ └── provider.py │ │ │ ├── apps.py │ │ │ ├── email_utils.py │ │ │ ├── exceptions.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_creditconfig.py │ │ │ │ ├── 0003_auto_20160511_2227.py │ │ │ │ ├── 0004_delete_historical_credit_records.py │ │ │ │ ├── 0005_creditrequirement_sort_value.py │ │ │ │ ├── 0006_creditrequirement_alter_ordering.py │ │ │ │ ├── 0007_creditrequirement_copy_values.py │ │ │ │ ├── 0008_creditrequirement_remove_order.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── routers.py │ │ │ ├── serializers.py │ │ │ ├── services.py │ │ │ ├── signals.py │ │ │ ├── signature.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_serializers.py │ │ │ │ ├── test_services.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_signature.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── dark_lang │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_data__enable_on_install.py │ │ │ │ ├── 0003_auto_20180425_0359.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── templates │ │ │ │ └── dark_lang │ │ │ │ │ └── preview-language-fragment.html │ │ │ ├── tests.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── debug │ │ │ ├── __init__.py │ │ │ └── views.py │ │ ├── demographics │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api │ │ │ │ ├── __init__.py │ │ │ │ └── status.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-demographics-djangoapp-api.rst │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_clean_duplicate_entries.py │ │ │ │ ├── 0003_auto_20200827_1949.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── rest_api │ │ │ │ ├── __init__.py │ │ │ │ ├── urls.py │ │ │ │ └── v1 │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── urls.py │ │ │ │ │ └── views.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ └── test_status.py │ │ ├── discussions │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ ├── waffle.py │ │ │ │ └── waffle_utils.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ ├── 0001-discussion-configuration-api.rst │ │ │ │ │ ├── 0002-organization-wide-provider-filtering.rst │ │ │ │ │ ├── 0003-configuration-rest-api.rst │ │ │ │ │ ├── 0004-in-context-discussions-linking.rst │ │ │ │ │ ├── 0005-in-context-discussion-course-blocks.rst │ │ │ │ │ ├── 0006-discussions-api-fetch-inactive-providers.rst │ │ │ │ │ ├── 0007-topic-context-for-deletion.rst │ │ │ │ │ └── 0008-reported-content-email-notifications.rst │ │ │ ├── handlers.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_add_provider_filter.py │ │ │ │ ├── 0003_alter_provider_filter_list.py │ │ │ │ ├── 0004_historicalprogramdiscussionsconfiguration_programdiscussionsconfiguration.py │ │ │ │ ├── 0005_auto_20210910_0940.py │ │ │ │ ├── 0006_auto_20211006_0441.py │ │ │ │ ├── 0007_add_discussion_topic_link.py │ │ │ │ ├── 0008_auto_20220119_0746.py │ │ │ │ ├── 0009_discussiontopiclink_ordering.py │ │ │ │ ├── 0010_auto_20220203_2134.py │ │ │ │ ├── 0011_auto_20220510_0716.py │ │ │ │ ├── 0012_auto_20220511_0827.py │ │ │ │ ├── 0013_auto_20220802_1154.py │ │ │ │ ├── 0014_auto_20220826_1107.py │ │ │ │ ├── 0015_discussiontopiclink_context.py │ │ │ │ ├── 0016_auto_20230518_0935.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── permissions.py │ │ │ ├── plugins.py │ │ │ ├── serializers.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_handlers.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_transformer.py │ │ │ │ └── test_views.py │ │ │ ├── transformers.py │ │ │ ├── url_helpers.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── django_comment_common │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── comment_client │ │ │ │ ├── README.rst │ │ │ │ ├── __init__.py │ │ │ │ ├── comment.py │ │ │ │ ├── comment_client.py │ │ │ │ ├── commentable.py │ │ │ │ ├── course.py │ │ │ │ ├── models.py │ │ │ │ ├── requirements.txt │ │ │ │ ├── settings.py │ │ │ │ ├── thread.py │ │ │ │ ├── user.py │ │ │ │ └── utils.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_forumsconfig.py │ │ │ │ ├── 0003_enable_forums.py │ │ │ │ ├── 0004_auto_20161117_1209.py │ │ │ │ ├── 0005_coursediscussionsettings.py │ │ │ │ ├── 0006_coursediscussionsettings_discussions_id_map.py │ │ │ │ ├── 0007_discussionsidmapping.py │ │ │ │ ├── 0008_role_user_index.py │ │ │ │ ├── 0009_coursediscussionsettings_reported_content_email_notifications.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ ├── tests.py │ │ │ └── utils.py │ │ ├── embargo │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── exceptions.py │ │ │ ├── fixtures │ │ │ │ ├── __init__.py │ │ │ │ └── country_codes.py │ │ │ ├── forms.py │ │ │ ├── messages.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_data__add_countries.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── test_utils.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_forms.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── enrollments │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── data.py │ │ │ ├── errors.py │ │ │ ├── forms.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ ├── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── enroll_user_in_course.py │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_enroll_user_in_course.py │ │ │ ├── paginators.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── services.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── fake_data_api.py │ │ │ │ ├── fixtures │ │ │ │ │ └── course-enrollments-api-list-valid-data.json │ │ │ │ ├── test_api.py │ │ │ │ ├── test_data.py │ │ │ │ ├── test_services.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── external_user_ids │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-externalid.rst │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_mb_coaching_20200210_1754.py │ │ │ │ ├── 0003_auto_20200224_1836.py │ │ │ │ ├── 0004_add_lti_type.py │ │ │ │ ├── 0005_add_caliper_and_xapi_lti_types.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_admin_generate_id.py │ │ │ │ ├── test_batch_generate_id.py │ │ │ │ └── test_signals.py │ │ ├── geoinfo │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── middleware.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_middleware.py │ │ ├── header_control │ │ │ ├── __init__.py │ │ │ ├── decorators.py │ │ │ ├── middleware.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_decorators.py │ │ │ │ └── test_middleware.py │ │ ├── heartbeat │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── default_checks.py │ │ │ ├── runchecks.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_heartbeat.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── lang_pref │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── helpers.py │ │ │ ├── middleware.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_middleware.py │ │ │ │ └── test_views.py │ │ │ └── views.py │ │ ├── learner_pathway │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── migrations │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ └── __init__.py │ │ │ └── views.py │ │ ├── models │ │ │ ├── __init__.py │ │ │ ├── course_details.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_course_details.py │ │ ├── monkey_patch │ │ │ ├── __init__.py │ │ │ └── tests │ │ │ │ └── __init__.py │ │ ├── notifications │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ └── waffle.py │ │ │ ├── handlers.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_notificationpreference.py │ │ │ │ ├── 0003_alter_notification_app_name.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── serializers.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── oauth_dispatch │ │ │ ├── __init__.py │ │ │ ├── adapters │ │ │ │ ├── __init__.py │ │ │ │ └── dot.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ ├── README.rst │ │ │ │ ├── decisions │ │ │ │ │ ├── 0001-record-architecture-decisions.rst │ │ │ │ │ ├── 0002-migrate-to-dot.rst │ │ │ │ │ ├── 0003-use-jwt-as-oauth-tokens-remove-openid-connect.rst │ │ │ │ │ ├── 0004-oauth-dispatch-as-router.rst │ │ │ │ │ ├── 0005-restricted-application-for-SSO.rst │ │ │ │ │ ├── 0006-enforce-scopes-in-LMS-APIs.rst │ │ │ │ │ ├── 0007-include-organizations-in-tokens.rst │ │ │ │ │ ├── 0008-use-asymmetric-jwts.rst │ │ │ │ │ ├── 0009-jwt-in-session-cookie.rst │ │ │ │ │ ├── 0010-csrf-protection.rst │ │ │ │ │ ├── 0011-scope-filter-support.rst │ │ │ │ │ ├── 0012-scope-and-filter-for-third-party-auth.rst │ │ │ │ │ ├── 0013-mobile-migration-to-jwt.rst │ │ │ │ │ └── 0014-add-grant-type-in-jwt-payload.rst │ │ │ │ ├── how_tos │ │ │ │ │ └── testing_manually.rst │ │ │ │ └── images │ │ │ │ │ ├── oauth_playground_config.png │ │ │ │ │ ├── oauth_playground_request_uri.png │ │ │ │ │ ├── oauth_playground_scopes.png │ │ │ │ │ ├── oauth_playground_step2.png │ │ │ │ │ └── oauth_playground_tokens.png │ │ │ ├── dot_overrides │ │ │ │ ├── __init__.py │ │ │ │ ├── validators.py │ │ │ │ └── views.py │ │ │ ├── jwt.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── create_dot_application.py │ │ │ │ │ ├── edx_clear_expired_tokens.py │ │ │ │ │ ├── generate_jwt_signing_key.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_clear_expired_tokens.py │ │ │ │ │ ├── test_create_dot_application.py │ │ │ │ │ └── test_generate_jwt_signing_key.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_scopedapplication_scopedapplicationorganization.py │ │ │ │ ├── 0003_application_data.py │ │ │ │ ├── 0004_auto_20180626_1349.py │ │ │ │ ├── 0005_applicationaccess_type.py │ │ │ │ ├── 0006_drop_application_id_constraints.py │ │ │ │ ├── 0007_restore_application_id_constraints.py │ │ │ │ ├── 0008_applicationaccess_filters.py │ │ │ │ ├── 0009_delete_enable_scopes_waffle_switch.py │ │ │ │ ├── 0010_noop_migration_to_test_rollback.py │ │ │ │ ├── 0011_noop_migration_to_test_rollback.py │ │ │ │ ├── 0012_noop_migration_to_test_rollback.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── scopes.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── factories.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_api.py │ │ │ │ ├── test_client_credentials.py │ │ │ │ ├── test_dot_adapter.py │ │ │ │ ├── test_dot_overrides.py │ │ │ │ ├── test_factories.py │ │ │ │ ├── test_jwt.py │ │ │ │ ├── test_scopes.py │ │ │ │ └── test_views.py │ │ │ ├── toggles.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── olx_rest_api │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── password_policy │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── compliance.py │ │ │ ├── forms.py │ │ │ ├── hibp.py │ │ │ ├── settings │ │ │ │ ├── __init__.py │ │ │ │ ├── common.py │ │ │ │ ├── devstack.py │ │ │ │ └── production.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_apps.py │ │ │ │ ├── test_compliance.py │ │ │ │ ├── test_forms.py │ │ │ │ └── test_hibp.py │ │ ├── plugin_api │ │ │ ├── __init__.py │ │ │ └── views.py │ │ ├── plugins │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── constants.py │ │ │ └── docs │ │ │ │ └── decisions │ │ │ │ ├── 0001-purpose-of-app.rst │ │ │ │ └── 0002-extract-plugins-infrastructure.rst │ │ ├── profile_images │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── images.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── helpers.py │ │ │ │ ├── test_images.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── programs │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ └── 0001-sync-certificate-available-dates.rst │ │ │ ├── forms.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ └── __init__.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_programsapiconfig_cache_ttl.py │ │ │ │ ├── 0003_auto_20151120_1613.py │ │ │ │ ├── 0004_programsapiconfig_enable_certification.py │ │ │ │ ├── 0005_programsapiconfig_max_retries.py │ │ │ │ ├── 0006_programsapiconfig_xseries_ad_enabled.py │ │ │ │ ├── 0007_programsapiconfig_program_listing_enabled.py │ │ │ │ ├── 0008_programsapiconfig_program_details_enabled.py │ │ │ │ ├── 0009_programsapiconfig_marketing_path.py │ │ │ │ ├── 0010_auto_20170204_2332.py │ │ │ │ ├── 0011_auto_20170301_1844.py │ │ │ │ ├── 0012_auto_20170419_0018.py │ │ │ │ ├── 0013_customprogramsconfig.py │ │ │ │ ├── 0014_delete_customprogramsconfig.py │ │ │ │ ├── 0015_historicalprogramdiscussionsconfiguration_historicalprogramliveconfiguration_programdiscussionsconfi.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── safe_sessions │ │ │ ├── __init__.py │ │ │ ├── middleware.py │ │ │ ├── testing.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_safe_cookie_data.py │ │ │ │ └── test_utils.py │ │ ├── schedules │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── config.py │ │ │ ├── content_highlights.py │ │ │ ├── docs │ │ │ │ ├── README.rst │ │ │ │ └── images │ │ │ │ │ └── system_diagram.png │ │ │ ├── exceptions.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── schedules_data_migration.py │ │ │ │ │ ├── send_course_next_section_update.py │ │ │ │ │ ├── send_course_update.py │ │ │ │ │ ├── send_recurring_nudge.py │ │ │ │ │ ├── send_upgrade_reminder.py │ │ │ │ │ ├── setup_models_to_send_test_emails.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── send_email_base.py │ │ │ │ │ ├── test_send_course_update.py │ │ │ │ │ ├── test_send_email_base_command.py │ │ │ │ │ ├── test_send_recurring_nudge.py │ │ │ │ │ ├── test_send_upgrade_reminder.py │ │ │ │ │ └── upsell_base.py │ │ │ ├── message_types.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20170816_1532.py │ │ │ │ ├── 0003_scheduleconfig.py │ │ │ │ ├── 0004_auto_20170922_1428.py │ │ │ │ ├── 0005_auto_20171010_1722.py │ │ │ │ ├── 0006_scheduleexperience.py │ │ │ │ ├── 0007_scheduleconfig_hold_back_ratio.py │ │ │ │ ├── 0008_add_new_start_date_field.py │ │ │ │ ├── 0009_schedule_copy_column_values.py │ │ │ │ ├── 0010_remove_null_blank_from_schedules_date.py │ │ │ │ ├── 0011_auto_20200228_2018.py │ │ │ │ ├── 0012_auto_20200302_1914.py │ │ │ │ ├── 0013_historicalschedule.py │ │ │ │ ├── 0014_historicalschedule_drop_fk.py │ │ │ │ ├── 0015_schedules_start_nullable.py │ │ │ │ ├── 0016_remove_start_from_schedules.py │ │ │ │ ├── 0017_remove_start_from_historicalschedule.py │ │ │ │ ├── 0018_readd_historicalschedule_fks.py │ │ │ │ ├── 0019_auto_20200316_1935.py │ │ │ │ ├── 0020_remove_config_rollout_fields.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── resolvers.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── templates │ │ │ │ ├── dropdown_filter.html │ │ │ │ └── schedules │ │ │ │ │ └── edx_ace │ │ │ │ │ ├── courseupdate │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ │ ├── instructorledcourseupdate │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ │ ├── recurringnudge_day10 │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ │ ├── recurringnudge_day3 │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ │ └── upgradereminder │ │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_config.py │ │ │ │ ├── test_content_highlights.py │ │ │ │ ├── test_resolvers.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── service_status │ │ │ ├── __init__.py │ │ │ ├── tasks.py │ │ │ ├── test.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── session_inactivity_timeout │ │ │ ├── __init__.py │ │ │ └── middleware.py │ │ ├── signals │ │ │ ├── __init__.py │ │ │ └── signals.py │ │ ├── site_configuration │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── context_processors.py │ │ │ ├── helpers.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── create_or_update_site_configuration.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── fixtures │ │ │ │ │ └── config1.json │ │ │ │ │ └── test_create_or_update_site_configuration.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160720_0231.py │ │ │ │ ├── 0003_auto_20200217_1058.py │ │ │ │ ├── 0004_add_site_values_field.py │ │ │ │ ├── 0005_populate_siteconfig_history_site_values.py │ │ │ │ ├── 0006_copy_values_to_site_values.py │ │ │ │ ├── 0007_remove_values_field.py │ │ │ │ ├── 0008_auto_20210910_0940.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── templatetags │ │ │ │ ├── __init__.py │ │ │ │ └── configuration.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_context_processors.py │ │ │ │ ├── test_helpers.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_util.py │ │ ├── staticfiles │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ └── docs │ │ │ │ └── decisions │ │ │ │ └── 0001-purpose-of-app.rst │ │ ├── system_wide_roles │ │ │ ├── __init__.py │ │ │ ├── admin │ │ │ │ ├── __init__.py │ │ │ │ └── forms.py │ │ │ ├── constants.py │ │ │ ├── migrations │ │ │ │ ├── 0001_SystemWideRole_SystemWideRoleAssignment.py │ │ │ │ ├── 0002_add_system_wide_student_support_role.py │ │ │ │ ├── 0003_systemwideroleassignment_applies_to_all_contexts.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_models.py │ │ ├── theming │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── checks.py │ │ │ ├── finders.py │ │ │ ├── helpers.py │ │ │ ├── helpers_dirs.py │ │ │ ├── helpers_static.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── compile_sass.py │ │ │ │ │ ├── create_sites_and_configurations.py │ │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_create_sites_and_configurations.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── paver_helpers.py │ │ │ ├── storage.py │ │ │ ├── template_loaders.py │ │ │ ├── templates │ │ │ │ └── theming │ │ │ │ │ └── theming-admin-fragment.html │ │ │ ├── templatetags │ │ │ │ ├── __init__.py │ │ │ │ ├── optional_include.py │ │ │ │ └── theme_pipeline.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_commands.py │ │ │ │ ├── test_finders.py │ │ │ │ ├── test_helpers.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_storage.py │ │ │ │ ├── test_theme_locales.py │ │ │ │ ├── test_theme_style_overrides.py │ │ │ │ ├── test_util.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── user_api │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── accounts │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── forms.py │ │ │ │ ├── image_helpers.py │ │ │ │ ├── permissions.py │ │ │ │ ├── serializers.py │ │ │ │ ├── settings_views.py │ │ │ │ ├── signals.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── factories.py │ │ │ │ │ ├── retirement_helpers.py │ │ │ │ │ ├── test_api.py │ │ │ │ │ ├── test_filters.py │ │ │ │ │ ├── test_image_helpers.py │ │ │ │ │ ├── test_models.py │ │ │ │ │ ├── test_permissions.py │ │ │ │ │ ├── test_retirement_views.py │ │ │ │ │ ├── test_serializers.py │ │ │ │ │ ├── test_settings_views.py │ │ │ │ │ ├── test_utils.py │ │ │ │ │ ├── test_views.py │ │ │ │ │ └── testutils.py │ │ │ │ ├── toggles.py │ │ │ │ ├── utils.py │ │ │ │ └── views.py │ │ │ ├── admin.py │ │ │ ├── course_tag │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_api.py │ │ │ ├── errors.py │ │ │ ├── helpers.py │ │ │ ├── learner_skill_levels │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── constants.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_utils.py │ │ │ │ │ ├── test_views.py │ │ │ │ │ └── testutils.py │ │ │ │ ├── utils.py │ │ │ │ └── views.py │ │ │ ├── legacy_urls.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ ├── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── bulk_user_org_email_optout.py │ │ │ │ │ ├── cancel_user_retirement_request.py │ │ │ │ │ ├── create_user_gdpr_testing.py │ │ │ │ │ ├── email_opt_in_list.py │ │ │ │ │ ├── migrate_user_profile_langs.py │ │ │ │ │ ├── populate_retirement_states.py │ │ │ │ │ ├── retire_user.py │ │ │ │ │ └── sync_hubspot_contacts.py │ │ │ │ └── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_bulk_user_org_email_optout.py │ │ │ │ │ ├── test_cancel_retirement.py │ │ │ │ │ ├── test_email_opt_in_list.py │ │ │ │ │ ├── test_populate_retirement_states.py │ │ │ │ │ ├── test_retire_user.py │ │ │ │ │ └── test_sync_hubspot_contacts.py │ │ │ ├── message_types.py │ │ │ ├── middleware.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_retirementstate_userretirementstatus.py │ │ │ │ ├── 0003_userretirementrequest.py │ │ │ │ ├── 0004_userretirementpartnerreportingstatus.py │ │ │ │ ├── 0005_bulkuserretirementconfig.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── partition_schemes.py │ │ │ ├── permissions.py │ │ │ ├── preferences │ │ │ │ ├── __init__.py │ │ │ │ ├── api.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_api.py │ │ │ │ │ └── test_views.py │ │ │ │ └── views.py │ │ │ ├── rules.py │ │ │ ├── serializers.py │ │ │ ├── templates │ │ │ │ └── user_api │ │ │ │ │ └── edx_ace │ │ │ │ │ └── deletionnotificationmessage │ │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── factories.py │ │ │ │ ├── test_constants.py │ │ │ │ ├── test_helpers.py │ │ │ │ ├── test_middleware.py │ │ │ │ ├── test_models.py │ │ │ │ ├── test_partition_schemes.py │ │ │ │ └── test_views.py │ │ │ ├── urls.py │ │ │ ├── verification_api │ │ │ │ ├── __init__.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_views.py │ │ │ │ └── views.py │ │ │ └── views.py │ │ ├── user_authn │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── api │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── form_fields.py │ │ │ │ ├── helper.py │ │ │ │ ├── tests │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_data.py │ │ │ │ │ ├── test_serializers.py │ │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── apps.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ └── waffle.py │ │ │ ├── cookies.py │ │ │ ├── exceptions.py │ │ │ ├── message_types.py │ │ │ ├── migrations │ │ │ │ ├── 0001_data__add_login_service.py │ │ │ │ └── __init__.py │ │ │ ├── serializers.py │ │ │ ├── signals.py │ │ │ ├── tasks.py │ │ │ ├── templates │ │ │ │ └── user_authn │ │ │ │ │ └── edx_ace │ │ │ │ │ ├── passwordreset │ │ │ │ │ └── email │ │ │ │ │ │ ├── body.html │ │ │ │ │ │ ├── body.txt │ │ │ │ │ │ ├── from_name.txt │ │ │ │ │ │ ├── head.html │ │ │ │ │ │ └── subject.txt │ │ │ │ │ └── passwordresetsuccess │ │ │ │ │ └── email │ │ │ │ │ ├── body.html │ │ │ │ │ ├── body.txt │ │ │ │ │ ├── from_name.txt │ │ │ │ │ ├── head.html │ │ │ │ │ └── subject.txt │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_cookies.py │ │ │ │ ├── test_exceptions.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_tasks.py │ │ │ │ ├── test_utils.py │ │ │ │ └── utils.py │ │ │ ├── toggles.py │ │ │ ├── urls.py │ │ │ ├── urls_common.py │ │ │ ├── utils.py │ │ │ └── views │ │ │ │ ├── __init__.py │ │ │ │ ├── auto_auth.py │ │ │ │ ├── login.py │ │ │ │ ├── login_form.py │ │ │ │ ├── logout.py │ │ │ │ ├── password_reset.py │ │ │ │ ├── register.py │ │ │ │ ├── registration_form.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_auto_auth.py │ │ │ │ ├── test_events.py │ │ │ │ ├── test_filters.py │ │ │ │ ├── test_login.py │ │ │ │ ├── test_logistration.py │ │ │ │ ├── test_logout.py │ │ │ │ ├── test_password.py │ │ │ │ ├── test_register.py │ │ │ │ └── test_reset_password.py │ │ │ │ └── utils.py │ │ ├── util │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── forms.py │ │ │ ├── legacy_ip.py │ │ │ ├── maintenance_banner.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── print_setting.py │ │ │ │ │ ├── reset_db.py │ │ │ │ │ └── update_fixtures.py │ │ │ ├── model_utils.py │ │ │ ├── ratelimit.py │ │ │ ├── row_delete.py │ │ │ ├── signals.py │ │ │ ├── test_forms.py │ │ │ ├── testing.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_legacy_ip.py │ │ │ │ ├── test_maintenance_banner.py │ │ │ │ ├── test_print_setting.py │ │ │ │ ├── test_ratelimit.py │ │ │ │ ├── test_signals.py │ │ │ │ ├── test_update_fixtures.py │ │ │ │ ├── test_user_messages.py │ │ │ │ └── test_user_utils.py │ │ │ ├── user_messages.py │ │ │ ├── user_utils.py │ │ │ └── waffle.py │ │ ├── verified_track_content │ │ │ ├── __init__.py │ │ │ ├── partition_scheme.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_partition_scheme.py │ │ ├── video_config │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── forms.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_coursevideotranscriptenabledflag_videotranscriptenabledflag.py │ │ │ │ ├── 0003_transcriptmigrationsetting.py │ │ │ │ ├── 0004_transcriptmigrationsetting_command_run.py │ │ │ │ ├── 0005_auto_20180719_0752.py │ │ │ │ ├── 0006_videothumbnailetting_updatedcoursevideos.py │ │ │ │ ├── 0007_videothumbnailsetting_offset.py │ │ │ │ ├── 0008_courseyoutubeblockedflag.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_models.py │ │ │ └── toggles.py │ │ ├── video_pipeline │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── api.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ └── waffle.py │ │ │ ├── forms.py │ │ │ ├── management │ │ │ │ ├── __init__.py │ │ │ │ └── commands │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── tests │ │ │ │ │ └── __init__.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20171114_0704.py │ │ │ │ ├── 0003_coursevideouploadsenabledbydefault_videouploadsenabledbydefault.py │ │ │ │ ├── 0004_vempipelineintegration.py │ │ │ │ ├── 0005_add_vem_course_percentage.py │ │ │ │ ├── 0006_remove_vempipelineintegration_vem_enabled_courses_percentage.py │ │ │ │ ├── 0007_delete_videopipelineintegration.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_api.py │ │ │ │ └── test_models.py │ │ │ └── utils.py │ │ ├── waffle_utils │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── docs │ │ │ │ └── decisions │ │ │ │ │ ├── 0001-refactor-waffle-flag-default.rst │ │ │ │ │ ├── 0002-waffle-utils-extraction.rst │ │ │ │ │ ├── 0003-leave-course-waffle-flag.rst │ │ │ │ │ └── 0004-waffle-util-namespacing.rst │ │ │ ├── forms.py │ │ │ ├── migrations │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_waffleflagcourseoverridemodel_note.py │ │ │ │ ├── 0003_add_org_level_waffle_override.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── test_init.py │ │ │ │ ├── test_models.py │ │ │ │ └── test_views.py │ │ │ ├── testutils.py │ │ │ ├── urls.py │ │ │ └── views.py │ │ ├── xblock │ │ │ ├── README.rst │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── apps.py │ │ │ ├── learning_context │ │ │ │ ├── __init__.py │ │ │ │ ├── learning_context.py │ │ │ │ └── manager.py │ │ │ ├── rest_api │ │ │ │ ├── __init__.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ │ ├── runtime │ │ │ │ ├── __init__.py │ │ │ │ ├── blockstore_field_data.py │ │ │ │ ├── blockstore_runtime.py │ │ │ │ ├── ephemeral_field_data.py │ │ │ │ ├── id_managers.py │ │ │ │ ├── mixin.py │ │ │ │ ├── olx_parsing.py │ │ │ │ ├── runtime.py │ │ │ │ ├── serializer.py │ │ │ │ └── shims.py │ │ │ ├── tests │ │ │ │ ├── README.rst │ │ │ │ ├── __init__.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── xmodule_django │ │ │ ├── __init__.py │ │ │ └── models.py │ │ └── zendesk_proxy │ │ │ ├── README.md │ │ │ ├── __init__.py │ │ │ ├── apps.py │ │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ └── production.py │ │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_utils.py │ │ │ ├── test_v0_views.py │ │ │ └── test_v1_views.py │ │ │ ├── urls.py │ │ │ ├── utils.py │ │ │ ├── v0 │ │ │ ├── __init__.py │ │ │ └── views.py │ │ │ └── v1 │ │ │ ├── __init__.py │ │ │ └── views.py │ ├── djangolib │ │ ├── __init__.py │ │ ├── blockstore_cache.py │ │ ├── fields.py │ │ ├── js_utils.py │ │ ├── markup.py │ │ ├── model_mixins.py │ │ ├── oauth2_retirement_utils.py │ │ ├── testing │ │ │ ├── __init__.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_blockstore_cache.py │ │ │ ├── test_js_utils.py │ │ │ ├── test_markup.py │ │ │ ├── test_oauth2_retirement_utils.py │ │ │ └── test_translation_utils.py │ │ └── translation_utils.py │ ├── lib │ │ ├── .coveragerc │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ ├── authentication.py │ │ │ ├── fields.py │ │ │ ├── mixins.py │ │ │ ├── parsers.py │ │ │ ├── permissions.py │ │ │ ├── serializers.py │ │ │ ├── test_utils.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── mixins.py │ │ │ │ ├── test_authentication.py │ │ │ │ ├── test_exceptions.py │ │ │ │ ├── test_fields.py │ │ │ │ ├── test_parsers.py │ │ │ │ ├── test_permissions.py │ │ │ │ └── test_view_utils.py │ │ │ └── view_utils.py │ │ ├── blockstore_api │ │ │ ├── __init__.py │ │ │ ├── config │ │ │ │ ├── __init__.py │ │ │ │ └── waffle.py │ │ │ ├── db_routers.py │ │ │ ├── methods.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ ├── base.py │ │ │ │ └── test_blockstore_api.py │ │ ├── cache_utils.py │ │ ├── celery │ │ │ ├── __init__.py │ │ │ ├── routers.py │ │ │ └── task_utils.py │ │ ├── command_utils.py │ │ ├── course_tabs.py │ │ ├── courses.py │ │ ├── derived.py │ │ ├── django_courseware_routers.py │ │ ├── django_require │ │ │ ├── __init__.py │ │ │ └── staticstorage.py │ │ ├── django_test_client_utils.py │ │ ├── docs │ │ │ ├── decisions │ │ │ │ └── 0001-logging-and-monitoring-ignored-errors.rst │ │ │ └── how_tos │ │ │ │ └── logging-and-monitoring-expected-errors.rst │ │ ├── dynamic_partitions_generators.py │ │ ├── edx_api_utils.py │ │ ├── edx_six.py │ │ ├── exceptions.py │ │ ├── extract_tar.py │ │ ├── gating │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── exceptions.py │ │ │ ├── services.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_api.py │ │ ├── grade_utils.py │ │ ├── graph_traversals.py │ │ ├── hash_utils.py │ │ ├── html_to_text.py │ │ ├── json_utils.py │ │ ├── license │ │ │ ├── __init__.py │ │ │ ├── mixin.py │ │ │ ├── templates │ │ │ │ ├── license.html │ │ │ │ └── license_wrapper.html │ │ │ └── wrapper.py │ │ ├── log_utils.py │ │ ├── logsettings.py │ │ ├── mail_utils.py │ │ ├── mobile_utils.py │ │ ├── request_utils.py │ │ ├── rooted_paths.py │ │ ├── safe_lxml │ │ │ ├── __init__.py │ │ │ ├── conftest.py │ │ │ ├── etree.py │ │ │ └── tests.py │ │ ├── session_serializers.py │ │ ├── teams_config.py │ │ ├── tempdir.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── assertions │ │ │ │ ├── __init__.py │ │ │ │ └── events.py │ │ │ ├── test_cache_utils.py │ │ │ ├── test_command_utils.py │ │ │ ├── test_course_tab_api.py │ │ │ ├── test_course_tabs.py │ │ │ ├── test_courses.py │ │ │ ├── test_derived.py │ │ │ ├── test_edx_api_utils.py │ │ │ ├── test_grade_utils.py │ │ │ ├── test_graph_traversals.py │ │ │ ├── test_hash_utils.py │ │ │ ├── test_request_utils.py │ │ │ ├── test_teams_config.py │ │ │ ├── test_time_zone_utils.py │ │ │ ├── test_url_utils.py │ │ │ └── test_xblock_utils.py │ │ ├── time_zone_utils.py │ │ ├── url_utils.py │ │ ├── x_forwarded_for │ │ │ ├── __init__.py │ │ │ ├── middleware.py │ │ │ └── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_middleware.py │ │ ├── xblock_pipeline │ │ │ ├── __init__.py │ │ │ └── finder.py │ │ ├── xblock_serializer │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── block_serializer.py │ │ │ ├── test_api.py │ │ │ ├── test_utils.py │ │ │ └── utils.py │ │ ├── xblock_services │ │ │ ├── __init__.py │ │ │ └── call_to_action.py │ │ └── xblock_utils │ │ │ └── __init__.py │ ├── process_warnings.py │ ├── pytest_hooks.py │ ├── release.py │ ├── storage.py │ ├── tests │ │ ├── __init__.py │ │ └── test_admin_view.py │ ├── toggles.py │ ├── types │ │ ├── __init__.py │ │ └── user.py │ └── write_to_html.py ├── features │ ├── README.rst │ ├── __init__.py │ ├── announcements │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── forms.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── settings │ │ │ ├── __init__.py │ │ │ ├── common.py │ │ │ └── test.py │ │ ├── static │ │ │ └── announcements │ │ │ │ └── jsx │ │ │ │ ├── Announcements.jsx │ │ │ │ ├── Announcements.test.jsx │ │ │ │ ├── __snapshots__ │ │ │ │ └── Announcements.test.jsx.snap │ │ │ │ └── test-announcements.json │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_announcements.py │ │ ├── urls.py │ │ └── views.py │ ├── calendar_sync │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-calendar-sync-emails-using-ses.rst │ │ ├── ics.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20200709_1743.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── plugins.py │ │ ├── signals.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── test_api.py │ │ │ ├── test_ics.py │ │ │ ├── test_init.py │ │ │ ├── test_models.py │ │ │ ├── test_plugins.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views │ │ │ ├── __init__.py │ │ │ └── calendar_sync.py │ ├── content_type_gating │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── block_transformers.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ ├── 0001-group-access-overrides.rst │ │ │ │ └── 0002-no-new-track.rst │ │ ├── field_override.py │ │ ├── helpers.py │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20181119_0959.py │ │ │ ├── 0003_auto_20181128_1407.py │ │ │ ├── 0004_auto_20181128_1521.py │ │ │ ├── 0005_auto_20190306_1547.py │ │ │ ├── 0006_auto_20190308_1447.py │ │ │ ├── 0007_auto_20190311_1919.py │ │ │ ├── 0008_auto_20190313_1634.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── partitions.py │ │ ├── services.py │ │ ├── templates │ │ │ └── content_type_gating │ │ │ │ └── access_denied_message.html │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_access.py │ │ │ ├── test_models.py │ │ │ └── test_partitions.py │ ├── course_bookmarks │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── plugins.py │ │ ├── static │ │ │ └── course_bookmarks │ │ │ │ ├── fixtures │ │ │ │ ├── bookmark_button.html │ │ │ │ └── bookmarks.html │ │ │ │ ├── js │ │ │ │ ├── collections │ │ │ │ │ └── bookmarks.js │ │ │ │ ├── course_bookmarks_factory.js │ │ │ │ ├── models │ │ │ │ │ └── bookmark.js │ │ │ │ ├── spec │ │ │ │ │ ├── bookmark_button_view_spec.js │ │ │ │ │ ├── bookmarks_list_view_spec.js │ │ │ │ │ └── course_bookmarks_factory_spec.js │ │ │ │ ├── spec_helpers │ │ │ │ │ └── bookmark_helpers.js │ │ │ │ └── views │ │ │ │ │ ├── bookmark_button.js │ │ │ │ │ └── bookmarks_list.js │ │ │ │ └── templates │ │ │ │ └── bookmarks-list.underscore │ │ ├── templates │ │ │ └── course_bookmarks │ │ │ │ ├── course-bookmarks-fragment.html │ │ │ │ ├── course-bookmarks.html │ │ │ │ └── course_bookmarks_js.template │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_course_bookmarks.py │ │ ├── urls.py │ │ └── views │ │ │ ├── __init__.py │ │ │ └── course_bookmarks.py │ ├── course_duration_limits │ │ ├── __init__.py │ │ ├── access.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── config.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-access-messages.rst │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20181119_0959.py │ │ │ ├── 0003_auto_20181128_1407.py │ │ │ ├── 0004_auto_20181128_1521.py │ │ │ ├── 0005_auto_20190306_1546.py │ │ │ ├── 0006_auto_20190308_1447.py │ │ │ ├── 0007_auto_20190311_1919.py │ │ │ ├── 0008_auto_20190313_1634.py │ │ │ └── __init__.py │ │ ├── models.py │ │ └── tests │ │ │ ├── __init__.py │ │ │ ├── test_access.py │ │ │ ├── test_course_expiration.py │ │ │ └── test_models.py │ ├── course_experience │ │ ├── .eslintrc.js │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── api │ │ │ ├── __init__.py │ │ │ └── v1 │ │ │ │ ├── __init__.py │ │ │ │ ├── serializers.py │ │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_views.py │ │ │ │ ├── urls.py │ │ │ │ └── views.py │ │ ├── course_tools.py │ │ ├── course_updates.py │ │ ├── plugins.py │ │ ├── static │ │ │ └── course_experience │ │ │ │ ├── fixtures │ │ │ │ └── course-currency-fragment.html │ │ │ │ ├── images │ │ │ │ ├── learner-quote.png │ │ │ │ ├── learner-quote2.png │ │ │ │ └── verified-cert.png │ │ │ │ └── js │ │ │ │ ├── CourseSock.js │ │ │ │ ├── currency.js │ │ │ │ └── spec │ │ │ │ └── Currency_spec.js │ │ ├── templates │ │ │ └── course_experience │ │ │ │ ├── course-dates-fragment.html │ │ │ │ ├── course-sock-fragment.html │ │ │ │ ├── course-updates-fragment.html │ │ │ │ ├── dates-summary.html │ │ │ │ └── mobile │ │ │ │ └── course-dates-fragment.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_course_updates.py │ │ │ ├── test_url_helpers.py │ │ │ └── views │ │ │ │ ├── __init__.py │ │ │ │ ├── helpers.py │ │ │ │ ├── test_course_home.py │ │ │ │ ├── test_course_sock.py │ │ │ │ ├── test_course_updates.py │ │ │ │ └── test_masquerade.py │ │ ├── url_helpers.py │ │ ├── urls.py │ │ ├── utils.py │ │ ├── views │ │ │ ├── __init__.py │ │ │ ├── course_dates.py │ │ │ ├── course_home.py │ │ │ ├── course_sock.py │ │ │ └── course_updates.py │ │ └── waffle.py │ ├── course_search │ │ ├── README.rst │ │ └── static │ │ │ └── course_search │ │ │ ├── fixtures │ │ │ ├── course_content_page.html │ │ │ ├── course_search_results_page.html │ │ │ └── dashboard_search_page.html │ │ │ ├── js │ │ │ ├── collections │ │ │ │ └── search_collection.js │ │ │ ├── course_search_factory.js │ │ │ ├── dashboard_search_factory.js │ │ │ ├── models │ │ │ │ └── search_result.js │ │ │ ├── search_router.js │ │ │ ├── spec │ │ │ │ └── course_search_spec.js │ │ │ └── views │ │ │ │ ├── course_search_results_view.js │ │ │ │ ├── dashboard_search_results_view.js │ │ │ │ ├── search_form.js │ │ │ │ ├── search_item_view.js │ │ │ │ └── search_results_view.js │ │ │ └── templates │ │ │ ├── course_search_item.underscore │ │ │ ├── course_search_results.underscore │ │ │ ├── dashboard_search_item.underscore │ │ │ ├── dashboard_search_results.underscore │ │ │ ├── search_error.underscore │ │ │ └── search_loading.underscore │ ├── discounts │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── applicability.py │ │ ├── apps.py │ │ ├── docs │ │ │ └── decisions │ │ │ │ └── 0001-determining-discount-location.rst │ │ ├── migrations │ │ │ ├── 0001_initial.py │ │ │ ├── 0002_auto_20191022_1720.py │ │ │ └── __init__.py │ │ ├── models.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_applicability.py │ │ │ ├── test_discount_restriction_models.py │ │ │ ├── test_utils.py │ │ │ └── test_views.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── effort_estimation │ │ ├── __init__.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── block_transformers.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_block_transformers.py │ │ └── toggles.py │ ├── enterprise_support │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin │ │ │ ├── __init__.py │ │ │ ├── forms.py │ │ │ └── views.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── context.py │ │ ├── enrollments │ │ │ ├── __init__.py │ │ │ ├── exceptions.py │ │ │ ├── tests │ │ │ │ ├── __init__.py │ │ │ │ └── test_utils.py │ │ │ └── utils.py │ │ ├── serializers.py │ │ ├── signals.py │ │ ├── tasks.py │ │ ├── templates │ │ │ └── enterprise_support │ │ │ │ ├── admin │ │ │ │ └── enrollment_attributes_override.html │ │ │ │ └── enterprise_consent_declined_notification.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── factories.py │ │ │ ├── mixins │ │ │ │ ├── __init__.py │ │ │ │ └── enterprise.py │ │ │ ├── test_admin.py │ │ │ ├── test_api.py │ │ │ ├── test_context.py │ │ │ ├── test_logout.py │ │ │ ├── test_serializers.py │ │ │ ├── test_signals.py │ │ │ └── test_utils.py │ │ └── utils.py │ ├── learner_profile │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── static │ │ │ └── learner_profile │ │ │ │ ├── fixtures │ │ │ │ └── learner_profile.html │ │ │ │ ├── js │ │ │ │ ├── learner_profile_factory.js │ │ │ │ ├── models │ │ │ │ │ └── badges_model.js │ │ │ │ ├── spec │ │ │ │ │ ├── learner_profile_factory_spec.js │ │ │ │ │ └── views │ │ │ │ │ │ ├── badge_list_container_spec.js │ │ │ │ │ │ ├── badge_list_view_spec.js │ │ │ │ │ │ ├── badge_view_spec.js │ │ │ │ │ │ ├── learner_profile_fields_spec.js │ │ │ │ │ │ ├── learner_profile_view_spec.js │ │ │ │ │ │ ├── section_two_tab_spec.js │ │ │ │ │ │ └── share_modal_view_spec.js │ │ │ │ ├── spec_helpers │ │ │ │ │ └── helpers.js │ │ │ │ └── views │ │ │ │ │ ├── badge_list_container.js │ │ │ │ │ ├── badge_list_view.js │ │ │ │ │ ├── badge_view.js │ │ │ │ │ ├── learner_profile_fields.js │ │ │ │ │ ├── learner_profile_view.js │ │ │ │ │ ├── section_two_tab.js │ │ │ │ │ └── share_modal_view.js │ │ │ │ └── templates │ │ │ │ ├── badge.underscore │ │ │ │ ├── badge_list.underscore │ │ │ │ ├── badge_placeholder.underscore │ │ │ │ ├── section_two.underscore │ │ │ │ ├── share_modal.underscore │ │ │ │ ├── social_icons.underscore │ │ │ │ └── third_party_auth.html │ │ ├── templates │ │ │ └── learner_profile │ │ │ │ ├── learner-achievements-fragment.html │ │ │ │ └── learner_profile.html │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── views │ │ │ │ ├── __init__.py │ │ │ │ └── test_learner_profile.py │ │ ├── toggles.py │ │ ├── urls.py │ │ └── views │ │ │ ├── __init__.py │ │ │ ├── learner_achievements.py │ │ │ └── learner_profile.py │ ├── lti_course_tab │ │ ├── __init__.py │ │ ├── tab.py │ │ └── tests.py │ ├── name_affirmation_api │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_utils.py │ │ └── utils.py │ ├── personalized_learner_schedules │ │ ├── __init__.py │ │ ├── call_to_action.py │ │ └── show_answer │ │ │ ├── __init__.py │ │ │ ├── show_answer_field_override.py │ │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_show_answer_override.py │ └── survey_report │ │ ├── README.rst │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── api.py │ │ ├── apps.py │ │ ├── docs │ │ └── decisions │ │ │ └── 0001-addition-to-core-repo.rst │ │ ├── management │ │ ├── __init__.py │ │ └── commands │ │ │ ├── __init__.py │ │ │ ├── generate_report.py │ │ │ └── tests │ │ │ ├── __init__.py │ │ │ └── test_generate_report.py │ │ ├── migrations │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20221130_1533.py │ │ ├── 0003_add_state_field_and_add_default_values_to_fields.py │ │ ├── 0004_surveyreportupload.py │ │ ├── 0005_surveyreportanonymoussiteid.py │ │ └── __init__.py │ │ ├── models.py │ │ ├── queries.py │ │ ├── tasks.py │ │ ├── templates │ │ └── survey_report │ │ │ └── change_list.html │ │ ├── tests │ │ ├── __init__.py │ │ └── test_query_methods.py │ │ ├── urls.py │ │ └── views.py ├── testing │ ├── __init__.py │ ├── coverage_context_listener │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── pytest_plugin.py │ │ ├── urls.py │ │ └── views.py │ └── importlinter │ │ ├── __init__.py │ │ └── isolated_apps_contract.py └── tests │ ├── __init__.py │ ├── ci │ ├── __init__.py │ └── test_ci_matrix.py │ ├── completion_integration │ ├── README.rst │ ├── __init__.py │ ├── test_handlers.py │ ├── test_models.py │ ├── test_services.py │ └── test_views.py │ ├── util │ └── __init__.py │ └── xblock_integration │ ├── __init__.py │ ├── pages │ └── __init__.py │ ├── test_crowdsource_hinter.py │ ├── test_done.py │ ├── test_external_xblocks.py │ ├── test_recommender.py │ └── xblock_testcase.py ├── package.json ├── pavelib ├── __init__.py ├── assets.py ├── docs.py ├── i18n.py ├── js_test.py ├── paver_tests │ ├── __init__.py │ ├── conftest.py │ ├── pylint_test_list.json │ ├── test_assets.py │ ├── test_eslint.py │ ├── test_extract_and_generate.py │ ├── test_i18n.py │ ├── test_js_test.py │ ├── test_paver_get_quality_reports.py │ ├── test_paver_quality.py │ ├── test_pii_check.py │ ├── test_prereqs.py │ ├── test_servers.py │ ├── test_stylelint.py │ ├── test_timer.py │ ├── test_utils.py │ ├── test_xsslint.py │ └── utils.py ├── prereqs.py ├── quality.py ├── servers.py └── utils │ ├── __init__.py │ ├── cmd.py │ ├── envs.py │ ├── process.py │ ├── test │ ├── __init__.py │ ├── suites │ │ ├── __init__.py │ │ ├── js_suite.py │ │ └── suite.py │ └── utils.py │ └── timer.py ├── pavement.py ├── pylint_django_settings.py ├── pylintrc ├── pylintrc_tweaks ├── requirements.txt ├── requirements ├── README.rst ├── common_constraints.txt ├── constraints.txt ├── edx-sandbox │ ├── py38.in │ ├── py38.txt │ ├── shared.in │ └── shared.txt ├── edx │ ├── base.in │ ├── base.txt │ ├── coverage.in │ ├── coverage.txt │ ├── development.in │ ├── development.txt │ ├── doc.in │ ├── doc.txt │ ├── github.in │ ├── openstack.txt │ ├── paver.in │ ├── paver.txt │ ├── private.readme │ ├── testing.in │ └── testing.txt ├── pip-tools.in ├── pip-tools.txt ├── pip.in ├── pip.txt └── system │ └── ubuntu │ ├── apt-packages.txt │ └── apt-repos.txt ├── scripts ├── __init__.py ├── all-tests.sh ├── ci-runner.Dockerfile ├── delete-mongo-test-dbs.js ├── find_order_dependent_test_failures.py ├── generic-ci-tests.sh ├── gha-shards-readme.md ├── gha_unit_tests_collector.py ├── jwk-precompute-params.py ├── paver_autocomplete.sh ├── reset-test-db.sh ├── show_events.py ├── stable_bucketer ├── thresholds.sh ├── unit_test_shards_parser.py ├── verify-dunder-init.sh ├── vulture │ ├── find-dead-code.sh │ └── whitelist.py ├── xblock │ ├── README │ ├── list-installed.py │ ├── requirements.in │ ├── requirements.txt │ ├── xblock_counts.py │ └── xblock_studio_configuration.json ├── xsslint │ ├── tests │ │ ├── __init__.py │ │ ├── templates │ │ │ ├── test.html │ │ │ ├── test.js │ │ │ ├── test.py │ │ │ └── test.underscore │ │ ├── test_linters.py │ │ ├── test_main.py │ │ └── test_utils.py │ ├── xss_linter.py │ └── xsslint │ │ ├── __init__.py │ │ ├── default_config.py │ │ ├── django_linter.py │ │ ├── linters.py │ │ ├── main.py │ │ ├── reporting.py │ │ ├── rules.py │ │ ├── utils.py │ │ └── visitors.py ├── xsslint_config.py └── xsslint_thresholds.json ├── setup.cfg ├── setup.py ├── setupTests.js ├── stylelint.config.js ├── test_root ├── .gitignore ├── data │ ├── .gitkeep │ ├── Q291cnNlTG9jYXRvcignb3JnLjIzMTYnLCAnY291cnNlXzIzMTYnLCAnUnVuXzIzMTYnLCBOb25lLCBOb25lKQ== │ │ └── good.tar.gz │ ├── Q291cnNlTG9jYXRvcignb3JnLjIzMTknLCAnY291cnNlXzIzMTknLCAnUnVuXzIzMTknLCBOb25lLCBOb25lKQ== │ │ └── good.tar.gz │ └── video │ │ ├── gizmo.mp4 │ │ ├── gizmo.mp99 │ │ ├── gizmo.ogv │ │ ├── gizmo.webm │ │ ├── hls │ │ ├── history.m3u8 │ │ ├── history_148kbit │ │ │ ├── XXXXXXXXT114-V015600_2_0.ts │ │ │ └── history_148kbit.m3u8 │ │ ├── history_264kbit │ │ │ ├── XXXXXXXXT114-V015600_1_0.ts │ │ │ └── history_264kbit.m3u8 │ │ ├── history_328kbit │ │ │ ├── XXXXXXXXT114-V015600_0_0.ts │ │ │ └── history_328kbit.m3u8 │ │ ├── history_41kbit │ │ │ ├── XXXXXXXXT114-V015600_4_0.ts │ │ │ └── history_41kbit.m3u8 │ │ └── history_70kbit │ │ │ ├── XXXXXXXXT114-V015600_3_0.ts │ │ │ └── history_70kbit.m3u8 │ │ ├── intro.mp4 │ │ └── intro.webm └── db │ └── .gitignore ├── themes ├── README.rst ├── conf │ └── locale │ │ └── en │ │ └── LC_MESSAGES │ │ ├── django.mo │ │ └── django.po ├── dark-theme │ ├── cms │ │ └── static │ │ │ ├── images │ │ │ ├── favicon.ico │ │ │ └── studio-logo.png │ │ │ └── sass │ │ │ └── partials │ │ │ └── cms │ │ │ └── theme │ │ │ ├── _extras.scss │ │ │ └── _variables.scss │ └── lms │ │ └── static │ │ ├── images │ │ ├── certificates │ │ │ └── red-certificate.png │ │ ├── favicon.ico │ │ ├── logo.png │ │ └── red-logo.png │ │ └── sass │ │ └── partials │ │ └── lms │ │ └── theme │ │ ├── _certificates.scss │ │ ├── _extras.scss │ │ └── _variables.scss ├── edge.edx.org │ ├── cms │ │ └── static │ │ │ └── sass │ │ │ └── partials │ │ │ └── cms │ │ │ └── theme │ │ │ └── _variables.scss │ └── lms │ │ └── static │ │ ├── course_experience │ │ └── images │ │ │ └── home_message_author.png │ │ ├── images │ │ ├── certificates │ │ │ ├── honor.png │ │ │ ├── micromasters-program.png │ │ │ ├── professional-program.png │ │ │ ├── professional.png │ │ │ └── verified.png │ │ ├── favicon.ico │ │ ├── logo-footer.png │ │ └── logo.png │ │ └── sass │ │ └── partials │ │ └── lms │ │ └── theme │ │ ├── _certificates.scss │ │ ├── _extras.scss │ │ └── _variables.scss ├── open-edx │ ├── README.rst │ ├── cms │ │ └── README.rst │ └── lms │ │ └── README.rst ├── red-theme │ ├── cms │ │ └── static │ │ │ ├── images │ │ │ ├── favicon.ico │ │ │ └── studio-logo.png │ │ │ └── sass │ │ │ └── partials │ │ │ └── cms │ │ │ └── theme │ │ │ ├── _extras.scss │ │ │ └── _variables.scss │ └── lms │ │ ├── static │ │ ├── images │ │ │ ├── certificates │ │ │ │ └── red-certificate.png │ │ │ ├── favicon.ico │ │ │ └── logo.png │ │ └── sass │ │ │ └── partials │ │ │ └── lms │ │ │ └── theme │ │ │ ├── _certificates.scss │ │ │ ├── _extras.scss │ │ │ └── _variables.scss │ │ └── templates │ │ ├── ace_common │ │ └── edx_ace │ │ │ └── common │ │ │ ├── base_body.html │ │ │ └── return_to_course_cta.html │ │ ├── footer.html │ │ ├── header.html │ │ └── schedules │ │ └── edx_ace │ │ └── recurringnudge_day3 │ │ └── email │ │ └── body.txt └── stanford-style │ └── lms │ ├── static │ ├── images │ │ ├── favicon.ico │ │ └── logo.png │ └── sass │ │ └── partials │ │ └── lms │ │ └── theme │ │ └── _variables.scss │ └── templates │ ├── courseware │ └── course_about_sidebar_header.html │ ├── emails │ ├── activation_email.txt │ ├── confirm_email_change.txt │ ├── email_change.txt │ └── reject_name_change.txt │ ├── embargo │ ├── default_courseware.html │ └── default_enrollment.html │ ├── footer.html │ ├── header.html │ ├── index.html │ ├── register-form.html │ ├── register-shib.html │ ├── register-sidebar.html │ └── static_templates │ ├── about.html │ ├── embargo.html │ └── tos.html ├── tox.ini ├── webpack-config └── file-lists.js ├── webpack.common.config.js ├── webpack.dev.config.js ├── webpack.prod.config.js └── xmodule ├── README.rst ├── __init__.py ├── annotatable_block.py ├── annotator_mixin.py ├── assets ├── library_content │ └── public │ │ └── js │ │ ├── library_content_edit.js │ │ └── library_content_reset.js ├── library_source_block │ ├── LibrarySourcedBlockPicker.jsx │ ├── public │ │ └── js │ │ │ └── library_source_block.js │ └── style.css ├── split_test │ └── public │ │ └── js │ │ ├── split_test_author_view.js │ │ ├── split_test_staff.js │ │ └── split_test_student.js ├── vertical │ └── public │ │ └── js │ │ └── vertical_student_view.js └── word_cloud │ ├── .eslintrc.js │ ├── .gitignore │ ├── src │ └── js │ │ ├── d3.layout.cloud.js │ │ ├── d3.min.js │ │ ├── word_cloud.js │ │ └── word_cloud_main.js │ └── webpack.config.js ├── assetstore ├── __init__.py ├── assetmgr.py └── tests │ ├── __init__.py │ ├── assets.xsd │ └── test_asset_xml.py ├── block_metadata_utils.py ├── capa ├── __init__.py ├── capa_problem.py ├── checker.py ├── correctmap.py ├── customrender.py ├── inputtypes.py ├── registry.py ├── responsetypes.py ├── safe_exec │ ├── README.rst │ ├── __init__.py │ ├── exceptions.py │ ├── lazymod.py │ ├── remote_exec.py │ ├── safe_exec.py │ └── tests │ │ ├── __init__.py │ │ ├── test_files │ │ └── pylib │ │ │ └── constant.py │ │ ├── test_lazymod.py │ │ └── test_safe_exec.py ├── templates │ ├── annotationinput.html │ ├── chemicalequationinput.html │ ├── choicegroup.html │ ├── choicetext.html │ ├── clarification.html │ ├── codeinput.html │ ├── crystallography.html │ ├── designprotein2dinput.html │ ├── drag_and_drop_input.html │ ├── editageneinput.html │ ├── editamolecule.html │ ├── filesubmission.html │ ├── formulaequationinput.html │ ├── imageinput.html │ ├── jsinput.html │ ├── mathstring.html │ ├── matlabinput.html │ ├── optioninput.html │ ├── schematicinput.html │ ├── solutionspan.html │ ├── status_span.html │ ├── textline.html │ └── vsepr_input.html ├── tests │ ├── __init__.py │ ├── helpers.py │ ├── response_xml_factory.py │ ├── test_answer_pool.py │ ├── test_capa_problem.py │ ├── test_correctmap.py │ ├── test_customrender.py │ ├── test_files │ │ ├── dynamath_input.txt │ │ ├── extended_hints.xml │ │ ├── extended_hints_checkbox.xml │ │ ├── extended_hints_dropdown.xml │ │ ├── extended_hints_multiple_choice.xml │ │ ├── extended_hints_multiple_choice_with_html.xml │ │ ├── extended_hints_numeric_input.xml │ │ ├── extended_hints_text_input.xml │ │ ├── extended_hints_with_errors.xml │ │ ├── filename_convert_test.txt │ │ ├── js │ │ │ ├── mersenne-twister-min.js │ │ │ ├── test_problem_display.js │ │ │ ├── test_problem_generator.js │ │ │ ├── test_problem_grader.js │ │ │ └── xproblem.js │ │ ├── snuggletex_2x+3y.xml │ │ ├── snuggletex_correct.html │ │ ├── snuggletex_wrong.html │ │ ├── snuggletex_x+x+3y.xml │ │ ├── targeted_feedback.xml │ │ └── targeted_feedback_multiple.xml │ ├── test_hint_functionality.py │ ├── test_html_render.py │ ├── test_input_templates.py │ ├── test_inputtypes.py │ ├── test_responsetypes.py │ ├── test_shuffle.py │ ├── test_targeted_feedback.py │ ├── test_util.py │ └── test_xqueue_interface.py ├── util.py └── xqueue_interface.py ├── capa_block.py ├── conditional_block.py ├── contentstore ├── __init__.py ├── content.py ├── django.py ├── mongo.py └── utils.py ├── course_block.py ├── course_metadata_utils.py ├── css ├── annotatable │ └── display.scss ├── capa │ └── display.scss ├── codemirror │ └── codemirror.scss ├── editor │ └── edit.scss ├── html │ ├── display.scss │ └── edit.scss ├── lti │ └── lti.scss ├── poll │ └── display.scss ├── problem │ └── edit.scss ├── sequence │ └── display.scss ├── tabs │ ├── codemirror.scss │ └── tabs.scss ├── video │ ├── accessible_menu.scss │ └── display.scss └── word_cloud │ └── display.scss ├── data.py ├── discussion_block.py ├── docs └── decisions │ ├── 0001-move-due-dates-to-db.rst │ └── 0002-remove-mongodb-dependency.rst ├── editing_block.py ├── edxnotes_utils.py ├── error_block.py ├── errortracker.py ├── exceptions.py ├── fields.py ├── graders.py ├── hidden_block.py ├── html_block.py ├── html_checker.py ├── js ├── RequireJS-namespace-undefine.js ├── common_static ├── fixtures │ ├── annotatable.html │ ├── checkbox_problem.html │ ├── codeinput_problem.html │ ├── hls │ │ ├── XXXXXXXXT114-V015600_0_ │ │ │ ├── XXXXXXXXT114-V015600_0_.m3u8 │ │ │ ├── XXXXXXXXT114-V015600_0_0.ts │ │ │ ├── XXXXXXXXT114-V015600_0_1.ts │ │ │ └── XXXXXXXXT114-V015600_0_2.ts │ │ ├── XXXXXXXXT114-V015600_1_ │ │ │ ├── XXXXXXXXT114-V015600_1_.m3u8 │ │ │ ├── XXXXXXXXT114-V015600_1_0.ts │ │ │ ├── XXXXXXXXT114-V015600_1_1.ts │ │ │ └── XXXXXXXXT114-V015600_1_2.ts │ │ ├── XXXXXXXXT114-V015600_2_ │ │ │ ├── XXXXXXXXT114-V015600_2_.m3u8 │ │ │ ├── XXXXXXXXT114-V015600_2_0.ts │ │ │ ├── XXXXXXXXT114-V015600_2_1.ts │ │ │ └── XXXXXXXXT114-V015600_2_2.ts │ │ ├── XXXXXXXXT114-V015600_3_ │ │ │ ├── XXXXXXXXT114-V015600_3_.m3u8 │ │ │ ├── XXXXXXXXT114-V015600_3_0.ts │ │ │ ├── XXXXXXXXT114-V015600_3_1.ts │ │ │ └── XXXXXXXXT114-V015600_3_2.ts │ │ ├── XXXXXXXXT114-V015600_4_ │ │ │ ├── XXXXXXXXT114-V015600_4_.m3u8 │ │ │ ├── XXXXXXXXT114-V015600_4_0.ts │ │ │ ├── XXXXXXXXT114-V015600_4_1.ts │ │ │ └── XXXXXXXXT114-V015600_4_2.ts │ │ └── hls.m3u8 │ ├── html-edit-visual.html │ ├── html-editor-raw.html │ ├── imageinput.html │ ├── imageinput.underscore │ ├── items.json │ ├── jsinput_problem.html │ ├── lti.html │ ├── matlabinput_problem.html │ ├── poster.jpg │ ├── problem-with-markdown.html │ ├── problem-without-markdown.html │ ├── problem.html │ ├── problem_content.html │ ├── problem_content_1240.html │ ├── radiobutton_problem.html │ ├── sequence.html │ ├── split_test_staff.html │ ├── tabs-edit.html │ ├── test.mp4 │ ├── test.ogv │ ├── test.webm │ ├── video.html │ ├── video_all.html │ ├── video_autoadvance.html │ ├── video_autoadvance_disabled.html │ ├── video_hls.html │ ├── video_html5.html │ ├── video_no_captions.html │ ├── video_with_bumper.html │ ├── video_yt_multiple.html │ └── youtube_iframe_api.js ├── karma_runner.js ├── karma_runner_webpack.js ├── karma_xmodule.conf.js ├── karma_xmodule_webpack.conf.js ├── libpeerconnection.log ├── public │ └── js │ │ ├── library_content_edit.js │ │ ├── split_test_author_view.js │ │ ├── split_test_staff.js │ │ ├── split_test_student.js │ │ └── vertical_student_view.js ├── spec │ ├── annotatable │ │ └── display_spec.js │ ├── capa │ │ ├── display_spec.js │ │ └── imageinput_spec.js │ ├── collapsible_spec.js │ ├── helper.js │ ├── html │ │ └── edit_spec.js │ ├── main_requirejs.js │ ├── problem │ │ ├── edit_spec.js │ │ └── edit_spec_hint.js │ ├── sequence │ │ └── display_spec.js │ ├── split_test │ │ └── staff_view_spec.js │ ├── tabs │ │ └── edit.js │ ├── time_spec.js │ ├── video │ │ ├── async_process_spec.js │ │ ├── completion_spec.js │ │ ├── events_spec.js │ │ ├── general_spec.js │ │ ├── html5_video_spec.js │ │ ├── initialize_spec.js │ │ ├── iterator_spec.js │ │ ├── resizer_spec.js │ │ ├── sjson_spec.js │ │ ├── social_share_spec.js │ │ ├── video_autoadvance_spec.js │ │ ├── video_bumper_spec.js │ │ ├── video_caption_spec.js │ │ ├── video_context_menu_spec.js │ │ ├── video_control_spec.js │ │ ├── video_events_bumper_plugin_spec.js │ │ ├── video_events_plugin_spec.js │ │ ├── video_focus_grabber_spec.js │ │ ├── video_full_screen_spec.js │ │ ├── video_play_pause_control_spec.js │ │ ├── video_play_placeholder_spec.js │ │ ├── video_play_skip_control_spec.js │ │ ├── video_player_spec.js │ │ ├── video_poster_spec.js │ │ ├── video_progress_slider_spec.js │ │ ├── video_quality_control_spec.js │ │ ├── video_save_state_plugin_spec.js │ │ ├── video_skip_control_spec.js │ │ ├── video_speed_control_spec.js │ │ ├── video_storage_spec.js │ │ └── video_volume_control_spec.js │ ├── video_helper.js │ └── xmodule_spec.js └── src │ ├── annotatable │ └── display.js │ ├── capa │ ├── .gitignore │ ├── display.js │ ├── imageinput.js │ └── schematic.js │ ├── collapsible.js │ ├── conditional │ └── display.js │ ├── discussion │ └── display.js │ ├── html │ ├── display.js │ ├── edit.js │ └── imageModal.js │ ├── javascript_loader.js │ ├── lti │ └── lti.js │ ├── poll │ ├── .gitignore │ ├── poll.js │ └── poll_main.js │ ├── problem │ ├── .gitignore │ └── edit.js │ ├── raw │ └── edit │ │ ├── metadata-only.js │ │ └── xml.js │ ├── sequence │ ├── display.js │ └── edit.js │ ├── tabs │ └── tabs-aggregator.js │ ├── time.js │ ├── vertical │ └── edit.js │ ├── video │ ├── 00_async_process.js │ ├── 00_component.js │ ├── 00_i18n.js │ ├── 00_iterator.js │ ├── 00_resizer.js │ ├── 00_sjson.js │ ├── 00_video_storage.js │ ├── 01_initialize.js │ ├── 025_focus_grabber.js │ ├── 02_html5_hls_video.js │ ├── 02_html5_video.js │ ├── 035_video_accessible_menu.js │ ├── 036_video_social_sharing.js │ ├── 03_video_player.js │ ├── 04_video_control.js │ ├── 04_video_full_screen.js │ ├── 05_video_quality_control.js │ ├── 06_video_progress_slider.js │ ├── 07_video_volume_control.js │ ├── 08_video_auto_advance_control.js │ ├── 08_video_speed_control.js │ ├── 095_video_context_menu.js │ ├── 09_bumper.js │ ├── 09_completion.js │ ├── 09_events_bumper_plugin.js │ ├── 09_events_plugin.js │ ├── 09_play_pause_control.js │ ├── 09_play_placeholder.js │ ├── 09_play_skip_control.js │ ├── 09_poster.js │ ├── 09_save_state_plugin.js │ ├── 09_skip_control.js │ ├── 09_video_caption.js │ ├── 10_commands.js │ └── 10_main.js │ └── xmodule.js ├── library_content_block.py ├── library_root_xblock.py ├── library_sourced_block.py ├── library_tools.py ├── lti_2_util.py ├── lti_block.py ├── mako_block.py ├── modulestore ├── __init__.py ├── django.py ├── docs │ ├── index.rst │ ├── mixedmodulestore.rst │ ├── overview.rst │ └── split-mongo.rst ├── draft.py ├── draft_and_published.py ├── edit_info.py ├── exceptions.py ├── inheritance.py ├── mixed.py ├── modulestore_settings.py ├── mongo │ ├── __init__.py │ ├── base.py │ └── draft.py ├── mongoengine_fields.py ├── perf_tests │ ├── __init__.py │ ├── generate_asset_xml.py │ ├── generate_report.py │ └── test_asset_import_export.py ├── search.py ├── split_mongo │ ├── __init__.py │ ├── caching_descriptor_system.py │ ├── definition_lazy_loader.py │ ├── id_manager.py │ ├── mongo_connection.py │ ├── split.py │ ├── split_draft.py │ └── split_mongo_kvs.py ├── store_utilities.py ├── tests │ ├── __init__.py │ ├── django_utils.py │ ├── factories.py │ ├── mongo_connection.py │ ├── sample_courses.py │ ├── test_abstraction.py │ ├── test_asides.py │ ├── test_assetstore.py │ ├── test_contentstore.py │ ├── test_cross_modulestore_import_export.py │ ├── test_inheritance.py │ ├── test_libraries.py │ ├── test_mixed_modulestore.py │ ├── test_modulestore.py │ ├── test_modulestore_settings.py │ ├── test_mongo.py │ ├── test_mongo_call_count.py │ ├── test_publish.py │ ├── test_semantics.py │ ├── test_split_copy_from_template.py │ ├── test_split_modulestore.py │ ├── test_split_modulestore_bulk_operations.py │ ├── test_split_mongo_mongo_connection.py │ ├── test_split_w_old_mongo.py │ ├── test_store_utilities.py │ ├── test_xml.py │ ├── test_xml_importer.py │ └── utils.py ├── xml.py ├── xml_exporter.py └── xml_importer.py ├── mongo_utils.py ├── partitions ├── __init__.py ├── enrollment_track_partition_generator.py ├── partitions.py ├── partitions_service.py └── tests │ ├── __init__.py │ └── test_partitions.py ├── poll_block.py ├── progress.py ├── randomize_block.py ├── raw_block.py ├── seq_block.py ├── services.py ├── split_test_block.py ├── static_content.py ├── stringify.py ├── studio_editable.py ├── tabs.py ├── template_block.py ├── templates.py ├── templates ├── about │ └── overview.yaml ├── html │ ├── announcement.yaml │ ├── anon_user_id.yaml │ ├── iframe.yaml │ ├── latex_html.yaml │ ├── raw.yaml │ └── zooming_image.yaml ├── library-sourced-block-studio-view.html ├── problem │ ├── blank_common.yaml │ ├── checkboxes_response.yaml │ ├── checkboxes_response_hint.yaml │ ├── circuitschematic.yaml │ ├── customgrader.yaml │ ├── drag_and_drop.yaml │ ├── formularesponse.yaml │ ├── imageresponse.yaml │ ├── jsinput_response.yaml │ ├── latex_problem.yaml │ ├── multiplechoice.yaml │ ├── multiplechoice_hint.yaml │ ├── numericalresponse.yaml │ ├── numericalresponse_hint.yaml │ ├── optionresponse.yaml │ ├── optionresponse_hint.yaml │ ├── problem_with_hint.yaml │ ├── problem_with_hint_in_latex.yaml │ ├── string_response.yaml │ └── string_response_hint.yaml └── test │ ├── announcement.yaml │ ├── anon_user_id.yaml │ ├── latex_html.yaml │ ├── somefile.notyaml │ └── zooming_image.yaml ├── tests ├── __init__.py ├── data │ └── xml-course-root ├── helpers.py ├── rendering │ ├── __init__.py │ └── core.py ├── test_annotatable_block.py ├── test_annotator_mixin.py ├── test_capa_block.py ├── test_conditional.py ├── test_content.py ├── test_course_block.py ├── test_course_metadata_utils.py ├── test_delay_between_attempts.py ├── test_discussion.py ├── test_error_block.py ├── test_export.py ├── test_fields.py ├── test_graders.py ├── test_html_block.py ├── test_import.py ├── test_import_static.py ├── test_library_content.py ├── test_library_root.py ├── test_library_sourced_block.py ├── test_library_tools.py ├── test_lti20_unit.py ├── test_lti_unit.py ├── test_mongo_utils.py ├── test_poll.py ├── test_progress.py ├── test_randomize_block.py ├── test_resource_templates.py ├── test_sequence.py ├── test_services.py ├── test_split_test_block.py ├── test_stringify.py ├── test_studio_editable.py ├── test_tabs.py ├── test_transcripts_utils.py ├── test_unit_block.py ├── test_util_duedate.py ├── test_utils_django.py ├── test_utils_escape_html_characters.py ├── test_validation.py ├── test_vertical.py ├── test_video.py ├── test_word_cloud.py ├── test_xml_block.py └── xml │ ├── __init__.py │ ├── factories.py │ ├── test_inheritance.py │ └── test_policy.py ├── unit_block.py ├── util ├── __init__.py ├── duedate.py ├── misc.py ├── sandboxing.py └── xmodule_django.py ├── validation.py ├── vertical_block.py ├── video_block ├── __init__.py ├── bumper_utils.py ├── sharing_sites.py ├── transcripts_utils.py ├── video_block.py ├── video_handlers.py ├── video_utils.py └── video_xfields.py ├── word_cloud_block.py ├── wrapper_block.py ├── x_module.py └── xml_block.py /.annotation_safe_list.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.annotation_safe_list.yml -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.babelrc -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.coveragerc -------------------------------------------------------------------------------- /.coveragerc-local: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.coveragerc-local -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.dockerignore -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.editorconfig -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.eslintignore -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.eslintrc.json -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * -text 2 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.github/CODEOWNERS -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.github/dependabot.yml -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.github/renovate.json -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.gitignore -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.npmrc -------------------------------------------------------------------------------- /.pii_annotations.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.pii_annotations.yml -------------------------------------------------------------------------------- /.readthedocs.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.readthedocs.yaml -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.stylelintignore -------------------------------------------------------------------------------- /.tx/config: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/.tx/config -------------------------------------------------------------------------------- /CHANGELOG.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/CHANGELOG.rst -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/Dockerfile -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/LICENSE -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/Makefile -------------------------------------------------------------------------------- /README.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/README.rst -------------------------------------------------------------------------------- /cms/README.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/README.rst -------------------------------------------------------------------------------- /cms/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/__init__.py -------------------------------------------------------------------------------- /cms/celery.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/celery.py -------------------------------------------------------------------------------- /cms/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/conftest.py -------------------------------------------------------------------------------- /cms/djangoapps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/tests/test_serializers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/tests/test_views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/api/v1/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/cms_user_tasks/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/api/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/api/views/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/config/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/config/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/management/commands/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/rest_api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/rest_api/v0/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/rest_api/v0/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/rest_api/v1/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/rest_api/v1/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/signals/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/signals/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/contentstore/views/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/course_creators/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/course_creators/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/course_creators/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/coursegraph/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/coursegraph/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/coursegraph/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/coursegraph/management/commands/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/coursegraph/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/export_course_metadata/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/export_course_metadata/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/export_course_metadata/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/export_course_metadata/management/commands/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/maintenance/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/models/settings/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/models/settings/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/pipeline_js/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/xblock_config/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/djangoapps/xblock_config/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/envs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/envs/bok_choy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/bok_choy.py -------------------------------------------------------------------------------- /cms/envs/bok_choy.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/bok_choy.yml -------------------------------------------------------------------------------- /cms/envs/common.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/common.py -------------------------------------------------------------------------------- /cms/envs/devstack.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/devstack.py -------------------------------------------------------------------------------- /cms/envs/help_tokens.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/help_tokens.ini -------------------------------------------------------------------------------- /cms/envs/openstack.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/openstack.py -------------------------------------------------------------------------------- /cms/envs/production.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/production.py -------------------------------------------------------------------------------- /cms/envs/test.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/envs/test.py -------------------------------------------------------------------------------- /cms/lib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/lib/xblock/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/lib/xblock/runtime.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/lib/xblock/runtime.py -------------------------------------------------------------------------------- /cms/lib/xblock/tagging/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/lib/xblock/test/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /cms/pytest.ini: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/pytest.ini -------------------------------------------------------------------------------- /cms/startup.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/startup.py -------------------------------------------------------------------------------- /cms/static/cms/js/main.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/static/cms/js/main.js -------------------------------------------------------------------------------- /cms/static/common: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/static/common -------------------------------------------------------------------------------- /cms/static/edx-ui-toolkit: -------------------------------------------------------------------------------- 1 | ../../common/static/edx-ui-toolkit -------------------------------------------------------------------------------- /cms/static/js/base.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/static/js/base.js -------------------------------------------------------------------------------- /cms/static/js/index.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/static/js/index.js -------------------------------------------------------------------------------- /cms/static/js/sock.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/static/js/sock.js -------------------------------------------------------------------------------- /cms/static/sass/.gitignore: -------------------------------------------------------------------------------- 1 | *.css 2 | -------------------------------------------------------------------------------- /cms/static/templates: -------------------------------------------------------------------------------- 1 | ../templates/js -------------------------------------------------------------------------------- /cms/static/xmodule_js: -------------------------------------------------------------------------------- 1 | ../../xmodule/js -------------------------------------------------------------------------------- /cms/templates/404.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/404.html -------------------------------------------------------------------------------- /cms/templates/500.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/500.html -------------------------------------------------------------------------------- /cms/templates/base.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/base.html -------------------------------------------------------------------------------- /cms/templates/error.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/error.html -------------------------------------------------------------------------------- /cms/templates/export.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/export.html -------------------------------------------------------------------------------- /cms/templates/import.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/import.html -------------------------------------------------------------------------------- /cms/templates/index.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/templates/index.html -------------------------------------------------------------------------------- /cms/templates/js/mock/mock-modal.underscore: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /cms/urls.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/urls.py -------------------------------------------------------------------------------- /cms/urls_dev.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/urls_dev.py -------------------------------------------------------------------------------- /cms/wsgi.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/cms/wsgi.py -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/codecov.yml -------------------------------------------------------------------------------- /common/.gitignore: -------------------------------------------------------------------------------- 1 | jasmine_test_runner.html 2 | -------------------------------------------------------------------------------- /common/README.rst: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/common/README.rst -------------------------------------------------------------------------------- /common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_action_state/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_action_state/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_action_state/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/rest_api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/rest_api/v1/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/rest_api/v1/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/course_modes/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/database_fixups/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/management/commands/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/rest_api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/rest_api/v1/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/rest_api/v1/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/entitlements/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/pipeline_mako/helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/pipeline_mako/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/split_modulestore_django/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/split_modulestore_django/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/split_modulestore_django/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/static_replace/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/static_replace/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/static_replace/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/static_replace/test/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/status/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/status/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/student/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | Student app helpers and settings 3 | """ 4 | -------------------------------------------------------------------------------- /common/djangoapps/student/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/student/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/student/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/student/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/student/tests/email/test.txt: -------------------------------------------------------------------------------- 1 | Test body. 2 | -------------------------------------------------------------------------------- /common/djangoapps/student/tests/email/test_subject.txt: -------------------------------------------------------------------------------- 1 | Test subject. 2 | -------------------------------------------------------------------------------- /common/djangoapps/terrain/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/terrain/stubs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/terrain/stubs/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/api/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/saml_configuration/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/saml_configuration/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/samlproviderconfig/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/samlproviderconfig/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/samlproviderdata/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/samlproviderdata/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/tests/data/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/tests/data/lti_garbage.txt: -------------------------------------------------------------------------------- 1 | some=garbage&values=provided -------------------------------------------------------------------------------- /common/djangoapps/third_party_auth/tests/specs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/backends/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/management/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/track/views/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/util/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/util/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/util/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/util/tests/mixins/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/xblock_django/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/xblock_django/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/xblock_django/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/xblock_django/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/djangoapps/xblock_django/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/static/.gitignore: -------------------------------------------------------------------------------- 1 | xmodule 2 | -------------------------------------------------------------------------------- /common/static/sass/bourbon/settings/_asset-pipeline.scss: -------------------------------------------------------------------------------- 1 | $asset-pipeline: false !default; 2 | -------------------------------------------------------------------------------- /common/static/sass/bourbon/settings/_px-to-em.scss: -------------------------------------------------------------------------------- 1 | $em-base: 16px !default; 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/accountactivation/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/accountrecovery/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/emailchange/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/emailchangeconfirmation/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/proctoringrequirements/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/templates/student/edx_ace/recoveryemailcreate/email/from_name.txt: -------------------------------------------------------------------------------- 1 | {{ platform_name }} 2 | -------------------------------------------------------------------------------- /common/test/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/test/conftest.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alinkon0207/OpenAI_LMS/HEAD/common/test/conftest.py -------------------------------------------------------------------------------- /common/test/data/2014/info/handouts.html: -------------------------------------------------------------------------------- 1 |static 463139
-------------------------------------------------------------------------------- /common/test/data/2014_Uni/policies/assets.json: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /common/test/data/aside/static/handouts/sample_handout.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/test/data/aside/static/sample_static.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/test/data/aside/tabs/resources.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/test/data/aside/tabs/syllabus.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /common/test/data/capa/prog1.py: -------------------------------------------------------------------------------- 1 | # prog1 2 | -------------------------------------------------------------------------------- /common/test/data/capa/prog3.py: -------------------------------------------------------------------------------- 1 | # prog3 2 | -------------------------------------------------------------------------------- /common/test/data/conditional_and_poll/about/2013_Spring/prerequisites.html: -------------------------------------------------------------------------------- 1 | None 2 | -------------------------------------------------------------------------------- /common/test/data/conditional_and_poll/course.xml: -------------------------------------------------------------------------------- 1 | roots/2013_Spring.xml -------------------------------------------------------------------------------- /common/test/data/course_after_rename/assets/assets.xml: -------------------------------------------------------------------------------- 1 |static 463139
-------------------------------------------------------------------------------- /common/test/data/manual-testing-complete/word_cloud/5d607a74f7214eaa92079c3195e0badb.xml: -------------------------------------------------------------------------------- 1 |