diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/.buildinfo b/docs/.buildinfo new file mode 100644 index 00000000..12b316e7 --- /dev/null +++ b/docs/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: d5af6afb6ef7be9ec89bcaac31fe5479 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 00000000..4d87e0a9 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +docs.codio.com diff --git a/docs/_images/BehaviorInsightsDashboard.png b/docs/_images/BehaviorInsightsDashboard.png new file mode 100644 index 00000000..02f69052 Binary files /dev/null and b/docs/_images/BehaviorInsightsDashboard.png differ diff --git a/docs/_images/BehaviorInsightsNoData.png b/docs/_images/BehaviorInsightsNoData.png new file mode 100644 index 00000000..8f0895dd Binary files /dev/null and b/docs/_images/BehaviorInsightsNoData.png differ diff --git a/docs/_images/BehaviorInsightsPlayback.png b/docs/_images/BehaviorInsightsPlayback.png new file mode 100644 index 00000000..7a6c241f Binary files /dev/null and b/docs/_images/BehaviorInsightsPlayback.png differ diff --git a/docs/_images/BehaviorInsightsStudentProgressIndicator.png b/docs/_images/BehaviorInsightsStudentProgressIndicator.png new file mode 100644 index 00000000..4bc85c54 Binary files /dev/null and b/docs/_images/BehaviorInsightsStudentProgressIndicator.png differ diff --git a/docs/_images/BehaviorInsightsToggleV2.png b/docs/_images/BehaviorInsightsToggleV2.png new file mode 100644 index 00000000..85fdeef9 Binary files /dev/null and b/docs/_images/BehaviorInsightsToggleV2.png differ diff --git a/docs/_images/BehaviorInsights_Configure_CodingVsDebugging.png b/docs/_images/BehaviorInsights_Configure_CodingVsDebugging.png new file mode 100644 index 00000000..34fddf67 Binary files /dev/null and b/docs/_images/BehaviorInsights_Configure_CodingVsDebugging.png differ diff --git a/docs/_images/BehaviorInsights_Configure_ExternalPastesV2.png b/docs/_images/BehaviorInsights_Configure_ExternalPastesV2.png new file mode 100644 index 00000000..16dedf8c Binary files /dev/null and b/docs/_images/BehaviorInsights_Configure_ExternalPastesV2.png differ diff --git a/docs/_images/BehaviorInsights_Configure_InsertionsVsDeletions.png b/docs/_images/BehaviorInsights_Configure_InsertionsVsDeletions.png new file mode 100644 index 00000000..0d33e254 Binary files /dev/null and b/docs/_images/BehaviorInsights_Configure_InsertionsVsDeletions.png differ diff --git a/docs/_images/BehaviorInsights_Configure_RateOfEdits.png b/docs/_images/BehaviorInsights_Configure_RateOfEdits.png new file mode 100644 index 00000000..c7a845c9 Binary files /dev/null and b/docs/_images/BehaviorInsights_Configure_RateOfEdits.png differ diff --git a/docs/_images/BehaviorInsights_Configure_TimeSpent.png b/docs/_images/BehaviorInsights_Configure_TimeSpent.png new file mode 100644 index 00000000..49c1a076 Binary files /dev/null and b/docs/_images/BehaviorInsights_Configure_TimeSpent.png differ diff --git a/docs/_images/CodePlayback1.gif b/docs/_images/CodePlayback1.gif new file mode 100644 index 00000000..3ccf5a35 Binary files /dev/null and b/docs/_images/CodePlayback1.gif differ diff --git a/docs/_images/CodePlayback2.gif b/docs/_images/CodePlayback2.gif new file mode 100644 index 00000000..37cb4a74 Binary files /dev/null and b/docs/_images/CodePlayback2.gif differ diff --git a/docs/_images/D2LScreen2.png b/docs/_images/D2LScreen2.png new file mode 100644 index 00000000..9ed8e7d4 Binary files /dev/null and b/docs/_images/D2LScreen2.png differ diff --git a/docs/_images/D2Lconnectassignment.png b/docs/_images/D2Lconnectassignment.png new file mode 100644 index 00000000..ce54a9d7 Binary files /dev/null and b/docs/_images/D2Lconnectassignment.png differ diff --git a/docs/_images/D2Lscreenone.png b/docs/_images/D2Lscreenone.png new file mode 100644 index 00000000..f661f2bb Binary files /dev/null and b/docs/_images/D2Lscreenone.png differ diff --git a/docs/_images/DisconnectFromlib.png b/docs/_images/DisconnectFromlib.png new file mode 100644 index 00000000..ee08d815 Binary files /dev/null and b/docs/_images/DisconnectFromlib.png differ diff --git a/docs/_images/GitHub1.png b/docs/_images/GitHub1.png new file mode 100644 index 00000000..fb9759ec Binary files /dev/null and b/docs/_images/GitHub1.png differ diff --git a/docs/_images/Github2.png b/docs/_images/Github2.png new file mode 100644 index 00000000..3221b028 Binary files /dev/null and b/docs/_images/Github2.png differ diff --git a/docs/_images/JavaVisualizerExample.png b/docs/_images/JavaVisualizerExample.png new file mode 100644 index 00000000..421ec802 Binary files /dev/null and b/docs/_images/JavaVisualizerExample.png differ diff --git a/docs/_images/LMS-Unit-URL.png b/docs/_images/LMS-Unit-URL.png new file mode 100644 index 00000000..429ebd29 Binary files /dev/null and b/docs/_images/LMS-Unit-URL.png differ diff --git a/docs/_images/LTIintegrationinfo.png b/docs/_images/LTIintegrationinfo.png new file mode 100644 index 00000000..f5096fa8 Binary files /dev/null and b/docs/_images/LTIintegrationinfo.png differ diff --git a/docs/_images/NewRepo.png b/docs/_images/NewRepo.png new file mode 100644 index 00000000..4c04495d Binary files /dev/null and b/docs/_images/NewRepo.png differ diff --git a/docs/_images/ParametersTab.png b/docs/_images/ParametersTab.png new file mode 100644 index 00000000..aa9948d5 Binary files /dev/null and b/docs/_images/ParametersTab.png differ diff --git a/docs/_images/PythonVisualizerExample.png b/docs/_images/PythonVisualizerExample.png new file mode 100644 index 00000000..e97188f6 Binary files /dev/null and b/docs/_images/PythonVisualizerExample.png differ diff --git a/docs/_images/RemoteConfig.png b/docs/_images/RemoteConfig.png new file mode 100644 index 00000000..558355c3 Binary files /dev/null and b/docs/_images/RemoteConfig.png differ diff --git a/docs/_images/RemoteConfig2.png b/docs/_images/RemoteConfig2.png new file mode 100644 index 00000000..0a816a39 Binary files /dev/null and b/docs/_images/RemoteConfig2.png differ diff --git a/docs/_images/RemoteMenu.png b/docs/_images/RemoteMenu.png new file mode 100644 index 00000000..88f57862 Binary files /dev/null and b/docs/_images/RemoteMenu.png differ diff --git a/docs/_images/RepoConfig.png b/docs/_images/RepoConfig.png new file mode 100644 index 00000000..d9e40f64 Binary files /dev/null and b/docs/_images/RepoConfig.png differ diff --git a/docs/_images/RepoURL.png b/docs/_images/RepoURL.png new file mode 100644 index 00000000..99c856b9 Binary files /dev/null and b/docs/_images/RepoURL.png differ diff --git a/docs/_images/UpdateInLib.png b/docs/_images/UpdateInLib.png new file mode 100644 index 00000000..15bab567 Binary files /dev/null and b/docs/_images/UpdateInLib.png differ diff --git a/docs/_images/accesscourse.png b/docs/_images/accesscourse.png new file mode 100644 index 00000000..63ea515f Binary files /dev/null and b/docs/_images/accesscourse.png differ diff --git a/docs/_images/accessgrades.png b/docs/_images/accessgrades.png new file mode 100644 index 00000000..16e0cf2a Binary files /dev/null and b/docs/_images/accessgrades.png differ diff --git a/docs/_images/account_billing.png b/docs/_images/account_billing.png new file mode 100644 index 00000000..140d9c7d Binary files /dev/null and b/docs/_images/account_billing.png differ diff --git a/docs/_images/actionarea.png b/docs/_images/actionarea.png new file mode 100644 index 00000000..20ca11d4 Binary files /dev/null and b/docs/_images/actionarea.png differ diff --git a/docs/_images/add-external-tool.png b/docs/_images/add-external-tool.png new file mode 100644 index 00000000..1be77cfb Binary files /dev/null and b/docs/_images/add-external-tool.png differ diff --git a/docs/_images/add_assessment.png b/docs/_images/add_assessment.png new file mode 100644 index 00000000..bac015f2 Binary files /dev/null and b/docs/_images/add_assessment.png differ diff --git a/docs/_images/addcourse.png b/docs/_images/addcourse.png new file mode 100644 index 00000000..5a9301ed Binary files /dev/null and b/docs/_images/addcourse.png differ diff --git a/docs/_images/addfromexist.png b/docs/_images/addfromexist.png new file mode 100644 index 00000000..70ab8dc9 Binary files /dev/null and b/docs/_images/addfromexist.png differ diff --git a/docs/_images/addlti13app.png b/docs/_images/addlti13app.png new file mode 100644 index 00000000..9e0a6002 Binary files /dev/null and b/docs/_images/addlti13app.png differ diff --git a/docs/_images/addlti13integration.png b/docs/_images/addlti13integration.png new file mode 100644 index 00000000..635e4aa2 Binary files /dev/null and b/docs/_images/addlti13integration.png differ diff --git a/docs/_images/addresource.png b/docs/_images/addresource.png new file mode 100644 index 00000000..b6945cb1 Binary files /dev/null and b/docs/_images/addresource.png differ diff --git a/docs/_images/addstudents.png b/docs/_images/addstudents.png new file mode 100644 index 00000000..80c8b15a Binary files /dev/null and b/docs/_images/addstudents.png differ diff --git a/docs/_images/adjusted.png b/docs/_images/adjusted.png new file mode 100644 index 00000000..7c711546 Binary files /dev/null and b/docs/_images/adjusted.png differ diff --git a/docs/_images/announcebanner.png b/docs/_images/announcebanner.png new file mode 100644 index 00000000..8befcdd8 Binary files /dev/null and b/docs/_images/announcebanner.png differ diff --git a/docs/_images/announcement.png b/docs/_images/announcement.png new file mode 100644 index 00000000..1c14177e Binary files /dev/null and b/docs/_images/announcement.png differ diff --git a/docs/_images/appcenter.png b/docs/_images/appcenter.png new file mode 100644 index 00000000..7a1df3b0 Binary files /dev/null and b/docs/_images/appcenter.png differ diff --git a/docs/_images/appsetup.png b/docs/_images/appsetup.png new file mode 100644 index 00000000..575f90f6 Binary files /dev/null and b/docs/_images/appsetup.png differ diff --git a/docs/_images/archive_student.png b/docs/_images/archive_student.png new file mode 100644 index 00000000..67fcecd2 Binary files /dev/null and b/docs/_images/archive_student.png differ diff --git a/docs/_images/asignmentsettings.png b/docs/_images/asignmentsettings.png new file mode 100644 index 00000000..c30e8294 Binary files /dev/null and b/docs/_images/asignmentsettings.png differ diff --git a/docs/_images/assessment-data-export.png b/docs/_images/assessment-data-export.png new file mode 100644 index 00000000..2a0bf290 Binary files /dev/null and b/docs/_images/assessment-data-export.png differ diff --git a/docs/_images/assessment-library-selection-menu.png b/docs/_images/assessment-library-selection-menu.png new file mode 100644 index 00000000..143bda13 Binary files /dev/null and b/docs/_images/assessment-library-selection-menu.png differ diff --git a/docs/_images/assessment-library-selection.png b/docs/_images/assessment-library-selection.png new file mode 100644 index 00000000..217ee28a Binary files /dev/null and b/docs/_images/assessment-library-selection.png differ diff --git a/docs/_images/assessment-save-to-library.png b/docs/_images/assessment-save-to-library.png new file mode 100644 index 00000000..d7365072 Binary files /dev/null and b/docs/_images/assessment-save-to-library.png differ diff --git a/docs/_images/assessment_act_exec_custom.png b/docs/_images/assessment_act_exec_custom.png new file mode 100644 index 00000000..9e6edf7b Binary files /dev/null and b/docs/_images/assessment_act_exec_custom.png differ diff --git a/docs/_images/assessment_act_exec_pycodestyle.png b/docs/_images/assessment_act_exec_pycodestyle.png new file mode 100644 index 00000000..9c38473f Binary files /dev/null and b/docs/_images/assessment_act_exec_pycodestyle.png differ diff --git a/docs/_images/assessment_autofree_exec.png b/docs/_images/assessment_autofree_exec.png new file mode 100644 index 00000000..e73e4952 Binary files /dev/null and b/docs/_images/assessment_autofree_exec.png differ diff --git a/docs/_images/assessment_files.png b/docs/_images/assessment_files.png new file mode 100644 index 00000000..43198ad3 Binary files /dev/null and b/docs/_images/assessment_files.png differ diff --git a/docs/_images/assessment_fitb_exec.png b/docs/_images/assessment_fitb_exec.png new file mode 100644 index 00000000..ade5cc57 Binary files /dev/null and b/docs/_images/assessment_fitb_exec.png differ diff --git a/docs/_images/assessment_fitb_grading.png b/docs/_images/assessment_fitb_grading.png new file mode 100644 index 00000000..6542bcf1 Binary files /dev/null and b/docs/_images/assessment_fitb_grading.png differ diff --git a/docs/_images/assessment_free_general.png b/docs/_images/assessment_free_general.png new file mode 100644 index 00000000..921a4025 Binary files /dev/null and b/docs/_images/assessment_free_general.png differ diff --git a/docs/_images/assessment_free_grading.png b/docs/_images/assessment_free_grading.png new file mode 100644 index 00000000..42365696 Binary files /dev/null and b/docs/_images/assessment_free_grading.png differ diff --git a/docs/_images/assessment_gb_grade.png b/docs/_images/assessment_gb_grade.png new file mode 100644 index 00000000..2876ffc8 Binary files /dev/null and b/docs/_images/assessment_gb_grade.png differ diff --git a/docs/_images/assessment_gb_opengb.png b/docs/_images/assessment_gb_opengb.png new file mode 100644 index 00000000..a69f2de2 Binary files /dev/null and b/docs/_images/assessment_gb_opengb.png differ diff --git a/docs/_images/assessment_gb_rubric.png b/docs/_images/assessment_gb_rubric.png new file mode 100644 index 00000000..c767878e Binary files /dev/null and b/docs/_images/assessment_gb_rubric.png differ diff --git a/docs/_images/assessment_general.png b/docs/_images/assessment_general.png new file mode 100644 index 00000000..efb7103b Binary files /dev/null and b/docs/_images/assessment_general.png differ diff --git a/docs/_images/assessment_gradebook_general.png b/docs/_images/assessment_gradebook_general.png new file mode 100644 index 00000000..1918fac8 Binary files /dev/null and b/docs/_images/assessment_gradebook_general.png differ diff --git a/docs/_images/assessment_gradebook_grading.png b/docs/_images/assessment_gradebook_grading.png new file mode 100644 index 00000000..99ff44df Binary files /dev/null and b/docs/_images/assessment_gradebook_grading.png differ diff --git a/docs/_images/assessment_grading.png b/docs/_images/assessment_grading.png new file mode 100644 index 00000000..95927086 Binary files /dev/null and b/docs/_images/assessment_grading.png differ diff --git a/docs/_images/assessment_mc_exec.png b/docs/_images/assessment_mc_exec.png new file mode 100644 index 00000000..859db428 Binary files /dev/null and b/docs/_images/assessment_mc_exec.png differ diff --git a/docs/_images/assessment_mc_general.png b/docs/_images/assessment_mc_general.png new file mode 100644 index 00000000..5bb4c485 Binary files /dev/null and b/docs/_images/assessment_mc_general.png differ diff --git a/docs/_images/assessment_mc_grading.png b/docs/_images/assessment_mc_grading.png new file mode 100644 index 00000000..203e3eb2 Binary files /dev/null and b/docs/_images/assessment_mc_grading.png differ diff --git a/docs/_images/assessment_metadata.png b/docs/_images/assessment_metadata.png new file mode 100644 index 00000000..03d866af Binary files /dev/null and b/docs/_images/assessment_metadata.png differ diff --git a/docs/_images/assessment_parsons_exec.png b/docs/_images/assessment_parsons_exec.png new file mode 100644 index 00000000..16797d8d Binary files /dev/null and b/docs/_images/assessment_parsons_exec.png differ diff --git a/docs/_images/assessment_sct_check.png b/docs/_images/assessment_sct_check.png new file mode 100644 index 00000000..6a36c062 Binary files /dev/null and b/docs/_images/assessment_sct_check.png differ diff --git a/docs/_images/assessment_sct_execution.png b/docs/_images/assessment_sct_execution.png new file mode 100644 index 00000000..1a84241d Binary files /dev/null and b/docs/_images/assessment_sct_execution.png differ diff --git a/docs/_images/assessment_sct_grading.png b/docs/_images/assessment_sct_grading.png new file mode 100644 index 00000000..c976105e Binary files /dev/null and b/docs/_images/assessment_sct_grading.png differ diff --git a/docs/_images/assessment_sn_exec.png b/docs/_images/assessment_sn_exec.png new file mode 100644 index 00000000..9261c3d9 Binary files /dev/null and b/docs/_images/assessment_sn_exec.png differ diff --git a/docs/_images/assessment_sn_general.png b/docs/_images/assessment_sn_general.png new file mode 100644 index 00000000..f1432c52 Binary files /dev/null and b/docs/_images/assessment_sn_general.png differ diff --git a/docs/_images/assessment_sn_grading.png b/docs/_images/assessment_sn_grading.png new file mode 100644 index 00000000..bd1ef4eb Binary files /dev/null and b/docs/_images/assessment_sn_grading.png differ diff --git a/docs/_images/assessment_undelete.png b/docs/_images/assessment_undelete.png new file mode 100644 index 00000000..7026f582 Binary files /dev/null and b/docs/_images/assessment_undelete.png differ diff --git a/docs/_images/assessmentpoints.png b/docs/_images/assessmentpoints.png new file mode 100644 index 00000000..0cbcfa99 Binary files /dev/null and b/docs/_images/assessmentpoints.png differ diff --git a/docs/_images/assessments-fitb1.png b/docs/_images/assessments-fitb1.png new file mode 100644 index 00000000..0de7552f Binary files /dev/null and b/docs/_images/assessments-fitb1.png differ diff --git a/docs/_images/assessments-fitb2.png b/docs/_images/assessments-fitb2.png new file mode 100644 index 00000000..3bf8a8be Binary files /dev/null and b/docs/_images/assessments-fitb2.png differ diff --git a/docs/_images/assessmenttoken.png b/docs/_images/assessmenttoken.png new file mode 100644 index 00000000..49eafae4 Binary files /dev/null and b/docs/_images/assessmenttoken.png differ diff --git a/docs/_images/assignment-comments.png b/docs/_images/assignment-comments.png new file mode 100644 index 00000000..c80d03c2 Binary files /dev/null and b/docs/_images/assignment-comments.png differ diff --git a/docs/_images/assignmentpublish.png b/docs/_images/assignmentpublish.png new file mode 100644 index 00000000..19bc7dda Binary files /dev/null and b/docs/_images/assignmentpublish.png differ diff --git a/docs/_images/autoComplete.png b/docs/_images/autoComplete.png new file mode 100644 index 00000000..9aec0195 Binary files /dev/null and b/docs/_images/autoComplete.png differ diff --git a/docs/_images/autograde-test.png b/docs/_images/autograde-test.png new file mode 100644 index 00000000..c89b7284 Binary files /dev/null and b/docs/_images/autograde-test.png differ diff --git a/docs/_images/averagecourse.png b/docs/_images/averagecourse.png new file mode 100644 index 00000000..d0ff5647 Binary files /dev/null and b/docs/_images/averagecourse.png differ diff --git a/docs/_images/backpack.png b/docs/_images/backpack.png new file mode 100644 index 00000000..6de72388 Binary files /dev/null and b/docs/_images/backpack.png differ diff --git a/docs/_images/bloomsTax.png b/docs/_images/bloomsTax.png new file mode 100644 index 00000000..367072ad Binary files /dev/null and b/docs/_images/bloomsTax.png differ diff --git a/docs/_images/box_info.png b/docs/_images/box_info.png new file mode 100644 index 00000000..268b72fb Binary files /dev/null and b/docs/_images/box_info.png differ diff --git a/docs/_images/button.png b/docs/_images/button.png new file mode 100644 index 00000000..d0cb7807 Binary files /dev/null and b/docs/_images/button.png differ diff --git a/docs/_images/call.png b/docs/_images/call.png new file mode 100644 index 00000000..5275b887 Binary files /dev/null and b/docs/_images/call.png differ diff --git a/docs/_images/canvas-global.png b/docs/_images/canvas-global.png new file mode 100644 index 00000000..9e08deb4 Binary files /dev/null and b/docs/_images/canvas-global.png differ diff --git a/docs/_images/canvas-submission-type.png b/docs/_images/canvas-submission-type.png new file mode 100644 index 00000000..fbdbdcbf Binary files /dev/null and b/docs/_images/canvas-submission-type.png differ diff --git a/docs/_images/canvasJWK.png b/docs/_images/canvasJWK.png new file mode 100644 index 00000000..2f8aa07c Binary files /dev/null and b/docs/_images/canvasJWK.png differ diff --git a/docs/_images/canvas_url.png b/docs/_images/canvas_url.png new file mode 100644 index 00000000..d1d10c33 Binary files /dev/null and b/docs/_images/canvas_url.png differ diff --git a/docs/_images/canvasadvantage.png b/docs/_images/canvasadvantage.png new file mode 100644 index 00000000..c136ee1b Binary files /dev/null and b/docs/_images/canvasadvantage.png differ diff --git a/docs/_images/canvasassignment.png b/docs/_images/canvasassignment.png new file mode 100644 index 00000000..e3585b76 Binary files /dev/null and b/docs/_images/canvasassignment.png differ diff --git a/docs/_images/canvasdeployment.png b/docs/_images/canvasdeployment.png new file mode 100644 index 00000000..0867aad8 Binary files /dev/null and b/docs/_images/canvasdeployment.png differ diff --git a/docs/_images/canvasdetails.png b/docs/_images/canvasdetails.png new file mode 100644 index 00000000..ee40decf Binary files /dev/null and b/docs/_images/canvasdetails.png differ diff --git a/docs/_images/canvasdeveloperkey.png b/docs/_images/canvasdeveloperkey.png new file mode 100644 index 00000000..840ddc4e Binary files /dev/null and b/docs/_images/canvasdeveloperkey.png differ diff --git a/docs/_images/canvaseditorbutton.png b/docs/_images/canvaseditorbutton.png new file mode 100644 index 00000000..b6bbc2b0 Binary files /dev/null and b/docs/_images/canvaseditorbutton.png differ diff --git a/docs/_images/canvaslinkselect.png b/docs/_images/canvaslinkselect.png new file mode 100644 index 00000000..02d3ce63 Binary files /dev/null and b/docs/_images/canvaslinkselect.png differ diff --git a/docs/_images/canvasnavigation.png b/docs/_images/canvasnavigation.png new file mode 100644 index 00000000..85b1b82b Binary files /dev/null and b/docs/_images/canvasnavigation.png differ diff --git a/docs/_images/canvasplacements.png b/docs/_images/canvasplacements.png new file mode 100644 index 00000000..c9d98ea0 Binary files /dev/null and b/docs/_images/canvasplacements.png differ diff --git a/docs/_images/canvasplatform.png b/docs/_images/canvasplatform.png new file mode 100644 index 00000000..96cd058b Binary files /dev/null and b/docs/_images/canvasplatform.png differ diff --git a/docs/_images/change.png b/docs/_images/change.png new file mode 100644 index 00000000..4c8a3453 Binary files /dev/null and b/docs/_images/change.png differ diff --git a/docs/_images/changereleasegrades.png b/docs/_images/changereleasegrades.png new file mode 100644 index 00000000..d765506a Binary files /dev/null and b/docs/_images/changereleasegrades.png differ diff --git a/docs/_images/chrome-incognito.png b/docs/_images/chrome-incognito.png new file mode 100644 index 00000000..29731d7c Binary files /dev/null and b/docs/_images/chrome-incognito.png differ diff --git a/docs/_images/chromecookies.png b/docs/_images/chromecookies.png new file mode 100644 index 00000000..7673c0d6 Binary files /dev/null and b/docs/_images/chromecookies.png differ diff --git a/docs/_images/class_export.png b/docs/_images/class_export.png new file mode 100644 index 00000000..b1ab0fc2 Binary files /dev/null and b/docs/_images/class_export.png differ diff --git a/docs/_images/class_exportlinks.png b/docs/_images/class_exportlinks.png new file mode 100644 index 00000000..d92869f8 Binary files /dev/null and b/docs/_images/class_exportlinks.png differ diff --git a/docs/_images/class_lti_export.png b/docs/_images/class_lti_export.png new file mode 100644 index 00000000..beffee51 Binary files /dev/null and b/docs/_images/class_lti_export.png differ diff --git a/docs/_images/classcontacturl.png b/docs/_images/classcontacturl.png new file mode 100644 index 00000000..072948c7 Binary files /dev/null and b/docs/_images/classcontacturl.png differ diff --git a/docs/_images/cloneclass.png b/docs/_images/cloneclass.png new file mode 100644 index 00000000..1d7d6fdb Binary files /dev/null and b/docs/_images/cloneclass.png differ diff --git a/docs/_images/codecommentguides.png b/docs/_images/codecommentguides.png new file mode 100644 index 00000000..be97c768 Binary files /dev/null and b/docs/_images/codecommentguides.png differ diff --git a/docs/_images/codiofeedback.png b/docs/_images/codiofeedback.png new file mode 100644 index 00000000..5eb197f8 Binary files /dev/null and b/docs/_images/codiofeedback.png differ diff --git a/docs/_images/codioignore.png b/docs/_images/codioignore.png new file mode 100644 index 00000000..37f6da2c Binary files /dev/null and b/docs/_images/codioignore.png differ diff --git a/docs/_images/codiolti13settings.png b/docs/_images/codiolti13settings.png new file mode 100644 index 00000000..9a7e5aee Binary files /dev/null and b/docs/_images/codiolti13settings.png differ diff --git a/docs/_images/codiomenu.png b/docs/_images/codiomenu.png new file mode 100644 index 00000000..4585cf10 Binary files /dev/null and b/docs/_images/codiomenu.png differ diff --git a/docs/_images/codiomenupreview.png b/docs/_images/codiomenupreview.png new file mode 100644 index 00000000..f10d1f02 Binary files /dev/null and b/docs/_images/codiomenupreview.png differ diff --git a/docs/_images/codioplatformlti1-3.png b/docs/_images/codioplatformlti1-3.png new file mode 100644 index 00000000..7482b124 Binary files /dev/null and b/docs/_images/codioplatformlti1-3.png differ diff --git a/docs/_images/codioresources.png b/docs/_images/codioresources.png new file mode 100644 index 00000000..7186aab0 Binary files /dev/null and b/docs/_images/codioresources.png differ diff --git a/docs/_images/collapsible.png b/docs/_images/collapsible.png new file mode 100644 index 00000000..7b7d4386 Binary files /dev/null and b/docs/_images/collapsible.png differ diff --git a/docs/_images/color-preview.png b/docs/_images/color-preview.png new file mode 100644 index 00000000..ddcc2b79 Binary files /dev/null and b/docs/_images/color-preview.png differ diff --git a/docs/_images/command-bar.png b/docs/_images/command-bar.png new file mode 100644 index 00000000..c9e7ee26 Binary files /dev/null and b/docs/_images/command-bar.png differ diff --git a/docs/_images/commentcode.png b/docs/_images/commentcode.png new file mode 100644 index 00000000..170998f2 Binary files /dev/null and b/docs/_images/commentcode.png differ diff --git a/docs/_images/common-cartridge.png b/docs/_images/common-cartridge.png new file mode 100644 index 00000000..92506a9e Binary files /dev/null and b/docs/_images/common-cartridge.png differ diff --git a/docs/_images/compileandrun.png b/docs/_images/compileandrun.png new file mode 100644 index 00000000..054264de Binary files /dev/null and b/docs/_images/compileandrun.png differ diff --git a/docs/_images/complete.png b/docs/_images/complete.png new file mode 100644 index 00000000..4bbcf83d Binary files /dev/null and b/docs/_images/complete.png differ diff --git a/docs/_images/consent.png b/docs/_images/consent.png new file mode 100644 index 00000000..e1ce4506 Binary files /dev/null and b/docs/_images/consent.png differ diff --git a/docs/_images/console-shared.png b/docs/_images/console-shared.png new file mode 100644 index 00000000..3ab4b4a2 Binary files /dev/null and b/docs/_images/console-shared.png differ diff --git a/docs/_images/constant_url.png b/docs/_images/constant_url.png new file mode 100644 index 00000000..49489299 Binary files /dev/null and b/docs/_images/constant_url.png differ diff --git a/docs/_images/consumersecret.png b/docs/_images/consumersecret.png new file mode 100644 index 00000000..787ef462 Binary files /dev/null and b/docs/_images/consumersecret.png differ diff --git a/docs/_images/copy_course.png b/docs/_images/copy_course.png new file mode 100644 index 00000000..ff445a6c Binary files /dev/null and b/docs/_images/copy_course.png differ diff --git a/docs/_images/copyclipboard.png b/docs/_images/copyclipboard.png new file mode 100644 index 00000000..67a4d2bc Binary files /dev/null and b/docs/_images/copyclipboard.png differ diff --git a/docs/_images/course-ipconsent.png b/docs/_images/course-ipconsent.png new file mode 100644 index 00000000..72514934 Binary files /dev/null and b/docs/_images/course-ipconsent.png differ diff --git a/docs/_images/course_assignment_id.png b/docs/_images/course_assignment_id.png new file mode 100644 index 00000000..6abacc02 Binary files /dev/null and b/docs/_images/course_assignment_id.png differ diff --git a/docs/_images/courselist.png b/docs/_images/courselist.png new file mode 100644 index 00000000..2f6b5fa0 Binary files /dev/null and b/docs/_images/courselist.png differ diff --git a/docs/_images/coursereadonly.png b/docs/_images/coursereadonly.png new file mode 100644 index 00000000..f893f6c2 Binary files /dev/null and b/docs/_images/coursereadonly.png differ diff --git a/docs/_images/courseupdatebanner2.png b/docs/_images/courseupdatebanner2.png new file mode 100644 index 00000000..4e8c6484 Binary files /dev/null and b/docs/_images/courseupdatebanner2.png differ diff --git a/docs/_images/courseupdatelist.png b/docs/_images/courseupdatelist.png new file mode 100644 index 00000000..11376198 Binary files /dev/null and b/docs/_images/courseupdatelist.png differ diff --git a/docs/_images/createassignment.png b/docs/_images/createassignment.png new file mode 100644 index 00000000..a84be369 Binary files /dev/null and b/docs/_images/createassignment.png differ diff --git a/docs/_images/createfromresources.png b/docs/_images/createfromresources.png new file mode 100644 index 00000000..a3d52d90 Binary files /dev/null and b/docs/_images/createfromresources.png differ diff --git a/docs/_images/createsharecode.png b/docs/_images/createsharecode.png new file mode 100644 index 00000000..d9e6e190 Binary files /dev/null and b/docs/_images/createsharecode.png differ diff --git a/docs/_images/crosssitetracking.png b/docs/_images/crosssitetracking.png new file mode 100644 index 00000000..06d4835c Binary files /dev/null and b/docs/_images/crosssitetracking.png differ diff --git a/docs/_images/crunch-comment.png b/docs/_images/crunch-comment.png new file mode 100644 index 00000000..e259dd89 Binary files /dev/null and b/docs/_images/crunch-comment.png differ diff --git a/docs/_images/crunch-insert.png b/docs/_images/crunch-insert.png new file mode 100644 index 00000000..9dcfaee4 Binary files /dev/null and b/docs/_images/crunch-insert.png differ diff --git a/docs/_images/crunch-label.png b/docs/_images/crunch-label.png new file mode 100644 index 00000000..e435b1c5 Binary files /dev/null and b/docs/_images/crunch-label.png differ diff --git a/docs/_images/crunch-step.png b/docs/_images/crunch-step.png new file mode 100644 index 00000000..14fc1864 Binary files /dev/null and b/docs/_images/crunch-step.png differ diff --git a/docs/_images/cursorpresences.png b/docs/_images/cursorpresences.png new file mode 100644 index 00000000..94d83c02 Binary files /dev/null and b/docs/_images/cursorpresences.png differ diff --git a/docs/_images/customscript.png b/docs/_images/customscript.png new file mode 100644 index 00000000..d95c16aa Binary files /dev/null and b/docs/_images/customscript.png differ diff --git a/docs/_images/dash.png b/docs/_images/dash.png new file mode 100644 index 00000000..5126b041 Binary files /dev/null and b/docs/_images/dash.png differ diff --git a/docs/_images/deadlineadjust.png b/docs/_images/deadlineadjust.png new file mode 100644 index 00000000..40c88654 Binary files /dev/null and b/docs/_images/deadlineadjust.png differ diff --git a/docs/_images/debug-buttons.png b/docs/_images/debug-buttons.png new file mode 100644 index 00000000..365a5ff6 Binary files /dev/null and b/docs/_images/debug-buttons.png differ diff --git a/docs/_images/debug-launch.png b/docs/_images/debug-launch.png new file mode 100644 index 00000000..5fd4ffb5 Binary files /dev/null and b/docs/_images/debug-launch.png differ diff --git a/docs/_images/debug-started.png b/docs/_images/debug-started.png new file mode 100644 index 00000000..0722a628 Binary files /dev/null and b/docs/_images/debug-started.png differ diff --git a/docs/_images/debug-target.png b/docs/_images/debug-target.png new file mode 100644 index 00000000..e9fe7a4b Binary files /dev/null and b/docs/_images/debug-target.png differ diff --git a/docs/_images/debug-targets.png b/docs/_images/debug-targets.png new file mode 100644 index 00000000..31195b32 Binary files /dev/null and b/docs/_images/debug-targets.png differ diff --git a/docs/_images/delete.png b/docs/_images/delete.png new file mode 100644 index 00000000..386bc34b Binary files /dev/null and b/docs/_images/delete.png differ diff --git a/docs/_images/deleteassignment.png b/docs/_images/deleteassignment.png new file mode 100644 index 00000000..7763f73a Binary files /dev/null and b/docs/_images/deleteassignment.png differ diff --git a/docs/_images/deletemodule.png b/docs/_images/deletemodule.png new file mode 100644 index 00000000..1510410f Binary files /dev/null and b/docs/_images/deletemodule.png differ diff --git a/docs/_images/demo-in-ide.png b/docs/_images/demo-in-ide.png new file mode 100644 index 00000000..bc314937 Binary files /dev/null and b/docs/_images/demo-in-ide.png differ diff --git a/docs/_images/deploy-basepath.png b/docs/_images/deploy-basepath.png new file mode 100644 index 00000000..6133b666 Binary files /dev/null and b/docs/_images/deploy-basepath.png differ diff --git a/docs/_images/deploy-details.png b/docs/_images/deploy-details.png new file mode 100644 index 00000000..dabe5749 Binary files /dev/null and b/docs/_images/deploy-details.png differ diff --git a/docs/_images/deploy-ftp.png b/docs/_images/deploy-ftp.png new file mode 100644 index 00000000..db22b630 Binary files /dev/null and b/docs/_images/deploy-ftp.png differ diff --git a/docs/_images/deploy-history.png b/docs/_images/deploy-history.png new file mode 100644 index 00000000..8238549a Binary files /dev/null and b/docs/_images/deploy-history.png differ diff --git a/docs/_images/deploy-menu.png b/docs/_images/deploy-menu.png new file mode 100644 index 00000000..35af30a8 Binary files /dev/null and b/docs/_images/deploy-menu.png differ diff --git a/docs/_images/deploy-nj.png b/docs/_images/deploy-nj.png new file mode 100644 index 00000000..d40bb658 Binary files /dev/null and b/docs/_images/deploy-nj.png differ diff --git a/docs/_images/deploy-rsync.png b/docs/_images/deploy-rsync.png new file mode 100644 index 00000000..8bdf28a5 Binary files /dev/null and b/docs/_images/deploy-rsync.png differ diff --git a/docs/_images/deploy-sftp.png b/docs/_images/deploy-sftp.png new file mode 100644 index 00000000..d8725578 Binary files /dev/null and b/docs/_images/deploy-sftp.png differ diff --git a/docs/_images/deploy-specific.png b/docs/_images/deploy-specific.png new file mode 100644 index 00000000..8b7c6305 Binary files /dev/null and b/docs/_images/deploy-specific.png differ diff --git a/docs/_images/desktop_connect.png b/docs/_images/desktop_connect.png new file mode 100644 index 00000000..c3c4c427 Binary files /dev/null and b/docs/_images/desktop_connect.png differ diff --git a/docs/_images/desktop_connected.png b/docs/_images/desktop_connected.png new file mode 100644 index 00000000..826faaf9 Binary files /dev/null and b/docs/_images/desktop_connected.png differ diff --git a/docs/_images/desktop_options.png b/docs/_images/desktop_options.png new file mode 100644 index 00000000..5bee27c9 Binary files /dev/null and b/docs/_images/desktop_options.png differ diff --git a/docs/_images/desktop_server.png b/docs/_images/desktop_server.png new file mode 100644 index 00000000..db1d6f4c Binary files /dev/null and b/docs/_images/desktop_server.png differ diff --git a/docs/_images/desktop_workspace.png b/docs/_images/desktop_workspace.png new file mode 100644 index 00000000..fc66db8a Binary files /dev/null and b/docs/_images/desktop_workspace.png differ diff --git a/docs/_images/desktop_worspacesettings.png b/docs/_images/desktop_worspacesettings.png new file mode 100644 index 00000000..1d36c4f4 Binary files /dev/null and b/docs/_images/desktop_worspacesettings.png differ diff --git a/docs/_images/detailcourseupdates.png b/docs/_images/detailcourseupdates.png new file mode 100644 index 00000000..55ee33d5 Binary files /dev/null and b/docs/_images/detailcourseupdates.png differ diff --git a/docs/_images/detextify.png b/docs/_images/detextify.png new file mode 100644 index 00000000..e90b15b7 Binary files /dev/null and b/docs/_images/detextify.png differ diff --git a/docs/_images/developerkeyvalues.png b/docs/_images/developerkeyvalues.png new file mode 100644 index 00000000..f1b761c9 Binary files /dev/null and b/docs/_images/developerkeyvalues.png differ diff --git a/docs/_images/df-dsk.png b/docs/_images/df-dsk.png new file mode 100644 index 00000000..fd7a6cee Binary files /dev/null and b/docs/_images/df-dsk.png differ diff --git a/docs/_images/directions.png b/docs/_images/directions.png new file mode 100644 index 00000000..6e2ac8a4 Binary files /dev/null and b/docs/_images/directions.png differ diff --git a/docs/_images/disconnect.png b/docs/_images/disconnect.png new file mode 100644 index 00000000..366aaf6b Binary files /dev/null and b/docs/_images/disconnect.png differ diff --git a/docs/_images/disconnectcourse.png b/docs/_images/disconnectcourse.png new file mode 100644 index 00000000..61cc64aa Binary files /dev/null and b/docs/_images/disconnectcourse.png differ diff --git a/docs/_images/distractors.png b/docs/_images/distractors.png new file mode 100644 index 00000000..68412093 Binary files /dev/null and b/docs/_images/distractors.png differ diff --git a/docs/_images/doubleTags.png b/docs/_images/doubleTags.png new file mode 100644 index 00000000..264c3e8d Binary files /dev/null and b/docs/_images/doubleTags.png differ diff --git a/docs/_images/download-csv-mark-assignment-complete.png b/docs/_images/download-csv-mark-assignment-complete.png new file mode 100644 index 00000000..107bf804 Binary files /dev/null and b/docs/_images/download-csv-mark-assignment-complete.png differ diff --git a/docs/_images/downloadfile.png b/docs/_images/downloadfile.png new file mode 100644 index 00000000..6f80bcb0 Binary files /dev/null and b/docs/_images/downloadfile.png differ diff --git a/docs/_images/driver.png b/docs/_images/driver.png new file mode 100644 index 00000000..1c2f6c78 Binary files /dev/null and b/docs/_images/driver.png differ diff --git a/docs/_images/duplicate-assessment.png b/docs/_images/duplicate-assessment.png new file mode 100644 index 00000000..4e114982 Binary files /dev/null and b/docs/_images/duplicate-assessment.png differ diff --git a/docs/_images/dyslexicview.png b/docs/_images/dyslexicview.png new file mode 100644 index 00000000..6cce2ca3 Binary files /dev/null and b/docs/_images/dyslexicview.png differ diff --git a/docs/_images/editassessmentbutton.png b/docs/_images/editassessmentbutton.png new file mode 100644 index 00000000..2da2d5bc Binary files /dev/null and b/docs/_images/editassessmentbutton.png differ diff --git a/docs/_images/editassessmentlist.png b/docs/_images/editassessmentlist.png new file mode 100644 index 00000000..240e22e8 Binary files /dev/null and b/docs/_images/editassessmentlist.png differ diff --git a/docs/_images/editbook.png b/docs/_images/editbook.png new file mode 100644 index 00000000..3f98e7bb Binary files /dev/null and b/docs/_images/editbook.png differ diff --git a/docs/_images/editnav.png b/docs/_images/editnav.png new file mode 100644 index 00000000..6e845740 Binary files /dev/null and b/docs/_images/editnav.png differ diff --git a/docs/_images/editor-ribbon.png b/docs/_images/editor-ribbon.png new file mode 100644 index 00000000..0a11bd8a Binary files /dev/null and b/docs/_images/editor-ribbon.png differ diff --git a/docs/_images/editor.png b/docs/_images/editor.png new file mode 100644 index 00000000..e8e38b57 Binary files /dev/null and b/docs/_images/editor.png differ diff --git a/docs/_images/education-resetbtn.png b/docs/_images/education-resetbtn.png new file mode 100644 index 00000000..0780afc0 Binary files /dev/null and b/docs/_images/education-resetbtn.png differ diff --git a/docs/_images/emmet-ref.png b/docs/_images/emmet-ref.png new file mode 100644 index 00000000..cb8c5f76 Binary files /dev/null and b/docs/_images/emmet-ref.png differ diff --git a/docs/_images/enable-lti-new.png b/docs/_images/enable-lti-new.png new file mode 100644 index 00000000..c77bc080 Binary files /dev/null and b/docs/_images/enable-lti-new.png differ diff --git a/docs/_images/enable-lti.png b/docs/_images/enable-lti.png new file mode 100644 index 00000000..0a92a680 Binary files /dev/null and b/docs/_images/enable-lti.png differ diff --git a/docs/_images/enable_class_fork.png b/docs/_images/enable_class_fork.png new file mode 100644 index 00000000..929626ad Binary files /dev/null and b/docs/_images/enable_class_fork.png differ diff --git a/docs/_images/enableprogressbar.png b/docs/_images/enableprogressbar.png new file mode 100644 index 00000000..ef7ff45b Binary files /dev/null and b/docs/_images/enableprogressbar.png differ diff --git a/docs/_images/evaluate_button.png b/docs/_images/evaluate_button.png new file mode 100644 index 00000000..40179116 Binary files /dev/null and b/docs/_images/evaluate_button.png differ diff --git a/docs/_images/examproctoring.png b/docs/_images/examproctoring.png new file mode 100644 index 00000000..6a5bcd3b Binary files /dev/null and b/docs/_images/examproctoring.png differ diff --git a/docs/_images/expandedcourse.png b/docs/_images/expandedcourse.png new file mode 100644 index 00000000..f06cf9cd Binary files /dev/null and b/docs/_images/expandedcourse.png differ diff --git a/docs/_images/extendtime.png b/docs/_images/extendtime.png new file mode 100644 index 00000000..abefb4b4 Binary files /dev/null and b/docs/_images/extendtime.png differ diff --git a/docs/_images/external-tool-form.png b/docs/_images/external-tool-form.png new file mode 100644 index 00000000..f1f3254b Binary files /dev/null and b/docs/_images/external-tool-form.png differ diff --git a/docs/_images/feedback.png b/docs/_images/feedback.png new file mode 100644 index 00000000..73210396 Binary files /dev/null and b/docs/_images/feedback.png differ diff --git a/docs/_images/filter.png b/docs/_images/filter.png new file mode 100644 index 00000000..a0797310 Binary files /dev/null and b/docs/_images/filter.png differ diff --git a/docs/_images/filter_learners.png b/docs/_images/filter_learners.png new file mode 100644 index 00000000..552cdb57 Binary files /dev/null and b/docs/_images/filter_learners.png differ diff --git a/docs/_images/firefoxcookies.png b/docs/_images/firefoxcookies.png new file mode 100644 index 00000000..65b46092 Binary files /dev/null and b/docs/_images/firefoxcookies.png differ diff --git a/docs/_images/firstproject-small.png b/docs/_images/firstproject-small.png new file mode 100644 index 00000000..6f7de72a Binary files /dev/null and b/docs/_images/firstproject-small.png differ diff --git a/docs/_images/flode.png b/docs/_images/flode.png new file mode 100644 index 00000000..3cb229ed Binary files /dev/null and b/docs/_images/flode.png differ diff --git a/docs/_images/fork-clone.png b/docs/_images/fork-clone.png new file mode 100644 index 00000000..02a27403 Binary files /dev/null and b/docs/_images/fork-clone.png differ diff --git a/docs/_images/fork-ide.png b/docs/_images/fork-ide.png new file mode 100644 index 00000000..ee0e923c Binary files /dev/null and b/docs/_images/fork-ide.png differ diff --git a/docs/_images/fork_class_id.png b/docs/_images/fork_class_id.png new file mode 100644 index 00000000..8c72a7f1 Binary files /dev/null and b/docs/_images/fork_class_id.png differ diff --git a/docs/_images/freetext-grading.png b/docs/_images/freetext-grading.png new file mode 100644 index 00000000..82ce662a Binary files /dev/null and b/docs/_images/freetext-grading.png differ diff --git a/docs/_images/freetext_navigate.png b/docs/_images/freetext_navigate.png new file mode 100644 index 00000000..84db11f4 Binary files /dev/null and b/docs/_images/freetext_navigate.png differ diff --git a/docs/_images/freetextanswer.png b/docs/_images/freetextanswer.png new file mode 100644 index 00000000..93709531 Binary files /dev/null and b/docs/_images/freetextanswer.png differ diff --git a/docs/_images/freetexticon.png b/docs/_images/freetexticon.png new file mode 100644 index 00000000..ba2e9a7a Binary files /dev/null and b/docs/_images/freetexticon.png differ diff --git a/docs/_images/freezecode.png b/docs/_images/freezecode.png new file mode 100644 index 00000000..db5d0da7 Binary files /dev/null and b/docs/_images/freezecode.png differ diff --git a/docs/_images/gh_int.png b/docs/_images/gh_int.png new file mode 100644 index 00000000..cee15349 Binary files /dev/null and b/docs/_images/gh_int.png differ diff --git a/docs/_images/gh_secrets.png b/docs/_images/gh_secrets.png new file mode 100644 index 00000000..edd22f52 Binary files /dev/null and b/docs/_images/gh_secrets.png differ diff --git a/docs/_images/gh_show.png b/docs/_images/gh_show.png new file mode 100644 index 00000000..6bcd9520 Binary files /dev/null and b/docs/_images/gh_show.png differ diff --git a/docs/_images/gigaboxassignment.png b/docs/_images/gigaboxassignment.png new file mode 100644 index 00000000..f2476657 Binary files /dev/null and b/docs/_images/gigaboxassignment.png differ diff --git a/docs/_images/git-overview.png b/docs/_images/git-overview.png new file mode 100644 index 00000000..4f524c58 Binary files /dev/null and b/docs/_images/git-overview.png differ diff --git a/docs/_images/gitInit.png b/docs/_images/gitInit.png new file mode 100644 index 00000000..1e8cd141 Binary files /dev/null and b/docs/_images/gitInit.png differ diff --git a/docs/_images/github-clone-url.png b/docs/_images/github-clone-url.png new file mode 100644 index 00000000..408031a2 Binary files /dev/null and b/docs/_images/github-clone-url.png differ diff --git a/docs/_images/github-create.png b/docs/_images/github-create.png new file mode 100644 index 00000000..558b009c Binary files /dev/null and b/docs/_images/github-create.png differ diff --git a/docs/_images/github-new-repo.png b/docs/_images/github-new-repo.png new file mode 100644 index 00000000..b622db73 Binary files /dev/null and b/docs/_images/github-new-repo.png differ diff --git a/docs/_images/github-readme.png b/docs/_images/github-readme.png new file mode 100644 index 00000000..b71b4be8 Binary files /dev/null and b/docs/_images/github-readme.png differ diff --git a/docs/_images/global-search.png b/docs/_images/global-search.png new file mode 100644 index 00000000..5d80715d Binary files /dev/null and b/docs/_images/global-search.png differ diff --git a/docs/_images/globalsettings.png b/docs/_images/globalsettings.png new file mode 100644 index 00000000..8d7d7884 Binary files /dev/null and b/docs/_images/globalsettings.png differ diff --git a/docs/_images/google_classlist.png b/docs/_images/google_classlist.png new file mode 100644 index 00000000..0c1e1b3f Binary files /dev/null and b/docs/_images/google_classlist.png differ diff --git a/docs/_images/google_integrate.png b/docs/_images/google_integrate.png new file mode 100644 index 00000000..df0fd6a0 Binary files /dev/null and b/docs/_images/google_integrate.png differ diff --git a/docs/_images/graded.png b/docs/_images/graded.png new file mode 100644 index 00000000..cdba195a Binary files /dev/null and b/docs/_images/graded.png differ diff --git a/docs/_images/gradedetail.png b/docs/_images/gradedetail.png new file mode 100644 index 00000000..d2404b2a Binary files /dev/null and b/docs/_images/gradedetail.png differ diff --git a/docs/_images/gradient-preview.png b/docs/_images/gradient-preview.png new file mode 100644 index 00000000..64f9d890 Binary files /dev/null and b/docs/_images/gradient-preview.png differ diff --git a/docs/_images/grading-assign.png b/docs/_images/grading-assign.png new file mode 100644 index 00000000..35197b35 Binary files /dev/null and b/docs/_images/grading-assign.png differ diff --git a/docs/_images/grading-release.png b/docs/_images/grading-release.png new file mode 100644 index 00000000..055c8de8 Binary files /dev/null and b/docs/_images/grading-release.png differ diff --git a/docs/_images/grading-release2.png b/docs/_images/grading-release2.png new file mode 100644 index 00000000..749d065a Binary files /dev/null and b/docs/_images/grading-release2.png differ diff --git a/docs/_images/grading-unit.png b/docs/_images/grading-unit.png new file mode 100644 index 00000000..69930f42 Binary files /dev/null and b/docs/_images/grading-unit.png differ diff --git a/docs/_images/gradingqueue.png b/docs/_images/gradingqueue.png new file mode 100644 index 00000000..0959fcbf Binary files /dev/null and b/docs/_images/gradingqueue.png differ diff --git a/docs/_images/gradingweights.png b/docs/_images/gradingweights.png new file mode 100644 index 00000000..5525d9aa Binary files /dev/null and b/docs/_images/gradingweights.png differ diff --git a/docs/_images/groupwork.png b/docs/_images/groupwork.png new file mode 100644 index 00000000..e66cce9f Binary files /dev/null and b/docs/_images/groupwork.png differ diff --git a/docs/_images/guidecollapse.png b/docs/_images/guidecollapse.png new file mode 100644 index 00000000..f76c280e Binary files /dev/null and b/docs/_images/guidecollapse.png differ diff --git a/docs/_images/guidecss.png b/docs/_images/guidecss.png new file mode 100644 index 00000000..eac5373c Binary files /dev/null and b/docs/_images/guidecss.png differ diff --git a/docs/_images/guides_publish.png b/docs/_images/guides_publish.png new file mode 100644 index 00000000..4e2db131 Binary files /dev/null and b/docs/_images/guides_publish.png differ diff --git a/docs/_images/guides_vimeo.png b/docs/_images/guides_vimeo.png new file mode 100644 index 00000000..1794c271 Binary files /dev/null and b/docs/_images/guides_vimeo.png differ diff --git a/docs/_images/guides_vm.png b/docs/_images/guides_vm.png new file mode 100644 index 00000000..c42b4c7f Binary files /dev/null and b/docs/_images/guides_vm.png differ diff --git a/docs/_images/guides_youtube.png b/docs/_images/guides_youtube.png new file mode 100644 index 00000000..edb3e2ea Binary files /dev/null and b/docs/_images/guides_youtube.png differ diff --git a/docs/_images/guidesassessments.png b/docs/_images/guidesassessments.png new file mode 100644 index 00000000..98695ecb Binary files /dev/null and b/docs/_images/guidesassessments.png differ diff --git a/docs/_images/guideslayout.png b/docs/_images/guideslayout.png new file mode 100644 index 00000000..949c5585 Binary files /dev/null and b/docs/_images/guideslayout.png differ diff --git a/docs/_images/guidessettings.png b/docs/_images/guidessettings.png new file mode 100644 index 00000000..be944faf Binary files /dev/null and b/docs/_images/guidessettings.png differ diff --git a/docs/_images/guidessetup.png b/docs/_images/guidessetup.png new file mode 100644 index 00000000..b5c6ca63 Binary files /dev/null and b/docs/_images/guidessetup.png differ diff --git a/docs/_images/guioutput.png b/docs/_images/guioutput.png new file mode 100644 index 00000000..972b63e2 Binary files /dev/null and b/docs/_images/guioutput.png differ diff --git a/docs/_images/hide-av-calls.png b/docs/_images/hide-av-calls.png new file mode 100644 index 00000000..51ac3c32 Binary files /dev/null and b/docs/_images/hide-av-calls.png differ diff --git a/docs/_images/hideclipboard.png b/docs/_images/hideclipboard.png new file mode 100644 index 00000000..182ede52 Binary files /dev/null and b/docs/_images/hideclipboard.png differ diff --git a/docs/_images/incognito.png b/docs/_images/incognito.png new file mode 100644 index 00000000..4dcaea79 Binary files /dev/null and b/docs/_images/incognito.png differ diff --git a/docs/_images/install-sw-g2.png b/docs/_images/install-sw-g2.png new file mode 100644 index 00000000..5ca515f0 Binary files /dev/null and b/docs/_images/install-sw-g2.png differ diff --git a/docs/_images/intercomnotification.png b/docs/_images/intercomnotification.png new file mode 100644 index 00000000..4137aa32 Binary files /dev/null and b/docs/_images/intercomnotification.png differ diff --git a/docs/_images/intercomstart.png b/docs/_images/intercomstart.png new file mode 100644 index 00000000..31bc379a Binary files /dev/null and b/docs/_images/intercomstart.png differ diff --git a/docs/_images/invitation.png b/docs/_images/invitation.png new file mode 100644 index 00000000..28555c76 Binary files /dev/null and b/docs/_images/invitation.png differ diff --git a/docs/_images/inviteowner.png b/docs/_images/inviteowner.png new file mode 100644 index 00000000..42dab23a Binary files /dev/null and b/docs/_images/inviteowner.png differ diff --git a/docs/_images/inviteteacher.png b/docs/_images/inviteteacher.png new file mode 100644 index 00000000..1e030809 Binary files /dev/null and b/docs/_images/inviteteacher.png differ diff --git a/docs/_images/inviteteacher1.png b/docs/_images/inviteteacher1.png new file mode 100644 index 00000000..ef1fcb4c Binary files /dev/null and b/docs/_images/inviteteacher1.png differ diff --git a/docs/_images/jeroo.png b/docs/_images/jeroo.png new file mode 100644 index 00000000..9b4831c7 Binary files /dev/null and b/docs/_images/jeroo.png differ diff --git a/docs/_images/joinclass.png b/docs/_images/joinclass.png new file mode 100644 index 00000000..ddfbec55 Binary files /dev/null and b/docs/_images/joinclass.png differ diff --git a/docs/_images/junit.png b/docs/_images/junit.png new file mode 100644 index 00000000..8375efc6 Binary files /dev/null and b/docs/_images/junit.png differ diff --git a/docs/_images/junitexecution.png b/docs/_images/junitexecution.png new file mode 100644 index 00000000..3f78945e Binary files /dev/null and b/docs/_images/junitexecution.png differ diff --git a/docs/_images/junitsettings.png b/docs/_images/junitsettings.png new file mode 100644 index 00000000..9259cad3 Binary files /dev/null and b/docs/_images/junitsettings.png differ diff --git a/docs/_images/latepenalty.png b/docs/_images/latepenalty.png new file mode 100644 index 00000000..9e2b8b56 Binary files /dev/null and b/docs/_images/latepenalty.png differ diff --git a/docs/_images/launchpoint.png b/docs/_images/launchpoint.png new file mode 100644 index 00000000..2eaa96a7 Binary files /dev/null and b/docs/_images/launchpoint.png differ diff --git a/docs/_images/layouts.png b/docs/_images/layouts.png new file mode 100644 index 00000000..f46d528c Binary files /dev/null and b/docs/_images/layouts.png differ diff --git a/docs/_images/leaderboard.png b/docs/_images/leaderboard.png new file mode 100644 index 00000000..606dbcf8 Binary files /dev/null and b/docs/_images/leaderboard.png differ diff --git a/docs/_images/lexicon.png b/docs/_images/lexicon.png new file mode 100644 index 00000000..8c145bfe Binary files /dev/null and b/docs/_images/lexicon.png differ diff --git a/docs/_images/lexicon1.png b/docs/_images/lexicon1.png new file mode 100644 index 00000000..c7c618bd Binary files /dev/null and b/docs/_images/lexicon1.png differ diff --git a/docs/_images/librarypermissions.png b/docs/_images/librarypermissions.png new file mode 100644 index 00000000..5fdeeff9 Binary files /dev/null and b/docs/_images/librarypermissions.png differ diff --git a/docs/_images/librarysettings.png b/docs/_images/librarysettings.png new file mode 100644 index 00000000..2a5fd9f6 Binary files /dev/null and b/docs/_images/librarysettings.png differ diff --git a/docs/_images/librarytab.png b/docs/_images/librarytab.png new file mode 100644 index 00000000..c36b9495 Binary files /dev/null and b/docs/_images/librarytab.png differ diff --git a/docs/_images/lms_hide.png b/docs/_images/lms_hide.png new file mode 100644 index 00000000..8140c476 Binary files /dev/null and b/docs/_images/lms_hide.png differ diff --git a/docs/_images/lmssharedfeedback.png b/docs/_images/lmssharedfeedback.png new file mode 100644 index 00000000..0692e7ff Binary files /dev/null and b/docs/_images/lmssharedfeedback.png differ diff --git a/docs/_images/loginasstudent.png b/docs/_images/loginasstudent.png new file mode 100644 index 00000000..2de651cf Binary files /dev/null and b/docs/_images/loginasstudent.png differ diff --git a/docs/_images/lti-class-url.png b/docs/_images/lti-class-url.png new file mode 100644 index 00000000..e641c5b0 Binary files /dev/null and b/docs/_images/lti-class-url.png differ diff --git a/docs/_images/lti-org-fields.png b/docs/_images/lti-org-fields.png new file mode 100644 index 00000000..89651c32 Binary files /dev/null and b/docs/_images/lti-org-fields.png differ diff --git a/docs/_images/managegroups.png b/docs/_images/managegroups.png new file mode 100644 index 00000000..e7454eb0 Binary files /dev/null and b/docs/_images/managegroups.png differ diff --git a/docs/_images/mark-as-complete-time.png b/docs/_images/mark-as-complete-time.png new file mode 100644 index 00000000..19a883f6 Binary files /dev/null and b/docs/_images/mark-as-complete-time.png differ diff --git a/docs/_images/mark-as-uncomplete.png b/docs/_images/mark-as-uncomplete.png new file mode 100644 index 00000000..b927ca6f Binary files /dev/null and b/docs/_images/mark-as-uncomplete.png differ diff --git a/docs/_images/mark-complete.png b/docs/_images/mark-complete.png new file mode 100644 index 00000000..7e965ad6 Binary files /dev/null and b/docs/_images/mark-complete.png differ diff --git a/docs/_images/mathjax.png b/docs/_images/mathjax.png new file mode 100644 index 00000000..a94dde1c Binary files /dev/null and b/docs/_images/mathjax.png differ diff --git a/docs/_images/members.png b/docs/_images/members.png new file mode 100644 index 00000000..b40c03a7 Binary files /dev/null and b/docs/_images/members.png differ diff --git a/docs/_images/memberstab.png b/docs/_images/memberstab.png new file mode 100644 index 00000000..eaa3c407 Binary files /dev/null and b/docs/_images/memberstab.png differ diff --git a/docs/_images/moduleinsights.png b/docs/_images/moduleinsights.png new file mode 100644 index 00000000..841773bd Binary files /dev/null and b/docs/_images/moduleinsights.png differ diff --git a/docs/_images/modulesettings.png b/docs/_images/modulesettings.png new file mode 100644 index 00000000..d90b638d Binary files /dev/null and b/docs/_images/modulesettings.png differ diff --git a/docs/_images/myschoolorg.png b/docs/_images/myschoolorg.png new file mode 100644 index 00000000..6ac70c2f Binary files /dev/null and b/docs/_images/myschoolorg.png differ diff --git a/docs/_images/nameSearch.png b/docs/_images/nameSearch.png new file mode 100644 index 00000000..a113e3c7 Binary files /dev/null and b/docs/_images/nameSearch.png differ diff --git a/docs/_images/nameclass.png b/docs/_images/nameclass.png new file mode 100644 index 00000000..618f332d Binary files /dev/null and b/docs/_images/nameclass.png differ diff --git a/docs/_images/namelibrary.png b/docs/_images/namelibrary.png new file mode 100644 index 00000000..3fc63259 Binary files /dev/null and b/docs/_images/namelibrary.png differ diff --git a/docs/_images/new-class.png b/docs/_images/new-class.png new file mode 100644 index 00000000..dd1d1c46 Binary files /dev/null and b/docs/_images/new-class.png differ diff --git a/docs/_images/new-file.png b/docs/_images/new-file.png new file mode 100644 index 00000000..69f2e993 Binary files /dev/null and b/docs/_images/new-file.png differ diff --git a/docs/_images/newstudentdashboard.png b/docs/_images/newstudentdashboard.png new file mode 100644 index 00000000..be384e40 Binary files /dev/null and b/docs/_images/newstudentdashboard.png differ diff --git a/docs/_images/newstudentdashboard1.png b/docs/_images/newstudentdashboard1.png new file mode 100644 index 00000000..3e8037bd Binary files /dev/null and b/docs/_images/newstudentdashboard1.png differ diff --git a/docs/_images/newtoolprovider.png b/docs/_images/newtoolprovider.png new file mode 100644 index 00000000..b262e3ab Binary files /dev/null and b/docs/_images/newtoolprovider.png differ diff --git a/docs/_images/notificationdetails.png b/docs/_images/notificationdetails.png new file mode 100644 index 00000000..973efaf6 Binary files /dev/null and b/docs/_images/notificationdetails.png differ diff --git a/docs/_images/notpartial.png b/docs/_images/notpartial.png new file mode 100644 index 00000000..278c675c Binary files /dev/null and b/docs/_images/notpartial.png differ diff --git a/docs/_images/open-in-ide.png b/docs/_images/open-in-ide.png new file mode 100644 index 00000000..46eba665 Binary files /dev/null and b/docs/_images/open-in-ide.png differ diff --git a/docs/_images/openguides.png b/docs/_images/openguides.png new file mode 100644 index 00000000..d3047782 Binary files /dev/null and b/docs/_images/openguides.png differ diff --git a/docs/_images/openstudent.png b/docs/_images/openstudent.png new file mode 100644 index 00000000..0c5c2b32 Binary files /dev/null and b/docs/_images/openstudent.png differ diff --git a/docs/_images/orderclass.png b/docs/_images/orderclass.png new file mode 100644 index 00000000..5d6f69a1 Binary files /dev/null and b/docs/_images/orderclass.png differ diff --git a/docs/_images/org_integrations.png b/docs/_images/org_integrations.png new file mode 100644 index 00000000..48c5bcf5 Binary files /dev/null and b/docs/_images/org_integrations.png differ diff --git a/docs/_images/org_releasegrades.png b/docs/_images/org_releasegrades.png new file mode 100644 index 00000000..346b5606 Binary files /dev/null and b/docs/_images/org_releasegrades.png differ diff --git a/docs/_images/orgbilling.png b/docs/_images/orgbilling.png new file mode 100644 index 00000000..194b36ad Binary files /dev/null and b/docs/_images/orgbilling.png differ diff --git a/docs/_images/orgbilltab.png b/docs/_images/orgbilltab.png new file mode 100644 index 00000000..c30498e5 Binary files /dev/null and b/docs/_images/orgbilltab.png differ diff --git a/docs/_images/orgreadonly.png b/docs/_images/orgreadonly.png new file mode 100644 index 00000000..cdd07f96 Binary files /dev/null and b/docs/_images/orgreadonly.png differ diff --git a/docs/_images/orgsettingstab.png b/docs/_images/orgsettingstab.png new file mode 100644 index 00000000..012aeafc Binary files /dev/null and b/docs/_images/orgsettingstab.png differ diff --git a/docs/_images/orgtabs.png b/docs/_images/orgtabs.png new file mode 100644 index 00000000..e53c345e Binary files /dev/null and b/docs/_images/orgtabs.png differ diff --git a/docs/_images/orphanedusers.png b/docs/_images/orphanedusers.png new file mode 100644 index 00000000..ef0c25c5 Binary files /dev/null and b/docs/_images/orphanedusers.png differ diff --git a/docs/_images/owners.png b/docs/_images/owners.png new file mode 100644 index 00000000..16890a8f Binary files /dev/null and b/docs/_images/owners.png differ diff --git a/docs/_images/packs_certified.png b/docs/_images/packs_certified.png new file mode 100644 index 00000000..024df7a5 Binary files /dev/null and b/docs/_images/packs_certified.png differ diff --git a/docs/_images/packs_info.png b/docs/_images/packs_info.png new file mode 100644 index 00000000..abff632e Binary files /dev/null and b/docs/_images/packs_info.png differ diff --git a/docs/_images/page.png b/docs/_images/page.png new file mode 100644 index 00000000..5a31098d Binary files /dev/null and b/docs/_images/page.png differ diff --git a/docs/_images/panel.png b/docs/_images/panel.png new file mode 100644 index 00000000..6079eb02 Binary files /dev/null and b/docs/_images/panel.png differ diff --git a/docs/_images/param_execution.png b/docs/_images/param_execution.png new file mode 100644 index 00000000..6c65c34c Binary files /dev/null and b/docs/_images/param_execution.png differ diff --git a/docs/_images/param_instructions2.png b/docs/_images/param_instructions2.png new file mode 100644 index 00000000..8a5c9c3e Binary files /dev/null and b/docs/_images/param_instructions2.png differ diff --git a/docs/_images/parameterized2.png b/docs/_images/parameterized2.png new file mode 100644 index 00000000..0ac55396 Binary files /dev/null and b/docs/_images/parameterized2.png differ diff --git a/docs/_images/paramterSyntax.png b/docs/_images/paramterSyntax.png new file mode 100644 index 00000000..a9a49628 Binary files /dev/null and b/docs/_images/paramterSyntax.png differ diff --git a/docs/_images/parent_class.png b/docs/_images/parent_class.png new file mode 100644 index 00000000..ac5b6a95 Binary files /dev/null and b/docs/_images/parent_class.png differ diff --git a/docs/_images/parentdetails.png b/docs/_images/parentdetails.png new file mode 100644 index 00000000..a802df42 Binary files /dev/null and b/docs/_images/parentdetails.png differ diff --git a/docs/_images/partial.png b/docs/_images/partial.png new file mode 100644 index 00000000..229143d2 Binary files /dev/null and b/docs/_images/partial.png differ diff --git a/docs/_images/partialpointicon.png b/docs/_images/partialpointicon.png new file mode 100644 index 00000000..e19b5811 Binary files /dev/null and b/docs/_images/partialpointicon.png differ diff --git a/docs/_images/partialpointrubric.png b/docs/_images/partialpointrubric.png new file mode 100644 index 00000000..84316dcb Binary files /dev/null and b/docs/_images/partialpointrubric.png differ diff --git a/docs/_images/pdf_export.png b/docs/_images/pdf_export.png new file mode 100644 index 00000000..35c43964 Binary files /dev/null and b/docs/_images/pdf_export.png differ diff --git a/docs/_images/penalties.png b/docs/_images/penalties.png new file mode 100644 index 00000000..46980ba4 Binary files /dev/null and b/docs/_images/penalties.png differ diff --git a/docs/_images/penaltydashboard.png b/docs/_images/penaltydashboard.png new file mode 100644 index 00000000..60f9001d Binary files /dev/null and b/docs/_images/penaltydashboard.png differ diff --git a/docs/_images/penaltydeadline.png b/docs/_images/penaltydeadline.png new file mode 100644 index 00000000..a302ea51 Binary files /dev/null and b/docs/_images/penaltydeadline.png differ diff --git a/docs/_images/pencilcode.png b/docs/_images/pencilcode.png new file mode 100644 index 00000000..e50af915 Binary files /dev/null and b/docs/_images/pencilcode.png differ diff --git a/docs/_images/pendinginviteowner.png b/docs/_images/pendinginviteowner.png new file mode 100644 index 00000000..0ddb9d76 Binary files /dev/null and b/docs/_images/pendinginviteowner.png differ diff --git a/docs/_images/permissions-dlg.png b/docs/_images/permissions-dlg.png new file mode 100644 index 00000000..e3a3d6a8 Binary files /dev/null and b/docs/_images/permissions-dlg.png differ diff --git a/docs/_images/picker-1.png b/docs/_images/picker-1.png new file mode 100644 index 00000000..5dbe9532 Binary files /dev/null and b/docs/_images/picker-1.png differ diff --git a/docs/_images/picker-2.png b/docs/_images/picker-2.png new file mode 100644 index 00000000..d16ea7f7 Binary files /dev/null and b/docs/_images/picker-2.png differ diff --git a/docs/_images/pinned.png b/docs/_images/pinned.png new file mode 100644 index 00000000..d0e386db Binary files /dev/null and b/docs/_images/pinned.png differ diff --git a/docs/_images/plag-button.png b/docs/_images/plag-button.png new file mode 100644 index 00000000..607d237d Binary files /dev/null and b/docs/_images/plag-button.png differ diff --git a/docs/_images/plag-main-report.png b/docs/_images/plag-main-report.png new file mode 100644 index 00000000..b48d9904 Binary files /dev/null and b/docs/_images/plag-main-report.png differ diff --git a/docs/_images/plag-summary.png b/docs/_images/plag-summary.png new file mode 100644 index 00000000..36d9f904 Binary files /dev/null and b/docs/_images/plag-summary.png differ diff --git a/docs/_images/playback-filetree.png b/docs/_images/playback-filetree.png new file mode 100644 index 00000000..fea6a487 Binary files /dev/null and b/docs/_images/playback-filetree.png differ diff --git a/docs/_images/playback-folder.png b/docs/_images/playback-folder.png new file mode 100644 index 00000000..d1362487 Binary files /dev/null and b/docs/_images/playback-folder.png differ diff --git a/docs/_images/playback-timeline.png b/docs/_images/playback-timeline.png new file mode 100644 index 00000000..98b9988d Binary files /dev/null and b/docs/_images/playback-timeline.png differ diff --git a/docs/_images/playmode.png b/docs/_images/playmode.png new file mode 100644 index 00000000..a8510839 Binary files /dev/null and b/docs/_images/playmode.png differ diff --git a/docs/_images/popup-resetbtn.png b/docs/_images/popup-resetbtn.png new file mode 100644 index 00000000..67bc3273 Binary files /dev/null and b/docs/_images/popup-resetbtn.png differ diff --git a/docs/_images/prefs-account-gh1.png b/docs/_images/prefs-account-gh1.png new file mode 100644 index 00000000..22ed65d6 Binary files /dev/null and b/docs/_images/prefs-account-gh1.png differ diff --git a/docs/_images/prefs-account-ssh-dialog.png b/docs/_images/prefs-account-ssh-dialog.png new file mode 100644 index 00000000..733be29e Binary files /dev/null and b/docs/_images/prefs-account-ssh-dialog.png differ diff --git a/docs/_images/prefs-account-ssh.png b/docs/_images/prefs-account-ssh.png new file mode 100644 index 00000000..dd5fab5b Binary files /dev/null and b/docs/_images/prefs-account-ssh.png differ diff --git a/docs/_images/prefs-menu.png b/docs/_images/prefs-menu.png new file mode 100644 index 00000000..1bcef247 Binary files /dev/null and b/docs/_images/prefs-menu.png differ diff --git a/docs/_images/prefs-user.png b/docs/_images/prefs-user.png new file mode 100644 index 00000000..756bb7ba Binary files /dev/null and b/docs/_images/prefs-user.png differ diff --git a/docs/_images/prerequisite.png b/docs/_images/prerequisite.png new file mode 100644 index 00000000..b48a9acd Binary files /dev/null and b/docs/_images/prerequisite.png differ diff --git a/docs/_images/preview-button.png b/docs/_images/preview-button.png new file mode 100644 index 00000000..8837c9ea Binary files /dev/null and b/docs/_images/preview-button.png differ diff --git a/docs/_images/preview-deploy-right-click.png b/docs/_images/preview-deploy-right-click.png new file mode 100644 index 00000000..285a451b Binary files /dev/null and b/docs/_images/preview-deploy-right-click.png differ diff --git a/docs/_images/preview-deploy.png b/docs/_images/preview-deploy.png new file mode 100644 index 00000000..56b7f6e1 Binary files /dev/null and b/docs/_images/preview-deploy.png differ diff --git a/docs/_images/preview.png b/docs/_images/preview.png new file mode 100644 index 00000000..380e10f0 Binary files /dev/null and b/docs/_images/preview.png differ diff --git a/docs/_images/previewQuestion1.png b/docs/_images/previewQuestion1.png new file mode 100644 index 00000000..27f4311a Binary files /dev/null and b/docs/_images/previewQuestion1.png differ diff --git a/docs/_images/previewQuestion2.png b/docs/_images/previewQuestion2.png new file mode 100644 index 00000000..9198ebab Binary files /dev/null and b/docs/_images/previewQuestion2.png differ diff --git a/docs/_images/prime-assignment.png b/docs/_images/prime-assignment.png new file mode 100644 index 00000000..086349c4 Binary files /dev/null and b/docs/_images/prime-assignment.png differ diff --git a/docs/_images/process.png b/docs/_images/process.png new file mode 100644 index 00000000..c208d940 Binary files /dev/null and b/docs/_images/process.png differ diff --git a/docs/_images/profilepic.png b/docs/_images/profilepic.png new file mode 100644 index 00000000..a0441ef9 Binary files /dev/null and b/docs/_images/profilepic.png differ diff --git a/docs/_images/profilepic1.png b/docs/_images/profilepic1.png new file mode 100644 index 00000000..c69f02fc Binary files /dev/null and b/docs/_images/profilepic1.png differ diff --git a/docs/_images/progressbar.png b/docs/_images/progressbar.png new file mode 100644 index 00000000..e8e3ea64 Binary files /dev/null and b/docs/_images/progressbar.png differ diff --git a/docs/_images/project-settings.png b/docs/_images/project-settings.png new file mode 100644 index 00000000..f4fc174f Binary files /dev/null and b/docs/_images/project-settings.png differ diff --git a/docs/_images/project_1.png b/docs/_images/project_1.png new file mode 100644 index 00000000..8a380919 Binary files /dev/null and b/docs/_images/project_1.png differ diff --git a/docs/_images/project_2.png b/docs/_images/project_2.png new file mode 100644 index 00000000..9c900870 Binary files /dev/null and b/docs/_images/project_2.png differ diff --git a/docs/_images/project_3.png b/docs/_images/project_3.png new file mode 100644 index 00000000..7ef817f0 Binary files /dev/null and b/docs/_images/project_3.png differ diff --git a/docs/_images/project_create.png b/docs/_images/project_create.png new file mode 100644 index 00000000..ed43dde6 Binary files /dev/null and b/docs/_images/project_create.png differ diff --git a/docs/_images/projectslist.png b/docs/_images/projectslist.png new file mode 100644 index 00000000..be70b22a Binary files /dev/null and b/docs/_images/projectslist.png differ diff --git a/docs/_images/propagate.png b/docs/_images/propagate.png new file mode 100644 index 00000000..38520370 Binary files /dev/null and b/docs/_images/propagate.png differ diff --git a/docs/_images/public_private.png b/docs/_images/public_private.png new file mode 100644 index 00000000..b7fc1d53 Binary files /dev/null and b/docs/_images/public_private.png differ diff --git a/docs/_images/publishedversion.png b/docs/_images/publishedversion.png new file mode 100644 index 00000000..c4d508ee Binary files /dev/null and b/docs/_images/publishedversion.png differ diff --git a/docs/_images/pullallarrow.png b/docs/_images/pullallarrow.png new file mode 100644 index 00000000..5972817c Binary files /dev/null and b/docs/_images/pullallarrow.png differ diff --git a/docs/_images/pullarrow.png b/docs/_images/pullarrow.png new file mode 100644 index 00000000..bde9d801 Binary files /dev/null and b/docs/_images/pullarrow.png differ diff --git a/docs/_images/pyret.png b/docs/_images/pyret.png new file mode 100644 index 00000000..121c8372 Binary files /dev/null and b/docs/_images/pyret.png differ diff --git a/docs/_images/pythonexample.png b/docs/_images/pythonexample.png new file mode 100644 index 00000000..83ae6758 Binary files /dev/null and b/docs/_images/pythonexample.png differ diff --git a/docs/_images/pythontutor.png b/docs/_images/pythontutor.png new file mode 100644 index 00000000..0e1f4de3 Binary files /dev/null and b/docs/_images/pythontutor.png differ diff --git a/docs/_images/quick-open.png b/docs/_images/quick-open.png new file mode 100644 index 00000000..bba1068d Binary files /dev/null and b/docs/_images/quick-open.png differ diff --git a/docs/_images/random-sync-nostudents.png b/docs/_images/random-sync-nostudents.png new file mode 100644 index 00000000..7967ea28 Binary files /dev/null and b/docs/_images/random-sync-nostudents.png differ diff --git a/docs/_images/random-sync-studentsstarted.png b/docs/_images/random-sync-studentsstarted.png new file mode 100644 index 00000000..2bfc5808 Binary files /dev/null and b/docs/_images/random-sync-studentsstarted.png differ diff --git a/docs/_images/random-sync.png b/docs/_images/random-sync.png new file mode 100644 index 00000000..279900dc Binary files /dev/null and b/docs/_images/random-sync.png differ diff --git a/docs/_images/random-update.png b/docs/_images/random-update.png new file mode 100644 index 00000000..b12d74f9 Binary files /dev/null and b/docs/_images/random-update.png differ diff --git a/docs/_images/raw_github_button.png b/docs/_images/raw_github_button.png new file mode 100644 index 00000000..c5d6e006 Binary files /dev/null and b/docs/_images/raw_github_button.png differ diff --git a/docs/_images/raw_github_link.png b/docs/_images/raw_github_link.png new file mode 100644 index 00000000..334d9b43 Binary files /dev/null and b/docs/_images/raw_github_link.png differ diff --git a/docs/_images/readme-md.png b/docs/_images/readme-md.png new file mode 100644 index 00000000..484603d6 Binary files /dev/null and b/docs/_images/readme-md.png differ diff --git a/docs/_images/remove_student.png b/docs/_images/remove_student.png new file mode 100644 index 00000000..84d6bc6a Binary files /dev/null and b/docs/_images/remove_student.png differ diff --git a/docs/_images/renamecourse.png b/docs/_images/renamecourse.png new file mode 100644 index 00000000..f26c57bd Binary files /dev/null and b/docs/_images/renamecourse.png differ diff --git a/docs/_images/reset.png b/docs/_images/reset.png new file mode 100644 index 00000000..17c13f09 Binary files /dev/null and b/docs/_images/reset.png differ diff --git a/docs/_images/resetunitall.png b/docs/_images/resetunitall.png new file mode 100644 index 00000000..91dde36e Binary files /dev/null and b/docs/_images/resetunitall.png differ diff --git a/docs/_images/resetunitstudent.png b/docs/_images/resetunitstudent.png new file mode 100644 index 00000000..a7ea58ef Binary files /dev/null and b/docs/_images/resetunitstudent.png differ diff --git a/docs/_images/revertversion.png b/docs/_images/revertversion.png new file mode 100644 index 00000000..e06dd1b4 Binary files /dev/null and b/docs/_images/revertversion.png differ diff --git a/docs/_images/ribbon-media.png b/docs/_images/ribbon-media.png new file mode 100644 index 00000000..8cf00797 Binary files /dev/null and b/docs/_images/ribbon-media.png differ diff --git a/docs/_images/right-click.png b/docs/_images/right-click.png new file mode 100644 index 00000000..57fa6fc7 Binary files /dev/null and b/docs/_images/right-click.png differ diff --git a/docs/_images/run-menu.png b/docs/_images/run-menu.png new file mode 100644 index 00000000..fead387d Binary files /dev/null and b/docs/_images/run-menu.png differ diff --git a/docs/_images/safari-settings.png b/docs/_images/safari-settings.png new file mode 100644 index 00000000..b3db7679 Binary files /dev/null and b/docs/_images/safari-settings.png differ diff --git a/docs/_images/savedSearchDelete.png b/docs/_images/savedSearchDelete.png new file mode 100644 index 00000000..2f24861d Binary files /dev/null and b/docs/_images/savedSearchDelete.png differ diff --git a/docs/_images/scripts.png b/docs/_images/scripts.png new file mode 100644 index 00000000..6824b644 Binary files /dev/null and b/docs/_images/scripts.png differ diff --git a/docs/_images/scrollThrough.png b/docs/_images/scrollThrough.png new file mode 100644 index 00000000..6cb004ea Binary files /dev/null and b/docs/_images/scrollThrough.png differ diff --git a/docs/_images/search-matches.png b/docs/_images/search-matches.png new file mode 100644 index 00000000..8d988a5e Binary files /dev/null and b/docs/_images/search-matches.png differ diff --git a/docs/_images/searchResults.png b/docs/_images/searchResults.png new file mode 100644 index 00000000..7b124cdd Binary files /dev/null and b/docs/_images/searchResults.png differ diff --git a/docs/_images/search_teacher.png b/docs/_images/search_teacher.png new file mode 100644 index 00000000..c2912c18 Binary files /dev/null and b/docs/_images/search_teacher.png differ diff --git a/docs/_images/selectLib.png b/docs/_images/selectLib.png new file mode 100644 index 00000000..faf688d3 Binary files /dev/null and b/docs/_images/selectLib.png differ diff --git a/docs/_images/selectQuestion.png b/docs/_images/selectQuestion.png new file mode 100644 index 00000000..4fc64881 Binary files /dev/null and b/docs/_images/selectQuestion.png differ diff --git a/docs/_images/sendnotification.png b/docs/_images/sendnotification.png new file mode 100644 index 00000000..92f8dd31 Binary files /dev/null and b/docs/_images/sendnotification.png differ diff --git a/docs/_images/settings.png b/docs/_images/settings.png new file mode 100644 index 00000000..4e822249 Binary files /dev/null and b/docs/_images/settings.png differ diff --git a/docs/_images/sharecode.png b/docs/_images/sharecode.png new file mode 100644 index 00000000..ca909703 Binary files /dev/null and b/docs/_images/sharecode.png differ diff --git a/docs/_images/sharing.png b/docs/_images/sharing.png new file mode 100644 index 00000000..10d6ac86 Binary files /dev/null and b/docs/_images/sharing.png differ diff --git a/docs/_images/show-email.png b/docs/_images/show-email.png new file mode 100644 index 00000000..de6aacd6 Binary files /dev/null and b/docs/_images/show-email.png differ diff --git a/docs/_images/source_export.png b/docs/_images/source_export.png new file mode 100644 index 00000000..c5e637f9 Binary files /dev/null and b/docs/_images/source_export.png differ diff --git a/docs/_images/source_exportlinks.png b/docs/_images/source_exportlinks.png new file mode 100644 index 00000000..628a6afc Binary files /dev/null and b/docs/_images/source_exportlinks.png differ diff --git a/docs/_images/split-button.png b/docs/_images/split-button.png new file mode 100644 index 00000000..e0cd4b5b Binary files /dev/null and b/docs/_images/split-button.png differ diff --git a/docs/_images/sql-helpers.png b/docs/_images/sql-helpers.png new file mode 100644 index 00000000..9c4f8fdf Binary files /dev/null and b/docs/_images/sql-helpers.png differ diff --git a/docs/_images/ssh-connection-edit.png b/docs/_images/ssh-connection-edit.png new file mode 100644 index 00000000..b233a331 Binary files /dev/null and b/docs/_images/ssh-connection-edit.png differ diff --git a/docs/_images/ssh-connection-list.png b/docs/_images/ssh-connection-list.png new file mode 100644 index 00000000..f5472faf Binary files /dev/null and b/docs/_images/ssh-connection-list.png differ diff --git a/docs/_images/ssh-parms.png b/docs/_images/ssh-parms.png new file mode 100644 index 00000000..88eedd55 Binary files /dev/null and b/docs/_images/ssh-parms.png differ diff --git a/docs/_images/sso-integration.png b/docs/_images/sso-integration.png new file mode 100644 index 00000000..a02a14e7 Binary files /dev/null and b/docs/_images/sso-integration.png differ diff --git a/docs/_images/stackdetails.png b/docs/_images/stackdetails.png new file mode 100644 index 00000000..e30a7b23 Binary files /dev/null and b/docs/_images/stackdetails.png differ diff --git a/docs/_images/stacknewversion.png b/docs/_images/stacknewversion.png new file mode 100644 index 00000000..03c6cac0 Binary files /dev/null and b/docs/_images/stacknewversion.png differ diff --git a/docs/_images/stacks_create.png b/docs/_images/stacks_create.png new file mode 100644 index 00000000..e8f687b8 Binary files /dev/null and b/docs/_images/stacks_create.png differ diff --git a/docs/_images/stacks_createnew.png b/docs/_images/stacks_createnew.png new file mode 100644 index 00000000..3d8dc6e6 Binary files /dev/null and b/docs/_images/stacks_createnew.png differ diff --git a/docs/_images/stacks_list.png b/docs/_images/stacks_list.png new file mode 100644 index 00000000..5f21ba63 Binary files /dev/null and b/docs/_images/stacks_list.png differ diff --git a/docs/_images/stacks_versions.png b/docs/_images/stacks_versions.png new file mode 100644 index 00000000..cfaa7af4 Binary files /dev/null and b/docs/_images/stacks_versions.png differ diff --git a/docs/_images/stackversionid.png b/docs/_images/stackversionid.png new file mode 100644 index 00000000..1e411a64 Binary files /dev/null and b/docs/_images/stackversionid.png differ diff --git a/docs/_images/startguides.png b/docs/_images/startguides.png new file mode 100644 index 00000000..4149e21d Binary files /dev/null and b/docs/_images/startguides.png differ diff --git a/docs/_images/std-assessment-args.png b/docs/_images/std-assessment-args.png new file mode 100644 index 00000000..71bebcc5 Binary files /dev/null and b/docs/_images/std-assessment-args.png differ diff --git a/docs/_images/std-assessment-error.png b/docs/_images/std-assessment-error.png new file mode 100644 index 00000000..6894f61a Binary files /dev/null and b/docs/_images/std-assessment-error.png differ diff --git a/docs/_images/std-assessment-stdin-ignore.png b/docs/_images/std-assessment-stdin-ignore.png new file mode 100644 index 00000000..1131c366 Binary files /dev/null and b/docs/_images/std-assessment-stdin-ignore.png differ diff --git a/docs/_images/std-assessment-stdin.png b/docs/_images/std-assessment-stdin.png new file mode 100644 index 00000000..ca5864fa Binary files /dev/null and b/docs/_images/std-assessment-stdin.png differ diff --git a/docs/_images/student-dash.png b/docs/_images/student-dash.png new file mode 100644 index 00000000..92525754 Binary files /dev/null and b/docs/_images/student-dash.png differ diff --git a/docs/_images/student-prerequisite.png b/docs/_images/student-prerequisite.png new file mode 100644 index 00000000..9f913393 Binary files /dev/null and b/docs/_images/student-prerequisite.png differ diff --git a/docs/_images/student_progress.png b/docs/_images/student_progress.png new file mode 100644 index 00000000..f06cf9cd Binary files /dev/null and b/docs/_images/student_progress.png differ diff --git a/docs/_images/studentcodecomment.png b/docs/_images/studentcodecomment.png new file mode 100644 index 00000000..d3dee419 Binary files /dev/null and b/docs/_images/studentcodecomment.png differ diff --git a/docs/_images/studentconsent.png b/docs/_images/studentconsent.png new file mode 100644 index 00000000..f88a03ff Binary files /dev/null and b/docs/_images/studentconsent.png differ diff --git a/docs/_images/studentdashboard.png b/docs/_images/studentdashboard.png new file mode 100644 index 00000000..f83aa2c8 Binary files /dev/null and b/docs/_images/studentdashboard.png differ diff --git a/docs/_images/studentdata_export.png b/docs/_images/studentdata_export.png new file mode 100644 index 00000000..25954e6f Binary files /dev/null and b/docs/_images/studentdata_export.png differ diff --git a/docs/_images/studentlist.png b/docs/_images/studentlist.png new file mode 100644 index 00000000..3431a414 Binary files /dev/null and b/docs/_images/studentlist.png differ diff --git a/docs/_images/studentoptions.png b/docs/_images/studentoptions.png new file mode 100644 index 00000000..4aedd024 Binary files /dev/null and b/docs/_images/studentoptions.png differ diff --git a/docs/_images/studentplaymode.png b/docs/_images/studentplaymode.png new file mode 100644 index 00000000..7ab19fff Binary files /dev/null and b/docs/_images/studentplaymode.png differ diff --git a/docs/_images/students_tab.png b/docs/_images/students_tab.png new file mode 100644 index 00000000..11995ba6 Binary files /dev/null and b/docs/_images/students_tab.png differ diff --git a/docs/_images/studentslogin.png b/docs/_images/studentslogin.png new file mode 100644 index 00000000..0cb7de45 Binary files /dev/null and b/docs/_images/studentslogin.png differ diff --git a/docs/_images/survey.png b/docs/_images/survey.png new file mode 100644 index 00000000..d3021f3d Binary files /dev/null and b/docs/_images/survey.png differ diff --git a/docs/_images/switchstudentpay.png b/docs/_images/switchstudentpay.png new file mode 100644 index 00000000..53eb6aa4 Binary files /dev/null and b/docs/_images/switchstudentpay.png differ diff --git a/docs/_images/tags.png b/docs/_images/tags.png new file mode 100644 index 00000000..8062f8d9 Binary files /dev/null and b/docs/_images/tags.png differ diff --git a/docs/_images/teachdashboard.png b/docs/_images/teachdashboard.png new file mode 100644 index 00000000..ef27b6b7 Binary files /dev/null and b/docs/_images/teachdashboard.png differ diff --git a/docs/_images/template-example.png b/docs/_images/template-example.png new file mode 100644 index 00000000..29586604 Binary files /dev/null and b/docs/_images/template-example.png differ diff --git a/docs/_images/templates.png b/docs/_images/templates.png new file mode 100644 index 00000000..2c9306ff Binary files /dev/null and b/docs/_images/templates.png differ diff --git a/docs/_images/terminal.png b/docs/_images/terminal.png new file mode 100644 index 00000000..796998b1 Binary files /dev/null and b/docs/_images/terminal.png differ diff --git a/docs/_images/terminal_command.png b/docs/_images/terminal_command.png new file mode 100644 index 00000000..6a170bd0 Binary files /dev/null and b/docs/_images/terminal_command.png differ diff --git a/docs/_images/terminalicon.png b/docs/_images/terminalicon.png new file mode 100644 index 00000000..2594c820 Binary files /dev/null and b/docs/_images/terminalicon.png differ diff --git a/docs/_images/teststudents.png b/docs/_images/teststudents.png new file mode 100644 index 00000000..681c096f Binary files /dev/null and b/docs/_images/teststudents.png differ diff --git a/docs/_images/tkinter-pack.png b/docs/_images/tkinter-pack.png new file mode 100644 index 00000000..0e396eaf Binary files /dev/null and b/docs/_images/tkinter-pack.png differ diff --git a/docs/_images/tkinter-stack.png b/docs/_images/tkinter-stack.png new file mode 100644 index 00000000..3ea5bf64 Binary files /dev/null and b/docs/_images/tkinter-stack.png differ diff --git a/docs/_images/top-cpu.png b/docs/_images/top-cpu.png new file mode 100644 index 00000000..9826f079 Binary files /dev/null and b/docs/_images/top-cpu.png differ diff --git a/docs/_images/top-memory.png b/docs/_images/top-memory.png new file mode 100644 index 00000000..32a40f91 Binary files /dev/null and b/docs/_images/top-memory.png differ diff --git a/docs/_images/turtlepreview.png b/docs/_images/turtlepreview.png new file mode 100644 index 00000000..0ae14a47 Binary files /dev/null and b/docs/_images/turtlepreview.png differ diff --git a/docs/_images/type_file.png b/docs/_images/type_file.png new file mode 100644 index 00000000..a524b88a Binary files /dev/null and b/docs/_images/type_file.png differ diff --git a/docs/_images/type_highlight.png b/docs/_images/type_highlight.png new file mode 100644 index 00000000..294bf1c6 Binary files /dev/null and b/docs/_images/type_highlight.png differ diff --git a/docs/_images/type_preview.png b/docs/_images/type_preview.png new file mode 100644 index 00000000..2dcb6d5e Binary files /dev/null and b/docs/_images/type_preview.png differ diff --git a/docs/_images/type_terminal.png b/docs/_images/type_terminal.png new file mode 100644 index 00000000..8b9b5a22 Binary files /dev/null and b/docs/_images/type_terminal.png differ diff --git a/docs/_images/updateassignment.png b/docs/_images/updateassignment.png new file mode 100644 index 00000000..10e44120 Binary files /dev/null and b/docs/_images/updateassignment.png differ diff --git a/docs/_images/updatedialog.png b/docs/_images/updatedialog.png new file mode 100644 index 00000000..ed7bb9c8 Binary files /dev/null and b/docs/_images/updatedialog.png differ diff --git a/docs/_images/user_access_export.png b/docs/_images/user_access_export.png new file mode 100644 index 00000000..d4bada66 Binary files /dev/null and b/docs/_images/user_access_export.png differ diff --git a/docs/_images/versiondetails.png b/docs/_images/versiondetails.png new file mode 100644 index 00000000..ffd448f6 Binary files /dev/null and b/docs/_images/versiondetails.png differ diff --git a/docs/_images/viewasteacher.png b/docs/_images/viewasteacher.png new file mode 100644 index 00000000..7bc7c157 Binary files /dev/null and b/docs/_images/viewasteacher.png differ diff --git a/docs/_images/viewinvoice.png b/docs/_images/viewinvoice.png new file mode 100644 index 00000000..35104c18 Binary files /dev/null and b/docs/_images/viewinvoice.png differ diff --git a/docs/_images/viewversions.png b/docs/_images/viewversions.png new file mode 100644 index 00000000..a44e8f7f Binary files /dev/null and b/docs/_images/viewversions.png differ diff --git a/docs/_images/vm-commands.png b/docs/_images/vm-commands.png new file mode 100644 index 00000000..b607fe7c Binary files /dev/null and b/docs/_images/vm-commands.png differ diff --git a/docs/_images/vscodedisplay.png b/docs/_images/vscodedisplay.png new file mode 100644 index 00000000..bca0df7a Binary files /dev/null and b/docs/_images/vscodedisplay.png differ diff --git a/docs/_images/vscodelayout.png b/docs/_images/vscodelayout.png new file mode 100644 index 00000000..e5c067e6 Binary files /dev/null and b/docs/_images/vscodelayout.png differ diff --git a/docs/_images/with.png b/docs/_images/with.png new file mode 100644 index 00000000..b3327f19 Binary files /dev/null and b/docs/_images/with.png differ diff --git a/docs/_images/writeable.png b/docs/_images/writeable.png new file mode 100644 index 00000000..46ab1c10 Binary files /dev/null and b/docs/_images/writeable.png differ diff --git a/docs/_images/xserver-install.png b/docs/_images/xserver-install.png new file mode 100644 index 00000000..095370f9 Binary files /dev/null and b/docs/_images/xserver-install.png differ diff --git a/docs/_images/year10class.png b/docs/_images/year10class.png new file mode 100644 index 00000000..13d15428 Binary files /dev/null and b/docs/_images/year10class.png differ diff --git a/docs/_sources/accessing-codio.rst.txt b/docs/_sources/accessing-codio.rst.txt new file mode 100644 index 00000000..bd29e7de --- /dev/null +++ b/docs/_sources/accessing-codio.rst.txt @@ -0,0 +1,48 @@ +.. meta:: + :description: Joining a course, passwords, payments + +.. toctree:: + :name: accessing-codio + +Accessing Codio +=============== + +.. toctree:: + :maxdepth: 1 + :hidden: + + + students/accessing-codio/accessing-codio + develop/settings/settings + +Join a Course +------------- + +You can join a course directly from your LMS platform (such as Canvas, Blackboard, Moodle, etc.), or use a URL or token provided by your instructor. + +If your school is not using an LMS platform, your instructor will provide you one of the following methods to join the course: + +- Send you an invitation URL that you can copy and paste into your browser. + +- Send you a two-word token that you can enter on the Codio website using `Join Course `_. Enter the token and click **Next**. + + .. image:: /img/joinclass.png + :alt: Auth token + + +To access your course, log in to your Codio account and select **Courses** in the navigation pane. + +**See Also:** + +- :ref:`Navigating the Student Dashboard ` +- :ref:`Paying for Codio ` +- :ref:`Manage Password ` + + + + + + + + + diff --git a/docs/_sources/admin.rst.txt b/docs/_sources/admin.rst.txt new file mode 100644 index 00000000..9219bbe4 --- /dev/null +++ b/docs/_sources/admin.rst.txt @@ -0,0 +1,47 @@ +.. meta:: + :description: LMS Integration, Organization settings, FERPA, Accessibility + +.. toctree:: + :name: admin + + +Admin +===== +.. toctree:: + :maxdepth: 1 + :hidden: + + instructors/admin/integration/intro + instructors/admin/organization/organisation + instructors/admin/orgbilling + common/settings/settings + instructors/admin/legal + +Integrating with your LMS system (Canvas etc.) +---------------------------------------------- + +Learning Tools Interoperability (LTI) is a standard for passing user, organization, and course information between learning management systems (tool consumers) and learning tools and tool providers, such as Codio. + +**Video: LMS Integration Overview** + +.. raw:: html + +
+ + + +For more see: + +- Integrating with LMS's + - :ref:`Integrating with Canvas ` + - :ref:`Integrating with Blackboard ` + - :ref:`Integrating with Moodle ` + - :ref:`Integrating with D2L ` + - :ref:`Integrating with Google Classroom ` + - :ref:`Integrating with Schoology ` +- :ref:`Users account creation ` +- :ref:`Grading ` +- :ref:`LTI Keys and URLs ` +- :ref:`LTI App ` +- :ref:`LTI Course Copy ` +- :ref:`LTI 1.3 integration ` \ No newline at end of file diff --git a/docs/_sources/authoring.rst.txt b/docs/_sources/authoring.rst.txt new file mode 100644 index 00000000..c307817b --- /dev/null +++ b/docs/_sources/authoring.rst.txt @@ -0,0 +1,54 @@ +.. meta:: + :description: Authoring instructional content and assessments + +.. toctree:: + :name: authoring + +Authoring +--------- + +.. toctree:: + :maxdepth: 1 + :hidden: + + + instructors/authoring/guides/intro + instructors/authoring/guides/settings/page + instructors/authoring/assessments/add-assessment + instructors/setupcourses/library/assessmentslibrary + +Introduction to Guides +********************** + +Codio provides a powerful authoring tool called Guides you can use to create rich tutorial and instructional content as well as assessments. Here are a few of the key features. + +From a Guides page you can: + +- :ref:`Control the layout of the IDE ` +- :ref:`Open and close files, terminal windows and html page previews ` +- :ref:`Launch commands ` from the content page and pipe terminal output into the content page +- Create manually and automatically graded :ref:`questions and assessments ` +- Manage a :ref:`table of contents ` +- Teachers/Instructors can export a :ref:`PDF ` of the Guides content to distribute to students as required. + +Accessing Codio Guides +********************** + +You can launch Guides and begin content authoring in one of the following ways: + +- Click **Tools->Guide->Edit** in the menu. +- Click the button at the top of the **Filetree** as shown below + + .. image:: /img/guides/startguides.png + :alt: Start Authoring + +Designing for Accessibility +*************************** + +Codio provides a range of tools to support Accessibility. + + See: + +- :ref:`Dyslexia Support ` +- :ref:`User Preferences ` +- :ref:`Project Preferences ` \ No newline at end of file diff --git a/docs/_sources/common.rst.txt b/docs/_sources/common.rst.txt new file mode 100644 index 00000000..43302d58 --- /dev/null +++ b/docs/_sources/common.rst.txt @@ -0,0 +1,58 @@ +.. meta:: + :description: The Codio development environment + +.. toctree:: + :name: common + +Developing Code +=============== + +.. toctree:: + :maxdepth: 1 + :hidden: + + common/develop/projects/projects + common/develop/stacks/stacks + common/develop/packs/packs + common/develop/ide/workspace/workspace + common/develop/ide/editing/code-editing + common/tools/dyslexia + common/develop/ide/tools/deployment + common/develop/ide/boxes/overview + common/develop/ide/boxes/installsw/install-software + common/develop/ide/debugger/debugger + common/develop/general + +Projects +-------- + + +A project is a Ubuntu server and is commonly referred to as a box. You can create as many projects (boxes) as needed, and with sudo privileges, you can install and configure them however you want. Each project box is fully isolated from your other project boxes. + +When opening a project, you are taken into the project server (box) and are presented with the Codio IDE. You can access the command line via a terminal window. + +Project templates +----------------- + +Codio works with a series of templates for software configurations, also commonly referred to as stacks. These templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can use our pre-configured templates or create your own. This template approach makes Codio easy to use, configure and adapt. + +- You can take a snapshot of the software configuration on any box and add it to the **Stacks** template library. + +- You can take a snapshot of the stack/project code workspace combination and add it to the **Starter Packs** template library. + +Project concepts and features +----------------------------- +We strongly recommend that you familiarize yourself with the following project related concepts and features before you get started: + +- :ref:`Boxes and the IDE ` +- :ref:`Stacks ` +- :ref:`Starter Packs ` +- :ref:`Authoring tutorial content with Codio Guides ` +- :ref:`Creating Course Content ` + + +**See Also:** + +- :ref:`Project Permissions ` +- :ref:`Create and Import a Project ` +- :ref:`Access Projects ` diff --git a/docs/_sources/common/develop/general.rst.txt b/docs/_sources/common/develop/general.rst.txt new file mode 100644 index 00000000..00dddf60 --- /dev/null +++ b/docs/_sources/common/develop/general.rst.txt @@ -0,0 +1,150 @@ +.. meta:: + :description: Cookies, Firewalls, Browser support + + + +Cookies, Firewalls, Browser support +=================================== + +.. _cookie-requirements: + +Cookie Requirements +------------------- + +In order for Codio to work correctly you need to allow cookies. Check our `Privacy policy `_ for more information about cookies. + +The following information explains how to enable cookies for all sites. You can also enable them only for certain sites, which is not explained below. + +To enable cookies in Chrome: +**************************** + +In your browser enter: `chrome://settings/cookies` +and + +- enable **Allow all cookies** +- disable **Block third party cookies** + +.. image:: /img/chromecookies.png + :alt: Chrome Cookies + + +*Image from Chrome Version 113.0.5672.64 (Official Build) (64-bit)* + +To enable cookies in Firefox: +***************************** +In your browser enter: `about:preferences#privacy` +Select **User custom settings for history** from the drop down in the History section and + +- check **Accept cookies from sites** +- select 'Always' in the drop down for **Accept third-party cookies** + +.. image:: /img/firefoxcookies.png + :alt: Firefox Cookies + + +*Image from Firefox 55.0.2 (64-bit)* + +To enable cookies in Safari: +**************************** + +In your browser go to `Safari> Preferences` + +Select the **Privacy** tab and ensure check **Block all cookies**, **Prevent cross-site tracking** are not checked and if you are electing to **Hide IP address** do not check **from Trackers and Websites** + +.. image:: /img/crosssitetracking.png + :alt: Safari Cookies + + +If using an earlier version of Safari, check **Always Allow** in the Cookies and website data section + +*Image from Safari Version 16.5.1 (18615.2.9.11.7) on macOS Ventura Version 13.4.1* + +.. _firewalls: + +Firewall and network settings +----------------------------- + +Codio can usually run from anywhere in your browser without any special settings. However, some k12 or university firewall settings may require special configuration. + +This page contains information for + +- Network system administrators +- Students and teachers who may be using Codio from home + +Firewall settings +***************** + +The following is a list of ports and URLs that Codio accesses from time to time. We have put these in priority order. + + - `*.codio.com` the main Codio site and application + + - `*.codio.io` domains that are auto-generated for each user project + + - `api.keen.io` statistics gathering to measure student time spent in units (stats) + + - `*.typekit.net` web fonts + + - `fonts.gstatic.com` web fonts + + - `fast.fonts.net` web fonts + + - `*.cloudfront.net` our CDN for speeding up static content + + - `*.youtube.com` & `*.vimeo.com` for video's included in Course content + + - `gravatar.com` used for user gravatars (pictures) + + - `*.intercom.io`, `cdnjs.cloudflare.com` and `*.pubnub.com` are highly recommended as they relate to the help and support application (Intercom) built into Codio. + +If your institution blocks access to YouTube as a general rule, your IT department can whitelist YouTube access that only allows access to content from registered and accredited educational content repositories. See `here `_ for more information on this. + + +Ports +***** + +We recommend opening the following ports + +- **80 and 443** for standard communications + +Working from home +***************** + +Sometimes the anti-virus/firewall settings on your personal devices may interfere with home usage and make the experience slow. + +You should check your settings and ensure that items in the above **Firewall settings** list are added to your exclusion list. + +Connectivity Test +***************** + +If you continue to experience difficulties, visit the `Connection Diagnostics `_ page and send us back the generated output going to **Help > Support/Contact Us** and attach the output file using the paperclip icon + +.. _browser-support: + +Browser support +--------------- +Codio is best experienced on the very latest browsers, in particular Chrome, but should run fine on the following browsers: + +- **Chrome** 21 or later +- **Firefox** - 22 or later +- **Edge** - 44 or later +- **Safari** - 6 or later + + +If using **Safari** and accessing Codio via an LMS (Canvas/Blackboard/D2L/Moodle etc) , disable "Prevent cross-site tracking" to ensure access. + +.. image:: /img/crosssitetracking.png + :alt: Safari Settings + + +If you are experiencing any issue where Codio will not run as it should, please send an email to help@codio.com. + +.. _disable-ie-compatibility-view: + +Disable IE Compatibility View +***************************** + +It could happen that even if you have Internet Explorer 10 or a later version, we detect an older version of the browser. + +This is due to the *Compatibility Mode* of the Browser which enables old features we no longer support. + +To disable this option, please go to ***Tools → F12 developer tools*** and be sure that in **Browser Mode** is selected **«Internet Explorer 10»** and in **Document Mode** is selected **«Standards (Page default)»**. diff --git a/docs/_sources/common/develop/ide/boxes/access.rst.txt b/docs/_sources/common/develop/ide/boxes/access.rst.txt new file mode 100644 index 00000000..97cafc65 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/access.rst.txt @@ -0,0 +1,66 @@ +.. meta:: + :description: Connect Codio to other applications such as Github and ButBucket using SSH keys. + +.. _ssh: + +Access Codio Box via SSH +======================== + +You can SSH into your Codio box from code using SSH public keys. Understanding how Codio uses SSH keys is important to accessing your box via ssh. + + +.. Note:: You cannot connect to a Codio box without using a Public Key. + +Codio box SSH keys +------------------ +Codio generates a key-pair that can be uploaded to connect to applications such as Github and BitBucket. See :ref:`ssh-key` for information on uploading your public key to Github and Bitbucket. + +When you create a new Codio project, your user keys are automatically copied into your project and can be found in the **~/.ssh** folder. To access this folder, open a terminal window and navigate to the **id_rsa** file. + +SSH into your box +----------------- +Unless your project has the :ref:`Always on Boxes` feature enabled, you must open your Codio project to start the box so that it is ready for receiving incoming SSH connections. + +To prepare your box for external access, follow these guidelines: + +Generate key pairs +^^^^^^^^^^^^^^^^^^ +To gain an understanding of how to generate SSH keys, see the following documentation: + +- Windows - https://www.techrepublic.com/blog/10-things/how-to-generate-ssh-keys-in-openssh-for-windows-10/ +- Mac - https://help.github.com/articles/generating-ssh-keys#platform-mac +- Linux - https://help.github.com/articles/generating-ssh-keys#platform-linux + +Find your local machine's SSH public key +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +To find your local machine's SSH public key, use one of the following methods depending on your operating system: + +- Mac or Linux - Copy your local machine's public key to the clipboard from your local machine's terminal using ``pbcopy < ~/.ssh/id_rsa.pub``. +- Mac or Linux - On your local machine, open the **~/.ssh/id_rsa.pub** file and copy it to the clipboard. Be careful not to copy unwanted control characters. +- Windows - Use Putty to obtain your key. + +Upload your public key to your Codio box +---------------------------------------- +Once you have obtained your local machine's SSH public key, follow these steps to upload it your Codio box: +1. Copy the public key to your clipboard. +2. Open a terminal tab in your Codio project and enter the key into the **.ssh/authorized_keys** file. The easiest way to do this is to enter ``nano .ssh/authorized_keys`` to open the **.ssh/authorized_keys** file in the nano editor and paste the key into the file. + +You can view all uploaded public keys in your project by opening the terminal and running ``cat ~/.ssh/authorized_keys``. + +Enable SSH forwarding and connect to your box +--------------------------------------------- +You can now enable SSH forwarding in Codio and then connect to your box from your local machine's terminal window: + +1. Click the **Project** tab on the menu bar and choose **Settings**. +2. Click the **Forwarding Settings** tab. +3. Click **Enable SSH Forwarding** to display the connection string, similar to: + + ``SSH Forwarding: ssh codio@forwarding.codio.com:29119`` + +4. Connect to your box from any terminal window using the connection string that is displayed: + + ``ssh codio@forwarding.codio.com -p 29119`` + +If you get a message `Permission denied (publickey)`, you have incorrectly entered your SSH public key. + + diff --git a/docs/_sources/common/develop/ide/boxes/always-on.rst.txt b/docs/_sources/common/develop/ide/boxes/always-on.rst.txt new file mode 100644 index 00000000..c570c9b7 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/always-on.rst.txt @@ -0,0 +1,47 @@ +.. meta:: + :description: Always-on boxes all your projects to always be accessible. + +.. _always on boxes: + +Always-On Boxes +=============== + +The Always-On feature for boxes is now available for all paid subscribers. This feature enables you to set boxes to always be on, which means they remain active whether you are in the IDE or logged out. The number of Always-On boxes you can have depends on your payment plan. + +If your project is archived due to inactivity (usually 30 days since last opened), this process removes it from the active fileserver and can no longer be *Always-On*. + +You can set a box to Always-On from the **Project > Settings** menu in the IDE or from the Project dashboard. + +Enable Always-On +---------------- + +From IDE +^^^^^^^^ +To set a box to Always-On from the IDE: + +1. Click the **Project** tab on the menu and choose **Settings**. +2. On the **General Settings** tab, toggle the **Always-On Box** setting to **On**. +3. Click **Save Changes**. + +From Project dashboard +^^^^^^^^^^^^^^^^^^^^^^ +To set a box to Always-On from Project dashboard: + +1. Click **My Projects** in the left navigation pane. +2. Click the **Settings** icon (gear) for the project you want to enable Always-On. +3. Under **Preferences**, toggle the **Always-On Box** setting to **On**. +4. Click **Save Changes**. + + +Keep terminal processes running +------------------------------- +When you exit your project in the IDE and return to the dashboard, any processes that were started from within a terminal window will terminate. You can prevent processes from terminating using one of the following methods: + +- Append terminal command - Append `&` to the terminal command that starts your process. You will see output as usual but may need to press the **Enter** key to get a fresh command prompt. Before closing the terminal window or exiting your project, enter the following command: + + .. code:: bash + + disown -a + + +- Install tmux diff --git a/docs/_sources/common/develop/ide/boxes/ext-access.rst.txt b/docs/_sources/common/develop/ide/boxes/ext-access.rst.txt new file mode 100644 index 00000000..625b28a2 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/ext-access.rst.txt @@ -0,0 +1,42 @@ +.. meta:: + :description: External Access to Boxes and Ports + +.. _external access: + +External Access to Boxes and Ports +================================== + +When a new project is created in Codio, a unique subdomain name is generated: + +`word1-word2.codio.io` + +where `word1` and `word2` are randomly generated words resulting in a unique domain name. + +Recommended method for referencing box on specific port +------------------------------------------------------- +It is strongly recommended that you reference a Codio box running on a specific port using the unique domain name and port number: + +``word1-word2.codio.io`` + +If your PC is behind a firewall, access to external ports are often restricted. Using the unique domain name and port number allows the request to be made over port 80 so it's not blocked by the firewall. + +Using this approach allows both HTTP and HTTPS access over the full range of ports, `1024` to `9999`. + + +Standard method for referencing box on specific port +---------------------------------------------------- +You can also reference a Codio box using ``word1-word2-.codio.io`` but you should be aware of the following restrictions to avoid wasting valuable time diagnosing why your browser cannot talk to the Codio box: + +- Port ranges are restricted to `1024` to `9499` for HTTP access. +- Port ranges are restricted to `9500` to `9999` for HTTPS access. +- If your PC is behind a firewall, access over non-standard ports is blocked and will fail if using ``word1-word2-3000.codio.io`` to reference a Codio box. + +Original request header +----------------------- +The `X_FORWARDED_PROTO` header contains original request schema, should you need it. + +Preview menu +------------ +Codio offers a fully customizable **Preview** menu that allows you to preview both static files (.html) and server files (.php files, Ruby, Node apps, etc.). See :ref:`Preview documentation ` for more information. + +Using the **Preview** menu, you can set up any number of 'aliases' both for static files and box CLI commands. diff --git a/docs/_sources/common/develop/ide/boxes/ide-access-permissions.rst.txt b/docs/_sources/common/develop/ide/boxes/ide-access-permissions.rst.txt new file mode 100644 index 00000000..a2525106 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/ide-access-permissions.rst.txt @@ -0,0 +1,13 @@ +.. meta:: + :description: Granting IDE access to other users by assigning admin permissions. + +.. _IDE-access-permissions: + +IDE Access Permissions +====================== + +By default, other users with read and write permissions cannot access your Codio box from the command line. However, you can grant access by assigning the Admin permission to the user. + +.. Note:: This feature requires an active payment plan. + +For information about assigning permissions, see :ref:`Project Permissions `. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/installsw/default-installed.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/default-installed.rst.txt new file mode 100644 index 00000000..0ec66068 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/default-installed.rst.txt @@ -0,0 +1,13 @@ +.. meta:: + :description: All Codio projects are pre-installed with Ubuntu server and Git software. + +.. _preinstalled-software: + +Preinstalled Software Packages +============================== + +When you create an empty box in Codio, you get a standard Ubuntu server and Git software. + +If you want additional software installed by default, use :ref:`Stacks ` or select one of the standard stacks from the **New Project** screen. + +Refer to the :ref:`Install software packages ` for details about how to install other languages, databases, web servers, and other system components. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/installsw/file-locations.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/file-locations.rst.txt new file mode 100644 index 00000000..4929e83d --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/file-locations.rst.txt @@ -0,0 +1,16 @@ +.. meta:: + :description: Location of the Codio workspace and installed software. + + +File and Software Locations +=========================== + +All Codio code workspace and software dependency files are located in the `/home/codio` folder, also reachable as `~`. + +Everything below this level can be accessed but is read-only. You should not change anything below this level because it will not persist. + +Software that you install from the command line or using the **Install Software** option is installed in the usual location for an Ubuntu server. + +Code workspace files +-------------------- +The code workspace you see in the project file tree is located at `/home/codio/workspace` or `~/workspace`. diff --git a/docs/_sources/common/develop/ide/boxes/installsw/gui.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/gui.rst.txt new file mode 100644 index 00000000..99696504 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/gui.rst.txt @@ -0,0 +1,84 @@ +.. meta:: + :description: Working with GUI based output + +.. _gui: + +GUI Based Output +================ + +If you are writing or using programs that have a GUI-based output, it is important that you read this section. Whether you are using UI libraries such as tkinter and qt, or simply using Ubuntu applications that have a non-web based UI, this section explains how to set up a virtual desktop. + +Sample project +-------------- + +Codio provides a Starter Pack project that contains examples of GUI Output. Go to **Starter Packs** and search for **Demo GUI Output** if not already loaded in your **My Projects** area. Click **Use Pack** and then **Create** to install it to your Codio account. + +Uses and limitations +^^^^^^^^^^^^^^^^^^^^ +X Server is a virtual desktop that is very effective for Codio's cloud-based infrastructure. Any application that relies on a graphical user interface has its graphical output redirected to it and Codio's viewer is then able to display the virtual desktop in a browser. + +The **Demo GUI Output** project provides sample applications and also includes some complex UIs (for example, SQLite and StartUML). You may experience limitations when using fast-motion graphics where the virtual screen content is changing so fast that it cannot be rendered in real time over the internet. A stronger bandwidth will provide better performance and overall experience. + + +Install your own projects +------------------------- + +Install X Server +^^^^^^^^^^^^^^^^ +To install X Server, follow these steps: + +1. Click the **Tools** tab and choose **Install Software**. +2. Find the **X Server** component and click the **Install** icon. + +The installation may take a few minutes to complete. You should then :ref:`Restart ` your box before proceeding. + +Run code +^^^^^^^^ +Before you can view any output, you must first start your code so the program can run. When you start the viewer (see below), the UI output is automatically displayed. + +.. image:: /img/guioutput.png + :alt: GUI Output + + +You can also start the viewer first but it will be empty until a program is run; it will then refresh and display the output. + +Use the viewer +^^^^^^^^^^^^^^ +The viewer is a special window that appears either inside Codio or in a separate browser tab. To open it, add `"Viewer": "https://{{domain3050}}/"` to the .codio file, as follows: + +.. code:: ini + + { + // Configure your Run and Preview buttons here. + + // Run button configuration + "commands": { + "Run Python (tkinter)": "python3 tkinterpy/demo.py", + "Run Java (Lunar Phases)": "cd swing && java LunarPhases", + "SQLite Browser App": "sqlitebrowser", + "StarUML": "staruml" + }, + + // Preview button configuration + "preview": { + "Viewer": "https://{{domain3050}}/" + } + } + + +You can also access the viewer from any browser using: + +`https://pagoda-cigar-3050.codio.io/` + +where you should replace `pagoda-cigar` with the box domain name. You can find the box domain name on the **Box Info** page in the **Web: Static content** section (**Project > Box Info** ). + +.. Note:: X-server port was updated to use **3050** in August 2022. Any assignments/projects that were created prior to this date will continue to function on the original port **3000** unless/until any other packages/components in the stack are re-installed. Reinstallation of X-server will then be required for all to work and will then use port **3050** + +Customization +^^^^^^^^^^^^^ +You can customize the X Server installation by modifying the config files in the normal way using vim or nano. For example you can use: + +- `sudo vim /etc/init/openbox.conf` to open the openbox desktop config so you can change the default virtual desktop size. +- `sudo vim /etc/init/novnc-3000.conf` to modify the port that the viewer runs on in case it conflicts with other services you may have configured on the default port 3000. + + diff --git a/docs/_sources/common/develop/ide/boxes/installsw/install-software.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/install-software.rst.txt new file mode 100644 index 00000000..528a5fc1 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/install-software.rst.txt @@ -0,0 +1,57 @@ +.. meta:: + :description: Installing software packages in your project/assignment or view installed software. + +.. _box_parts: + +Installing Software Packages +============================ + +.. toctree:: + :caption: Installing Software Packages + :hidden: + + file-locations + default-installed + parts-coding + langserver + gui + + +Codio provides a way to install the set of software packages that are in high demand. You can install this software from the **Tools > Install Software** menu. From the **Install software** page, you can run scripts that install, configure, or reconfigure software components instead of manually installing them from the command line. + +.. image:: /img/install-sw-g2.png + :alt: Install Software + +Locate the software that you want to install and click the **Install** icon to start the installation. + +Install software from the command line +-------------------------------------- +Our boxes provide full `sudo` (root) access, so you can also use the Ubuntu `apt `_ package manager, which provides thousands of software packages that are maintained by the Ubuntu community. + +If you want to provide fully pre-configured boxes, use :ref:`Stacks ` instead the **Install Software** option. + + +Add or request new software packages +------------------------------------ +You can request new software packages or add a new package yourself. If you require a new script to be added to the **Install Software** list, use one of the following methods: + +- Visit the `Issues `_ page on our GitHub repository and create a new issue detailing your requirements. + +- Fork our `GitHub repository `_, add the script yourself, and then submit a pull request. + +For instructions on how to add your own software package scripts, see :ref:`Add Your Own Packages `. + +Autostart +--------- +Services that require a restart, are automatically started on installation. You can manually start, stop, and restart services using the following terminal commands: + +``$ sudo service start`` + +``$ sudo service stop`` + +``$ sudo service restart`` + +Restricting Students from installing unauthorized software +---------------------------------------------------------- + +If you wish to restrict students' ability to install software packages in course assignments, you can do so at the course level. See :ref:`revoking sudo access for all course assignments ` for more information. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/installsw/langserver.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/langserver.rst.txt new file mode 100644 index 00000000..1e02e6f8 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/langserver.rst.txt @@ -0,0 +1,46 @@ +.. meta:: + :description: The Language Server Protocol integrates features such as autocomplete, go to definition, and find all references. + +.. _langserver: + +Language Server Protocol +======================== + +The Language Server Protocol (LSP) is used to integrate features such as autocomplete, go to definition, and find all references. Currently, Java, OCAML, and Python LSPs are available. + +Below is a Python example: + +.. image:: /img/pythonexample.png + :alt: Python + +Enable LSP support +------------------ + +To enable enable LSP support, enter the following in your :ref:`User ` or :ref:`Project ` Preferences: + +.. code:: ini + + [codio-lsp] + enable_lsp_support = true + +If you are authoring content for use in a course, we recommend enabling LSP in :ref:`Project ` Preferences, as these are applied over user preferences. + +Install LSP +----------- +To install LSPs, follow these steps: + +1. Click the **Tools** tab and choose **Install Software**. +2. Find the relevant component and click the **Install** icon. + +The installation may take a few minutes and you should then :ref:`Restart ` your box before proceeding. + +Autocomplete +------------ + +Autocomplete is not automatically triggered as in HTML/CSS/JS files. To invoke autocomplete for LSP implemented files, use the following shortcuts: + +- Mac - Shift+Space + +- Others - Ctrl+Space + +If you want to change the default preference, see :ref:`User Preferences `. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/installsw/parts-coding.rst.txt b/docs/_sources/common/develop/ide/boxes/installsw/parts-coding.rst.txt new file mode 100644 index 00000000..1ec6ef75 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/installsw/parts-coding.rst.txt @@ -0,0 +1,105 @@ +.. meta:: + :description: Adding rour own software packages to the Install Software list. + +.. _parts-coding: + +Add Your Own Software Packages +============================== + +If you cannot find the software you want to install in the list, you can add your own package to the **Install Software** list by forking our GitHub repository, making the necessary modifications, submitting a pull request. + +The repository can be found at https://github.com/codio/install_software + +Software packages are installed by running a script. You can code your own install package using the concepts in this topic. + +Scripts +------- +A script is typically, but not necessarily, a bash script that runs a series of commands as you would on the command line to install or configure software on your Codio box. However, it can be any executable code you choose. + +The scripts written by Codio typically use Ansible, a very friendly deployment management system that greatly reduces complexity. + +package_list.json +^^^^^^^^^^^^^^^^^ +The **package_list.json** file is the manifest that lists the entire contents of the publicly available scripts. Each script has an entry in this file, and you must add a new item to the list when coding your own install package. Whenever you open the **Install Software** page (**Tools > Install Software**), this Install Software manifest is retrieved from our GitHub repo. + +Here's a example of the MySQL entry: + +.. code:: ini + + "mysql": { + "name": "MySQL", + "description": "MySQL is an open-source relational database management system (RDBMS)", + "script": "mysql/install.sh", + "version": "5.5.49", + "category": "data_stores" + } + +where: + +- ``script`` - is the path, relative to the root of the repo, where the installation script can be found. +- ``category`` - is the category that the component belongs to; you can update the category field field with any of the following categories: + + - data_stores + - deployment + - development_tools + - libraries + - shells + - programming_languages + - utilities + - web_development + +Example : MySQL +............... +The following example shows how to install MySQL from the **Install Software** page in a few seconds. Run the **MySQL** installation on a new box. The MySQL entry in the `package_list.json` file looks like this: + +.. code:: json + + "mysql": { + "name": "MySQL", + "description": "MySQL is an open-source relational database management system (RDBMS)", + "script": "mysql/install.sh", + "version": "5.5.49", + "category": "data_stores" + } + +You can see the reference to the ``mysql/install.sh`` script. + +Bash script +^^^^^^^^^^^ +This script calls our standard Ansible loader script, which in turn loads the relevant playbook. + +.. code:: bash + + #!/bin/bash + + bash -c "$(curl -fsSL https://raw.github.com/codio/install_software/master/tools/ansible.sh)" mysql + + echo "Mysql password root user password is 'codio'" + + +Ansible playbook script +^^^^^^^^^^^^^^^^^^^^^^^ +Ansible simplifies installations and configurations, as easier to read and maintain than using the main bash script with standard Ubuntu commands. For more information about Ansible playbooks, `click here `_. + +.. code:: ini + + --- + - name: Install MySQL + hosts: 127.0.0.1 + sudo: True + vars: + MySQL_root_pass: codio + tasks: + - name: Set MySQL root password before installing + debconf: name='mysql-server' question='mysql-server/root_password' value='{{MySQL_root_pass | quote}}' vtype='password' + - name: Set MySQL root again password before installing + debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{MySQL_root_pass | quote}}' vtype='password' + - name: Install MySQL + apt: name={{ item }} state=present + with_items: + - mysql-server + - mysql-client + - python-mysqldb + - copy: src=my.cnf dest=/home/codio/.my.cnf + + diff --git a/docs/_sources/common/develop/ide/boxes/overview.rst.txt b/docs/_sources/common/develop/ide/boxes/overview.rst.txt new file mode 100644 index 00000000..abc0b963 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/overview.rst.txt @@ -0,0 +1,32 @@ +.. meta:: + :description: Each Codio project or assignment IDE gets it's own dedicated Ubuntu Server (box) with sudo access. This is an overview of the Codio IDE box. + +.. _overview: + +IDE Box Overview +================ + +.. toctree:: + :caption: Boxes + :hidden: + + ide-access-permissions + terminal + access + ext-access + always-on + restart-reset + runmenu + startup + +Each Codio project gets its own dedicated Ubuntu Server (box) with sudo access. Review the information in these topics to learn how to access your box, administer it, and install software dependencies. + +To view details about your project box, click the **Project** tab on the menu bar and choose **Box Info** from the drop-down menu. + +.. image:: /img/box_info.png + :alt: Box Info + +Important 'localhost' configuration information +----------------------------------------------- +In many config files on your Box you would include a reference to `127.0.0.1` to access localhost. Please be sure to use `0.0.0.0` instead. + diff --git a/docs/_sources/common/develop/ide/boxes/restart-reset.rst.txt b/docs/_sources/common/develop/ide/boxes/restart-reset.rst.txt new file mode 100644 index 00000000..56c0aec6 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/restart-reset.rst.txt @@ -0,0 +1,25 @@ +.. meta:: + :description: Restarting a box is a reboot, resetting a box returns it to a fresh state. + +.. _Restart and Reset: + +Restart or Reset Box +==================== + +You can restart or reset your project's box from the **Project** menu. + +Restart +------- +To restart the box, click the **Project** tab and choose **Restart Box**. The reboot normally takes a few seconds. + +Reset +----- +Resetting a box is fairly destructive and should be used with caution. When performing a box reset, the box is returned to a fresh state but your code files are untouched. It also results in the following: + +- Any new folders or files that have been created will be deleted. +- All parts of the box outside the **~/workspace** folder will be reset. +- All code files in the **~/workspace** folder are untouched. +- Box restart. + +After a Reset, you must reinstall components (npm modules, ruby gems, etc.) and other modifications you may have made. + diff --git a/docs/_sources/common/develop/ide/boxes/runmenu.rst.txt b/docs/_sources/common/develop/ide/boxes/runmenu.rst.txt new file mode 100644 index 00000000..c4497b1d --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/runmenu.rst.txt @@ -0,0 +1,76 @@ +.. meta:: + :description: Customize the run button to execute commands and shell scripts. + +.. _customizable-run-menu: + +Customize Run Button +===================== +The Codio IDE offers the ability to customize the **Run** button, similar to using the ``alias`` command in the command line. When you click **Run**, a new terminal window opens to run the command. You can also force the command to run in an existing terminal window instead of opening a new window. + +Configure Run to open new terminal window +----------------------------------------- + +To customize the **Run** button to open a new terminal window where you can see the output, you must edit the **.codio** file in the root (`/home/codio/workspace` or `~/workspace`) of your project. + +.. image:: /img/run-menu.png + :alt: Run Menu + +In the .codio file, locate the lines below, and then copy and paste the following code: + +.. code:: ini + + { + // Configure your Run and Preview buttons here. + + // Run button configuration + "commands": { + "Install Learnyounode" : "npm install -g learnyounode", + "Run Lesson" : "./ns-executes.sh run {{filename_no_ext}} {{path}}", + "Verify Lesson" : "./ns-executes.sh verify {{filename_no_ext}} {{path}}", + "Completed Lessons" : "learnyounode", + "Run with Node" : "node {{filepath}} 3 4 5" + } + } + +When you click the **Run** button, it executes the last selected command. + +Configure to run in current terminal window +------------------------------------------- +If you want to configure the Run button to run commands in the current terminal window, modify the **id** field in the **.codio** file as follows: + +.. code:: ini + + { + "commands": { + "Node version": { + "id": "terminal_1", + "cmd": "node --version" + }, + "ls": { + "id": "terminal_1", + "cmd": "ls" + } + }, + + // Preview button configuration + "preview": { + "Project Index (static)": "http://{{domain}}/{{index}}", + "Current File (static)": "http://{{domain}}/{{filepath}}", + "Box URL": "http://{{domain3000}}/" + } + } + +.. Note:: + Commands with the same **id** will share the same terminal window. + + The terminal id should be "backend-guide" to execute a command in the terminal window opened by guides. + +When modifying the **.codio** file, you can also use the following tokens in the shell commands: + +- ``{filepath}}`` - inserts the path and full file name (/path/to/file.ext). +- ``{{path}}`` - inserts only the path to the selected file (/path/to/). +- ``{{filename}}`` - inserts the filename with its extension (file.ext). +- ``{{filename_no_ext}}`` - inserts the filename without the extension (file). +- ``{{domain3000}}`` - inserts the public url to your box; **word1-word2-3000.codio.io** to access over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443. +- ``{{domain80}}`` - can also be used instead of {{domain3000}} and it inserts the public url to your box; **word1-word2-80.codio.io** to access over port 80. +- ``{{domain}}`` - inserts the alternate public url to your box; **word1-word2.codio.io**; be aware that you will usually need to specify a port to reach a service running on your box (for example, **word1-word2-.codio.io**). \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/startup.rst.txt b/docs/_sources/common/develop/ide/boxes/startup.rst.txt new file mode 100644 index 00000000..cbfb7b38 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/startup.rst.txt @@ -0,0 +1,28 @@ +.. meta:: + :description: Configure services to autostart when you open your project. + +.. _startup: + +Autostart Services +================== +Your box is automatically configured to autostart, which means it is automatically put to sleep, and when you open your project, the box and services are started. + +You can also configure other services to autostart in the **startup.sh** bash script in your project or by installing **Autostart Support** from **Tools > Install Software**. + +For the script to be included in the stack we recommend `/home/codio/startup.sh`. + +If the project is using guides, you can use `.guides/startup.sh` or you can put the file in the workspace; students may be able to access and edit files visible to them in the workspace. + +Upstart +------- +Upstart can be used in Ubuntu 14.04 boxes. If you want to configure services to start when your box starts up, you should configure a **.conf** file. If you are not familiar with upstart, please Google it for configuration details. + +Systemd +------- +Systemd can be used in Ubuntu 18.04 and 22.04 boxes. If you want to configure services to start when your box starts up, you should configure a **.service** file and run ``sudo systemctl daemon-reload``. If you are not familiar with systemd, please Google it for configuration details. + +**Important** - You must specify the user account under which the service is run using ``setuid codio``. + +When is the Server put back to sleep? +------------------------------------- +Your server is put to sleep within a few minutes of you exiting your Project or after 60 minutes of inactivity. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/boxes/terminal.rst.txt b/docs/_sources/common/develop/ide/boxes/terminal.rst.txt new file mode 100644 index 00000000..d90c8326 --- /dev/null +++ b/docs/_sources/common/develop/ide/boxes/terminal.rst.txt @@ -0,0 +1,60 @@ +.. meta:: + :description: Open a terminal window in your project or assignment. + +.. _terminal: + +Terminal Window +=============== + +You can open a terminal window in a new IDE panel using the menu bar or the icons in the Filetree: + +- To open from menu bar, click **Tools > Terminal** on the menu bar. + +- To open from the file tree, click the **Terminal** icon in the upper menu bar of the file tree. + + .. image:: /img/terminalicon.png + :alt: Terminal Icon + +You can also have multiple terminals open simultaneously. + +You can create panels and tabs to customize your project layout. See :ref:`Panels and Tabs ` for more information. + +.. image:: /img//terminal.png + :alt: Terminal + + +Terminal settings +----------------- +You can modify the Terminal settings from the **Codio > Preferences** menu. The following settings can be modified (defaults are shown): + +.. code:: ini + + [terminal] + + ;Font size. + ; Type: int + font_size = 12 + + ;Terminal theme. + ; Type: string + theme = dark + + ;Number of lines available in the scroll history. + ; Type: int + scrollback = 3000 + + ;Quick Connect + ; Type: hotkey + show-connect-dialog = + + ;Connections Manager + ; Type: hotkey + show-connections-manager = + + ;Terminal. SSH connection to the box + ; Type: hotkey + backend-connection = Shift+Alt+T + +Preferences can be modified at the User level as described in :ref:`User Preferences ` or at the Project level. + +.. Note:: When changing settings at the Project level, the settings will be applied for all users looking at the project. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/debugger/create-debug-target.rst.txt b/docs/_sources/common/develop/ide/debugger/create-debug-target.rst.txt new file mode 100644 index 00000000..182dc5da --- /dev/null +++ b/docs/_sources/common/develop/ide/debugger/create-debug-target.rst.txt @@ -0,0 +1,56 @@ +.. meta:: + :description: Create and Manage Debugger Targets + +.. _create-debug-target: + + +Create and Manage Debugger Targets +================================== + +Before you can start debugging a project, you must first create your debug targets. Creating multiple targets allows you to: + +- Quickly debug the same application with different command line arguments to test different scenarios. +- Debug more than one application. + +You manage your debug targets on the **Debugger Settings** page. + +.. image:: /img/debug-targets.png + :alt: Debugger Settings + +Create a debug target +--------------------- + +To create a debug target, follow these steps: + +1. Click the **Tools** tab on the menu bar and choose **Debugger Settings**. Alternatively, you can click the **Configure** tab on the far right on the menu bar. + +2. On the Debugger Settings page, click **Create**. + +.. image:: /img/debug-target.png + :alt: Create Debug Target + + + +3. Click the **Debugger Type** drop-down and choose the programming language. + + If you are using C, C++, or Java, and debugging a simple single code file project, choose **Single C File**, , or **Single Java file** so you don't need to provide detailed compile and run configurations. + + The field that are displayed depend on the programming language that is selected. + +4. Enter a **Name** for the configuration and then complete the fields on the form. Typically, you need to provide: + + - The command to execute to your program along with any command line parameters you may want to include. + - Command to execute before debugging starts. This is usually a compile process. + + You can also reference the active file in use using ``{{filepath}}`` token which inserts the path and full file name (/path/to/file.ext). + + - If you are not using a single file configuration, you must also complete the following fields: + + - **Before Launch** - Compilation or build command. + - **Launch** - Command to launch the program. + + - If you are creating a target for a Java application, you must also set the **Debugger Port Number** to **5105**. + +5. Click **Create Target**. + +You are now ready to :ref:`start-debug`. diff --git a/docs/_sources/common/develop/ide/debugger/debugger.rst.txt b/docs/_sources/common/develop/ide/debugger/debugger.rst.txt new file mode 100644 index 00000000..20acfd9f --- /dev/null +++ b/docs/_sources/common/develop/ide/debugger/debugger.rst.txt @@ -0,0 +1,43 @@ +.. meta:: + :description: Debugger + +.. _debugger: + +Debugger +======== + +.. toctree:: + :caption: Debugger + :hidden: + + create-debug-target + start-debug + +Codio offers an integrated, language specific debugger that supports the following languages. + +- Java +- Python 2 +- Python 3 +- NodeJS +- C and C++ +- Deno + +.. Note:: :ref:`Contact us ` if you would like support for other languages. + +Codio provides a Starter Pack project that contains examples of debugger usage. Go to **Starter Packs** and search for **Demo Codio Debugger** if not already loaded in your **My Projects** area. Click **Use Pack** and then **Create** to install it to your Codio account. + + +If you are new to using a debugging tool, we suggest you view this useful video tutorial: + +.. raw:: html + + + +Prerequisites +------------- + +To use the Codio debugger, you must have the GDB component installed. If you installed Java, C, or NodeJS from a stack, the GBD components that support debugging are automatically installed. + +However, if you manually installed these languages, you will be prompted to install the GDB component when you attempt to run the debugger. Simply click the link to install the component. + + diff --git a/docs/_sources/common/develop/ide/debugger/start-debug.rst.txt b/docs/_sources/common/develop/ide/debugger/start-debug.rst.txt new file mode 100644 index 00000000..00dd6e8a --- /dev/null +++ b/docs/_sources/common/develop/ide/debugger/start-debug.rst.txt @@ -0,0 +1,76 @@ +.. meta:: + :description: Start Debug Session + +.. _start-debug: + +Start Debug Session +=================== + +You can launch an application in debug mode using one of the following +methods: + +- Click the **Configure** tab on the menu bar and choose your target from the drop-down list. If you have previously run the debug target, you can simply click the debug target the next time you want to run it. +- On the **Debugger Targets** page, click **Debug** for the target you want to run. +- Launch debugger from a page. See :ref:`Custom Buttons ` for details. + +.. figure:: /img/debug-launch.png + :alt: Launch Debugger + +The debugger launches and displays the code running. It may take a few seconds to load. + +.. figure:: /img/debug-started.png + :alt: Debugger Started + +It automatically stops on the first line of code, whether or not there is a breakpoint set. A breakpoint is a line of code where the debugger pauses code execution. + +- To set a breakpoint, click in the gutter next to the line number. When a breakpoint is set, a red dot appears on the line. +- Click the set breakpoint to remove it. + +Debugger controls +----------------- + +Use the following controls at the top of the debug panel to perform actions to execute the debugger after it stops code execution: + +.. figure:: /img/debug-buttons.png + :alt: Debug Control Buttons + +- **Resume** - Continues execution without stopping until another breakpoint is encountered. +- **Stop** - Stops execution and closes the debug window. +- **Step over** - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it executes the contents of that function but does not stop unless the function contains a breakpoint. +- **Step into** - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it stops on the first line within that function. +- **Step out** - Debugger exits the current function and stops on the next line of the calling function. If the current line is the main + entry function of the application, execution ceases and the debugger automatically restarts. + +Debugger features +----------------- + +The debug panel also includes the following features: + +- **Call stack** - Shows the parent functions relative to the function that contains the currently executing line of code. +- **Local variables** - All local variables of the current function and their current values are automatically displayed. +- **Watches** - Allows you to watch a specific variable and expressions for some languages. +- **Breakpoints** - Lists all the breakpoints currently set in any of your code files. You can disable them by unchecking the check boxes. +- **Console** - Displays status messages from the system and output data when you write output to the console (for example, a ``print('message')`` statement in Python). + +Standard input support +---------------------- + +Support for standard input (stdin) is available for: + +- C/C++ +- Node.js +- GDB + +Node example: + +.. code:: javascript + + function testStdIn() { + console.log("What is your name?"); + process.stdin.once('data', (chunk) => { + let name = chunk.toString(); + console.log("Hello, " + name + "!"); + }); + } + + testStdIn() \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/editing/abbreviations.rst.txt b/docs/_sources/common/develop/ide/editing/abbreviations.rst.txt new file mode 100644 index 00000000..e61e8bdc --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/abbreviations.rst.txt @@ -0,0 +1,127 @@ + +.. meta:: + :description: HTML and CSS abbreviations that expand to code in the IDE. + +.. _abbreviations: + +Abbreviations +============= + +Codio offers numerous HTML and CSS abbreviations that expand to code. You simply enter the abbreviation in the Code Editor and then press the **Tab** key to expand the abbreviation. For example: + +.. code:: css + + div>ul>li*3 + +which expands to + +.. code:: html + +
+
    +
  • +
  • +
  • +
+
+ +Basic HTML example +------------------ + +.. code:: css + + div>ul>li*3 + +results in + +.. code:: html + +
+
    +
  • +
  • +
  • +
+
+ +Juicier HTML example +-------------------- + +.. code:: ini + + #page>div.logo+ul#navigation>li*5>a{Item $} + +results in + +.. code:: html + +
+ + +
+ +Insertion stops/edit points +--------------------------- +Some abbreviations have insertion points. For example: + +.. code:: css + + a:link + +inserts: + +.. code:: html + + + +Where the ``|`` character represents the cursor after insertion. After you have entered the **href** url, press **Ctrl+Alt+right arrow** (not the **Tab** key) to jump to the next edit point. + +For more HTML abbreviations, see the `Emmet documentation `__. + +CSS examples +------------- + +* **w100p** results in **width: 100%** +* **m10p30e5x** results in **margin: 10% 30em 5ex** + +.. code:: css + + p100+m10e + +results in + +.. code:: css + + padding: 100px; + margin: 10em; + + +.. code:: css + + lg(left, #fc0, 30%, red) + +results in + +.. code:: css + + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#fc0), color-stop(0.5, 30%), to(red)); + background-image: -webkit-linear-gradient(left, #fc0, 30%, red); + background-image: -moz-linear-gradient(left, #fc0, 30%, red); + background-image: -o-linear-gradient(left, #fc0, 30%, red); + background-image: linear-gradient(left, #fc0, 30%, red); + +Fuzzy search +------------ + +Fuzzy search logic for CSS snippets is available to make finding abbreviations easy. Every time you enter an unknown abbreviation, Emmet attempts to find the closest snippet definition. For example: + +Instead of writing **ov:h** (overflow: hidden;) abbreviation, you can write **ov-h**, **ovh**, or **oh** and fuzzy search returns the correct abbreviation. + +For more details on CSS abbreviations, see the `Emmet documentation `__. + diff --git a/docs/_sources/common/develop/ide/editing/autocomplete.rst.txt b/docs/_sources/common/develop/ide/editing/autocomplete.rst.txt new file mode 100644 index 00000000..213b1d1f --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/autocomplete.rst.txt @@ -0,0 +1,56 @@ +.. meta:: + :description: Autocomplete is supported in HTML, CSS, and Javascript files. Simply start typing and matches are automatically displayed. + +.. _autocomplete: + +Autocomplete +============ +Autocomplete is supported in HTML, CSS, and Javascript files. Simply start typing and matches are automatically displayed. + +If you choose, you can disable autocomplete in your preferences: + +``automatic_completions = false`` + +Other languages are supported with **language server protocol** although in such files, autocomplete is not automatically enabled. See :ref:`Language Server Protocol ` for more information. + +HTML tags +--------- +Autocomplete is context sensitive, so you will only be shown tags that are relevant to your location in the HTML file. + +For example, if you are not in ````, fewer autocomplete options are shown. If you place your cursor inside the ```` tags, a full list of standard HTML tags are shown. + +HTML attributes +--------------- +If you enter ```` tag are shown. + +Tern and javascript +------------------- +We support intelligent autocomplete using TernJS. Tern also supports explicit directives in the **.tern-project** file, which you can move to the root (`/home/codio/workspace` or `~/workspace`) of your project. + +The file looks like this: + +.. code:: json + + { + "libs": [ + "browser", + "jquery" + ], + "loadEagerly": [ + "importantfile.js" + ], + "plugins": { + "requirejs": { + "baseURL": "./", + "paths": {} + } + } + } + + +Codio only supports autocomplete for the currently opened file and items specified in the ``libs`` section of the **.tern-project** file. Refer to the `Tern documentation `_ for full details on how to configure the **.tern-project** file. + +CSS +--- +To invoke autocomplete in a css file, use the **ctrl+space** keyboard shortcut. + diff --git a/docs/_sources/common/develop/ide/editing/av-chat.rst.txt b/docs/_sources/common/develop/ide/editing/av-chat.rst.txt new file mode 100644 index 00000000..be183888 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/av-chat.rst.txt @@ -0,0 +1,51 @@ +.. meta:: + :description: Audio, Video, Chat in Codio + +.. _av-chat: + +Audio Video Chat +================ + + +When accessing another users project (where :ref:`permissions ` have been granted by the project owner or for teachers viewing the students assignment, a **Call** button will show allowing Audio/Video calls and or real time chat. + + +.. image:: /img/monitor_students/call.png + :alt: Audio Video + +Hide A/V calls +-------------- + +If you wish to disable A/V calls, organization owners can do this in the organization settings area. See :ref:`Hide A/V Calls ` for more information + +Permissions +----------- + +Permission for your camera/microphone is required and your browser will prompt you to allow.Permission + +If permission has been denied, you can re enable in your browser + +Google Chrome: +************** + +If you are using Google Chrome you can access your settings through the padlock icon in the top left of your screen, next to the URL of the page you are currently on. + +Click Site settings and make sure your camera and microphone both say Allow + +Firefox: +******** +If you are using Firefox as your internet browser you can access your settings by typing "about:permissions" into the location bar as if it were a website and hitting enter. + + +This will take you to your settings page, click the following link to find out more about changing your settings: + +https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more?redirectlocale=en-US&redirectslug=how-do-i-manage-website-permissions + +Safari: +******* +If you are using Safari, you can access your browser settings by clicking Safari and then Preferences. + + +You will see a pop up box and can update your settings. Learn more about how to update the settings through the following link: + +https://support.apple.com/en-nz/guide/safari/ibrwe2159f50/mac \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/editing/code-beautifier.rst.txt b/docs/_sources/common/develop/ide/editing/code-beautifier.rst.txt new file mode 100644 index 00000000..58012747 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/code-beautifier.rst.txt @@ -0,0 +1,33 @@ +.. meta:: + :description: Applying the Code Beautifier will automatically indent and manage spaces in your code to format it correctly. + +.. _code-beautifier: + +Code Beautifier +=============== +The Code Beautifier feature automatically indents and manages spaces in your code to format it correctly. You apply the Code Beautifier using the shortcut keys, which can be customized in :ref:`User Preferences `. + +* key_format_code = cmd+Shift+B (Mac) +* key_format_code = Ctrl+Shift+B (PC/Linux) + +As an example, if you enter code as follows: + +.. code:: js + + if ('this_is'==/an_example/){of_beautifer();}else{var a=b?(c%d):e[f];} + + +It transforms to this after applying the Code Beautifier shortcut: + +.. code:: js + + if ('this_is' == /an_example/) { + of_beautifer(); + } else { + var a = b ? (c % d) : e[f]; + } + + +Settings +-------- +The **Code Beautifier** settings can be found in the [code-beautifier] section of the Codio Preferences. You can also modify these settings in :ref:`Project Preferences ` to force beautification to all code, regardless of who edits it. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/editing/code-editing.rst.txt b/docs/_sources/common/develop/ide/editing/code-editing.rst.txt new file mode 100644 index 00000000..d271e0a0 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/code-editing.rst.txt @@ -0,0 +1,34 @@ +.. meta:: + :description: Special code editing features when working with HTML, CSS, and Javascript files. + +.. _code-editing: + +Code Editing Features +===================== + +.. toctree:: + :caption: Code Editing Features + :hidden: + + abbreviations + autocomplete + av-chat + code-beautifier + color-picker + command-bar + connect-github-codio + cursor + git + junit + keyboard-shortcuts + force-language-highlighting + preview + quick-open + real-time-collaboration + save-files + search-replace + share-project + vscode + +Codio has various IDE features to enhance productivity when working with HTML, CSS, and Javascript files. These features are based on the `Emmet `__ web-developers toolkit (formerly Zen Coding). For additional information about Emmet syntax, see the `Emmet documentation `__. + diff --git a/docs/_sources/common/develop/ide/editing/color-picker.rst.txt b/docs/_sources/common/develop/ide/editing/color-picker.rst.txt new file mode 100644 index 00000000..679f389f --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/color-picker.rst.txt @@ -0,0 +1,29 @@ +.. meta:: + :description: You can preview colors of code and choose a different color using the Color Picker feature. + +.. _color-picker: + +Color Picker and Preview +======================== +You can preview colors of code and choose a different color using the Color Picker feature. + +To preview a color, hover over the code to see the RGB hex value (100, 100, 100), or hsla (0,100%,50%,0.2) in a popup. + +.. figure:: /img/color-preview.png + :alt: Preview Color + +You can also preview gradients. + +.. figure:: /img/gradient-preview.png + :alt: Preview Gradients + +Color picker +------------ +To choose a new color, move your mouse into the color preview area and click to open the Color Picker. You can then select a new color by dragging the cursor or entering a specific value. + +.. figure:: /img/picker-1.png + :alt: Color Picker + +.. figure:: /img/picker-2.png + :alt: Color Picker - Enter Value + diff --git a/docs/_sources/common/develop/ide/editing/command-bar.rst.txt b/docs/_sources/common/develop/ide/editing/command-bar.rst.txt new file mode 100644 index 00000000..4441ad4c --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/command-bar.rst.txt @@ -0,0 +1,16 @@ +.. meta:: + :description: The Command Bar allows you to access almost all of the Codio actions from a searchable list. + +.. _command-bar: + +Command Bar +=========== +The **Command Bar** allows you to access almost all of the Codio actions from a searchable list. You can also use it to look up keyboard shortcuts. You simply start typing and the list is refined as you type. + +.. image:: /img/command-bar.png + :alt: Command Bar + +Use one of the following methods to invoke the Command Bar: + +- Click **Tools** on the menu bar and choose **Command Bar**. +- Press **Cmd+Shift+P** (Mac) or **Ctrl+Shift+P** (PC/Linux) on the keyboard. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/editing/connect-github-codio.rst.txt b/docs/_sources/common/develop/ide/editing/connect-github-codio.rst.txt new file mode 100644 index 00000000..0240e341 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/connect-github-codio.rst.txt @@ -0,0 +1,145 @@ +.. meta:: + :description: Connecting a Codio project/assignment to a GitHub repo. + +.. _connect-codio-github: + +Connecting a Codio Box to a GitHub Repo +======================================= +The first step to using GitHub in Codio is connecting your Codio and GitHub accounts. You only have to do this once. Follow these steps: + +1. Click your user name in the bottom left of the main menu. + +2. Click the **Applications** tab. + + .. image:: /img/GitHub1.png + :alt: + +3. In the GitHub section, click **Connect account** and log in to your Github account when prompted. + + .. image:: /img/Github2.png + :alt: GitHub Connect Account + +4. If you are using SSH connections, click **Upload public key** so Codio and Github can exchange keys. + +In GitHub: Make a new repo +-------------------------- +Each Codio box (Assignment, Book, or Project) can be mapped to a GitHub repo. This connection only needs to be established once per box. + +.. Note:: If you have an existing repo you want to clone, you can :ref:`import ` a project from a GitHub repo and this connection is made during the importing process. If you are familiar with Git, skip the rest of this guide and just use the terminal as usual by going to **Tools > Terminal**. + +To create a new repo, follow these steps: + +1. Go to your GitHub organization (or profile) and click the green **New** repository button. + + .. image:: /img/NewRepo.png + :alt: New Repo Button + +2. Complete the requested details. We suggest **not** initializing a README since one already exists in Codio and will result in an immediate conflict. + + .. image:: /img/RepoConfig.png + :alt: Create New Repo + +3. Copy either the **HTTP** or **SSH** URL on the created repo page (if you do not want to type credentials and you uploaded your public key, use SSH). + + .. image:: /img/RepoURL.png + :alt: Repo URL + +In Codio: Connect to repo +------------------------- +.. Note:: You can skip the rest of this guide and do your normal Git workflow via command line if you prefer. Open a terminal from **Tools > Terminal** on the menu. + +To connect to your repo from Codio, follow these steps: + +1. On the Codio Box you want to connect, click the **Tools > Git > Remotes** menu. + + .. image:: /img/RemoteMenu.png + :alt: Remotes Menu + +2. When prompted, click **Yes** to initialize a local git repository. + + .. image:: /img/gitInit.png + :alt: Initialize + +3. When prompted, click **Add Remote**. + + .. image:: /img/RemoteConfig.png + :alt: Add Remote + +4. Enter the name (origin is the git standard) and paste the URL that you copied into the URL field. + +5. Click **Save** and then **Close**. + + .. image:: /img/RemoteConfig2.png + +6. Click **Tools > Terminal** on the menu to open a terminal window. + + .. image:: /img/terminal.png + :alt: Terminal + +7. Type `git add .` and press **Enter/Return**. +8. Type `git commit -m "initial commit"` and press **Enter/Return**. +9. Type `git push --set-upstream origin master` and press **Enter/Return**. + +Collaboration in Codio with GitHub +---------------------------------- +If you share Codio boxes with other members of your GitHub repository (directly through **Project > Permissions** or a copy through **Project > Fork**), the connection to GitHub is maintained. However, other members must also link their GitHub and Codio accounts. + +Saving your work with Git (Committing and Pushing) +-------------------------------------------------- +Git allows you to save multiple versions of your work using a few commands in the terminal (**Tools > Terminal**). + +.. image:: /img/terminal.png + +Follow these steps to save your work: + +1. In the terminal window, type `git add .` and press **Enter/Return**. This command tells git to go collect all the changes you have made since your last save (which is called a commit in Git). + +2. Type `git commit -m "commit message"` and press **Enter/Return**. This command bundles all your changes and gives them a useful human-readable name so make sure you provide something useful for the **Commit Message**. + +3. Type `git push` and press **Enter/Return**. This command sends this bundle of changes to GitHub so you have a copy in the cloud. + +Going back to immediately previous save point (Reverting to previous commit) +---------------------------------------------------------------------------- +To get rid of all changes since your last save or commit, follow these steps: +Warning: Be careful, you cannot undo this! + +1. First, check what your last commit or save was to make sure you know where you are going back to. You can either look on GitHub or type `git log`. If you have a lot of commits, you will need to type **Ctrl+c** to exit git log. + +2. Type `git add . && git reset --hard HEAD`. + +Manually importing a Git repo into Codio +---------------------------------------- +To manually import a Git repo into Codio, follow these steps: + +1. In GitHub, click the **Clone URL** link in the right pane and copy to the clipboard. + + .. figure:: /img/github-clone-url.png + :alt: create from GitHub + + If you are cloning using SSH, you must have already added the Codio SSH public key as described in :ref:`Upload SSH Key to Remote Server `. + +2. Log in to Codio and click **New Project**. + +3. Click the **Click here** link for more options. + + .. image:: /img/github-create.png + :alt: create from GitHub + +4. In the **Select your Starting Point** area, click **Import**. + +5. From the **Source** drop-down list, choose **Git**. + +6. Paste the Git URL into the **URL** field and add details about the project. + +7. Click **Create**. Codio loads the repo and displays it. + +A few Git helpers +----------------- +We have added a few Git helpers to the **Tools > Git** menu. + +.. image:: /img/git-overview.png + :alt: Git Overview + +More Information +---------------- +Refer to the documentation on GitHub.com and http://git-scm.com/docs for complete information about using Git and GitHub. \ No newline at end of file diff --git a/docs/_sources/common/develop/ide/editing/cursor.rst.txt b/docs/_sources/common/develop/ide/editing/cursor.rst.txt new file mode 100644 index 00000000..701b024c --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/cursor.rst.txt @@ -0,0 +1,27 @@ +.. meta:: + :description: Multiple cursors allow you to create multiple insertion points in a file. + +.. _cursor: + +Cursor Features +=============== + +Cursor presence +--------------- + +When accessing another users project (where :ref:`permissions ` have been granted by the project owner), all active users in a project are indicated by a colored icon in the menu bar when files are being accessed or edited. If you click the icon, it changes focus to show which user is currently editing the file. If you hover over the icon, you can see the file name and line currently being edited. + +.. image:: /img/monitor_students/cursorpresences.png + :alt: Cursor Presense + +This feature is useful when assisting other users so you can see what they are doing in real time, or when you are demonstrating to others so they can see what you are doing in real time. + +Multiple cursors +---------------- +You can place multiple cursors anywhere in a file using the following keyboard shortcut: + +- **Alt+Click** + +Click to place the cursor at the desired location, and then press and hold **Alt** clicking at new locations. When you release Alt you can start typing and the content will be duplicated at all cursor locations. + + diff --git a/docs/_sources/common/develop/ide/editing/force-language-highlighting.rst.txt b/docs/_sources/common/develop/ide/editing/force-language-highlighting.rst.txt new file mode 100644 index 00000000..03c9cd45 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/force-language-highlighting.rst.txt @@ -0,0 +1,18 @@ +.. meta:: + :description: Showing the language to use for syntax highlighting and ECMAScript 6 + +.. _lang-highlight: + +Language Highlighting +===================== +Codio automatically selects the syntax highlighting rules based on the file extension. + + +ECMAScript 6 support +-------------------- + +ECMAScript 6 is enabled by default in javascript files. + +If you wish additional configurations to apply, you can add a `.jshintrc` file to the root (`/home/codio/workspace` or `~/workspace`) of your project/assignment. See https://github.com/jshint/jshint/blob/master/examples/.jshintrc for more information + + diff --git a/docs/_sources/common/develop/ide/editing/git.rst.txt b/docs/_sources/common/develop/ide/editing/git.rst.txt new file mode 100644 index 00000000..a61aea92 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/git.rst.txt @@ -0,0 +1,263 @@ +.. meta:: + :description: Using Git and GitHub in Codio. + +.. _git: + +Git and GitHub +============== +Git and GitHub are preinstalled, as well as Mercurial and SVN. You can open a :ref:`Terminal window ` to access them from the command line. The **Tools > Git** menu includes options for using Git. + +You can also configure your **.codio** file to create a **Run** menu from which you can access common commands in the Codio IDE. See :ref:`Customize Run Button ` for more information. + +If you are new to Git, refer to the following to get started: + +* `Git is simpler than you think `__ (explains how Git works rather than teaching you usage). + +* `Git reference `__ +* `10 Git Tutorials for beginners `__ + + +Use Git without remote repos +---------------------------- +You can use Git commands in your Codio project without using a remote repo, providing more collaborative capabilities and comprehensive version control. However, you can add a remote repository, such as GitHub (recommended), if you want to save your code in more than one location as a back up. + +To add a repo, click **Tools > Git > Remotes**. + +View GitHub repos +----------------- +GitHub let's you browse around a repo but it's not the same as using an IDE. Codio gives you a great way of viewing any GitHub (or Git) repo. For web apps, you can even run and :ref:`preview ` in Codio. + +Provide link to project in readme.md file +----------------------------------------- +You can include a link to your project in the project readme.md file that initiates the creation of a project and imports it from the repo into the users Codio account. When you make changes to your repo, the changes are automatically shown in Codio since a brand new Codio project is created whenever the link is clicked. If a project with the same name already exists, users can change the name on the project creation page. + +.. figure:: /img/github-readme.png + :alt: create from GitHub + +To create the link in your GitHub README.md file (or anywhere else for that matter), enter the following: + +:: + + https://codio.com/home/projects/new?importType=git&activeTab=3&name=your_codio_project_name&importGitUrl=git@github.com:your_github_name/your_repo_name&stackVersion=stack_version_id + +To specify a specific branch (for example, you have a demo or GitHub Pages site that you want to load into Codio), enter the following: + +:: + + https://codio.com/home/projects/new?importType=git&activeTab=3&name=your_codio_project_name&importGitUrl=git@github.com:your_github_name/your_repo_name&branch=other_branch&stackVersion=stack_version_id + +Find stack version ID +..................... +To find the appropriate stack to use with your repo, go to **Stacks** in the Dashboard, choose the stack to be used, and click **Use Stack**. In the address bar, you can view the stack version ID to add to your link in the readme.md file. + +Example showing the **Empty Stack** stack version ID: + +.. figure:: /img/stackversionid.png + :alt: Empty Stack Version ID + +You can use any method for linking to Codio but we recommend using the following images: + +.. figure:: /img/open-in-ide.png + :alt: Open in IDE + +.. figure:: /img/demo-in-ide.png + :alt: Demo in IDE + +Manually import a Git repo into Codio +------------------------------------- +To manually import a Git repo into Codio, follow these steps: + +1. In GitHub, click the **Clone URL** link in the right pane and copy to the clipboard. + + .. figure:: /img/github-clone-url.png + :alt: create from GitHub + + If you are cloning using SSH, you must have already added the Codio SSH public key as described in :ref:`Upload SSH Key to Remote Server `. + +2. Log in to Codio and click **New Project**. + +3. Click the **Click here** link for more options. + + .. figure:: /img/github-create.png + :alt: create from GitHub + +4. In the **Select your Starting Point** area, click **Import**. + +5. From the **Source** drop-down list, choose **Git**. + +6. Paste the Git URL into the **URL** field and add details about the project. + +7. Click **Create**. Codio loads the repo and displays it. + + +Create new GitHub repo from Codio +--------------------------------- +If you have code in Codio and want to create a new GitHub (or other remote) repo, follow these steps: + +1. Create a new project in Codio or open up an existing project. +2. Open the terminal (**Tools > Terminal**), type **git init** and press **Enter** to initialize Git. +3. Create a new, empty repo on GitHub or other remote repo. +4. Copy the repo url to the clipboard. + +.. Note:: If you're using GitHub, use the **SSH url** rather than **https**. Also make sure that your Codio public key is uploaded to your GitHub account or repo settings as described in :ref:`Upload SSH Key to Remote Server `. + + .. figure:: /img/github-new-repo.png + :alt: github repo + +5. In the Codio IDE, click **Tools > Git > Remotes** on the menu. +6. Click the **Edit** icon and enter the **Name** and paste the **URL** into the field. It is recommended you use **origin** as the name to confirm the normal standards. You do not need to specify a username or password if you are using SSH. +7. Click **Save**. + +Check project status +-------------------- +Whenever you want to see the Git status of your project, enter ``git status``. Initially, nothing will be returned until changes are committed. + +.. code:: bash + + $ git status + # On branch master nothing to commit, working directory clean + +Track files +----------- +Codio uses Git by default and if you import a project from a Git repo, all the existing files are ready to be tracked. Tracking means that Git knows about them. If you add a new file, Git does not know about it and needs to be explicitly told: + +1. Add a new file (**test.txt**) and then add a few random characters to it. +2. Open any other existing file and make a small change to it. +3. Run ``git status`` and you should see results similar to the following, which shows the modified and the new (untracked) files: + + .. code:: bash + + # On branch master ` + # Changes not staged for commit:` + # (use "git add ..." to update what will be committed) + # (use "git checkout -- ..." to discard changes in working directory) + # + # modified: humans.txt + # + # Untracked files: + # (use "git add ..." to include in what will be committed) + # + # test.txt no changes added to commit (use "git add" and/or "git commit -a") + +4. To tell GitHub to track the file, enter one of the following commands: + + - ``git add .`` - tells Git to track all files in the project that are not yet tracked. This is the quickest and simplest way to track any new files. + - ``git add FILENAME`` - explicitly tracks a single file. + +Stage files +------------ +A staged file is one that is tracked and is ready to commit to the repository. Once you run ``git add``, the file is being tracked and staged. However, if you modify a tracked file, the modifications are not staged. To stage the file, rerun ``git add``. + +Commit your changes +------------------- +Committing means that you want to add your staged files into the repository. You can commit using one of the following commands: + +- ``git commit -m 'commit message'`` - commits all staged files to the repo. +- ``git commit -a -m 'commit message'`` commits all staged files to the repo and also automatically stages any tracked files before committing them. If you use this command, you do not need to run ``git add`` unless you want to add new, untracked files. + +The commit message is important as it allows you to see what general changes are included in the commit. For example: + +``git commit -a -m "added test.txt and modified some stuff"`` and get + +.. code:: bash + + [master d3e6bb1] added test.txt and modified some stuff + 2 files changed, 2 insertions(+) + create mode 100644 test.txt` + +If you run a ``git status``, you can see that everything is clean and up-to-date. + +.. code:: bash + + # On branch master nothing to commit, working directory clean + +Revert code +----------- +You can revert your code back to an earlier commit to roll back your changes. Use one of the following commands to revert: + +- ``git revert 'commit id'`` - reverts back to the SHA (uid); you can see when you type ``git log``. +- ``git revert HEAD`` - reverts back to the last commit, deleting any uncommitted changes. +- ``git revert HEAD~n`` - reverts to the last n commit; for example, HEAD~3 reverts to the 4th last commit. +- ``git revert HEAD^^^`` - (count of ^ is like ~n) - reverts to the last n commit; for example, HEAD^^^4 reverts to the 4th last commit. + +For more information about reverting code, see http://git-scm.com/docs/git-revert.html. + +Push to a remote repository +--------------------------- +If you have a remote repository configure, commit your changes using the ``git push origin master`` command, where: +- ``origin`` - is the name of the remote repo. +- ``master`` - is the name of the branch. When you create a new Codio project, a ``master`` branch is automatically created and appears in brackets at the top of the file tree next to the project name. + +You can view your pushed commits in the GitHub repo. + +Pull from a remote repository +----------------------------- +If others are working remotely on the same code (not in Codio), they are also pushing their code to the GitHub repo. Run the ``git pull origin master`` command to pull in changes from the remote repo and automatically merge the code. + +Resolve conflicts +----------------- +When you pull in from the remote, you may get a conflict warning. This occurs if someone else has modified code in a way that Git cannot automatically resolve it, usually because you have been editing the same code. + +You can minimize conflicts by committing small changes and pulling from master often. + +To resolve the conflict, follow these steps: + +1. Open the file. Something similar to the following is displayed: + + .. code:: bash + + <<<<<<< HEAD:index.html + + ======= + + >>>>>>> iss53:index.html + +2. Remove the code block that you do not want to keep. The top block is your code and the bottom comes from the code that is being merged. If you want to keep your code, modify as follows: + + .. code:: html + + + + + If you want to keep the merged code, modify as follows: + + .. code:: html + + + +Branches +-------- +When you create a branch, you are creating a new area to code. You then merge another branch (usually the master branch), into your new branch. From this point on, you can do whatever you want (add, commit, push etc) without impacting the master branch on any other branch. For more information about branching, see http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is. + +Use the following commands for branching: + +- ``git branch`` - creates a new branch. +- ``git checkout`` - switches to that branch (be sure to commit your current branch before switching to another branch so you don't lose any unstaged files). +- ``git merge from-branch`` - merges code from ``from-branch`` into your current branch. + +It is recommended that you switch to your master branch and pull in changes from the remote, and then switch back to your working branch and merge changes. This practice will minimize conflicts. + +You can switch branches using the command line interface or from the **Tools > Git > Switch Branch** menu. + +Active branch +............. +You can see which branch is active by looking in the file tree. The top level item is the project name and the current branch is in brackets. + + +Basic commands +.............. + +- ``git status`` - shows the status of your current branch. +- ``git add .`` - adds all files, tracked or not, to the staged files. +- ``git commit -a -m`` - stages and commits all files to the snapshot. +- ``git push --set-upstream origin master`` - Run this command the first time you push to track the new remote. +- ``git push`` - used for subsequent pushes; this command pushes all committed changes of the ``master`` branch to the tracked remote (origin). + + + + + diff --git a/docs/_sources/common/develop/ide/editing/junit.rst.txt b/docs/_sources/common/develop/ide/editing/junit.rst.txt new file mode 100644 index 00000000..078a5514 --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/junit.rst.txt @@ -0,0 +1,54 @@ +.. meta:: + :description: Using JUnit to test Java code. + +.. _junit: + +JUnit Testing Framework +======================= + +Codio provides a simple way to test Java in your project using `Junit framework `_. To use JUnit, your project requires Java. Use one of the following methods to make sure your project uses Java: + +- Use the `Java8 `_ Stack. +- Manually install Java on your box. +- Install Java from **Tools > Install Software**. See :ref:`Install Software Packages ` for more information. + +Configure JUnit +--------------- +To configure to use JUnit for Java testing, follow these steps: + +1. Click **Tools** on the menu bar and choose **JUnit**. You can also use the shortcut **Shift+Alt+J**. + + .. image:: /img/junit.png + :alt: JUnit Settings + +2. Complete the fields on the **JUnit Settings** page: + + - **JUnit version** - Select the version from the drop-down list. + - **Source path** - Location of the source code. + - **Test source path** - Location of the test cases source folder. + - **Library path** - Path to any libraries used by the project. + - **Working directory** - Path where the compiled code should execute. + - **Add test case** - Specify the paths to a file with JUnit tests or drag and drop the file into the JUnit field. + +**Notes:** + +- All paths are relative to the root (`/home/codio/workspace` or `~/workspace`) of the assignment/project. +- If using multiple cases in an assignment/project, the files for each should all be in separate folders for them to work independently of each other. This applies to student code files as well as the code used for the cases. +- All code files **Source path** will be compiled. Files that fail to compile successfully will cause the tests to fail, even if they are not used. + +Timeout settings +---------------- + +The default timeout for JUnit execution is 30 seconds. You can change the timeout and default hotkey in :ref:`User Preferences ` or :ref:`Project Preferences `. To ensure that the same settings apply to all students using the same project, we recommend changing the timeout and hotkey in Project Preferences. + +.. image:: /img/junitsettings.png + :alt: JUnit Preferences + +Execute JUnit Test +------------------ +You execute the tests from the **JUnits Execution** page (**Tools > JUnit > Junit Executions**). Once completed, the results are shown on the page. + +.. image:: /img/junitexecution.png + :alt: JUnit Execute + +If you publish your project as a unit to a class, the JUnit configurations you set up are included in the unit for students. diff --git a/docs/_sources/common/develop/ide/editing/keyboard-shortcuts.rst.txt b/docs/_sources/common/develop/ide/editing/keyboard-shortcuts.rst.txt new file mode 100644 index 00000000..93ebe68a --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/keyboard-shortcuts.rst.txt @@ -0,0 +1,87 @@ +.. meta:: + :description: Keyboard Shortcuts available in the IDE. + +.. _shortcuts: + +Keyboard Shortcuts +================== + +Codio offers default keyboard shortcuts and Emmet keyboard shortcuts; all of which can be customized in :ref:`User Preferences `. General keyboard shortcuts can be found in the **Help > Shortcuts** menu. + +See the `Emmet Cheat Sheet `__ for a complete list of shortcuts. + +.. figure:: /img/emmet-ref.png + :alt: Emmet Cheat Sheet + + +Match tag pair +-------------- +Searches for tag(s) content bounds from current cursor position and selects it. It will expand (outward balancing) or shrink (inward balancing) selection when called multiple times. Not every editor supports both inward and outward balancing due of some implementation issues, most editors have outward balancing only. + +* Mac - **Cmd+D** (inward) and **Shift+Cmd+D** (outward) +* PC/Linux - **Ctrl+D** (inward) and **Shift+Ctrl+D** (outward) + +Go to matching pair +------------------- +Allows you to quickly traverse between opening and closing tag in HTML code. + +*Mac - **Shift+Cmd+T** +*PC/Linux- **Shift+Ctrl+T** + +Wrap with abbreviation +---------------------- +Expands an abbreviation and places currently selected content in the last element of generated snippet. If there’s no selection, action silently calls **Match tag pair** to wrap context element. + +* Mac - **Shift+Cmd+A** +* PC/Linux - **Shift+Cmd+A** + +Go to edit point +---------------- +Allows you to quickly traverse between important code points in HTML code blocks, including between tags, empty attributes, and new lines with indentation. + +* Win - **Ctrl+Alt+Right Arrow** or **Ctrl+Alt+Left Arrow** + +Select item +----------- +Action selects important code parts. In HTML, it selects tag name, full attribute, and attribute value. For class attribute it also selects distinct classes. In CSS, it matches selector, full property, and property value. For complex values and functions like 1px solid red or url (image.jpg), it also selects part of it. + +* Mac - **Shift+Cmd+** +* PC/Linux - **Shift+Cmd+** + +Toggle comment +-------------- +Toggles comments on and off for the selected line in HTML and CSS files. + +* Mac - **Cmd+/** +* PC/Linux - **Ctrl+/** + +Remove tag +---------- +Quickly removes tag, found by **Match tag pair** from current cursor position, and adjusts indentation. + +* Mac - **Cmd+K** +* PC/Linux - **Ctrl+K** + +Merge lines +----------- +Merges selected lines into a single line. When there is no selection, it matches context HTML tag. + +*Mac - **Shift+Cmd+M** +*PC/Linux - **Shift+Ctrl+M** + +Inline calculator +----------------- +Evaluates simple math expressions like 2\*4 or 10/2 and outputs its result. You can use ``\`` operator which is equivalent to round(a/b). + +* Mac - **Shift+Cmd+Y** +* PC/Linux - **Shift+Ctrl+Y** + +Increment/decrement number +-------------------------- +Increments or decrements the number under the cursor with different steps: 0.1, 1 or 10. + +* Mac/PC/Linux - **Alt+Up/Down** (inc/dec by 0.1) +* Mac/PC/Linux - **Ctrl+Up/Down** (inc/dec by 1) +* Mac/PC/Linux - **Ctrl+Alt+Up/Down** (inc/dec by 10) + + diff --git a/docs/_sources/common/develop/ide/editing/preview.rst.txt b/docs/_sources/common/develop/ide/editing/preview.rst.txt new file mode 100644 index 00000000..f60f7fbb --- /dev/null +++ b/docs/_sources/common/develop/ide/editing/preview.rst.txt @@ -0,0 +1,97 @@ +.. meta:: + :description: Preview static and dynamic content. + +.. _preview: + +Preview +======= +The Preview feature enables you to view your static and dynamic content. The menu options are configurable for both types of content: + +* **Preview status options** - Can be used for only static content (HTML, CSS, JS, and text). You can also easily preview static content on your mobile device using **Project > QR Code for Preview URL** to generate a QR code that you can scan with a QR reader on your device. + +* **Preview dynamic options** - To access files or services that are executed on the server (PHY, Ruby, Note, etc.), you need to use the right-most menu option. + + To access your server side application, enter **word1-word2-port.codio.io**. This accesses your box over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443. + + **word1-word2** is an automatically generated subdomain name for your Codio box. You can configure your application to listen on ports defined in the URL. However, Codio only supports a restricted range of ports. Refer to this section for more details (insert link). + +Using preview +------------- +Using the **Preview** button lets you preview one or more web pages with a simple button press. Codio creates three default entries in the Preview menu automatically: + +.. image:: /img/preview-deploy.png + :alt: Preview Button + +* Project Index - this is the default file to run for your project. It can be set by right-clicking a file in the Filetree. This option should be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option. +* Current File - whichever code file currently has focus. This option should only be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option. +* Box URL - Use this option for previewing PHP, Ruby, or other server side languages over HTTPS. Click here for more information on configuring port access for HTTPS. + +If you right-click a file in the file tree or the tab, you can also select **Preview Static**. + +.. image:: /img/preview-deploy-right-click.png + :alt: Preview Static + +See `Apache Password Basic Authentication `_ and `HTTP Authentication with PHP `_ for examples. + +Modifying the Preview menu +-------------------------- +You can customize the **Preview** menu using one of the following methods: + +- From the **Preview** or **Run** drop-down menus, choose **Configure**. +- Open the **.codio** file in the root (`/home/codio/workspace` or `~/workspace`)of your project (if it exists). + +To customize the Run and Preview buttons, modify this section of the **.codio** file: + +.. code:: ini + + { + // Configure your Run and Preview buttons here. + + // Run button configuration + "commands": { + "Node version": "node --version" + }, + + // Preview button configuration + "preview": { + "Project Index (static)": "https://{{domain}}/{{index}}", + "Current File (static)": "https://{{domain}}/{{filepath}}", + "Box URL": "https://{{domain3000}}/" + } + } + + +You can insert tokens to customize the menus: + +``{{domain3000}}`` is replaced by the public url required to access your project over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443. + +``{{domain80}}`` can also be used instead of {{domain3000}} and is replaced by the public url required to access your project over port 80. + +``{{domain}}`` is used along with the port number (default 3000) to your service. For example: + +``"Box URL": "https://{{domain3000}}/",`` + +For details about the various tokens that can be inserted see :ref:`Customize Run Button `. + +.. Note:: Static content is served over Port 80. To access dynamic content you may need to specify the appropriate Port. + + +Unsecure content error +---------------------- +Codio runs over a secure connection using HTTPS, therefore so does the inline preview. If your code references an external resource such as a script, font, or image, a browser error may occur indicating that there is some form of unsecure or mixed content because you are running in a mixed HTTP/HTTPS mode. This may occur when you reference something similar to the following: + +.. code:: html + +
+ +Accessing Codio Directly for LMS Users +-------------------------------------- +Students who initially accessed Codio through an LMS/LTI system, can set up direct access to Codio once their account has been created. They should use the same email address they use to access their LMS system for their Codio login, and then create a new password using the Lost Password process. See :ref:`Manage Password ` for more information. + +- Integrating with LMS's + - :ref:`Integrating with Canvas ` + - :ref:`Integrating with Blackboard ` + - :ref:`Integrating with Moodle ` + - :ref:`Integrating with D2L ` + - :ref:`Integrating with Google Classroom ` + - :ref:`Integrating with Schoology ` +- :ref:`Users account creation ` +- :ref:`Grading ` +- :ref:`LTI App ` +- :ref:`LTI Keys and URL ` +- :ref:`LTI Course Copy ` +- :ref:`Exporting Common Cartridge ` +- :ref:`LTI 1.3 integration ` +- :ref:`LTI 1.3 integration for Blackboard/D2L ` +- :ref:`LTI 1.3 integration for Canvas ` \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-students.rst.txt b/docs/_sources/instructors/admin/integration/lms-students.rst.txt new file mode 100644 index 00000000..9e8c749a --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-students.rst.txt @@ -0,0 +1,41 @@ +.. meta:: + :description: How your users are identified in Codio + +.. _lms-users: + +User account creation +===================== + +When integrating with an external system, you do not :ref:`add/invite ` students or teachers to your course. All is handled when the users access an assignment in the system mapped to Codio and the features to invite students into the course are not enabled. + +It is also important to understand how Codio maps external system users to Codio users. The following rules should be understood. + +- If students or faculty access Codio via an LMS assignment then Codio will initially use the LMS email address to identify the user and create the Codio account. + +.. Note:: Anonymous students (with no email associated) can access Codio through an LMS. This must be set up within the LMS. + +- In all subsequent access, the userID will be used so in the event the user changes their email address in the LMS, the user will be mapped to the same Codio account. +- If the user is not known to Codio then we will sign up the user as a new Codio user in the background and take the user directly into the Codio content. The LMS user role will be carried over as well. + +.. Note:: The users LMS password is not passed to Codio so if the user may wish to log into Codio directly in the future, they will need to create a :ref:`password ` for their Codio account (and of course it is always recommended that the same passwords are not used in different applications). + +- If the user is known to Codio then Codio will take them directly into the Codio content without any sign-in required. If they are a Codio user but are not a member of your organization then they will be required to complete a verification via email. + +- After successful mapping of an user's LMS account to their Codio account, if the user has changed their details such as name or email in their LMS account, Codio will automatically update those details the next time the user accesses Codio from their LMS. Codio will not update the email if another user with the same email already exists. + +Teacher Roles +~~~~~~~~~~~~~ + +Based on the LMS role, if teachers join Codio via the LMS, the following will apply: + ++----------------------+-----------------------------------------------------------------------------------------------------+ +| LMS Role | Will be added to Codio with these rights | ++======================+=====================================================================================================+ +| Teaching Assistant | TEACHER | ++----------------------+-----------------------------------------------------------------------------------------------------+ +| Content Developer | TEACHER | ++----------------------+-----------------------------------------------------------------------------------------------------+ +| Mentor | TEACHER (with :ref:`read only ` access to the course} | ++----------------------+-----------------------------------------------------------------------------------------------------+ + +If you wish to only allow Mentors to view/manage specific students in the course, see :ref:`Filter Learners For Mentors ` \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-systems/blackboard.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/blackboard.rst.txt new file mode 100644 index 00000000..3a2c0441 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/blackboard.rst.txt @@ -0,0 +1,110 @@ +.. meta:: + :description: Integrating with Blackboard + +.. _blackboard: + +Blackboard +========== + +Please be sure to check out the :ref:`Codio LTI App ` which allows for an easy way to integrate and to map Codio course assignments to your LMS system. The `following page `_ explains how to set up external apps in Blackboard Learn. + +In Codio: + +Enable LTI for Your Course +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Open the course you would like to connect or create a new course. +2. Make sure you have at least one published assignment or add a new one. (see :ref:`Add and Remove Course Assignments `) +3. Select the **LTI/LMS** tab. +4. Select the **ENABLE LTI** option. + + .. image:: /img/lti/enable-lti.png + :alt: enable lti + +5. Click **Save Changes**. + +Bring up the LTI Integration Information +---------------------------------------- + +6. Click your user name in the bottom left of your dashboard +7. Choose your Organization +8. Click the **LTI Integrations** tab to bring up the following settings. + + .. image:: /img/lti/LTIintegrationinfo.png + :alt: Org LTI info + + +In Blackboard +~~~~~~~~~~~~~ + +The Blackboard user who carries out these steps must be a Blackboard system administrator. + +9. Create a new Course in Blackboard. We suggest you create a test course called **Codio Blackboard** before you do it with a production course. +10. Look for the **System Admin** tab near the top right of the page and select it. +11. Look for the **Building Blocks** section and select it. +12. Click on **LTI tool providers**. +13. Click on **Register Provider Domain** in the menu bar. +14. In the **Provider Domain** field, enter ``apollo.codio.com``. +15. In the **Default Configuration** section, set **Default Configuration** to be **Set globally**. +16. In the **Organization Policies** section you should +17. set **Send User Data** to **Send user data only over SSL**. +18. in **User Fields to Send** you should set all 3 fields (Constituency in Course, Name, Email Address). + +In Codio and Blackboard +~~~~~~~~~~~~~~~~~~~~~~~ + +19. Now return to the **Default Configuration** section in Blackboard. We will now copy the following global integration fields from Codio to Blackboard. + +- LTI Consumer -> Tool Provider Key +- LTI Secret -> Tool Provider Secret + +Codio course setup +------------------ + +You need to perform the following actions one time only for a course. The Blackboard user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments. + +20. In Codio, go to your course and click on the **LTI/LMS** tab. +21. Go to the **LTI/LMS Settings** area. +22. At the top is a switch **Enable LTI** which you should check is enabled. +23. Below this is an empty field **Course LMS URL**. Switch back to Blackboard and make sure you are on the main the Codio Blackboard course you created earlier. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio. + +This URL ensures that Codio knows how to redirect students back to the correct Blackboard course should they attempt to access the course through their dashboard. + +Mapping an assignment to Blackboard Content +------------------------------------------- + +The final mapping step needs to be taken for each individual assignment within Codio. It maps a piece of Blackboard content to a Codio assignment. + +In Codio +~~~~~~~~ + +24. On the main course screen, make sure the **Edit Assignments** tab is selected. +25. Click the **Add Assignment** button and select **Project Based**. +26. Select a project that has some autograded assessments. The **My First Project** that you created earlier in the Onboarding Guide has some auto-graded assessments. You can also assign another project but you will need to manually grade the assignment so there are some scores to pass back to the Blackboard gradebook. +27. Once the assignment has been added to the course, you should click the icon with 3 blue dots and select **LTI Integration URL**. +28. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy). + +.. figure:: /img/lti/LMS-Unit-URL.png + :alt: Unit URL + +In Blackboard +~~~~~~~~~~~~~ + +We now return to Blackboard complete the mapping. + +29. Make sure you have selected the Blackboard course. +30. Click **Content** in the left hand menu. +31. Select or hover over **Build Content** in the menu bar +32. Select **Web Link**. +33. In the **Web Link Information** section ... +34. Enter a name for the content +35. Paste in the **LTI Integration URL** that you just copied to the clipboard from Codio +36. Check the box **Ths is a link to a tool provider** +37. Select **Yes** for the field **Enable Evaulation** after which more fields will appear +38. Set the points you want to award for this content (Codio will automatically scale the percentage value it uses to the points you specify here) +39. Save the content settings. + +Authentication and account creation +----------------------------------- + +To add students/teachers see :ref:`Users account creation ` \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-systems/canvas.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/canvas.rst.txt new file mode 100644 index 00000000..d5fce462 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/canvas.rst.txt @@ -0,0 +1,155 @@ +.. meta:: + :description: Integrating with Canvas + +.. _canvas: + +Canvas +====== + +Integrating with Canvas using LTI App +------------------------------------- +**This method is recommended.** + +The **Codio LTI App** method allows for an easy way to integrate and to map Codio course assignments to Canvas. Access the directions at :ref:`LTI App ` page. If you are not able to use the LTI App, follow the manual integration directions below. + +.. Note:: Configuring your LTI settings using the LTI App is only for the US version of Codio. It will not work with Codio UK (codio.co.uk). + +Integrating with Canvas Manually +-------------------------------- + +In Codio +~~~~~~~~ + +Enable LTI for Your Course +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +1. Open the course you would like to connect or create a new course. +2. Make sure you have at least one published assignment or add a new one. (see :ref:`Add and Remove Course Assignments `) +3. Select the **LTI/LMS** tab. +4. Select the **ENABLE LTI** option. + + .. image:: /img/lti/enable-lti.png + :alt: enable lti + +5. Click **Save Changes**. + +Bring up the LTI Integration Information +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +6. Click your user name in the bottom left of your dashboard +7. Choose your Organization +8. Click the **LTI Integrations** tab to bring up the following settings. + + .. image:: /img/lti/LTIintegrationinfo.png + :alt: Org LTI info + +In Canvas, adding Codio as an App +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Canvas user who carries out these steps must be a system administrator. + +9. Create a new Course in Canvas. We suggest you create a test course called **Codio Canvas** before you do it with a production course. +10. Select the Course. +11. Click on **Settings** in the left set of options. +12. In the top links, select **Apps**. +13. Click the large button **View App Configurations**. +14. Click on the blue **+ App** button. + +In Codio and Canvas +~~~~~~~~~~~~~~~~~~~ + +15. We will now copy the following global integration fields from Codio to Canvas. + +- LTI Consumer -> Consumer Key +- LTI Secret -> Shared Secret +- LTI URL -> Launch URL + +16. In Canvas you should then use one of the following steps: + +Option 1: By URL +~~~~~~~~~~~~~~~~ + +- Enter a suitable name (Codio Canvas LTI) in the **Name** field. +- In Codio select the **Copy Consumer** button to copy in to the **Consumer Key** field. +- Select the **Copy Secret Key** to copy in to the **Shared Secret** field. +- Select the **Copy XML URL** to copy in the to the **Config URL** field. +- Submit + +Option 2: Paste XML +~~~~~~~~~~~~~~~~~~~ + +- Enter a suitable name (Codio Canvas LTI) in the **Name** field. +- In Codio select the **Copy Consumer** button to copy in to the **Consumer Key** field. +- Select the **Copy Secret Key** to copy in to the **Shared Secret** field. +- Click on the ``XML Configuration`` link to open the XML and then copy in the to the **XML Configuration** field. +- Submit. + +Option 3: Manual Entry +~~~~~~~~~~~~~~~~~~~~~~ + +- Paste the 3 keys above into the appropriate fields. +- Enter a suitable name (Codio Canvas LTI) in the **Name** field. +- Enter **apollo.codio.com** into the **Domain** field. +- In the **Privacy** field, select **Public**. + +You should end up with something like this. + +.. figure:: /img/lti/canvas-global.png + :alt: Canvas Global + +Course LMS URL +-------------- +This URL ensures that Codio knows how to redirect students back to the correct Canvas course should they attempt to access the course through their dashboard. You need to perform the following actions one time only for a course. The Canvas user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments. + +17. In Codio, go to your course and click on the **LTI/LMS** tab. +18. Go to the **LTI/LMS Settings** area. +19. At the top is a switch **Enable LTI** which you should check is enabled. +20. Below this is an empty field **Course LMS URL**. Switch back to Canvas and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio. The url format should end with something like ``/courses/1121212`` although the number will be different. + +Mapping an Assignment to a Canvas Assignment +-------------------------------------------- + +The final mapping step needs to be taken for each individual assignment within Codio. It maps a Canvas assignment to a Codio assignment. + +In Canvas +~~~~~~~~~ + +21. Make sure you are in the Courses area. +22. Click on the **Assignments** link in the left hand side. +23. Provide a name for the Assignment. +24. Set the points for the Assignment. When the grades get passed back later, the Codio percentage score will be scaled to the points value you specify here. +25. Scroll down and look for the **Submission Type** field. + +.. figure:: /img/lti/canvas-submission-type.png + :alt: Canvas Submission + +26. You should now click on the dropdown list and select **External Tool**. +27. Specify the assignment using one of the two options: + + - **Add by Resource Selection Preview (recommended)** + + - Click the **Find** button. + - Click the Codio tool. + - Select the assignment you want to map to your course in Canvas. + + - **Add by LTI Integration URL** + + - Return to Codio and navigate to the course. Ensure you are in **Teach** mode. + - To the right of the assignment, click the icon with 3 blue dots and select **LTI Integration URL**. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy). + - Paste the **LTI Integration URL** in the URL field under **Enter or find an External Tool URL.** + +28. Select **Load This Tool In a New Tab**. +29. Click the **Save and Publish** button. +30. Make sure the Canvas course is published. + +Common Cartridge +---------------- + +In the Canvas course you have created go to **Settings** and **Import Course Content** and select **Common Cartridge 1 x Package** and proceed to upload the **.ismcc** file. + +If using the Common Cartridge file to import the Codio course assignment details into Canvas, each assignment needs mapping as above using the **Add by Resource Selection Preview (recommended)** method noted above. + +Authentication and account creation +----------------------------------- + +To add students/teachers see :ref:`Users account creation ` \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-systems/d2l.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/d2l.rst.txt new file mode 100644 index 00000000..3d8be7e7 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/d2l.rst.txt @@ -0,0 +1,146 @@ +.. meta:: + :description: Connecting your Codio course with your D2L Learning Management System. + + +.. _d2l: + +D2L +=== + +Creating an Admin level external tool +------------------------------------- +1. From the **Manage Tool Provider** tab select **New Tool Provider** + +.. figure:: /img/lti/newtoolprovider.png + :alt: Create an admin tool in D2L + +2. For the **Launch Point** type in `https://apollo.codio.com` and fill out the next two fields as depicted below. + +.. figure:: /img/lti/launchpoint.png + :alt: The Launch Point information + +3. Fill in the Consumer and Secret fields with those values provided by Codio (see instructions below) + +.. figure:: /img/lti/consumersecret.png + :alt: Consumer and Secret + +4. Type Codio in the **Name** field and you can leave the **Description** and **Contact Email** fields empty. + +5. The **Visibility** field “Allow users to use this tool provider” should remain checked. + +6. For the **Security Settings** check off everything as depicted further down in this document. + +7. Add Org units as necessary for your installation. + +8. Save and Close + +9. When the instructor wants to create a **New Link** in D2L (see below), they will use the LTI Integration link from the corresponding assignment in Codio. + +.. figure:: /img/lti/LMS-Unit-URL.png + :alt: Assigment URL + + +Creating a course level tool +---------------------------- + +**In Codio:** + +Enable LTI for Your Course +************************** + +1. Open the course you would like to connect or create a new course. +2. Make sure you have at least one published assignment or add a new one. (see :ref:`Add and Remove Course Assignments `) +3. Select the **LTI/LMS** tab. +4. Select the **ENABLE LTI** option. + + .. image:: /img/lti/enable-lti.png + :alt: enable lti + +5. Click **Save Changes**. + +Bring up the LTI Integration Information +**************************************** + +1. Click your user name in the bottom left of your dashboard. +2. Choose your Organization. +3. Click the **LTI Integrations** tab to bring up the following settings. + + .. image:: /img/lti/LTIintegrationinfo.png + :alt: Org LTI info + +**In D2L:** + +Create an External Learning Tools Link in D2L +********************************************* + +1. From the course homepage, select the **Edit Course** tab. +2. Under Site Resources, select **External Learning Tools**. +3. Click the **New Link** button. +4. Under *"Title"* write Codio. +5. Paste ``https://apollo.codio.com/lti/link_endpoint`` in (1) the URL field. +6. Under the **Key/Secret** heading, first ensure that *"Sign messages with key/secret with"* and *"Link key/secret"* are selected. +7. Copy the **LTI Consumer** information from Codio into (2). +8. Copy the **LTI Secret** information from Codio into (3). + + .. image:: /img/lti/D2Lscreenone.png + :alt: D2L view + +9. Fill in the Security fields as depicted in (4) below. + + .. image:: /img/lti/D2LScreen2.png + :alt: D2L view 2 + +10. Click **Save**. + +Connect your D2L Modules to your Codio Assignments +************************************************** + +1. Select the **Content** tab from the top of the page. +2. Add a new module in your D2L course. +3. Select **Add Existing Activities** (1) -> **External Learning Tools** (2) + + .. image:: /img/lti/D2Lconnectassignment.png + :alt: D2L view 3 + +4. From the list of available LTI links, select the Codio tool you created earlier. +5. Click on the Codio link to bring up all the Codio courses for which you have enabled LTI. +6. Select the Codio assignment you want to connect. +7. Refresh your page to view the rendered connection. You will see the Teacher view of the course with the connected assignment selected. Students will see the assignment opened in student mode. + + .. Note:: Grade items in D2L are associated with the external tool and as such each assignment will write to the same Grade item. To get around this you can either import your grades using a .csv file or use :ref:`LTI 1.3 `. + +Common Cartridge +---------------- + +If using the Common Cartridge file you should first set up an External Tool in Brightspace with the :ref:`LTI Key's and URL's ` for your organization. + +When done then in the Brightspace course you have created go to **Course Admin** and **Import/Export/Copy Components** and **Import Components** and proceed to upload the **.ismcc** file. + +When completed, **View Content** and then **External Learning Tools** where you will see all the assignments listed. + +Then go to **Content**, select **Existing Activities**, **External Learning Tools**, select your assignment from the list to add as an activity to the course. Repeat for each Codio assignment you wish to create an activity for + + +Single sign-in and account creation +----------------------------------- + +Codio maps D2L users to Codio users by using the D2L email address to identify the user and create the Codio account. In all subsequent access, the D2L userID will be used. In the event the user changes their email address in D2L, the user will be mapped to the same Codio account. + +- If the user does not have a Codio account, a new user account will be created in the background and the user will enter directly into the Codio content. The D2L user role is carried into Codio. +- If the user already has an account they will enter into the Codio content without any sign-in required. If they already have a Codio account, but are not a member of the organization, they will be required to complete an email verification. + + +Teacher Roles +------------- + +Based on the LMS role, if teachers join Codio via the LMS, the following will apply: + ++----------------------+-----------------------------------------------------------------------------------------------------+ +| LMS Role | Will be added to Codio with these rights | ++======================+=====================================================================================================+ +| Teaching Assistant | TEACHER | ++----------------------+-----------------------------------------------------------------------------------------------------+ +| Content Developer | TEACHER | ++----------------------+-----------------------------------------------------------------------------------------------------+ +| Mentor | TEACHER (with :ref:`read only ` access to the course} | ++----------------------+-----------------------------------------------------------------------------------------------------+ diff --git a/docs/_sources/instructors/admin/integration/lms-systems/google-classroom.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/google-classroom.rst.txt new file mode 100644 index 00000000..dfca54d0 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/google-classroom.rst.txt @@ -0,0 +1,66 @@ +.. meta:: + :description: Integrating with Google Classroom + +.. _google-classroom: + +Google Classroom +================ + +Integrating `Google Classroom `__ is very easy to do. ​ + +Setting up Integration +^^^^^^^^^^^^^^^^^^^^^^ + + +In Google Classroom +------------------- + + 1. Create a Class. + +In Codio +-------- + + 2. Go to the **LTI/LMS** area in the course you wish to integrate to Google Classroom. + 3. Select **Connect to Google Classroom** and authenticate to your Google account. + + .. figure:: /img/google_integrate.png + :alt: Connect to Google + + 4. When authenticated you will be redirected to the **Classes List** page and will see a list of your Google Classes. + 5. Select **Connect Class** button for the Google class you wish to connect your Codio course to. ​ + + |Connect to Codio| + + Your Codio Course is now integrated with your Google Class. + +.. Note:: Google classrooms do not support the ordering of modules/assignments from the Codio Course, they will be generated randomly but can easily be reordered from the **Classwork** tab in your Google Class + +Authentication and account creation +----------------------------------- + +6. To add students/teachers see :ref:`Users account creation ` + +Updating +^^^^^^^^ + +If assignments/modules are added/removed in the Codio Course, to update to your Google Classroom: + +7. Go to the **LTI/LMS** area in the course +8. Select **Update Google Classroom** to update + + +As above, be aware that this may change the ordering in your Google classroom so review and reorder as required from the **Classwork** tab + +Removing +^^^^^^^^ + +9. To remove the integration link between Codio and your Google Classroom ​ + +- Go to the **LTI/LMS** area in the course + +- Select **Remove Google Classroom** to update + + +.. Note:: Removing the integration link will mean students will not be able to access any of their assignments any longer from Google Classroom + +.. |Connect to Codio| image:: /img/google_classlist.png diff --git a/docs/_sources/instructors/admin/integration/lms-systems/moodle.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/moodle.rst.txt new file mode 100644 index 00000000..2b6c55b8 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/moodle.rst.txt @@ -0,0 +1,40 @@ +.. meta:: + :description: Integrating with Moodle + +.. _moodle: + +Moodle +====== + +Please be sure to check out the :ref:`Codio LTI App ` which allows for an easy way to integrate and to map Codio course assignments to your LMS system. Moodle added support for LTI™ apps in version 2.2. The `following page `__ explains how to set up external apps in Moodle. + +Setup and configuration +----------------------- + +.. Important:: Codio needs the User Role, Email Address and Name of the Moodle user in order to work. It is important that you access the LTI security settings and ensure that these three fields are always enabled. If they are not available, contact Moodle support who can help you enable this. If enabled after you have mapped Codio content to Moodle, you may need to re publish for the changes to be implemented + +**Video: Connect Moodle to Codio using the LTI Integration URL** + +.. raw:: html + +
+ +Common Cartridge +---------------- + +If using the Common Cartridge file you should first set up an External Tool in Moodle with the :ref:`LTI Key's and URL's ` for your organisation. +When done then in the Moodle course you have created: + +- go to the course settings and **Restore**, +- select the **.ismcc** to upload it and proceed to restore, +- and **Restore into this Course**. +- Proceed through the steps. + +.. Note:: It is Restore that is required as Moodle currently does not support importing of **.imscc** files + +When completed, you can check all is correct by then selecting any of the assignments listed in Moodle. If all OK you will be taken to the **Teacher** view of the assignment in Codio + +Authentication and account creation +----------------------------------- + +To add students/teachers see :ref:`Users account creation ` \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-systems/schoology.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/schoology.rst.txt new file mode 100644 index 00000000..643ff168 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/schoology.rst.txt @@ -0,0 +1,97 @@ +.. meta:: + :description: Integrating with Schoology + +.. _schoology: + +Schoology +********* + +Enable LTI for Your Course +-------------------------- +In Codio +~~~~~~~~ + +The Schoology system administrator should install a Codio external tool for the course so that it is quick and easy for instructors to add material. The Schoology system administrator should follow these directions to install Codio as an external tool: + +1. Open the course you would like to connect or create a new course. +2. Make sure you have at least one published assignment or add a new one. (see :ref:`Add and Remove Course Assignments `) +3. Select the **LTI/LMS** tab. +4. Select the **ENABLE LTI** option. +5. Select the **ENABLE LTI CONSTANT URLS** option. +6. Note the **Codio Course Target ID**, you will need that in subsequent steps. +7. Click **Save**. + + .. image:: /img/lti/enable-lti-new.png + :alt: enable lti and urls + +Bring up the LTI Integration Information +---------------------------------------- + +8. Click your user name in the bottom left of your dashboard. +9. Select your Organization. +10. Click the **LTI Integrations** tab to bring up the following settings. You will need to enter these into Schoology in the subsequent steps. + + .. image:: /img/lti/LTIintegrationinfo.png + :alt: Org LTI info + +In Schoology +~~~~~~~~~~~~ + +11. In your System Administrator account, click **Tools** in the header. +12. Select **School Management**. +13. Click **Integration** on the left. +14. Click **External Tools**. +15. Click **Add External Tool Provider** and fill out the form: + + .. image:: /img/lti/external-tool-form.png + :alt: External Tool Form + +* **Tool name**: this is the name educators see when adding external tools to their courses, so call this **Codio** +* **Consumer Key**: this is the **LTI consumer key** from Codio (reference step 10 above) +* **Shared Secret**: this is the **LTI secret key** from Codio (reference step 10 above) +* **Privacy**: Schoology suggests **Name and email of the user who launches the tool** +* **Configuration Type**: choose Manual > Matchy By > URL +* **Domain/URL**: this is the **XML URL** from Codio (reference step 10 above) +* **Custom Parameters**: this is the **Codio Course Target ID** from Codio (reference step 6 above) + + .. Note:: If you are teaching more than one course in Codio, your system administrator will need to enter each course's **Codio Course Target ID** in the Custom Parameters field. Each **Codio Course Target ID** should be on a new line. + +16. Click submit. + +Mapping an Assignment to a Schoology Assignment +----------------------------------------------- +In Schoology +~~~~~~~~~~~~ + +Once the system administrator has configured the external tool at the system level, return to your Materials page in Schoology. Then, to add the tool into your course: + +17. Click **Add Materials**. +18. Select **Add File/Link/External Tool**. +19. Select **External Tool**. +20. Enter the required information in the External Tool Form: + +* **Tool Provider**: select Codio if it has been configured beforehand +* **Title**: name your assignment +* **URL**: you will need to go back into Codio for this information (see steps 21-24 below) + + .. image:: /img/lti/add-external-tool.png + :alt: Add External Tool + +In Codio +~~~~~~~~ + +21. Navigate to the course you would like to integrate with Schoology and go to the **Overview** area. +22. Click the icon with 3 blue dots for each assignment you wish to map and select **LTI Integration URL.** Select the clipboard to copy the link. + + .. figure:: /img/lti/LMS-Unit-URL.png + :alt: Unit URL + + .. Note:: If you would like to access all the LTI integration URLs at once, navigate to the course, then the **LTI/LMS** in the Admin section. Select **Assignment URLS** and a CSV will download that provides the information for the course in one place. + +In Schoology +~~~~~~~~~~~~ + +23. Go back to Schoology and paste the **LTI Integration URL** into the URL field of the Add External Tool form from step 20. +24. You can enable grading on external tool items which adds the material to your Gradebook so that you can assign a grade for each student who completes the assignment launched via the external tool. + + .. Note:: LTI and external tool materials that have grading enabled in Schoology do not trigger submission notifications, grading reminders, or overdue notifications because Schoology does not automatically detect submissions from external tools. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lms-systems/system-specific-directions.rst.txt b/docs/_sources/instructors/admin/integration/lms-systems/system-specific-directions.rst.txt new file mode 100644 index 00000000..59b4d7ec --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lms-systems/system-specific-directions.rst.txt @@ -0,0 +1,28 @@ +.. meta:: + :description: Integrating with Specific Learning Management Systems + +.. _system-specific-directions: + +System specific instructions +============================ + +.. toctree:: + :caption: Integrating with external systems + :hidden: + + canvas + blackboard + d2l + moodle + google-classroom + schoology + + +Select your LMS below to access directions for integration: + - :ref:`Integrating with Canvas ` + - :ref:`Integrating with Blackboard ` + - :ref:`Integrating with Moodle ` + - :ref:`Integrating with D2L ` + - :ref:`Integrating with Google Classroom ` + - :ref:`Integrating with Schoology ` + diff --git a/docs/_sources/instructors/admin/integration/lti-app.rst.txt b/docs/_sources/instructors/admin/integration/lti-app.rst.txt new file mode 100644 index 00000000..6acffb40 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti-app.rst.txt @@ -0,0 +1,149 @@ +.. meta:: + :description: LTI App + +.. _lti-app: + +LTI App +======= + +.. Note:: To use the LTI App, your email address in Codio and your LMS system must match exactly. + + The LTI App is only for the US version of Codio. It will not work with Codio UK (codio.co.uk). + +The **Codio LTI App** method allows for an easy way to integrate and to map Codio course assignments to your LMS system. + +**Please note the steps below are for implementation in Canvas.** For details on other supported systems see https://www.eduappcenter.com/tutorials. + +**Video - Connect Codio to Canvas using the LTI App:** + +.. raw:: html + +
+ +In Codio +~~~~~~~~ + +1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within **Organizations**. +2. Select the **LTI Integrations** tab. +3. Scroll down to the **LTI Integration 1.0** section. You should see the following fields. Remain on this screen for the time being. + +.. figure:: /img/lti/lti-org-fields.png + :alt: LTI Fields + +In Canvas +~~~~~~~~~ + +The Canvas user who carries out these steps must be a system administrator. + +4. Create a new Course in your LMS system. We suggest you create a test course called **Codio Test Course** before you do it with a production course. +5. Select the Course. +6. Click on **Settings** in the left set of options. +7. In the top links, select **Apps**. +8. Click the large button **View App Configurations**. +9. Click on the **View App Center** button. + +.. figure:: /img/lti/appcenter.png + :alt: appcenter + +10. Navigate (or filter) to find the **Codio** app, select and **+ Add App** + +In Codio and Canvas +~~~~~~~~~~~~~~~~~~~ + +11. We will now copy the following global integration fields from Codio to Canvas. + +- LTI Consumer -> Consumer Key +- LTI Secret -> Shared Secret + +12. and select the **Add App** button to confirm. You should then have something similar to this: + +.. figure:: /img/lti/appsetup.png + :alt: appconfigured + +Course LMS URL +-------------- + +The **Course LMS URL** is used to map an LMS course to a Codio course. It ensures that Codio knows how to redirect students back to the correct course should they attempt to access the course through the Codio dashboard. If not entered and students log into Codio to try to start new assignments there will be no link for them to click to be passed to your LMS Course. The LMS user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments. + +**Video - Course LMS URL:** + +.. raw:: html + +
+ +13. In Codio, go to the **LTI/LMS** tab near the top. +14. Go to the **LTI/LMS Settings** section. +15. Select **Enable LTI** to enable. +16. Below this is an empty field **Course LMS URL**. Switch back to your LMS and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio. + +.. figure:: /img/lti/lti-class-url.png + :alt: lti-class-url + +.. _hide-assignments: + +Hiding not started assignments in students dashboard +**************************************************** + +Toggling **Hide Not Started Assignments** to on will suppress the display of assignments that haven’t been started in the student dashboard. Students will need to log into their LMS system to start new assignments. Students may not realize they need to go back to their LMS system to start a new assignment when they don’t see them in Codio. If you don’t hide assignments that haven’t been started you can use the **Course LMS URL** which will provide them with a link back to their LMS system to start the assignment. + + +.. figure:: /img/lti/lms_hide.png + :alt: Hide not started assignments + +.. _filter-learners: + +Filter learners for mentors +*************************** + +Enabling **Filter Learners for Mentors** to on will allow you to only show Mentor/Observers specific students that you wish them to see/manage in the Codio course. + +To set this up, edit your LTI app as set up above or send as a custom parameter adding `codio_custom_mentor_for` as a custom field entering as the parameter either the students email addresses or their LMS user IDs. To enter multiple students separate with comma (',') + +Example: + +.. code:: ini + + codio_custom_mentor_for="student1@email.com,student2@email.com" + + + +.. figure:: /img/lti/filter_learners.png + :alt: Filter learners for mentors + +If you don't enable **Filter Learners for Mentors**, then mentors can see all the students in the course and access all students' work, even those for whom they are not a mentor. + +Mapping an Assignment to a Canvas Assignment +============================================ + +The final mapping step needs to be taken for each individual assignment within Codio. It maps a Canvas assignment to a Codio assignment. + +In Canvas +~~~~~~~~~ + +17. Make sure you are in the Courses area. +18. Click on the **Assignments** link in the left hand side. +19. Provide a name for the Assignment. +20. Set the points for the Assignment. When the grades get passed back later, the Codio percentage score will be scaled to the points value you specify here. +21. Scroll down and look for the **Submission Type** field. + +.. figure:: /img/lti/canvas-submission-type.png + :alt: Canvas Submission + +22. You should now click on the dropdown list and select **External Tool**. +23. Specify the assignment using one of the two options: + + - **Add by Resource Selection Preview (recommended)** + + - Click the **Find** button. + - Click the Codio tool. + - Select the assignment you want to map to your course in Canvas. + + - **Add by LTI Integration URL** + + - Return to Codio and navigate to the course. Ensure you are in **Overview** mode. + - To the right of the assignment, click the icon with 3 blue dots and select **LTI Integration URL**. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy). + - Paste the **LTI Integration URL** in the URL field under **Enter or find an External Tool URL.** + +24. Select **Load This Tool In a New Tab**. +25. Click the **Save and Publish** button. +26. Make sure the Canvas course is published. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lti-course-copy.rst.txt b/docs/_sources/instructors/admin/integration/lti-course-copy.rst.txt new file mode 100644 index 00000000..45ae60e1 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti-course-copy.rst.txt @@ -0,0 +1,48 @@ +.. meta:: + :description: LTI Course copy + +.. _lti-course-copy: + +LTI Course copy +=============== + +Enabling this setting allows existing Codio course content used in your LMS to be copied into a new Codio course and a new course in your LMS. This should be enabled for the courses connected with the "Master" course in your LMS. The parameter will be disabled by default for for all copied courses. + +**Video - LTI Course Copy:** + +.. raw:: html + +
+ +.. Note:: the screenshots below are for implementation in Canvas but other LMS systems should be similar. Refer to their documentation for more assistance + +First enable :ref:`LTI Constant URLs ` for your course. + +1. In your existing Codio course, enable the **Enable LTI course copy** button, and save your changes + +.. figure:: /img/lti/enable_class_fork.png + :alt: Enable course copy field + + +2. In your LMS "Copy this Course" (or equivalent term for your LMS) and create your new course + +.. figure:: /img/lti/copy_course.png + :alt: Copy LMS Course + +3. When completed go to **External Apps** and edit the existing app connecting Codio to your LMS +4. Replace the existing custom field that was set from your original Codio course with an id of your own (e.g something like codio_class_target_id=my_class_id_10) + +.. Note:: If your LMS supports ``lis_course_offering_sourcedid`` you do not need to specify ``codio_class_target_id`` for the copied course, ``lis_course_offering_sourcedid`` will be used automatically to detect the course. For cases when ``lis_course_offering_sourcedid`` is needed for course copy but not available due to privacy settings in Canvas, a custom parameter ``custom_codio_course_offering_sourcedid=$CourseOffering.sourcedId`` can be tried. + +.. figure:: /img/lti/fork_class_id.png + :alt: course fork id + +5. In your existing Codio course, copy the content of the LTI course copy enabled field into a new line in the 'Edit App' custom field + +.. figure:: /img/lti/parent_class.png + :alt: Parent course ID + +6. Submit + +7. In the new course created in your LMS, open one of the new assignments and this will then create the new course in Codio containing the content from your original Codio course. + diff --git a/docs/_sources/instructors/admin/integration/lti-keys-and-urls-information.rst.txt b/docs/_sources/instructors/admin/integration/lti-keys-and-urls-information.rst.txt new file mode 100644 index 00000000..c581d34a --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti-keys-and-urls-information.rst.txt @@ -0,0 +1,92 @@ +.. meta:: + :description: LTI Keys & URLs + +.. _lti-keys-and-urls-information: + +LTI Keys and URLs +================= +This page provides an overview of some of the key settings allowing for LTI integration. For more specific directions, access your LMS under system-specific directions. + +LTI Constant URLs +----------------- + +Enabling this setting enables constant URL for course assignments, course detection will be done based on the custom parameter your LMS should pass. + +Constant URL's allows the transfer of learning content without modifying LTI links and they are also required if you wish to copy Codio courses and LMS Courses. See :ref:`LTI Course Copy ` for more on this. + +**Video - LTI Constant URL:** + +.. raw:: html + +
+ +.. Note:: the screenshots below are for implementation in Canvas but other LMS systems should be similar. Refer to their documentation for more assistance + +1. Create an External app in your LMS using the **configuration type: By URL**. + +.. figure:: /img/lti/canvas_url.png + :alt: LTI URL config + +2. Enter in the **Consumer Key** and **Shared Secret** from your Codio organization. + +.. figure:: /img/lti/lti-org-fields.png + :alt: LTI Fields + +3. Copy the **XML URL** into the Config URL field. +4. Submit. +5. Return to your Codio course and enable the **Enable LTI constant URL's** button, and save your changes. +6. Copy the **LTI constant URL's enabled** link. + +.. Note:: If your LMS supports it, ``lis_course_offering_sourcedid`` is also supported as a unique course identifier so you can replace``codio_class_target_id`` if required. For cases when ``lis_course_offering_sourcedid`` is needed for course copy but not available due to privacy settings in Canvas, a custom parameter ``custom_codio_course_offering_sourcedid=$CourseOffering.sourcedId`` can be tried. + +.. figure:: /img/lti/constant_url.png + :alt: Enable Constant URL + +7. Return to your LMS external app and 'edit'. +8. Paste the **LTI constant URL's enabled** link into the Custom Field. +9. Submit. + +LTI Keys +-------- + +**LTI Keys** are used to integrate your LMS to Codio. These keys are required by your LMS administrator one time only so that Codio can be added as an LTI provider. Once Codio has been added as an LTI provider, you will not need them again and the remaining actions can be completed by LMS users who have Teacher/Instructor permissions. LTI keys are accessible to :ref:`Codio Organization Owners ` only. + +To find these keys: + +1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within +**Organizations**. +2. Select the **LTI Integrations** tab. +3. Scroll down to the **LTI Integration 1.0** section. You should see the following fields. + +.. figure:: /img/lti/lti-org-fields.png + :alt: lti-keys + +Course LMS URL +-------------- + +The **Course LMS URL** is used to map an LMS course to a Codio course. It ensures that Codio knows how to redirect students back to the correct course should they attempt to access the course through the Codio dashboard. + +The LMS user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments. + +1. In Codio, go to the **LTI/LMS** section. +2. At the top is a switch **Enable LTI** which you should enable. +3. Below this is an empty field **Course LMS URL**. Switch back to your LMS and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio. +4. Save your changes. + +.. figure:: /img/lti/lti-class-url.png + :alt: lti-class-url + +LTI Integration Assignment URLs +------------------------------- + +The **Assignment URL** is needed to map each individual assignment within your Codio course to the corresponding assignment in your LMS. It directs a student to the correct Codio assignment and will automatically open the Codio assignment. + +1. On the main course screen, click the icon with 3 blue dots for each of the assignments you wish to map and select **LTI Integration URL**. +2. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy). + +.. figure:: /img/lti/LMS-Unit-URL.png + :alt: Assigment URL + +.. Note:: The LTI integration URLs for the assignments in a course can be exported. Select the course, go to the **LTI/LMS** tab, and press the **Assignment URLS** button and a CSV will download that provides the information for the course in one place. + +3. Complete the mapping in your LMS. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/integration/lti1-3.rst.txt b/docs/_sources/instructors/admin/integration/lti1-3.rst.txt new file mode 100644 index 00000000..7e014437 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti1-3.rst.txt @@ -0,0 +1,149 @@ +.. meta:: + :description: Working with LTI 1.3 systems + +.. _lti1-3: + +LTI version 1.3 +=============== + +LTI version 1.3 improves upon version [LTI-1.1] by moving away from the use of OAuth 1.0a-style signing for authentication and towards a new security model, using OpenID Connect, signed JWTs, and OAuth2.0 workflows for authentication. As we have implemented the majority of these improvements already in Codio, we recommend using the LT1 1.1 integration instead of 1.3 unless your LMS specifically requires it, since it is much easier to set up using the :ref:`Codio LTI App `. + + +For more information, see `Learning Tools Interoperability Core Specification `__ + +The deep linking url is : ``https://apollo.codio.com/lti/resource_selection`` + +Canvas +------ + +See this page for written instructions: + +:ref:`LTI 1.3 integration for Canvas ` + +There are a number of ways to integrate Codio with Canvas with LTI 1.3. Check out the following videos to see the option that best suits you. + +How to configure lti1.3 tool in Canvas manually - part 1 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to configure lti1.3 tool in Canvas manually -part 2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +The ``platform ID`` is https://canvas.instructure.com, but ``Public Keyset URL``, ``Access Token URL`` and ``Authentication Request URL`` depend on each institution's unique Canvas domain URL. + + | ``Public Keyset URL``: https://[CANVAS DOMAIN]/api/lti/security/jwks + | ``Access Token URL``: https://[CANVAS DOMAIN]/login/oauth2/token + | ``Authentication Request URL``: https://[CANVAS DOMAIN]/api/lti/authorize_redirect + +How to configure lti1.3 tool in Canvas by paste json object +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +The ``platform ID`` is https://canvas.instructure.com, but ``Public Keyset URL``, ``Access Token URL`` and ``Authentication Request URL`` depend on each institution's unique Canvas domain URL. + + | ``Public Keyset URL``: https://[CANVAS DOMAIN]/api/lti/security/jwks + | ``Access Token URL``: https://[CANVAS DOMAIN]/login/oauth2/token + | ``Authentication Request URL``: https://[CANVAS DOMAIN]/api/lti/authorize_redirect + +How to configure lti1.3 tool in Canvas by paste json url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +The ``platform ID`` is https://canvas.instructure.com, but ``Public Keyset URL``, ``Access Token URL`` and ``Authentication Request URL`` depend on each institution's unique Canvas domain URL. + + | ``Public Keyset URL``: https://[CANVAS DOMAIN]/api/lti/security/jwks + | ``Access Token URL``: https://[CANVAS DOMAIN]/login/oauth2/token + | ``Authentication Request URL``: https://[CANVAS DOMAIN]/api/lti/authorize_redirect + +Connecting/mapping assignments in Canvas +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are also a number of ways you can connect/map assignments. Check out the following videos to see the option that best suits you. + +How to connect assignment by lti integration url of assignment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment by resource selection preview +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment by endpoint url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment with custom param +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +If you require any assistance, please don't hesitate to :ref:`contact us ` + +Moodle +------ + +How to configure lti1.3 tool in Moodle manually +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +Connecting/mapping assignments in Moodle +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +There are a number of ways you can connect/map assignments. Check out the following videos to see the option that best suits you. + +How to connect assignment by lti integration url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment by resource selection preview +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment by endpoint url +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +How to connect assignment with custom param +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. raw:: html + +
+ +If you require any assistance, please don't hesitate to :ref:`contact us ` diff --git a/docs/_sources/instructors/admin/integration/lti1-3BS-D2L.rst.txt b/docs/_sources/instructors/admin/integration/lti1-3BS-D2L.rst.txt new file mode 100644 index 00000000..2b624349 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti1-3BS-D2L.rst.txt @@ -0,0 +1,99 @@ +.. meta:: + :description: LTI 1.3 for Brightspace and D2L + +.. _lti1-3BS-D2L: + +LTI 1.3 for Brightspace/D2L +=========================== + +In Brightspace - Register a Tool +-------------------------------- +The following is created in Manage Extensibility, LTI Advantage - Register a Tool, select Standard. +1. Name - Codio +2. In the **Domain** field enter - ``https://apollo.codio.com`` + +Access LTI Integration settings in Codio +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within **Organizations**. +2. Select the **LTI Integrations** tab. +3. Scroll down to the **LTI Integration 1.3** section. You should see the following fields. Remain on this screen for the time being. + +The LTI 1.3 area of your LTI Integrations settings for your organization. + .. image:: /img/lti/codiolti13settings.png + :alt: LTI 1.3 settings in Codio + +Copy fields from Codio to Brightspace/D2L +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Copy **Initiate Login URL** to the **OpenID Connect Login URL** field. +2. Copy **Redirect URL** to the **Redirect URL** field. +3. Copy **Keyset URL** to the **Keyset URL** field. +4. In the **Extensions** section enable **Assignment and Grader Services**, **Deep Linking** and **Names and Role Provisioning Services**. +5. Press **Register** - leave the pop-up on the screen, you will be copying values from it. + +Add the Integration you created +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. In Codio on the LTI Integrations screen scroll down to the LTI 1.3 Configurations field and click **Add Integration** + + .. image:: /img/lti/addlti13integration.png + :alt: LTI 1.3 Configurations + +2. From the pop-up in Brightspace/D2L copy the **Issuer ID** and place in the **PLATFORM ID** field + + .. image:: /img/lti/codioplatformlti1-3.png + :alt: LTI 1.3 Platform information in Codio + + +Copy fields from Brightspace/D2L pop-up to Codio +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. Copy the **Client ID** to the **Client ID** field in Codio. +2. Copy the **Keyset URL** to **Public Keyset URL** field. +3. Copy the **Brightspace OAuth2 Access Token URL** to the **Access Token URL** field in Codio +4. Copy the **OpenID Connect Authentication Endpoint** to the **Authentication Request URL** field in Codio +5. Click on **View Deployments** and create a **New Deployment** +6. In the Tool field select the tool you just created +7. Name it Codio Deployment or something similar. +8. Toggle **Open as External Resource** if you want to open the tool in a new tab, otherwise it will open as an iFrame. +9. Toggle **Grades created by LTI will be included in Final Grade** if you are using grades passed from Codio. +10. Add **Org Units** as you need for your setup. +11. Click **Create Deployment**. +12. Copy the deployment ID that is generated and paste it into Codio into the **Deployment ID** field. +13. Click **Create** in Codio. + +Create the new link in Brightspace/D2L +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +1. In your Brightspace/D2L environment you can dismiss the pop up. +2. In the deployment tool click **View Links** and then create a **New Link** +3. Name it Codio. +4. In the URL field paste: ``https://apollo.codio.com/lti/resource_selection`` +5. Change type to **Deep Linking Quicklink** +6. Click **Save and Close** + + + +Connect Brightspace/D2L and Codio assignments +--------------------------------------------- + +The final mapping step needs to be taken for each individual assignment within Codio. It maps a Brightspace/D2L assignment to a Codio assignment. + +In Brightspace/D2L +~~~~~~~~~~~~~~~~~~ + +1. Select the **Content** tab from the top of the page. +2. Add a new module in your D2L course. +3. Select **Add Existing Activities** +4. From the list of available LTI links, select the Codio tool you created earlier. +5. Click on the Codio link to bring up all the Codio courses for which you have enabled LTI. +6. Select the Codio assignment you want to connect. + +LTI Course copy for Brightspace/D2L +----------------------------------- + +Enabling this setting allows existing Codio course content used in your LMS to be copied into a new Codio course and a new course in your LMS. This should be enabled for the courses connected with the "Master" course in your LMS. The parameter will be disabled by default for for all copied courses. + +First enable :ref:`LTI Constant URLs ` for your course. + +1. In your existing Codio course, enable the **Enable LTI course copy** button, and save your changes + +.. figure:: /img/lti/enable_class_fork.png + :alt: Enable course copy field + diff --git a/docs/_sources/instructors/admin/integration/lti1-3Canvas.rst.txt b/docs/_sources/instructors/admin/integration/lti1-3Canvas.rst.txt new file mode 100644 index 00000000..47991bd6 --- /dev/null +++ b/docs/_sources/instructors/admin/integration/lti1-3Canvas.rst.txt @@ -0,0 +1,215 @@ +.. meta:: + :description: LTI 1.3 for Canvas + +.. _lti1-3Canvas: + +LTI 1.3 for Canvas +================== + +See this page for a video demonstration: + +:ref:`LTI 1.3 integration ` + +Part 1: In Canvas - Create a Developer Key +------------------------------------------ +The Canvas user who carries out these steps must be a system administrator. + + +In Codio: +~~~~~~~~~ + +1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within **Organizations**. +2. Select the **LTI Integrations** tab. +3. Scroll down to the **LTI Integration 1.3** section; you should see the following fields. Keep this page open. + + + .. image:: /img/lti/codiolti13settings.png + :alt: LTI 1.3 settings in Codio + +In Canvas: +~~~~~~~~~~ + +4. Select **Admin -> Developer** Keys. +5. Click on **+Developer Key** and select **+LTI key**. + + + .. image:: /img/lti/canvasdeveloperkey.png + :alt: Creating a Canvas Developer key + +6. Complete the **Key Name**, **Title** and **Description** fields. +7. From Codio, under **LTI 1.3 Integration**, copy the **LTI URL** and paste it into the **Target Link URI field** in Canvas. +8. From Codio copy the **Initiate Login URL** and paste it into the **OpenID Connect Initiation URL**. +9. Copy the **Redirect URL** and paste it into the **Canvas Redirect URI** field. + + + .. image:: /img/lti/developerkeyvalues.png + :alt: Adding the Developer key values + + +10. In Canvas, change **JWK Method** to **Public JWK URL**. +11. From Codio, copy the **Keyset URL** and paste it into the **Public JWK URL** field. + + + .. image:: /img/lti/canvasJWK.png + :alt: JWK URL + +12. Expand the **LTI Advantage Services** section and toggle each field on. +13. Expand the **Additional Settings** section + +- Type ``codio.com`` in both the **Domain** and **Tool Id** fields. +- Select the **Privacy level** as **Public**. + + + + .. image:: /img/lti/canvasadvantage.png + :alt: LTI Advantage Services + +14. Scroll down to the **Placements** field. You can add a placement by starting to type the name and then selecting it when it appears. +Placements that should be included (remove any others): Link Selection, Editor Button, Assignment Selection and Course Navigation. + + + + .. image:: /img/lti/canvasplacements.png + :alt: LTI Placements + +15. Expand each of the following fields, and copy the static links below: + +- **Link Selection** + - Select **LtiDeepLinkingRequest** + - **Target Link URI:** ``https://apollo.codio.com/lti/resource_selection`` + - **Icon Url:** ``https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png`` + + + .. image:: /img/lti/canvaslinkselect.png + :alt: Link Selection + +- **Editor button** + - **Target Link URI:** ``https://apollo.codio.com/lti/editor_button`` + - **Icon Url:** ``https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png`` + + + .. image:: /img/lti/canvaseditorbutton.png + :alt: Editor Button + +- **Assignment Selection** + - Select **LtiDeepLinkingRequest** + - **Target Link URI:** ``https://apollo.codio.com/lti/resource_selection`` + - **Icon Url:** ``https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png`` + + + .. image:: /img/lti/canvasassignment.png + :alt: Assignment Selection + +- **Course Navigation** + - **Target Link URI:** ``https://apollo.codio.com/lti/course_navigation`` + - **Icon Url:** ``https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png`` + + + .. image:: /img/lti/canvasnavigation.png + :alt: Course Navigation + + +16. Press **Save** in bottom right corner + +17. You will be back at the list of developer keys. + +- Update **State** to: on +- Copy the number in the **Details** column (for use in Parts 2 and 3) + + + .. image:: /img/lti/canvasdetails.png + :alt: Developer Key + +Part 2: Create an application in your course in Canvas +------------------------------------------------------ + +In Canvas: +~~~~~~~~~~ + + +1. Select an existing course or create a new course. + - Optional: create a test course called Codio Test Course before you do it with a production course. + +2. In your course, go to **Settings → Apps → + App** + +3. In Configuration Type, select: **By Client ID** + +4. Paste number you copied in Part 1 into **Client ID** field + +- **Submit → Install** + + + .. image:: /img/lti/addlti13app.png + :alt: Add App + +5. After you click install, click the gear icon by the tool you just created + +- Select **Deployment ID** + +6. Copy the ID displayed, it will be used in Part 3 + + + .. image:: /img/lti/canvasdeployment.png + :alt: Deployment ID + + +Part 3: Create an LTI configuration in Codio +-------------------------------------------- + +In Codio: +~~~~~~~~~ + +1. In your org → **LTI Integrations** + + - Scroll down to **LTI 1.3 Configurations** + - Click **Add Integration** + + + .. image:: /img/lti/addlti13integration.png + :alt: LTI 1.3 Configurations + +Updating the fields in Platform Information + .. Note:: replace [CANVAS DOMAIN] with your institution’s domain in steps 5-7 + +2. **Platform ID:** ``https://canvas.instructure.com`` +3. **Client ID:** copied from Developer Keys at end of Part 1 +4. **Deployment Id:** copied in Part 2 +5. **Public Keyset URL:** ``https://[CANVAS DOMAIN]/api/lti/security/jwks`` +6. **Access Token URL:** ``https://[CANVAS DOMAIN]/login/oauth2/token`` +7. **Authentication Request URL:** ``https://[CANVAS DOMAIN]/api/lti/authorize_redirect`` +8. Click **Create** + + .. image:: /img/lti/canvasplatform.png + :alt: Create LTI Integration + +Part 4: Adding a resource +------------------------- +In Canvas: +~~~~~~~~~~ + +1. Go to Assignments in your course, select **+Assignment**. +2. Give your assignment a name. +3. Select a number of points. +4. Under **Submission Type**, select **External Tool**. +5. Select Find. + + .. Note:: Do not use LTI Integration URL to assign an assignment + +6. Select the tool created in Part 1. +- Choose the Course and Assignment to connect to +- Recommended: Select Load in a new tab + + .. image:: /img/lti/createassignment.png + :alt: Create an Assignment + +7. Select **Save** at bottom of the page + +Note: these settings are not final and can be edited in Canvas at a later time. + + +Important Notes on Course Copy in Canvas: +----------------------------------------- + +- In Canvas, once you copy the course, you must enter a unique SIS ID in Course Settings. + - An SIS ID that is different from the Blueprint Course (Canvas’ Parent Course) is required for Codio to spawn a corresponding child course. + - An SIS ID is optional for the Blueprint Course. diff --git a/docs/_sources/instructors/admin/legal.rst.txt b/docs/_sources/instructors/admin/legal.rst.txt new file mode 100644 index 00000000..0cadac02 --- /dev/null +++ b/docs/_sources/instructors/admin/legal.rst.txt @@ -0,0 +1,65 @@ +.. meta:: + :description: Codio Legal documents + +.. _legal: + +Legal stuff +=========== + +.. _accessibility: + +Accessibility +************* +Codio's student experience meets the Web Content Accessibility Guidelines (WCAG) Level 2AA level of compliance and Codio is actively committed to maintaining and continuously improving the accessibility of the Codio student experience. + +See + +- :ref:`Dyslexia Support ` +- :ref:`User Preferences ` +- :ref:`Project Preferences ` + +`Accessibility Information `_ on our website + + + +.. _vpat: + + + +.. _gdpr: + +GDPR +**** +General Data Protection Regulations (GDPR) govern how Codio can use your information. + +`GDPR information `_ on our website. + + + +.. _ferpa: + +FERPA +***** +Family Educational Rights and Privacy Act (FERPA) is a Federal law that protects the privacy of student education records. + +`FERPA information `_ on our website. + + +.. _pii: + +Personal Identifiable Information +********************************* + +Codio's `privacy policy `_ as it relates to your personally identifiable information. + + + +.. _sec-stat: + +General Terms and Conditions +**************************** + +The `Terms of Use `_ are an agreement between you and the Codio Group that govern your access to and use of the website. + + + diff --git a/docs/_sources/instructors/admin/organization/add-remove-org-owners.rst.txt b/docs/_sources/instructors/admin/organization/add-remove-org-owners.rst.txt new file mode 100644 index 00000000..f1919f9d --- /dev/null +++ b/docs/_sources/instructors/admin/organization/add-remove-org-owners.rst.txt @@ -0,0 +1,97 @@ +.. meta:: + :description: You can add other owners that also have Admin permissions to perform administrator tasks. + +.. _org-owners: + +Add or Remove Organization Owners +================================= +The person who created the organization is considered the Owner. However, you can add other owners that also have Admin permissions to perform administrator tasks. You can add a new user to your organization and grant them the Owner role or add an existing user in your organization as an Owner. + +Add a new user to your organization Owners group +------------------------------------------------ +Follow these steps to add a new user to the Owners group in your organization: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. In the **Invite Teacher to the Organization** area, enter in the **Teacher Email** and select the **Organization owner** from the drop down. + + .. image:: /img/manage_organization/inviteowner.png + :alt: Invite Owner + +5. Click **Send Invite**. + + An email is sent to the teacher that contains a link to sign up. Upon completing the sign up process, they are added to your organization as an Owner. + + .. Note:: They must use the email address the invitation was sent to for sign up or they will not be added to the organization. + + All pending invitations are displayed and you have the option to **Resend** or **Revoke** the invitation. + + .. image:: /img/manage_organization/pendinginviteowner.png + :alt: Pending Invitations + +Add an existing Codio user to your organization Owners group +------------------------------------------------------------ +Follow these steps to add an existing Codio user to the Owners group in your organization: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. Click **Owners** and enter the username for the teacher you want to add as an Owner. Click the drop-down list and select the username. + + .. image:: /img/manage_organization/owners.png + :alt: Owners + +5. Click **Add User**. + +6. On the confirmation dialog, click **Yes**. + +Remove owners +------------- +You can remove a user from the Owners group in your organization, but keep in mind that you must always have at least one Owner. Removing a user from the Owners group does not remove them from the organization, but rather removes them from the **Owner** role. Follow these steps to remove a user from the Owners group: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. Click **Owners** to view the list of owners in your organization. + + .. image:: /img/manage_organization/owners.png + :alt: Owmers + +5. Click **Remove** next to the username and then click **Yes** on the confirmation dialog. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/add-teachers.rst.txt b/docs/_sources/instructors/admin/organization/add-teachers.rst.txt new file mode 100644 index 00000000..bfdd8a50 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/add-teachers.rst.txt @@ -0,0 +1,75 @@ +.. meta:: + :description: Once you have set up your organization, you can add teachers to provide them with access to Codio. + +.. _add-teachers_org: + +Add Teachers to Organization +============================ +Once you have set up your organization, you can add teachers to provide them with access to Codio. You can invite teachers or send them a token to paste into the browers to access Codio. + +Invite teacher to the organization +================================== + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. In the **Invite Teacher to the Organization** area, enter in the **Teacher Email** and select one of the following option from the drop down: + + - **Teacher** - Select this if you want the teacher to have standard teacher permissions, this is default. + - **Read-only teacher** - Select this if you want to prevent the teacher from making changes to the content in courses (cannot switch to Edit mode). + - **Organization owner** - Select this if you want the teacher to have full owner permissions, for more information see :ref:`Add organization owner `. + + .. image:: /img/manage_organization/inviteteacher.png + :alt: Invite Owner + +5. Click **Send Invite**. + + An email is sent to the teacher that contains a link to sign up. Upon completing the sign up process, they are added to your organization. + + .. Note:: They must use the email address the invitation was sent to for sign up or they will not be added to the organization. + + All pending invitations are displayed and you have the option to **Resend** or **Revoke** the invitation. + + .. image:: /img/manage_organization/pendinginviteowner.png + :alt: Pending Invitations + +Send teacher invitation token to access Codio +--------------------------------------------- +To send a teacher an invitation token to use to access Codio, follow these steps: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Organization Settings** tab and navigate to the **Invitation** section. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. Click **Copy URL** or **Copy Token** to provide to the teacher: + + .. image:: /img/class_administration/addteachers/invitation.png + :alt: Invitation + + - If you send them the **Invite URL**, they can paste it into their browser and are automatically taken through the sign-up process. When they select that they are a teacher, they are added to your organization. + - If you send them the **Invite Token**, they can register themselves for a Codio account using the sign-up process at www.codio.com. They provide the token to join your organization. + +.. Note:: If you already have courses set up, you can add and invite teachers directly into your course(s). See :ref:`Add or Remove Teachers in a Course `. You can then add them as an :ref:`organization owner ` so they can then manage and create courses, and have full Admin access to the organization. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/auto-release-grades.rst.txt b/docs/_sources/instructors/admin/organization/auto-release-grades.rst.txt new file mode 100644 index 00000000..309100f0 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/auto-release-grades.rst.txt @@ -0,0 +1,32 @@ +.. meta:: + :description: Enable or disable the release grades automatically feature, which releases the grades when the students complete the assignment. + +.. _auto-release-grades: + +Enable or Disable Releasing Grades Automatically +================================================ +By default, students are not shown their grades until the instructor releases them to the course. However, you can enable the Release Grades Automatically feature, which releases the grades when the students complete the assignment. + +Follow these steps to enable releasing grades automatically: + +.. Note:: Enabling this feature does not affect existing courses. You can enable this feature on individual courses if needed. + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. In the Education Settings area, toggle **Release Grades Automatically** to enable the feature. + + .. image:: /img/manage_organization/org_releasegrades.png + :alt: Release Grades Automatically diff --git a/docs/_sources/instructors/admin/organization/create-org-library.rst.txt b/docs/_sources/instructors/admin/organization/create-org-library.rst.txt new file mode 100644 index 00000000..bac16799 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/create-org-library.rst.txt @@ -0,0 +1,51 @@ +.. meta:: + :description: Create an organization assessments library to allow faculty to share assessment items with other instructors. + +.. _org-library: + +Create an Organization Assessments Library +========================================== +In addition to Codio's global assessments library, you can create Organization assessments libraries. This allows your faculty to share assessment items with other instructors similar to how you can share Courses within an Organization. + +- Click your name/gravatar, bottom of the left hand pane + + .. image:: /img/class_administration/profilepic.png + :alt: profile icon + +- Click the name of your organization (under **Organizations**) + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: Organisation + +- Click the Assessments Library tab + + .. image:: /img/librarytab.png + :alt: Assessment library + +- Click “Create a New Library” + +- Enter the name of the assessments library you want to create and press “Create” + + .. image:: /img/namelibrary.png + :alt: name library + +Read more about assessment libraries :ref:`here `. + +Add Collaborators to an Assessments Library +******************************************* + +- Under the Assessments Library tab, click on the library you want to add collaborators to + + .. image:: /img/librarysettings.png + :alt: library + +- Click on the Permissions tab. + +**Add Permission:** Either type the user name or use the drop down arrow to select an organization member to give permission to. By default, the collaborators are given “Read” permission, meaning they cannot add to or edit assessments in the library. To give a user “Write” permission, simply select the permission level next to their user name in the list. + +**Read Permission for Teachers:** Turning this on allows all Teachers in the organization to have “Read” permission, meaning they cannot add to or edit assessments in the library. + + .. image:: /img/librarypermissions.png + :alt: library permissions + +**Remove:** To remove a collaborator, simply press the “Remove” button next to their user name. Please note that is “Read permission for teachers” is turned on, that user may still have read permission if they are still a teacher account and a member of the organization. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/default-student-dashboard.rst.txt b/docs/_sources/instructors/admin/organization/default-student-dashboard.rst.txt new file mode 100644 index 00000000..5f328fbb --- /dev/null +++ b/docs/_sources/instructors/admin/organization/default-student-dashboard.rst.txt @@ -0,0 +1,39 @@ +.. meta:: + :description: Organization owners can specify the default dashboard view that is displayed to users. + +.. _default-student-dashboard: + +Set Users Dashboard +=================== + +Student Dashboard +----------------- + +Organization owners can specify the default page that is displayed to Students (My Projects or Courses). Follow these steps to set the default student dashboard: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Dashboard** tab. + + .. image:: /img/manage_organization/dash.png + :alt: Dashboard Settings + +4. Click the **Student Default Page** drop-down list and choose **Courses** or **My Projects**. + +5. You can also control the items that show for students in their dashboard from the grid shown + + +Teachers Dashboard +------------------ + +Organization owners can also manage the dashboard items for teachers. In the same area as above, deselect the items that should not be shown for the teachers. Different settings can be applied for teachers that only have :ref:`read only ` to those that have full editing access. + +.. Note:: If you make changes to these settings, your users may need to reload Codio in their browser upon the next login for the changes to be visible. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/delete-org.rst.txt b/docs/_sources/instructors/admin/organization/delete-org.rst.txt new file mode 100644 index 00000000..a37199e0 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/delete-org.rst.txt @@ -0,0 +1,24 @@ +.. meta:: + :description: Deleting an organization from Codio. + +.. _delete-org: + +Deleting an Organization +======================== + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. Go to the **Delete Organization** area to enter the confirmation code, and click **Delete** to delete the organization. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/enable-custom-script.rst.txt b/docs/_sources/instructors/admin/organization/enable-custom-script.rst.txt new file mode 100644 index 00000000..13f1fd33 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/enable-custom-script.rst.txt @@ -0,0 +1,42 @@ +.. meta:: + :description: You can enable custom scripts to integrate third-party systems. + +.. _enable-custom-script: + +Enable Custom Script +==================== +You can enable custom scripts to integrate third-party systems, such as :ref:`Sense Network ` to help and track students from the **Organization > Custom Scripts** page in Codio. The script passes the ``userid``, ``email``, and ``user type`` (Student/Teacher). + +If required by the third-party system, custom js code can be included in the **Custom Script** section. This code should be entered without script tags, for example: + +.. code:: javascript + + var http = new XMLHttpRequest(); + var url = 'https://userdomain/url'; //Change to valid URL for your third-party system + var params = 'userId=' + codio.userId ; + http.open('POST', url, true); + http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded'); + http.onreadystatechange = function() + //Call a function when the state changes. + {if(http.readyState == 4 && http.status == 200) { + alert(http.responseText); + } + } + http.send(params); + + +You can also add ``console.log`` entries to be able to test and view output, for example: + +.. code:: javascript + + console.log('params', codio); + console.log('params', window); + console.log('params', document) + console.log(window.codio.currentPage) + console.log(window.codio.totalNumberOfPages) + + +.. image:: /img/manage_organization/customscript.png + :alt: Custom Script + +If you require any assistance enabling custom scripts, contact Codio. diff --git a/docs/_sources/instructors/admin/organization/gigabox-usage.rst.txt b/docs/_sources/instructors/admin/organization/gigabox-usage.rst.txt new file mode 100644 index 00000000..bfc0194d --- /dev/null +++ b/docs/_sources/instructors/admin/organization/gigabox-usage.rst.txt @@ -0,0 +1,14 @@ +.. meta:: + :description: Gigabox usage for all users. + +.. _gigabox-usage: + +Gigaboxes +========= + +Codio's default boxes are allocated 756 MB of memory. If larger boxes are needed, you can upgrade your subscription to get access to 1-GB, 2-GB, 4-GB, 8-GB, 16-GB and GPU (for GPU-accelerated instances) boxes. + +You purchase a specific number of Gigaboxes that can be used by anyone in your organization. Codio tracks usage based on active projects rather than total projects. In other words, you can have 100 projects which use a Gigabox but as long as only one is active at a time, this requires only a single gigabox unit to be purchased. + +You must first request a larger box for your organization. Contact help@codio.com to initiate this discussion. + diff --git a/docs/_sources/instructors/admin/organization/grade-templates.rst.txt b/docs/_sources/instructors/admin/organization/grade-templates.rst.txt new file mode 100644 index 00000000..949d6e63 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/grade-templates.rst.txt @@ -0,0 +1,44 @@ +.. meta:: + :description: The grading rubric/template feature includes a two-dimensional grid that provides grading guidance for manually assessing a coding project. + +.. _grade-template: + +Create Grading Templates +======================== +The Grading Rubric feature includes a two-dimensional grid that provides grading guidance for manually assessing a coding project. + +.. image:: /img/class_administration/grading/template-example.png + :alt: Rubric Example + +You create the templates from the Grading Templates menu on the Organizations page, and then instructors can assign the templates to their assignments. + +.. Note:: Only organization Owners can access this page and create grading templates. + +Follow these steps to create a rubric grading template: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Rubrics** tab. + + .. image:: /img/class_administration/grading/templates.png + :alt: Grading Templates + +4. Click **Create a New Template** and then complete the following information: + + - **Name** - Enter a template name. + - **Rows** - A row addresses a single assessment criterion and you must enter a weight percentage value where all rows total 100%. + - **Columns** - Each column contains a score that you assign. Typically, the first column includes a 0 value that corresponds to failure to address the criterion. The remaining columns contain a range of values that you choose, with the far right column including a value for completely meeting the assessment criterion. Please read the following paragraph before choosing column values. + + **Important:** When grading student code, the grading rubric is displayed and is clickable; point are awarded based on where you click. Codio then weighs the scores according to the weightings that are provided for each row. + + A final score is calculated based on the selections and is re-based to the maximum column value. If you want the scores to calculate to percentages, choose a maximum value of 100, with other column values distributed between 0 and 100. + +.. Note:: A rubric can be cloned from another assignment instead of manually creating a new template. In the assignment that has a rubric template assigned to it, click the **Settings** icon to select the assignment. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/hide-av.rst.txt b/docs/_sources/instructors/admin/organization/hide-av.rst.txt new file mode 100644 index 00000000..d3a15bde --- /dev/null +++ b/docs/_sources/instructors/admin/organization/hide-av.rst.txt @@ -0,0 +1,32 @@ +.. meta:: + :description: Hiding A/V calls disables the use of the feature for users + + +.. _hideav: + +Hide A/V calls +============== +The **Hide A/V calls** feature disables users from starting :ref:`Audio/Video/Chat ` in their assignments. + +Follow these steps to Hide A/V calls: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. In the **Education Settingse** area, toggle the **Hide A/V calls** to enable it. When enabled, members of your organization will not be able to start A/V calls + + .. image:: /img/manage_organization/hide-av-calls.png + :alt: Hide A/V calls + diff --git a/docs/_sources/instructors/admin/organization/org-contact-url.rst.txt b/docs/_sources/instructors/admin/organization/org-contact-url.rst.txt new file mode 100644 index 00000000..786ba878 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/org-contact-url.rst.txt @@ -0,0 +1,37 @@ +.. meta:: + :description: You can set your own contact URL for your students to use on the Organization Settings page. + +.. _org-contact-url: + +Set Organization Contact URL +============================ +You can set your own contact URL for your students to use on the Organization Settings page. You may want to specify a contact URI if you have a forum or LMS discussion area for students to use or if you have your own resources available to assist students. Follow these steps to set a contact URL: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. In the **Education Settings** area, navigate to the Contact URLs field. + +5. Click **Add Contact URL** and enter the **URL** and **Text** to be displayed. + + .. image:: /img/manage_organization/org_releasegrades.png + :alt: Contact URL + + You can add as many contact URLs as necessary to give students different options depending on the help they need. When multiple contact options are set, students are shown all of the options in addition to contacting Codio. + + .. image:: /img/manage_organization/studentoptions.png + :alt: Contact Support Options + +.. Note:: Teacher accounts are not affected by this setting and are still able to contact Codio in the usual manner. diff --git a/docs/_sources/instructors/admin/organization/organisation.rst.txt b/docs/_sources/instructors/admin/organization/organisation.rst.txt new file mode 100644 index 00000000..b259c901 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/organisation.rst.txt @@ -0,0 +1,93 @@ +.. meta:: + :description: The Organization page includes settings for managing accounts, LMS integration and many other organization related settings. + +.. _organizations: + +Organization settings +===================== + +.. toctree:: + :caption: Organization Settings + :hidden: + + add-remove-org-owners + add-teachers + student-consent-form + view-org-members + default-student-dashboard + enable-custom-script + grade-templates + remove-org-members + create-org-library + public-private-settings + gigabox-usage + delete-org + org-contact-url + auto-release-grades + hide-av + student-email + sso + + + +Organizations +------------- +An organization is always required for institutional teaching. The **Organization** page includes settings for managing accounts, LMS integration and many other organization related settings. + +View the video to learn more about organizations + +.. raw:: html + +
+ +The person who creates the organization in Codio is the owner and is given the administrator role. Anyone with Admin permissions can perform the following tasks: + +- :ref:`Add and Remove Organization Owners ` +- :ref:`Add Teachers to an Organization ` +- :ref:`Configure Student IP Consent Form ` +- :ref:`View Organization Members ` +- :ref:`Set Default Student Dashboard ` +- :ref:`Enable Custom Scripts ` +- :ref:`Create Grading Templates ` +- :ref:`Remove Organization Members ` +- :ref:`Create an Organization Assessments Library ` +- :ref:`Enable/Disable Public and Private Settings ` +- :ref:`Gigaboxes ` +- :ref:`Delete an Organization ` +- :ref:`Set Organization Contact URL ` +- :ref:`Enable/Disable Release Grade Automatically ` +- :ref:`Hide A/V calls ` +- :ref:`SSO Integration ` + + + + +To access the **Organizations** page, follow these steps: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + + The Admin options are displayed on the LH bar of the page. + + .. image:: /img/manage_organization/orgtabs.png + :alt: Organization Page + + + - **Overview** - Update organization profile, enable or disable the ability to create public objects, enable or disable Codio support access, obtain invitation token, manage education settings, and delete the organization. + - **Members** - View, add, and remove users in your organization and invite teachers to the organization. + - **Always-On Boxes** - View the number of always-on boxes you currently have in your organization. + - **Billing** - View your Codio plan information. + - **Rubrics** - Create and manage your grading templates. + - **Dashboard** - Specify the Student Dashboard default page (My Projects or Courses), and specify whether to hide/show Courses. + - **IP Consent** - Enable or disable IP Consent and manage the versions. + - **Custom Scripts** - Manage custom scripts used to integrate third-party systems to help and track students. + - **LTI Integrations** - Specify and manage LTI integration settings. + - **Integrations** - Specify API key for Sense.Network integration, and add other API integrations. + - **Assessment Libraries** - Create and manage assessment libraries for your organization. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/public-private-settings.rst.txt b/docs/_sources/instructors/admin/organization/public-private-settings.rst.txt new file mode 100644 index 00000000..af28f2f6 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/public-private-settings.rst.txt @@ -0,0 +1,37 @@ +.. meta:: + :description: The Public/Private Settings feature determines whether users can create public projects, stacks, starter packs, courses, and modules. By default, this setting is disabled where everything is created as private. + + +.. _public-private: + +Enable or Disable Public/Private Settings +========================================= +The **Public/Private Settings** feature determines whether users can create public projects, stacks, starter packs, courses, and modules. By default, this setting is disabled where everything is created as private. + +Follow these steps to enable Public/Private Settings: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. In the **Public/Private** area, toggle the **Public/Private Settings** to enable it. When enabled, members of your organization can only create private objects. + + .. image:: /img/manage_organization/public_private.png + :alt: Public/Private Settings + +**Notes:** + +- Private projects can still be shared with other users (See :ref:`Project Permissions `). + +- Any existing public projects, stacks, starter packs, courses, and modules created by members of the organization prior to changing this setting are not affected. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/remove-org-members.rst.txt b/docs/_sources/instructors/admin/organization/remove-org-members.rst.txt new file mode 100644 index 00000000..e9b7b4d4 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/remove-org-members.rst.txt @@ -0,0 +1,33 @@ +.. meta:: + :description: Remove organization members, for example students, and use the account licences for other students. + +.. _remove-org-members: + +Remove Organization Members +=========================== +There are some occasions where you may want to remove old members in order to make room for new members; for example, if students in a course leave and you want to use the account licences for other students. Follow these steps to remove members from your organization: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. In the **Organization Teams** section, click **All Members** to view all the members of your organization. Alternatively, click **Users without Courses** to display students who were removed due to the course being deleted. + + .. image:: /img/manage_organization/members.png + :alt: All Members + +5. Click **Remove** for each user you want to remove from your organization. + +If you want to use the accounts for new students, see :ref:`Add or Remove Students in a Course `. + diff --git a/docs/_sources/instructors/admin/organization/sso.rst.txt b/docs/_sources/instructors/admin/organization/sso.rst.txt new file mode 100644 index 00000000..ffc0591e --- /dev/null +++ b/docs/_sources/instructors/admin/organization/sso.rst.txt @@ -0,0 +1,108 @@ +.. meta:: + :description: You can enable SSO integration to allow you to configure SSO service provider for your users to login through your SSO provider + +.. _sso-integration: + +Enable SSO Integration +====================== + +You can enable sso integration to integrate with your own SSO service provider from the **Organization > Integrations** page in Codio. + + .. image:: /img/sso-integration.png + :alt: SSO Integration + +.. Important:: Your SSO Custom User fields need to be set up with **FirstName**, **LastName**, **Email Address** and **Role** (Teacher/Mentor or Student). + +Enable SSO +---------- + +1: Enable SSO and select the SSO type. Currently suported **SAML 2.0** + +2: Log in to your SSO service provider + +3: Find and add the SAML application + +4: Go to **Configuration** and copy in from Codio + + - the **Login URL** + - the **ACS (CONSUMER) URL** + - the **ACS (CONSUMER) URL VALIDATOR** + +5: Save the configuration + +6: Go to **Parameters** and set up the Custom User fields, checking **Include in SAML assertion** mapping the value field to the relevant fields from your SSO + + - for **Role**, set the value to **Role(Custom)** + +7: Go to **SSO** and copy the **SAML 2.0 Endpoint HTTP** and paste into the **Identity Provider URL** field in Codio, and find and copy the **X. 509 Certificate** into the **Certificate** field in Codio. + +.. Note:: These field names relate to OneLogin and may be different in other service providers + +8: In Codio set up the Attributes to map the Custom User fields from your SSO service provider (see below) + +9: Press the **Update** button in Codio to create the integration + +10: Configure your SSO users to use the SAML application + +11: Copy and distribute the **Login URL** from the Codio integration field for your users to use + + +Setting up Attributes +--------------------- + +The attribute field in Codio is how your SSO custom user fields are mapped to Codio. + +example: + +.. code:: json + + { + "mapAttributes": { + "email": "Email", + "firstName": "FirstName", + "lastName": "LastName", + "role": "Role" + }, + "mapRoles": { + "student": ["student"], + "teacher": ["teacher"] + } + } + +Where in your SSO you have set up the custom user fields as **Email**, **FirstName**, **LastName**, **Role** and your roles as **student**, **teacher** + +If your SSO service provider provides urn:oid attributes for the custom user fields, you can use those + +example: + +.. code:: json + + { + "mapAttributes": { + "email": "urn:oid:0.9.2342.19200300.100.1.3", + "firstName": "urn:oid:2.5.4.42", + "lastName": "urn:oid:2.5.4.4", + "role": "Role" + }, + "mapRoles": { + "student": ["student"], + "teacher": ["teacher"] + } + } + +SSO Roles +--------- + +The SSO roles you set will determine whether the user accesses Codio as either a student or teacher. If your SSO service provider supports Mentor role, that can also be set for teachers who you wish to access with :ref:`Read Only ` access. + +Login URL +--------- + +When set up, the login URL can then be used by your users to login through your SSO service provider. + +.. Note:: Your users will still be able to access Codio from the usual login URL but will not be authenticated through your SSO service provider. + +Changing Email address in SSO +----------------------------- + +If the users email address is changed in the SSO, by default a new Codio account will be created when users access Codio from the SSO. To avoid this, instruct your users to log into Codio directly first and change their :ref:`account email address ` before accessing from the SSO. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/student-consent-form.rst.txt b/docs/_sources/instructors/admin/organization/student-consent-form.rst.txt new file mode 100644 index 00000000..c668d314 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/student-consent-form.rst.txt @@ -0,0 +1,52 @@ +.. meta:: + :description: You can create an Intellectual Property (IP) consent form and display this form to your Codio users. + +.. _student-consent: + +Configure Student IP Consent Form +================================== +You can create an Intellectual Property (IP) consent form and display this form to your Codio users. They must agree to the agreement before they can access Codio. + +.. image:: /img/studentconsent.png + :alt: IP Consent Form + +Follow these steps to configure an IP Consent form: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **IP Consent** tab and enter the text you want to be displayed in the **IP Consent Revision** text box. You can use markdown or HTML to format your text. + + .. image:: /img/consent.png + :alt: IP Consent + +4. Optionally, click **Preview** to view the rendered output. + +5. You can press the **Save Draft** button to save your changes and continue editing later. + +6. Click **Publish new version**. If you are not done drafting your content, you can click **Save Draft** and return to complete it later. + +Enable IP Consent form +---------------------- +Follow these steps to enable the IP Consent form: + +1. Click the **Enable IP Consent** toggle in the **IP Consent Status** area. +2. Click the Select Version drop-down list and choose the version of the form you want to display to your students. You can create multiple versions of the form and choose any version at any time. +3. Click **Update**. + +Exporting student consent data +------------------------------ +If you would like to download a log of all students who have consented to the terms, click **Download CSV** in the **IP Consent Status** area. The CSV file contains the following information: + +- User name +- Codio user ID +- Email address +- Revision of the consent form they consented to +- Date and time of the consent \ No newline at end of file diff --git a/docs/_sources/instructors/admin/organization/student-email.rst.txt b/docs/_sources/instructors/admin/organization/student-email.rst.txt new file mode 100644 index 00000000..8a432820 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/student-email.rst.txt @@ -0,0 +1,32 @@ +.. meta:: + :description: Allow teachers to see student email addresses + + +.. _student-email: + +Show Student Emails +=================== +The **Show Student Emails** feature can be enabled to show students email addresses in courses + +Follow these steps to show student email: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Overview** tab. + + .. image:: /img/manage_organization/orgsettingstab.png + :alt: Organization Settings + +4. In the **Education Settingse** area, toggle the **Show Student Emails** to enable it. When enabled, teachers in your organization will be able to see student email addresses by hovering over their name in either the main student listing or in the individual assignment listing + + .. image:: /img/manage_organization/show-email.png + :alt: Show Student Email + diff --git a/docs/_sources/instructors/admin/organization/view-org-members.rst.txt b/docs/_sources/instructors/admin/organization/view-org-members.rst.txt new file mode 100644 index 00000000..55e799e2 --- /dev/null +++ b/docs/_sources/instructors/admin/organization/view-org-members.rst.txt @@ -0,0 +1,49 @@ +.. meta:: + :description: You can view all members of your organization from the Members tab on the Organization page. + +.. _view-org-members: + +View Organization Members +========================= +You can view all members of your organization from the Members tab on the Organization page. Follow these steps to view all members: + +1. Click your profile icon in the lower left corner of the screen. + + .. image:: /img/class_administration/profilepic.png + :alt: Profile + +2. In the **Organizations** area, click the name of your organization. + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: My Organizations + +3. Click the **Members** tab. + + .. image:: /img/manage_organization/memberstab.png + :alt: Members + +4. Click **All Members** to see everyone who is a member of your organization. + + .. image:: /img/manage_organization/members.png + :alt: All Members + + You can also view members by the group to which they belong (Owners, Test Students, Teachers, Students, and Users without course). + + - **Owners** - Users with the Admin role. + - **Test Students** - Demo student accounts created with your organization. + - **Teachers** - Instructors who have registered with your organization. You can also set a teacher account to read only where they only have access to courses in Teaching mode; they cannot add, edit, or delete any content in a course. + + To set a teacher as read only, toggle the Course editor setting to enable it. + + .. image:: /img/manage_organization/orgreadonly.png + :alt: Read-Only Teacher + + - **Students** - Students who have registered for courses in your organization. + - **Users without course** - All users that are not members of a course as a result of a course being deleted or because a new user has joined your organization but is not yet a Teacher or a Student in a course. + + To remove a user in this group from your organization, check the check box and click **Remove Selected**. + + .. image:: /img/manage_organization/orphanedusers.png + :alt: Removing Users without Course + + .. Note:: Removing users from your organization does not delete their Codio account. Only the account owner can :ref:`delete users `. \ No newline at end of file diff --git a/docs/_sources/instructors/admin/orgbilling.rst.txt b/docs/_sources/instructors/admin/orgbilling.rst.txt new file mode 100644 index 00000000..3938a970 --- /dev/null +++ b/docs/_sources/instructors/admin/orgbilling.rst.txt @@ -0,0 +1,86 @@ +.. meta:: + :description: Organization Billing + +.. _org-billing: + +Organization Billing +==================== + +For K12 and University organizations, the billing screen allows you to generate invoices for your account (for new accounts and renewal of existing accounts) or switch your organization to Student Pay, where students are prompted to enter a credit card when they sign up. + +Access Billing Page +------------------- + +1. Click on your **username** in the bottom left corner of your Codio dashboard. + +2. Click the name of your organization (under **Organizations**) + + .. image:: /img/class_administration/addteachers/myschoolorg.png + :alt: Organization + +3. You will see the **Billing** option. + + .. image:: /img/manage_organization/orgbilltab.png + :alt: Organization Billing + +Institution Pay +--------------- +To generate an invoice or a quote, enter your country and follow the steps below: + + .. image:: /img/manage_organization/directions.png + :alt: Directions Billing + +1. Enter the number of student licenses required. + +2. Enter the student start date. + +3. If you have a promotion code, enter it in the appropriate field. Validation is case insensitive. + +- If the promotion code is invalid, the message + ``Invalid promotion code`` will be shown +- If the promotion code has expired, the message + ``This promotion code has expired`` will be shown +- Promotion codes are only available for new users and not available for student pay plans. + +4. The plans available will be shown (semester or annual), select the plan you require and if you require the invoice to be sent to someone else, you can change the recipient. + +5. When you are ready, click the 'Generate Invoice' button or 'Generate Quote' button as per your requirement, and the invoice or quote will be generated and sent to the email address. + + .. Note:: You can access your invoice from the email, or you can click **View Invoice** from the **Invoice History** section. Pay your invoice at this link. + + .. image:: /img/manage_organization/viewinvoice.png + :alt: View Invoice + +Student Pay +----------- +The option to switch to a **Student Pay plan** where students are prompted to enter a credit card when they sign up is also available. Be aware if you have an annual plan and have already paid, this might lead to a conflict. + + .. image:: /img/manage_organization/switchstudentpay.png + :alt: Switch to Student Pay + +1. Navigate to the **Billing** page in your organization. + +2. Click **Switch to Student Pay.** It will prompt you to confirm this action. + +3. Students will now be prompted to make a payment when they access their Codio account, whether it be from Codio or from your LMS. + +4. To support students in this process, provide them with `this documentation link `__ with specific emphasis to `this section `__ in the event they have problems especially if this may be first time they are trying to purchase online and the transaction may be refused by their bank due to the ever increasing fraud prevention measures card issuers are implementing or guide them to contact help@codio.com. + +Bookstore Pay +------------- +Codio offers the option to provide licenses through an institution's campus bookstore. This can ensure students on financial aid who need to buy licenses can do so through the bookstore. Students pay the bookstore for the license, the bookstore provides a redemption code, and students enter the code when they first access their Codio account. Codio then invoices the campus bookstore for codes purchased. + +1. `Send this article `_ to your bookstore manager to get the process started. + +2. To support students in this process, provide them with `this documentation `_ or guide them to contact help@codio.com. + +Viewing Invoice History +----------------------- + +To view previous invoices, click on the **View Invoice** link in the **Invoice History** section below: + +.. Important:: This is accessed from the Organization screen and having clicked on your Organization. Please do not use the normal Billing area for individuals that you can access by clicking on your name/gravatar (bottom left of screen) and selecting the **Billing** tab unless you wish to subscribe as an **Individual** or already are subscribed as an **Individual**. + +.. |Profile| image:: /img/class_administration/profilepic.png +.. |Org Name| image:: /img/class_administration/addteachers/myschoolorg.png +.. |Org Billing| image:: /img/class_administration/orgbilling.png diff --git a/docs/_sources/instructors/authoring/assessments/add-assessment.rst.txt b/docs/_sources/instructors/authoring/assessments/add-assessment.rst.txt new file mode 100644 index 00000000..354c58eb --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/add-assessment.rst.txt @@ -0,0 +1,61 @@ +.. meta:: + :description: You can add a new Assessment using the Add Assessment drop-down menu. + +.. _add-assessment: + +Auto-graded assessments +======================= + +.. toctree:: + :caption: Auto-graded assessments + :hidden: + + assessments + student-submission + assessment-security + auto-grade-scripts + parameterized + delete-assessment + edit-assessment + duplicate-assessment + edit-assessment-points + standard-code-test + advanced-code-test + partial-points + multiple-choice + fill-in-blanks + free-text + autograde-free-text + grade-book + parsons-puzzle + random + math-assessments + ungraded-assessments + sense-network + + + + +Add a New Assessment +-------------------- +To add a new assessment for a course, follow these steps: + +1. Open the assignment in the course, and click the **Edit** button to open the Guide Editor. You can also click the **Tools** menu and choose **Guides > Edit**. +2. Click the **Assessments** button and choose the type of assessment you want to add to the assignment. + + .. image:: /img/guides/add_assessment.png + :alt: Add Assessment + +3. Click **Create**. + +Refer to the specific topics for the type of assessment: + +- :ref:`Standard Code Test ` +- :ref:`Advanced Code Test ` +- :ref:`Multiple Choice ` +- :ref:`Fill in the Blanks ` +- :ref:`Free Text ` +- :ref:`Free Text Autograde ` +- :ref:`Grade Book ` +- :ref:`Parsons Puzzle ` +- :ref:`Random Assessment ` diff --git a/docs/_sources/instructors/authoring/assessments/advanced-code-test.rst.txt b/docs/_sources/instructors/authoring/assessments/advanced-code-test.rst.txt new file mode 100644 index 00000000..f1908496 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/advanced-code-test.rst.txt @@ -0,0 +1,231 @@ +.. meta:: + :description: The advanced code test assessment type allows you to easily implement unit tests, style checkers, or write custom code tests in any language that grades student-written code. + +.. _advanced-code-test: + +Advanced Code Test +================== +The advanced code test assessment type allows you to easily implement unit tests, style checkers, or write custom code tests in any language that grades student-written code. + +To ensure that your test scripts run securely and to prevent student access to your testing files or executables, place them in the **.guides/secure** folder. This folder is not available to students in their assignments and they cannot access it from the command line. Only teachers with editing privileges have access to the **.guides/secure** folder. + + + .. Note:: If your assignment will contain multiple assessments, Code files and Test Cases for individual assessments should be placed in separate folders to avoid compiling all files. + +Complete each section to set up your advanced code test. + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + Toggle the **Show Name** setting to hide the name in the challenge text the student sees. + + - **Instructions** - Enter text that is shown to the student using optional Markdown formatting. + +2. Click **Execution** in the navigation pane and complete the following information: + + - **Language Type** - Click the drop-down and choose the language. The following language-specific frameworks are explicitly supported: + + - **Ruby**: `RuboCop`_ or `RSpec`_ + - **Java**: `JUnit`_ or `checkstyle`_ + - **Python**: `pycodestyle`_ or `UnitTest`_ + - **JavaScript**: `JSHint and JSLint`_ + - **Custom**: for a `custom`_ auto-grading script in any language + + - **Language Assessment Subtype** - Click the drop-down and choose a subtype for the selected language type, if applicable. + + - **Timeout** - Where you can amend the timeout setting for the code to execute. Arrows will allow you to set max 300 (sec), if you require longer, you can manually enter the timeout period. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +3. Click **Grading** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_grading.png + :alt: Grading + + - **Points** - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points. + - **Allow Partial Points** - Toggle to enable a percentage of total points to be given based on the percentage correctly answered. See :ref:`Allow Partial Points ` for more information. + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + - **Show Rationale to Students** - Toggle to display the rationale for the answer to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + - **Rationale** - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student's project. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - The **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +6. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +7. Click **Create** to complete the process. + +---------------------- +RuboCop +---------------------- + + `RuboCop (website link)`_ is a Ruby Linter. + + To check if RuboCop is already installed on your stack, simply run `rubocop` from the command line. If it is not installed, you can easily install it either via the command line (`gem install rubocop`) or using **bundler** (by adding `gem 'rubocop', require: false` to your Gemfile). + + When using Rubocop in Codio, specify the Ruby files you'd like RuboCop to check under the **ADD CASE:** option. + + The student will need to follow all style conventions to earn full credit on the assessment. + +.. _RuboCop (website link): https://rubocop.org/ + +---------------------- +RSpec +---------------------- + + `RSpec (website link)`_ is a Ruby testing suite. + + To check if RSpec is already installed on your stack, simply run `rspec` from the command line. If it is not installed, you can easily install it either via the command line (`gem install rspec`) or using **bundler** by adding it to your Gemfile. + + When using RSpec in Codio, specify the ruby files containing RSpec tests you'd like to run under the **ADD CASE:** option. + + If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on **ALLOW PARTIAL POINTS** to have Codio evenly weight each test. + +.. _RSpec (website link): https://rspec.info/ + +---------------------- +JUnit +---------------------- + `JUnit (website link)`_ is a Java testing framework. Currently Codio supports JUnit 4 and JUnit 5 so you can choose any one of them as per your requirement. + + When using JUnit in Codio, specify the Java files containing JUnit tests you'd like to run under the **ADD CASE:** option. + + If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on **ALLOW PARTIAL POINTS** to have Codio evenly weight each test. + + There are 4 *optional* configurations for more complex file structures: + + - **SOURCE PATH** - specifies where the student code being tested is + - **TESTS SOURCE PATH** - specifies where non-test-case test helper files are + - **LIBRARY PATH** - specifies where .jar files needed to run the student code or test code at + - **WORKING DIRECTORY** - specifies where in the file tree the actual test will run + + All code files **Source path** will be compiled. Files that fail to compile successfully will cause the tests to fail, even if they are not used. + Codio has a :ref:`JUnit ` runner for building JUnit tests. + +Custom Feedback with JUnit in Codio +----------------------------------- + When using JUnit in Codio, you can add your own custom feedback to the standard feedback Junit returns to students. The feedback message is passed to the assert method as the first parameter. + +`assertEquals(feedback, expected, actual)` + +.. _Junit (website link): https://junit.org/junit5/ + +---------------------- +checkstyle +---------------------- + + `checkstyle (website link)`_ is a Java linter. + + When using checkstyle in Codio, specify the configuration file under **CONFIG PATH** -- you can use the `Google configuration`_, `Sun configuration`_, or `create your own configuration`_. + + Select the **CHECKSTYLE VERSION**, by default the appropriate version is selected according to your installed Java version but you can also select one of the available options: + + - Checkstyle v10.12(JRE 11 and above) + + - Checkstyle v8.24(JRE 8 and above) + + - Checkstyle v8.9(JRE 8) + + - Checkstyle v6.6(JRE 6 and 7) + + + Specify the Java files you'd like Checkstyle to check under the **ADD CASE:** option. + + The student will need to follow all style conventions to earn full credit on the assessment. + +.. _checkstyle (website link): https://checkstyle.sourceforge.io/ +.. _Google configuration: https://github.com/checkstyle/checkstyle/blob/2954d8723003ef229f5825510a433ab8c60f2774/src/main/resources/google_checks.xml +.. _Sun configuration: https://github.com/checkstyle/checkstyle/blob/13481f2c410e4944ecf5ab93ec49948a523a0c82/src/main/resources/sun_checks.xml +.. _create your own configuration: https://checkstyle.sourceforge.io/config.html + +---------------------- +pycodestyle +---------------------- + + If you want to use pycodestyle, you must first install it. Use the following commands to install pycodestyle: + +.. code:: ini + + sudo apt update + sudo apt install python3-pip + sudo python3 -m pip install pycodestyle + +.. image:: /img/guides/assessment_act_exec_pycodestyle.png + :alt: Pycodestyle + +To add individual Python source files whose style should be checked, either enter their relative path to `~/namespace` or drag them from the File Tree into the **Add Case** text box and click **Add Case**. You may add as many cases as needed. When the assessment executes, ``pycodestyle`` inspects each added file and outputs all styling issues. + +---------------------- +UnitTest +---------------------- + + `UnitTest (website link)`_ is a python testing framework. + + When using python UnitTest in Codio, specify the python files containing UnitTest tests you'd like to run under the **ADD CASE:** option. + + Specify whether you are running python 2 (`python`) or python 3 (`python3`) under **PYTHON EXECUTABLE**. + + If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on **ALLOW PARTIAL POINTS** to have Codio evenly weight each test. + + There are 2 *optional* configurations for more complex file structures: + + - **PYTHON WORKING DIRECTORY** - specifies where in the file tree the actual test will run + - **STUDENT FOLDER** - specifies where the student code being tested is + +.. _UnitTest (website link): https://docs.python.org/3/library/unittest.html + +---------------------- +JSHint and JSLint +---------------------- + +**JSHint** or **JSLint** must first be installed as a Node.js global package using the following command: + +``sudo npm install -g jshint jslint`` + +To add individual JavaScript source files for style checking, either enter their relative path to `~/namespace` or drag them from the File Tree into the **Add Case** text box and click **Add Case**. You may add as many cases as needed. + +You can also choose **JSLint** or **JSHint** in the **Language Assessment Subtype** drop-down menu. When the assessment executes, each added file is inspected and outputs all styling issues that were found. + +---------------------- +Custom +---------------------- + +If you choose **Custom**, enter the following information: + + .. image:: /img/guides/assessment_act_exec_custom.png + :alt: Custom + + - **Command** - Enter the command that executes the student code. + + .. Note:: If you store the assessment scripts in the **.guides/secure** folder, they run securely and students cannot see the script or the files in the folder. + + The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code. + + - **Timeout** - Enter the time period (in seconds) that the test runs before terminating. + + - **Allow Partial Points** - Toggle to enable partial points, the grade is then based on the percentage of test cases the code passes. See :ref:`Allow Partial Points ` for more information. + + +See a Working Example +---------------------- +To see an example of a specific unit test or style checker, see the Starter Pack in the corresponding language: + +Go to **Starter Packs** and search for **Advanced Features in Python** if not already loaded in your **My Projects** area. Click **Use Pack** and then **Create** to install it to your Codio account. + +Information about C++ unit testing using GoogleTest is available in the **C++ Unit Testing Using GoogleTest** Starter Pack. + +Additionally, Codio pre-populates a project in **My Projects** called **Demo Guides and Assessments** that contains examples for all assessment types and a guides authoring cheat sheet. If you do not see this project, go to **Starter Packs** and search for **Demo Guides and Assessments**. Click **Use Pack** and then **Create** to make a copy in your **My Projects** area. + diff --git a/docs/_sources/instructors/authoring/assessments/assessment-security.rst.txt b/docs/_sources/instructors/authoring/assessments/assessment-security.rst.txt new file mode 100644 index 00000000..e5ae9354 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/assessment-security.rst.txt @@ -0,0 +1,36 @@ +.. meta:: + :description: Storing code tests and solutions securely. + +.. _assessment-security: + +Assessment Security +=================== + +Data for assessments is stored in individual files in the ``.guides/assessments`` folder. +Other folders automatically created in the ``.guides`` directory are: ``.guides/img`` and ``.guides/content``. +Student assignments only receive the ``.guides`` folder and the ``.guides/img`` folder. If you have have provided student access to the file tree in the :ref:`page layout `, the ``.guides`` folder will not be visible. + + +The ``.guides`` folder is a good place to store bash files or data files because they can't be easily deleted by the student via the file tree. Keep in mind though, if students have access to the terminal they can use it to view any files in their Linux container, including the ``.guides`` folder. + +Files that are stored in the ``.guides`` folder can be updated even if students have already started an assignment. +When you publish an assignment that students have already started, pre-existing files in the student workspace ``\home\codio\workspace`` will not be updated in order to make sure student work is not overwritten. +More information on this topic may be found on the :ref:`modify assignments ` page. + +Blocking student access to the terminal +--------------------------------------- + +The :ref:`terminal ` can be accessed from the file tree, the menu or by using the key combination (Shift+Alt+T on a PC, Shift+Option+T on a Mac). If you want to block all student access to the terminal you need to hide the file tree in the page layout, :ref:`customize the IDE menu` and block the keyboard short cut in :ref:`project preferences`. + +The Secure folder +----------------- + +If you are creating your own testing scripts or unit tests you can create a folder named ``.guides\secure`` to safely store test files. The secure directory is not copied over to the student version of the assignment. +When a student runs a code test that references a file in the ``.guides\secure`` folder, an **ephemeral** container is created that is a combination of the student workspace and the ``.guides\secure`` folder the instructor created. +This container is referred to as **ephemeral** because it only exists during the execution of the assessment. If you open a student project to view their work, you will not have access to the secure folder because it does not exist in the student environment. + +Your test should not write any information to the ``.guides\secure`` folder because it does not persist. +All output should conveyed using either stdout or the feedback buffer that is described in the individual assessesment types that can use the secure folder, :ref:`Advanced Code Test `, :ref:`Free Text Autograde ` and :ref:`Assignment Level Scripts `. + +Standard code tests do not have access to the secure folder by default but you *can* force a :ref:`Standard Code Test ` to run in an **ephemeral** container by including a file name with the ``.guides\secure`` path in the **Command** portion on the **Execution** tab. +This could be done if you are passing a file name as a parameter or if you have no command line parameters, you can put the file name on the command line and it will be ignored by your program but Codio will run the test in a container with the Secure folder mounted. Then you can specify a file in ``.guides\secure`` as an input parameter. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/assessments.rst.txt b/docs/_sources/instructors/authoring/assessments/assessments.rst.txt new file mode 100644 index 00000000..2340747d --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/assessments.rst.txt @@ -0,0 +1,19 @@ +.. meta:: + :description: Assessments are automatically or manually graded questions. + +.. _assessments: + +Assessments +=========== +Assessments can be used to determine how well students understand course material, and can be automatically or manually graded. Codio offers a wide range of assessment types, including autom-graded code tests, multiple choice tests, fill in the blanks, drop-down selection, free text responses and assignment grading. Assessments can be interspersed throughout tutorial materials or stand alone using an :ref:`assignment level script `. + +You can view the results of assessments in a course from the teacher dashboard. + +Review the following topics to gain an understanding of using assessments: + +- :ref:`Ungraded Assessments ` +- :ref:`Add a New Assessment ` +- :ref:`Edit an Assessment ` +- :ref:`Edit Points for an Assessment ` +- :ref:`Delete an Assessment ` +- :ref:`Assessment Security ` \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/auto-grade-scripts.rst.txt b/docs/_sources/instructors/authoring/assessments/auto-grade-scripts.rst.txt new file mode 100644 index 00000000..c567a897 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/auto-grade-scripts.rst.txt @@ -0,0 +1,370 @@ +.. meta:: + :description: Assignment level scripts have access to data about all the assessments in an assignment. + +.. _auto-grade-scripts: + +Assignment Level Scripts +======================== +You can use assignment level scripts to evaluate student code, normalize points, and mark for participation grading. Assignment level scripts are added in the **Script Grading** field on the :ref:`Script Grading ` settings page. These scripts can then transfer the grading value into the grading field. Assignment level scripts are run when an assignment is **Marked as Complete**. + +.. Note:: The script must execute within 3 minutes or a timeout error occurs. There is a maximum size for the feedback that can be returned of 1Mb. If this limit is exceeded, the message **Payload content length greater than maximum allowed: 1048576** will be returned. + +If you are using an LMS platform with Codio, be sure to enter a percentage value in the **Grade Weight** field to maintain compatibility with LMS gradebooks. This value is then transferred into your LMS gradebook once you :ref:`release the grades `. + +Secure scripts +-------------- +If you store grading scripts in the **.guides/secure** folder, they run securely and students cannot see the script or the files in the folder. Only instructors can access this folder. +You can find more information about assessment security :ref:`here `. + +Access assessment results +------------------------- +You can access student scores for the auto-graded assessments in an assignment. You can get both summary data and data for each assessment. This data is in JSON format and can be accessed in the ``CODIO_AUTOGRADE_ENV`` environment variable. The following is an example of the format of this data: + +.. code:: ini + + { + "assessments": { + "stats": { + "total": 2, + "answered": 2, + "correct": 2, + "totalPoints": 12, + "points": 8 + }, + "info": [{ + "name": "Test 1", + "points": 5, + "answer": { + "correct": true, + "points": 5 + } + }, { + "name": "Test 2", + "points": 7, + "answer": { + "correct": true, + "points": 3 + } + }] + }, + "completedDate": "2017-02-07T09:47:54.471Z", + "student": { + "id": "codio_GUID", + "username": "astudent", + "fullName": "A Student", + "email": "email@example.com" + }, + "course": { + "id": "codio_course_id", + "projectId": "codio_project_id", + "lti": true, + "assignment": { + "id": "codio_assignment_id", + "start": null, + "end": null + } + } + } + +.. _participation-grading: + +Participation Grading +--------------------- + +You can implement participation grading using assignment level scripts. In the examples below the Codio environment variable is checked to see how many questions were answered in the assignment. +The student grade is calculated based on whether they answered the question, not on correctness. + +- Depending on your language of choice select either the .sh or .py file and add it to your `.guides/secure` folder. +- If you are using the Bash version you will first need to install the utility "jq" to your stack (see :ref:`create a new stack `). + +.. tabs:: + + .. code-tab:: bash + + #!/bin/bash + + # save json based passed environment + echo $CODIO_AUTOGRADE_ENV > save.json + + ANSWERED=$(jq -r '.assessments.stats.answered' save.json) + TOTAL=$(jq -r '.assessments.stats.total' save.json) + + GRADE=$(($ANSWERED * 100 / $TOTAL)) + + FEEDBACK="" + + if [ $TOTAL -eq $ANSWERED ]; then + FEEDBACK="✅ You answered all the questions and got full points on this assignment" + else + FEEDBACK="❌ You did not answer all the questions and therefore only received points for the questions you answered" + fi + + curl --retry 3 -s "$CODIO_AUTOGRADE_V2_URL" -d grade=$GRADE -d format=md -d feedback="$FEEDBACK" + + .. code-tab:: python + :selected: + + import os + import json + + # import grade submit function + import sys + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + + feedback="" + env = os.environ.get('CODIO_AUTOGRADE_ENV') + parsed = json.loads(env) + answered = parsed['assessments']['stats']['answered'] + total=parsed['assessments']['stats']['total'] + + grade=answered*100/total + + if total==answered: + feedback+="✅ You answered all the questions and got full points on this assignment" + else: + feedback+="❌ You did not answer all the questions and therefore only received points for the questions you answered" + + res = send_grade_v2(grade, feedback, FORMAT_V2_MD) + + exit( 0 if res else 1) + + +- Add the file to **Education>Test Autograde Script**. If your file is not a bash script or other type of file that runs independently, you will need to specify the program that will run it, for example "python3 autograde.py". +- Note: The JSON is not updated until the assignment is marked as complete. If you are testing values from inside the assignment - you will not see the updated values. +- Make sure to **Publish** the assignment. +- In the course assignment settings :ref:`Grade Weights ` section, enable **Script Grading** set **Set custom script path** to that file and disable **Assessments Grading**. + + +Regrade an individual student's assignment +------------------------------------------ +If students have clicked **Mark as Complete** and the custom script is triggered, you can regrade their work by resetting the `complete` switch, and then set it to *complete* again, which triggers the custom script to run again. + +Regrade all student's assignments +--------------------------------- +You can regrade all student's assignments that have already been auto-graded from the **Actions** button on the assignment page. + +1. Navigate to the assignment and open it. +2. Click the **Actions** button and then click **Regrade Completed**. This is useful if you have found a bug in your assignment level grading script. **Regrade Completed** does not run individual code test assessments. + +Test and debug your grading scripts +----------------------------------- +.. Note:: Codio provides the ability to test your auto-grading scripts when creating your project, this should be done before publishing your project to a course. Once an assignment has been published to the course, any changes made to files in the student workspace (/home/codio/workspace) are not reflected in the published assignment. Grading scripts should be stored in the **.guides/secure** folder. Files in the .guides and guides/secure folders can be published even if students have already started. + + +Test your script in the IDE +........................... +You can test your auto-grading script in the Codio IDE from the **Education > Test Autograde Script** on the menu bar. This option allows you to specify the location of your auto-grading script and run it against the current project content. It also allows you simulate scores attained by any auto-graded assessments located in the Codio Guide and select which autograded assessments to test. + +.. image:: /img/autograde-test.png + :alt: Autograde Test + +Be sure to take the following into account when using this feature: + +- When you click **Test Script**: + + - All output to ``stdout`` and ``stderr`` are displayed in the dialog. + - The grade returned by your test script is at the bottom of the output section. + +- ``stdout`` and ``stderr`` output is not available when running the actual auto-grading script (not in test mode) because it runs invisibly when the assignment is marked as complete. Because of this, you should only generate output for testing and debugging. +- If you want your script to provide feedback to the student, you should output it to a file that can be accessed by the student when opening the project at a later date. In this case, you should allow read-only access to the project from the assignment settings after being marked as complete. + +Test your script using bootstrap launcher +......................................... +You can also use a simple bootstrap launcher that loads and executes the script from a remote location so that you can edit and debug independently of the Codio box. The following example bash script shows a Python script that is located as a Gist on GitHub. This script might be called **.guides/secure/launcher.sh**. + +.. code:: bash + + #!/bin/bash + URL="https://gist.githubusercontent.com/ksimuk/11cd4e43b0c43f79d9478efbe21ba1b9/raw/validate.py" + curl -fsSL $URL | python - $@ + +It is important that this file is stored in the **.guides/secure** folder. You then specify the full filepath **.guides/secure/launcher.sh** in the **Set custom script path** field in the assignment settings. + +It is now possible to debug the Python script and fix any bugs that you may have noticed once students have started work on the assignment. + + + +Sending Points to Codio +----------------------- + +Codio provides a Python library to facilitate reporting points from your custom scripts. There are four functions in this library: `send_grade`, `send_grade_v2`, `send_partial` and `send_partial_v2`. + + .. Note:: Partial points are not used in assignment level scripts, see :ref:`Allow Partial Points ` for more information about setting up partial points. + +In order to use this library you need to add the following code to the top of your grading script: + +.. code:: python + + # import grade submit function + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade + +or: + +.. code:: python + + # import grade submit function + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + +The calls to use these functions are as follows: + +.. code:: python + + send_grade(grade) + +`grade` - Should be the percent correct for the assessment. + +.. code:: python + + send_grade_v2(grade, feedback, format=FORMAT_V2_TXT, extra_credit=None) + +`grade` - Should be the percent correct for the assessment. + +`feedback` - The buffer containing the feedback for your student - maximum size is 1 Mb. + +`format` - The format can be Markdown, HTML or text and the default is text. + +`extra_credit` - Extra points beyond the value for doing this correctly. These do not get passed to an LMS system automatically, just the percentage correct. + +.. _autograde-enhance: + +Auto-grading enhancements +------------------------- + +The V2 versions of the grading functions allow you to: + +- Send feedback in different formats such as HTML and Markdown/plaintext. +- Provide separate debug logs. +- Notify (instructors and students) and reopen assignments for a student on grade script failure. + + +If you don't use the send_grade_v2 functions, this URL (passed as an environment variable) can be used:```CODIO_AUTOGRADE_V2_URL``` + +These variables allow POST and GET requests with the following parameters: + +- **Grade** (```CODIO_AUTOGRADE_V2_URL```) - return 0-100 percent. This is the percent correct out of total possible points. +- **Feedback** - text +- **Format** - html, md, txt - txt is default +- **CompletedDate** - can be set to determine relevant penalties from student completed date. State in UTC format (see example below) +- **Penalty** - Penalty is number between 0-100, + + +.. Note:: **Grade** would be set after any penalties applied. **Grade + Penalty** should be <= 100. The Penalty is available only for assignment grading. Set penalty to -1 to remove any penalty override. + +With the V2 versions of grading, the script output is saved as a debug log. This means that all information you want to pass to students must use the **Feedback** mechanism. + +If the script fails: + +- The attempt is recorded. +- The assignment is not locked (if due date is not passed). +- An email notification with information about the problem is sent to the course instructor(s) containing the debug output from the script. + +These Python and Bash files that can be loaded by a bootstrap script or as explained above in the participation grading section. + +.. tabs:: + + .. code-tab:: bash + + #!/bin/bash + + POINTS=$(( ( RANDOM % 100 ) + 1 )) + EXTRA_CREDIT=$(( ( RANDOM % 100 ) + 1 )) + PENALTY=$(( ( RANDOM % 100 ) + 1 )) + curl --retry 3 -s "$CODIO_AUTOGRADE_V2_URL" -d grade=$POINTS -d format=md -d feedback='### Markdown text here' -d extra_credit=$EXTRA_CREDIT -d penalty=$PENALTY + + .. code-tab:: python + :selected: + + #!/usr/bin/env python + import os + import random + import json + # import grade submit function + import sys + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + CODIO_UNIT_DATA = os.environ["CODIO_AUTOGRADE_ENV"] + def main(): + # Execute the test on the student's code + grade = random.randint(0, 100) + feedback = '## markdown text' + completedDate = json.loads(CODIO_UNIT_DATA)['completedDate'] + if completedDate > "2023-05-20T00:00:00.00Z": + penalty = 20 + elif completedDate > "2023-05-10T00:00:00.00Z": + penalty = 10 + else: + penalty = -1 + extra_credit = random.randint(0, 100) + + # Send the grade back to Codio with the penalty factor applied + res = send_grade_v2(grade, feedback, FORMAT_V2_MD, extra_credit, penalty) + # res = send_grade_v2(grade, feedback, penalty=penalty) # if 'format' or/and 'extra credit' params are not in request then use penalty=penalty_value + print(CODIO_UNIT_DATA) + exit( 0 if res else 1) + + main() + +Example grading scripts +----------------------- +This section provides example assignment level scripts using the older methods to send grades. + +.. Note:: Both of these examples use random numbers to generate the grade - you can substitute whatever test you would like. + +.. tabs:: + + .. code-tab:: bash + + #!/bin/bash + set -e + # Your actual test logic + # Our demo function is just generating some random score + POINTS=$(( ( RANDOM % 100 ) + 1 )) + # Show json based passed environment + echo $CODIO_AUTOGRADE_ENV + # Send the grade back to Codio + curl --retry 3 -s "$CODIO_AUTOGRADE_URL&grade=$POINTS" + + .. code-tab:: python + :selected: + + import os + import random + import requests + import json + import datetime + + # import grade submit function + import sys + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade + + ################## + # Helper functions # + ################## + + + # Get the url to send the results to + CODIO_AUTOGRADE_URL = os.environ["CODIO_AUTOGRADE_URL"] + CODIO_UNIT_DATA = os.environ["CODIO_AUTOGRADE_ENV"] + + def main(): + # Execute the test on the student's code + grade = validate_code() + # Send the grade back to Codio with the penalty factor applied + res = send_grade(int(round(grade))) + exit( 0 if res else 1) + + ######################################## + # You only need to modify the code below # + ######################################## + + # Your actual test logic + # Our demo function is just generating some random score + def validate_code(): + return random.randint(10, 100) + + main() + diff --git a/docs/_sources/instructors/authoring/assessments/autograde-free-text.rst.txt b/docs/_sources/instructors/authoring/assessments/autograde-free-text.rst.txt new file mode 100644 index 00000000..341a2f44 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/autograde-free-text.rst.txt @@ -0,0 +1,227 @@ +.. meta:: + :description: Free text autograde assessments allow students to answer questions in their own words and includes a field for a command line to execute a script to provide autograding. + +.. _free-text-autograde: + +Free Text Autograde +=================== +The Free Text Autograde assessment is similar to the :ref:`Free Text ` assessment in that it allows students to answer questions in their own words, but includes a field for a command line to execute a script that allows autograding. The answer to the question is stored in the environment variable ``CODIO_FREE_TEXT_ANSWER``. + +Follow these steps to set up an autograde free text assessment: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_free_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + Toggle the **Show Name** setting to hide the name in the challenge text the student sees. + + - **Instruction** - Enter text that is shown to the student using optional Markdown formatting. + +2. Click **Execution** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_autofree_exec.png + :alt: Execution + + .. Note:: If you store the assessment scripts in the **.guides/secure** folder, they run securely and students cannot see the script or the files in the folder. + The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code. + + - **Command** - Enter the command that executes the student code. + + - **Timeout** - Enter the time period (in seconds) that the test runs before terminating. + +3. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_free_grading.png + :alt: Grading + + - **Points** - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points. + + - **Allow Partial Points** - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer. + + - **Preview Type** - Choose the input (plaintext or markdown) to be provided by the student. LaTex is also supported and is useful when students need to enter mathematical formulas in their answers. The following options are available: + + - **Plaintext** - Students enter ordinary text with no markdown formatting; there is no preview window. + - **Plaintext + LaTeX** - Students enter plaintext with no markdown formatting but offers support for LaTeX commands. A preview window is available where students can see the rendered LaTeX output. + - **Markdown + LaTeX** - Students enter markdown that also offers support for LaTex commands. A preview window is available where students can see the rendered markdown with LaTeX output. + + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + - **Show Rationale to Students** - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + - **Rationale** - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student's project. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - By default, **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +5. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +6. Click **Create** to complete the process. + + +Example scripts for free-text auto-grade with all or nothing scoring +.................................................................... + +.. tabs:: + + .. code-tab:: bash + + #!/usr/bin/env bash + + # Initialize variables + TOTAL_POINTS=10 + POINTS=0 + + # Check for the term "immutable" + if [[ $CODIO_FREE_TEXT_ANSWER == *"immutable"* ]]; then + POINTS=$((POINTS + 5)) + else + echo "❌ You did not specify that a Tuple is immutable. " + fi + + # Check for the term "data structure" + if [[ $CODIO_FREE_TEXT_ANSWER == *"data structure"* ]]; then + POINTS=$((POINTS + 5)) + else + echo "❌ You did not qualify that a Tuple is a data structure. " + fi + + # If both terms were found, set the feedback buffer to "Your answer has passed" + if [ $POINTS -eq $TOTAL_POINTS ]; then + echo "✅ Your answer has passed." + exit 0 + fi + + exit 1; + + .. code-tab:: python + :selected: + + #!/usr/bin/env python + import os, sys + + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + + text = os.environ['CODIO_FREE_TEXT_ANSWER'] + + points = 0 + total = 10 + + + # check for required key words + if 'immutable' in text: + points+=5 + else: + print("❌ You did not specify that a Tuple is immutable. ") + if 'data structure' in text: + points+=5 + else: + print("❌ You did not qualify that a Tuple is a data structure. ") + + if points==10: + print("✅ Your answer has passed. ") + exit(0) + + exit(1) + +Example scripts for free-text auto-grade with partial points +............................................................ + +.. tabs:: + + .. code-tab:: bash + + #!/usr/bin/env bash + + # Initialize variables + + TOTAL_POINTS=10 + POINTS=0 + FEEDBACK_BUFFER="" + + # Check for the term "immutable" + if [[ $CODIO_FREE_TEXT_ANSWER == *"immutable"* ]]; then + POINTS=$((POINTS + 5)) + else + FEEDBACK_BUFFER+="❌ You did not specify that a Tuple is immutable. " + fi + + # Check for the term "data structure" + if [[ $CODIO_FREE_TEXT_ANSWER == *"data structure"* ]]; then + POINTS=$((POINTS + 5)) + else + FEEDBACK_BUFFER+="❌ You did not qualify that a Tuple is a data structure. " + fi + + # If both terms were found, set the feedback buffer to "Your answer has passed" + if [ $POINTS -eq $TOTAL_POINTS ]; then + FEEDBACK_BUFFER+="✅ Your answer has passed." + fi + + # Calculate the percentage score + PERCENTAGE=$(($POINTS * 100 / $TOTAL_POINTS)) + + curl -s "$CODIO_PARTIAL_POINTS_V2_URL" -d points=$PERCENTAGE -d format=md -d feedback="$FEEDBACK_BUFFER" + + .. code-tab:: python + :selected: + + #!/usr/bin/env python + import os, sys + + text = os.environ['CODIO_FREE_TEXT_ANSWER'] + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_partial_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + + def main(): + + points = 0 + total = 10 + feedback = '' + + # check for required key words + if 'immutable' in text: + points+=5 + else: + feedback+="❌ You did not specify that a Tuple is immutable. " + if 'data structure' in text: + points+=5 + else: + feedback+="❌ You did not qualify that a Tuple is a data structure. " + + if points==10: + feedback+="✅ Your answer has passed. " + + # calculate percent out of total + percent = (points/total)*100 + # feedback+= "

On this question you earned " + str(points) + " out of " + str(total) + "

" + + res = send_partial_v2(percent, feedback, FORMAT_V2_HTML) + exit( 0 if res else 1) + + main() + + + +Automatically grade a Free Text assessment correct +..................................................... +This technique can be used to automatically mark the assessment correct for students who have submitted anything in the response. +In the **Command** field on the **Execution** tab enter the command below: + +.. code:: bash + + /bin/true + +You can use the **Rationale** field on the **Grading** tab to provide feedback since you aren't running an actual script. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/delete-assessment.rst.txt b/docs/_sources/instructors/authoring/assessments/delete-assessment.rst.txt new file mode 100644 index 00000000..328201e5 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/delete-assessment.rst.txt @@ -0,0 +1,30 @@ +.. meta:: + :description: Delete an assessment from a page in your guide or completely from an assignment. + +.. _delete-assessment: + +Delete an Assessment +==================== +To delete an assessment, follow these steps: + +1. Select the page where your assessment is located. + +2. Delete the assessment token on the page: + + .. image:: /img/assessmenttoken.png + :alt: Assessment Token + + Once deleted, an assessment remains hidden. + +3. To fully remove the assessment, in the Guide Editor, click the **Assessments** button. + +4. Click the **View Existing Assessments** option to view the list of all assessments. Deleted assessments are highlighted in red. + +5. Click the **X** next to the assessment you want to permanently delete. + +6. You can also use the **Filter By**, select **Not Used** and delete all unused assessments together. You can search for assessments by name,points or order in guides and order them up or down using the arrow buttons + +.. Note:: You can restore a deleted assessment, if it is still on the Assessments tab, by clicking on the name and copying the unique identification (see image below). For this example, the line in your guide will be: ``{Check It!|assessment}(multiple-choice-1735957228)``. + + .. image:: /img/guides/assessment_undelete.png + :alt: Assessment Undelete \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/duplicate-assessment.rst.txt b/docs/_sources/instructors/authoring/assessments/duplicate-assessment.rst.txt new file mode 100644 index 00000000..f314a082 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/duplicate-assessment.rst.txt @@ -0,0 +1,26 @@ +.. meta:: + :description: Duplicate an assessment. +.. _duplicate-assessment: + +Duplicate an Assessment +======================= + +The duplicate function creates a copy of an existing assessment you can use as a starting point to make a different assessment. + +To duplicate an assessment, open the assessment by either: + + +1. In the Guide Editor, click the **Edit: ** button to the right of the assessment. + + .. image:: /img/guides/editassessmentbutton.png + :alt: Edit Assessment + +2. Click the **Assessment** button to view the list of all assessments and click the assessment to open it. + + .. image:: /img/guides/editassessmentlist.png + :alt: Edit Assessment List + +Then click the **Duplicate and Save** button. + + .. image:: /img/guides/duplicate-assessment.png + :alt: Duplicate Assessment \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/edit-assessment-points.rst.txt b/docs/_sources/instructors/authoring/assessments/edit-assessment-points.rst.txt new file mode 100644 index 00000000..56eef98e --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/edit-assessment-points.rst.txt @@ -0,0 +1,15 @@ +.. meta:: + :description: Edit an assessment by clicking on the edit button. + +.. _edit-assessment-points: + +Edit Assessment Points +====================== +To edit assessment points, follow these steps: + +1. In the Guide Editor, click the **Assessments** button to view the list of all assessments. + +2. Click the assessment to open it and modify the points. + + .. image:: /img/assessmentpoints.png + :alt: Edit Assessment Points \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/edit-assessment.rst.txt b/docs/_sources/instructors/authoring/assessments/edit-assessment.rst.txt new file mode 100644 index 00000000..2568e9c5 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/edit-assessment.rst.txt @@ -0,0 +1,19 @@ +.. meta:: + :description: Edit an assessment by clicking on the edit button. + +.. _edit-assessment: + +Edit an Assessment +================== +To edit an assessment, either: + + +1. In the Guide Editor, click the **Edit: ** button to the right of the assessment. + + .. image:: /img/guides/editassessmentbutton.png + :alt: Edit Assessment + +2. Click the **Assessment** button to view the list of all assessments and click the assessment to open it and make your changes. + + .. image:: /img/guides/editassessmentlist.png + :alt: Edit Assessment List \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/fill-in-blanks.rst.txt b/docs/_sources/instructors/authoring/assessments/fill-in-blanks.rst.txt new file mode 100644 index 00000000..c4cba4cf --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/fill-in-blanks.rst.txt @@ -0,0 +1,104 @@ +.. meta:: + :description: Fill in the blanks questions can use either free text or offer options to be chosen from a drop-down list. + +.. _fill-in-blanks: + +Fill in the Blanks +================== +A **Fill in the blank question** can use either free text or offer options to be chosen from a drop-down list: + + - Free Text Answers - Shows a question where the student must complete the missing words (fill in the blank) by entering the answers. + + .. image:: /img/guides/assessments-fitb1.png + :alt: Free Text + + - Drop-Down Answers - The possible answers are available in a drop-down list where the student chooses the correct answer. + + .. image:: /img/guides/assessments-fitb2.png + :alt: Drop-Down + +Follow these steps to set up fill in the blank assessments: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + Toggle the **Show Name** setting to hide the name in the challenge text the student sees. + + - **Instruction** - Enter the instructions to be shown to the students. + +2. Click **Execution** in the navigation pane and complete the following information: + + .. image:: /img/guides/assessment_fitb_exec.png + :alt: Execution + + - **Text** - Enter the question in markdown, including the correct answer specification. For example: + +``A prime number (or a prime) is a <<>> number greater than <<<1>>> that has no positive divisors other than <<<1>>> and <<>>.`` + + + - **Show Possible Values** - Toggle to display possible options for the correct answer: + + - For text-free questions, blank fields are available for the student to enter the correct answer. + - For drop-down questions, all the correct values (anything within the `<<< >>>` chevrons) are provided in each of the answer positions in a randomized order. You can also add incorrect answers (one per line). + + .. image:: /img/guides/distractors.png + :alt: Distractors + + **Regular Expression Support** + + Codio regular expression matching follows the Java language standards. + + Examples of regular expressions supported for blank fields: + + - Answer allows any characters - ``<<>>`` + - Answer starts with word "begin" - ``<<>>`` + - Answer ends with word "end" - ``<<>>`` + - Answer can contain one or more spaces in "this is" - ``<<>>`` + - Answer contains 1 or 2 or 3 - ``<<>>`` + - Answer allows color or colour - ``<<>>`` + - Answer allows yes or "yes" - ``<<<"yes", ""yes"">>>`` + - Answer allows hat or cat - ``<<>>`` + - Answer allows i==0 or i == 0 - ``<<>>`` + - Answer must only contain digits - ``<<>>`` + - Answer must only contain non-digits - ``<<>>`` + - Answer requires word character - ``<<>>`` + - Answer requires non-word character - ``<<>>`` + - Answer allows several answers (Place1 or Place2) - ``<<<"Place1", "Place2">>>`` + - Answer requires case sensitivity - ``<<>>`` or ``<<>>`` + +3. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_fitb_grading.png + :alt: Grading + + - **Points** - Enter the score for correctly answering the question. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **Show Expected Answer** - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting. + + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + + - **Show Rationale to Students** - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + + - **Rationale** - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student's project. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - The **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +6. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +7. Click **Create** to complete the process. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/free-text.rst.txt b/docs/_sources/instructors/authoring/assessments/free-text.rst.txt new file mode 100644 index 00000000..10a9645f --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/free-text.rst.txt @@ -0,0 +1,106 @@ +.. meta:: + :description: Free text assessments allow students to answer questions in their own words. + +.. _free-text: + +Free Text +========= +Free text assessments allow students to answer questions in their own words. Because Free Text assessments allow for LaTeX formatting, this type of assessment is recommended for math assessments. Teachers are then able to review and manually grade their answers. Follow these steps to set up a free text assessment: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_free_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + If you want to hide the name in the challenge text the student sees, toggle the **Show Name** setting to disable it. + + - **Instruction** - Enter the instructions in markdown to be shown to the students. + +2. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_free_grading.png + :alt: Grading + + - **Points** - Enter the score for correctly answering the question. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **Allow Partial Points** - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer. Once you toggle this on, you will be able to add rubric items. Rubric items are negative points, they will be subtracted from the total score of the assessment. + + - **Preview Type** - Choose the input (plaintext or markdown) to be provided by the student. LaTex is also supported and is useful when students need to enter mathematical formulas in their answers. The following options are available: + + - **Plaintext** - Students enter ordinary text with no markdown formatting; there is no preview window. + - **Plaintext + LaTeX** - Students enter plaintext with no markdown formatting but offers support for LaTeX commands. A preview window is available where students can see the rendered LaTeX output. + - **Markdown + LaTeX** - Students enter markdown that also offers support for LaTex commands. A preview window is available where students can see the rendered markdown with LaTeX output. + + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + + - **Show Rationale to Students** - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + + - **Rationale** - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student's project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed. + +3. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +4. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - By default, **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +5. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +6. Click **Create** to complete the process. + +Grading free text assessments +----------------------------- +To review and grade answers given by students in a free text assessment, follow these steps: + +1. Select the assignment to view the list of all assessments in the assignment for the student. + + .. image:: /img/guides/freetext-grading.png + :alt: Free Text Grading + + You can identify the free text assessments by the following icon in the **Type** column: + + .. image:: /img/guides/freetexticon.png + :alt: Free Text Assessments Icon + +2. Click any line to view the question and the answer submitted by the student. + +3. In the **Points** for answer field, perform one of the following depending on whether **Allow Partial Points** was enabled or disabled for the question: + + - If **Allow Partial Points** was disabled, click **Correct** or **Incorrect**: + + .. image:: /img/guides/notpartial.png + :alt: Allow Partial Points Disabled + + - If **Allow Partial Points** was enabled, select the points to give for the answer up to the maximum points: + + .. image:: /img/guides/partial.png + :alt: Allow Partial Points Enabled + +4. In the **Comments** field, enter any information (in markdown + LaTeX) about the grade, which can be viewed by the student when the grade is released, and then click **Submit Comment**. + +Navigate student assessments +............................. +You can navigate through student assessments using the left (**<**) and right (**>**) arrow buttons at the top of the **Assessments grading** dialog. + +.. image:: /img/guides/freetext_navigate.png + :alt: Navigating Assessments + +View graded free text assessments +................................. +You can view the points given and the Correct column checked for all free text assessments that have been graded. + +.. image:: /img/guides/freetextanswer.png + :alt: View Graded Assessment + +Free text assessments that are automatically graded as correct +.............................................................. +You can do this with :ref:`Free Text Autograde `. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/grade-book.rst.txt b/docs/_sources/instructors/authoring/assessments/grade-book.rst.txt new file mode 100644 index 00000000..d3eec04d --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/grade-book.rst.txt @@ -0,0 +1,55 @@ +.. meta:: + :description: The Grade Book assessment type is for manually graded assessments. + +.. _grade-book: + +Grade Book +========== +A Grade Book assessment may be used to manually grade assignments, it will not appear in the student guides. When the instructor opens a student assignment, the Grade Book is available for rubric based grading. Comments, points, and rubric items are visible to the student when the assessment is graded and the grades are released. Grade Book assessments do not show in the total assessment count on student/teacher dashboard. + +1. On the **General** page, enter a short **Name** that describes the test. This name is displayed in the teacher dashboard and when the teacher is viewing the student work. The name should reflect the challenge and thereby be clear when reviewing. + + Leaving the name visible will make it easier to locate when grading and we do not recommend toggling the **Show Name** setting to disable it. + + .. image:: /img/guides/assessment_gradebook_general.png + :alt: General + + +2. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_gradebook_grading.png + :alt: Grading + + - **Points** - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **Allow Partial Points** - Partial points must be toggled on for this type of assessment. Once you toggle this on, you will be able to add rubric items. Rubric items are negative points, they will be subtracted from the total score of the assessment. + + .. image:: /img/guides/assessment_gb_rubric.png + :alt: Rubric + + +3. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - By default, **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +4. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +5. Click **Save** to complete the process. + +The instructor must :ref:`opening a student assignment ` to complete the Grade Book grading. Locate the Grade Book assessment in the student file and click **Grade**. + + .. image:: /img/guides/assessment_gb_opengb.png + :alt: Grade book assessment + +Click on the 0 or 1 to allocate initial points for overall correctness and then use the other rubric items to subtract points for missing items. There is also a **Points adjust** field if you wish to adjust total points upwards. + + .. image:: /img/guides/assessment_gb_grade.png + :alt: Grade book assessment \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/math-assessments.rst.txt b/docs/_sources/instructors/authoring/assessments/math-assessments.rst.txt new file mode 100644 index 00000000..fdb1b6a0 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/math-assessments.rst.txt @@ -0,0 +1,25 @@ +.. meta:: + :description: Codio allows you to set and grade math questions for any type and level of mathematics using the **Free Text** assessment. + +.. _math-assessments: + +Math Assessments +================ + + +Codio allows you to set and grade math questions for any type and level of mathematics using the **Free Text** assessment. We only offer manual grading of mathematical expressions or proofs. + + +Manually graded assessments using free text +******************************************* + +To create a manually graded math question, you can use the **Free text** assessment type. This allows the students to enter expressions or even full proofs and worked answers using Latex. For more information about Latex, please :ref:`click here `. + +You can enter Latex in the **Question** and **Rationale** fields. + +You should also set the **Preview type** drop down to either **Plaintext + Latex** or **Markdown + Latex**. Both of these ensure that the student sees a preview pane beneath their answer entry fully rendered in markdown and/or Latex. Please - :ref:`click here ` to review the free text assessment. + +Multiple choice +*************** + +You can also use the multiple choice assessment type to create answers containing properly rendered Latex expressions. diff --git a/docs/_sources/instructors/authoring/assessments/multiple-choice.rst.txt b/docs/_sources/instructors/authoring/assessments/multiple-choice.rst.txt new file mode 100644 index 00000000..ff5eac91 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/multiple-choice.rst.txt @@ -0,0 +1,66 @@ +.. meta:: + :description: Multiple choice type assessments provide a question and then single or multiple response options. + +.. _multiple-choice: + +Multiple Choice +=============== +Multiple choice type assessments provide a question and then single or multiple response options. Follow these steps to set up multiple choice assessments: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_mc_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + If you want to hide the name in the challenge text the student sees, toggle the **Show Name** setting to disable it. + + - **Question** - Enter the question instruction that is shown to the student. + +2. Click **Execution** in the navigation pane and complete the following information: + + .. image:: /img/guides/assessment_mc_exec.png + :alt: Execution + + - **Shuffle Answers** - Toggle to randomize the order of the answers so each student sees the answers in a different order. + - **Multiple Response** - Toggle to enable a user to select more than one answer. + - **Answers** - Mark the correct answer(s) to the question. You can add as many options as needed. For each answer, toggle to enable as correct answer (for multiple responses), or click the radio button for the correct single response. + - **Ordering** - Use the **Up** and **Down** arrows to change the order in which the answers are presented. + +3. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_mc_grading.png + :alt: Grading + + - **Correct Points** - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **Incorrect Points** is the score to be deducted if the student makes an incorrect selection. Typically, this value will be 0 but you can assign any positive numeric value if you wish to penalize guessing. If this assessment is to be ungraded, set '0' points + + - **Allow Partial Points** - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer. + + - **Show Expected Answer** - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting. + + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + + - **Show Rationale to Students** - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + + - **Rationale** - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student's project. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - The **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +6. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +7. Click **Create** to complete the process. diff --git a/docs/_sources/instructors/authoring/assessments/parameterized.rst.txt b/docs/_sources/instructors/authoring/assessments/parameterized.rst.txt new file mode 100644 index 00000000..bd0fb0f7 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/parameterized.rst.txt @@ -0,0 +1,93 @@ +.. meta:: + :description: Parameterized assessments + +.. _parameterized: + +Parameterized assessments +========================= +For all assessment types except Gradebook and Random, you can generate parameters by writing **python** code on the **PARAMETERS** tab. + + .. image:: /img/guides/parameterized2.png + :alt: Parameterized Assessment + +Parameters tab +************** +The **PARAMETERS** tab has a large built-in code editor to enter **python** code that generates parameters. + + .. image:: /img/guides/ParametersTab.png + :alt: Parameters Tab UI + +On the right-hand side, the **Add Code Example** button will generate 3 lines of code which (1) import the python ``random`` library, (2) declare the ``codio_parameters`` dictionary you will store parameters and their values in, and (3) provide a sample parameter. + +The **Generate Sample Parameters** button on the right-hand side will run the code in the editor and display in the small box below the button a sample set of generated parameters. If there is an error with the code, the box will turn red and the error message will be displayed. + +Creating and using parameters +***************************** +To create a parameter, store a value in the ``codio_parameters`` dictionary. You can then refer to the parameter throughout the assessment within double curly brackets (otherwise known as mustache templating). + + .. image:: /img/guides/paramterSyntax.png + :alt: Syntax for parameters in Codio + +See the first image on this page for an example of creating parameters. Once created, you can then refer to parameters throughout the other fields in your assessment (e.g. instructions on the **General** tab, fields on the **Execution** tab, rationale on the **Grading** tab). + + .. image:: /img/guides/param_instructions2.png + :alt: Parameters in question field + + .. image:: /img/guides/param_execution.png + :alt: Parameters in fields of multiple choice assessment + +Creating parameters from on web-based content +---------------------------------------------- +When parameters are generated, the script in the PARAMETERS tab does **not** have access to the files in the box or on the stack. To pull a random choice from a large dataset, instead of hardcoding the dataset into the script, you can use Github or some other web-based CDN. + +If you choose to use Github, make sure your script has a URL that indicates the **RAW** version of the file which should look similar to: + +.. code:: + + https://raw.githubusercontent.com/github_user_name/repo_name/branch/folder_name/file_name.txt + +To find this URL, find the file through the Github interface and click the **RAW** button: + .. image:: /img/raw_github_button.png + :alt: Raw button in Github interface + +If it is a particularly large file, Github will present you a link instead: + .. image:: /img/raw_github_link.png + :alt: View raw link in Github interface + +Here is an example script: + +.. code:: python + + import random, string + from urllib.request import urlopen + + codio_parameters = dict() + + words_file = urlopen("https://raw.githubusercontent.com/lorenbrichter/Words/master/Words/en.txt") + words = words_file.readlines() + codio_parameters["OUTPUT"] = words[random.randint(0,len(words))-1].decode('utf-8') + + +**Limitations:** + +- We do not advise doing API calls during parameter generation due to the introduction of dependency on another system. +- Parameters are only re-generated on Publish if the PARAMETERS code has been changed. Updating to only the CDN or Github repo will **NOT** re-generate the parameters. + * Best practice is to upload a new file with a new name -- and when you update the file name on the PARAMETERS tab, this will cause the regeneration and ensure clarity on which version of the file the assessment is using. + +Accessing parameters in Auto-grading scripts +******************************************** +When using parameters with assessments executing auto-grading scripts, such as with :ref:`Advanced Code Tests `, you can access parameters from the ``CODIO_PARAMETERS`` environment variable. + +To test your parameterized auto-grading script, you need to do one of the following: + 1. Within the authoring version of the assignment, click **Generate Sample Parameters** on the PARAMETERS tab and **Save** the assessment (even if you made no changes). This creates the ``CODIO_PARAMETERS`` environment variable within your authoring version of the assignment. Then you can simply click the assessment button when :ref:`previewing the Guide `. (Note: ``CODIO_PARAMETERS`` environment variable is only accessible through the assessment, **not** via the command line). + 2. publish your assignment and :ref:`either Preview as a teacher or as a Test Student ` + 3. manually create the ``CODIO_PARAMETERS`` environment variable inside the authoring version of the assignment + +More examples +************* +You can find more examples of parameterized assessments in Codio: + 1. In our `blog post on parameterized assessments`_ + 2. In our `Developing Evergreen Course Materials webinar`_ + +.. _blog post on parameterized assessments: https://www.codio.com/blog/individualized-student-questions-parameterized-assessments +.. _Developing Evergreen Course Materials webinar: https://www.codio.com/on-demand-webinars?wchannelid=rr05s1wyns&wmediaid=igvq1jnlwi diff --git a/docs/_sources/instructors/authoring/assessments/parsons-puzzle.rst.txt b/docs/_sources/instructors/authoring/assessments/parsons-puzzle.rst.txt new file mode 100644 index 00000000..bf7be994 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/parsons-puzzle.rst.txt @@ -0,0 +1,127 @@ +.. meta:: + :description: Parson’s Puzzles are formative assessments that ask students to arrange blocks of scrambled code. + +.. _parsons-puzzle: + +Parsons Puzzle +============== +Parson’s problems are available in Codio as Parsons Puzzles. Parson’s Puzzles are formative assessments that ask students to arrange blocks of scrambled code, allowing them to focus on the purpose and flow of the code (often including a new pattern or feature) instead of syntax. Codio uses `js-parsons `_ for Parson's Puzzles. + +Complete the following steps to set up a **Line Based Grader** Parsons Puzzle assessment. The **Line Based Grader** assessment treats student answers as correct if and only if they match the order and indentation found in **Initial Values**. For incorrect answers, it highlights the lines that were not ordered or indented properly. + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + If you want to hide the name in the challenge text the student sees, toggle the **Show Name** setting to disable it. + + - **Instruction** - Enter the instructions in markdown to be shown to the students. + +2. Click **Execution** in the navigation pane and complete the following information: + + .. image:: /img/guides/assessment_parsons_exec.png + :alt: Execution + + - **Code to Become Blocks** - Enter code blocks that make up the initial state of the puzzle for the students. + - **Code to Become Distractor Blocks** - Enter code blocks that serve as distractions. + - **Max Distractors** - Enter the maximum number of distractors allowed. + - **Grader** - Choose the appropriate grader for the puzzle from the drop-down list. + - **Show Feedback** - Select to show feedback to student and highlight error in the puzzle. Deselect to hide feedback and not show highlight error in the puzzle. + - **Require Dragging** - If you enter **Code to Become Distractor Blocks**, **Require Dragging** will automatically turn on. Without distractor blocks, you can decide whether or not you want students to drag blocks to a separate area to compose their solution. + - **Disable Indentation** - If you do not want to require indention, check the **Disable Indentation** box. + - **Indent Size** - Each indention defaults to 50 pixels. + +3. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_grading.png + :alt: Grading + + - **Points** - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + - **Show Rationale to Students** - Toggle to display the answer, and the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + + - **Rationale** - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student's project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - By default, **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +6. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +7. Click **Create** to complete the process. + + +Grader Options +-------------- + +**VariableCheckGrader** - Executes the code in the order submitted by the student and checks variable values afterwards. + +.. raw:: html + +
+ + +Expected and supported options: + +- ``vartests`` (required) array of variable test objects + + Each variable test object can/must have the following properties: + + - ``initcode`` - code that will be prepended before the learner solution code + - ``code`` - code that will be appended after the learner solution code + - ``message`` (required) - a textual description of the test, shown to learner + +Properties specifying what is tested: + +- ``variables`` - an object with properties for each variable name to be tested; the value of the property is the expected value + + or + +- ``variable`` - a variable name to be tested +- ``expected`` - expected value of the variable after code execution + +**TurtleGrader** - for exercises that draw turtle graphics in Python. Grading is based on comparing the commands executed by the model and student turtle. If the ``executable_code`` option is also specified, the code on each line of that option will be executed instead of the code in the student constructed lines. + + .. Note:: Student code should use the variable ``myTurtle`` for commands to control the turtle in order for the grading to work. + +.. raw:: html + +
+ + Required options: + +- ``turtleModelCode`` - The code constructing the model drawing. The turtle is initialized to modelTurtle variable, so your code should use that variable. The following options are available: + + - ``turtlePenDown`` - A boolean specifying whether or not the pen should be put down initially for the student constructed code + - ``turtleModelCanvas`` - ID of the canvas DOM element where the model solution will be drawn. Defaults to `modelCanvas`. + - ``turtleStudentCanvas`` - ID of the canvas DOM element where student turtle will draw. Defaults to `studentCanvas`. + +**UnitTestGrader** - Executes student code and Skulpt unit tests. This grader is for Python problems where students create functions. Similar to traditional unit tests on code, this grader leverages a unit test framework where you set asserts - meaning this grader checks the functionality of student code. + +.. raw:: html + +
+ +**LanguageTranslationGrader** - Code translating grader where Java or psuedocode blocks map to Python in the background. Selecting the language allows the Parson's problem to check for correct indentation and syntax. + +.. raw:: html + +
+ +Sample Starter Pack +------------------- +There is a Starter Pack project - Demo Guides and Assessments that you can add to your account that includes examples of Parson's Puzzle assessments. If not already loaded to your account (in your **My Projects** area), go to Starter Packs and search for **Demo Guides and Assessments**. diff --git a/docs/_sources/instructors/authoring/assessments/partial-points.rst.txt b/docs/_sources/instructors/authoring/assessments/partial-points.rst.txt new file mode 100644 index 00000000..dd91b6b2 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/partial-points.rst.txt @@ -0,0 +1,148 @@ +.. meta:: + :description: Awarding partial points in your test script. + +.. _partial-points: + +Partial Points +============== +You can award partial points for student assessments in your testing scripts. Use the following Bash and Python grading scripts to enable partial points. You must toggle **Allow Partial Points** on in the **Grading** section of the Advanced Code Test dialog. + + + +Autograding enhancements for partial points +------------------------------------------- +To provide you with more robust auto-grade scripts, you can send back feedback in different formats HTML, Markdown, or plaintext and a URL is passed as an environment variable ```CODIO_PARTIAL_POINTS_V2_URL```. These variables allow POST and GET requests with the following parameters: + + +- **Score** (```CODIO_PARTIAL_POINTS_V2_URL```) - 0-100 percent for assessment, should be a percentage of total points possible. +- **Feedback** - text - this is limited to 1 Mb +- **Format** - html, md, or txt (default) + +If you use Python, you can also use the function ``send_partial_v2``. Also, through HTTP requests you can use any other language you feel comfortable with. + +As a general rule, your script should always exit with ``0``; otherwise, the grade will be 0. If the student receives partial points, the results will display an orange percent sign rather than a green check mark or red x. + +Example auto-grading scripts with partial points +................................................ + +The following examples in Python and JavaScript show how you can write your scripts in any language. + +The Python script parses the student's file and then assigns points based on specific criteria. In the JavaScript version, it uses Unit Testing through Mocha, a popular `node` library and it is invoked with ``mocha 2>&1 || true`` to force the exit code to be 0. + +.. tabs:: + + .. code-tab:: javascript + + const assert = require('assert'); + + const CODIO_PARTIAL_POINTS_V2_URL = process.env.CODIO_PARTIAL_POINTS_V2_URL; + var points = 0; + var total_tests = 2; + var feedback = ""; + + describe('Operations', function () { + describe('Sum', function () { + it('should return 2 for 1 + 1', function () { + assert.equal(1 + 1, 2); + points++; + feedback += "

Test 1 passed!

" + }); + }); + + describe('Multiplication', function () { + it('should return 4 for 2 x 2', function () { + assert.equal(2 * 2, 4); + points++; + feedback += "

Test 2 passed!

" + }); + }); + + after(function () { // Runs once after all tests + if (CODIO_PARTIAL_POINTS_V2_URL) { + percentage = points/total_tests*100 + fetch(CODIO_PARTIAL_POINTS_V2_URL, { + method: 'POST', + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: 'points=' + percentage + '&format=html&feedback=' + feedback, + }) + } + }); + }); + + .. code-tab:: python + :selected: + + import os, requests, random, re, io, subprocess, shutil, sys + from subprocess import Popen, PIPE, STDOUT + + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_partial_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT + + score = 0 + feedback = "" + + # Get student code + + with open('code/quizquestion2.c') as response: + answer = response.read() + + # Check student code + + if re.search('pi.*=.*3.14',answer) and re.search('r.*=.*8',answer): + feedback+="Correct variable initialization.\n" + score+=5 + else: + feedback+="Incorrect variable initialization.\n" + + if re.search('float.*pi',answer) and re.search('float.*r',answer): + feedback+="Correct variable declaration.\n" + score+=5 + else: + feedback+="Incorrect variable declaration.\n" + + # Give final feedback to the student and scale up score to be out of 100 + + feedback+= "

On this question you earned " + str(score) + " out of 10

" + percent = (score/10)*100 + + # Send grades back to Codio + + res = send_partial_v2(percent, feedback, FORMAT_V2_HTML) + exit(0 if res else 1) + + +Example grading script for partial points +----------------------------------------- +These are examples of the older method of partial points reporting. + +.. tabs:: + + .. code-tab:: bash + + POINTS=5 + curl -s "$CODIO_PARTIAL_POINTS_URL&points=${POINTS}" > /dev/null + + .. code-tab:: python + :selected: + + #!/usr/bin/env python + + import random + import sys + # import grade submit function + sys.path.append('/usr/share/codio/assessments') + from lib.grade import send_partial + def main(): + # Execute the test on the student's code + grade = random.randint(10, 50) + + # Send the grade back to Codio + res = send_partial(int(round(grade))) + exit( 0 if res else 1) + + main() + + +The score you award should be any value between 0 and the maximum score you specified when defining the assessment in the Codio authoring editor. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/random.rst.txt b/docs/_sources/instructors/authoring/assessments/random.rst.txt new file mode 100644 index 00000000..2e82b7dd --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/random.rst.txt @@ -0,0 +1,58 @@ +.. meta:: + :description: The Random assessment type is to allow a range of defined assessments from the assessment library to be randomly assigned to students + +.. _random: + +Random Assessment +================= + +The Random assessment type allows you to set up a group of assessments to then randomly assign one to each individual student assignment. Only one random assessment can be included on a page in Guides. + +There is assignment level duplication prevention such that regardless of the query, Codio checks whether the library assessment IDs are unique. This prevents students from seeing the same assessment question multiple times in an assignment, as long as every question in the library is unique, and all randomized assessments are drawn from the same library. +If duplicate assessments are generated, it indicates that the assessment library does not have enough unique assessments for the set of random assessment queries in the assignment. +‌ + +1. On the **General** page, enter the name of your assessment that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + +2. On the **Grading** page, enter the amount of points to assign to the assessment. Enter the score for correctly answering the question they are assigned. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + +3. On the **Execution** page, browse to an assessment library where you can set up filters define the range of assessments to randomly assign. You can work from any assessment library you have access to. + +:ref:`Click here ` for more information on how to use Assessment Libraries. + + +Updating Random assessments +--------------------------- + +If you wish to update, change or review the assessments assigned to the random assessment, select the **Update Search** button on the **Execution** tab and this will open the assessment library field with the saved search parameters. + + .. image:: /img/guides/random-update.png + :alt: Update Random assessment + +You can then review the assesments and publish the assignment if you wish in the usual manner, but if the only changes made are in relation to the random assignment and there are students who may have already started the assignment you should do go to the **Edit** tab and use the **Sync** button. If you have made other changes to the assignment though, publish in the usual manner as well and then go to the **Edit** tab. If students have already started the assignment, the **Sync** button will show + +Publishing/Synchronising changes from the **Course** +---------------------------------------------------- + +If the only changes to a previously published assignment are for the random assessment(s), or if someone else in the organization has updated the assessments being used in the assignment, the changes made can be updated/synchronised from the **Edit** tab in the course. + +A **Sync** button will be shown on the **Edit** tab for the assignment if there are changes that can be updated/synchronised. + + .. image:: /img/guides/random-sync.png + :alt: Synchronise Random assessment + +If there are students that have already started the assignment they will not get the updates/changes unless their assignments is also reset so they will start again 'as new' and any previous work will be lost. + +Pressing the **Sync** button will identify if there are students who have already started and then give you the option to reset and publish or just publish so then only students who have not started the assignment will get the update/changes + +**Synchronising where no students started assignment** + + .. image:: /img/guides/random-sync-nostudents.png + :alt: Synchronise Random assessment no students started + +**Synchronising where students have started assignment** + + .. image:: /img/guides/random-sync-studentsstarted.png + :alt: Synchronise Random assessment students started + + diff --git a/docs/_sources/instructors/authoring/assessments/sense-network.rst.txt b/docs/_sources/instructors/authoring/assessments/sense-network.rst.txt new file mode 100644 index 00000000..35f5fc3b --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/sense-network.rst.txt @@ -0,0 +1,71 @@ +.. meta:: + :description: Sense Network is an AI-based code analysis package to give students feedback on their code submissions. + +.. _sense-network: + +Sense Network +============= + +`Sense.Education `_ is an AI-based code analysis package to give students feedback on their code submissions and is supported in Codio in the **Sense.Network** assessment type. Students can submit their work and can view feedback from Sense. They can then review their code and resubmit if **One Attempt Only** is not enabled. + +To help and track students activity through Sense, you can :ref:`enable a custom script `. + +This assessment type is only visible when the **sense.network** API key is entered on the **Organization > Integrations** page. + +.. image:: /img/guides/org_integrations.png + :alt: Organization Integrations + +Follow these steps to set up a Sense.Network assessment: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_sn_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + If you want to hide the name in the challenge text the student sees, toggle the **Show Name** setting to disable it. + - **Instructions** - Enter the markdown text that is shown to the student. + +2. Click **Execution** in the navigation pane and complete the following information: + + .. image:: /img/guides/assessment_sn_exec.png + :alt: Execution + + - **Pre-exec Command** (Optional) - Enter the command that executes a check to confirm the code is compiling as required. If you store the assessment scripts in the **.guides/secure** folder, they run securely so students cannot see the script or the files in the folder. The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution code: + - **Pre-exec Feedback** (Optional) - Used to show feedback if the **Pre-exec Command** fails; otherwise it shows pre-exec output. + - **Sense Feedback URL** (Required) - Enter the feedback URL used to extract assignment id. + - **Filename** (Optional) - Enter the path to the file to pass. If empty, the currently opened file is sent. + +3. Click **Grading** in the navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_sn_grading.png + :alt: Grading + + - Gradable - Toggle to enable if the asessment is to be used within the grade total for the assignment. If disabled, students can be given feedback on their submission for this assessment without it being graded. + + .. Note:: The **Rationale** does not return anything to the student if the assignment is not gradable. When enabled, each submission overrides any previous submissions for grading purposes. + + - **Points** - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0). + + - **One Attempt Only** - Toggle to enable if you want to restrict the student to only answering the question once. If disabled, students can edit their answer until the assignment is marked as completed. + + - **Show Rationale to Students** - Toggle to enable if you want both the answer and the rationale for the answer to the student. + + - **Rationale** - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student's project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed. + +4. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - By default, **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +5. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +6. Click **Create** to complete the process. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/standard-code-test.rst.txt b/docs/_sources/instructors/authoring/assessments/standard-code-test.rst.txt new file mode 100644 index 00000000..46d43193 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/standard-code-test.rst.txt @@ -0,0 +1,178 @@ +.. meta:: + :description: Using a standard code test, student code is executed and the output is compared to an expected output. + +.. _standard-code-test: + +Standard Code Test +================== +Standard code tests are dialog driven, where you specify input data and the expected output. Codio then executes the student code, supplies the specified input data, and compares the expected output to the student code's actual output. + +.. Note:: **The output (including white space) of all the test cases in your Standard Code test cannot exceed 20,000 characters**. + If your output will exceed this limit, or you need finer control of the tests, you can create custom code tests. See :ref:`Advanced Code Tests ` for more information. + +Codio provides a Starter Pack project that contains examples for all assessment types and a guides authoring cheat sheet. Go to **Starter Packs** and search for **Demo Guides and Assessments** if not already loaded in your **My Projects** area. Click **Use Pack** and then **Create** to install it to your Codio account. + +For more information about adding a Standard Code Test, view this video + +.. raw:: html + +
+ + + +Follow these steps to set up a standard code test: + +1. On the **General** page, enter the following information: + + .. image:: /img/guides/assessment_general.png + :alt: General + + - **Name** - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing. + + Toggle the **Show Name** setting to hide the name in the challenge text the student sees. + + - **Instructions** - Enter text that is shown to the student using optional Markdown formatting. + +2. Click **Execution** in the navigation pane and complete the following information: + + .. image:: /img/guides/assessment_sct_execution.png + :alt: Execution + + .. Note:: If you store the assessment scripts in the **.guides/secure** folder, they run securely and students cannot see the script or the files in the folder. + The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code. + + - **Timeout** - Where you can amend the timeout setting for the code to execute. Arrows will allow you to set max 300 (sec), if you require longer, you can manually enter the timeout period. + + - **Command** - Enter the command that executes the student code. This is usually a run command. If the **Pre-exec command** fails, the **Command** will not run. + + - **Pre-exec command** - Enter the command to execute before each test is run. This is usually a compile command. + + - **Java** + + Compile: javac -cp path/to/file filename.java + + Run: java -cp path/to/file filename + + - **Python** + + Run: python path/to/file/filename.py + + - **C** + + Compile: gcc filename.c -o filename -lm + + Run: ./filename + + - **C++** + + Compile: g++ -o filename filename.cpp + + Run: ./filename + + - **Ruby** + + Run: ruby filename.rb + + - **Bash** + + Run: bash full_path.sh + + - **SQL** + + Codio provides three helper scripts to facilitate running queries on the database your students are modifying. These queries use ODBC to connect to and query the database and it is more strict about spacing than sqlcmd. + + Run: (depending on your version of SQL) + + python .guides/scripts/helper_mssql.py --db_host localhost --db_user SA --db_pass YourPassword --db_name DBNAME + + python .guides/scripts/helper_mysql.py --db_host localhost --db_user root --db_pass YourPassword --db_name DBNAME + + python .guides/scripts/helper_postgres.py --db_host localhost --db_port 5432 --db_user postgres --db_pass YourPassword --db_name DBNAME + + .. Note:: First you must use **Tools > Install Software** to install the appropriate helper script for your database (MSSQL,MySql,PostgreSQL). For example, if you are using MSSQL, you would download the Helper MSSql. + + .. image:: /img/sql-helpers.png + :alt: Install SQL Helper Script + + +3. Click **Grading** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_sct_grading.png + :alt: Grading + + - **Points** - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points. + - **Allow Partial Points** - Toggle to enable partial points, the grade is then based on the percentage of test cases the code passes. See :ref:`Allow Partial Points ` for more information. + - **Case Insensitive** - Toggle to enable a case insensitive output comparison. By default, the comparison is case sensitive. + - **Ignore White Space** - Toggle to enable stripping out any white space characters (carriage return, line feed, tabs, etc.) from both the expected output and the student output. + - **Substring Match** - Toggle to enable substring match when comparing the expected output to the student output. The entire expected output needs to be contiguous in the student output. + - **Add Item to Check** - Click to create another set of input/output fields. + - **Input - Arguments** - Enter the command line arguments that are read by the student code. + + .. image:: /img/guides/std-assessment-args.png + :alt: Input Arguments + + - **Input - Stdin** - Enter data that would be entered manually in the console. For example, Enter your Name:. If using this input method: + + - The input data should have a new line if it would be expected in the actual program execution. + - In the **Output** field, the prompt text that is displayed to the user appears in ``stdout`` and should be reflected in your output field but without the data entered by the user. You do **not** need a new line in the output field between each input prompt as the new line character is part of the user input. + - **Ignore white space** and **Substring match** are recommended options as they make the test more tolerant. The following image shows how to format input and output fields if you are **not** ignoring white space or doing a **Substring match**. Note how the input field only supplied the values to be input, not the prompt itself (which is actually a part of `stdout`). It is important to accurately account for all spaces and carriage returns. + + .. image:: /img/guides/std-assessment-stdin.png + :alt: Input and Output Example + + The following image shows the more tolerant approach with the **Ignore whitespace** option set. In this case everything on its own line for readability. The whitespace characters will be stripped out of both the expected output and the student output at runtime. + + .. image:: /img/guides/std-assessment-stdin-ignore.png + :alt: Ignore Whitespace + + + - **Generate** - Click this button to generate the expected output based on the input you provided in the left half of the box. You need to have the solution code in the code file in order for the output to be generated. If there is already some content in the output box then you will get a pop up asking you if you want to overwrite the existing output. + + - **Check** - Use this to test whether running the solution code, using the optional input, will result in the value in the expected output box. If the test fails an output box will appear below showing the difference between the current output and the expected output. + + + .. image:: /img/guides/assessment_sct_check.png + :alt: Check Test Case + + + - **Check All** - Press to check all test cases at once so you can see how many of them are passed or failed. + + - **Show Error Feedback** - Toggle to enable feedback to students about errors related to the specific test case. + + .. image:: /img/guides/std-assessment-error.png + :alt: Show Error Feedback + + - **Show Expected Answer** - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting. + - **Define Number of Attempts** - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts. + - **Show Rationale to Students** - Toggle to display the answer, and the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from **Never**, **After x attempts**, **If score is greater than or equal to a % of the total** or **Always** + - **Rationale** - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student's project. + +4. Click on the **Parameters** tab if you wish to set up **Parameterized Assessments**. See :ref:`Parameterized Assessments ` for more information. + +5. Click **Metadata** in the left navigation pane and complete the following fields: + + .. image:: /img/guides/assessment_metadata.png + :alt: Metadata + + - **Bloom's Level** - Click the drop-down and choose the level of Bloom's Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment. + - **Learning Objectives** The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be *SWBAT follow the flow of recursive execution*. + - **Tags** - The **Content** and **Programming Language** tags are provided and required. To add another tag, click **Add Tag** and enter the name and values. + +6. Click **Files** in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the **Additional content** list. + + .. image:: /img/guides/assessment_files.png + :alt: Files + +7. Click **Create** to complete the process. + +Output written to a file +------------------------ +If the output of a program is written to a file rather than Standard Output (stdout) you can use the **Command** portion of the execution tab to run a bash command to list out the contents of the file. + +For example if the output is written to a file called ``output.txt``, you would put the following into the **Command**. + +.. code-block:: Bash + + cat output.txt + +In Linux, the command ``cat`` lists out the contents of the file. You can use the **Pre-exec command** to run the student code in this case. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/student-submission.rst.txt b/docs/_sources/instructors/authoring/assessments/student-submission.rst.txt new file mode 100644 index 00000000..9fd0ba20 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/student-submission.rst.txt @@ -0,0 +1,53 @@ +.. meta:: + :description: Student Submission Options + +.. _student-submission: + +Student submission options +========================== +There are two important settings that control + +- the way a student submits individual questions +- the way a student notifies the course instructors that an assignment is completed. + +The submit button +----------------- +By default each assessment has a submit button beneath the assessment. Once pressed, the answer is autograded. + +Each assessment type allows you to define the number of attempts students can make. On the last allowed attempt, the student will be warned that they will not be able to resubmit after that attempt. + +You can suppress the use of submit buttons for Advanced Code Test, Standard Code Test, MCQ, Fill in the Blank, Free Text and Free Text Autograde assessments. You cannot suppress the submit buttons for Parsons Puzzle assessments. + +This feature is handy for exams, students do not need to worry about the effect of pressing the button. They can provide a response and move on to other assessments or pages in the guide. + +To suppress the use of the **Submit** button, go to the **settings** button in the guide and disable **Use submit buttons**. + + .. image:: /img/guides/globalsettings.png + :alt: Global Settings + + +Once the project is marked as complete (see below) all assessment responses are submitted automatically. All students work must be marked as complete either manually or using the automated **Mark as Complete** option on the final deadline. + +Mark as Complete +---------------- +To suppress the student **Mark as complete** action, go to the guide **settings** (see above screenshot) and disable **Use mark as complete**. + +A student can proactively mark an assignment as complete. This can trigger an :ref:`assignment level autograde script ` and it is also displayed in the teacher dashboard for that student. + +The drawback of using the student driven mark as complete option is that once students mark an assignment as complete, they are no longer able to make changes to the assignment, including answering assessments. The advantage is that instructors are able to grade those students' work ahead of a deadline. + +If the project has been marked as completed, students can click on the 'graded' button to access grade feedback. If they wish to view the project, they can click on the name of the project on the left hand side. As the assignment is completed they will not be able to edit anything but can still view the content. + +You can disable your students' ability to **Mark as Complete** entirely and eliminate instances of prematurely marking as complete or forgetting to do so. This means students won't need to request that their assignment be re-enabled if they submitted by mistake or decide they want to change something after marking as complete. + +If you choose to disable your students' ability to mark as complete, you can use one of the following methods to mark assignments as complete: + +- Once the assignment deadline has been reached and you want to start grading student work, :ref:`mark all students' work as complete ` from the assignment actions area. + +- Set an :ref:`end of assignment date ` and specify that once the date is reached, the students' work should be **Marked as Complete** automatically. + + + +Penalty deadlines +----------------- +Another related feature is **Penalty deadlines** which allow you to specify deadlines, before the final grading deadline, where a percentage deduction of the final grade is made. :ref:`Click here ` for more information on managing penalty deadlines. \ No newline at end of file diff --git a/docs/_sources/instructors/authoring/assessments/ungraded-assessments.rst.txt b/docs/_sources/instructors/authoring/assessments/ungraded-assessments.rst.txt new file mode 100644 index 00000000..aea76099 --- /dev/null +++ b/docs/_sources/instructors/authoring/assessments/ungraded-assessments.rst.txt @@ -0,0 +1,9 @@ +.. meta:: + :description: An assessment is not graded if the correct/incorrect points are set to zero (0). + +.. _ungraded-assessments: + +Ungraded Assessments +==================== +As an instructor, you can set up assessments that are not graded. They can be used as a consequence free way to check a student's understanding of the content. The assessment is not graded if the correct/incorrect points are set to zero (0). No points are added or deducted from the student's overall grade for the assignment. + diff --git a/docs/_sources/instructors/authoring/guides/add_media.rst.txt b/docs/_sources/instructors/authoring/guides/add_media.rst.txt new file mode 100644 index 00000000..48d05fb7 --- /dev/null +++ b/docs/_sources/instructors/authoring/guides/add_media.rst.txt @@ -0,0 +1,126 @@ +.. meta:: + :description: Audio, Images and Videos can be added to a Guide page. + +.. _add-media: + +Adding media +============ + +Audio, Images and Videos can be added to a Guide page. + +Audio +***** +Audio files can be added to and played from your project. + +To add Audio: select **Media** icon in the guides editor ribbon where you can define the source audio file along with any actions the should be triggered at specific times during playback. + + + .. image:: /img/guides/ribbon-media.png + :alt: Media + + + +- **Source Name** - select the source file either from `.guides/media` folder if already uploaded to the project or upload directly from your PC and it will be stored in the `.guides/media` folder. +- **Add Action** - specifies actions that are triggered at specific times during playback. The following options are available. + + Open file + Close file + Open Terminal + Close Terminal + Run command + Highlight + Close all tabs + Pause + + +Images +****** +Inserting an image is similar. You can use the **Image** icon in the guides editor ribbon or write in markdown within your content area. Here are some examples. PNG and JPG image types are supported. Note that the 2nd and 3rd examples point to images within your project. + +Store your images in the `.guides/img` folder if you do not want them to be readily accessible to students. + +.. code:: markdown + + ![optional alt tag](http://any-url-you-like.png) + ![](image-in-project-root.jpg) + ![](.guides/img/best-place-for-images.png) + + + +You can drag/drop images from your project file tree into your content. They will automatically contain the correct path. + +For Markdown pages: + +.. code:: markdown + + ![.guides/img/displayimage](.guides/img/displayimage.png) + + +For HTML pages: + +.. code:: html + + ![.guides/img/displayimage](.guides/img/displayimage.png) + + + +Videos +****** + +You can use the **Image** icon in the guides editor ribbon defining the URL to the video or you can manually add to your content. + +Include embedded videos using the standard ` +``` + +Vimeo +----- + + If you wish to embed a Vimeo video, go to the Share option and select **Embed** to obtain the code snippet. + + .. image:: /img/guides/guides_vimeo.png + :alt: Vimeo embed + + + +``` +

Codio - Innovation in Computer Programming Education from Codio on Vimeo.

+``` + +Hyperlinks +********** +Creating a hyperlink on a piece of text is easy. + +.. code:: markdown + + Go to [Google](google.com) to look stuff up. + + + + +iframes +******* + +You can embed content in an iframe using the ` + + + +Creating a Crunch file +---------------------- + +If you want to create your own Crunch files in a Codio project, create a new file of type Crunch by giving it the ``.crunch`` extension. + +A new file is created from either the File menu or by right-clicking on the project name line in the file tree. + +.. image:: /img/new-file.png + :alt: new file + + +Saving changes +-------------- + +All changes are changed automatically, so you don't have to explicitly save. + +Source Code Editing +------------------- + +Editing source code is done by hovering over a line until the popup +button bar appears. + +.. image:: /img/crunch-insert.png + :alt: Crunch Insert + + +If you have not yet added any code, then you should see the button bar already there in the top of the code area. + +Click on the **+** to add a new instruction. + +Instructions +------------ + +Crunch comes with a good base set of instructions. To see the full set of instructions, along with explanations for each one, add a new line as explained above. You can then scroll through the list of available instructions. There is also a complete Lexicon available. Go to **Tools>Lexicon** and select the **Crunch** option to search. + +The following instructions are not available in Little Man Computer and provide a more complete experience. + +- ``BGT`` branch if greater than +- ``BGE`` branch if greater than or equal to +- ``BLT`` branch if less than +- ``BLE`` branch if less than or equal to +- ``BEQ`` branch if equal to +- ``BNE`` branch if not equal to +- ``JMP`` jump to a label +- ``PSH`` push accumulator onto a stack +- ``POP`` pop accumulator off the stack +- ``MUL`` multiply the accumulator by a literal value of a value stored + in a memory location +- ``INC`` increment the accumulator by 1 +- ``DEC`` decrement the accumulator by 1 + +You can access the full instruction list from the dropdown when you add a new instruction or you can simply type the instruction mnemonic (3 letter instruction) and press enter. + +Adding labels +------------- + +Instructions such as ``BEQ``, ``BNE``, ``BLT``, ``BLE``, ``BGT``, ``BGE``, ``JMP`` require that you jump to a specific label if the condition is met. You can add such a label by pressing the add label button from the floating toolbar. + +.. figure:: /img/crunch-label.png + :alt: Crunch Label + + +Enter a label name that can be used as a target for the above listed instructions. + +Comments +-------- + +If you want to add comments to your code, click the comment button, circled below, and you can add a comment description into the code. + +.. figure:: /img/crunch-comment.png + :alt: Crunch Comment + + +Selecting lines of code - deleting or moving +-------------------------------------------- + +If you want to select one or more lines of code (to delete or move to another location) then you should do the following + +- click on a line you want to select but make sure you click away from a field that requires input +- to select more multiple lines, then press the shift key and click on another line in order that all lines between the first line and this line are selected. You should then see the multiple lines highlighted. + +Once you have the one or more lines selected, you can either delete all lines (by pressing delete from the toolbar on the right) or by dragging the selected lines to the required destination. + +Running your code +----------------- + +Step / debug mode +***************** + +One very nice way of running your code is to step through it line by line so you can see how it executes at your own pace. To do this, press the **Step** button on the right hand side. It will immediately start executing. + +At any time, you can press the **Run** button to run to completion at full speed. + +.. figure:: /img/crunch-step.png + :alt: Crunch stepping + + +Run mode +******** + +This runs your program at full speed. + +Output window +~~~~~~~~~~~~~ + +All output is written to the output window at the bottom of the screen, which is scrollable. + +Stack contents +-------------- + +If you push the accumulator to the stack using the ``PSH`` command, the stack content is displayed in a scrollable window within the display below the code window. As you ``POP`` items off the stack, you will see the topmost item being removed. + +Undo & redo +----------- + +You can undo and redo changes using the buttons on the right hand side. diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/flode.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/flode.rst.txt new file mode 100644 index 00000000..defa077b --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/flode.rst.txt @@ -0,0 +1,94 @@ +.. meta:: + :description: A modern, full-featured alternative to Little Man Computer + +.. _flode: + +Flode +====== + +Flode is a flowcharting application, using Javascript as its engine, that allows you to: + +- create annotated flowcharts +- execute flowcharts +- write proper code expressions, including decisions, in chart elements +- integrate a debugger +- export charts as images for project write-ups +- input and output elements so automated tests can auto-grade charts + + .. image:: /img/flode.png + :alt: flode + +.. Warning:: :ref:`Pair Programming ` should not be used for Flode assignments. + +Creating and editing a new Flode file +************************************* + +If you want to create Flode charts in your content, start by creating either a new project or assignment in your course. You can use any stack. + +Once inside a project, to create a new flowchart, simply create a new file with the extension ``.flode``. A new Flode window will appear and you can start creating and editing your chart. + +A new file is created from either the File menu or by right-clicking on the project name line in the file tree. + +To edit an existing ``.flode`` file, simply click on the file name to open the Flode editor. + +Dragging in blocks +****************** + +- Drag from the top toolbar into the chart. + +Connecting blocks with lines +**************************** + +- Hover over a block to see the connection points +- Move the mouse over one of the small connection point circles +- Click and drag with the mouse to start creating the line +- Release the mouse to move in another direction then click to change direction again or connect to another connection point + +Resizing blocks +*************** + +- Click on a block then drag a highlighted point + +Zooming & centering your chart +****************************** + +- Zoom controls are in the toolbar or using the mouse wheel if you have one + +Multi selection +*************** + +- Press the shift key then drag the mouse to surround blocks to multi-select +- Select one block then press the shift key then start dragging the mouse + +Aligning blocks +*************** + +- Multi select the blocks to align +- Right click and select one of the alignment options + +Undo & Redo +*********** + +- Undo ``Ctrl+Z`` (PC) ``Cmd+Z`` (Mac) +- Redo ``Shift+Ctrl+Z`` (PC) ``Shift+Cmd+Z`` (Mac) + +Adding comments +*************** + +- Click on a block then press the speech bubble icon to add a comment. + +Video overview +************** + +.. raw:: html + +
+
+ +
+
+ +Credits +******* + +Many thanks to the folks at `JGraph `__ for their flowcharting and diagramming tools. diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/jeroo.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/jeroo.rst.txt new file mode 100644 index 00000000..e44df10a --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/jeroo.rst.txt @@ -0,0 +1,38 @@ +.. meta:: + :description: A tool for learning Object-Oriented Programming + +.. _jeroo: + +Jeroo +===== + +Jeroo is now available in Codio as a :ref:`Stack `. + +|jeroo| + +.. Warning:: :ref:`Pair Programming ` should not be used for Jeroo assignments. + +With :ref:`Codio guides ` you can provide instructions for an assignment side-by-side with the Jeroo environment. + +Start by creating either a new project or assignment in your course, selecting the **Jeroo** stack. + +When created, select **File > New** from the Codio menu and create a file with an **.jev** suffix for a map file or **.jsc** for a program file. + +You can set up your Guide to :ref:`automatically open ` files you want your students to use. If you don't want the guide to take up screen space, you can set it up to :ref:`collapse on open ` or students can simply click on the files in the file tree for them to open in Jeroo. + +Jeroo files are **not saved automatically**, you must select **File > Save** to save your work. + +For more information on Jeroo, `click here `__. + +.. |jeroo| image:: /img/jeroo.png + :alt: Jeroo + +Starter Pack +------------ +We have a **Hello Jeroo in Codio** Starter Pack to help you get started. + +You can find this by either searching for "jeroo" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/lexikon.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/lexikon.rst.txt new file mode 100644 index 00000000..86acc086 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/lexikon.rst.txt @@ -0,0 +1,40 @@ +.. meta:: + :description: Lexikon + +.. _lexikon1: + +Lexikon +======= + +The Codio Lexikon is an integrated help system that lets users lookup information on a variety of languages and topics quickly and easily. Having access to concise reference information as new topics are learned is extremely useful and saves having to search the web and separate the wheat from the chaff! + +The Lexikon is organized into Topics. We currently have added: + +- Crunch +- CSS +- HTML +- Javascript +- Linux +- CyberSecurity + +However, we can easily add coverage for any other Topic. If you are interested in additional topics, please email help@codio.com. + +.. figure:: /img/lexicon.png + :alt: Lexikon + +Using the Lexikon with guide content +------------------------------------ + +To make accessing the Lexikon from your content even easier, we have a Global Option in the Guide settings that lets you specify the default topic to select. If you use this option, an icon will appear in the toolbar that will load the Lexikon window with the selected topic automatically selected. + +Click the **Settings** button, then select the **Global** tab. You can then specify the Topic name in the available field. + +To see what topics are available, bring up the Lexikon from the Tools menu. The available topics are shown in the dropdown list. + +Once you have specified a Lexikon topic, the student will see an icon in the Guide toolbar. When they press this, the Lexikon will appear in the same panel as the Guide with the correct topic automatically selected. + +.. figure:: /img/guides/lexicon.png + :alt: Lexikon Guides + + + diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/pencilcode.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/pencilcode.rst.txt new file mode 100644 index 00000000..873212b8 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/pencilcode.rst.txt @@ -0,0 +1,38 @@ +.. meta:: + :description: A tool for drawing art, playing music, and creating games + +.. _pencilcode: + +Pencil Code +=========== + +Pencil Code is now available in Codio installing from **Tools->Install Software** + +|pencilcode| + +.. Warning:: :ref:`Pair Programming ` should not be used for Pencil Code assignments. + +With :ref:`Codio guides ` you can provide instructions for an assignment side-by-side with the Pencil Code environment. + +Start by creating either a new project or assignment in your course and selecting the **Pencilcode Alpha** stack. + +To create an empty Pencil Code project in Codio, select **File > New** from the Codio menu and create a file with an **.pencilcode** suffix. + +You can set up your Guide to :ref:`automatically open ` files you want your students to use. If you don't want the guide to take up screen space, you can set it up to `collapse on open `__ or students can simply click on the files in the file tree for them to open in Pencil Code. + + +For more information on Pencil Code, `click here `__. + + +.. |pencilcode| image:: /img/pencilcode.png + :alt: Pencil Code + +Starter Pack +------------ + +We have a **Hello Pencil Code in Codio** Starter Pack to help you get started. + +You can find this by either searching for "pencilcode" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/processing-and-p5.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/processing-and-p5.rst.txt new file mode 100644 index 00000000..27a7d04b --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/processing-and-p5.rst.txt @@ -0,0 +1,32 @@ +.. meta:: + :description: Turtle graphics setup & usage + +.. _processing-and-p5: + +Processing and p5 +================= + +**Processing** has cultivated a passionate following among the visual arts and education communities over the last sixteen years. Processing is based on Java but simplifies the syntax by not requiring that everything be an object. Some educators use Processing as a gradual introduction to Java. Students can focus on syntax and types while not having to worry about objects and methods. Also, Processing’s output is visual in nature. This makes the language well-suited for beginners. + +**p5** is a JavaScript library for creative coding that focuses on making coding accessible for beginners, artists, designers, etc. **p5.js** has a full set of drawing functionality and more. + + .. image:: /img/process.png + :alt: p5 example + +.. Warning:: :ref:`Pair Programming ` should not be used for Processing/p5 assignments. + +We have a two starter packs available to help you get started: + +1. **Hello Processing/p5 in Codio Starter Pack:** You can find this by either searching for "processing/p5" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + +2. **Processing Demo Starter Pack:** You can find this by either searching for "processing" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + +**Processing is also available in Codio as a Stack:** +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ \ No newline at end of file diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/pyret.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/pyret.rst.txt new file mode 100644 index 00000000..66425eb3 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/pyret.rst.txt @@ -0,0 +1,27 @@ +.. meta:: + :description: A programming language designed to serve as an outstanding choice for programming education while exploring the confluence of scripting and functional programming. + +.. _pyret: + +Pyret +===== + +Pyret is now available in Codio. + +|pyret| + +.. Warning:: :ref:`Pair Programming ` should not be used for Pyret assignments. + +With :ref:`Codio guides ` you can provide instructions for an assignment side-by-side with the Pyret environment. + + +To create an empty Pyret project in Codio, select **File > New** from the Codio menu and create a file with an **.arr** suffix. + +You can set up your Guide to :ref:`automatically open ` files you want your students to use. If you don't want the guide to take up screen space, you can set it up to `collapse on open `__ or students can simply click on the files in the file tree for them to open in Pyret. + + +For more information on Pyret, `click here `__. + + +.. |pyret| image:: /img/pyret.png + :alt: Pyret \ No newline at end of file diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/scratch.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/scratch.rst.txt new file mode 100644 index 00000000..f1c994bd --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/scratch.rst.txt @@ -0,0 +1,49 @@ +.. meta:: + :description: Create your own interactive stories, games, and animations + +.. _scratch: + +Scratch +======= + + +The desktop version of Scratch is available in Codio. This version of Scratch has all the features of the online version but because it is the standalone version, students won’t be able to view or comment on Scratch community projects. + +.. Warning:: :ref:`Pair Programming ` should not be used for Scratch assignments. + +With :ref:`Codio guides ` you can provide instructions for an assignment side-by-side with the Scratch development environment. + +|firstproject-small| + +To create an empty Scratch project in Codio, select **File > New** from the Codio menu and create a file with an .sb3 suffix. You can set up +your Guide to :ref:`automatically open ` the Scratch file you want your students to use. If you don't want the guide to take up screen +space, you can set it up to :ref:`collapse on open `. + +To use a project you have already created on the web version of Scratch, open the project in Scratch and select **File > Save to your computer** then in Codio select **File > Upload** and open the Scratch file you downloaded. + +Scratch files are saved automatically. + +Get started by clicking on **Tutorials** in the Scratch menu area. For more information see `Scratch `__. + +.. _scratchbackpack: + +Scratch Backpack +---------------- + +The `Scratch Backpack `__ may be used to store sprites or blocks of code that can then used in other Scratch files or other projects. There is a size limit of 30Mb for each item added to the backpack. + + .. image:: /img/backpack.png + :alt: Scratch Backpack + +Starter Pack +~~~~~~~~~~~~ + +We also have a **Hello Codio in Scratch** Starter Pack to help you get started. + +You can find this by either searching for 'Scratch' in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + +.. |firstproject-small| image:: /img/firstproject-small.png + :alt: first project diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/tkinter.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/tkinter.rst.txt new file mode 100644 index 00000000..c4866aa6 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/tkinter.rst.txt @@ -0,0 +1,144 @@ +.. meta:: + :description: Tkinter setup & usage + +.. _tkinter: + +Tkinter +======= + +**Important:** Tkinter is used to build User Interfaces for Python development. For those following the OCR GCSE, this is not a requirement. For more advanced students, we recommend that you use HTML, CSS and Javascript for building modern front-end UIs that have far superior workplace relevance than Python+Tkinter. + +There are a number of teachers who use the Tkinter UI library for Python. Tkinter normally relies on a local PC with a graphics card. Codio, being Cloud based, does not not have graphics cards. Nevertheless, we have implemented a fully functional solution that works within a browser and in the Cloud. + +This page describes the various ways you can get Tkinter up and running. + +- **Starter Pack : Clean** - gives you a clean Tkinter project with preconfigured menu buttons for running your Python file and the viewer. +- **Starter Pack : Widgets** - gives you a set of demo widgets you can play with. +- **Stack** - gives you an empty project with tkinter ready to run. +- **From scratch** - describes how to make any existing Codio project ready to run Tkinter that was not initially set up to run Tkinter. + +Starter Pack : Clean +-------------------- + +Perhaps the best place for most users to start is the `TKinter Clean `__ Starter Pack. This gives you a clean project with a simple demo Python file to play with. + +Here is a video that runs you through the entire process. + +.. raw:: html + +
+
+ +
+
+ +From the main dashboard, select **Starter Packs** on the left, then the Certified tab at the top of the main page. + +|Tkinter Pack| + +Search for **tkinter** in the search field then select the **TKinter Clean** pack as shown above. You will be taken to the new project screen where you can enter a name for your project. Finally, press the **Create** button at the bottom of the page and a new project will be created. + +Once it is loaded, follow these steps to see the demo file working. + +#. Open up ``demo.py`` in the file tree. +#. In the Codio menu, press the **Start Current** button (the one with the rocket icon next to it). This will run your Python file. It opens a new terminal window, which you should leave open. +#. The right most Codio menu item should be **Viewer**. Press this to run the viewer. It will take a few seconds to load. + +If you change your Python code, you will need to close the terminal window and then press the **Start Current** button again to reload it. You do not need to reload the Viewer, which will automatically reconnect when you rerun your Python file. + +Starter Pack - Widgets +---------------------- + +This gives you a complete set of demo widgets. From the main dashboard, select **Starter Packs** on the left, then the Certified tab at the top of the main page. + +|Tkinter Widgets| + +Search for **tkinter** in the search field then select the `TKinter Widgets `__ pack as shown above. You will be taken to the new project screen where you can enter a name for your project. Finally, press the **Create** button at the bottom of the page and a new project will be created. + +TKinter Widgets +=============== + +This Pack contains a set of widget demo files that you can play with. + +Once your project opens, you can quickly play with this in one of 2 ways using the **Rocket** menu item. This is the Codio menu item with a rocket next to it. + +Full Widget Demo +---------------- + +- In the Codio menu, select 'Start widget.py’. +- From the neighbouring menu item, press **View widget demo**. + +Individual python file +---------------------- + +- Open a python file in the file tree. +- From the neighbouring menu item, press **View widget demo**. + +Stack +----- + +If you want to create a completely empty Codio project that is Tkinter ready, then go to the Stacks menu item in the main dashboard. + +#. Click on the Certified tab at the top +#. then search for **tkinter** +#. Finally, select the stack +#. after which you will be taken to the new project screen. Enter a project name then press the **Create** button at the bottom of the page and a new project will be created. + +|Tkinter Stack| + +This Stack will not give you any preconfigured buttons (see the above **Starter Pack: Clean** for this). You can now create your Python files and run Tkinter. Here are some tips on how to do this. + +Running the Python file +======================= + +To run a Python file you will need to use the Terminal or configure you own Codio button shortcut. To use the terminal, open a new Terminal from the **Tools->Terminal** menu item. Then make sure you are in the correct folder and type ``python3 mypythonfile.py``. + +Once this is running, do not close the terminal window or you will terminate the Python process. Go to the right most Codio menu and from the dropdown, select **Box URL**. This will open up the viewer. + +For information on how to set up your own Codio menu buttons, :ref:`click here `. + +From scratch +------------ + +For those of you who want to add Tkinter support to an existing Codio project, you should follow the steps below. Adding the XServer component will add support for any application that writes to the screen. + +|Xserver| + +- Open the Install Software screen from the **Tools->Install Software** menu. +- Type ``x server`` into the search box. +- Press the **Install** button to install the XServer component. +- When the installation has completed (This can take some time, so be patient), :ref:`Restart ` the box + +We would recommend that you configure your ``.codio`` file to have an option to start the viewer. This is :ref:`described here `. You should either overwrite the entire contents of this file with the content shown below, or if you already have a ``.codio`` file with contents you want to keep, just add the line with the **Viewer** entry you can see below into the ``preview`` section. + +.. code:: ini + + { + // Configure your Run and Preview buttons here. + + // Run button configuration + "commands": { + :: + + "Start Current": "python3 {{filename}}" + + }, + + // Preview button configuration + "preview": { + :: + + "Viewer": "https://{{domain}}:9500/" + + } + } + + +.. |Tkinter Pack| image:: /img/tkinter-pack.png + :alt: Tkinter Pack +.. |Tkinter Widgets| image:: /img/tkinter-pack.png + :alt: Tkinter Widgets +.. |Tkinter Stack| image:: /img/tkinter-stack.png + :alt: Tkinter Stack +.. |Xserver| image:: /img/xserver-install.png + :alt: Xserver Install diff --git a/docs/_sources/instructors/setupcourses/resources/resourcetools/turtle.rst.txt b/docs/_sources/instructors/setupcourses/resources/resourcetools/turtle.rst.txt new file mode 100644 index 00000000..f6380012 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/resources/resourcetools/turtle.rst.txt @@ -0,0 +1,94 @@ +.. meta:: + :description: Turtle graphics setup & usage + +.. _turtle: + +Turtle +====== + +With Turtle Graphics, students can produce animations and graphical output. Lines are drawn following the turtle movement. + + .. image:: /img/turtlepreview.png + :alt: turtle graphics + +In Python +********* + +Starter Pack +------------ +We have a Turtle Graphics in Python Starter Pack to help you get started. + +You can find this by either searching for "turtle" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + +Manual Set up +------------- +Turtle is pre-installed in the Python library, so manual installation is simple: + +1. Start by creating either a new project or assignment in your course and selecting the **Python Trajectory Stack**. + +2. Select **Tools** at the top and click **Install software.** Search for **X server** and select install. + +3. Once the software has downloaded, go to **Project > Restart Box** in the menu. + +4. Create two files: + +- ``.py``: This is the student code file. +- ``bg.sh``: This is the bash script. + +4. Within the ``bg.sh`` file, write the following bash script: + +.. code:: bash + + #!/bin/bash + set -e + set -o pipefail + . /etc/profile.d/codio-xserver.sh + $1 -m py_compile $2 + nohup $@ > /dev/null 2>&1& + +5. Set up your page panels by selecting the **settings wrench** from inside your Guide Editor. Select 3-panels without tree, and then navigate to **Open Tabs.** + +6. Under **Open Tabs,** drag in your ``.py`` file and position it in panel 0. + +7. Press the **Add Tab** button and specify the type as **Preview.** Paste the following in the URL field: ``https://{{domain3050}}/`` Position this in panel 1. + +8. Select **Save and close settings.** + +9. The last thing you need to do is set up a **Try It** button so that once code is written in the code file, it can be executed in the server. In the Guide Editor, write the following: ``{Try it}(bash .guides/bg.sh python3 file.py)`` + + .. Note:: You need to import the turtle library with ``import turtle`` as the first line of your code and end your code by calling ``turtle.mainloop()``. + +10. Turtle automatically chooses the window position. To configure your own behavior create `turtle.cfg` file in the working directory with content defines window position. + +Example: + +.. code:: cfg + + leftright=0 + topbottom=0 + width=1.0 + height=1.0 + + +In Java +******* + +We have a Turtle Graphics in Java Starter Pack to help you get started. + +You can find this by either searching for "turtle" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ + +In C++ +****** + +We have a Turtle Graphics in C++ Starter Pack to help you get started. + +You can find this by either searching for "turtle" in the starter pack area or: + +- For Codio.com users, `click here `__ +- For Codio.co.uk users, `click here `__ diff --git a/docs/_sources/instructors/setupcourses/search-course.rst.txt b/docs/_sources/instructors/setupcourses/search-course.rst.txt new file mode 100644 index 00000000..3127f5d7 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/search-course.rst.txt @@ -0,0 +1,42 @@ +.. meta:: + :description: You can set the sort order for your courses within their designated group. You can order your courses according to searches and save that as a tab. + + +.. _search-courses: + +Search and Order Courses +======================== +Courses are displayed in groups based on their creation date. The most recent course is displayed first. Courses are grouped as follows: + +- Sep-Dec - Autumn +- Jan-May - Spring +- Jun-Aug - Summer + +.. Note:: The season dividers can be turned off for the organization if required. See :ref:`Set Users Dashboard ` + +**My** and **All** tabs +----------------------- + +The **My** tab will show all courses in which you are a **Teacher**. This can be useful where you are in the **Owners** group and do not wish to see all the courses in the organization. + +If you wish to see all the courses in the organization go to the **All** tab. + +Sort courses +------------ +You can sort the courses within the group by Name, Created Date, Student Count, or Start Date. + +.. image:: /img/manage_classes/orderclass.png + :alt: Sort Courses + +Search course +------------- +If you have a large number of courses, you can search by Name, Created Date, Student Count, or Start Date. Choose the sort option and then simply start typing your search criteria in the **Search** box. Codio searches all course names and filters your list accordingly. + +.. image:: /img/manage_classes/nameclass.png + :alt: Search + +You can use this feature to more easily view just courses you teach. Search for your username and **Add as Tab** as described below. + +Add as Tab +---------- +To save your search parameters as a tab, click **Add as Tab**. Your search is then saved as a tab so you can quickly perform the same search again. diff --git a/docs/_sources/instructors/setupcourses/share-course.rst.txt b/docs/_sources/instructors/setupcourses/share-course.rst.txt new file mode 100644 index 00000000..e6f02cc9 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/share-course.rst.txt @@ -0,0 +1,40 @@ +.. meta:: + :description: Instructions for sharing your course with others. + + +.. _share-course: + +Share Course +============ + +To share your course with others, follow these steps: + +1. On the **Courses** page, select the course and then click the **Course Details** tab. + +2. In the **Course Management** section, toggle the **Course share code** button to **On** and a code is generated. + + .. image:: /img/manage_classes/createsharecode.png + :alt: Create Share Code + +3. Click the **Copy to Clipboard** icon next to the code to share it with others. + +To manage access to the course code, toggle the **Course share** code button to **Off** after you have shared the code, or click **Regenerate** to create a new code. When you regenerate a new code, the old code is disabled and can no longer be used. + + +When enabled you can also manage IP Consent by clicking the **Manage IP Consent** link offered. + +.. image:: /img/manage_classes/course-ipconsent.png + :alt: Manage IP consent + + +You should first create the content that you wish to display. You enter your text in the lower portion of the screen. You can use markdown or HTML to format your text. If you are not familiar with markdown, here is a reference for markdown: + +- `Daring Fireball `_ - the author of markdown + +Press the **Save Draft** button to save your changes and continue editing later. + +You can also **Preview** your changes to see how the rendered output appears. + +When you are happy you can then publish and then **enable IP consent** that will then require teachers to accept your terms + + diff --git a/docs/_sources/instructors/setupcourses/view-student-username.rst.txt b/docs/_sources/instructors/setupcourses/view-student-username.rst.txt new file mode 100644 index 00000000..b8502293 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/view-student-username.rst.txt @@ -0,0 +1,17 @@ +.. meta:: + :description: Find a student's username. Students can log into Codio using an email address or a username. + + +.. _student-username: + +View Student Usernames +====================== + +Students can log in with their username if they can't remember their email address. If they have forgotten their username, organization owners can find their username on the Members tab on the Organization dashboard. + +1. Click your profile icon in the lower left corner of the screen. +2. Under **Organizations**, click the link for the organization you want to view. +3. On the **Members** tab, click **Students** and find the student's name in the list. +4. Provide the student with their username. + +Alternatively, you can obtain the student's username from the browser when you access the students assignments. diff --git a/docs/_sources/instructors/setupcourses/virtualmachine.rst.txt b/docs/_sources/instructors/setupcourses/virtualmachine.rst.txt new file mode 100644 index 00000000..817c8d22 --- /dev/null +++ b/docs/_sources/instructors/setupcourses/virtualmachine.rst.txt @@ -0,0 +1,216 @@ +.. meta:: + :description: Instructions for using Computed VMs. + + +.. _virtualmachine: + +Virtual Machines +================ + +Codio supports Windows and Ubuntu OS in **Virtual Machine** boxes. To enable this for your organization, send an email to help@codio.com with approximate details of the number of students who will require access to computed VMs. + +.. Note:: Codio is not responsible for licensing issues in regard to any software you install to use. + +The virtual machines can support 1, 4, 8 or 16Gb memory. VM's are enabled for the organization and then set up at the **Course** level. All assignments in the course can utilize the virtual machines boxes, so we would recommend setting up a new course for those assignments that require them. All assignments in the course would use the same **VM Stack**. + + +Virtual machines are not available for individual projects (ie when created in **My Projects** area). + + **Please note:** we have plans to develop this feature in the future but if you have ideas/suggestions please raise in our `Feedback area `_ + + +When virtual machines have been enabled for your organization, follow these steps: + +Enabling VM for the Course +************************** + +- On the **Courses** page, select the course and then click the **Course Details** tab. + +- In the **Virtual Machine** section, toggle the **Enable Virtual Machine** button to **On**. + +- Select **Operating System** (currently supported: Windows & Ubuntu). + +- Select **Memory** to allocate the memory required. + +- Select **Stack** - select either **Windows Codio Ami** or **Ubuntu Codio Ami** depending on the OS type selected above but once you have published your own VM Stack (see below), you will be able to select those as required. + +- Save the changes. + +Setting up the assignment(s) +**************************** + +- Create an assignment and open the working copy in the usual manner. + +- Go to **Tools>Virtual Machine** to open the VM. If using **Ubuntu** OS you can use **open ssh** to open the same instance of the main ubuntu vm if you'd prefer to install/set up your VM that way. You can have both options active at the same time. + +.. Note:: It takes some time for the VM to activate and start. + +- Once the VM has started you can setup or install any items you need. If using **Ubuntu** OS you can also use **Tools>Virtual Machine>open ssh** to be able to open the same instance of the main ubuntu vm if you'd prefer to install/set up your VM that way. You can have both options active at the same time + +- Once you have completed setting up your environment and tested everything select **Tools>Virtual Machine>Publish** from the menu to publish the changes as an updated VM stack assignment providing your own name for the VM Stack. + +.. Note:: It can take around 10 minutes for the new stack to be created and available for use. + +- When the stack has been fully published go to **Courses>Virtual Machine>Stack** and select the newly published stack to make it available to students for their assignment(s). + +- Save the changes. + +- Return to the assignment in **Edit Assignments** and publish the assignment either from the publish button in the upper right corner or from **Education>Publish Assignment** to make the assignment accessible to your students. + +.. Note:: Publishing the assignment should be done as the last step to avoid students starting the assignments before the required VM Stack is saved to the course. + +Updating the VM Stack after students have started the assignment(s) +******************************************************************* + +Students that have already started working before a new/updated VM stack has been published will need to reset the Virtual Machine in their assignment(s) to use the updated VM stack, restart the VM if it does not restart itself. There are buttons available for this purpose in the VM tab. + +.. Note:: Reset and restart for students can take a substantial period of time (around 20mins on average) so we recommend that you fully test the VM stack you create before making it available to students. + +Updating the assignment content after initial publish +***************************************************** + +Any changes to the actual assignment (ie in Guides or the file structure) only require the assignment to be published in the usual manner either from the publish button in the upper right corner or from **Education>Publish Assignment** menu item.. + +Automatically starting/opening Virtual Machine +********************************************** + +You can automatically start/open the **Virtual Machine** for students using :ref:`Open tab ` setting for **VM** or direct them to **Tools>Virtual Machine>Open** to start themselves. + +Pair Programming +**************** + +:ref:`Pair Programming ` is not supported for **Virtual Machines**. + + +.. _interactwithguides: + +Interacting with guides and Codio file system +********************************************* + +You can interact with Virtual Machine using commands that can run from the :ref:`Terminal ` + +.. figure:: /img/vm-commands.png + :alt: VM Commands + +or from a :ref:`Custom Guide Button` + +.. code:: ini + + {Try it | terminal}(codio-vm help) + + +The working directories for: + +- Codio - "/home/codio/workspace" +- Windows Virtual Machine - "C:\\" +- Ubuntu Virtual Machine - "/home/ubuntu" + +Following are some example of commands that can be used to interact with Virtual Machine: + +- **codio-vm help** - This command gives you a brief introduction about many commands that can be used to interact with Virtual Machine. + +- **codio-vm upload** - This command is used to upload a file from Codio filetree to Virtual Machine. + + Windows example: + + .. code:: ini + + codio-vm upload "/home/codio/workspace/local_file.sh" "C:\remote_file.sh" + + Running above command will upload ‘local_file.sh’ file present in your Codio filetree into the Virtual Machine as ‘remote_file.sh’. + + Same Command in Ubuntu would be: + + .. code:: ini + + codio-vm upload "/home/codio/workspace/local_file.sh" "/home/ubuntu/remote_file.sh" + + + Similar to file, you can also upload the Folder + + In Windows: + + .. code:: ini + + codio-vm upload "/home/codio/workspace/local_folder" "C:\remote_folder" + + + In Ubuntu: + + .. code:: ini + + codio-vm upload "/home/codio/workspace/local_folder" "/home/ubuntu/remote_folder" + + +- **codio-vm download** - This command is used to download a file from Virtual Machine into your Codio filetree. + + Windows example: + + .. code:: ini + + codio-vm download "C:\remote_file.sh" "/home/codio/workspace/local_file.sh" + + + Running above command will download ‘remote_file.sh’ file from your Virtual Machine into your Codio filetree and saves it as ‘local_file.sh’. + + Same Command in Ubuntu would be: + + .. code:: ini + + codio-vm download "/home/ubuntu/remote_file.sh" "/home/codio/workspace/local_file.sh" + + + Similar to file, you can also download the Folder from your Virtual Machine + + In Windows: + + .. code:: ini + + codio-vm download "C:\remote_folder" /home/codio/workspace/local_folder" + + + In Ubuntu: + + .. code:: ini + + codio-vm download "/home/ubuntu/remote_folder" /home/codio/workspace/local_folder" + +- **codio-vm start** - This command is used to start the Virtual Machine. + +- **codio-vm restart** - This command is used to restart the Virtual Machine. + +- **codio-vm terminate** - This command is used to reset the Virtual Machine. + +- **codio-vm status** - This command will return the current state of Virtual Machine. The returned value will be one of RUNNING, INACTIVE, STARTING, STOPPING. + +- **codio-vm get-ip** - This command will return the IP address of Virtual Machine. + +- **codio-vm get-host-name** - This command will return the Host Name of Virtual Machine. + +- **codio-vm exec/codio-vm exec-async** - This command is used to execute a command on Virtual Machine. + + For example + + .. code:: ini + + codio-vm exec mkdir -p “my_folder” + + Running above command will create “my_folder” folder in the working directories of your Virtual Machine. + + You can also open the Chrome browser using this command + + .. code:: ini + + codio-vm exec start chrome + + Can also open a particular URL in the Chrome browser + + .. code:: ini + + codio-vm exec start chrome /incognito https://codio.com + + + + + + diff --git a/docs/_sources/instructors/teaching/addstudents.rst.txt b/docs/_sources/instructors/teaching/addstudents.rst.txt new file mode 100644 index 00000000..1380cbac --- /dev/null +++ b/docs/_sources/instructors/teaching/addstudents.rst.txt @@ -0,0 +1,9 @@ +.. meta:: + :description: Inviting students to your course + +Inviting students to your course +================================ + +See :ref:`Add or Remove Students in a Course ` + +.. Note:: When integrating with an external system, you do not need to :ref:`add/invite ` students or teachers to your course. When users access an assignment from the system mapped to Codio, they will automatically be added to the Codio course. The features to invite students into a Codio course directly are not enabled when your course is connected to an external system such as an LMS. \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/behaviorinsights.rst.txt b/docs/_sources/instructors/teaching/behaviorinsights.rst.txt new file mode 100644 index 00000000..c1ae776c --- /dev/null +++ b/docs/_sources/instructors/teaching/behaviorinsights.rst.txt @@ -0,0 +1,114 @@ +.. meta:: + :description: Enable and view behavior insights that combine different IDE logs to identify potential plagiarism. + +.. _behavior-insights: + +Behavior Insights +================= + +All teachers have access to Codio's Behavior Insights which combines different IDE logs into understandable measures to detect cases of potential plagiarism. + + +Enable Behavior Insights for your Course +---------------------------------------- +**Behavior Insights** is enabled at the course-level. Navigate to the **Courses** page and select the course to open it. Then choose **Basic Settings** under **Grading** in the left hand menu. + + .. image:: /img/insights/BehaviorInsightsToggleV2.png + :alt: Select: Course, Basic Settings, Enable behavioral insights, Save Changes + +Toggle on the **Enable Behavioral Insights** setting and click **Save Changes**. + +Configure Behavior Insights Options +----------------------------------- + +You can toggle the availability of individual Behavior Insights tiles and change the minimum and maximum values for a particular option. Values less than or equal to the minimum or greater than or equal to the maximum will trigger an indicator and show up in the Behavior column for that respective student. + +* **Time Spent (minutes)** + Codio tracks the amount of time the students spent working on the assignment in our online IDE. + + * You can set the minimum value in minutes, and students who spent less than or equal to that will trigger an indicator flagging potential plagiarism concerns. + * You can set the maximum value in minutes, and students who spent greater than or equal to the maximum will trigger an indicator flagging potential student struggle. + + .. image:: /img/insights/BehaviorInsights_Configure_TimeSpent.png + :alt: Toggle to enable/disable minimum and maximum thresholds on time spent and enter the threshold value in minutes. + +* **Rate of Edits (Characters per Second)** + Based on thousands of student submissions, we determined that submissions created with a pace of more than 4 characters edited (inserted or deleted) per second had a high likelihood of being plagiarized. + + * You can set the minimum value in characters per second, and students who edited at a rate less than or equal to the minimum will trigger an indicator flagging potential student struggle. + * You can set the maximum value in characters per second, and students who edited at a rate greater than or equal to the maximum will trigger an indicator flagging potential plagiarism concerns. + + .. image:: /img/insights/BehaviorInsights_Configure_RateOfEdits.png + :alt: Toggle to enable/disable minimum and maximum thresholds on rate of edits and enter the threshold value in characters per second. + +* **Coding vs Debugging Time** + You can monitor the percent of time spent students spent in an error state (debugging) vs a non-error state (coding). In the context of detecting plagiarism, it would be odd for students to never have errors or spend no time trying to resolve them. Based on thousands of student submissions, we determined a generalized threshold of less then 4% of the time in an error state (i.e. “debugging”) had a high likelihood of being plagiarized. + + * You can set the minimum value as a percent, and students who spent less than or equal to the minimum time debugging will trigger an indicator flagging potential plagiarism concerns. + * You can set the maximum value as a percent, and students who spent greater than or equal to the maximum time debugging will trigger an indicator flagging potential student struggle. + + .. image:: /img/insights/BehaviorInsights_Configure_CodingVsDebugging.png + :alt: Toggle to enable/disable minimum and maximum thresholds on coding vs debugging time and enter the threshold value as a percent. + +* **Insertions vs Deletions** + You can monitor the percent of characters inserted vs characters deleted across assignment code files for the student. + + * You can set the minimum value as a percent, and students who deleted less than or equal to the minimum will trigger an indicator flagging potential plagiarism concerns. + * You can set the maximum value as a percent, and students who deleted greater than or equal to the maximum will trigger an indicator flagging potential student struggle. + + .. image:: /img/insights/BehaviorInsights_Configure_InsertionsVsDeletions.png + :alt: Toggle to enable/disable minimum and maximum thresholds on insertions vs deletions and enter the threshold value as a percent. + +* **External Pastes** + You can monitor each occurrence of a paste that did not come from an assignment code file or the Guide. + + * You can set the minimum number of lines of code that count as an occurrence of an external paste. **The smallest accepted value is 2 lines of code**, meaning that when students paste 2 or more lines of code, Codio counts that as an external paste occurrence. Students often paste code that is one line or less (e.g. import statement, regular expression from a testing website, symbols they cannot find on their keyboard such as ``|``) which is not captured by this dimension due to the lower chance of plagiarism concern. For more fine-grained information on a student's coding process which would show these smaller pastes, see :ref:`Code Playback`. + * You can set the maximum number of paste occurrences, and students who had greater than or equal to the number of paste occurrences will trigger an indicator potentially indicating plagiarism concerns. + + .. image:: /img/insights/BehaviorInsights_Configure_ExternalPastesV2.png + :alt: Toggle to enable/disable external paste threshold and enter the threshold values. + +.. Note:: For reference, the values in the images above are Codio's default values. + +Viewing Behavior Insights +------------------------- + +When you go to the Student progress page of an assignment in that course, you will now see a **Behavior** column and be able to filter and sort based on the behavior indicator. + + .. image:: /img/insights/BehaviorInsightsStudentProgressIndicator.png + :alt: A Behavior column on the assignment progress dashboard can be filtered and sorted + +.. Note:: Behavior Insights will only appear once an assignment is marked as complete. A lack of indicator means no behavior thresholds have been met - the student has no indications of the specified behavior. + +Click on an indicator under the **Behavior** column to see the Behavior Insights Dashboard. + + .. image:: /img/insights/BehaviorInsightsDashboard.png + :alt: Five tiles showing numeric metrics with text descriptions under each + +There will be between 1 and 5 tiles displayed. Tiles are only displayed if the student value is outside of a given threshold (indicated by dashed lines or red on the tile). Each tile has a textual description directly below it to help teachers interpret the numerical date presented in graphical form on the tile. + +Click the **Ignore** button at the bottom of the dashboard to remove the behavior indicator for that student on that assignment. This action cannot be undone. + +Behavioral Player +----------------- + +You can also view students activity for all files in the assignment going to **Education > Behavioral Player** menu option. + +History of External Pastes and CodePlayback +------------------------------------------- +If you click on a bar in the **History of External Pastes** tile, you will be presented with that paste in Codio's Code Playback feature. + + .. image:: /img/insights/BehaviorInsightsPlayback.png + :alt: Code playback with code changes on top and a timeline underneath with file name and pastes indicated + +The top pane shows the contents of the modified file with the change higlighted in green (inserted characters) or red (deleted characters). + +The timeline at the bottom indicates all detected pastes, and clicking on the paste will bring you to that point in the timeline. + +No Data +------- +Behavior Insights is built on Codio's IDE instrumentation. This means if your students work on their local IDE and simply upload their work to Codio, or you have them working on a 3rd party IDE inside Codio (e.g. VSCode, Jupyter, RStudio, vim, nano), you might see that some tiles are being shown to indicate lack of data: + + .. image:: /img/insights/BehaviorInsightsNoData.png + :alt: No data displayed on Coding vs Debugging and Insertions vs Deletions tiles + diff --git a/docs/_sources/instructors/teaching/commenting.rst.txt b/docs/_sources/instructors/teaching/commenting.rst.txt new file mode 100644 index 00000000..8812979b --- /dev/null +++ b/docs/_sources/instructors/teaching/commenting.rst.txt @@ -0,0 +1,26 @@ +.. meta:: + :description: Code Commenting + +.. _code-comment: + +Code Commenting +=============== + +Teachers can also comment on code within students files. + +To do this, open the students project and open the file. Hover over the left hand side of the gutter bar and click the `+` to open the comment window and enter the comments as required. This comment will be visible to the student when they next view the file + + .. image:: /img/commentcode.png + :alt: Single-line comments on the left files and a multi-line comment on the file on the right + + +Multiple lines of code can be selected and the teacher can also edit/delete or add additional comments (from the 3 dots to the right of the comment window when the comment is saved) if required. + +When actioned by the student, the comment will be marked as resolved but will still be available for review in the **Education -> Code Comments** menu item or from the Guides settings area. + + .. image:: /img/guides/codecommentguides.png + :alt: Guides Code Comments + + + +Students can also go to this to see all comments and click to open the neccessary file. diff --git a/docs/_sources/instructors/teaching/cursor.rst.txt b/docs/_sources/instructors/teaching/cursor.rst.txt new file mode 100644 index 00000000..08c4928f --- /dev/null +++ b/docs/_sources/instructors/teaching/cursor.rst.txt @@ -0,0 +1,20 @@ +.. meta:: + :description: Cursor Presence + +.. _cursor-presence: + +Cursor Presence +=============== + + +When accessing a students assignment, all active users in a project/assignment will be shown with a color in an icon showing in the menu bar when files are being accessed/edited + +Clicking on the icon will change focus to show what that user is currently editing highlighted in that color and will show the users cursor. +Hovering over the icon will show the filename and line currently being edited. + + + .. image:: /img/monitor_students/cursorpresences.png + :alt: Cursor Presence + + +This can be very useful if a student needs assistance as you can see what they are doing, real time and if you need to demonstrate something to them, they can see what you are doing \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/grading/grade-freetext.rst.txt b/docs/_sources/instructors/teaching/grading/grade-freetext.rst.txt new file mode 100644 index 00000000..557d348a --- /dev/null +++ b/docs/_sources/instructors/teaching/grading/grade-freetext.rst.txt @@ -0,0 +1,43 @@ +.. meta:: + :description: Free text questions normally require a manual grading process. + +.. _grade-freetext: + +Grading Free Text Questions +=========================== +Free text questions normally require a manual grading process. Follow these steps to grade free text questions: + +1. Open the assignment and view the list of students. + + .. image:: /img/studentlist.png + :alt: Student List + +2. Click a student name to view the list of all assessments for that student within the assignment. Free text questions are denoted by the icon highlighted in the following screenshot. + + .. image:: /img/guides/freetext-grading.png + :alt: Student Assessments + + If a student has started to answer a question but has not yet submitted it, **DRAFT** is shown next to it. Once the answer is submitted, **GRADE** is shown next to it indicating that the question has been submitted and is ready to be graded. If a course deadline has been reached, you can grade questions that are set to **DRAFT** and questions with partial answers. + +You can also see the date and time for each submitted answer as well as the date that the assignment was marked as complete by the student. + + Partial point assessments that do not have full points awarded are indicated by the following icon: + + .. image:: /img/guides/partialpointicon.png + :alt: Partial Point Icon + +3. Review the assignment and answers submitted by the student. Use the following information to enter your grade. + + - **Partial point rubric** - If an answer allows partial points, a rubric is displayed to allow you to dynamically deduct points from the maximum score. You can add an item, change an item weight, or remove an item. The changes are applied for all students in the assignment, including already graded student assignments. The rubric is dynamic for each assignment, and every new assignment starts with an empty rubric. + + .. image:: /img/guides/partialpointrubric.png + :alt: Partial Point Rubric + + Every rubric item is includes the item weight and item name. If an item or multiple items are selected, the weight is deducted from student's score (cannot be a negative score). + + - **Points adjust** - The **Points adjust** field allows the you to manually adjust the student's total score without having to edit the rubric. + + - **Comments** - Use the Comments text box to provided feedback to the student. + + + diff --git a/docs/_sources/instructors/teaching/grading/grading.rst.txt b/docs/_sources/instructors/teaching/grading/grading.rst.txt new file mode 100644 index 00000000..e0de70a4 --- /dev/null +++ b/docs/_sources/instructors/teaching/grading/grading.rst.txt @@ -0,0 +1,121 @@ +.. meta:: + :description: Grading features available for assignments. + +.. _grading: + + +Grading +======= + +.. toctree:: + :caption: Grading + :hidden: + + grade-freetext + nbgrader + release-grades + + +Codio offers the following grading features: + +- **Assign Grade** - Manually review student projects and assign a grade. +- **Grading Moderation** - Other instructors review grades already assigned to monitor grading consistency. +- **Grading Rubric** - A two-dimensional grid that provides grading guidance for manually assessing a coding project. +- **LMS Gradebook Synchronization** - Ensures that when grades are released, the data is automatically passed to any LTI enabled LMS platform such as Moodle, Blackboard and Canvas. + +Grading process +--------------- +Once students have completed their assignments, they notify the teacher by using the **Education > Mark as Completed** menu in the IDE. Instructors can also mark the assignment as complete or change the status to incomplete. Follow these steps to view and grade the assignments: + +1. Open the assignment and view the students that have a green check mark to the left of their name. This indicates that they have marked as complete. + + .. image:: /img/grading-unit.png + :alt: Grading Access + +2. Optionally, click the **Filter** drop-down and choose one of the following options to filter the list of students based on the status of the assignments: + + .. image:: /img/filter.png + :alt: Filtering + + - Any Status + - Started + - Not Started + - Has Final Grade + - No Final Grade + - Completed + - Uncompleted + - Needs Grading + +3. Click the **Options** menu and choose **Open the Project** to start grading the student's assignment. + +4. Use one of the following methods to assign the grade: + + - In the IDE, click the **Education** menu. You must have a student project open in the IDE. + - On the Course dashboard, click the **Grade** icon > **Add Grade** and complete the fields. You can also add comments. + + .. image:: /img/grading-assign.png + :alt: Assign Grade + +.. _grading-queue: + +Grading Queue +------------- + +Information on all students that require grading for all assignments in the course can be seen from the course **Queue** area in the **Grading** section. + +By default, the list is sorted by submission time, with the oldest submission at the top but other filters can be set as required. + + .. image:: /img/gradingqueue.png + :alt: Grading Queue + +- Assignment Name +- Student Name +- Grade +- Points +- Graded +- Answered +- Time + +Override Grade +-------------- + +If the students assignment has already been graded, another teacher in the course can click **Override Grade** to manually change the grade with additional comments. + +The **Override Grade** feature can also be used to provide comments at the assignment level. If you do not wish to alter the numeric grade when adding assignment level comments, re-enter it under **Grade**, add your comment and then select **Done.** + + .. image:: /img/class_administration/grading/assignment-comments.png + :alt: Assignment Comments + +Removing Penalties +------------------ + +If required you can remove penalties currently applied to the students grade. + + .. image:: /img/latepenalty.png + :alt: Remove Penalties + + +Anonymous grading +----------------- +If required, anonymous grading can be set for the course so students cannot see the names of the teachers who graded their work. The teacher names are hidden in the shared feedback, project, and dashboard. + +To enable anonymous grading, follow these steps: + +1. Open the course and click the **Grading/Basic Settings** tab. +2. Toggle **Anonymous Grading** to enable it and then click **Save Changes**. + +Code Commenting +--------------- +You can add comments to the code so that students can see them when they open the file. To comment on the code, follow these steps: + +1. Open the project and then open the file. +2. Hover over the left-hand side of the gutter bar and click + to open the comment window. +3. Enter your comments. You can select multiple lines of code, edit, and delete lines of code. + + .. image:: /img/commentcode.png + :alt: Commenting + +Students can then view the comments from the **Education > Code Comments** menu. They can also open the file from the comments. + +.. image:: /img/guides/codecommentguides.png + :alt: Code Comments \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/grading/nbgrader.rst.txt b/docs/_sources/instructors/teaching/grading/nbgrader.rst.txt new file mode 100644 index 00000000..558c0486 --- /dev/null +++ b/docs/_sources/instructors/teaching/grading/nbgrader.rst.txt @@ -0,0 +1,172 @@ +.. meta:: + :description: Auto-Grade Jupyter notebook assignments using nbgrader. + +.. _notebooks: + + +Auto-Grade with nbgrader +======================== +Codio supports `Jupyter notebook `_ auto-grading functionality through `nbgrader `_. Assignments are created with `Jupyter notebook `_ and when the assignment is published to a course, the release version is created for the student. If the assignment is updated and republished, it overwrites all tests and read-only cells with the new version and the release version for the students is updated. If you change the jupyter version or nbgrader version or any other nbgrader metadata in the assignment, it will not reflect automatically for students who have already started the assignment, instructor need to reset their assignment to reflect those changes. Students who haven't started the assignment will receive the updated version of assignment. + +When a student submits the assignment by marking the assignment as complete, the assignment is automatically graded. However, manual grading is also possible if desired. + +User configurations for nbgrader can be stored in a **nbgrader_config.py** or in **.codio-jupyter** file. A .codio-jupyter file must be present in a project to let Codio know that nbgrader should be used to grade Jupyter assessments. + +.. Important:: If using **nbgrader_config.py** for your configurations, the **.codio-jupyter** is still required but can be empty/blank + +.. Note:: If both files are used the settings in the **nbgrader_config.py** take precedence. This file is not visible to students in their assignments + +.. Note:: Notebook files are only supported if in the root (`/home/codio/workspace` or `~/workspace`) folder + +.. Warning:: :ref:`Pair Programming ` should not be used for Jupyter Notebook + +Configuration +------------- +Use the following configuration information when setting up nbgrader in a **.codio-jupyter** file. If using **nbgrader_config.py**, see :ref:`example ` below. + +- **Extend Timeout period** - To extend the time required for completion (to 90 seconds in this example), you can add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + ExecutePreprocessor.timeout: 90 + + +- **Lock all cells** - To lock all cells (Default: False), add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + LockCells.lock_all_cells: True + + + +- **Lock all grade cells** - To lock all grade cells (Default: True) where grade cells are locked (non-deletable), add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + LockCells.lock_grade_cells: True + + +- **Lock all read-only cells** - To lock all grade cells (Default: True) where read only cells are locked (non-deletable and non-editable), add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + LockCells.lock_readonly_cells: True + + +- **Lock all solution cells** - To lock all solution cells (Default: True) where solution cells are locked (non-deletable and non-editable), add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + LockCells.lock_solution_cells: True + + +- **Execute preprocessor on timeout** - If execution of a cell times out, interrupt the kernel and continue executing other cells rather than throwing an error and stopping by adding the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + ExecutePreprocessor.interrupt_on_timeout: True + + +- **Run custom grading with Jupyter** - To avoid execution of autograder with nbgrader and allow Codio script autograder to be executed, add the following to the **.codio-jupyter** file. When this is set, Jupyter files do not display as assessments in Codio and are not submitted through nbrader after the assignment is marked as completed (no assessments and points are set in the assignment). + +.. code:: yaml + + codio: + grader: false + + +- **ClearSolutions.code_stub** - Add the following to the **.codio-jupyter** file: + +.. code:: yaml + + nbgrader: + ClearSolutions.code_stub: + R: | + # BEGIN YOUR CODE + # END YOUR CODE + python: | + # YOUR CODE HERE + raise NotImplementedError() + ruby: | + # BEGIN YOUR CODE + raise NotImplementedError.new() + #END YOUR CODE + +.. _postgrading: + +- **Postgrader** + +You can add a post-grading hook to Jupyter to alter the result html for the student. You can do this to remove and/or replace text from the notebook file that the students will see in their feedback. + +.. code:: yaml + + codio: + postGrader: .guides/secure/postgrader.py + +To enable this, create a file **postgrader.py** in .guides/secure folder. This file needs to be executable. +Running ```chmod +x .guides/secure/postgrader.py``` will make this file executable. + +Example postgrader.py file +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code:: python + + #!/usr/bin/env python3 + import sys + import re + START = '### BEGIN HIDDEN TESTS' + END = '### END HIDDEN TESTS' + html_path = sys.argv[1].rstrip() + with open(html_path, 'r') as content_file: + content = content_file.read() + + def replaceTextBetween(originalText, delimeterA, delimterB, replacementText): + index_from = 0 + index_to = len(originalText) + if delimeterA in originalText: + index_from = originalText.index(delimeterA) + + if delimterB in originalText: + index_to = originalText.index(delimterB) + len(delimterB) + + return originalText[0:index_from] + originalText[index_to:] + + while START in content: + content = replaceTextBetween(content, START, END, '') + with open(html_path, 'w+') as stream: + stream.write(content) + + +In this example anything between the ### BEGIN HIDDEN TESTS and ### END HIDDEN TESTS in the **.ipynb** file will not be shown to the students + +If using the **nbgrader_config.py**, see example below + +.. _nb-conf-example: + +Example nbgrader_config.py +-------------------------- + +.. code:: python + + c = get_config() + c.ClearHiddenTests.begin_test_delimeter = "BEGIN HIDDEN TESTS" + c.ClearHiddenTests.end_test_delimeter = "END HIDDEN TESTS" + c.LockCells.lock_all_cells = True + c.LockCells.lock_grade_cells = True + c.LockCells.lock_readonly_cells = True + c.LockCells.lock_solution_cells = True + c.ExecutePreprocessor.interrupt_on_timeout = True + c.ExecutePreprocessor.timeout = 20 + c.ClearSolutions.code_stub = { + "R": "# your R code here\n# end of R code\n", + "python": "# your python code here\n# end of python code\n", + "ruby": "# your ruby code here \n# end of ruby code" + } + + diff --git a/docs/_sources/instructors/teaching/grading/release-grades.rst.txt b/docs/_sources/instructors/teaching/grading/release-grades.rst.txt new file mode 100644 index 00000000..4f17aaab --- /dev/null +++ b/docs/_sources/instructors/teaching/grading/release-grades.rst.txt @@ -0,0 +1,36 @@ +.. meta:: + :description: This allows you to release all the grades at once after the grading process has been completed. + +.. _release-grades: + +Release Grades +============== +By default students are not shown the grades until you decide to release them to the course. This allows you to release all the grades at once after the grading process has been completed. To learn more about release grades, view the video + + +.. raw:: html + +
+ + +If you want to release the grades as the assignments are graded, follow these steps: + +1. Open the course and click the **Grading Basics** tab. +2. Toggle the **Release Grades Automatically** setting to enable it. + + .. image:: /img/changereleasegrades.png + :alt: Release Grades Automatically + +Enable Release Grades toggle +---------------------------- +You can enable the :ref:`Release Grades Automatically ` at the organization level so that the **Release Grades** toggle is visible on the **Course** page. + +.. image:: /img/grading-release.png + :alt: Release grades toggle + +Release grade from assignment +----------------------------- +You can also release grades for an assignment by toggling the switch in the **Release grades** column. + +.. image:: /img/grading-release2.png + :alt: Release grades toggle in assignment \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/insights.rst.txt b/docs/_sources/instructors/teaching/insights.rst.txt new file mode 100644 index 00000000..546b3426 --- /dev/null +++ b/docs/_sources/instructors/teaching/insights.rst.txt @@ -0,0 +1,47 @@ +.. meta:: + :description: Gain insight into learning behavior at the course, module, assignment and student level. + +.. _learning-insights: + +Learning Insights +================= + +Higher Education institutions in the United States have access to Codio's Learning Insights. Use this feature to gain insight into learning behavior at the course, module, assignment and student level. + +Available Learning Insight Views +-------------------------------- + +Access **Learning Insights** from inside a course. Navigate to the **Courses** page and select the course to open it. + + + .. image:: /img/accesscourse.png + :alt: Select Course + + + +Course level insights +------------------------- +Click the **Insights** tab. + + +Module level insights +------------------------- +Click **Show Insights** to the right of the module name. + + .. image:: /img/insights/moduleinsights.png + :alt: Module Insights + +Assignment level insights +----------------------------- +1. Click the **Overview** tab. +2. Click the assignment name. +3. Click the **Insights** tab. + + + +Student level insights +-------------------------- +1. Click the **Students** tab +2. Click the student name. +3. Click the **Insights** tab + diff --git a/docs/_sources/instructors/teaching/plagiarism.rst.txt b/docs/_sources/instructors/teaching/plagiarism.rst.txt new file mode 100644 index 00000000..e2a65988 --- /dev/null +++ b/docs/_sources/instructors/teaching/plagiarism.rst.txt @@ -0,0 +1,84 @@ +.. meta:: + :description: Plagiarism detection allows you to check for code copying and potential cases of cheating between members of a course. + +.. _plagiarism: + +Plagiarism Checker +================== + + +Plagiarism detection allows you to check for code copying and potential cases of cheating between members of a course. With the current version, Codio will compare the code projects of all students within a course for a specific teaching assignment. + +If you want to include other reference code to include in the cross comparison, then you will need to create a dummy student account, add that dummy student to the course and upload the reference code as that student for that assignment. The Codio :ref:`Test Student ` accounts could be used for this purpose + +Plagiarism detection is best used with programming project assignments rather than Codio authored projects. It will work in both cases but it is really designed to test general coding projects rather than lots of auto-graded assessments within a assignment. + +Codio does not determine whether cheating has or has not taken place and leaves the decision making up to you. + + +To run the Plagiarism checker you need to first select the assignment within the course and then press the actions button next to the assignment name. + + .. image:: /img/guides/plag-button.png + :alt: Plagiarism start + +Courses +******* +In order to use this feature you need to set up a course. If you are not using Codio as your main IDE and want to use only the plagiarism detection feature then you should still follow these instructions and ask your students to upload their code into the project using Git or by uploading files manually. + +Access Plagiarism features +************************** + +When in your course, select your assignment and then click the **Actions** button (button to the top right of the screen) to show the available actions that includes Plagiarism + + .. image:: /img/guides/plag-button.png + :alt: Plagiarism start + +Run +*** + +You can see the **Plagiarism** button near in the upper part of the screen. When you press this you are taken to the following screen. + + .. image:: /img/guides/plag-summary.png + :alt: Plagiarism summary + +This screen will show you any plagiarism reports that were run in the past. You can open these if you wish. + +On the left you can: + +- enter a relative path in the workspace to check. +- upload items to compare against (e.g. previous years information). +- filter out template code setting the maximum fingerprint percentage between 0 and 100%. For more information on fingerprinting see https://dolos.ugent.be/about/algorithm.html#fingerprinting +- restrict the file types that should be checked. It is possible to add multiple file types by pressing the **Add Extension** button. +- add the file list in the **Files Excludes** box that you don't want to be inlcuded. If there are multiple files, add each file on a new line. + +.. Note:: **Files Excludes** is useful when there is a large data set and reporting on all returns an error. + + +These filters can be useful to avoid generating unnecessary noise in your report. + +Once you are ready to run a new report, press the **Start** button, which will package up all the files and pass them to the detection engine. You are free to leave the screen at this point and return to it later to see whether the report has been generated. + +Codio will include all code from all students in the report, irrespective of whether the assignment is marked by the student as completed. + +The report +********** +Once the report has been generated it can be opened by clicking the **Open** button. A typical report is shown below. The interpretation of the report is explained below. + + .. image:: /img/guides/plag-main-report.png + :alt: Plagiarism main report + +From the report overview you can also then view by: + +- submission +- clusters +- graph +- pair + +In the **Global Settings** (under the cog icon at the top right) you can configure global parameters + +- Similarity Threshold (The similarity threshold is the minimum similarity a file pair must have to be considered plagiarised) +- Anonymize Dataset (Anonymize the dataset by removing the names of the authors and the files) +- Active Labels (Select the labels that should be displayed in the visualizations) + +For more information see the `Dolos `_ documentation and if you have any feedback on the report, raise in the GitHub repository `issues `_. + diff --git a/docs/_sources/instructors/teaching/playback.rst.txt b/docs/_sources/instructors/teaching/playback.rst.txt new file mode 100644 index 00000000..b17b552d --- /dev/null +++ b/docs/_sources/instructors/teaching/playback.rst.txt @@ -0,0 +1,20 @@ +.. meta:: + :description: Code Playback + +.. _code-playback: + +Code Playback +============= + + +Teachers have access to all of the files that students produce on Codio. In order to see how these code files were built, teachers can use **Code Playback**. If your cursor is in the code file you want to see the playback of, simply select **Tools->Code Playback** menu. If you are looking into a multi-file program or did not have the file you want to investigate in-focus, search for the student’s file by clicking on the folder icon. + + .. image:: /img/codeplayback/CodePlayback1.gif + :alt: Code Playback + + + +To watch the code be built, click the play button. You can change the speed using the **Speed** drop down which is in changes per second. To walk through the changes manually, you can use the “Previous change” and “Next change” buttons. You can drag along the playback slider to find points of interest. + + .. image:: /img/codeplayback/CodePlayback2.gif + :alt: Code Playback \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/remove.rst.txt b/docs/_sources/instructors/teaching/remove.rst.txt new file mode 100644 index 00000000..bca474b4 --- /dev/null +++ b/docs/_sources/instructors/teaching/remove.rst.txt @@ -0,0 +1,18 @@ +.. meta:: + :description: Removing Students + +.. _remove-students: + +Removing Students +================= + + +1. From the **Courses** area, click on your course to open it. + + +1. Click on the **Students** tab. + +1. You will see all students in your course displayed on this screen. Find the student that you want to remove from the course and click on the blue triple dot icon to the right of their name. Choose **Remove student** to take them out of the course. (Note: this does not remove your student entirely from your organization - if you wish to do this, see :ref:`Remove Members `) + + .. image:: /img/manage_classes/remove_student.png + :alt: Remove Student diff --git a/docs/_sources/instructors/teaching/resetpassword.rst.txt b/docs/_sources/instructors/teaching/resetpassword.rst.txt new file mode 100644 index 00000000..2e6b832d --- /dev/null +++ b/docs/_sources/instructors/teaching/resetpassword.rst.txt @@ -0,0 +1,18 @@ +.. meta:: + :description: Resetting student passwords + +.. _reset-pass: + +Resetting student passwords +=========================== + +You can change a student's password in the following way: + +1. From the **Courses** area, click on your course to open it. + +1. Click on the **Students** tab, top centre of your screen. + + .. image:: /img/manage_classes/students_tab.png + :alt: Students tab + +1. You will see all students in your course displayed on this screen. Find the student whose password needs to be changed and click on the blue triple dot icon to the right of their name. Choose **Change student's password** and follow the steps to reset. \ No newline at end of file diff --git a/docs/_sources/instructors/teaching/viewstudentwork.rst.txt b/docs/_sources/instructors/teaching/viewstudentwork.rst.txt new file mode 100644 index 00000000..fdab33ed --- /dev/null +++ b/docs/_sources/instructors/teaching/viewstudentwork.rst.txt @@ -0,0 +1,45 @@ +.. meta:: + :description: Viewing student work + +.. _viewing-student-work: + + +Viewing student work +==================== + + +As a teacher you have access to your students' assignments within Codio. This allows you to view and access work your students have completed at any time. + +1. From the **Courses** area, click on your course to open it. + + .. image:: /img/monitor_students/year10class.png + :alt: Course + + + +1. Click on the **Students** tab. + + +1. You will see all students in your course displayed on this screen. By default they will show sorted alphabetically by first name but you can also sort them by last name, number of started or number of completed assignments if preferred. + +1. To view/access an individual students work click on their name. On the far right of the screen, under the heading **Open**, click the blue arrow to open the students work. + + .. image:: /img/openstudent.png + :alt: Open student work + +Writeable Copy +-------------- +When you open a student assignment, changes you make will be saved in their assignment and they will see them when they open their assignments. + +If you would like to try something out in their code without changing their version, click on the **WRITEABLE COPY** button on the top right. Changes made in this copy won't be saved. + + .. image:: /img/monitor_students/writeable.png + +Downloading student workspaces +------------------------------ + +If you wish to download student workspaces you can do so either for individual assignments, individual students or for all students in the course: + +- For individual assignment workspaces, see :ref:`Export Assignment Data ` +- For indvidual student workspaces, see :ref:`Export a Project ` +- For all students in a course, see :ref:`Export Course Data ` \ No newline at end of file diff --git a/docs/_sources/setupcourses.rst.txt b/docs/_sources/setupcourses.rst.txt new file mode 100644 index 00000000..903a1c22 --- /dev/null +++ b/docs/_sources/setupcourses.rst.txt @@ -0,0 +1,45 @@ +.. meta:: + :description: Creating courses, adding students, connecting to LMS and working with TA's + +.. toctree:: + :name: setupcourses + +Courses Set up +-------------- + +.. toctree:: + :maxdepth: 1 + :hidden: + + instructors/setupcourses/courses + instructors/setupcourses/resources/codioresources + instructors/setupcourses/resources/resourcetools/crunch + instructors/admin/integration/intro + instructors/setupcourses/assignment-settings/assignment-settings + +A course is a grouping of students who are taught as a logical group. One of the main tasks for instructors is to create the courses for their students, and then add content (modules and assignments), share it with others, add teachers and students to it, and other tasks. +With courses, you can instantly access student code and projects. + +You can also integrate the course with any LTI-enabled LMS platform such as Canvas, D2L, Moodle, Blackboard and many others. Your LMS can auto-populate courses and grade data can be fed back from Codio to the LMS. + + + +Getting Started +--------------- +Review the following topics to get started setting up your courses: + +- :ref:`Create a Course ` +- :ref:`Clone a Course ` +- :ref:`Share Course ` +- :ref:`Add Modules and Assignments ` +- :ref:`Add Teachers to a Course ` +- :ref:`Add, Remove or Archive Students in Course ` +- :ref:`Add and Remove Course Assignments ` +- :ref:`Integrate Course with LMS Platform ` + + + + + + + diff --git a/docs/_sources/student.rst.txt b/docs/_sources/student.rst.txt new file mode 100644 index 00000000..98f65283 --- /dev/null +++ b/docs/_sources/student.rst.txt @@ -0,0 +1,20 @@ +Welcome to CodioDocs's documentation! +===================================== + + +.. toctree:: + :caption: Theme Documentation + :maxdepth: 2 + + Accessing Codio + Your Courses + Tools + Developing Code + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/docs/_sources/students/accessing-codio/accessing-codio.rst.txt b/docs/_sources/students/accessing-codio/accessing-codio.rst.txt new file mode 100644 index 00000000..1648af91 --- /dev/null +++ b/docs/_sources/students/accessing-codio/accessing-codio.rst.txt @@ -0,0 +1,12 @@ +.. meta:: + :description: Joining a course, Payments + +Accessing Codio +=============== + +.. toctree:: + :caption: Accessing Codio + + joining + paying + faq \ No newline at end of file diff --git a/docs/_sources/students/accessing-codio/faq.rst.txt b/docs/_sources/students/accessing-codio/faq.rst.txt new file mode 100644 index 00000000..7506e00f --- /dev/null +++ b/docs/_sources/students/accessing-codio/faq.rst.txt @@ -0,0 +1,149 @@ +.. meta:: + :description: FAQs + +.. _student-faq: + +Frequently Asked Questions +========================== + + +Not able to see the work previously completed in a Course +--------------------------------------------------------- +Where you can't see work you previously did or being prompted to set up a new payment plan + +Your Codio account is associated with an email address, used when you first registered/signed up. + +If you are accessing Codio via an LMS (Learning Management System) such as Canvas/Blackboard/Moodle and have logged into the LMS with a different email address as you then open an assignment a new Codio with a different email address will be created and will not see what you may have done previously and you may be prompted to start a new payment plan. + +If you are unsure of what different email address you are using in your LMS, go to your Codio Account settings where you can see the email address of this account. + +Then check/review your LMS settings to check what other email addresses you have set to use and log out and log back into the LMS with the other email address. + +To avoid you accidentally repeating this in future, we suggest you remove all alias email addresses in your LMS account so you can only log into the LMS with the one email account in future. If unsure how contact your local LMS administrators who will be able to assist you + +Assignment not loading fully or seeing 'User not passed' when accessing from an LMS +----------------------------------------------------------------------------------- +It can be the case that there is something in your browser which is involved. + +We would suggest you clear browser cache/cookies, close all browser tabs and log in again. When clearing your cache/cookies select 'All Time' for the period of time to delete. + +In the event there is a problem with a browser extension/add on, consider using a private/incognito session to access Codio or try a different browser. + +If you are using an incognito session, check that Block third-party cookies is not enabled. If using Chrome, this is now the default setting and can be disabled before you log into Codio or your LMS + + .. figure:: /img/incognito.png + :alt: Incognito session + +If you continue to experience this, please open your browser dev tools (F12) and see if you can see any error in console log that may help you to solve the issue and if you are unable to resolve it, contact us with the output of the console log + +Problems accessing Codio when using Safari browser +-------------------------------------------------- + +Due to Safari's “Intelligent” tracking, this will block the necessary authentication cookie. + +To ensure access disable "Prevent cross-site tracking" in the browser privacy settings + + .. figure:: /img/safari-settings.png + :alt: Safari Settings + +How do I reset my password? +--------------------------- + +You can log in with your Codio username or the registered email address. + +If you have also forgotten your password you can request a new password using either your username or email address. + +Resetting your password will send an email to your registered email addresss containing a link for you to click. This will then allow you to enter a new password of your choosing + +See :ref:`Managing your Password ` for more information. + +If you are a student in a Course set up by your teacher, they can also reset your password for you if you can't recall your username or email address. + + +Deleted a file by mistake +------------------------- + +If you delete a file in an error, you can use the **Code Playback** option to find that file. Please follow the below steps to recover a deleted file: + +- Open the assignment then go to **Tools -> Code Playback***. + +- Click on the folder icon. + + .. figure:: /img/playback-folder.png + :alt: Code Playback open folder + +- Select the file that you want to recover + +- Find the file which you have deleted. + +- Review the file and it will show how it was built + +- You can find your last saved work by clicking on the **Previous change, Play/Pause,** and **Next change** buttons (from left to right) or by dragging the timeline bar along + + .. figure:: /img/playback-timeline.png + :alt: Code Playback timeline + +- You can create a new file and copy/paste from the code playback into a new file that you created. + +.. Note:: If you don't have **Tools -> Code Playback**, right-click on a tab or in the file tree and select **Code Playback** + + .. figure:: /img/playback-filetree.png + :alt: Code Playback open file + +Why do I see 'Terminated by Timeout' in my challenges +----------------------------------------------------- + +In general terms, **Terminated by Timeout** will be returned when the code you are checking cannot complete and when a stipulated time is reached, it will be terminated. + +Review your code and if you need assistance, raise with your class teacher/instructor who will be able to help you as they will be able to see the code you have written + +Accessing assignments when using an LMS platform +------------------------------------------------ + +If LTI is enabled for a class, new assignments can only be started via the LMS platform. Any assignments already started can be accessed by logging into your Codio account. +Your teacher/instructor can set up a link so if you try to start an assignment you can be given a link to click that will take you to your LMS course. + +- Assignments that have not been started will show with 'ready to go' in the Codio course +- Assignments that have been started previously will show with 'In Progress' in the Codio course + + .. figure:: /img/student-dash.png + :alt: Students View + +.. Note:: Teachers in your organization can hide assignments that have not been started from your dashboard so you may only see those you have already started. + +Not able to expand the file tree in a Unit +------------------------------------------ + +Within **Guides**, the author can control the Layout on each page in the guides which includes showing (or not) the File Tree. + +If the File Tree is shown but all folders in the project are hidden then although you may see the file tree, you will not be able to expand to see any content. + +If you are experiencing this situation, let your teacher/professor know and they can contact the author to review/update the assignment + +Reset my assignment to its default configuration +------------------------------------------------ + +If the assignment you are referring to uses **Guides**, check out :ref:`Restore Current Files ` as that may do what you need but if not and your instructor has allowed you to reset the assignment yourself, you can reset your assignment either from the Education menu area + + .. figure:: /img/education-resetbtn.png + :alt: Education>Reset Assignment + +or when you opened a completed assignment you will see the pop up to reset your assignment (check your browser isn't blocking pop ups) + + .. figure:: /img/popup-resetbtn.png + :alt: Reset Assignment + +If your instructor hasn’t allowed students to reset assignments, discuss with your class instructor as they can reset the assignment for you and you can then start the unit again. + +If you also let them know what you did, they may want to review the unit(s) you are working with to help mitigate this problem for you and other students in the future. + +Accessibility Options +--------------------- + +Codio provides a range of tools to support Accessibility. + + See: + +- :ref:`Dyslexia Support ` +- :ref:`User Preferences ` +- :ref:`Project Preferences ` \ No newline at end of file diff --git a/docs/_sources/students/accessing-codio/joining.rst.txt b/docs/_sources/students/accessing-codio/joining.rst.txt new file mode 100644 index 00000000..fffa49bc --- /dev/null +++ b/docs/_sources/students/accessing-codio/joining.rst.txt @@ -0,0 +1,30 @@ +.. meta:: + :description: Join a course directly from your LMS platform (such as Canvas, Blackboard, Moodle, etc.), or use a URL or token provided by your instructor. + +.. _joining: + +Join a Course +============= + +You can join a course directly from your LMS platform (such as Canvas, Blackboard, Moodle, etc.), or use a URL or token provided by your instructor. + +If your school is not using an LMS platform, your instructor will provide you one of the following methods to join the course: + +- Send you an invitation URL that you can copy and paste into your browser. + +- Send you a two-word token that you can enter on the Codio website using `Join Course `_. Enter the token and click **Next**. + + .. image:: /img/joinclass.png + :alt: Join Course + + +To access your course, log in to your Codio account and select **Courses** in the navigation pane. + +**See Also:** + +- :ref:`Navigating the Student Dashboard ` +- :ref:`Paying for Codio ` +- :ref:`Manage Password ` + + + diff --git a/docs/_sources/students/accessing-codio/paying.rst.txt b/docs/_sources/students/accessing-codio/paying.rst.txt new file mode 100644 index 00000000..d3870155 --- /dev/null +++ b/docs/_sources/students/accessing-codio/paying.rst.txt @@ -0,0 +1,105 @@ +.. meta:: + :description: A Codio payment gives you access to your courses for the semester. + +.. _paying: + +Pay for Codio +============= + +If your institution isn't providing access to Codio for you, you can make a payment that gives you access to your courses for the semester. You can pay for Codio using the **Billing** menu. The procedure you follow depends on whether you are paying yourself or redeeming a code for a payment that was obtained from your campus bookstore. + +If the plan is for one or two semesters, when your class ends, only the payment for the class is charged. + + +.. Note:: A single payment can be used for multiple courses in Codio during the specified timeframe. + +Individual billing +-------------------- +If you are paying yourself, follow these steps: + +1. Click your user name or gravatar in the lower portion of the navigation pane to open the **My Account** menu listing. + + .. image:: /img/what_students_do/forgotpassword/profilepic.png + :alt: User Profile + + +2. Click the **Billing** section and in the **Purchase Access** area, choose a tile for the period of time you would require access to Codio for and select the **Checkout** button to enter your card details. + + .. image:: /img/account_billing.png + :alt: Billing + + + + +Redeeming code from campus bookstore +------------------------------------ +Some institutions provide Codio licenses through their campus bookstore. Your course instructor or course syllabus will specify if this is available at your school. + +A single license can be used for a specified timeframe: 1 semester (5 months), 2 semesters (10 months), or a year. Specific license options depend on your local bookstore. + +To obtain and activate a license from your campus bookstore, follow these steps: + +1. Request one of the following plans from your campus bookstore: + + - 1 Semester - Codio 1-Semester Plan - ISBN: 978-1-7331872-5-1 + - 2 Semesters - Codio 2 Semester Plan ISBN 978-1-73331872-8-2 + - Annual - Codio Annual Plan ISBN # 978-1-7331872-1-3 + + The bookstore will give you a code to redeem and activate your plan for the specified timeframe. + +2. Log in to Codio following the instructions provided by your instructor. This may be through your local LMS (Canvas, Blackboard, Desire2Learn, Moodle, etc.) or through Codio.com using a course token. + + The first time you log in, a small banner is displayed in the upper portion of the screen requesting that you go to **Billing**. + +3. Click the link in the banner, or click your **User name > Settings > Billing**. + +4. From the **Plan** drop-down, choose **Redeem Code** and click **Upgrade**. + +5. Enter the code that was provided to you. Note that the code is case sensitive so enter it exactly as provided to you. + +If you have any problems contact us through your Codio account or email us at help@codio.com. + +Problems setting up a new payment +--------------------------------- + +Secure online credit card transactions are processed in real-time on behalf of Codio by the authorized merchant payment service provider Stripe using the highest levels of security available on the market. + +Sometimes online credit card transactions may fail - the reasons for such failure may be an error in the card number or the card limit has been reached, ad-blockers interfering, 3rd Party Cookies not allowed etc. In other cases the reasons are less obvious and may relate to the ever increasing fraud prevention and/or other security measures implemented by credit card companies to protect the cardholder against card abuse. + +Codio has no control over such transaction refusal. Your credit card company does not disclose to Codio the exact reason your transaction has failed. + +This means that unfortunately Codio cannot assist in solving the issue which is strictly a matter between the card issuing credit card company (who refused to authorize the transaction) and the credit card holder (who initiated the process to have the amount of the transaction charged to his/her credit card). + +In case of a transaction failure, Codio recommends to first try using an alternative credit card, or to give it another try with the same credit card again but at a later time. In most cases this would solve the issue. + +Carefully check the card details before confirming the transaction for processing. + +Should the transaction continue to fail you might want to get in touch with your credit card company. Your credit card company will be able to check the transaction log for your credit card and help fix the problem. In some cases your credit card company would need to pre-authorize the transaction for you before you can process the transaction again. + +A list of common reasons why payments fail: + +- Your credit card limit was reached (insufficient funds). +- Check your credit limit. You might have reached your daily or total credit card limit on the day you tried to charge your card. If this is the case, ask your credit card company to increase your limit. +- The charge exceeded the maximum amount allowed for a single charge. +- Check the maximum amount your card can be charged at a single time. If the declined charge is higher than this amount, ask your credit card company to increase the limit. +- Your card reached the maximum number of charges allowed in a period: Check how many times your card can be charged in given time period. If you reached this amount, ask your bank to increase the limit, wait until your card can be charged again, or make a payment with a different payment method. +- Your card doesn't accept charges from an online source: Make sure your card allows online transactions. If it doesn't, talk to your credit card company about allowing these charges or use another card. +- Your card doesn't allow international transactions: If you're making payments from abroad, make sure your card accepts international charges. If it doesn't, ask your bank to change this or use another card. +- Your card is not authorised for transactions of the classification type MO/TO: Contact your financial institution to allow transactions of classification type MO/TO (which stands for mail order/telephone order). +- Wrong expiration date: Review the expiration date on your credit card. If your card expired, use another card. +- Wrong credit card number: You should get an error message indicating the card number is not valid. If not, carefully check the card number when filling out the form. +- Billing address: Make sure that the billing address you use for the transaction matches those that your credit card company has. Address matching is however not very likely to be the main cause of a transaction failure. +- If you are seeing the message 'Do not Honor', then it is likely that your bank is unwilling to accept the transaction but they are not giving the specific reason to our processing company. You should contact your card issuing bank for more details of the exact reason. +- If you are seeing General error in Cardinal, this error can be caused due to adblockers or cookies being blocked. + +Also, ensure that your browser is allowing :ref:`3rd Party Cookies ` + +Please try using another browser or stop your adblocker during the payment process or login to Codio either with a different browser where you don't have adblockers running or in an incognito/private session. If using incognito session in Chrome, ensure that you are not blocking third-party cookies that is enabled by default now in Chrome. + + .. image:: /img/chrome-incognito.png + :alt: Chrome Incognito + +Restarting an expired payment or extending an existing payment +-------------------------------------------------------------- + +If you had a payment that has now expired, or wish to extend the period of time available, start a new payment as above. diff --git a/docs/_sources/students/courses/accessing.rst.txt b/docs/_sources/students/courses/accessing.rst.txt new file mode 100644 index 00000000..3280901c --- /dev/null +++ b/docs/_sources/students/courses/accessing.rst.txt @@ -0,0 +1,31 @@ +.. meta:: + :description: Access your courses from the Courses page and drill down to view the assignments associated with a course. + +.. _accessing-your-courses: + +Access Your Courses +=================== + +You access your courses from the **Courses** page and drill down to view the assignments associated with a course. To view your courses and assignments, follow these steps: + +1. Select **Courses** in the navigation pane to display all of the courses assigned to you in the right pane. Your current courses are displayed on the **Active** page and previous courses are displayed on the **Archived** page. + + .. image:: /img/what_students_do/studentdashboard.png + :alt: Student Dashboard + + Up to 5 pinned assignments are displayed more prominently at the top of the page and includes the end date for the assignment, which was set by your instructor. + +2. Select a course to view a list of modules/assignments associated with it, the due date (if set by your instructor), and your progress. + +3. Click the assignment to start working on it, review your assessments, grading comments and any code comments from your instructor/teacher. + +4. If you initially accessed Codio through an LMS system, you will use the same email address for your Codio login and you will need to create a Codio account password. + + To create a new password, access Codio via your LMS and go to your Account page or use the Lost Password process. See :ref:`Manage Password ` for more information. + +**See Also** +- :ref:`Navigate the Student Dashboard ` +- :ref:`Join a Course ` +- :ref:`Pay for Codio ` +- :ref:`Manage Password ` + diff --git a/docs/_sources/students/courses/audio-video.rst.txt b/docs/_sources/students/courses/audio-video.rst.txt new file mode 100644 index 00000000..56ff8a8f --- /dev/null +++ b/docs/_sources/students/courses/audio-video.rst.txt @@ -0,0 +1,48 @@ +.. meta:: + :description: Audio, Video, Chat with your instructor in Codio + +.. _av-chat1: + +Audio/Video/Chat +================ + + +When students and teachers/instructors are both accessing the same assignment, a **Call** button will show allowing Audio/Video calls and or real time chat. + + +.. image:: /img/monitor_students/call.png + :alt: Audio Video + +Also supported in projects (from **My Projects** area) where :ref:`permissions ` have been granted by the project owner to other Codio users. + +Permissions +----------- + +Permission for your camera/microphone is required and your browser will prompt you to allow.Permission + +If permission has been denied, you can re enable in your browser + +Google Chrome: +************** + +If you are using Google Chrome you can access your settings through the padlock icon in the top left of your screen, next to the URL of the page you are currently on. + +Click Site settings and make sure your camera and microphone both say Allow + +Firefox: +******** +If you are using Firefox as your internet browser you can access your settings by typing "about:permissions" into the location bar as if it were a website and hitting enter. + + +This will take you to your settings page, click the following link to find out more about changing your settings: + +https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more?redirectlocale=en-US&redirectslug=how-do-i-manage-website-permissions + +Safari: +******* +If you are using Safari, you can access your browser settings by clicking Safari and then Preferences. + + +You will see a pop up box and can update your settings. Learn more about how to update the settings through the following link: + +https://support.apple.com/en-nz/guide/safari/ibrwe2159f50/mac \ No newline at end of file diff --git a/docs/_sources/students/courses/complete-assignment.rst.txt b/docs/_sources/students/courses/complete-assignment.rst.txt new file mode 100644 index 00000000..5fdd90d1 --- /dev/null +++ b/docs/_sources/students/courses/complete-assignment.rst.txt @@ -0,0 +1,40 @@ +.. meta:: + :description: Marking an assignment as complete. + +.. _complete-assignment: + +Complete Assignments +==================== + +When you have completed an assignment you can mark it as completed (if the content author has not disabled this option) using one of the following methods: + +- In the assignment, click the **Settings** icon and choose **Mark as Completed**. + + .. image:: /img/guides/complete.png + :alt: Complete + +- On the IDE menu bar, click **Education > Mark as Completed**. + +- On the last page in the guide, click the **Mark as Completed** button. + +- On the Course assignment dashboard, toggle the **Completed** button + +.. Note:: If Penalties apply due to late submission you will be advised of this when completing from the course assignment dashboard + +If there are any assessments in the assignment that have not been submitted, details are displayed so you can review before completing the assignment. + +If you mistakenly mark an assignment as completed, contact your instructor. They can reset the status of the assignment so you can access it again. + +Uncomplete Assignment +--------------------- + +If this option is enabled by your teachers, you can change the completion status when you're in an assignment from **Education > Mark as Uncompleted** from the top menu bar. + + .. image:: /img/guides/mark-as-uncomplete.png + :alt: Mark as Uncompleted + + +The another option you can use to mark your assignments as uncompleted is by toggling off the Completed switch available on the course dashboard. + + .. image:: /img/guides/button.png + :alt: Completed Button diff --git a/docs/_sources/students/courses/courses.rst.txt b/docs/_sources/students/courses/courses.rst.txt new file mode 100644 index 00000000..2f44d94b --- /dev/null +++ b/docs/_sources/students/courses/courses.rst.txt @@ -0,0 +1,20 @@ +.. meta:: + :description: Dashboard, courses, assignments, grades + +Your Courses +============ + +.. toctree:: + :caption: Account Settings + + navigate-student-dashboard + accessing + start-assignment + usingguides + play-mode + complete-assignment + exam-mode + pair-programming + view-grade + restore-files + audio-video diff --git a/docs/_sources/students/courses/exam-mode.rst.txt b/docs/_sources/students/courses/exam-mode.rst.txt new file mode 100644 index 00000000..62c4b038 --- /dev/null +++ b/docs/_sources/students/courses/exam-mode.rst.txt @@ -0,0 +1,26 @@ +.. meta:: + :description: Features you may experience if your instructor has enabled exam mode. + +.. _exam-mode: + +Exam Mode +========= + +If your instructor has enabled exam mode features you may experience the following when taking an exam: + +- **Shuffle Question Order** - The exam pages or questions are presented in random order to students so everyone's exams are not identical. + +- **Forward Only Navigation** - You can only move forward through the pages during the exam, and cannot go back to previous pages. If this option is enabled, you will be advised of this restriction when you start the assignment. + +- **Single Login** - Once you start the exam and until it is marked as complete, all other account login attempts will be blocked when this option is enabled. + + Before you start the assignment, you will be advised that the exam is restricted to single login. To avoid any issues during the exam, you should ensure that: + + - You have closed all windows or browsers where Codio is opened. + - You have a stable internet connection. + - The device is fully charged. + - You have allotted yourself enough time to complete the assignment. + + If you attempt to access the assignment from a different IP address or browser, you will be restricted and advised to contact your course instructor for assistance. + + If you attempt to log out of Codio before the assessment is fully completed, a message will be displayed indicating that you will not be able to access the exam again if you continue with logout. If you do log out before completing the exam, contact your instructor to unlock your account. diff --git a/docs/_sources/students/courses/navigate-student-dashboard.rst.txt b/docs/_sources/students/courses/navigate-student-dashboard.rst.txt new file mode 100644 index 00000000..2ff5c93b --- /dev/null +++ b/docs/_sources/students/courses/navigate-student-dashboard.rst.txt @@ -0,0 +1,64 @@ +.. meta:: + :description: Navigate the Student Dashboard + +.. _navigate-student-dashboard: + +Navigate the Student Dashboard +============================== +The Student dashboard is the main page students use to navigate Codio. + +.. image:: /img/what_students_do/newstudentdashboard.png + :alt: Default Student Dashboard + + +Navigation menu +--------------- + +Use left navigation menu to access the different areas of the UI: + +- **STUDY** - Provides a link to access your **Courses**. +- **BUILD** - Provides links to access project tools and our professional IDE. +- **HELP** - Provides links to our customer service team and our help documentation. + +Courses +------- +The student courses are displayed in the right pane, as shown below with the default dashboard. + +.. image:: /img/what_students_do/newstudentdashboard1.png + :alt: Student Dashboard + +**1** - Toggle between list view or tile view to see your courses. + +**2** - **To Do** panel shows your assignments, including due dates (if set by your instructor/teacher). + + - Click the arrow to expand or collapse the panel. + - Click the assignment pane open it. + +**3** - **Feedback** panel shows a list of recent feedback for your assignments when grades have been released by your instructor. + + - Click the arrow to expand or collapse the panel. + - Click the feedback panel to open it and review your assessments, grading comments, and any code comments from your instructor. + +**4** - **Courses** panel is the main panel on the page and is where you can see the courses, modules, and assignments that have been assigned to you, and the end date for the assignment. Up to five pinned assignments can be displayed more prominently at the top of the page. From this area, you can easily re-open the assignment you were last working on, or start any of the other assignments that have been assigned to you. You start or open an assignment using the navigation buttons. If course/module progress bars are enabled by your teacher, you will also see your progress. + + - Click the course pane to open and view the modules and assignments in the course. + + - Click the arrow to expand or collapse the course pane. + + .. image:: /img/what_students_do/expandedcourse.png + :alt: Expanded Course on Default Dashboard + +**5** - **Leaderboard** panel (if enabled by your teacher) is where you can see your overall progress in comparison to other students in the course for mandatory assignments. + +.. Note:: You can also create your own projects using the links under **BUILD** in the left navigation pane. See :ref:`Creating or Importing a Project ` for more information. + +Projects +-------- + +You can create your own projects using the web-based IDE in Codio. To access the project area, use the BUILD links in the left navigation pane. + +**See Also:** + +- :ref:`Join a Course ` +- :ref:`Pay for Codio ` + diff --git a/docs/_sources/students/courses/pair-programming.rst.txt b/docs/_sources/students/courses/pair-programming.rst.txt new file mode 100644 index 00000000..4fd84cfe --- /dev/null +++ b/docs/_sources/students/courses/pair-programming.rst.txt @@ -0,0 +1,39 @@ +.. meta:: + :description: Pair Programming is enabled by teachers to allow groups of students to collaborate on assignments. + +.. _pair-programming: + +Pair Programming +================ + +The Paired Programming setting is enabled by teachers to allow groups of students to work together on assignments. Within each group a student will be a **Driver** who has the ability to edit and make changes in the assignment and others in the group will be **Navigators** who can view the work done by the **Driver**. Control can be passed between the driver and navigators as required. + +When others are accessing the assignment, you will see their details in the **Pair programming with:** above the assignments + +.. image:: /img/with.png + :alt: Viewing other available students + + +Driver/Navigator +---------------- + +Within a group there is a **Driver** who has control of the assignment and **Navigators** who are able to view the work being done by the driver where they can see the drivers cursor location and selections (similar to googleDocs). If the cursor cannot be seen (e.g. the driver is on another page or file in the assignment), clicking on the drivers username in the top panel will take the navigator to their location + +To transfer control between users, the navigator can start to type and if the existing driver is not actively working, they will see the Driver toggle switch flip to show they now have control. + +If the existing driver is still actively working, the navigator can flip the toggle switch next to "Driver" to request control. + +.. image:: /img/driver.png + :alt: Driver control + + +If the driver is still working they will get a notification asking for control. This will not block the driver from continuing their work if they deny the request and when they are ready to release control, they can toggle the switch to transfer control to the requestor or grant access from the notification pop up if still showing. + +The navigator will see the Driver toggle switch flip to show they now have control. + +Audio/Video/Chat +---------------- +Where students are accessing the same assignment, a **Call** button will show allowing Audio/Video calls and or real time chat. See :ref:`Audio/Video/Chat ` for more information + + + diff --git a/docs/_sources/students/courses/play-mode.rst.txt b/docs/_sources/students/courses/play-mode.rst.txt new file mode 100644 index 00000000..dd5906bb --- /dev/null +++ b/docs/_sources/students/courses/play-mode.rst.txt @@ -0,0 +1,31 @@ +.. meta:: + :description: Play Mode + +.. _play-mode: + +Play Mode +========= + +To see your content running, you need to *Play* it. If the content does not automatically start or if you have closed it, click **Tools > Guide > Play** on the menu bar, or click the **Start Guide** icon in the file tree. + +.. image:: /img/guides/startguides.png + :alt: Start Guide Icon + +Player Options +-------------- + +.. image:: /img/guides/studentplaymode.png + :alt: Play Mode + +Use the following icons to play your content: + +- **Navigation Arrows** - Allow you to navigate forward and backward through the content. +- **Settings** - Allows you to change the Theme (Light Reading/Dyslexic), Mark as Complete, change the font size, reset both the theme and fonts, restore the current files and access Code Comments. +- **Show/Hide Index** - Allows you show or hide the section index. +- **Collapse** - Allows you to expand or collapse the panel (this icon is not displayed if the page layout is One Pane. + +**See Also:** + +- :ref:`Dyslexia Support ` +- :ref:`Completing Assignments ` + diff --git a/docs/_sources/students/courses/restore-files.rst.txt b/docs/_sources/students/courses/restore-files.rst.txt new file mode 100644 index 00000000..156b8058 --- /dev/null +++ b/docs/_sources/students/courses/restore-files.rst.txt @@ -0,0 +1,42 @@ +.. meta:: + :description: You can restore the original files in an assignment or restore a file that was mistakenly deleted. + +.. _restore-files: + +Restore Files +============= + +You can restore the original files in an assignment or restore a file that was mistakenly deleted. + +Restore current files +--------------------- + +There may be times when you want to make changes to your work or discard some of it. The easiest way to accomplish this is to restore the original files in a assignment. + +1. Open the assignment. + +2. Navigate to the file that you want to restore. + +3. In the upper right corner, click the **Settings** icon and choose **Restore current files**. This will only restore the file that you have open. This will not restore all the files in the assignment. + + .. image:: /img/guides/reset.png + :alt: Restore Current Files + +.. Note:: If this does not accomplish what you intended, contact your instructor to have them reset the assignment to its default state so you can restart it. + +Restore a deleted file +---------------------- + +If you have mistakenly deleted a file, you can retrieve it using :ref:`Code Playback ` and copy the code into a new file. Follow these steps to recover a deleted file: + +1. Open the assignment and then click **Tools > Code Playback**. + +2. Click the **Folder** icon and select the file that you want to recover. + +3. Review the file to see how it was built. + +4. Use the **Playback** icons to review your last saved work (**Back**, **Play/Pause**, and **Forward**), and walk through your changes. You can also drag the timeline bar to move through the code. + +5. Create a new file, and then copy the code from the playback and paste it into the new file. + +.. Note:: If you don't see **Tools > Code Playback** on the menu bar, right-click on a tab or in the file tree and choose **Code Playback**. \ No newline at end of file diff --git a/docs/_sources/students/courses/start-assignment.rst.txt b/docs/_sources/students/courses/start-assignment.rst.txt new file mode 100644 index 00000000..9535faa9 --- /dev/null +++ b/docs/_sources/students/courses/start-assignment.rst.txt @@ -0,0 +1,28 @@ +.. meta:: + :description: Starting an assignment, if you are not coming in through an LMS (Blackboard, Canvas, D2L etc) + +.. _start-assigment: + +Start an Assignment +=================== + +Follow these steps to begin working on an assignment: + +1. Log in to Codio and click **Courses** in the left navigation pane. + +2. Click the course to open the **Assignments** page and click **Ready to go** to begin the assignment. + +3. If your instructor has connected your course to an LMS system (Blackboard, Canvas, D2l) you must begin your assignments in those systems. + +.. Note:: Your instructor can set prerequisite rules to assignments requiring you to have either completed, started or passed with a minimum grade other assignments before you can start a specific assignment. If set and you have not met those requirements, you will see a message box explaining what is required and if you need help/clarification you can contact your instructor who can help you. + + .. image:: /img/student-prerequisite.png + :alt: Student Warning + + +**See Also:** + +- :ref:`Play Mode ` +- :ref:`Complete Assignment ` +- :ref:`Exam Mode ` +- :ref:`View Grades ` \ No newline at end of file diff --git a/docs/_sources/students/courses/usingguides.rst.txt b/docs/_sources/students/courses/usingguides.rst.txt new file mode 100644 index 00000000..9937115e --- /dev/null +++ b/docs/_sources/students/courses/usingguides.rst.txt @@ -0,0 +1,50 @@ +.. meta:: + :description: Using Guides + +.. _guides: + +Use Guides +========== + +Play mode +--------- + +To see your content running, you need to *Play* it. If the content does not automatically start or if you have closed it, go to **Tools->Guide->Play** menu option or click the **Start Guide** icon in the file tree: + +.. image:: /img/guides/startguides.png + :alt: StartGuides + + +At this point the panel layout is set up automatically according to the layout specified in the first section and it will be displayed. + + +Player options +-------------- + +.. image:: /img/guides/studentplaymode.png + :alt: Play Mode + + + +Within the player various options can be controlled by the user + + +- **Navigation Buttons** allows the user to navigate forward/backward in the content. +- **Settings** allows the user to change the Theme (light/dyslexic), Mark as Complete, change the font size, reset both the theme and fonts, restore the current files (see below) and access Code Comments. See - :ref:`Dyslexia Support ` section +- **Show/Hide Section List Hamburger Ico** allows the user to show/hide the section list. +- **Collapse** button will not show if the page layout is One Pane. + + +Restore current files +--------------------- + +There may be times when you want to make changes to your work or discard some of it. The easiest way to accomplish this is to restore the original files in a assignment. + +1. Open the assignment that you want to restore. + +2. In the upper right corner, click the **Settings** icon and choose **Restore current files**. + + .. image:: /img/guides/reset.png + :alt: Restore Current Files + +.. Note:: If this does not accomplish what you intended, contact your instructor to have them reset the assignment to its default state so you can restart it. diff --git a/docs/_sources/students/courses/view-grade.rst.txt b/docs/_sources/students/courses/view-grade.rst.txt new file mode 100644 index 00000000..73e8c699 --- /dev/null +++ b/docs/_sources/students/courses/view-grade.rst.txt @@ -0,0 +1,37 @@ +.. meta:: + :description: You can view your grade details from the **Feedback** page or the **Grade** field in the dashboard. + +.. _view-grade: + +View Grades +=========== +When your assignment has been graded and released by your instructor, the **Status** column in the assignment shows **graded**. + +.. image:: /img/graded.png + :alt: Graded + +You can view the grade details from the **Feedback** page or the **Grade** field in the dashboard. + +- Open the project and go to **Education > Feedback**. + + .. image:: /img/feedback.png + :alt: Feedback + +- Click the **Grade** field in the dashboard. + + .. image:: /img/accessgrades.png + :alt: Access Grades + +To view details about a grade, click the **Assessment** and view more information. + +.. image:: /img/gradedetail.png + :alt: Grade Detail + +The **Partial Point** icon indicates assessments that support partial points and full points that were not awarded. + +.. image:: /img/guides/partialpointicon.png + :alt: Partial Point Icon + +**Note**: If the assignment has been marked as completed, you can click the **Completed** button to access the grade feedback. If you want to view the assignment, click the assignment in the left panel. As the assignment is completed you will not be able to edit anything but can view the content. + +If your organization uses an LMS platform, a URL to the grade detail is also passed to your LMS so you can access it from the grading area in the LMS. diff --git a/docs/_sources/teaching.rst.txt b/docs/_sources/teaching.rst.txt new file mode 100644 index 00000000..75d41f26 --- /dev/null +++ b/docs/_sources/teaching.rst.txt @@ -0,0 +1,65 @@ +.. meta:: + :description: Grading, viewing student work, remote toolkit + +.. toctree:: + :name: teaching + +Teaching +======== + +.. toctree:: + :maxdepth: 1 + :hidden: + + instructors/teaching/viewstudentwork + instructors/teaching/grading/grading + instructors/teaching/behaviorinsights + instructors/teaching/insights + instructors/teaching/playback + instructors/teaching/commenting + instructors/teaching/cursor + instructors/teaching/resetpassword + instructors/teaching/remove + instructors/teaching/plagiarism + instructors/teaching/addstudents + +Viewing student work +-------------------- + + +As a teacher you have access to your students' assignments within Codio. This allows you to view and access work your students have completed at any time. + +1. From the **Courses** area, click on your course to open it. + + .. image:: /img/monitor_students/year10class.png + :alt: Course + + + +1. Click on the **Students** tab. + + +1. You will see all students in your course displayed on this screen. By default they will show sorted alphabetically by first name but you can also sort them by last name, number of started or number of completed assignments if preferred. + +1. To view/access an individual students work click on their name. On the far right of the screen, under the heading **Open**, click the blue arrow to open the students work. + + .. image:: /img/openstudent.png + :alt: Open student work + +Writeable Copy +-------------- +When you open a student project, changes you make will be saved in their project and they will see them when they open their projects. + +If you would like to try something out in their code without changing their version, click on the **WRITEABLE COPY** button on the top right. Changes made in this copy won't be saved. + + .. image:: /img/monitor_students/writeable.png + +Downloading student workspaces +------------------------------ + +If you wish to download student workspaces you can do so either for individual assignments, individual students or for all students in the course: + +- For individual assignment workspaces, see :ref:`Export Assignment Data ` +- For indvidual student workspaces, see :ref:`Export a Project ` +- For all students in a course, see :ref:`Export Course Data ` + diff --git a/docs/_sources/tools.rst.txt b/docs/_sources/tools.rst.txt new file mode 100644 index 00000000..6e0de76c --- /dev/null +++ b/docs/_sources/tools.rst.txt @@ -0,0 +1,38 @@ +.. meta:: + :description: Dyslexia support, Lexikon, Code Playback, Code Commenting, Desktop App + + + +Tools +===== + +.. toctree:: + :caption: Tools + :hidden: + + + develop/tools/lexikon + develop/tools/code-playback + develop/tools/code-commenting + +.. _tools: + +Dyslexia Support +---------------- + +Codio has a built in dyslexia support feature for users with dyselexia that provides the ability to set your Theme to Dyslexia view. To enable dyslexia support mode, follow these steps: + +1. Open an assignment. + +2. In the upper right corner, and select the **Settings** icon (gear) and choose **Theme > Dyslexic**. + +.. figure:: /img/settings.png + :alt: Dsylexia Theme + +When enabled, the screen is displayed in Dyslexia View. + +.. image:: /img/dyslexicview.png + :alt: Dyslexia View + + + diff --git a/docs/_static/__init__.py b/docs/_static/__init__.py new file mode 100644 index 00000000..e83c75fe --- /dev/null +++ b/docs/_static/__init__.py @@ -0,0 +1,233 @@ +__version__ = '0.5.5' + +from docutils.parsers.rst import directives +from docutils import nodes +from sphinx.directives.code import CodeBlock +from sphinx.util.docutils import SphinxDirective +from sphinx.util.fileutil import copy_asset_file + +import os + +try: + from sphinx.util.texescape import escape as latex_escape +except ImportError: # ancient sphinx: + from sphinx.util.texescape import tex_escape_map + + def latex_escape(s, latex_engine): + return s.translate(tex_escape_map) + + +CSS_FILE = "code-tabs.css" +JS_FILE = "code-tabs.js" +STY_FILE = "tabenv.sty" + +_html_builders = [ + "html", + "singlehtml", + "dirhtml", + "readthedocs", + "readthedocsdirhtml", + "readthedocssinglehtml", + "readthedocssinglehtmllocalmedia", + "spelling", +] + +_latex_builders = [ + "latex", +] + + +class TabsNode(nodes.container): pass +class TabNode(nodes.container): pass +class TabBarNode(nodes.Part, nodes.Element): pass +class TabButtonNode(nodes.Part, nodes.Element): pass + + +class TabsDirective(SphinxDirective): + + """ + This directive is used to contain a group of code blocks which can be + selected as tabs of a single notebook. + """ + + final_argument_whitespace = True + required_arguments = 0 + optional_arguments = 1 + has_content = True + + def run(self): + self.assert_has_content() + + node = TabsNode() + node["classes"].append("tabs") + node["tabgroup"] = self.arguments[0] if self.arguments else None + + self.add_name(node) + self.state.nested_parse(self.content, self.content_offset, node) + + # Generate navbar: + if self.env.app.builder.name in _html_builders: + tabbar = TabBarNode() + tabbar["classes"].append("tabbar") + + selected = 0 + for i, tab in enumerate(node.children): + button = TabButtonNode() + button['classes'].append('tabbutton') + button['tabid'] = i + button.append(nodes.Text(tab["tabname"])) + tabbar.append(button) + if tab.get('selected'): + selected = i + + tabbar.children[selected]['classes'].append('selected') + node.children[selected]['classes'].append('selected') + node.insert(0, tabbar) + + return [node] + + +class TabDirective(SphinxDirective): + + option_spec = { + 'selected': directives.flag, + } + + final_argument_whitespace = True + required_arguments = 1 + optional_arguments = 0 + has_content = True + + def run(self): + index = len(self.state.parent.children) + + title = self.options.get('title') + if not title: + title = self.options.get('caption') + if not title and self.arguments: + title = self.arguments[0] + if not title: + title = "Tab {}".format(index + 1) + + node = TabNode() + node['tabid'] = index + node['tabname'] = title + node['selected'] = 'selected' in self.options + node['classes'].append('tab') + node += self.make_page(node) + + return [node] + + def make_page(self, node): + node['classes'].append("texttab") + page = nodes.container() + self.state.nested_parse(self.content, self.content_offset, page) + return page + + +class CodeTabDirective(CodeBlock): + + """Single code-block tab inside .. code-tabs.""" + + option_spec = CodeBlock.option_spec.copy() + option_spec.update({ + 'title': directives.unchanged, + 'selected': directives.flag, + }) + + run = TabDirective.run + + def make_page(self, node): + node['classes'].append("codetab") + if self.env.app.builder.name in _html_builders: + self.options.pop('caption', None) + else: + self.options.setdefault('caption', node['tabname']) + return super().run() + + +def visit_tabgroup_html(self, node): + self.body.append(self.starttag(node, 'div', **{ + 'data-tabgroup': node['tabgroup'] or '', + 'class': 'docutils container', + })) + + +def depart_tabgroup_html(self, node): + self.body.append('') + + +def visit_tabbar_html(self, node): + self.body.append(self.starttag(node, 'ul')) + + +def depart_tabbar_html(self, node): + self.body.append('') + + +def visit_tabbutton_html(self, node): + self.body.append(self.starttag(node, 'li', **{ + 'data-id': node['tabid'], + 'onclick': "sphinx_code_tabs_onclick(this)", + })) + + +def depart_tabbutton_html(self, node): + self.body.append('') + + +def visit_tab_html(self, node): + self.body.append(self.starttag(node, 'div', **{ + 'data-id': node['tabid'], + })) + + +def depart_tab_html(self, node): + self.body.append('') + + +def visit_tab_latex(self, node): + if 'texttab' in node['classes']: + self.body.append(r'\sphinxSetupCaptionForVerbatim{{{}}}'.format( + latex_escape(node['tabname'], self.config.latex_engine), + )) + self.body.append(r'\begin{tab}') + + +def depart_tab_latex(self, node): + if 'texttab' in node['classes']: + self.body.append(r'\end{tab}') + + +def add_assets(app): + package_dir = os.path.dirname(__file__) + app.config.html_static_path.append(package_dir) + app.add_css_file(CSS_FILE) + app.add_js_file(JS_FILE) + if app.builder.name in _latex_builders: + copy_asset_file( + os.path.join(package_dir, STY_FILE), + app.builder.outdir) + app.add_latex_package('tabenv') + + +def setup(app): + app.add_node(TabsNode, html=(visit_tabgroup_html, depart_tabgroup_html)) + app.add_node(TabBarNode, html=(visit_tabbar_html, depart_tabbar_html)) + app.add_node( + TabButtonNode, + html=(visit_tabbutton_html, depart_tabbutton_html)) + app.add_node( + TabNode, + html=(visit_tab_html, depart_tab_html), + latex=(visit_tab_latex, depart_tab_latex)) + app.add_directive("tabs", TabsDirective) + app.add_directive("tab", TabDirective) + app.add_directive("code-tabs", TabsDirective) + app.add_directive("code-tab", CodeTabDirective) + app.connect("builder-inited", add_assets) + + return { + "version": __version__, + "parallel_read_safe": True, + } diff --git a/docs/_static/__pycache__/__init__.cpython-38.pyc b/docs/_static/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 00000000..bfa9ab70 Binary files /dev/null and b/docs/_static/__pycache__/__init__.cpython-38.pyc differ diff --git a/docs/_static/basic.css b/docs/_static/basic.css new file mode 100644 index 00000000..10301e15 --- /dev/null +++ b/docs/_static/basic.css @@ -0,0 +1,904 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 270px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/_static/code-tabs.css b/docs/_static/code-tabs.css new file mode 100644 index 00000000..a6882945 --- /dev/null +++ b/docs/_static/code-tabs.css @@ -0,0 +1,62 @@ +div.tabs > ul.tabbar { + margin: 0; + padding: 0; + display: block; + list-style-type: none; + overflow: hidden; + border: none; + font-size: smaller; + color: #ffffff; +} + +div.tabs > ul.tabbar > li.tabbutton { + margin: 0 5px 0 0; + padding: 0px 10px; + display: block; + cursor: pointer; + font-weight: bold; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + border: 1px solid #e1e4e5; + border-bottom: none; + background-color: #888; + float: left; + outline: none; + transition: 0.3s; +} + +div.tabs > ul.tabbar > li.tabbutton:first-of-type { + margin-left: 2px; +} +div.tabs > ul.tabbar > li.tabbutton:last-of-type { + margin-right: 0; +} +div.tabs > ul.tabbar li.tabbutton:hover { + background-color: #606060; +} +div.tabs > ul.tabbar > li.tabbutton.selected { + background-color: #303030; + border-color: #4070a0; + border-size: 2px; +} +div.tabs > ul.tabbar > li.tabbutton.selected:hover { + background-color: #606060; +} + +div.tabs > div.codetab > div { + margin-top: 0; + margin-bottom: 24px; + border: 1px solid #e1e4e5; +} + +div.tabs > div.texttab > div { + padding: 12px; +} + +div.tabs > div.texttab > div > :last-child { + margin-bottom: 0; +} + +div.tabs > div.tab:not(.selected) { + display: none; +} diff --git a/docs/_static/code-tabs.js b/docs/_static/code-tabs.js new file mode 100644 index 00000000..d8283e77 --- /dev/null +++ b/docs/_static/code-tabs.js @@ -0,0 +1,29 @@ +const sphinx_code_tabs_onclick = function(clicked) { + const tabid = clicked.dataset.id; + const tabgroup = clicked.parentNode.parentNode.dataset.tabgroup; + const books = []; + + if (tabgroup) { + for (const book of document.querySelectorAll("div.tabs")) { + if (book.dataset.tabgroup == tabgroup) { + books.push(book); + } + } + } + else { + books.push(clicked.parentNode.parentNode); + } + + for (const book of books) { + const select = book.children[0]; + for (const button of select.children) { + button.classList.toggle('selected', button.dataset.id == tabid); + } + for (const page of book.children) { + if (page.hasAttribute('data-id')) { + page.classList.toggle('selected', page.dataset.id == tabid); + } + } + } + +}; diff --git a/docs/_static/css/codio.css b/docs/_static/css/codio.css new file mode 100644 index 00000000..9f96641c --- /dev/null +++ b/docs/_static/css/codio.css @@ -0,0 +1,227 @@ +:root { + --pst-color-active-navigation: 15, 162, 175; + --pst-color-toc-link: 02, 06, 78; +} + + +@import "./search.css"; + +.navbar { + background-color: #02064e !important; +} + +.footer { + background-color: #02064e !important; +} + +.footer .copyright { + color: #ffffff; + display: flex; + justify-content: center; +} + +.navbar .container-xl { + justify-content: center; +} + +.navbar .navbar-collapse { + flex-grow: 0; +} + +.navbar-dark-codio .navbar-nav a.nav-link { + color: #ffffff; + text-decoration: none; +} + +.navbar-dark-codio .navbar-nav a.nav-link:hover { + color: #0fa2af; +} + +.codio-tiles { + display: flex; + flex-direction: row; + flex-wrap: wrap; + overflow: hidden; + align-items: center; + justify-content: center; + padding-top: 30px; + padding-bottom: 30px; +} + +.codio-tile { + max-width: 320px; + height: 320px; + border-radius: 20px; + margin: 10px; + display: flex; + flex-direction: column; + text-decoration: none; +} + +.index-page .codio-tile { + flex: 1 0 30%; +} + +.student-page .codio-tile { + flex: 1 0 40%; +} + +.codio-tile:hover { + box-shadow: 0 0 40px #0fa2af; + text-decoration: none; +} + +.codio-tile:hover .codio-tile-information { + color: #0fa2af; +} + +.codio-tile:hover .codio-tile-link { + color: #0fa2af; +} + +.codio-tile-title { + color: #ffffff; + background-color: #019cab; + display: flex; + align-items: center; + border-radius: 20px 20px 0 0; + height: 30%; + padding: 0 20px; + font-size: 1.7em; +} + +.codio-tile-triangle-top { + height: 0; + border-top: 0px solid transparent; + border-right: 0 solid transparent; + border-left: 320px solid #019cab; + border-bottom: 15px solid transparent; +} + +.codio-tile-triangle-bottom { + height: 0; + border-top: 15px solid transparent; + border-right: 320px solid #ffffff; + border-left: 0 solid transparent; + border-bottom: 0px solid transparent; + margin-top: -15px; +} + +.codio-tile-information { + background-color: #ffffff; + display: flex; + justify-content: center; + align-items: center; + padding: 0 20px; + font-size: 1.3em; + flex: 1 0 50%; + color: #1e1e1e; +} + +.codio-tile-footer { + background-color: #ffffff; + display: flex; + border-radius: 0 0 20px 20px; + align-items: center; + height: 15%; +} + +.codio-tile-link { + margin-left: 20px; + color: #1e1e1e; + font-size: 1.4em; + font-weight: 600; +} + +.codio-tile-link-angle { + margin-left: 10px; + color: #1e1e1e; +} + +.codio-tile:hover .codio-tile-link-angle { + color: #019cab; +} + +.codio-title { + color: #ffffff; + font-size: 3.5em; + font-weight: 600; + justify-content: center; + display: flex; + margin-bottom: 30px; +} + +.toc-entry>.nav-link.active { + border-left: none; +} + +.toc-item .nav-item { + font-size: 1rem; +} + +.prev-next-bottom { + display: flex; + justify-content: space-between; +} + +.prev-next-bottom a.left-prev, .prev-next-bottom a.right-next { + padding: 5px; + border: 1px solid #019cab; + overflow-x: hidden; + border-radius: 20px; + text-decoration: none; + color: #019cab; + background-color: #ffffff; + + max-width: none; + font-size: 1rem; + font-weight: 600; + + display: flex; + flex: 0 0 48%; + justify-content: space-between; + align-items: center; +} + +.prev-next-bottom a.right-next { + color: #ffffff; + background-color: #019cab; +} + +.prev-next-bottom a.left-prev:before, .prev-next-bottom a.right-next:after { + display: none; +} + +.prev-next-bottom .left-prev-title { + padding-right: 4px; +} + +.prev-next-bottom .right-next-title { + padding-left: 8px; +} + +.toc-item .nav-link { + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 5px; + padding-bottom: 5px; + border-bottom: 1px solid #eee; +} + +.bd-sidebar .nav li>a { + display: flex; + align-items: center; + justify-content: space-between; + padding-top: 5px; + padding-bottom: 5px; + border-bottom: 1px solid #eee; +} + +.section-nav { + border-left: none; +} + +.bd-content a.reference { + font-weight: 600; +} diff --git a/docs/_static/css/custom_body.css b/docs/_static/css/custom_body.css new file mode 100644 index 00000000..5e9114f1 --- /dev/null +++ b/docs/_static/css/custom_body.css @@ -0,0 +1,19 @@ +body { + background-color: #02064e; +} + +.footer { + border-top: none; +} + +.container-xl .row { + justify-content: center; +} + +.container-xl .no-sidebar { + display: none !important; +} + +.container-xl .d-none { + display: none !important; +} diff --git a/docs/_static/css/custom_index.css b/docs/_static/css/custom_index.css new file mode 100644 index 00000000..f010d044 --- /dev/null +++ b/docs/_static/css/custom_index.css @@ -0,0 +1,6 @@ +@media (min-width: 1200px) { + .col-xl-8 { + flex: 0 0 91.66667% !important; + max-width: 91.66667% !important; + } +} diff --git a/docs/_static/css/index.a51115b1206b8cbfeff9cff2c3058b7d.css b/docs/_static/css/index.a51115b1206b8cbfeff9cff2c3058b7d.css new file mode 100644 index 00000000..551e19cc --- /dev/null +++ b/docs/_static/css/index.a51115b1206b8cbfeff9cff2c3058b7d.css @@ -0,0 +1,6 @@ +/*! + * Bootstrap v4.6.0 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors + * Copyright 2011-2021 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:540px;--breakpoint-md:720px;--breakpoint-lg:960px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans","Liberation Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-size:1rem;line-height:1.5;color:#212529;text-align:left}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;background-color:transparent}a:hover{color:#0056b3}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit;text-align:-webkit-match-parent}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:540px){.container,.container-sm{max-width:540px}}@media (min-width:720px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:960px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1400px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:540px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:720px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:960px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:539.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:719.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:959.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-row>.col>.valid-tooltip,.form-row>[class*=col-]>.valid-tooltip{left:5px}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;left:0;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-row>.col>.invalid-tooltip,.form-row>[class*=col-]>.invalid-tooltip{left:5px}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat,#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545'%3E%3Ccircle cx='6' cy='6' r='4.5'/%3E%3Cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3E%3Ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3E%3C/svg%3E") center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem) no-repeat}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:540px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary.focus,.btn-primary:focus,.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary.focus,.btn-secondary:focus,.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success.focus,.btn-success:focus,.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info.focus,.btn-info:focus,.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning.focus,.btn-warning:focus,.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger.focus,.btn-danger:focus,.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light.focus,.btn-light:focus,.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark.focus,.btn-dark:focus,.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:540px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:720px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:960px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>.custom-file:nth-last-child(n+3) .custom-file-label:after,.input-group.has-validation>.custom-select:nth-last-child(n+3),.input-group.has-validation>.form-control:nth-last-child(n+3),.input-group:not(.has-validation)>.custom-file:not(:last-child) .custom-file-label:after,.input-group:not(.has-validation)>.custom-select:not(:last-child),.input-group:not(.has-validation)>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.btn,.input-group.has-validation>.input-group-append:nth-last-child(n+3)>.input-group-text,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.btn,.input-group:not(.has-validation)>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;z-index:1;display:block;min-height:1.5rem;padding-left:1.5rem;color-adjust:exact}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label:before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label:before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before,.custom-control-input[disabled]~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label:before{pointer-events:none;background-color:#fff;border:1px solid #adb5bd}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background:50%/50% 50% no-repeat}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label:before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label:after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label:after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label:after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") right .75rem center/8px 10px no-repeat;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(1.5em + .75rem + 2px)}.custom-file-input{z-index:2;margin:0;overflow:hidden;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]:after{content:attr(data-browse)}.custom-file-label{left:0;z-index:1;height:calc(1.5em + .75rem + 2px);overflow:hidden;font-weight:400;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower,.custom-range::-ms-fill-upper{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label:before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label:before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item,.nav-fill>.nav-link{flex:1 1 auto;text-align:center}.nav-justified .nav-item,.nav-justified>.nav-link{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:50%/100% 100% no-repeat}.navbar-nav-scroll{max-height:75vh;overflow-y:auto}@media (max-width:539.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:540px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:719.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:720px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:959.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:960px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem;border-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:540px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:540px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:540px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion{overflow-anchor:none}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{float:left;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:540px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;z-index:2;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{height:1rem;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress,.progress-bar{display:flex;overflow:hidden}.progress-bar{flex-direction:column;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:540px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:720px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:960px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{flex-basis:350px;max-width:350px;font-size:.875rem;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:hsla(0,0%,100%,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05);border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:540px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered:before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:960px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,Liberation Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:50%/100% 100% no-repeat}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid;border-right:.25em solid transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{animation-duration:1.5s}}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:540px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:720px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:960px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:540px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:720px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:960px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:540px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:720px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:960px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:540px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:720px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:960px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:540px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:720px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:960px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:960px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}html{font-size:var(--pst-font-size-base);scroll-padding-top:calc(var(--pst-header-height) + 12px)}body{padding-top:calc(var(--pst-header-height) + 20px);background-color:#fff;font-family:var(--pst-font-family-base);font-weight:400;line-height:1.65;color:rgba(var(--pst-color-text-base),1)}p{margin-bottom:1.15rem;font-size:1em;color:rgba(var(--pst-color-paragraph),1)}p.rubric{border-bottom:1px solid #c9c9c9}a{color:rgba(var(--pst-color-link),1);text-decoration:none}a:hover{color:rgba(var(--pst-color-link-hover),1);text-decoration:underline}a.headerlink{color:rgba(var(--pst-color-headerlink),1);font-size:.8em;padding:0 4px;text-decoration:none}a.headerlink:hover{background-color:rgba(var(--pst-color-headerlink),1);color:rgba(var(--pst-color-headerlink-hover),1)}.heading-style,h1,h2,h3,h4,h5,h6{margin:2.75rem 0 1.05rem;font-family:var(--pst-font-family-heading);font-weight:400;line-height:1.15}h1{margin-top:0;font-size:var(--pst-font-size-h1);color:rgba(var(--pst-color-h1),1)}h2{font-size:var(--pst-font-size-h2);color:rgba(var(--pst-color-h2),1)}h3{font-size:var(--pst-font-size-h3);color:rgba(var(--pst-color-h3),1)}h4{font-size:var(--pst-font-size-h4);color:rgba(var(--pst-color-h4),1)}h5{font-size:var(--pst-font-size-h5);color:rgba(var(--pst-color-h5),1)}h6{font-size:var(--pst-font-size-h6);color:rgba(var(--pst-color-h6),1)}.text_small,small{font-size:var(--pst-font-size-milli)}hr{border:0;border-top:1px solid #e5e5e5}code,kbd,pre,samp{font-family:var(--pst-font-family-monospace)}code{color:rgba(var(--pst-color-inline-code),1)}pre{margin:1.5em 0;padding:10px;background-color:rgba(var(--pst-color-preformatted-background),1);color:rgba(var(--pst-color-preformatted-text),1);line-height:1.2em;border:1px solid #c9c9c9;box-shadow:1px 1px 1px #d8d8d8}.navbar{position:fixed;min-height:var(--pst-header-height);width:100%;padding:0}.navbar .container-xl{height:100%}@media (min-width:960px){.navbar #navbar-end>.navbar-end-item{display:inline-block}}.navbar-brand{position:relative;height:var(--pst-header-height);width:auto;padding:.5rem 0}.navbar-brand img{max-width:100%;height:100%;width:auto}.navbar-light{background:#fff!important;box-shadow:0 .125rem .25rem 0 rgba(0,0,0,.11)}.navbar-light .navbar-nav li a.nav-link{padding:0 .5rem;color:rgba(var(--pst-color-navbar-link),1)}.navbar-light .navbar-nav li a.nav-link:hover{color:rgba(var(--pst-color-navbar-link-hover),1)}.navbar-light .navbar-nav>.active>.nav-link{font-weight:600;color:rgba(var(--pst-color-navbar-link-active),1)}.navbar-dark-codio{background:#02064e!important;box-shadow:0 .125rem .25rem 0 rgba(0,0,0,.11)}.navbar-dark-codio .navbar-nav li a.nav-link{padding:0 .5rem;color:rgba(var(--pst-color-navbar-link),1)}.navbar-dark-codio .navbar-nav li a.nav-link:hover{color:rgba(var(--pst-color-navbar-link-hover),1)}.navbar-dark-codio .navbar-nav>.active>.nav-link{font-weight:600;color:rgba(var(--pst-color-navbar-link-active),1)}.navbar-header a{padding:0 15px}.admonition{margin:1.5625em auto;padding:0 .6rem .8rem!important;overflow:hidden;page-break-inside:avoid;border-left:.2rem solid;border-left-color:rgba(var(--pst-color-admonition-default),1);border-bottom-color:rgba(var(--pst-color-admonition-default),1);border-right-color:rgba(var(--pst-color-admonition-default),1);border-top-color:rgba(var(--pst-color-admonition-default),1);border-radius:.1rem;box-shadow:0 .2rem .5rem rgba(0,0,0,.05),0 0 .05rem rgba(0,0,0,.1);transition:color .25s,background-color .25s,border-color .25s}.admonition :last-child{margin-bottom:0}.admonition p.admonition-title~*{padding:0 1.4rem}.admonition>ol,.admonition>ul{margin-left:1em}.admonition .admonition-title{position:relative;margin:0 -.6rem!important;padding:.4rem .6rem .4rem 2rem;font-weight:700;background-color:rgba(var(--pst-color-admonition-default),.1)}.admonition .admonition-title:before{position:absolute;left:.6rem;width:1rem;height:1rem;color:rgba(var(--pst-color-admonition-default),1);font-family:Font Awesome\ 5 Free;font-weight:900;content:var(--pst-icon-admonition-default)}.admonition .admonition-title+*{margin-top:.4em}.admonition.attention{border-color:rgba(var(--pst-color-admonition-attention),1)}.admonition.attention .admonition-title{background-color:rgba(var(--pst-color-admonition-attention),.1)}.admonition.attention .admonition-title:before{color:rgba(var(--pst-color-admonition-attention),1);content:var(--pst-icon-admonition-attention)}.admonition.caution{border-color:rgba(var(--pst-color-admonition-caution),1)}.admonition.caution .admonition-title{background-color:rgba(var(--pst-color-admonition-caution),.1)}.admonition.caution .admonition-title:before{color:rgba(var(--pst-color-admonition-caution),1);content:var(--pst-icon-admonition-caution)}.admonition.warning{border-color:rgba(var(--pst-color-admonition-warning),1)}.admonition.warning .admonition-title{background-color:rgba(var(--pst-color-admonition-warning),.1)}.admonition.warning .admonition-title:before{color:rgba(var(--pst-color-admonition-warning),1);content:var(--pst-icon-admonition-warning)}.admonition.danger{border-color:rgba(var(--pst-color-admonition-danger),1)}.admonition.danger .admonition-title{background-color:rgba(var(--pst-color-admonition-danger),.1)}.admonition.danger .admonition-title:before{color:rgba(var(--pst-color-admonition-danger),1);content:var(--pst-icon-admonition-danger)}.admonition.error{border-color:rgba(var(--pst-color-admonition-error),1)}.admonition.error .admonition-title{background-color:rgba(var(--pst-color-admonition-error),.1)}.admonition.error .admonition-title:before{color:rgba(var(--pst-color-admonition-error),1);content:var(--pst-icon-admonition-error)}.admonition.hint{border-color:rgba(var(--pst-color-admonition-hint),1)}.admonition.hint .admonition-title{background-color:rgba(var(--pst-color-admonition-hint),.1)}.admonition.hint .admonition-title:before{color:rgba(var(--pst-color-admonition-hint),1);content:var(--pst-icon-admonition-hint)}.admonition.tip{border-color:rgba(var(--pst-color-admonition-tip),1)}.admonition.tip .admonition-title{background-color:rgba(var(--pst-color-admonition-tip),.1)}.admonition.tip .admonition-title:before{color:rgba(var(--pst-color-admonition-tip),1);content:var(--pst-icon-admonition-tip)}.admonition.important{border-color:rgba(var(--pst-color-admonition-important),1)}.admonition.important .admonition-title{background-color:rgba(var(--pst-color-admonition-important),.1)}.admonition.important .admonition-title:before{color:rgba(var(--pst-color-admonition-important),1);content:var(--pst-icon-admonition-important)}.admonition.note{border-color:rgba(var(--pst-color-admonition-note),1)}.admonition.note .admonition-title{background-color:rgba(var(--pst-color-admonition-note),.1)}.admonition.note .admonition-title:before{color:rgba(var(--pst-color-admonition-note),1);content:var(--pst-icon-admonition-note)}div.deprecated{margin-bottom:10px;margin-top:10px;padding:7px;background-color:#f3e5e5;border:1px solid #eed3d7;border-radius:.5rem}div.deprecated p{color:#b94a48;display:inline}.topic{background-color:#eee}.seealso dd{margin-top:0;margin-bottom:0}.viewcode-back{font-family:var(--pst-font-family-base)}.viewcode-block:target{background-color:#f4debf;border-top:1px solid #ac9;border-bottom:1px solid #ac9}span.guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}table.field-list{border-collapse:separate;border-spacing:10px;margin-left:1px}table.field-list th.field-name{padding:1px 8px 1px 5px;white-space:nowrap;background-color:#eee}table.field-list td.field-body p{font-style:italic}table.field-list td.field-body p>strong{font-style:normal}table.field-list td.field-body blockquote{border-left:none;margin:0 0 .3em;padding-left:30px}.table.autosummary td:first-child{white-space:nowrap}footer{width:100%;border-top:1px solid #ccc;padding:10px}footer .footer-item p{margin-bottom:0}.bd-search{position:relative;padding:1rem 15px;margin-right:-15px;margin-left:-15px}.bd-search .icon{position:absolute;color:#a4a6a7;left:25px;top:25px}.bd-search input{border-radius:0;border:0;border-bottom:1px solid #e5e5e5;padding-left:35px}.bd-toc{-ms-flex-order:2;order:2;height:calc(100vh - 2rem);overflow-y:auto}@supports (position:-webkit-sticky) or (position:sticky){.bd-toc{position:-webkit-sticky;position:sticky;top:calc(var(--pst-header-height) + 20px);height:calc(100vh - 5rem);overflow-y:auto}}.bd-toc .onthispage{color:#a4a6a7}.section-nav{padding-left:0;border-left:1px solid #eee;border-bottom:none}.section-nav ul{padding-left:1rem}.toc-entry,.toc-entry a{display:block}.toc-entry a{padding:.125rem 1.5rem;color:rgba(var(--pst-color-toc-link),1)}@media (min-width:1200px){.toc-entry a{padding-right:0}}.toc-entry a:hover{color:rgba(var(--pst-color-toc-link-hover),1);text-decoration:none}.bd-sidebar{padding-top:1em}@media (min-width:720px){.bd-sidebar{border-right:1px solid rgba(0,0,0,.1)}@supports (position:-webkit-sticky) or (position:sticky){.bd-sidebar{position:-webkit-sticky;position:sticky;top:calc(var(--pst-header-height) + 20px);z-index:1000;height:calc(100vh - var(--pst-header-height) - 20px)}}}.bd-sidebar.no-sidebar{border-right:0}.bd-links{padding-top:1rem;padding-bottom:1rem;margin-right:-15px;margin-left:-15px}@media (min-width:720px){.bd-links{display:block!important}@supports (position:-webkit-sticky) or (position:sticky){.bd-links{max-height:calc(100vh - 11rem);overflow-y:auto}}}.bd-sidenav{display:none}.bd-content{padding-top:20px}.bd-content .section{max-width:100%}.bd-content .section table{display:block;overflow:auto}.bd-toc-link{display:block;padding:.25rem 1.5rem;font-weight:600;color:rgba(0,0,0,.65)}.bd-toc-link:hover{color:rgba(0,0,0,.85);text-decoration:none}.bd-toc-item.active{margin-bottom:1rem}.bd-toc-item.active:not(:first-child){margin-top:1rem}.bd-toc-item.active>.bd-toc-link{color:rgba(0,0,0,.85)}.bd-toc-item.active>.bd-toc-link:hover{background-color:transparent}.bd-toc-item.active>.bd-sidenav{display:block}nav.bd-links p.caption{font-size:var(--pst-sidebar-caption-font-size);text-transform:uppercase;font-weight:700;position:relative;margin-top:1.25em;margin-bottom:.5em;padding:0 1.5rem;color:rgba(var(--pst-color-sidebar-caption),1)}nav.bd-links p.caption:first-child{margin-top:0}.bd-sidebar .nav{font-size:var(--pst-sidebar-font-size)}.bd-sidebar .nav ul{list-style:none;padding:0 0 0 1.5rem}.bd-sidebar .nav li>a{display:block;padding:.25rem 1.5rem;color:rgba(var(--pst-color-sidebar-link),1)}.bd-sidebar .nav li>a:hover{color:rgba(var(--pst-color-sidebar-link-hover),1);text-decoration:none;background-color:transparent}.bd-sidebar .nav li>a.reference.external:after{font-family:Font Awesome\ 5 Free;font-weight:900;content:"\f35d";font-size:.75em;margin-left:.3em}.bd-sidebar .nav .active:hover>a,.bd-sidebar .nav .active>a{font-weight:600;color:rgba(var(--pst-color-sidebar-link-active),1)}.toc-h2{font-size:.85rem}.toc-h3{font-size:.75rem}.toc-h4{font-size:.65rem}.toc-entry>.nav-link.active{font-weight:600;color:#130654;color:rgba(var(--pst-color-toc-link-active),1);background-color:transparent;border-left:2px solid rgba(var(--pst-color-toc-link-active),1)}.nav-link:hover{border-style:none}#navbar-main-elements li.nav-item i{font-size:.7rem;padding-left:2px;vertical-align:middle}.bd-toc .nav .nav{display:none}.bd-toc .nav .nav.visible,.bd-toc .nav>.active>ul{display:block}.prev-next-bottom{margin:20px 0}.prev-next-bottom a.left-prev,.prev-next-bottom a.right-next{padding:10px;border:1px solid rgba(0,0,0,.2);max-width:45%;overflow-x:hidden;color:rgba(0,0,0,.65)}.prev-next-bottom a.left-prev{float:left}.prev-next-bottom a.left-prev:before{content:"<< "}.prev-next-bottom a.right-next{float:right}.prev-next-bottom a.right-next:after{content:" >>"}.alert{padding-bottom:0}.alert-info a{color:#e83e8c}#navbar-icon-links i.fa,#navbar-icon-links i.fab,#navbar-icon-links i.far,#navbar-icon-links i.fas{vertical-align:middle;font-style:normal;font-size:1.5rem;line-height:1.25}#navbar-icon-links i.fa-github-square:before{color:#333}#navbar-icon-links i.fa-twitter-square:before{color:#55acee}#navbar-icon-links i.fa-gitlab:before{color:#548}#navbar-icon-links i.fa-bitbucket:before{color:#0052cc}.tocsection{border-left:1px solid #eee;padding:.3rem 1.5rem}.tocsection i{padding-right:.5rem}.editthispage{padding-top:2rem}.editthispage a{color:#130754}.xr-wrap[hidden]{display:block!important}.toctree-checkbox{position:absolute;display:none}.toctree-checkbox~ul{display:none}.toctree-checkbox~label i{transform:rotate(0deg)}.toctree-checkbox:checked~ul{display:block}.toctree-checkbox:checked~label i{transform:rotate(180deg)}.bd-sidebar li{position:relative}.bd-sidebar label{position:absolute;top:0;right:0;height:30px;width:30px;cursor:pointer;display:flex;justify-content:center;align-items:center}.bd-sidebar label:hover{background:rgba(var(--pst-color-sidebar-expander-background-hover),1)}.bd-sidebar label i{display:inline-block;font-size:.75rem;text-align:center}.bd-sidebar label i:hover{color:rgba(var(--pst-color-sidebar-link-hover),1)}.bd-sidebar li.has-children>.reference{padding-right:30px}div.doctest>div.highlight span.gp,span.linenos,table.highlighttable td.linenos{user-select:none!important;-webkit-user-select:text!important;-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important} \ No newline at end of file diff --git a/docs/_static/css/search.css b/docs/_static/css/search.css new file mode 100644 index 00000000..143ad42b --- /dev/null +++ b/docs/_static/css/search.css @@ -0,0 +1,20 @@ +.bd-search-codio .icon { + right: 30px; + left: auto; + position: relative; +} + +.bd-search-codio input { + padding-left: 14px; + border-radius: 20px; +} + +/* clears the 'X' from Internet Explorer */ +.bd-search-codio input[type=search]::-ms-clear { display: none; width : 0; height: 0; } +.bd-search-codio input[type=search]::-ms-reveal { display: none; width : 0; height: 0; } + +/* clears the 'X' from Chrome */ +.bd-search-codio input[type="search"]::-webkit-search-decoration, +.bd-search-codio input[type="search"]::-webkit-search-cancel-button, +.bd-search-codio input[type="search"]::-webkit-search-results-button, +.bd-search-codio input[type="search"]::-webkit-search-results-decoration { display: none; } diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css new file mode 100644 index 00000000..e49d03fd --- /dev/null +++ b/docs/_static/css/theme.css @@ -0,0 +1,118 @@ +:root { + /***************************************************************************** + * Theme config + **/ + --pst-header-height: 60px; + + /***************************************************************************** + * Font size + **/ + --pst-font-size-base: 15px; /* base font size - applied at body / html level */ + + /* heading font sizes */ + --pst-font-size-h1: 36px; + --pst-font-size-h2: 32px; + --pst-font-size-h3: 26px; + --pst-font-size-h4: 21px; + --pst-font-size-h5: 18px; + --pst-font-size-h6: 16px; + + /* smaller then heading font sizes*/ + --pst-font-size-milli: 12px; + + --pst-sidebar-font-size: .9em; + --pst-sidebar-caption-font-size: .9em; + + /***************************************************************************** + * Font family + **/ + /* These are adapted from https://systemfontstack.com/ */ + --pst-font-family-base-system: -apple-system, BlinkMacSystemFont, Segoe UI, "Helvetica Neue", + Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; + --pst-font-family-monospace-system: "SFMono-Regular", Menlo, Consolas, Monaco, + Liberation Mono, Lucida Console, monospace; + + --pst-font-family-base: var(--pst-font-family-base-system); + --pst-font-family-heading: var(--pst-font-family-base); + --pst-font-family-monospace: var(--pst-font-family-monospace-system); + + /***************************************************************************** + * Color + * + * Colors are defined in rgb string way, "red, green, blue" + **/ + --pst-color-primary: 19, 6, 84; + --pst-color-success: 40, 167, 69; + --pst-color-info: 0, 123, 255; /*23, 162, 184;*/ + --pst-color-warning: 255, 193, 7; + --pst-color-danger: 220, 53, 69; + --pst-color-text-base: 51, 51, 51; + + --pst-color-h1: var(--pst-color-primary); + --pst-color-h2: var(--pst-color-primary); + --pst-color-h3: var(--pst-color-text-base); + --pst-color-h4: var(--pst-color-text-base); + --pst-color-h5: var(--pst-color-text-base); + --pst-color-h6: var(--pst-color-text-base); + --pst-color-paragraph: var(--pst-color-text-base); + --pst-color-link: 0, 91, 129; + --pst-color-link-hover: 227, 46, 0; + --pst-color-headerlink: 198, 15, 15; + --pst-color-headerlink-hover: 255, 255, 255; + --pst-color-preformatted-text: 34, 34, 34; + --pst-color-preformatted-background: 250, 250, 250; + --pst-color-inline-code: 232, 62, 140; + + --pst-color-active-navigation: 19, 6, 84; + --pst-color-navbar-active: 01, 123, 149; + --pst-color-navbar-link: 255, 255, 255; + --pst-color-navbar-link-hover: var(--pst-color-navbar-active); + --pst-color-navbar-link-active: var(--pst-color-navbar-active); + --pst-color-sidebar-link: 77, 77, 77; + --pst-color-sidebar-link-hover: var(--pst-color-active-navigation); + --pst-color-sidebar-link-active: var(--pst-color-active-navigation); + --pst-color-sidebar-expander-background-hover: 244, 244, 244; + --pst-color-sidebar-caption: 77, 77, 77; + --pst-color-toc-link: 119, 117, 122; + --pst-color-toc-link-hover: var(--pst-color-active-navigation); + --pst-color-toc-link-active: var(--pst-color-active-navigation); + + /***************************************************************************** + * Icon + **/ + + /* font awesome icons*/ + --pst-icon-check-circle: '\f058'; + --pst-icon-info-circle: '\f05a'; + --pst-icon-exclamation-triangle: '\f071'; + --pst-icon-exclamation-circle: '\f06a'; + --pst-icon-times-circle: '\f057'; + --pst-icon-lightbulb: '\f0eb'; + + /***************************************************************************** + * Admonitions + **/ + + --pst-color-admonition-default: var(--pst-color-info); + --pst-color-admonition-note: var(--pst-color-info); + --pst-color-admonition-attention: var(--pst-color-warning); + --pst-color-admonition-caution: var(--pst-color-warning); + --pst-color-admonition-warning: var(--pst-color-warning); + --pst-color-admonition-danger: var(--pst-color-danger); + --pst-color-admonition-error: var(--pst-color-danger); + --pst-color-admonition-hint: var(--pst-color-success); + --pst-color-admonition-tip: var(--pst-color-success); + --pst-color-admonition-important: var(--pst-color-success); + + --pst-icon-admonition-default: var(--pst-icon-info-circle); + --pst-icon-admonition-note: var(--pst-icon-info-circle); + --pst-icon-admonition-attention: var(--pst-icon-exclamation-circle); + --pst-icon-admonition-caution: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-warning: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-danger: var(--pst-icon-exclamation-triangle); + --pst-icon-admonition-error: var(--pst-icon-times-circle); + --pst-icon-admonition-hint: var(--pst-icon-lightbulb); + --pst-icon-admonition-tip: var(--pst-icon-lightbulb); + --pst-icon-admonition-important: var(--pst-icon-exclamation-circle); + +} diff --git a/docs/_static/doctools.js b/docs/_static/doctools.js new file mode 100644 index 00000000..8cbf1b16 --- /dev/null +++ b/docs/_static/doctools.js @@ -0,0 +1,323 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey + && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js new file mode 100644 index 00000000..75b5cf13 --- /dev/null +++ b/docs/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: true +}; \ No newline at end of file diff --git a/docs/_static/file.png b/docs/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/docs/_static/file.png differ diff --git a/docs/_static/img/CodioLibTags.png b/docs/_static/img/CodioLibTags.png new file mode 100644 index 00000000..b3a8bd0f Binary files /dev/null and b/docs/_static/img/CodioLibTags.png differ diff --git a/docs/_static/img/access-bower.png b/docs/_static/img/access-bower.png new file mode 100644 index 00000000..d86ccd73 Binary files /dev/null and b/docs/_static/img/access-bower.png differ diff --git a/docs/_static/img/accessgrades.png b/docs/_static/img/accessgrades.png new file mode 100644 index 00000000..16e0cf2a Binary files /dev/null and b/docs/_static/img/accessgrades.png differ diff --git a/docs/_static/img/account_billing.png b/docs/_static/img/account_billing.png new file mode 100644 index 00000000..ae756dd1 Binary files /dev/null and b/docs/_static/img/account_billing.png differ diff --git a/docs/_static/img/account_password.png b/docs/_static/img/account_password.png new file mode 100644 index 00000000..6fcfba63 Binary files /dev/null and b/docs/_static/img/account_password.png differ diff --git a/docs/_static/img/account_settings.png b/docs/_static/img/account_settings.png new file mode 100644 index 00000000..137352e1 Binary files /dev/null and b/docs/_static/img/account_settings.png differ diff --git a/docs/_static/img/actionarea.png b/docs/_static/img/actionarea.png new file mode 100644 index 00000000..628e6c14 Binary files /dev/null and b/docs/_static/img/actionarea.png differ diff --git a/docs/_static/img/addFromLib.png b/docs/_static/img/addFromLib.png new file mode 100644 index 00000000..627fe9e2 Binary files /dev/null and b/docs/_static/img/addFromLib.png differ diff --git a/docs/_static/img/adjusted.png b/docs/_static/img/adjusted.png new file mode 100644 index 00000000..7c711546 Binary files /dev/null and b/docs/_static/img/adjusted.png differ diff --git a/docs/_static/img/anon-create.png b/docs/_static/img/anon-create.png new file mode 100644 index 00000000..5bde26fc Binary files /dev/null and b/docs/_static/img/anon-create.png differ diff --git a/docs/_static/img/assessment.png b/docs/_static/img/assessment.png new file mode 100644 index 00000000..f49604fc Binary files /dev/null and b/docs/_static/img/assessment.png differ diff --git a/docs/_static/img/assessmentpoints.png b/docs/_static/img/assessmentpoints.png new file mode 100644 index 00000000..d768e4b8 Binary files /dev/null and b/docs/_static/img/assessmentpoints.png differ diff --git a/docs/_static/img/assessmenttoken.png b/docs/_static/img/assessmenttoken.png new file mode 100644 index 00000000..538a222e Binary files /dev/null and b/docs/_static/img/assessmenttoken.png differ diff --git a/docs/_static/img/assign-module.png b/docs/_static/img/assign-module.png new file mode 100644 index 00000000..4c6c9652 Binary files /dev/null and b/docs/_static/img/assign-module.png differ diff --git a/docs/_static/img/authtoken.png b/docs/_static/img/authtoken.png new file mode 100644 index 00000000..989f7f7d Binary files /dev/null and b/docs/_static/img/authtoken.png differ diff --git a/docs/_static/img/auto-transfer-total.png b/docs/_static/img/auto-transfer-total.png new file mode 100644 index 00000000..3ec11d18 Binary files /dev/null and b/docs/_static/img/auto-transfer-total.png differ diff --git a/docs/_static/img/autoComplete.png b/docs/_static/img/autoComplete.png new file mode 100644 index 00000000..9aec0195 Binary files /dev/null and b/docs/_static/img/autoComplete.png differ diff --git a/docs/_static/img/autograde-test.png b/docs/_static/img/autograde-test.png new file mode 100644 index 00000000..821926eb Binary files /dev/null and b/docs/_static/img/autograde-test.png differ diff --git a/docs/_static/img/bloomsTax.png b/docs/_static/img/bloomsTax.png new file mode 100644 index 00000000..367072ad Binary files /dev/null and b/docs/_static/img/bloomsTax.png differ diff --git a/docs/_static/img/book-permissions.png b/docs/_static/img/book-permissions.png new file mode 100644 index 00000000..25e48dd0 Binary files /dev/null and b/docs/_static/img/book-permissions.png differ diff --git a/docs/_static/img/book_publish.png b/docs/_static/img/book_publish.png new file mode 100644 index 00000000..3be16e64 Binary files /dev/null and b/docs/_static/img/book_publish.png differ diff --git a/docs/_static/img/book_stack_modified.png b/docs/_static/img/book_stack_modified.png new file mode 100644 index 00000000..f867408a Binary files /dev/null and b/docs/_static/img/book_stack_modified.png differ diff --git a/docs/_static/img/book_stack_newstack.png b/docs/_static/img/book_stack_newstack.png new file mode 100644 index 00000000..2e7597dd Binary files /dev/null and b/docs/_static/img/book_stack_newstack.png differ diff --git a/docs/_static/img/book_stack_newversion.png b/docs/_static/img/book_stack_newversion.png new file mode 100644 index 00000000..cdf01710 Binary files /dev/null and b/docs/_static/img/book_stack_newversion.png differ diff --git a/docs/_static/img/book_stack_notmodified.png b/docs/_static/img/book_stack_notmodified.png new file mode 100644 index 00000000..e09f49c5 Binary files /dev/null and b/docs/_static/img/book_stack_notmodified.png differ diff --git a/docs/_static/img/bookmapping.png b/docs/_static/img/bookmapping.png new file mode 100644 index 00000000..5a1eaea0 Binary files /dev/null and b/docs/_static/img/bookmapping.png differ diff --git a/docs/_static/img/bookpages.png b/docs/_static/img/bookpages.png new file mode 100644 index 00000000..579f5885 Binary files /dev/null and b/docs/_static/img/bookpages.png differ diff --git a/docs/_static/img/booksettings.png b/docs/_static/img/booksettings.png new file mode 100644 index 00000000..2ad77696 Binary files /dev/null and b/docs/_static/img/booksettings.png differ diff --git a/docs/_static/img/booksettingspage.png b/docs/_static/img/booksettingspage.png new file mode 100644 index 00000000..efad8f90 Binary files /dev/null and b/docs/_static/img/booksettingspage.png differ diff --git a/docs/_static/img/bookshowallpages.png b/docs/_static/img/bookshowallpages.png new file mode 100644 index 00000000..36535639 Binary files /dev/null and b/docs/_static/img/bookshowallpages.png differ diff --git a/docs/_static/img/bookslist.png b/docs/_static/img/bookslist.png new file mode 100644 index 00000000..9693afd8 Binary files /dev/null and b/docs/_static/img/bookslist.png differ diff --git a/docs/_static/img/bookupdate.png b/docs/_static/img/bookupdate.png new file mode 100644 index 00000000..c0ea2ae2 Binary files /dev/null and b/docs/_static/img/bookupdate.png differ diff --git a/docs/_static/img/bookupdate1.png b/docs/_static/img/bookupdate1.png new file mode 100644 index 00000000..24eaee33 Binary files /dev/null and b/docs/_static/img/bookupdate1.png differ diff --git a/docs/_static/img/bookversion.png b/docs/_static/img/bookversion.png new file mode 100644 index 00000000..90d6b92e Binary files /dev/null and b/docs/_static/img/bookversion.png differ diff --git a/docs/_static/img/bower-components-tree.png b/docs/_static/img/bower-components-tree.png new file mode 100644 index 00000000..5d0846f0 Binary files /dev/null and b/docs/_static/img/bower-components-tree.png differ diff --git a/docs/_static/img/bower-installable.png b/docs/_static/img/bower-installable.png new file mode 100644 index 00000000..eca62b32 Binary files /dev/null and b/docs/_static/img/bower-installable.png differ diff --git a/docs/_static/img/bower-installed.png b/docs/_static/img/bower-installed.png new file mode 100644 index 00000000..0d9db0f7 Binary files /dev/null and b/docs/_static/img/bower-installed.png differ diff --git a/docs/_static/img/bower-remove.png b/docs/_static/img/bower-remove.png new file mode 100644 index 00000000..3a71ac77 Binary files /dev/null and b/docs/_static/img/bower-remove.png differ diff --git a/docs/_static/img/bower-update.png b/docs/_static/img/bower-update.png new file mode 100644 index 00000000..11269955 Binary files /dev/null and b/docs/_static/img/bower-update.png differ diff --git a/docs/_static/img/box_info.png b/docs/_static/img/box_info.png new file mode 100644 index 00000000..268b72fb Binary files /dev/null and b/docs/_static/img/box_info.png differ diff --git a/docs/_static/img/build.png b/docs/_static/img/build.png new file mode 100644 index 00000000..73850130 Binary files /dev/null and b/docs/_static/img/build.png differ diff --git a/docs/_static/img/buildkeys.png b/docs/_static/img/buildkeys.png new file mode 100644 index 00000000..795fe388 Binary files /dev/null and b/docs/_static/img/buildkeys.png differ diff --git a/docs/_static/img/buildset2.png b/docs/_static/img/buildset2.png new file mode 100644 index 00000000..2b7fd4da Binary files /dev/null and b/docs/_static/img/buildset2.png differ diff --git a/docs/_static/img/buildsettings.png b/docs/_static/img/buildsettings.png new file mode 100644 index 00000000..d369b4e9 Binary files /dev/null and b/docs/_static/img/buildsettings.png differ diff --git a/docs/_static/img/ca-annotations-file.png b/docs/_static/img/ca-annotations-file.png new file mode 100644 index 00000000..fca48d32 Binary files /dev/null and b/docs/_static/img/ca-annotations-file.png differ diff --git a/docs/_static/img/ca-collapse-after.png b/docs/_static/img/ca-collapse-after.png new file mode 100644 index 00000000..fa4dfefe Binary files /dev/null and b/docs/_static/img/ca-collapse-after.png differ diff --git a/docs/_static/img/ca-collapse-before.png b/docs/_static/img/ca-collapse-before.png new file mode 100644 index 00000000..9ffd6762 Binary files /dev/null and b/docs/_static/img/ca-collapse-before.png differ diff --git a/docs/_static/img/ca-embed-ide.png b/docs/_static/img/ca-embed-ide.png new file mode 100644 index 00000000..d7fbcb4e Binary files /dev/null and b/docs/_static/img/ca-embed-ide.png differ diff --git a/docs/_static/img/ca-explore.png b/docs/_static/img/ca-explore.png new file mode 100644 index 00000000..12ccd58a Binary files /dev/null and b/docs/_static/img/ca-explore.png differ diff --git a/docs/_static/img/ca-files.png b/docs/_static/img/ca-files.png new file mode 100644 index 00000000..a1a20b0c Binary files /dev/null and b/docs/_static/img/ca-files.png differ diff --git a/docs/_static/img/ca-overview.png b/docs/_static/img/ca-overview.png new file mode 100644 index 00000000..b8377c15 Binary files /dev/null and b/docs/_static/img/ca-overview.png differ diff --git a/docs/_static/img/ca-popup-window.png b/docs/_static/img/ca-popup-window.png new file mode 100644 index 00000000..b8d29458 Binary files /dev/null and b/docs/_static/img/ca-popup-window.png differ diff --git a/docs/_static/img/ca-readme.png b/docs/_static/img/ca-readme.png new file mode 100644 index 00000000..d69936d8 Binary files /dev/null and b/docs/_static/img/ca-readme.png differ diff --git a/docs/_static/img/ca-video.png b/docs/_static/img/ca-video.png new file mode 100644 index 00000000..4bee1853 Binary files /dev/null and b/docs/_static/img/ca-video.png differ diff --git a/docs/_static/img/changereleasegrades.png b/docs/_static/img/changereleasegrades.png new file mode 100644 index 00000000..3577ecad Binary files /dev/null and b/docs/_static/img/changereleasegrades.png differ diff --git a/docs/_static/img/chromecookies.png b/docs/_static/img/chromecookies.png new file mode 100644 index 00000000..070eb055 Binary files /dev/null and b/docs/_static/img/chromecookies.png differ diff --git a/docs/_static/img/class-releasegrades.png b/docs/_static/img/class-releasegrades.png new file mode 100644 index 00000000..3577ecad Binary files /dev/null and b/docs/_static/img/class-releasegrades.png differ diff --git a/docs/_static/img/class_add_module.png b/docs/_static/img/class_add_module.png new file mode 100644 index 00000000..685d4563 Binary files /dev/null and b/docs/_static/img/class_add_module.png differ diff --git a/docs/_static/img/class_addstudents.png b/docs/_static/img/class_addstudents.png new file mode 100644 index 00000000..f2ad1d80 Binary files /dev/null and b/docs/_static/img/class_addstudents.png differ diff --git a/docs/_static/img/class_addteachers.png b/docs/_static/img/class_addteachers.png new file mode 100644 index 00000000..f9f410e0 Binary files /dev/null and b/docs/_static/img/class_addteachers.png differ diff --git a/docs/_static/img/class_administration/addteachers/invitation.png b/docs/_static/img/class_administration/addteachers/invitation.png new file mode 100644 index 00000000..28555c76 Binary files /dev/null and b/docs/_static/img/class_administration/addteachers/invitation.png differ diff --git a/docs/_static/img/class_administration/addteachers/myschoolorg.png b/docs/_static/img/class_administration/addteachers/myschoolorg.png new file mode 100644 index 00000000..4b053eaf Binary files /dev/null and b/docs/_static/img/class_administration/addteachers/myschoolorg.png differ diff --git a/docs/_static/img/class_administration/asignmentsettings.png b/docs/_static/img/class_administration/asignmentsettings.png new file mode 100644 index 00000000..2e1a4926 Binary files /dev/null and b/docs/_static/img/class_administration/asignmentsettings.png differ diff --git a/docs/_static/img/class_administration/createanorganization/classteststudents.png b/docs/_static/img/class_administration/createanorganization/classteststudents.png new file mode 100644 index 00000000..2040f9df Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/classteststudents.png differ diff --git a/docs/_static/img/class_administration/createanorganization/completeform.png b/docs/_static/img/class_administration/createanorganization/completeform.png new file mode 100644 index 00000000..97fe235a Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/completeform.png differ diff --git a/docs/_static/img/class_administration/createanorganization/createorg.png b/docs/_static/img/class_administration/createanorganization/createorg.png new file mode 100644 index 00000000..dff0fed0 Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/createorg.png differ diff --git a/docs/_static/img/class_administration/createanorganization/org_teams.png b/docs/_static/img/class_administration/createanorganization/org_teams.png new file mode 100644 index 00000000..92359402 Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/org_teams.png differ diff --git a/docs/_static/img/class_administration/createanorganization/studentlogin.png b/docs/_static/img/class_administration/createanorganization/studentlogin.png new file mode 100644 index 00000000..61bbdd8d Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/studentlogin.png differ diff --git a/docs/_static/img/class_administration/createanorganization/test-student-view.png b/docs/_static/img/class_administration/createanorganization/test-student-view.png new file mode 100644 index 00000000..31436ab1 Binary files /dev/null and b/docs/_static/img/class_administration/createanorganization/test-student-view.png differ diff --git a/docs/_static/img/class_administration/editassignment.png b/docs/_static/img/class_administration/editassignment.png new file mode 100644 index 00000000..1f707aee Binary files /dev/null and b/docs/_static/img/class_administration/editassignment.png differ diff --git a/docs/_static/img/class_administration/editunit.png b/docs/_static/img/class_administration/editunit.png new file mode 100644 index 00000000..7414b8cc Binary files /dev/null and b/docs/_static/img/class_administration/editunit.png differ diff --git a/docs/_static/img/class_administration/grading/anongrading.png b/docs/_static/img/class_administration/grading/anongrading.png new file mode 100644 index 00000000..c6cff83d Binary files /dev/null and b/docs/_static/img/class_administration/grading/anongrading.png differ diff --git a/docs/_static/img/class_administration/grading/classroom.png b/docs/_static/img/class_administration/grading/classroom.png new file mode 100644 index 00000000..cb53cc8d Binary files /dev/null and b/docs/_static/img/class_administration/grading/classroom.png differ diff --git a/docs/_static/img/class_administration/grading/grading-template.png b/docs/_static/img/class_administration/grading/grading-template.png new file mode 100644 index 00000000..2fd3def4 Binary files /dev/null and b/docs/_static/img/class_administration/grading/grading-template.png differ diff --git a/docs/_static/img/class_administration/grading/set-template.png b/docs/_static/img/class_administration/grading/set-template.png new file mode 100644 index 00000000..0359765d Binary files /dev/null and b/docs/_static/img/class_administration/grading/set-template.png differ diff --git a/docs/_static/img/class_administration/grading/template-example.png b/docs/_static/img/class_administration/grading/template-example.png new file mode 100644 index 00000000..29586604 Binary files /dev/null and b/docs/_static/img/class_administration/grading/template-example.png differ diff --git a/docs/_static/img/class_administration/grading/templates.png b/docs/_static/img/class_administration/grading/templates.png new file mode 100644 index 00000000..1f7cee84 Binary files /dev/null and b/docs/_static/img/class_administration/grading/templates.png differ diff --git a/docs/_static/img/class_administration/indunitupdate.png b/docs/_static/img/class_administration/indunitupdate.png new file mode 100644 index 00000000..0646b731 Binary files /dev/null and b/docs/_static/img/class_administration/indunitupdate.png differ diff --git a/docs/_static/img/class_administration/modulesettings.png b/docs/_static/img/class_administration/modulesettings.png new file mode 100644 index 00000000..98cd7615 Binary files /dev/null and b/docs/_static/img/class_administration/modulesettings.png differ diff --git a/docs/_static/img/class_administration/navigatingcodio/myclassroom.png b/docs/_static/img/class_administration/navigatingcodio/myclassroom.png new file mode 100644 index 00000000..a3fddb51 Binary files /dev/null and b/docs/_static/img/class_administration/navigatingcodio/myclassroom.png differ diff --git a/docs/_static/img/class_administration/orgbilling.png b/docs/_static/img/class_administration/orgbilling.png new file mode 100644 index 00000000..194b36ad Binary files /dev/null and b/docs/_static/img/class_administration/orgbilling.png differ diff --git a/docs/_static/img/class_administration/profilepic.png b/docs/_static/img/class_administration/profilepic.png new file mode 100644 index 00000000..c69f02fc Binary files /dev/null and b/docs/_static/img/class_administration/profilepic.png differ diff --git a/docs/_static/img/class_administration/projectupdateunit.png b/docs/_static/img/class_administration/projectupdateunit.png new file mode 100644 index 00000000..8094f115 Binary files /dev/null and b/docs/_static/img/class_administration/projectupdateunit.png differ diff --git a/docs/_static/img/class_administration/stackupdate.png b/docs/_static/img/class_administration/stackupdate.png new file mode 100644 index 00000000..b2738ec9 Binary files /dev/null and b/docs/_static/img/class_administration/stackupdate.png differ diff --git a/docs/_static/img/class_administration/unit-settings-1.png b/docs/_static/img/class_administration/unit-settings-1.png new file mode 100644 index 00000000..9169d82e Binary files /dev/null and b/docs/_static/img/class_administration/unit-settings-1.png differ diff --git a/docs/_static/img/class_administration/unit-settings-2.png b/docs/_static/img/class_administration/unit-settings-2.png new file mode 100644 index 00000000..72145211 Binary files /dev/null and b/docs/_static/img/class_administration/unit-settings-2.png differ diff --git a/docs/_static/img/class_administration/unit-settings-dd.png b/docs/_static/img/class_administration/unit-settings-dd.png new file mode 100644 index 00000000..71f881d7 Binary files /dev/null and b/docs/_static/img/class_administration/unit-settings-dd.png differ diff --git a/docs/_static/img/class_administration/unit-settings-ddORIG.png b/docs/_static/img/class_administration/unit-settings-ddORIG.png new file mode 100644 index 00000000..c6452484 Binary files /dev/null and b/docs/_static/img/class_administration/unit-settings-ddORIG.png differ diff --git a/docs/_static/img/class_administration/updatedunits.png b/docs/_static/img/class_administration/updatedunits.png new file mode 100644 index 00000000..a86087d3 Binary files /dev/null and b/docs/_static/img/class_administration/updatedunits.png differ diff --git a/docs/_static/img/class_administration/updateunit.png b/docs/_static/img/class_administration/updateunit.png new file mode 100644 index 00000000..dce42207 Binary files /dev/null and b/docs/_static/img/class_administration/updateunit.png differ diff --git a/docs/_static/img/class_administration/updateunitadhoc.png b/docs/_static/img/class_administration/updateunitadhoc.png new file mode 100644 index 00000000..50967017 Binary files /dev/null and b/docs/_static/img/class_administration/updateunitadhoc.png differ diff --git a/docs/_static/img/class_administration/upgradecourse.png b/docs/_static/img/class_administration/upgradecourse.png new file mode 100644 index 00000000..6714a5bd Binary files /dev/null and b/docs/_static/img/class_administration/upgradecourse.png differ diff --git a/docs/_static/img/class_administration/upgradecoursedialog.png b/docs/_static/img/class_administration/upgradecoursedialog.png new file mode 100644 index 00000000..da5154a6 Binary files /dev/null and b/docs/_static/img/class_administration/upgradecoursedialog.png differ diff --git a/docs/_static/img/class_courses.png b/docs/_static/img/class_courses.png new file mode 100644 index 00000000..97c693e9 Binary files /dev/null and b/docs/_static/img/class_courses.png differ diff --git a/docs/_static/img/class_create.png b/docs/_static/img/class_create.png new file mode 100644 index 00000000..f5839e9f Binary files /dev/null and b/docs/_static/img/class_create.png differ diff --git a/docs/_static/img/class_dashboard.png b/docs/_static/img/class_dashboard.png new file mode 100644 index 00000000..60311999 Binary files /dev/null and b/docs/_static/img/class_dashboard.png differ diff --git a/docs/_static/img/class_delete.png b/docs/_static/img/class_delete.png new file mode 100644 index 00000000..4279712a Binary files /dev/null and b/docs/_static/img/class_delete.png differ diff --git a/docs/_static/img/class_export.png b/docs/_static/img/class_export.png new file mode 100644 index 00000000..41ddce5b Binary files /dev/null and b/docs/_static/img/class_export.png differ diff --git a/docs/_static/img/class_exportlinks.png b/docs/_static/img/class_exportlinks.png new file mode 100644 index 00000000..d92869f8 Binary files /dev/null and b/docs/_static/img/class_exportlinks.png differ diff --git a/docs/_static/img/class_grade.png b/docs/_static/img/class_grade.png new file mode 100644 index 00000000..afe7c622 Binary files /dev/null and b/docs/_static/img/class_grade.png differ diff --git a/docs/_static/img/class_join.png b/docs/_static/img/class_join.png new file mode 100644 index 00000000..befb68b2 Binary files /dev/null and b/docs/_static/img/class_join.png differ diff --git a/docs/_static/img/class_list.png b/docs/_static/img/class_list.png new file mode 100644 index 00000000..9b5148a2 Binary files /dev/null and b/docs/_static/img/class_list.png differ diff --git a/docs/_static/img/class_lti_export.png b/docs/_static/img/class_lti_export.png new file mode 100644 index 00000000..baac6107 Binary files /dev/null and b/docs/_static/img/class_lti_export.png differ diff --git a/docs/_static/img/class_projects.png b/docs/_static/img/class_projects.png new file mode 100644 index 00000000..accfe53e Binary files /dev/null and b/docs/_static/img/class_projects.png differ diff --git a/docs/_static/img/class_recent.png b/docs/_static/img/class_recent.png new file mode 100644 index 00000000..a839e894 Binary files /dev/null and b/docs/_static/img/class_recent.png differ diff --git a/docs/_static/img/class_releasegrades.png b/docs/_static/img/class_releasegrades.png new file mode 100644 index 00000000..7797dddd Binary files /dev/null and b/docs/_static/img/class_releasegrades.png differ diff --git a/docs/_static/img/class_setgrade.png b/docs/_static/img/class_setgrade.png new file mode 100644 index 00000000..31eaac90 Binary files /dev/null and b/docs/_static/img/class_setgrade.png differ diff --git a/docs/_static/img/class_start.png b/docs/_static/img/class_start.png new file mode 100644 index 00000000..96a6e7b8 Binary files /dev/null and b/docs/_static/img/class_start.png differ diff --git a/docs/_static/img/class_students.png b/docs/_static/img/class_students.png new file mode 100644 index 00000000..d5b41e6c Binary files /dev/null and b/docs/_static/img/class_students.png differ diff --git a/docs/_static/img/class_studentstab.png b/docs/_static/img/class_studentstab.png new file mode 100644 index 00000000..d60ed6b0 Binary files /dev/null and b/docs/_static/img/class_studentstab.png differ diff --git a/docs/_static/img/class_view.png b/docs/_static/img/class_view.png new file mode 100644 index 00000000..87197e78 Binary files /dev/null and b/docs/_static/img/class_view.png differ diff --git a/docs/_static/img/class_viewcode.png b/docs/_static/img/class_viewcode.png new file mode 100644 index 00000000..17377be4 Binary files /dev/null and b/docs/_static/img/class_viewcode.png differ diff --git a/docs/_static/img/classcontacturl.png b/docs/_static/img/classcontacturl.png new file mode 100644 index 00000000..1309aebd Binary files /dev/null and b/docs/_static/img/classcontacturl.png differ diff --git a/docs/_static/img/classunitsettings.png b/docs/_static/img/classunitsettings.png new file mode 100644 index 00000000..41fda06c Binary files /dev/null and b/docs/_static/img/classunitsettings.png differ diff --git a/docs/_static/img/clone-settings-warning.png b/docs/_static/img/clone-settings-warning.png new file mode 100644 index 00000000..edc4cf34 Binary files /dev/null and b/docs/_static/img/clone-settings-warning.png differ diff --git a/docs/_static/img/clone-settings.png b/docs/_static/img/clone-settings.png new file mode 100644 index 00000000..f10bb5dd Binary files /dev/null and b/docs/_static/img/clone-settings.png differ diff --git a/docs/_static/img/code-folding.png b/docs/_static/img/code-folding.png new file mode 100644 index 00000000..92245fdd Binary files /dev/null and b/docs/_static/img/code-folding.png differ diff --git a/docs/_static/img/codeplayback/CodePlayback1.gif b/docs/_static/img/codeplayback/CodePlayback1.gif new file mode 100644 index 00000000..3ccf5a35 Binary files /dev/null and b/docs/_static/img/codeplayback/CodePlayback1.gif differ diff --git a/docs/_static/img/codeplayback/CodePlayback2.gif b/docs/_static/img/codeplayback/CodePlayback2.gif new file mode 100644 index 00000000..37cb4a74 Binary files /dev/null and b/docs/_static/img/codeplayback/CodePlayback2.gif differ diff --git a/docs/_static/img/codesolution.png b/docs/_static/img/codesolution.png new file mode 100644 index 00000000..d75b08b2 Binary files /dev/null and b/docs/_static/img/codesolution.png differ diff --git a/docs/_static/img/codiofeedback.png b/docs/_static/img/codiofeedback.png new file mode 100644 index 00000000..cd3828c1 Binary files /dev/null and b/docs/_static/img/codiofeedback.png differ diff --git a/docs/_static/img/codioignore.png b/docs/_static/img/codioignore.png new file mode 100644 index 00000000..37f6da2c Binary files /dev/null and b/docs/_static/img/codioignore.png differ diff --git a/docs/_static/img/codiomenu.png b/docs/_static/img/codiomenu.png new file mode 100644 index 00000000..373e5276 Binary files /dev/null and b/docs/_static/img/codiomenu.png differ diff --git a/docs/_static/img/color-preview.png b/docs/_static/img/color-preview.png new file mode 100644 index 00000000..ddcc2b79 Binary files /dev/null and b/docs/_static/img/color-preview.png differ diff --git a/docs/_static/img/command-bar.png b/docs/_static/img/command-bar.png new file mode 100644 index 00000000..c9e7ee26 Binary files /dev/null and b/docs/_static/img/command-bar.png differ diff --git a/docs/_static/img/commentcode.png b/docs/_static/img/commentcode.png new file mode 100644 index 00000000..170998f2 Binary files /dev/null and b/docs/_static/img/commentcode.png differ diff --git a/docs/_static/img/compiled-files.png b/docs/_static/img/compiled-files.png new file mode 100644 index 00000000..827f4ce3 Binary files /dev/null and b/docs/_static/img/compiled-files.png differ diff --git a/docs/_static/img/complexLayoutIcon.png b/docs/_static/img/complexLayoutIcon.png new file mode 100644 index 00000000..2065accf Binary files /dev/null and b/docs/_static/img/complexLayoutIcon.png differ diff --git a/docs/_static/img/config.png b/docs/_static/img/config.png new file mode 100644 index 00000000..0cc486da Binary files /dev/null and b/docs/_static/img/config.png differ diff --git a/docs/_static/img/consent.png b/docs/_static/img/consent.png new file mode 100644 index 00000000..dca2d287 Binary files /dev/null and b/docs/_static/img/consent.png differ diff --git a/docs/_static/img/console-create.png b/docs/_static/img/console-create.png new file mode 100644 index 00000000..e7128e49 Binary files /dev/null and b/docs/_static/img/console-create.png differ diff --git a/docs/_static/img/console-createbutton.png b/docs/_static/img/console-createbutton.png new file mode 100644 index 00000000..c45edbcd Binary files /dev/null and b/docs/_static/img/console-createbutton.png differ diff --git a/docs/_static/img/console-find.png b/docs/_static/img/console-find.png new file mode 100644 index 00000000..74db4fb9 Binary files /dev/null and b/docs/_static/img/console-find.png differ diff --git a/docs/_static/jquery-3.5.1.js b/docs/_static/jquery-3.5.1.js new file mode 100644 index 00000000..50937333 --- /dev/null +++ b/docs/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +{% endmacro %} \ No newline at end of file diff --git a/docs/accessing-codio.html b/docs/accessing-codio.html new file mode 100644 index 00000000..401d947b --- /dev/null +++ b/docs/accessing-codio.html @@ -0,0 +1,330 @@ + + + + + + + + + Accessing Codio — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Accessing Codio

+
+
+
+

Join a Course

+

You can join a course directly from your LMS platform (such as Canvas, Blackboard, Moodle, etc.), or use a URL or token provided by your instructor.

+

If your school is not using an LMS platform, your instructor will provide you one of the following methods to join the course:

+
    +
  • Send you an invitation URL that you can copy and paste into your browser.

  • +
  • Send you a two-word token that you can enter on the Codio website using Join Course. Enter the token and click Next.

    +Auth token +
  • +
+

To access your course, log in to your Codio account and select Courses in the navigation pane.

+

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/admin.html b/docs/admin.html new file mode 100644 index 00000000..6900cd98 --- /dev/null +++ b/docs/admin.html @@ -0,0 +1,607 @@ + + + + + + + + + Admin — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Admin

+
+
+
+

Integrating with your LMS system (Canvas etc.)

+

Learning Tools Interoperability (LTI) is a standard for passing user, organization, and course information between learning management systems (tool consumers) and learning tools and tool providers, such as Codio.

+

Video: LMS Integration Overview

+

For more see:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/authoring.html b/docs/authoring.html new file mode 100644 index 00000000..93a3eb62 --- /dev/null +++ b/docs/authoring.html @@ -0,0 +1,665 @@ + + + + + + + + + Authoring — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Authoring

+
+
+
+

Introduction to Guides

+

Codio provides a powerful authoring tool called Guides you can use to create rich tutorial and instructional content as well as assessments. Here are a few of the key features.

+

From a Guides page you can:

+ +
+
+

Accessing Codio Guides

+

You can launch Guides and begin content authoring in one of the following ways:

+
    +
  • Click Tools->Guide->Edit in the menu.

  • +
  • Click the button at the top of the Filetree as shown below

    +Start Authoring +
  • +
+
+
+

Designing for Accessibility

+

Codio provides a range of tools to support Accessibility.

+
+

See:

+
+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common.html b/docs/common.html new file mode 100644 index 00000000..8442afe7 --- /dev/null +++ b/docs/common.html @@ -0,0 +1,809 @@ + + + + + + + + + Developing Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Developing Code

+
+
+
+

Projects

+

A project is a Ubuntu server and is commonly referred to as a box. You can create as many projects (boxes) as needed, and with sudo privileges, you can install and configure them however you want. Each project box is fully isolated from your other project boxes.

+

When opening a project, you are taken into the project server (box) and are presented with the Codio IDE. You can access the command line via a terminal window.

+
+
+

Project templates

+

Codio works with a series of templates for software configurations, also commonly referred to as stacks. These templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can use our pre-configured templates or create your own. This template approach makes Codio easy to use, configure and adapt.

+
    +
  • You can take a snapshot of the software configuration on any box and add it to the Stacks template library.

  • +
  • You can take a snapshot of the stack/project code workspace combination and add it to the Starter Packs template library.

  • +
+
+
+

Project concepts and features

+

We strongly recommend that you familiarize yourself with the following project related concepts and features before you get started:

+ +

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/general.html b/docs/common/develop/general.html new file mode 100644 index 00000000..4486e89d --- /dev/null +++ b/docs/common/develop/general.html @@ -0,0 +1,873 @@ + + + + + + + + + Cookies, Firewalls, Browser support — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Cookies, Firewalls, Browser support

+ +
+

Firewall and network settings

+

Codio can usually run from anywhere in your browser without any special settings. However, some k12 or university firewall settings may require special configuration.

+

This page contains information for

+
    +
  • Network system administrators

  • +
  • Students and teachers who may be using Codio from home

  • +
+
+

Firewall settings

+

The following is a list of ports and URLs that Codio accesses from time to time. We have put these in priority order.

+
+
    +
  • *.codio.com the main Codio site and application

  • +
  • *.codio.io domains that are auto-generated for each user project

  • +
  • api.keen.io statistics gathering to measure student time spent in units (stats)

  • +
  • *.typekit.net web fonts

  • +
  • fonts.gstatic.com web fonts

  • +
  • fast.fonts.net web fonts

  • +
  • *.cloudfront.net our CDN for speeding up static content

  • +
  • *.youtube.com & *.vimeo.com for video’s included in Course content

  • +
  • gravatar.com used for user gravatars (pictures)

  • +
  • *.intercom.io, cdnjs.cloudflare.com and *.pubnub.com are highly recommended as they relate to the help and support application (Intercom) built into Codio.

  • +
+
+

If your institution blocks access to YouTube as a general rule, your IT department can whitelist YouTube access that only allows access to content from registered and accredited educational content repositories. See here for more information on this.

+
+
+

Ports

+

We recommend opening the following ports

+
    +
  • 80 and 443 for standard communications

  • +
+
+
+

Working from home

+

Sometimes the anti-virus/firewall settings on your personal devices may interfere with home usage and make the experience slow.

+

You should check your settings and ensure that items in the above Firewall settings list are added to your exclusion list.

+
+
+

Connectivity Test

+

If you continue to experience difficulties, visit the Connection Diagnostics page and send us back the generated output going to Help > Support/Contact Us and attach the output file using the paperclip icon

+
+
+
+

Browser support

+

Codio is best experienced on the very latest browsers, in particular Chrome, but should run fine on the following browsers:

+
    +
  • Chrome 21 or later

  • +
  • Firefox - 22 or later

  • +
  • Edge - 44 or later

  • +
  • Safari - 6 or later

  • +
+

If using Safari and accessing Codio via an LMS (Canvas/Blackboard/D2L/Moodle etc) , disable “Prevent cross-site tracking” to ensure access.

+Safari Settings +

If you are experiencing any issue where Codio will not run as it should, please send an email to help@codio.com.

+
+

Disable IE Compatibility View

+

It could happen that even if you have Internet Explorer 10 or a later version, we detect an older version of the browser.

+

This is due to the Compatibility Mode of the Browser which enables old features we no longer support.

+

To disable this option, please go to *Tools → F12 developer tools* and be sure that in Browser Mode is selected «Internet Explorer 10» and in Document Mode is selected «Standards (Page default)».

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/access.html b/docs/common/develop/ide/boxes/access.html new file mode 100644 index 00000000..8a8b1bd9 --- /dev/null +++ b/docs/common/develop/ide/boxes/access.html @@ -0,0 +1,830 @@ + + + + + + + + + Access Codio Box via SSH — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Access Codio Box via SSH

+

You can SSH into your Codio box from code using SSH public keys. Understanding how Codio uses SSH keys is important to accessing your box via ssh.

+
+

Note

+

You cannot connect to a Codio box without using a Public Key.

+
+
+

Codio box SSH keys

+

Codio generates a key-pair that can be uploaded to connect to applications such as Github and BitBucket. See SSH Key for information on uploading your public key to Github and Bitbucket.

+

When you create a new Codio project, your user keys are automatically copied into your project and can be found in the ~/.ssh folder. To access this folder, open a terminal window and navigate to the id_rsa file.

+
+
+

SSH into your box

+

Unless your project has the Always-On Boxes feature enabled, you must open your Codio project to start the box so that it is ready for receiving incoming SSH connections.

+

To prepare your box for external access, follow these guidelines:

+ +
+

Find your local machine’s SSH public key

+

To find your local machine’s SSH public key, use one of the following methods depending on your operating system:

+
    +
  • Mac or Linux - Copy your local machine’s public key to the clipboard from your local machine’s terminal using pbcopy < ~/.ssh/id_rsa.pub.

  • +
  • Mac or Linux - On your local machine, open the ~/.ssh/id_rsa.pub file and copy it to the clipboard. Be careful not to copy unwanted control characters.

  • +
  • Windows - Use Putty to obtain your key.

  • +
+
+
+
+

Upload your public key to your Codio box

+

Once you have obtained your local machine’s SSH public key, follow these steps to upload it your Codio box: +1. Copy the public key to your clipboard. +2. Open a terminal tab in your Codio project and enter the key into the .ssh/authorized_keys file. The easiest way to do this is to enter nano .ssh/authorized_keys to open the .ssh/authorized_keys file in the nano editor and paste the key into the file.

+

You can view all uploaded public keys in your project by opening the terminal and running cat ~/.ssh/authorized_keys.

+
+
+

Enable SSH forwarding and connect to your box

+

You can now enable SSH forwarding in Codio and then connect to your box from your local machine’s terminal window:

+
    +
  1. Click the Project tab on the menu bar and choose Settings.

  2. +
  3. Click the Forwarding Settings tab.

  4. +
  5. Click Enable SSH Forwarding to display the connection string, similar to:

    +

    SSH Forwarding: ssh codio@forwarding.codio.com:29119

    +
  6. +
  7. Connect to your box from any terminal window using the connection string that is displayed:

    +

    ssh codio@forwarding.codio.com -p 29119

    +
  8. +
+

If you get a message Permission denied (publickey), you have incorrectly entered your SSH public key.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/always-on.html b/docs/common/develop/ide/boxes/always-on.html new file mode 100644 index 00000000..ba6d76e0 --- /dev/null +++ b/docs/common/develop/ide/boxes/always-on.html @@ -0,0 +1,812 @@ + + + + + + + + + Always-On Boxes — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Always-On Boxes

+

The Always-On feature for boxes is now available for all paid subscribers. This feature enables you to set boxes to always be on, which means they remain active whether you are in the IDE or logged out. The number of Always-On boxes you can have depends on your payment plan.

+

If your project is archived due to inactivity (usually 30 days since last opened), this process removes it from the active fileserver and can no longer be Always-On.

+

You can set a box to Always-On from the Project > Settings menu in the IDE or from the Project dashboard.

+
+

Enable Always-On

+
+

From IDE

+

To set a box to Always-On from the IDE:

+
    +
  1. Click the Project tab on the menu and choose Settings.

  2. +
  3. On the General Settings tab, toggle the Always-On Box setting to On.

  4. +
  5. Click Save Changes.

  6. +
+
+
+

From Project dashboard

+

To set a box to Always-On from Project dashboard:

+
    +
  1. Click My Projects in the left navigation pane.

  2. +
  3. Click the Settings icon (gear) for the project you want to enable Always-On.

  4. +
  5. Under Preferences, toggle the Always-On Box setting to On.

  6. +
  7. Click Save Changes.

  8. +
+
+
+
+

Keep terminal processes running

+

When you exit your project in the IDE and return to the dashboard, any processes that were started from within a terminal window will terminate. You can prevent processes from terminating using one of the following methods:

+
    +
  • Append terminal command - Append & to the terminal command that starts your process. You will see output as usual but may need to press the Enter key to get a fresh command prompt. Before closing the terminal window or exiting your project, enter the following command:

    +
    disown -a
    +
    +
    +
  • +
  • Install tmux

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/ext-access.html b/docs/common/develop/ide/boxes/ext-access.html new file mode 100644 index 00000000..fbf8fd3e --- /dev/null +++ b/docs/common/develop/ide/boxes/ext-access.html @@ -0,0 +1,803 @@ + + + + + + + + + External Access to Boxes and Ports — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

External Access to Boxes and Ports

+

When a new project is created in Codio, a unique subdomain name is generated:

+

word1-word2.codio.io

+

where word1 and word2 are randomly generated words resulting in a unique domain name.

+ +
+

Standard method for referencing box on specific port

+

You can also reference a Codio box using word1-word2-<port>.codio.io but you should be aware of the following restrictions to avoid wasting valuable time diagnosing why your browser cannot talk to the Codio box:

+
    +
  • Port ranges are restricted to 1024 to 9499 for HTTP access.

  • +
  • Port ranges are restricted to 9500 to 9999 for HTTPS access.

  • +
  • If your PC is behind a firewall, access over non-standard ports is blocked and will fail if using word1-word2-3000.codio.io to reference a Codio box.

  • +
+
+
+

Original request header

+

The X_FORWARDED_PROTO header contains original request schema, should you need it.

+
+
+

Preview menu

+

Codio offers a fully customizable Preview menu that allows you to preview both static files (.html) and server files (.php files, Ruby, Node apps, etc.). See Preview documentation for more information.

+

Using the Preview menu, you can set up any number of ‘aliases’ both for static files and box CLI commands.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/ide-access-permissions.html b/docs/common/develop/ide/boxes/ide-access-permissions.html new file mode 100644 index 00000000..a1077b77 --- /dev/null +++ b/docs/common/develop/ide/boxes/ide-access-permissions.html @@ -0,0 +1,781 @@ + + + + + + + + + IDE Access Permissions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Access Permissions

+

By default, other users with read and write permissions cannot access your Codio box from the command line. However, you can grant access by assigning the Admin permission to the user.

+
+

Note

+

This feature requires an active payment plan.

+
+

For information about assigning permissions, see Project Permissions.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/default-installed.html b/docs/common/develop/ide/boxes/installsw/default-installed.html new file mode 100644 index 00000000..3e50549f --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/default-installed.html @@ -0,0 +1,778 @@ + + + + + + + + + Preinstalled Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Preinstalled Software Packages

+

When you create an empty box in Codio, you get a standard Ubuntu server and Git software.

+

If you want additional software installed by default, use Stacks or select one of the standard stacks from the New Project screen.

+

Refer to the Install software packages for details about how to install other languages, databases, web servers, and other system components.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/file-locations.html b/docs/common/develop/ide/boxes/installsw/file-locations.html new file mode 100644 index 00000000..2cfe0fc6 --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/file-locations.html @@ -0,0 +1,782 @@ + + + + + + + + + File and Software Locations — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

File and Software Locations

+

All Codio code workspace and software dependency files are located in the /home/codio folder, also reachable as ~.

+

Everything below this level can be accessed but is read-only. You should not change anything below this level because it will not persist.

+

Software that you install from the command line or using the Install Software option is installed in the usual location for an Ubuntu server.

+
+

Code workspace files

+

The code workspace you see in the project file tree is located at /home/codio/workspace or ~/workspace.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/gui.html b/docs/common/develop/ide/boxes/installsw/gui.html new file mode 100644 index 00000000..17290c30 --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/gui.html @@ -0,0 +1,840 @@ + + + + + + + + + GUI Based Output — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

GUI Based Output

+

If you are writing or using programs that have a GUI-based output, it is important that you read this section. Whether you are using UI libraries such as tkinter and qt, or simply using Ubuntu applications that have a non-web based UI, this section explains how to set up a virtual desktop.

+
+

Sample project

+

Codio provides a Starter Pack project that contains examples of GUI Output. Go to Starter Packs and search for Demo GUI Output if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+
+

Uses and limitations

+

X Server is a virtual desktop that is very effective for Codio’s cloud-based infrastructure. Any application that relies on a graphical user interface has its graphical output redirected to it and Codio’s viewer is then able to display the virtual desktop in a browser.

+

The Demo GUI Output project provides sample applications and also includes some complex UIs (for example, SQLite and StartUML). You may experience limitations when using fast-motion graphics where the virtual screen content is changing so fast that it cannot be rendered in real time over the internet. A stronger bandwidth will provide better performance and overall experience.

+
+
+
+

Install your own projects

+
+

Install X Server

+

To install X Server, follow these steps:

+
    +
  1. Click the Tools tab and choose Install Software.

  2. +
  3. Find the X Server component and click the Install icon.

  4. +
+

The installation may take a few minutes to complete. You should then Restart your box before proceeding.

+
+
+

Run code

+

Before you can view any output, you must first start your code so the program can run. When you start the viewer (see below), the UI output is automatically displayed.

+GUI Output +

You can also start the viewer first but it will be empty until a program is run; it will then refresh and display the output.

+
+
+

Use the viewer

+

The viewer is a special window that appears either inside Codio or in a separate browser tab. To open it, add “Viewer”: “https://{{domain3050}}/” to the .codio file, as follows:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Run Python (tkinter)": "python3 tkinterpy/demo.py",
+        "Run Java (Lunar Phases)": "cd swing && java LunarPhases",
+        "SQLite Browser App": "sqlitebrowser",
+        "StarUML": "staruml"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Viewer": "https://{{domain3050}}/"
+  }
+}
+
+
+

You can also access the viewer from any browser using:

+

https://pagoda-cigar-3050.codio.io/

+

where you should replace pagoda-cigar with the box domain name. You can find the box domain name on the Box Info page in the Web: Static content section (Project > Box Info ).

+
+

Note

+

X-server port was updated to use 3050 in August 2022. Any assignments/projects that were created prior to this date will continue to function on the original port 3000 unless/until any other packages/components in the stack are re-installed. Reinstallation of X-server will then be required for all to work and will then use port 3050

+
+
+
+

Customization

+

You can customize the X Server installation by modifying the config files in the normal way using vim or nano. For example you can use:

+
    +
  • sudo vim /etc/init/openbox.conf to open the openbox desktop config so you can change the default virtual desktop size.

  • +
  • sudo vim /etc/init/novnc-3000.conf to modify the port that the viewer runs on in case it conflicts with other services you may have configured on the default port 3000.

  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/install-software.html b/docs/common/develop/ide/boxes/installsw/install-software.html new file mode 100644 index 00000000..b9fdef99 --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/install-software.html @@ -0,0 +1,805 @@ + + + + + + + + + Installing Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Installing Software Packages

+
+
+

Codio provides a way to install the set of software packages that are in high demand. You can install this software from the Tools > Install Software menu. From the Install software page, you can run scripts that install, configure, or reconfigure software components instead of manually installing them from the command line.

+Install Software +

Locate the software that you want to install and click the Install icon to start the installation.

+
+

Install software from the command line

+

Our boxes provide full sudo (root) access, so you can also use the Ubuntu apt package manager, which provides thousands of software packages that are maintained by the Ubuntu community.

+

If you want to provide fully pre-configured boxes, use Stacks instead the Install Software option.

+
+
+

Add or request new software packages

+

You can request new software packages or add a new package yourself. If you require a new script to be added to the Install Software list, use one of the following methods:

+
    +
  • Visit the Issues page on our GitHub repository and create a new issue detailing your requirements.

  • +
  • Fork our GitHub repository, add the script yourself, and then submit a pull request.

  • +
+

For instructions on how to add your own software package scripts, see Add Your Own Packages.

+
+
+

Autostart

+

Services that require a restart, are automatically started on installation. You can manually start, stop, and restart services using the following terminal commands:

+

$ sudo service <package-name> start

+

$ sudo service <package-name> stop

+

$ sudo service <package-name> restart

+
+
+

Restricting Students from installing unauthorized software

+

If you wish to restrict students’ ability to install software packages in course assignments, you can do so at the course level. See revoking sudo access for all course assignments for more information.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/langserver.html b/docs/common/develop/ide/boxes/installsw/langserver.html new file mode 100644 index 00000000..9d188029 --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/langserver.html @@ -0,0 +1,805 @@ + + + + + + + + + Language Server Protocol — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Language Server Protocol

+

The Language Server Protocol (LSP) is used to integrate features such as autocomplete, go to definition, and find all references. Currently, Java, OCAML, and Python LSPs are available.

+

Below is a Python example:

+Python +
+

Enable LSP support

+

To enable enable LSP support, enter the following in your User or Project Preferences:

+
[codio-lsp]
+enable_lsp_support = true
+
+
+

If you are authoring content for use in a course, we recommend enabling LSP in Project Preferences, as these are applied over user preferences.

+
+
+

Install LSP

+

To install LSPs, follow these steps:

+
    +
  1. Click the Tools tab and choose Install Software.

  2. +
  3. Find the relevant component and click the Install icon.

  4. +
+

The installation may take a few minutes and you should then Restart your box before proceeding.

+
+
+

Autocomplete

+

Autocomplete is not automatically triggered as in HTML/CSS/JS files. To invoke autocomplete for LSP implemented files, use the following shortcuts:

+
    +
  • Mac - Shift+Space

  • +
  • Others - Ctrl+Space

  • +
+

If you want to change the default preference, see User Preferences.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/installsw/parts-coding.html b/docs/common/develop/ide/boxes/installsw/parts-coding.html new file mode 100644 index 00000000..8d18558d --- /dev/null +++ b/docs/common/develop/ide/boxes/installsw/parts-coding.html @@ -0,0 +1,862 @@ + + + + + + + + + Add Your Own Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Your Own Software Packages

+

If you cannot find the software you want to install in the list, you can add your own package to the Install Software list by forking our GitHub repository, making the necessary modifications, submitting a pull request.

+

The repository can be found at https://github.com/codio/install_software

+

Software packages are installed by running a script. You can code your own install package using the concepts in this topic.

+
+

Scripts

+

A script is typically, but not necessarily, a bash script that runs a series of commands as you would on the command line to install or configure software on your Codio box. However, it can be any executable code you choose.

+

The scripts written by Codio typically use Ansible, a very friendly deployment management system that greatly reduces complexity.

+
+

package_list.json

+

The package_list.json file is the manifest that lists the entire contents of the publicly available scripts. Each script has an entry in this file, and you must add a new item to the list when coding your own install package. Whenever you open the Install Software page (Tools > Install Software), this Install Software manifest is retrieved from our GitHub repo.

+

Here’s a example of the MySQL entry:

+
"mysql": {
+  "name": "MySQL",
+  "description": "MySQL is an open-source relational database management system (RDBMS)",
+  "script": "mysql/install.sh",
+  "version": "5.5.49",
+  "category": "data_stores"
+}
+
+
+

where:

+
    +
  • script - is the path, relative to the root of the repo, where the installation script can be found.

  • +
  • category - is the category that the component belongs to; you can update the category field field with any of the following categories:

    +
      +
    • data_stores

    • +
    • deployment

    • +
    • development_tools

    • +
    • libraries

    • +
    • shells

    • +
    • programming_languages

    • +
    • utilities

    • +
    • web_development

    • +
    +
  • +
+
+

Example : MySQL

+

The following example shows how to install MySQL from the Install Software page in a few seconds. Run the MySQL installation on a new box. The MySQL entry in the package_list.json file looks like this:

+
  "mysql": {
+  "name": "MySQL",
+  "description": "MySQL is an open-source relational database management system (RDBMS)",
+  "script": "mysql/install.sh",
+  "version": "5.5.49",
+  "category": "data_stores"
+}
+
+
+

You can see the reference to the mysql/install.sh script.

+
+
+
+

Bash script

+

This script calls our standard Ansible loader script, which in turn loads the relevant playbook.

+
#!/bin/bash
+
+bash -c "$(curl -fsSL https://raw.github.com/codio/install_software/master/tools/ansible.sh)" mysql
+
+echo "Mysql password root user password is 'codio'"
+
+
+
+
+

Ansible playbook script

+

Ansible simplifies installations and configurations, as easier to read and maintain than using the main bash script with standard Ubuntu commands. For more information about Ansible playbooks, click here.

+
---
+- name: Install MySQL
+  hosts: 127.0.0.1
+  sudo: True
+  vars:
+    MySQL_root_pass: codio
+  tasks:
+    - name: Set MySQL root password before installing
+      debconf: name='mysql-server' question='mysql-server/root_password' value='{{MySQL_root_pass | quote}}' vtype='password'
+    - name: Set MySQL root again password before installing
+      debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{MySQL_root_pass | quote}}' vtype='password'
+    - name: Install MySQL
+      apt: name={{ item }} state=present
+      with_items:
+        - mysql-server
+        - mysql-client
+        - python-mysqldb
+    - copy: src=my.cnf dest=/home/codio/.my.cnf
+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/overview.html b/docs/common/develop/ide/boxes/overview.html new file mode 100644 index 00000000..8b79e602 --- /dev/null +++ b/docs/common/develop/ide/boxes/overview.html @@ -0,0 +1,784 @@ + + + + + + + + + IDE Box Overview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Box Overview

+
+
+

Each Codio project gets its own dedicated Ubuntu Server (box) with sudo access. Review the information in these topics to learn how to access your box, administer it, and install software dependencies.

+

To view details about your project box, click the Project tab on the menu bar and choose Box Info from the drop-down menu.

+Box Info +
+

Important ‘localhost’ configuration information

+

In many config files on your Box you would include a reference to 127.0.0.1 to access localhost. Please be sure to use 0.0.0.0 instead.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/restart-reset.html b/docs/common/develop/ide/boxes/restart-reset.html new file mode 100644 index 00000000..613ef044 --- /dev/null +++ b/docs/common/develop/ide/boxes/restart-reset.html @@ -0,0 +1,791 @@ + + + + + + + + + Restart or Reset Box — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Restart or Reset Box

+

You can restart or reset your project’s box from the Project menu.

+
+

Restart

+

To restart the box, click the Project tab and choose Restart Box. The reboot normally takes a few seconds.

+
+
+

Reset

+

Resetting a box is fairly destructive and should be used with caution. When performing a box reset, the box is returned to a fresh state but your code files are untouched. It also results in the following:

+
    +
  • Any new folders or files that have been created will be deleted.

  • +
  • All parts of the box outside the ~/workspace folder will be reset.

  • +
  • All code files in the ~/workspace folder are untouched.

  • +
  • Box restart.

  • +
+

After a Reset, you must reinstall components (npm modules, ruby gems, etc.) and other modifications you may have made.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/runmenu.html b/docs/common/develop/ide/boxes/runmenu.html new file mode 100644 index 00000000..3fab8e08 --- /dev/null +++ b/docs/common/develop/ide/boxes/runmenu.html @@ -0,0 +1,837 @@ + + + + + + + + + Customize Run Button — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Customize Run Button

+

The Codio IDE offers the ability to customize the Run button, similar to using the alias command in the command line. When you click Run, a new terminal window opens to run the command. You can also force the command to run in an existing terminal window instead of opening a new window.

+
+

Configure Run to open new terminal window

+

To customize the Run button to open a new terminal window where you can see the output, you must edit the .codio file in the root (/home/codio/workspace or ~/workspace) of your project.

+Run Menu +

In the .codio file, locate the lines below, and then copy and paste the following code:

+
{
+  // Configure your Run and Preview buttons here.
+
+  // Run button configuration
+  "commands": {
+    "Install Learnyounode" : "npm install -g learnyounode",
+    "Run Lesson" : "./ns-executes.sh run {{filename_no_ext}} {{path}}",
+    "Verify Lesson" : "./ns-executes.sh verify {{filename_no_ext}} {{path}}",
+    "Completed Lessons" : "learnyounode",
+    "Run with Node" : "node {{filepath}} 3 4 5"
+  }
+}
+
+
+

When you click the Run button, it executes the last selected command.

+
+
+

Configure to run in current terminal window

+

If you want to configure the Run button to run commands in the current terminal window, modify the id field in the .codio file as follows:

+
{
+  "commands": {
+        "Node version": {
+            "id": "terminal_1",
+            "cmd": "node --version"
+        },
+        "ls": {
+            "id": "terminal_1",
+            "cmd": "ls"
+        }
+  },
+
+// Preview button configuration
+  "preview": {
+        "Project Index (static)": "http://{{domain}}/{{index}}",
+        "Current File (static)": "http://{{domain}}/{{filepath}}",
+        "Box URL": "http://{{domain3000}}/"
+  }
+}
+
+
+
+

Note

+

Commands with the same id will share the same terminal window.

+

The terminal id should be “backend-guide” to execute a command in the terminal window opened by guides.

+
+

When modifying the .codio file, you can also use the following tokens in the shell commands:

+
    +
  • {filepath}} - inserts the path and full file name (/path/to/file.ext).

  • +
  • {{path}} - inserts only the path to the selected file (/path/to/).

  • +
  • {{filename}} - inserts the filename with its extension (file.ext).

  • +
  • {{filename_no_ext}} - inserts the filename without the extension (file).

  • +
  • {{domain3000}} - inserts the public url to your box; word1-word2-3000.codio.io to access over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

  • +
  • {{domain80}} - can also be used instead of {{domain3000}} and it inserts the public url to your box; word1-word2-80.codio.io to access over port 80.

  • +
  • {{domain}} - inserts the alternate public url to your box; word1-word2.codio.io; be aware that you will usually need to specify a port to reach a service running on your box (for example, word1-word2-<port>.codio.io).

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/startup.html b/docs/common/develop/ide/boxes/startup.html new file mode 100644 index 00000000..f0f59f87 --- /dev/null +++ b/docs/common/develop/ide/boxes/startup.html @@ -0,0 +1,792 @@ + + + + + + + + + Autostart Services — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Autostart Services

+

Your box is automatically configured to autostart, which means it is automatically put to sleep, and when you open your project, the box and services are started.

+

You can also configure other services to autostart in the startup.sh bash script in your project or by installing Autostart Support from Tools > Install Software.

+

For the script to be included in the stack we recommend /home/codio/startup.sh.

+

If the project is using guides, you can use .guides/startup.sh or you can put the file in the workspace; students may be able to access and edit files visible to them in the workspace.

+
+

Upstart

+

Upstart can be used in Ubuntu 14.04 boxes. If you want to configure services to start when your box starts up, you should configure a .conf file. If you are not familiar with upstart, please Google it for configuration details.

+
+
+

Systemd

+

Systemd can be used in Ubuntu 18.04 and 22.04 boxes. If you want to configure services to start when your box starts up, you should configure a .service file and run sudo systemctl daemon-reload. If you are not familiar with systemd, please Google it for configuration details.

+

Important - You must specify the user account under which the service is run using setuid codio.

+
+
+

When is the Server put back to sleep?

+

Your server is put to sleep within a few minutes of you exiting your Project or after 60 minutes of inactivity.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/boxes/terminal.html b/docs/common/develop/ide/boxes/terminal.html new file mode 100644 index 00000000..b558a0b8 --- /dev/null +++ b/docs/common/develop/ide/boxes/terminal.html @@ -0,0 +1,821 @@ + + + + + + + + + Terminal Window — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Terminal Window

+

You can open a terminal window in a new IDE panel using the menu bar or the icons in the Filetree:

+
    +
  • To open from menu bar, click Tools > Terminal on the menu bar.

  • +
  • To open from the file tree, click the Terminal icon in the upper menu bar of the file tree.

    +Terminal Icon +
  • +
+

You can also have multiple terminals open simultaneously.

+

You can create panels and tabs to customize your project layout. See Panels and Tabs for more information.

+Terminal +
+

Terminal settings

+

You can modify the Terminal settings from the Codio > Preferences menu. The following settings can be modified (defaults are shown):

+
[terminal]
+
+;Font size.
+; Type: int
+font_size = 12
+
+;Terminal theme.
+; Type: string
+theme = dark
+
+;Number of lines available in the scroll history.
+; Type: int
+scrollback = 3000
+
+;Quick Connect
+; Type: hotkey
+show-connect-dialog =
+
+;Connections Manager
+; Type: hotkey
+show-connections-manager =
+
+;Terminal. SSH connection to the box
+; Type: hotkey
+backend-connection = Shift+Alt+T
+
+
+

Preferences can be modified at the User level as described in User Preferences or at the Project level.

+
+

Note

+

When changing settings at the Project level, the settings will be applied for all users looking at the project.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/debugger/create-debug-target.html b/docs/common/develop/ide/debugger/create-debug-target.html new file mode 100644 index 00000000..9accad0f --- /dev/null +++ b/docs/common/develop/ide/debugger/create-debug-target.html @@ -0,0 +1,818 @@ + + + + + + + + + Create and Manage Debugger Targets — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create and Manage Debugger Targets

+

Before you can start debugging a project, you must first create your debug targets. Creating multiple targets allows you to:

+
    +
  • Quickly debug the same application with different command line arguments to test different scenarios.

  • +
  • Debug more than one application.

  • +
+

You manage your debug targets on the Debugger Settings page.

+Debugger Settings +
+

Create a debug target

+

To create a debug target, follow these steps:

+
    +
  1. Click the Tools tab on the menu bar and choose Debugger Settings. Alternatively, you can click the Configure tab on the far right on the menu bar.

  2. +
  3. On the Debugger Settings page, click Create.

  4. +
+Create Debug Target +
    +
  1. Click the Debugger Type drop-down and choose the programming language.

    +

    If you are using C, C++, or Java, and debugging a simple single code file project, choose Single C File, , or Single Java file so you don’t need to provide detailed compile and run configurations.

    +

    The field that are displayed depend on the programming language that is selected.

    +
  2. +
  3. Enter a Name for the configuration and then complete the fields on the form. Typically, you need to provide:

    +
      +
    • The command to execute to your program along with any command line parameters you may want to include.

    • +
    • Command to execute before debugging starts. This is usually a compile process.

    • +
    +

    You can also reference the active file in use using {{filepath}} token which inserts the path and full file name (/path/to/file.ext).

    +
      +
    • If you are not using a single file configuration, you must also complete the following fields:

    • +
    +
    +
      +
    • Before Launch - Compilation or build command.

    • +
    • Launch - Command to launch the program.

    • +
    +
    +
      +
    • If you are creating a target for a Java application, you must also set the Debugger Port Number to 5105.

    • +
    +
  4. +
  5. Click Create Target.

  6. +
+

You are now ready to Start Debug Session.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/debugger/debugger.html b/docs/common/develop/ide/debugger/debugger.html new file mode 100644 index 00000000..599c39a3 --- /dev/null +++ b/docs/common/develop/ide/debugger/debugger.html @@ -0,0 +1,797 @@ + + + + + + + + + Debugger — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Debugger

+
+
+

Codio offers an integrated, language specific debugger that supports the following languages.

+
    +
  • Java

  • +
  • Python 2

  • +
  • Python 3

  • +
  • NodeJS

  • +
  • C and C++

  • +
  • Deno

  • +
+
+

Note

+

Contact us if you would like support for other languages.

+
+

Codio provides a Starter Pack project that contains examples of debugger usage. Go to Starter Packs and search for Demo Codio Debugger if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+

If you are new to using a debugging tool, we suggest you view this useful video tutorial:

+
+

Prerequisites

+

To use the Codio debugger, you must have the GDB component installed. If you installed Java, C, or NodeJS from a stack, the GBD components that support debugging are automatically installed.

+

However, if you manually installed these languages, you will be prompted to install the GDB component when you attempt to run the debugger. Simply click the link to install the component.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/debugger/start-debug.html b/docs/common/develop/ide/debugger/start-debug.html new file mode 100644 index 00000000..1cfed81c --- /dev/null +++ b/docs/common/develop/ide/debugger/start-debug.html @@ -0,0 +1,844 @@ + + + + + + + + + Start Debug Session — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Start Debug Session

+

You can launch an application in debug mode using one of the following +methods:

+
    +
  • Click the Configure tab on the menu bar and choose your target from the drop-down list. If you have previously run the debug target, you can simply click the debug target the next time you want to run it.

  • +
  • On the Debugger Targets page, click Debug for the target you want to run.

  • +
  • Launch debugger from a page. See Custom Buttons for details.

  • +
+
+Launch Debugger +
+

The debugger launches and displays the code running. It may take a few seconds to load.

+
+Debugger Started +
+

It automatically stops on the first line of code, whether or not there is a breakpoint set. A breakpoint is a line of code where the debugger pauses code execution.

+
    +
  • To set a breakpoint, click in the gutter next to the line number. When a breakpoint is set, a red dot appears on the line.

  • +
  • Click the set breakpoint to remove it.

  • +
+
+

Debugger controls

+

Use the following controls at the top of the debug panel to perform actions to execute the debugger after it stops code execution:

+
+Debug Control Buttons +
+
    +
  • Resume - Continues execution without stopping until another breakpoint is encountered.

  • +
  • Stop - Stops execution and closes the debug window.

  • +
  • Step over - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it executes the contents of that function but does not stop unless the function contains a breakpoint.

  • +
  • Step into - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it stops on the first line within that function.

  • +
  • +
    Step out - Debugger exits the current function and stops on the next line of the calling function. If the current line is the main

    entry function of the application, execution ceases and the debugger automatically restarts.

    +
    +
    +
  • +
+
+
+

Debugger features

+

The debug panel also includes the following features:

+
    +
  • Call stack - Shows the parent functions relative to the function that contains the currently executing line of code.

  • +
  • Local variables - All local variables of the current function and their current values are automatically displayed.

  • +
  • Watches - Allows you to watch a specific variable and expressions for some languages.

  • +
  • Breakpoints - Lists all the breakpoints currently set in any of your code files. You can disable them by unchecking the check boxes.

  • +
  • Console - Displays status messages from the system and output data when you write output to the console (for example, a print('message') statement in Python).

  • +
+
+
+

Standard input support

+

Support for standard input (stdin) is available for:

+
    +
  • C/C++

  • +
  • Node.js

  • +
  • GDB

  • +
+

Node example:

+
function testStdIn() {
+    console.log("What is your name?");
+    process.stdin.once('data', (chunk) => {
+        let name = chunk.toString();
+        console.log("Hello, " + name + "!");
+    });
+}
+
+testStdIn()
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/abbreviations.html b/docs/common/develop/ide/editing/abbreviations.html new file mode 100644 index 00000000..a77b92a5 --- /dev/null +++ b/docs/common/develop/ide/editing/abbreviations.html @@ -0,0 +1,869 @@ + + + + + + + + + Abbreviations — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Abbreviations

+

Codio offers numerous HTML and CSS abbreviations that expand to code. You simply enter the abbreviation in the Code Editor and then press the Tab key to expand the abbreviation. For example:

+
div>ul>li*3
+
+
+

which expands to

+
<div>
+    <ul>
+        <li></li>
+        <li></li>
+        <li></li>
+    </ul>
+</div>
+
+
+
+

Basic HTML example

+
div>ul>li*3
+
+
+

results in

+
<div>
+    <ul>
+        <li></li>
+        <li></li>
+        <li></li>
+    </ul>
+</div>
+
+
+
+
+

Juicier HTML example

+
#page>div.logo+ul#navigation>li*5>a{Item $}
+
+
+

results in

+
<div id="page">
+    <div class="logo"></div>
+    <ul id="navigation">
+        <li><a href="">Item 1</a></li>
+        <li><a href="">Item 2</a></li>
+        <li><a href="">Item 3</a></li>
+        <li><a href="">Item 4</a></li>
+        <li><a href="">Item 5</a></li>
+    </ul>
+</div>
+
+
+
+
+

Insertion stops/edit points

+

Some abbreviations have insertion points. For example:

+
a:link
+
+
+

inserts:

+
<a href="http://|"></a>
+
+
+

Where the | character represents the cursor after insertion. After you have entered the href url, press Ctrl+Alt+right arrow (not the Tab key) to jump to the next edit point.

+

For more HTML abbreviations, see the Emmet documentation.

+
+
+

CSS examples

+
    +
  • w100p results in width: 100%

  • +
  • m10p30e5x results in margin: 10% 30em 5ex

  • +
+
p100+m10e
+
+
+

results in

+
padding: 100px;
+margin: 10em;
+
+
+
lg(left, #fc0, 30%, red)
+
+
+

results in

+
background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#fc0), color-stop(0.5, 30%), to(red));
+background-image: -webkit-linear-gradient(left, #fc0, 30%, red);
+background-image: -moz-linear-gradient(left, #fc0, 30%, red);
+background-image: -o-linear-gradient(left, #fc0, 30%, red);
+background-image: linear-gradient(left, #fc0, 30%, red);
+
+
+
+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/autocomplete.html b/docs/common/develop/ide/editing/autocomplete.html new file mode 100644 index 00000000..b536f9d9 --- /dev/null +++ b/docs/common/develop/ide/editing/autocomplete.html @@ -0,0 +1,815 @@ + + + + + + + + + Autocomplete — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Autocomplete

+

Autocomplete is supported in HTML, CSS, and Javascript files. Simply start typing and matches are automatically displayed.

+

If you choose, you can disable autocomplete in your preferences:

+

automatic_completions = false

+

Other languages are supported with language server protocol although in such files, autocomplete is not automatically enabled. See Language Server Protocol for more information.

+
+

HTML tags

+

Autocomplete is context sensitive, so you will only be shown tags that are relevant to your location in the HTML file.

+

For example, if you are not in <body></body>, fewer autocomplete options are shown. If you place your cursor inside the <body></body> tags, a full list of standard HTML tags are shown.

+
+
+

HTML attributes

+

If you enter <a and invoke autocomplete, a list of relevant attributes for the <a> tag are shown.

+
+
+

Tern and javascript

+

We support intelligent autocomplete using TernJS. Tern also supports explicit directives in the .tern-project file, which you can move to the root (/home/codio/workspace or ~/workspace) of your project.

+

The file looks like this:

+
{
+  "libs": [
+    "browser",
+    "jquery"
+  ],
+  "loadEagerly": [
+    "importantfile.js"
+  ],
+  "plugins": {
+    "requirejs": {
+      "baseURL": "./",
+      "paths": {}
+    }
+  }
+}
+
+
+

Codio only supports autocomplete for the currently opened file and items specified in the libs section of the .tern-project file. Refer to the Tern documentation for full details on how to configure the .tern-project file.

+
+
+

CSS

+

To invoke autocomplete in a css file, use the ctrl+space keyboard shortcut.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/av-chat.html b/docs/common/develop/ide/editing/av-chat.html new file mode 100644 index 00000000..98f5a0c2 --- /dev/null +++ b/docs/common/develop/ide/editing/av-chat.html @@ -0,0 +1,803 @@ + + + + + + + + + Audio Video Chat — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Audio Video Chat

+

When accessing another users project (where permissions have been granted by the project owner or for teachers viewing the students assignment, a Call button will show allowing Audio/Video calls and or real time chat.

+Audio Video +
+

Hide A/V calls

+

If you wish to disable A/V calls, organization owners can do this in the organization settings area. See Hide A/V Calls for more information

+
+
+

Permissions

+

Permission for your camera/microphone is required and your browser will prompt you to allow.Permission

+

If permission has been denied, you can re enable in your browser

+
+

Google Chrome:

+

If you are using Google Chrome you can access your settings through the padlock icon in the top left of your screen, next to the URL of the page you are currently on.

+

Click Site settings and make sure your camera and microphone both say Allow

+
+
+

Firefox:

+

If you are using Firefox as your internet browser you can access your settings by typing “about:permissions” into the location bar as if it were a website and hitting enter.

+

This will take you to your settings page, click the following link to find out more about changing your settings:

+

https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more?redirectlocale=en-US&redirectslug=how-do-i-manage-website-permissions

+
+
+

Safari:

+

If you are using Safari, you can access your browser settings by clicking Safari and then Preferences.

+

You will see a pop up box and can update your settings. Learn more about how to update the settings through the following link:

+

https://support.apple.com/en-nz/guide/safari/ibrwe2159f50/mac

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/code-beautifier.html b/docs/common/develop/ide/editing/code-beautifier.html new file mode 100644 index 00000000..1bd844aa --- /dev/null +++ b/docs/common/develop/ide/editing/code-beautifier.html @@ -0,0 +1,796 @@ + + + + + + + + + Code Beautifier — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Beautifier

+

The Code Beautifier feature automatically indents and manages spaces in your code to format it correctly. You apply the Code Beautifier using the shortcut keys, which can be customized in User Preferences.

+
    +
  • key_format_code = cmd+Shift+B (Mac)

  • +
  • key_format_code = Ctrl+Shift+B (PC/Linux)

  • +
+

As an example, if you enter code as follows:

+
if ('this_is'==/an_example/){of_beautifer();}else{var a=b?(c%d):e[f];}
+
+
+

It transforms to this after applying the Code Beautifier shortcut:

+
if ('this_is' == /an_example/) {
+    of_beautifer();
+} else {
+    var a = b ? (c % d) : e[f];
+}
+
+
+
+

Settings

+

The Code Beautifier settings can be found in the [code-beautifier] section of the Codio Preferences. You can also modify these settings in Project Preferences to force beautification to all code, regardless of who edits it.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/code-editing.html b/docs/common/develop/ide/editing/code-editing.html new file mode 100644 index 00000000..4e7c0a3a --- /dev/null +++ b/docs/common/develop/ide/editing/code-editing.html @@ -0,0 +1,778 @@ + + + + + + + + + Code Editing Features — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Editing Features

+
+
+

Codio has various IDE features to enhance productivity when working with HTML, CSS, and Javascript files. These features are based on the Emmet web-developers toolkit (formerly Zen Coding). For additional information about Emmet syntax, see the Emmet documentation.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/color-picker.html b/docs/common/develop/ide/editing/color-picker.html new file mode 100644 index 00000000..5ece5ca1 --- /dev/null +++ b/docs/common/develop/ide/editing/color-picker.html @@ -0,0 +1,794 @@ + + + + + + + + + Color Picker and Preview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Color Picker and Preview

+

You can preview colors of code and choose a different color using the Color Picker feature.

+

To preview a color, hover over the code to see the RGB hex value (100, 100, 100), or hsla (0,100%,50%,0.2) in a popup.

+
+Preview Color +
+

You can also preview gradients.

+
+Preview Gradients +
+
+

Color picker

+

To choose a new color, move your mouse into the color preview area and click to open the Color Picker. You can then select a new color by dragging the cursor or entering a specific value.

+
+Color Picker +
+
+Color Picker - Enter Value +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/command-bar.html b/docs/common/develop/ide/editing/command-bar.html new file mode 100644 index 00000000..94fd3053 --- /dev/null +++ b/docs/common/develop/ide/editing/command-bar.html @@ -0,0 +1,782 @@ + + + + + + + + + Command Bar — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Command Bar

+

The Command Bar allows you to access almost all of the Codio actions from a searchable list. You can also use it to look up keyboard shortcuts. You simply start typing and the list is refined as you type.

+Command Bar +

Use one of the following methods to invoke the Command Bar:

+
    +
  • Click Tools on the menu bar and choose Command Bar.

  • +
  • Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (PC/Linux) on the keyboard.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/connect-github-codio.html b/docs/common/develop/ide/editing/connect-github-codio.html new file mode 100644 index 00000000..6b4f92ef --- /dev/null +++ b/docs/common/develop/ide/editing/connect-github-codio.html @@ -0,0 +1,892 @@ + + + + + + + + + Connecting a Codio Box to a GitHub Repo — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connecting a Codio Box to a GitHub Repo

+

The first step to using GitHub in Codio is connecting your Codio and GitHub accounts. You only have to do this once. Follow these steps:

+
    +
  1. Click your user name in the bottom left of the main menu.

  2. +
  3. Click the Applications tab.

    + +
  4. +
  5. In the GitHub section, click Connect account and log in to your Github account when prompted.

    +GitHub Connect Account +
  6. +
  7. If you are using SSH connections, click Upload public key so Codio and Github can exchange keys.

  8. +
+
+

In GitHub: Make a new repo

+

Each Codio box (Assignment, Book, or Project) can be mapped to a GitHub repo. This connection only needs to be established once per box.

+
+

Note

+

If you have an existing repo you want to clone, you can import a project from a GitHub repo and this connection is made during the importing process. If you are familiar with Git, skip the rest of this guide and just use the terminal as usual by going to Tools > Terminal.

+
+

To create a new repo, follow these steps:

+
    +
  1. Go to your GitHub organization (or profile) and click the green New repository button.

    +New Repo Button +
  2. +
  3. Complete the requested details. We suggest not initializing a README since one already exists in Codio and will result in an immediate conflict.

    +Create New Repo +
  4. +
  5. Copy either the HTTP or SSH URL on the created repo page (if you do not want to type credentials and you uploaded your public key, use SSH).

    +Repo URL +
  6. +
+
+
+

In Codio: Connect to repo

+
+

Note

+

You can skip the rest of this guide and do your normal Git workflow via command line if you prefer. Open a terminal from Tools > Terminal on the menu.

+
+

To connect to your repo from Codio, follow these steps:

+
    +
  1. On the Codio Box you want to connect, click the Tools > Git > Remotes menu.

    +Remotes Menu +
  2. +
  3. When prompted, click Yes to initialize a local git repository.

    +Initialize +
  4. +
  5. When prompted, click Add Remote.

    +Add Remote +
  6. +
  7. Enter the name (origin is the git standard) and paste the URL that you copied into the URL field.

  8. +
  9. Click Save and then Close.

    +../../../../_images/RemoteConfig2.png +
  10. +
  11. Click Tools > Terminal on the menu to open a terminal window.

    +Terminal +
  12. +
  13. Type git add . and press Enter/Return.

  14. +
  15. Type git commit -m “initial commit” and press Enter/Return.

  16. +
  17. Type git push –set-upstream origin master and press Enter/Return.

  18. +
+
+
+

Collaboration in Codio with GitHub

+

If you share Codio boxes with other members of your GitHub repository (directly through Project > Permissions or a copy through Project > Fork), the connection to GitHub is maintained. However, other members must also link their GitHub and Codio accounts.

+
+
+

Saving your work with Git (Committing and Pushing)

+

Git allows you to save multiple versions of your work using a few commands in the terminal (Tools > Terminal).

+../../../../_images/terminal.png +

Follow these steps to save your work:

+
    +
  1. In the terminal window, type git add . and press Enter/Return. This command tells git to go collect all the changes you have made since your last save (which is called a commit in Git).

  2. +
  3. Type git commit -m “commit message” and press Enter/Return. This command bundles all your changes and gives them a useful human-readable name so make sure you provide something useful for the Commit Message.

  4. +
  5. Type git push and press Enter/Return. This command sends this bundle of changes to GitHub so you have a copy in the cloud.

  6. +
+
+
+

Going back to immediately previous save point (Reverting to previous commit)

+

To get rid of all changes since your last save or commit, follow these steps: +Warning: Be careful, you cannot undo this!

+
    +
  1. First, check what your last commit or save was to make sure you know where you are going back to. You can either look on GitHub or type git log. If you have a lot of commits, you will need to type Ctrl+c to exit git log.

  2. +
  3. Type git add . && git reset –hard HEAD.

  4. +
+
+
+

Manually importing a Git repo into Codio

+

To manually import a Git repo into Codio, follow these steps:

+
    +
  1. In GitHub, click the Clone URL link in the right pane and copy to the clipboard.

    +
    +create from GitHub +
    +
  2. +
+
+

If you are cloning using SSH, you must have already added the Codio SSH public key as described in Upload SSH Key to Remote Server.

+
+
    +
  1. Log in to Codio and click New Project.

  2. +
  3. Click the Click here link for more options.

    +create from GitHub +
  4. +
  5. In the Select your Starting Point area, click Import.

  6. +
  7. From the Source drop-down list, choose Git.

  8. +
  9. Paste the Git URL into the URL field and add details about the project.

  10. +
  11. Click Create. Codio loads the repo and displays it.

  12. +
+
+
+

A few Git helpers

+

We have added a few Git helpers to the Tools > Git menu.

+Git Overview +
+
+

More Information

+

Refer to the documentation on GitHub.com and http://git-scm.com/docs for complete information about using Git and GitHub.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/cursor.html b/docs/common/develop/ide/editing/cursor.html new file mode 100644 index 00000000..d60e9d64 --- /dev/null +++ b/docs/common/develop/ide/editing/cursor.html @@ -0,0 +1,789 @@ + + + + + + + + + Cursor Features — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Cursor Features

+
+

Cursor presence

+

When accessing another users project (where permissions have been granted by the project owner), all active users in a project are indicated by a colored icon in the menu bar when files are being accessed or edited. If you click the icon, it changes focus to show which user is currently editing the file. If you hover over the icon, you can see the file name and line currently being edited.

+Cursor Presense +

This feature is useful when assisting other users so you can see what they are doing in real time, or when you are demonstrating to others so they can see what you are doing in real time.

+
+
+

Multiple cursors

+

You can place multiple cursors anywhere in a file using the following keyboard shortcut:

+
    +
  • Alt+Click

  • +
+

Click to place the cursor at the desired location, and then press and hold Alt clicking at new locations. When you release Alt you can start typing and the content will be duplicated at all cursor locations.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/force-language-highlighting.html b/docs/common/develop/ide/editing/force-language-highlighting.html new file mode 100644 index 00000000..87d8bbf2 --- /dev/null +++ b/docs/common/develop/ide/editing/force-language-highlighting.html @@ -0,0 +1,781 @@ + + + + + + + + + Language Highlighting — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Language Highlighting

+

Codio automatically selects the syntax highlighting rules based on the file extension.

+
+

ECMAScript 6 support

+

ECMAScript 6 is enabled by default in javascript files.

+

If you wish additional configurations to apply, you can add a .jshintrc file to the root (/home/codio/workspace or ~/workspace) of your project/assignment. See https://github.com/jshint/jshint/blob/master/examples/.jshintrc for more information

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/git.html b/docs/common/develop/ide/editing/git.html new file mode 100644 index 00000000..e944978c --- /dev/null +++ b/docs/common/develop/ide/editing/git.html @@ -0,0 +1,1011 @@ + + + + + + + + + Git and GitHub — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Git and GitHub

+

Git and GitHub are preinstalled, as well as Mercurial and SVN. You can open a Terminal window to access them from the command line. The Tools > Git menu includes options for using Git.

+

You can also configure your .codio file to create a Run menu from which you can access common commands in the Codio IDE. See Customize Run Button for more information.

+

If you are new to Git, refer to the following to get started:

+ +
+

Use Git without remote repos

+

You can use Git commands in your Codio project without using a remote repo, providing more collaborative capabilities and comprehensive version control. However, you can add a remote repository, such as GitHub (recommended), if you want to save your code in more than one location as a back up.

+

To add a repo, click Tools > Git > Remotes.

+
+
+

View GitHub repos

+

GitHub let’s you browse around a repo but it’s not the same as using an IDE. Codio gives you a great way of viewing any GitHub (or Git) repo. For web apps, you can even run and preview in Codio.

+
+ +
+

Manually import a Git repo into Codio

+

To manually import a Git repo into Codio, follow these steps:

+
    +
  1. In GitHub, click the Clone URL link in the right pane and copy to the clipboard.

    +
    +create from GitHub +
    +
  2. +
+
+

If you are cloning using SSH, you must have already added the Codio SSH public key as described in Upload SSH Key to Remote Server.

+
+
    +
  1. Log in to Codio and click New Project.

  2. +
  3. Click the Click here link for more options.

    +
    +create from GitHub +
    +
  4. +
  5. In the Select your Starting Point area, click Import.

  6. +
  7. From the Source drop-down list, choose Git.

  8. +
  9. Paste the Git URL into the URL field and add details about the project.

  10. +
  11. Click Create. Codio loads the repo and displays it.

  12. +
+
+
+

Create new GitHub repo from Codio

+

If you have code in Codio and want to create a new GitHub (or other remote) repo, follow these steps:

+
    +
  1. Create a new project in Codio or open up an existing project.

  2. +
  3. Open the terminal (Tools > Terminal), type git init and press Enter to initialize Git.

  4. +
  5. Create a new, empty repo on GitHub or other remote repo.

  6. +
  7. Copy the repo url to the clipboard.

  8. +
+
+

Note

+

If you’re using GitHub, use the SSH url rather than https. Also make sure that your Codio public key is uploaded to your GitHub account or repo settings as described in Upload SSH Key to Remote Server.

+
+github repo +
+
+
    +
  1. In the Codio IDE, click Tools > Git > Remotes on the menu.

  2. +
  3. Click the Edit icon and enter the Name and paste the URL into the field. It is recommended you use origin as the name to confirm the normal standards. You do not need to specify a username or password if you are using SSH.

  4. +
  5. Click Save.

  6. +
+
+
+

Check project status

+

Whenever you want to see the Git status of your project, enter git status. Initially, nothing will be returned until changes are committed.

+
$ git status
+# On branch master nothing to commit, working directory clean
+
+
+
+
+

Track files

+

Codio uses Git by default and if you import a project from a Git repo, all the existing files are ready to be tracked. Tracking means that Git knows about them. If you add a new file, Git does not know about it and needs to be explicitly told:

+
    +
  1. Add a new file (test.txt) and then add a few random characters to it.

  2. +
  3. Open any other existing file and make a small change to it.

  4. +
  5. Run git status and you should see results similar to the following, which shows the modified and the new (untracked) files:

  6. +
+
+
# On branch master `
+# Changes not staged for commit:`
+# (use "git add ..." to update what will be committed)
+# (use "git checkout -- ..." to discard changes in working directory)
+#
+#   modified: humans.txt
+#
+# Untracked files:
+# (use "git add ..." to include in what will be committed)
+#
+#   test.txt no changes added to commit (use "git add" and/or "git commit -a")
+
+
+
+
    +
  1. To tell GitHub to track the file, enter one of the following commands:

    +
      +
    • git add . - tells Git to track all files in the project that are not yet tracked. This is the quickest and simplest way to track any new files.

    • +
    • git add FILENAME - explicitly tracks a single file.

    • +
    +
  2. +
+
+
+

Stage files

+

A staged file is one that is tracked and is ready to commit to the repository. Once you run git add, the file is being tracked and staged. However, if you modify a tracked file, the modifications are not staged. To stage the file, rerun git add.

+
+
+

Commit your changes

+

Committing means that you want to add your staged files into the repository. You can commit using one of the following commands:

+
    +
  • git commit -m 'commit message' - commits all staged files to the repo.

  • +
  • git commit -a -m 'commit message' commits all staged files to the repo and also automatically stages any tracked files before committing them. If you use this command, you do not need to run git add unless you want to add new, untracked files.

  • +
+

The commit message is important as it allows you to see what general changes are included in the commit. For example:

+

git commit -a -m "added test.txt and modified some stuff" and get

+
[master d3e6bb1] added test.txt and modified some stuff
+2 files changed, 2 insertions(+)
+create mode 100644 test.txt`
+
+
+

If you run a git status, you can see that everything is clean and up-to-date.

+
# On branch master nothing to commit, working directory clean
+
+
+
+
+

Revert code

+

You can revert your code back to an earlier commit to roll back your changes. Use one of the following commands to revert:

+
    +
  • git revert 'commit id' - reverts back to the SHA (uid); you can see when you type git log.

  • +
  • git revert HEAD - reverts back to the last commit, deleting any uncommitted changes.

  • +
  • git revert HEAD~n - reverts to the last n commit; for example, HEAD~3 reverts to the 4th last commit.

  • +
  • git revert HEAD^^^ - (count of ^ is like ~n) - reverts to the last n commit; for example, HEAD^^^4 reverts to the 4th last commit.

  • +
+

For more information about reverting code, see http://git-scm.com/docs/git-revert.html.

+
+
+

Push to a remote repository

+

If you have a remote repository configure, commit your changes using the git push origin master command, where: +- origin - is the name of the remote repo. +- master - is the name of the branch. When you create a new Codio project, a master branch is automatically created and appears in brackets at the top of the file tree next to the project name.

+

You can view your pushed commits in the GitHub repo.

+
+
+

Pull from a remote repository

+

If others are working remotely on the same code (not in Codio), they are also pushing their code to the GitHub repo. Run the git pull origin master command to pull in changes from the remote repo and automatically merge the code.

+
+
+

Resolve conflicts

+

When you pull in from the remote, you may get a conflict warning. This occurs if someone else has modified code in a way that Git cannot automatically resolve it, usually because you have been editing the same code.

+

You can minimize conflicts by committing small changes and pulling from master often.

+

To resolve the conflict, follow these steps:

+
    +
  1. Open the file. Something similar to the following is displayed:

    +
    <<<<<<< HEAD:index.html
    +<div id="footer">contact : email.support@github.com</div>
    +=======
    +<div id="footer">
    +please contact us at support@github.com
    +</div>
    +>>>>>>> iss53:index.html
    +
    +
    +
  2. +
  3. Remove the code block that you do not want to keep. The top block is your code and the bottom comes from the code that is being merged. If you want to keep your code, modify as follows:

    +
    <div id="footer">contact : email.support@github.com</div>
    +
    +
    +

    If you want to keep the merged code, modify as follows:

    +
    <div id="footer">
    +    please contact us at support@github.com
    +</div>
    +
    +
    +
  4. +
+
+
+

Branches

+

When you create a branch, you are creating a new area to code. You then merge another branch (usually the master branch), into your new branch. From this point on, you can do whatever you want (add, commit, push etc) without impacting the master branch on any other branch. For more information about branching, see http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is.

+

Use the following commands for branching:

+
    +
  • git branch - creates a new branch.

  • +
  • git checkout - switches to that branch (be sure to commit your current branch before switching to another branch so you don’t lose any unstaged files).

  • +
  • git merge from-branch - merges code from from-branch into your current branch.

  • +
+

It is recommended that you switch to your master branch and pull in changes from the remote, and then switch back to your working branch and merge changes. This practice will minimize conflicts.

+

You can switch branches using the command line interface or from the Tools > Git > Switch Branch menu.

+
+

Active branch

+

You can see which branch is active by looking in the file tree. The top level item is the project name and the current branch is in brackets.

+
+
+

Basic commands

+
    +
  • git status - shows the status of your current branch.

  • +
  • git add . - adds all files, tracked or not, to the staged files.

  • +
  • git commit -a -m - stages and commits all files to the snapshot.

  • +
  • git push --set-upstream origin master - Run this command the first time you push to track the new remote.

  • +
  • git push - used for subsequent pushes; this command pushes all committed changes of the master branch to the tracked remote (origin).

  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/junit.html b/docs/common/develop/ide/editing/junit.html new file mode 100644 index 00000000..bf0f3d01 --- /dev/null +++ b/docs/common/develop/ide/editing/junit.html @@ -0,0 +1,817 @@ + + + + + + + + + JUnit Testing Framework — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

JUnit Testing Framework

+

Codio provides a simple way to test Java in your project using Junit framework. To use JUnit, your project requires Java. Use one of the following methods to make sure your project uses Java:

+
    +
  • Use the Java8 Stack.

  • +
  • Manually install Java on your box.

  • +
  • Install Java from Tools > Install Software. See Install Software Packages for more information.

  • +
+
+

Configure JUnit

+

To configure to use JUnit for Java testing, follow these steps:

+
    +
  1. Click Tools on the menu bar and choose JUnit. You can also use the shortcut Shift+Alt+J.

    +JUnit Settings +
  2. +
  3. Complete the fields on the JUnit Settings page:

    +
      +
    • JUnit version - Select the version from the drop-down list.

    • +
    • Source path - Location of the source code.

    • +
    • Test source path - Location of the test cases source folder.

    • +
    • Library path - Path to any libraries used by the project.

    • +
    • Working directory - Path where the compiled code should execute.

    • +
    • Add test case - Specify the paths to a file with JUnit tests or drag and drop the file into the JUnit field.

    • +
    +
  4. +
+

Notes:

+
    +
  • All paths are relative to the root (/home/codio/workspace or ~/workspace) of the assignment/project.

  • +
  • If using multiple cases in an assignment/project, the files for each should all be in separate folders for them to work independently of each other. This applies to student code files as well as the code used for the cases.

  • +
  • All code files Source path will be compiled. Files that fail to compile successfully will cause the tests to fail, even if they are not used.

  • +
+
+
+

Timeout settings

+

The default timeout for JUnit execution is 30 seconds. You can change the timeout and default hotkey in User Preferences or Project Preferences. To ensure that the same settings apply to all students using the same project, we recommend changing the timeout and hotkey in Project Preferences.

+JUnit Preferences +
+
+

Execute JUnit Test

+

You execute the tests from the JUnits Execution page (Tools > JUnit > Junit Executions). Once completed, the results are shown on the page.

+JUnit Execute +

If you publish your project as a unit to a class, the JUnit configurations you set up are included in the unit for students.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/keyboard-shortcuts.html b/docs/common/develop/ide/editing/keyboard-shortcuts.html new file mode 100644 index 00000000..68b5e254 --- /dev/null +++ b/docs/common/develop/ide/editing/keyboard-shortcuts.html @@ -0,0 +1,856 @@ + + + + + + + + + Keyboard Shortcuts — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Keyboard Shortcuts

+

Codio offers default keyboard shortcuts and Emmet keyboard shortcuts; all of which can be customized in User Preferences. General keyboard shortcuts can be found in the Help > Shortcuts menu.

+

See the Emmet Cheat Sheet for a complete list of shortcuts.

+
+Emmet Cheat Sheet +
+
+

Match tag pair

+

Searches for tag(s) content bounds from current cursor position and selects it. It will expand (outward balancing) or shrink (inward balancing) selection when called multiple times. Not every editor supports both inward and outward balancing due of some implementation issues, most editors have outward balancing only.

+
    +
  • Mac - Cmd+D (inward) and Shift+Cmd+D (outward)

  • +
  • PC/Linux - Ctrl+D (inward) and Shift+Ctrl+D (outward)

  • +
+
+
+

Go to matching pair

+

Allows you to quickly traverse between opening and closing tag in HTML code.

+

Mac - **Shift+Cmd+T* +PC/Linux- **Shift+Ctrl+T*

+
+
+

Wrap with abbreviation

+

Expands an abbreviation and places currently selected content in the last element of generated snippet. If there’s no selection, action silently calls Match tag pair to wrap context element.

+
    +
  • Mac - Shift+Cmd+A

  • +
  • PC/Linux - Shift+Cmd+A

  • +
+
+
+

Go to edit point

+

Allows you to quickly traverse between important code points in HTML code blocks, including between tags, empty attributes, and new lines with indentation.

+
    +
  • Win - Ctrl+Alt+Right Arrow or Ctrl+Alt+Left Arrow

  • +
+
+
+

Select item

+

Action selects important code parts. In HTML, it selects tag name, full attribute, and attribute value. For class attribute it also selects distinct classes. In CSS, it matches selector, full property, and property value. For complex values and functions like 1px solid red or url (image.jpg), it also selects part of it.

+
    +
  • Mac - Shift+Cmd+

  • +
  • PC/Linux - Shift+Cmd+

  • +
+
+
+

Toggle comment

+

Toggles comments on and off for the selected line in HTML and CSS files.

+
    +
  • Mac - Cmd+/

  • +
  • PC/Linux - Ctrl+/

  • +
+
+
+

Remove tag

+

Quickly removes tag, found by Match tag pair from current cursor position, and adjusts indentation.

+
    +
  • Mac - Cmd+K

  • +
  • PC/Linux - Ctrl+K

  • +
+
+
+

Merge lines

+

Merges selected lines into a single line. When there is no selection, it matches context HTML tag.

+

Mac - **Shift+Cmd+M* +PC/Linux - **Shift+Ctrl+M*

+
+
+

Inline calculator

+

Evaluates simple math expressions like 2*4 or 10/2 and outputs its result. You can use \ operator which is equivalent to round(a/b).

+
    +
  • Mac - Shift+Cmd+Y

  • +
  • PC/Linux - Shift+Ctrl+Y

  • +
+
+
+

Increment/decrement number

+

Increments or decrements the number under the cursor with different steps: 0.1, 1 or 10.

+
    +
  • Mac/PC/Linux - Alt+Up/Down (inc/dec by 0.1)

  • +
  • Mac/PC/Linux - Ctrl+Up/Down (inc/dec by 1)

  • +
  • Mac/PC/Linux - Ctrl+Alt+Up/Down (inc/dec by 10)

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/preview.html b/docs/common/develop/ide/editing/preview.html new file mode 100644 index 00000000..0224af23 --- /dev/null +++ b/docs/common/develop/ide/editing/preview.html @@ -0,0 +1,846 @@ + + + + + + + + + Preview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Preview

+

The Preview feature enables you to view your static and dynamic content. The menu options are configurable for both types of content:

+
    +
  • Preview status options - Can be used for only static content (HTML, CSS, JS, and text). You can also easily preview static content on your mobile device using Project > QR Code for Preview URL to generate a QR code that you can scan with a QR reader on your device.

  • +
  • Preview dynamic options - To access files or services that are executed on the server (PHY, Ruby, Note, etc.), you need to use the right-most menu option.

    +

    To access your server side application, enter word1-word2-port.codio.io. This accesses your box over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

    +

    word1-word2 is an automatically generated subdomain name for your Codio box. You can configure your application to listen on ports defined in the URL. However, Codio only supports a restricted range of ports. Refer to this section for more details (insert link).

    +
  • +
+
+

Using preview

+

Using the Preview button lets you preview one or more web pages with a simple button press. Codio creates three default entries in the Preview menu automatically:

+Preview Button +
    +
  • Project Index - this is the default file to run for your project. It can be set by right-clicking a file in the Filetree. This option should be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option.

  • +
  • Current File - whichever code file currently has focus. This option should only be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option.

  • +
  • Box URL - Use this option for previewing PHP, Ruby, or other server side languages over HTTPS. Click here <insert link> for more information on configuring port access for HTTPS.

  • +
+

If you right-click a file in the file tree or the tab, you can also select Preview Static.

+Preview Static +

See Apache Password Basic Authentication and HTTP Authentication with PHP for examples.

+
+
+

Modifying the Preview menu

+

You can customize the Preview menu using one of the following methods:

+
    +
  • From the Preview or Run drop-down menus, choose Configure.

  • +
  • Open the .codio file in the root (/home/codio/workspace or ~/workspace)of your project (if it exists).

  • +
+

To customize the Run and Preview buttons, modify this section of the .codio file:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Node version": "node --version"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Project Index (static)": "https://{{domain}}/{{index}}",
+        "Current File (static)": "https://{{domain}}/{{filepath}}",
+        "Box URL": "https://{{domain3000}}/"
+  }
+}
+
+
+

You can insert tokens to customize the menus:

+

{{domain3000}} is replaced by the public url required to access your project over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

+

{{domain80}} can also be used instead of {{domain3000}} and is replaced by the public url required to access your project over port 80.

+

{{domain}} is used along with the port number (default 3000) to your service. For example:

+

"Box URL": "https://{{domain3000}}/",

+

For details about the various tokens that can be inserted see Customize Run Button.

+
+

Note

+

Static content is served over Port 80. To access dynamic content you may need to specify the appropriate Port.

+
+
+
+

Unsecure content error

+

Codio runs over a secure connection using HTTPS, therefore so does the inline preview. If your code references an external resource such as a script, font, or image, a browser error may occur indicating that there is some form of unsecure or mixed content because you are running in a mixed HTTP/HTTPS mode. This may occur when you reference something similar to the following:

+
<script src="http://code.angularjs.org/1.1.5/angular.js">
+
+
+

The error is caused by a restriction of the browser and cannot be easily modified. It is intended to protect you from insecure content.

+

To avoid this from occurring:

+
    +
  • Modify your external references to use HTTPS.

  • +
  • Modify your references to use the ‘current protocol’ by including ‘//’ without http or https, so <script src=”//code.angularjs.org/1.1.5/angular.js”>.

  • +
+

You can also download the external file to the Codio project and then reference it.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/quick-open.html b/docs/common/develop/ide/editing/quick-open.html new file mode 100644 index 00000000..0b8d0fd1 --- /dev/null +++ b/docs/common/develop/ide/editing/quick-open.html @@ -0,0 +1,783 @@ + + + + + + + + + Quick Open — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Quick Open

+

The Quick Open feature allows you to open files from a dialog where you can start typing the file name and it returns matches as you type. To use the Quick Open feature, follow these steps:

+
    +
  1. Click the File tab on the menu bar and choose Open File, or use the keyboard shortcut Cmd+O (Mac) or Ctrl+O (PC/Linux).

    +Quick Open Dialog +
  2. +
  3. Start entering text in the text box at the top of the dialog to narrow the list of matches.

  4. +
  5. Select the file to open it.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/real-time-collaboration.html b/docs/common/develop/ide/editing/real-time-collaboration.html new file mode 100644 index 00000000..59322993 --- /dev/null +++ b/docs/common/develop/ide/editing/real-time-collaboration.html @@ -0,0 +1,778 @@ + + + + + + + + + Real-Time Code Collaboration — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Real-Time Code Collaboration

+

If you give other Codio users permission to access to your project, multiple users and view and edit the files simultaneously. You can see other people editing the file in real time. Your files are also saved in real time so there is no need to save them.

+

You can change full access to your project from the Project > Permissions menu, but we strongly recommend that you avoid this so you have the full benefits of collaboration on your code. If you change full access, only one person can edit the file at any one time.

+

Another approach is to use Git, where each user has their own project that can be synchronized with other projects in a remote repository such as GitHub or BitBucket.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/save-files.html b/docs/common/develop/ide/editing/save-files.html new file mode 100644 index 00000000..9a6bbfe3 --- /dev/null +++ b/docs/common/develop/ide/editing/save-files.html @@ -0,0 +1,778 @@ + + + + + + + + + Save Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Save Files

+

There is generally no need to save your files as content is saved automatically. You can still save manually using the Ctrl+S|Cmd+S keyboard shortcut, but it isn’t necessary. +If you make a mistake, you can use undo (Ctrl+Z).

+

Version Control is the best possible way of managing restores and this is comprehensively supported using our Git integration.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/search-replace.html b/docs/common/develop/ide/editing/search-replace.html new file mode 100644 index 00000000..e7bec094 --- /dev/null +++ b/docs/common/develop/ide/editing/search-replace.html @@ -0,0 +1,873 @@ + + + + + + + + + Search and Replace — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Search and Replace

+

Codio supports local and global search and replace. You can access these feature using a shortcut or from the Find menu. The shortcuts for each action are displayed in the Find menu. You can override these shortcuts in User Preferences.

+
+

Local search and replace

+

Search and replace is supported on the currently selected file. The default shortcuts are defined in the following section of User Preferences:

+
;Find.
+; Type: hotkey
+key_find = Cmd+F
+
+;Find next.
+; Type: hotkey
+key_find_next = Cmd+G
+
+;Find previous.
+; Type: hotkey
+key_find_prev = Shift+Cmd+G
+
+;Replace.
+; Type: hotkey
+key_replace = Cmd+Alt+F
+
+;Replace all.
+; Type: hotkey
+key_replace_all = Shift+Cmd+Alt+F
+
+
+
+
+

Global search and replace

+

Global search and replace are available from the Find > Find in project and Find > Replace in project menu options.

+

You can search regular expressions, ignore case, and whole word settings using the control button in the search dialog.

+
+authtoken +
+

Once the search operation has completed, all matches are shown in the Codio tab. Double-click the highlighted match to open the file in a new tab.

+
+global search dialog +
+
+

Pattern and wildcard matching (Globs)

+

When doing a search, you can specify a search pattern in the Where field. As an example, for the following project:

+
|-- lib
+|  |-- index.js
+|  |-- hello_world.js
+|-- index.html
+|-- 404.html
+|-- app.js
+`-- gruntfile.coffee
+
+
+

Use globs to search for files as follows:

+
    +
  • All files ending in .js: **/*.js. +- index.js +- hello_world.js +- app.js

  • +
  • All files ending in .html in the root (/home/codio/workspace or ~/workspace) folder: *.html +- index.html +- 404.html

  • +
  • All files in lib: lib/*.* +- index.js +- hello_world.js

  • +
  • All files ending in .html or .coffee: **/*{.html,.coffee} +- index.html +- 404.html +- gruntfile.coffee

  • +
  • All files beginning with index: **/index* +- index.js +- index.html

  • +
+

Any character that appears in a pattern, other than the special pattern characters described below, matches itself.

+
    +
  • The NULL character may not occur in a pattern.

  • +
  • A backslash escapes the following character; the escaping backslash is discarded when matching.

  • +
  • The special pattern characters must be quoted if they are to be matched literally.

  • +
+

The special pattern characters have the following meanings:

+
    +
  • * Matches any string, including the null string. When the globstar shell option is enabled, and * is used in a filename expansion context, two adjacent *s used as a single pattern will match all files and zero or more directories and subdirectories.

    +

    If followed by a /, two adjacent *s will match only directories and subdirectories.

    +
  • +
  • ? Matches any single character.

  • +
  • […] Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that sorts between those two characters, inclusive, using the current locale’s collating sequence and character set, is matched.

    +

    If the first character following the [ is a ! or a ^ then any character not enclosed is matched.

    +

    A - may be matched by including it as the first or last character in the set. A ] may be matched by including it as the first character in the set.

    +

    A character class matches any character belonging to that class. The word character class matches letters, digits, and the character _.

    +

    Within [ and ], an equivalence class can be specified using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c.

    +

    Within [ and ], the syntax [.symbol.] matches the collating symbol symbol.

    +
      +
    • ?(pattern-list) Matches zero or one occurrence of the given patterns.

    • +
    • *(pattern-list) Matches zero or more occurrences of the given patterns.

    • +
    • +(pattern-list) Matches one or more occurrences of the given patterns.

    • +
    • @(pattern-list) Matches one of the given patterns.

    • +
    • !(pattern-list) Matches anything except one of the given patterns.

    • +
    +
  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/share-project.html b/docs/common/develop/ide/editing/share-project.html new file mode 100644 index 00000000..374bb086 --- /dev/null +++ b/docs/common/develop/ide/editing/share-project.html @@ -0,0 +1,792 @@ + + + + + + + + + Share Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Share Project

+

You can share a project if it is public (Project > Settings > General Settings > Public). To share a project or link to a project from a web page, follow these steps.

+
    +
  1. Click the Project tab on the menu bar and choose Share.

    +Share Project +
  2. +
  3. Click one of the options at the top of the dialog (Twitter, Facebook, Email, or Link) to share the project.

  4. +
  5. On the Share Your Project dialog, select the option for how you want to embed or link to your project for the IDE to render it:

    +
      +
    • Project URL - Use this URL to display the project with the active panel or opened file configuration. The URL can change depending on what the user has active.

    • +
    • Guide URL - Use this URL to display your project with your Guide automatically starting.

    • +
    • With Layout - Use this URL if you want to always use the exact panel and file configuration is currently opened. You should use this option if you want to embed it in a log post or page where the exact configuration needs to be retained.

    • +
    +
  6. +
+
+

If you prefer to paste the URL for the Project URL and With Layout options, click the link to generate it in Markdown or HTML format and then paste the code.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/editing/vscode.html b/docs/common/develop/ide/editing/vscode.html new file mode 100644 index 00000000..a3a82d25 --- /dev/null +++ b/docs/common/develop/ide/editing/vscode.html @@ -0,0 +1,818 @@ + + + + + + + + + VSCode — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

VSCode

+

You can set up your assignment to provide VSCode as the default code editor for your students.

+
+

Note

+

The Code Playback functionality will not work for code your students enter in VSCode.

+
+
+

Installing VSCode

+

Use the Tools > Install Software (more information) menu item to easily install VSCode. +After you have completed installing the software you will need to create a new stack or a new stack version to provide this for your students.

+
+
+

Opening VSCode

+

There are multiple ways to provide your students with access to the VSCode editor once you have installed the software. The following are a couple of the possibilities.

+
    +
  • Modify the Preview menu so that students can access VSCode through the menu and open it in a new browser tab.

    +
    +

    To customize the Preview button, modify this section of the .codio file:

    +
    {
    +// Preview button configuration
    +   "preview": {
    +         "Open Visual Studio": "https://{{domain4000}}/"
    +   }
    +}
    +
    +
    +
    +
  • +
  • Use guides to create a layout that automatically opens a pane containing VSCode. The example below shows a 2-Panel layout, you can create any number of panels and specify which panel should open VSCode.

    +
    +
    +
      +
    • Create a 2-Panel Layout.

    • +
    • Add a tab and for type select - “Preview”.

    • +
    • Into the Filename field paste: https://{{domain4000}}/

    • +
    +
    +Configuring the layout for VSCode +

    This is the result, a 2-Panel Layout with the VSCode editor:

    +A two panel display with VSCode as the code editor +
    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/tools/deployment.html b/docs/common/develop/ide/tools/deployment.html new file mode 100644 index 00000000..d6634a75 --- /dev/null +++ b/docs/common/develop/ide/tools/deployment.html @@ -0,0 +1,1001 @@ + + + + + + + + + IDE Tools — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Tools

+
+
+
+

Deployment

+

You do not to need to deploy when you are developing your project. Front-end code is automatically served up over Port 80. Access to back-end code (PHP, Ruby etc.) is done by accessing your Box.

+

You can deploy from the command line (Tools->Terminal menu), but Codio has a great Deployment Manager that lets you deploy all or any part of your project, with a single click ,to a custom ‘deployment target’. We support deployment to the following platforms.

+ +
+

Create/manage a target

+

The Manage Targets options are accessed via Tools > Deployment > Manage Targets menu. All Deployment dialogs will be displayed in the currently active Panel.

+

If you have not yet created any deployment targets then you will be prompted to create one.

+
+Deployment List +
+

In the Deployment Targets dialog, you can:

+
    +
  • list all defined deployment targets

  • +
  • modify existing targets

  • +
  • create new targets

  • +
+
+
+
+

Destination

+

The Destination drop down specifies the type of the target you are deploying to.

+
+

Base path field

+

You will notice that all deployment targets have a Preview Base Path field.

+
+base path +
+

It is important to complete this field for all target types involving remote servers so that the Preview option knows how to access your project once deployed.

+

For example, you might deploy to a remote server at a folder location /home/fmay/www. Accessing this application via a browser, however, depends on how you configure your remote web server.

+

So it could be http://123.456.789 or fmay.mydomain.com is the correct location.

+

Please see the Preview section for more information.

+
+
+

Public keys for remote servers

+

When you are setting up a remote server, Codio can automatically install the Codio public key on your remote server, which saves a tedious manual process.

+ +
+
+

Terminal access to remotes

+

If you are working with remote servers, you may find it useful to be able to SSH into your remote server.

+

Codio supports the ability to open an SSH terminal in a Codio tab. Click here for further details.

+
+
+

Deploying to a target

+

There are three ways to deploy projects.

+
+
+
+

Tools->Deployment->Deploy menu

+

This let’s you deploy to any of your deployment targets you created in Manage Targets. You are shown a log if any errors occur.

+
+deploy screen +
+
+
+

Right Click in the file tree

+

You can deploy an individual file or folder by right-clicking in the file tree.

+
+
+

Command Line

+

You can use the command line directly but you can also add your custom deployment actions by modifying the Run Menu.

+
+

Rsync target type

+

Rsync is a great way of working with remote servers. It behaves much the same as the SFTP deployment type but rather than deploying all files, it deploys only files that have changed.

+

You can use a password and/or a public key for authentication.

+
+rsync dialog +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Public Key Authentication

+

Codio auto-generates a public key that is uniquely associated with your user account. You can find this public key in the User Settings dialog. You should make sure that this public key is added to your remote server.

+
+
+

Protocol

+

There are two options available

+
    +
  • SSH : (recommended) uses an SSH connection to transfer

  • +
  • RSYNC Daemon : this requires you to set up an rsync daemon on the remote server. This is a more complex procedure and so should generally be avoided.

  • +
+
+
+

Specifying a Port

+

If you want to override the default SFTP port (22) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

User Name

+

You will need to supply a valid user name for your remote server regardless of the authentication method.

+
+
+

Password Authentication

+

If you are using a public key then you can leave the password field empty.

+

If you do not want to use a public key, then you will need to use a password for authentication. Simply provide the details in the Codio dialog.

+
+
+

Delete Missing Folders

+

This removes any folders from the remote server that are not present in the Codio project.

+
+

FTP target type

+

The FTP target type allows you to deploy to any FTP server. You supply the usual FTP access details.

+
+deply ftp +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Specifying a Port

+

If you want to override the default FTP port (21) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

Transfer Mode

+

FTP can operate in ‘Active’ or ‘Passive’ mode. Codio will attempt to connect in passive mode by default. If it fails, then it will automatically try active mode. If that fails then you will get an error.

+

However, if you get an error then try changing the setting to Active. This will ensure that Codio will only try to connect in active mode without a risk of confusing the target server.

+
+

SFTP target type

+

The SFTP target type allows you to deploy to any SFTP server. You can use a password and/or a public key for authentication.

+
+deply sftp +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Public Key Authentication

+

Codio auto-generates a public key that is uniquely associated with your user account. You can find this public key in the User Settings dialog. You should make sure that this public key is added to your remote server.

+
+
+

Specifying a Port

+

If you want to override the default SFTP port (22) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

User Name

+

You will need to supply a valid user name for your remote server regardless of the authentication method.

+
+
+

Password Authentication

+

If you are using a public key then you can leave the password field empty.

+

If you do not want to use a public key, then you will need to use a password for authentication. Simply provide the details in the Codio dialog. You can use both a public key and a password if you like.

+
+
+

Empty Destination Path

+

Be very careful when checking this box. It will brutally remove all content from specified location on the remote server before the deploy starts.

+
+

Nodejitsu target type

+

Nodejitsu is a high quality third party Node.js production platform, so we built a dedicated deployment target that makes life as easy as possible.

+

You will need to sign up for a Nodejitsu account before you use it.

+
+deploy nodejitsu +
+

Select Nodejitsu from the Destination drop down and then make sure you either provide an API Token in the highlighted field or just press the Generate button and we’ll create one for you.

+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+

That’s all you will need to do. You’re now ready to deploy.

+
+

Git target type

+

The Git target type allows you to deploy to any remote Git server. You supply the usual Git access details.

+

If you prefer, you can deploy to any remote Git server using the command line. Simply access your Box Terminal. +.

+
+
+
+

Existing Remote

+

If you imported your project from a remote Git repo or used git add remote from the command line, you will see existing remotes listed in the Remote dropdown box and you can select it.

+
+
+

Adding a Remote

+

You can add a new remote by selecting Add remote … from the dropdown. You can then enter your remote details.

+
+
+

Committed Files

+

Codio will only do the equivalent of git push remote-name current-branch and so you need to have staged and committed your files first from the Command Line.

+
+

Deployment history

+

Each time you do a deploy, a history entry is created so you have a full record of deploys and who did them.

+
+deployment history +
+

If you have not selected any specific targets, then all deploys across all targets will be shown. If you select the history button for a specific target, then the history for that specific target is shown.

+
+
+

Deploying specific files & folders

+

If you are using a 3rd party hosting provider that does not support RSYNC (the recommended approach), then you can avoid Codio deploying your entire project by only deploying the files or folders that you specify.

+

Select any files and folders from the file tree and then use the right-click menu to deploy them.

+
+deploy specific files folders +
+

All defined deployment targets will be listed in the submenu. Click the target you want to deploy to.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/tools/desktopapp.html b/docs/common/develop/ide/tools/desktopapp.html new file mode 100644 index 00000000..de5b5bb8 --- /dev/null +++ b/docs/common/develop/ide/tools/desktopapp.html @@ -0,0 +1,856 @@ + + + + + + + + + Desktop App — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Desktop App

+

The desktop app is to allow a local code workspace to synchronize with a Codio box.

+

Assignments/Projects from the Courses dashboard My Projects area can be connected.

+

A Codio account is required

+
+

Excluding files

+

Files/folders can be excluded from synchronisation by using .codioignore` file in the source project. Enter on a new line the file/folders to be excluded defining them relative to the location of he .codioignore file and defining folders with /

+

For example if the .codioignore file is located in the project workspace and you wish to exclude

+
    +
  • bin & node_modules folder

  • +
  • the file error.jade in the views folder

  • +
  • the files app.js and README.md

  • +
+

the .codioignore file will be

+
/bin
+/node_modules
+/views/error.jade
+app.js
+README.md
+
+
+
+codioignore +
+

Please note that the .codioignore file is included in the desktop app files.

+

If students wish to exclude files when pushing back to their Codio account they can do so, either by editing any existing .codioignore``file or creating the file themselves. If the teacher creates the ``.codioignore file, adding a ‘comment’ line to the top of the file to make it clear to any students what they should not change could help avoid potential problems. A line starting with # serves as a comment

+

Click here to go to the download page and install to your local machine

+
+
+

Starting the app

+

When first starting the app you need to choose the server to connect to. In most cases this will be https://codio.com but if you are in the United Kingdom/Europe, it maybe https://codio.co.uk.

+
+desktop server +
+

You can check by logging into your Codio account in your browser and you will see the server domain noted there

+

Having selected the server log in using your codio credentials.

+
+

Note

+

that if you usually access Codio through an LMS, you may not have a Codio account password set. If that is the case, go to the online login screen where you can go through the lost password process to define a Codio account password. We would then recommend you log into your account online and change this password to one you will remember in the future. Setting a Codio account password will not effect or change how you currently access Codio via your LMS

+
+
+
+

Accessing and connecting to your online content

+
+desktop options +
+

When logged in you first see a list of all courses you are a member of and can access your content either from Courses or My Projects area.

+

To pull the code, click on your course or My Projects

+
+desktop connect +
+

and then select either:

+
    +
  • connect - to pull all the code from the selected assignment to a folder on your PC that you define.

  • +
+

desktop workspace.

+
    +
  • Open in Codio - to open the assignment in your Codio account

  • +
+

When connecting, browse to a folder on your PC where you would like to store the code and pull the content

+
+
+

Managing your offline content

+

When you have connected you can then push/pull/open the assignment in Codio and manage the local workspace folder settings.

+
+desktop connected +
+

1. Click the pull button to pull content in from your Codio account. Note Any files you already have stored locally will be overwritten

+

2. Click the push button to push the content from your local workspace folder back to your Codio account. Note This will overwrite the project/assignment in your Codio account

+

3. Click the Open in Codio button to open your assignment in a browser tab. This can be useful if you wish to compare what you have stored locally to what you last pulled from your Codio account

+

4. Click the folder icon to manage your local workspace folder settings

+
+
+

Local workspace folder settings

+
+desktop workspace settings +
+

1. Click the Open the folder button to open the folder containing your local files

+

2. Click the Change folder button to change the folder storing your local files. Note the content of the previous folder will not be automatically copied or transferred to the newly selected folder. If you wish to do this, you should return to the previous screen and pull to that new folder

+

3. Click the Disconnect button to disconnect the assignment from your Codio account. You will be returned to the previous screen where you can then +connect the assignment again if you wish

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/tools/ghapi.html b/docs/common/develop/ide/tools/ghapi.html new file mode 100644 index 00000000..c976ffe8 --- /dev/null +++ b/docs/common/develop/ide/tools/ghapi.html @@ -0,0 +1,961 @@ + + + + + + + + + Git Hub API — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Git Hub API

+

The Git Hub API can be used with Git Hub Actions to automate the publication of assignments.

+

You are able to create your assignments in Codio, connect the box to your GH repo and when merging your branch to master will be able to automatically publish the Codio assignment.

+
+

Set up GitHub API Integration

+

Create your API integration in the Organization->Integrations area. This is only available to users with +Admin rights.

+
+api integration +
+

The name of the integration is added to the version history record. There is no limit to the number you can create so you can use the ID’s in your individual GH repo or use in your GH account to apply to all repos

+
+
+

API Integration information

+

Click on the created integration to view the Client and Secret ID’s where you can copy to clipboard to add into your GH account

+
+api integration +
+

The secret ID can be regenerated if required to manage/control access to publishing the codio assignment.

+
+
+

Adding ID’s to GitHub account

+

In your repo go to Settings -> Secrets and create Client ID and Secret ID copying in from your Codio integration.

+
+GH secret +
+

To create secrets for your organization’s repo (these will apply to all repos in the account and be available for all collaborators), see encrypted secrets for an organization. To create these for an individual repo,, click on New repository secret and create your secret keys.

+

We recommend you that you use the words Client or Secret when you name each key to identify which one it is and also use the name to indicate if the key is for an individual repository or for all repos in an organization.

+
+
+

Implementing workflow actions

+

From your repository on GitHub or within your project, create a new file in the .github/workflows directory with the extension .yml and configure +for use.

+

See Quickstart for GitHub actions

+
+

Example .yml file for publishing a project to an assignment

+
name: codio-publish
+# Run this workflow every time a new commit pushed to your repository branch noted below
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+
+  build:
+  # Set the type of machine to run on - do not change this. Any warnings you may see in workflow actions can be ignored
+    runs-on: ubuntu-latest
+    steps:
+    # Checks out a copy of your repository on the ubuntu-latest machine
+      - name: Checkout
+        uses: actions/checkout@v1
+
+      - name: Cleanup
+     # removes the following files/folders when publishing
+        run: rm -rf README.md
+
+      - name: Publish to Codio
+        uses: codio/codio-assignment-publish-action@master
+        with:
+          # Use the ID's from the secrets below
+          client-id: ${{ secrets.CODIO_PRODUCTION_CLIENT_ID }}
+          secret-id: ${{ secrets.CODIO_PRODUCTION_SECRET_ID }}
+          dir: ./
+          course-id: d5acfd16bb506756595cef3399e1d4
+          assignment-id: 3b52656756565656cd19a4b869b8
+          # You can also use course-name or assignment-name to reference the course/assignment if you prefer
+          # course-name: your course name
+          # assignment-name: your assignment name
+          changelog: ${{ github.event.head_commit.message }}
+          # Set the domain you are working on - codio.com or codio.co.uk
+          domain: codio.com
+
+
+

The course/assignment id’s are found from the URL in your browser when opening the assignment when on the Overview tab. The assignments need to be published to get this information whether using the course/assignment id’s or the course/assignment names.

+
+Course/assignment id +
+
+
+

Publishing projects into multiple assignments

+

If you have a large project, you can use the same methodology to publish the project into multiple assignments in as many different modules as you required.

+
+

Mapping your project structure into the individual assignments

+

From your repository on GitHub or within your project, create a new folder in the .github/workflows directory and within that create individual .yml files for each of the assignments you wish to publish the project into, defining the ‘assignment’, ‘section’ and ‘paths’. It is these files that define what Chapters/Sections/Files from the main project are published into individual assignments

+
+
+

Example .yml file mapping section from project into individual assignments:

+
+Guides set up +
+

Based on the above image, to split the project into 3 separate assignments requires 3 .yml files in the mapping folder set above

+

To publish Chapter 1, Section 1.1 into an assignment:

+
# the id of assignment 1
+- assignment: 617c4f1cf9dcb8764hjk97100a980a09
+# or use the assignment name of assignment 1
+# - assignmentName: your assignment name
+# the section from guides, where both the Chapter and Section names are set in Guides
+  section:  ["Chapter 1", "Section 1.1"]
+# to include all files contained in the folder Section 1.1
+  paths: ['Section 1.1/**']
+
+
+

To publish Chapter 2, Section 2.1 and Chapter 2, Section 2.2 into an assignment:

+
# the id of assignment 2
+- assignment: 36f5f6d99f69a7dc65f5ce8d619e8494
+# or use the assignment name of assignment 2
+# - assignmentName: your assignment name
+ section:  ["Chapter 2", "Section 2.1"]
+  paths: ['Section 2.1/**']
+
+# to include another section from guides in the assignment
+- assignment: 36f5f6d99f69a7dc65f5ce8d619e8494
+# or use the assignment name of assignment 2
+# - assignmentName: your assignment name
+  section:  ["Chapter 2", "Section 2.2"]
+
+  paths: ['Section 2.2/**']
+
+
+

To publish Chapter 3, Section 3.1 into an assignment:

+
- assignment: 399098453265fb2c3eca360db6f5e462f
+# or use the assignment name of assignment 3
+# - assignmentName: your assignment name 3
+  section:  ["Chapter 3", "Section 3.1"]
+  # will show all files set to be visible whether within a folder shown for the student or in the workspace
+  paths: ['**']
+
+
+
+
+

Example .yml workflow actions file for publishing into multiple assignments:

+
name: codio-publish
+# Run this workflow every time a new commit pushed to your repository branch noted below
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+
+  build:
+  # Set the type of machine to run on - do not change this. Any warnings you may see in workflow actions can be ignored
+    runs-on: ubuntu-latest
+    steps:
+    # Checks out a copy of your repository on the ubuntu-latest machine
+      - name: Checkout
+        uses: actions/checkout@v1
+
+      - name: Cleanup
+     # removes the following files/folders when publishing
+        run: rm -rf README.md
+
+      - name: Publish to Codio
+        uses: codio/codio-assignment-publish-action@master
+        with:
+        # Use the ID's from the secrets below
+          client-id: ${{ secrets.CODIO_PRODUCTION_CLIENT_ID }}
+          secret-id: ${{ secrets.CODIO_PRODUCTION_SECRET_ID }}
+          dir: ./
+          course-id: d5acfd16bb506756595cef3399e1
+        # You can also use course-name or assignment-name to reference the course
+          # course-name: your course name
+          changelog: ${{ github.event.head_commit.message }}
+          # the location of your yaml mapping files
+          yml: ./.github/yaml_map
+          # Set the domain you are working on - codio.com or codio.co.uk
+          domain: codio.com
+
+
+
+

Note

+

The ‘assignment-id’ or ‘assignmentName’ field is not required when publishing to multiple assignments. The mapping of the content from the project to the individual assignments is managed by the files in the ‘yml’ location

+
+
+
+
+
+

Working with GH API

+

The basic premise is that when updating your Codio assignment, you connect to your GH repo and create a new branch. Make your required changes and push to your repo. +When you then merge your branch to the master branch, the GH workflow runs and publishes your Codio assignment. Progress/errors can be reviewed from the Actions area in your repo +It is recommended when you merge, that you select the option Squash and Merge as you can combine all your merge request’s commits into one and retain a clean history.

+
+
+

Working with GH API in staging

+

Your .yml file is commonly set up to execute against merges into the master branch but can be changed to execute when other branches merged and the codio assignment to be updated can be managed by reviewing/changing the course/assignment ids

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/tools/ssh.html b/docs/common/develop/ide/tools/ssh.html new file mode 100644 index 00000000..b2bf811f --- /dev/null +++ b/docs/common/develop/ide/tools/ssh.html @@ -0,0 +1,834 @@ + + + + + + + + + Remote SSH Terminal Access — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Remote SSH Terminal Access

+

Important : if you are looking for information on how to connect to your project ‘Box’ using the terminal/console window, then please read about Boxes.

+

Codio provides the ability to connect to remote servers via SSH. You can open multiple connections and manage connections through the SSH Connection Manager.

+

A Quick Connect option lets you access remote servers on an ad hoc basis. The SSH Connection Manager lets you store connections for quick access later.

+

You can do the same things you can do in a regular terminal window, including running text editors like Nano etc.

+
+

Copy & Paste operations

+

Behavior varies between Macs and other operating systems. Using the right-click menu should work on all systems.

+
+

Mac

+

Copy and paste both works as expected with cmd+c and cmd+v.

+
+
+

Windows, Linux

+

Pasting is done as expected with ctrl+v but copying (ctrl+c) cannot be done as it conflicts with the kill process command, so you should use the right-click menu.

+
+
+
+

SSH connection manager

+

You can manage your SSH connections by going to the Tools > SSH > Connection Manager menu item. The Connection Manager lists all previously created connections, which you can then connect to or edit.

+

SSH Connection list

+
+
+

Creating and Editing Connections

+

Press the Create New button to create a new connection or the pencil icon to edit an existing connection.

+

You enter the remote server credentials : user name, hostname and optionally port. You can also specify a friendly name that will appear in the connections list.

+
+ssh connection edit +
+
+
+

Public Keys

+

If you want to add your Codio public key to the remote server, press the key icon in the main Connection Manager listing. This saves you from having to upload a public key manually and means you won’t need to enter a password to authenticate.

+

If you do want to add your public key manually, please refer to the Codio public key documentation.

+
+
+

Making a connection

+

To make a connection, you click on the leftmost icon, which opens the connection in a new tab.

+
+
+

Quick connect

+

The Quick Connect Option (Tools > SSH > Quick Connect) lets you access remote servers on an ad hoc basis. You just enter the remote server credentials : user name, hostname and optionally port.

+

Specify a friendly name if you want to save the connection details.

+
+ssh paramaters +
+

If you do not want to install a public key remotely, then Codio will connect to the remote server, which will prompt you for a password.

+
+
+

Connect

+

When you press Connect, a tab will open up in the current panel and off you go. The connection details will not be saved.

+
+
+

Connect & Save

+

This connects but also saves the connection details to the SSH Connection Manager.

+
+
+

Public Keys

+

If you want to add your Codio public key to the remote server, then you should Connect & Save. Then go to the SSH Connection Manager and press the public key button as described above.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/add-delete-files.html b/docs/common/develop/ide/workspace/add-delete-files.html new file mode 100644 index 00000000..ad9a8411 --- /dev/null +++ b/docs/common/develop/ide/workspace/add-delete-files.html @@ -0,0 +1,816 @@ + + + + + + + + + Add and Delete Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add and Delete Files

+

You can create and delete files in your project using the File tab +on the menu bar or from the context menu in the Filetree.

+
+

Add a file

+

To add a new file, follow these steps:

+
    +
  1. Navigate to the folder in your project where you want to create the +file.

  2. +
  3. Click the File tab on the menu bar and choose New File, or +right-click the folder in the Filetree and choose New File from +the context menu.

  4. +
  5. On the Create New File dialog, enter the File Name and +extension.

  6. +
  7. Click OK.

  8. +
+
+
+

Copy a file

+

You can also copy a file to another location in the project.

+
    +
  1. Right-click the file in the Filetree and choose Copy from the +context menu.

  2. +
  3. Navigate to the location in the project where you want to copy it, +right-click and choose Paste.

  4. +
+
+
+

Move files

+

You can drag and drop a file to another location in the Filetree.

+
+
+

Delete a file

+

To delete a file, use one of the following methods:

+
    +
  • Right-click the file in the Filetree and choose Delete from the +context menu.

  • +
  • Use a keyboard shortcut fn+backspace (Mac) or shift+del +(Windows or Linux)

  • +
+

Warning - Deleting a file cannot be undone.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/add-delete-folders.html b/docs/common/develop/ide/workspace/add-delete-folders.html new file mode 100644 index 00000000..80c6f02c --- /dev/null +++ b/docs/common/develop/ide/workspace/add-delete-folders.html @@ -0,0 +1,817 @@ + + + + + + + + + Add and Delete Folders — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add and Delete Folders

+

You can create and delete folders in your project using the File tab +on the menu bar or from the context menu in the Filetree.

+
+

Add a folder

+

To add a new folder, follow these steps:

+
    +
  1. Navigate to the location in your project where you want to create the +folder.

  2. +
  3. Click the File tab on the menu bar and choose New Folder, or +right-click in the Filetree and choose New Folder from the +context menu.

  4. +
  5. On the Create New Folder dialog, enter the Folder Name and click +OK.

  6. +
+
+
+

Copy a folder

+

You can also copy a folder to another location in the project.

+
    +
  1. Right-click the folder in the Filetree and choose Copy from the +context menu.

  2. +
  3. Navigate to the location in the project where you want to copy it, +right-click and choose Paste.

  4. +
+

The folder and its contents are copied to the new location.

+
+
+

Move a folder

+

You can drag and drop a folder in the Filetree to move it to another +location.

+
+
+

Delete a folder

+

To delete a folder and its content, use one of the following methods:

+
    +
  • Right-click the folder in the Filetree and choose Delete from the +context menu.

  • +
  • Use a keyboard shortcut fn+backspace (Mac) or shift+del +(Windows or Linux)

  • +
+

Warning - Deleting a folder cannot be undone.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/open-file.html b/docs/common/develop/ide/workspace/open-file.html new file mode 100644 index 00000000..69c85609 --- /dev/null +++ b/docs/common/develop/ide/workspace/open-file.html @@ -0,0 +1,777 @@ + + + + + + + + + Open a File — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Open a File

+

To open a file, simply navigate to the file and select it in the left Filetree. When you open a file, it appears in a tab in the currently active Panel.

+

Codio applies syntax highlighting based on the file type, which is displayed in the lower status bar. If you want to change the syntax highlighting to another language format, click the file type in the lower right corner and choose another language from the list.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/panels.html b/docs/common/develop/ide/workspace/panels.html new file mode 100644 index 00000000..cc9dbcaa --- /dev/null +++ b/docs/common/develop/ide/workspace/panels.html @@ -0,0 +1,812 @@ + + + + + + + + + Panels, Tabs, and Layouts — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Panels, Tabs, and Layouts

+

The Codio IDE gives you complete control over your project layout using panels, tabs, and layouts.

+
+

Panels

+

You can arrange your panels using the View > Panels menu options or shortcuts. Whenever you exit the project, its precise panel configuration is saved and reloaded when you open it again.

+

If you have multiple panels in your layout, click in a panel to bring it into focus (white border around it).

+

If you want to open a file in a different panel, click in the panel where you want to open it, and then select the file in the Filetree.

+

To close a panel, click in the panel and then click View > Panels > Close. You can also use the shortcut keys Cmd+Alt+C (Mac) and Ctrl+Alt+C (PC/Linux).

+
+
+

Tabs

+

Whenever you open a file, it opens in a new tab. You can have multiple tabs open in any panel. You can also drag tabs within a panel and to other panels.

+

The Filetree is a tab within a panel. You can move it to another panel, close it, and re-open it. To reopen it, click View > Filetree menu bar.

+

You can cycle between tabs in a panel using the keyboard shortcuts:

+
    +
  • Alt+Shift+. - takes you to the previous tab.

  • +
  • Alt+Shift+. - takes you to the next tab.

  • +
+

You can also customize these shortcuts in User Preferences:

+
    +
  • tab_switch_left

  • +
  • tab_switch_right

  • +
+

To expand a tab to full screen mode, press F11 on your keyboard. To reduce the size, press F11 again.

+
+

Note

+

Some Mac users may find that F11 is blocked. You can easily modify the keyboard shortcut in User Preferences.

+
+
+
+

Layouts

+

You can choose the layout of your workspace from the View > Layouts menu:

+
    +
  • Default - The default layout includes two panels layed out horizontally. To reset your layout to the default, click View > Layouts > Default. You can also use the shortcut keys Cmd+Alt+R (Mac) and Ctrl+Alt+R (PC/Linux).

  • +
  • Split Vertical - Splits the selected panel by drawing a vertical line down the middle, so you end up with two panels side-by-side. You can also use the shortcut keys Cmd+Alt+V (Mac) and Ctrl+Alt+V (PC/Linux).

  • +
  • Split Horizontal - Splits the selected panel by drawing a horizontal line across the middle, so you end up with one panel on top of the new panel. You can also use the shortcut keys Cmd+Alt+H (Mac) and Ctrl+Alt+H (PC/Linux).

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/upload-download-files.html b/docs/common/develop/ide/workspace/upload-download-files.html new file mode 100644 index 00000000..4719334d --- /dev/null +++ b/docs/common/develop/ide/workspace/upload-download-files.html @@ -0,0 +1,812 @@ + + + + + + + + + Upload and Download Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Upload and Download Files

+

You can upload files to your project, and download them to your local +computer.

+
+

Upload a file

+

To upload a file, follow these steps:

+
    +
  1. Navigate to the folder where you want to upload the file.

  2. +
  3. Click the File tab in the menu bar and choose Upload, or +right-click the folder and choose Upload from the context menu.

  4. +
+
+Upload +
+
    +
  1. On the Upload Files dialog, use one of the following methods to +upload the file:

  2. +
+
    +
  • Drag and drop the files from your desktop or File Explorer into the +dialog box and click Close.

  • +
  • Click Browse for Files, select the files to upload, and then +click Close.

  • +
  • Click Browse for Files from Folder, navigate to the folder and +select it, and then click Close.

  • +
+

Important: If you select Browse for Files from Folder, only the +files in the main folder are uploaded. You must manually upload one +folder at a time for multiple folders.

+
+
+

Download files

+

To download individual files from your project, right-click the file in +the Filetree and choose Download.

+
+Download File +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/ide/workspace/workspace.html b/docs/common/develop/ide/workspace/workspace.html new file mode 100644 index 00000000..3127bf18 --- /dev/null +++ b/docs/common/develop/ide/workspace/workspace.html @@ -0,0 +1,803 @@ + + + + + + + + + IDE Workspace — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Workspace

+
+
+

The Codio IDE is a web-based, easy to use workspace when you are learning to code.

+

Review the following common tasks to get you started using the workspace:

+ +

When you open up a project for the first time in the IDE, the readme.md file in the root (/home/codio/workspace or ~/workspace) of the project is displayed in a tab in markdown. When you open the project again, it opens as you last left it with the same files and tabs. Whichever file was open in front is opened again.

+
+Readme.md File +
+

You can also select the README.md file in the Filetree. You can switch +between Preview, Code, or Splitview in the lower right +corner.

+

Subsequent times you see the project as you last left it with the files and tabs the same and whatever file was open in front will be open again.

+

The readme.md file should be written in markdown

+
+

Exit the IDE

+

You can exit the IDE and return to the Dashboard using one of the following methods:

+
    +
  • Click the Project tab on the menu bar and choose Exit.

  • +
  • Click the Gravatar or your user name in the menu bar.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/packs/create-starter-pack.html b/docs/common/develop/packs/create-starter-pack.html new file mode 100644 index 00000000..e491421f --- /dev/null +++ b/docs/common/develop/packs/create-starter-pack.html @@ -0,0 +1,812 @@ + + + + + + + + + Create Starter Pack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create Starter Pack

+

You can create your own Starter Pack and upload it for others to use. Follow these steps to create a Starter Pack:

+
    +
  1. In the navigation pane, click Starter Packs.

  2. +
  3. On the Packs page, click New Pack.

  4. +
  5. Click the Workspace Source. The following options are available:

    +
      +
    • Codio - Use a Codio project that contains your code.

    • +
    • Git - Specify a Git repo; use the HTTPS URL to the repository.

    • +
    • Mercurial - Specify a Mercurial repo; use the HTTPS URL to the repository.

    • +
    +
    +

    Note

    +

    When you specify a Git or Mercurial repo, the repos is pulled into the project each time someone uses your Starter Pack.

    +
    +
  6. +
  7. Specify the Stack to be used. If you only need a base Ubuntu Box, you do not need to specify a Stack.

    +
    +

    Note

    +

    A Starter Pack is simply a Codio Stack and code workspace. If your Starter Pack is based on a project that has had the Box modified (additional Box components installed, npm global install etc.), these are not present in the project created from the Starter Pack.

    +
    +
  8. +
  9. Enter a Name and Description, and optionally an Image and Tags that allow searchability.

  10. +
  11. Specify the Visibility of the Starter Pack. By default, a Starter Pack is private to your account until you make it public, at which point it is displayed in the Popular and All pages where all Codio users can access it.

  12. +
+
+
+

Note

+

The organization owner can disable the ability for you to create public starter packs. See Enable or Disable Public/Private Settings.

+
+
+

Important

+

Do not make your Starter Pack public unless you have fully tested it.

+
+
+
    +
  1. Click Create.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/packs/packs.html b/docs/common/develop/packs/packs.html new file mode 100644 index 00000000..1a30ac3a --- /dev/null +++ b/docs/common/develop/packs/packs.html @@ -0,0 +1,798 @@ + + + + + + + + + Starter Packs — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Starter Packs

+
+
+

Starter Packs offer an easy way to get started using templates of projects that include:

+
    +
  • A base Ubuntu operating system.

  • +
  • A Stack which includes base software dependencies such as databases, languages and other system components (optional).

  • +
  • Any code present in your project.

  • +
+

Using Starter Packs, you can organize and share your own packs, or use Codio’s certified packs. If you want additional Starter Packs, you can easily create your own or you can submit a request for Codio to add one for you. Simply email us at help@codio.com with full details and we’ll try to get it added for you.

+

Follow these steps to view and use a Starter Pack:

+
    +
  1. In the navigation pane, click Starter Packs.

  2. +
  3. Click the Certified tab and search for the technology you want to use.

    +Certified Starter Packs +
  4. +
  5. Click the Starter Pack and view the full details about the pack.

    +Starter Pack Details +
  6. +
  7. Click Use Pack to open the Projects > Create page.

    +

    If you want to create a new Starter Pack, click New Pack. See Create Starter Pack for more information.

    +
  8. +
  9. Optionally, change the Name or Description and then click Create.

  10. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/packs/starter-pack-guidelines.html b/docs/common/develop/packs/starter-pack-guidelines.html new file mode 100644 index 00000000..01a709ff --- /dev/null +++ b/docs/common/develop/packs/starter-pack-guidelines.html @@ -0,0 +1,844 @@ + + + + + + + + + Starter Pack Guidelines — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Starter Pack Guidelines

+

The following guidelines may help you When creating a Starter Pack.

+
+

Stack

+

When you create a Starter Pack, you should first create a new project from a stack that meets your requirements. You can also use the Base Stack and then install your own components.

+
+
+

.codio file

+

Create a .codio file in the root (/home/codio/workspace or ~/workspace) of your project so you can easily run common terminal commands and preview the code.

+

To enable your project to preview inside a Codio tab, you must configure the preview to run over https. We recommend this as being the default behavior as it will run both inside Codio and in a new browser tab. You should configure any services to run on any port between 9500 and 9000, depending on the server technology being used.

+

The following .codio file is typical:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Start Express Server": "npm start"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Preview": "https://{{domain}}:9500/"
+  }
+}
+
+
+
+
+

Create a new stack

+

If you have installed or configured any components that are not a part of the code workspace, then you may want to create a special Stack that your Starter Pack uses. If you don’t do this, then Projects that are created from the Starter Pack will need to have these modifications performed after Project creation. This might be an npm install if you are using Node.

+
+
+

Use GitHub

+

Although you can use Codio as the source for your Starter Pack, we recommend pushing your Project to a Git remote. This gives better version control over time. The creation process is also somewhat faster.

+

When you create the Starter Pack, you can specify the Git url.

+
+
+

Long Description

+

You should include a full description of your Starter Pack that appears when someone clicks on it within the Starter Packs listing. Check out some of Codio Certified Pack long descriptions.

+
+
+

README.md file

+

You should create a README.md file in the root (/home/codio/workspace or ~/workspace) of your project that displays helpful information the user can see when they open the project.

+

Below is a template that can be used:

+
# Title
+Put the name of your Pack here containing the primary technology or technologies with a version number, along with a short description.
+
+## Using the Pack
+Describe how the user should get started. Point to your `.codio` menu options if you have created any.
+
+## How the Pack was prepared
+It can be helpful to others or even to you later on to describe how you built the Pack. What we often do is to include a set of instructions that can be pasted into a Bash script to recreate the Pack with a single command.
+
+**Example** : This Starter Pack was built on the Node+Grunt+MongoDB Stack. We than ran the following commands before creating the Pack.
+
+npm install -g express
+npm install -g express-generator
+express .
+npm install
+
+## Useful Links
+
+- [Express site](http://expressjs.com/)
+- [Node](http://nodejs.org/)
+- [npm](https://www.npmjs.org/)
+- [Grunt](http://gruntjs.com/)
+- [MongoDB](https://www.mongodb.org)
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/packs/update-starter-pack.html b/docs/common/develop/packs/update-starter-pack.html new file mode 100644 index 00000000..2012dc36 --- /dev/null +++ b/docs/common/develop/packs/update-starter-pack.html @@ -0,0 +1,800 @@ + + + + + + + + + Update a Starter Pack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Update a Starter Pack

+

When you edit your Starter Pack, the Source field is enabled if you are the owner of the source project and the project has not been deleted. If someone else owns the project or if you have deleted the underlying project, you can still edit the project data fields below the Source field and the original project that was used will be retained.

+

If you need to make changes to your Starter Pack, follow these steps:

+
    +
  1. Create a new project from your Starter Pack or locate an existing project where you want to use your Starter Pack.

  2. +
  3. Locate the Starter Pack and click Edit.

  4. +
  5. In the Source field, browse to the correctly configured project.

  6. +
  7. Click Create in the lower portion of the page.

  8. +
+
+

Note

+

Codio does not support versioning for Starter Packs.

+
+
+

Deleting a Starter Pack

+

To delete a Starter Pack, follow these steps:

+
    +
  1. On the My Packs page, click the Starter Pack to open it.

  2. +
  3. Click Remove.

  4. +
  5. On the confirmation dialog, click Yes to confirm the delete.

  6. +
+
+

Note

+

Any projects that were created from a Starter Pack will not be impacted.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/access-projects.html b/docs/common/develop/projects/access-projects.html new file mode 100644 index 00000000..a07ae18b --- /dev/null +++ b/docs/common/develop/projects/access-projects.html @@ -0,0 +1,829 @@ + + + + + + + + + Access Projects — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Access Projects

+

You access your projects from My Projects in the left navigation pane. The Projects page shows all of your coding projects and those projects that have been shared with you.

+

If a project has been shared with you, you can view the projects from the Shared with me page on the Projects dashboard.

+Shared Project +
+

Access another user’s project

+

If you know the user name of another Codio user, you can enter the URL for their account (https://codio.com/username) and view their Project dashboard, where all of their public projects will be displayed. You can click the project to load it into the IDE and copy it into your account (you cannot edit another user’s project). See Copying a Project for more information.

+

You cannot edit another user’s project but you can copy a project into your own account.

+
+
+

Open a project

+

To open a project in the IDE, simply click the project name.

+
+
+

Access project settings

+

Use one of the following methods to access your project settings:

+
    +
  • Open the project and click the Settings (gear) icon.

  • +
  • Open the project, click the Project tab and choose Settings on the menu bar.

  • +
+
+
+

Filter projects

+

You can filter how the projects are displayed on the Project page by name or most recently accessed. Click the filter drop-down and choose Name or Last Accessed.

+
+
+

Search projects

+

To search for a specific project, enter the name in the Search text box. The file list dynamically filters the projects as you enter characters.

+

Codio also supports advanced search capabilities which use search tokens to narrow your search criteria. The following search tokens are supported:

+
    +
  • Tokens with parameters allow you to type the search criteria after the colon delimiter:

    +
      +
    • name: search the project name

    • +
    • desc: search the project description

    • +
    • owner: search the project owner

    • +
    • org: search for an organization name

    • +
    • begin: search for a class start date (Education feature)

    • +
    • end: search for a class end date (Education feature)

    • +
    +
  • +
  • Tokens without parameters can be used simply by adding a space after them if you have anything else to enter in the search line:

    +
      +
    • my: show only projects owned by me

    • +
    • shared: show only projects that are shared with me

    • +
    • public: show only my public projects

    • +
    • private: show only my private projects

    • +
    +
  • +
+

For example:

+
    +
  • public: desc:javascript searches your public projects where ‘javascript’ appears in the project description.

  • +
  • owner:superman javascript searches projects owned by the user ‘superman’’ where ‘javascript’ appears in the project name or description.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/copy-project.html b/docs/common/develop/projects/copy-project.html new file mode 100644 index 00000000..861140e3 --- /dev/null +++ b/docs/common/develop/projects/copy-project.html @@ -0,0 +1,791 @@ + + + + + + + + + Copy a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Copy a Project

+

You can copy any third-party public project into your account. To copy a project, follow these steps:

+
    +
  1. Click the Project tab and choose Create Copy.

  2. +
  3. On the Create Copy dialog, click the Clone Options button for the action you want to perform:

    +
      +
    • Clone Only Project - Copies only the workspace files and folders.

      +Copied Project +
    • +
    • Clone Only Box - Copies only the stack into an empty project.

      +Clone Box +
    • +
    • Clone Box & Project - Copies both the workspace and files, and the stack.

    • +
    +
  4. +
  5. Click Continue to create the copy of the project in your account.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/create-import-project.html b/docs/common/develop/projects/create-import-project.html new file mode 100644 index 00000000..a4ed2782 --- /dev/null +++ b/docs/common/develop/projects/create-import-project.html @@ -0,0 +1,807 @@ + + + + + + + + + Create or Import a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create or Import a Project

+

You can create a new project or import a project from the Projects page by following the relevant procedure.

+

Follow these steps:

+
    +
  1. Click My Projects in the navigation pane and click New Project.

    +Create Project +
  2. +
  3. Select one of the available options:

  4. +
+
+
    +
  • Empty with Stack - Create a new project selecting the Stack to use either from those shown or ‘browse for more’

  • +
  • Copy Project - Create a new project by copying one of your other projects. If you choose this option, browse to the project to Copy From.

  • +
  • Starter Pack - Create a project using one of our pre-configured Starter Packs as a starting point. This option is a combination of a Stack, a populated code workspace and in many cases a guide containing instructional material.

  • +
  • Import - Create a project by importing it from Git or from a Zip file of a Codio project. If you choose this option, browse to select a Stack and choose the Source from the drop-down list.

  • +
+
+

Projects created from a template include an explanatory README.md file that provides useful information to help you get started. The template (with the exception of Empty Stack) also includes a pre-configured .codio menu setup with basic actions the selected project requires. If you want to re-configure the .codio menu file, see Customizable Run Menu for more information.

+
+

Because you have sudo level privileges, you can also customize any stack from the command line. See Stacks to learn how to create and manage your own software configuration templates.

+
+
    +
  1. Enter a Name and Description for your project. This is the information that is displayed in your projects list.

  2. +
  3. Select the visibility of the project (Private or Public). By default, all projects are created as private and are only accessible to you (in My Projects, a padlock icon is displayed next to all private projects.

  4. +
+
+

Note

+

If enabled by your organization owner, you can create public projects but these are accessible by any Codio user. See Public and Private Settings for more information.

+

If your project is private, you can assign read, write, or full admin permissions (ability for others to access the box from the terminal) to other users from the Project > Permissions menu in the IDE.

+
+
    +
  1. Modify the Select gigabox value if your project will require more memory. See Gigaboxes for more information on Gigaboxes.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/export-project.html b/docs/common/develop/projects/export-project.html new file mode 100644 index 00000000..8d801d69 --- /dev/null +++ b/docs/common/develop/projects/export-project.html @@ -0,0 +1,786 @@ + + + + + + + + + Export a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Export a Project

+

You can export a project from the Project tab on the menu bar or +using the context menu in the Filetree. Use one of the following methods +to export a project:

+
    +
  • Select the top-level folder in the Filetree, and then click the +Project tab on the menu bar and choose Export as Zip.

  • +
  • Right-click the folder and choose Export as Zip in the context +menu.

  • +
  • Click the Project tab on the menu bar and choose the Project Settings +page then click Export in the lower right corner.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/project-permissions.html b/docs/common/develop/projects/project-permissions.html new file mode 100644 index 00000000..1634a4ac --- /dev/null +++ b/docs/common/develop/projects/project-permissions.html @@ -0,0 +1,803 @@ + + + + + + + + + Project Permissions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Permissions

+

When a project is created, you can choose to make it private or public. By default, the following rules apply to project permissions:

+
    +
  • Anyone can view and copy a public project but cannot edit it.

  • +
  • No one but the project owner can view a private project.

  • +
+

To change the permissions on a project, follow these steps:

+
    +
  1. Click the Permissions tab and choose Project.

    +Project Permissions +
  2. +
  3. Select the permission level next to the user’s name:

    +
      +
    • Read - User can only view the project.

    • +
    • Write - User can edit the project.

    • +
    • Admin - User can access the terminal and the deployment screens. Caution should be used when assigning a user Admin permission because they have full access to keys and any other private data that might be stored on the box.

    • +
    +
  4. +
+
+

Add or remove a user

+

To add a user to a box, follow these steps:

+
    +
  1. Enter the user name in the Search text box.

  2. +
  3. Select it and click Add.

  4. +
  5. Assign the permission level to the user.

  6. +
+

To remove a user from a box, click the X button.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/project-settings.html b/docs/common/develop/projects/project-settings.html new file mode 100644 index 00000000..3faa3898 --- /dev/null +++ b/docs/common/develop/projects/project-settings.html @@ -0,0 +1,799 @@ + + + + + + + + + Project Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Settings

+

The Settings page within a project includes various options for specifying settings related to the project, including:

+
    +
  • Project Name and Description

  • +
  • Public or Private Project

  • +
  • Allow Box Cloning (payment required)

  • +
  • Always-On Box (see Always on Boxes)

  • +
  • Allow Private Static Preview. See Preview for more information. This setting is only available from Project > Settings.

  • +
  • Protect Dynamic Ports. Enable to restrict preview to the owner of the box; disable to allow preview of the box to anyone who knows the box url. This setting is only available from Project > Settings.

  • +
  • Stack Settings - specify current stack and version used in your project.

  • +
  • Forwarding Settings - enable SSH forwarding. See Access Codio Box via SSH for more information.

  • +
  • Gigaboxes Settings - set this to a larger size if you have a memory intensive project. You must first request a larger box for your organization. Contact help@codio.com to initiate this discussion. If you add your project to a course as an assignment, as you publish your assignment, the Propagate gigabox settings to the assignment settings option on the publish assignment dialog will show. By default it is enabled but you can disable it if you choose.

  • +
+Publish Dialog +

You can also perform the following tasks from the project settings:

+
    +
  • Delete your project.

  • +
  • Export the project as a Zip file.

  • +
+

You can access the project settings using one of the following methods:

+
    +
  • Click the Project tab on the menu bar and choose Settings.

  • +
  • In the Dashboard, click the Open Settings icon (gear) from the My Projects list.

  • +
+Project Settings +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/projects/projects.html b/docs/common/develop/projects/projects.html new file mode 100644 index 00000000..d8054a58 --- /dev/null +++ b/docs/common/develop/projects/projects.html @@ -0,0 +1,807 @@ + + + + + + + + + Developing Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Developing Code

+
+
+
+

Projects

+

A project is a Ubuntu server and is commonly referred to as a box. You can create as many projects (boxes) as needed, and with sudo privileges, you can install and configure them however you want. Each project box is fully isolated from your other project boxes.

+

When opening a project, you are taken into the project server (box) and are presented with the Codio IDE. You can access the command line via a terminal window.

+
+
+

Project templates

+

Codio works with a series of templates for software configurations, also commonly referred to as stacks. These templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can use our pre-configured templates or create your own. This template approach makes Codio easy to use, configure and adapt.

+
    +
  • You can take a snapshot of the software configuration on any box and add it to the Stacks template library.

  • +
  • You can take a snapshot of the stack/project code workspace combination and add it to the Starter Packs template library.

  • +
+
+
+

Project concepts and features

+

We strongly recommend that you familiarize yourself with the following project related concepts and features before you get started:

+ +

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/create-stack.html b/docs/common/develop/stacks/create-stack.html new file mode 100644 index 00000000..0fd21c6c --- /dev/null +++ b/docs/common/develop/stacks/create-stack.html @@ -0,0 +1,931 @@ + + + + + + + + + Create a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create a Stack

+

You can create a new stack or stack version from a project or assignment in the IDE, or from the Stacks page in the Codio dashboard.

+
+

Note

+

Prior to creating a stack, read the information about Stacks so you are familiar with how stacks work in Codio.

+
+
+

Stack guidelines

+

Before you create a stack, review the following strategies and considerations to improve their usefulness:

+
    +
  • Create a new project from a stack that most closely matches your requirements. You can also use the Base Stack and then install your own components.

  • +
  • Include a full description of the stack; this is the description that is displayed in the Stacks listing and the stack info (Projects > Stack > Info) in a project. For a reference, review some of the Codio Certified Pack long descriptions.

  • +
+
+
+

Create a new stack from the IDE

+

To create a new stack or new version of a stack from a project or assignment in the IDE, follow these steps:

+
    +
  1. Open the project in the IDE.

  2. +
  3. Click the Project tab on the menu bar and choose Stack > Create New.

    +Stacks Create New +
  4. +
+

By default, the stack is Private. To make it available to others, refer to Visibility and Ownership. We recommend that you set the owner to your organization.

+
+
+

Create a new stack from the dashboard

+

To create a new stack or new version of a stack from the Codio dashboard, follow these steps:

+
    +
  1. In the left navigation pane, Stacks.

  2. +
  3. On the Stacks page, click New Stack and point to your project.

    +Create New Stack +
  4. +
  5. Complete the required fields:

    +
      +
    • Stack Blueprint - Choose the Codio project to be used for the stack blueprint. Enter any part of the project name to view the blueprints in a drop-down list.

    • +
    • Name and Description - Enter a short name and a longer description for the stack. To add a more detailed overview of the stack, click the add a long description link. You can write the description using markdown.

    • +
    • Image - You can add an image to make your stack more instantly recognizable in the listing. The image should be square; the size will be reduced and appear in a circle.

    • +
    • Tags - You can add tags to the stack help ensure maximum search capabilities. Ideally, the tags should be component names. The autocomplete feature helps you find already defined tags to avoid duplication.

    • +
    +
  6. +
  7. Click Create to generate the stack image (this may take a few minutes depending on the size of the image).

  8. +
+
+

Note

+

You do not need to remain on the page while the stack image is being created; you may continue to other areas of Codio. However, the source project is not accessible until the stack has been created.

+
+
+

Sample template

+

Below is a sample template that can be modified for your stack.

+
# Title
+Put the name of your Stack here.
+
+## Using the Stack
+Describe how the user should get started.
+
+## Starter Pack
+If there are related Starter Packs you have created from this Stack that include code files, detail them here.
+
+## Components Installed
+It can be helpful to others or even to you later on to describe the installed Components and versions.
+
+## Configuration Files
+Detail where any component configuration files can be found. As you install components from `Tools>Install Software` a log file of all this information will be opened.
+
+## General Information
+Include any general information on the use and operation of any installed components.
+
+## Codio Documentation
+We recommend you include useful links to the Codio Documentation.
+
+##Stack Specific Links
+Provide useful links on the Stack components.
+
+
+
+
+

Sample template from Codio Certified LAMP stack

+
# LAMP
+
+## Using this Stack
+This Codio Stack gives you a complete **LAMP** stack ready to use and with all services up and running.
+
+## Related Stacks & Starter Packs
+There are various other Stacks and Starter Packs that may be of interest. Please search the listing for
+
+- Stack : **LEMP**
+- Stack : **LAPP**
+- Stack : **LAMP** + Composer
+- Starter Pack : **Laravel** (LAMP + Composer + Laravel)
+
+## Components Installed
+This Stack contains the following major component versions
+
+- **PHP** 5.5.9
+- **Apache** 2.4.7
+- **MySQL** 14.14 Distrib 5.5.46
+
+## Configuration Files
+You can find configuration files in the following locations
+
+- **PHP config file** : `/etc/php5/apache2/php.ini`
+- **Apache config** : `/etc/apache2/apache2.conf`
+- **MySQL default config file** :  `/etc/mysql/my.cnf`
+
+## General Information
+
+# Apache Server
+Apache should be started by default. You can manually start, stop and restart it using the following terminal commands:
+
+$ sudo service apache2 start
+$ sudo service  apache2 stop
+$ sudo service  apache2 restart
+
+
+# MySQL
+
+## Start, Stop, Restart the MySQL server
+MySQL should be started by default. You can manually start, stop and restart the MySQL server using the following terminal commands:
+
+$ sudo service mysql start
+$ sudo service mysql stop
+$ sudo service mysql restart
+
+
+## Connecting to the MySQL monitor
+Assuming the MySQL server is started, you can connect to it using `mysql` from the terminal. Exit using `ctrl+c`.
+
+## Root Password
+If you want to set the root password, use the following command from the terminal
+
+mysqladmin -u root password NEWPASSWORD`
+
+
+## Codio Documentation
+Please be aware of the following useful links
+
+- [How to Access your Box](https://docs.codio.com/develop/develop/ide/boxes/overview.html)
+- [If your firewall only allows access to port 80](https://docs.codio.com/develop/develop/ide/boxes/ext-access.html)
+- [Creating Codio menu items to avoid repetitive terminal commands](https://docs.codio.com/develop/develop/ide/boxes/runmenu.html#customizable-run-menu)
+- [Using Git in Codio](https://docs.codio.com/common/develop/ide/editing/git.html#git)
+- [Customizing the IDE settings](https://docs.codio.com/develop/settings/user-prefs.html#user-prefs)
+- [Restarting your Box](https://docs.codio.com/common/develop/ide/boxes/restart-reset.html#restart-and-reset)
+- [Creating multiple code editing panels in the IDE](https://docs.codio.com/common/develop/ide/workspace/panels.html#id1)
+
+## Stack Specific Links
+
+- [PHP](http://php.net)
+- [Apache](http://httpd.apache.org)
+- [MySQL](http://dev.mysql.com)
+
+## Updating Components
+If this Stack is not using any of the latest components, please email support@codio.com and we will update it.
+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/modify-stack.html b/docs/common/develop/stacks/modify-stack.html new file mode 100644 index 00000000..9bc99fe8 --- /dev/null +++ b/docs/common/develop/stacks/modify-stack.html @@ -0,0 +1,803 @@ + + + + + + + + + Modify a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Modify a Stack

+

Any changes you or an application makes to the software on the server (box) outside the Workspace folder is considered a stack modification. Such modifications may include changes made using sudo apt-get install, manually editing a config file, or changes to a database due to application usage.

+

You can modify the stack at any time by opening a project, or course assignment and making the stack changes from the command line. Keep in mind that your modifications will work fine on the project you are working on as the owner, but the modifications will not be transferred to those being run by your students.

+

You must first create a clean stack with your modifications and then switch the project to the clean stack. See Creating a Stack and Switching a Project Stack for more information.

+
+

Rules for modifying a stack

+

Before modifying a stack, be aware of the following rules:

+
    +
  • If you are the stack owner or have write access to the stack, you can create new versions of an existing stack.

  • +
  • If you do not have write access to the stack, which is the case for the Codio certified stacks, you need to create a new stack for which you are the owner and then create your own versions from that stack.

  • +
  • If the stack is Private and the owner is set to an organization where you are a member, you have write access and can create new versions of that stack.

  • +
+

See Stacks for information about visibility and ownership.

+
+

Use case of a stack modification

+

If a MySQL database’s data is in the normal location within the stack (/var/lib/mysql/), when the project is assigned to the course, each student gets their own database, independent of other students. However, if the stack is changed for any reason (for example, the project owner makes a change or the stack version has changed for an already assigned assignment), all database data will be reset to the state of the new stack since the database data folder is not a part of the workspace.

+

If you want to keep the database independent of the stack, you should include the database file in the Workspace folder (by editing /etc/mysql/mysql.conf.d/mysqld.cnf). You can then update the database software via a stack change but keep the database data intact when you switch stacks.

+

Remember the following points to avoid issues:

+
    +
  • Assignment = Selected Stack + Stack Changes + Workspace Folder

  • +
  • When run by students from an assignment: Assignment = Selected Stack + Workspace (no stack modifications)

  • +
  • Stack modifications in the source project or assignment are not transferred when students launch the assignment.

  • +
+
+

Note

+

Once the project or assignment is run by students, if they make changes to their stacks, each stack is individually handled so there are no issues unless a new stack is selected in Project > Stacks > Settings on the menu bar.

+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/stack-planning.html b/docs/common/develop/stacks/stack-planning.html new file mode 100644 index 00000000..e69239ad --- /dev/null +++ b/docs/common/develop/stacks/stack-planning.html @@ -0,0 +1,818 @@ + + + + + + + + + Stack planning — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Stack planning

+

You should be familiar with the concept of stack before creating content.

+
+

Minimize the number of stacks

+

It is important to think about the stack that your course uses. You should avoid creating a new stack for each assignment. There are very few cases where this is needed. If you unnecessarily create new stacks for each assignment, you will be less efficient and waste unnecessary time with stack builds/rebuilds.

+

You should look to use as few stacks as possible, ideally just one, and use that stack for all assignments. There are perfectly valid exceptions, but this is the rule.

+
+
+

Single stack example

+

To illustrate a single stack situation, let’s assume you are teaching a course “Programming in Java”. You could either use our default Java stack or you start with the Java stack and then add additional tools so it has all the components you require to teach all parts of your course.

+

Whether you have created your own stack or used a default one, you would then point all your assignments to that one, same stack.

+

If, as you create more assignments in your course, you find you need to install more tools, then you should update the stack with a new version.

+

By default, when you choose a stack for your new assignment, it will point to the latest version. So if the underlying stack is updated from any location at all, then any assignment that uses that stack will automatically be set to use it. Students who are using an assignment in a course will also automatically use the latest version when it is updated.

+

It follows that you should be very careful when pointing to a specific version of a stack, rather than the latest version. If you do this, then you will need to update all assignments that are not set to use the latest version.

+
+
+

Multiple stack example

+

Let’s say you are teaching a course “Introduction to Programming” and it has 3 modules “Java”, “Python” and “Haskell” and each module contains a good number of assignments. In this case, you could still choose the single stack approach, but you would need to install all three languages and their toolsets and then create a stack from it.

+

A simpler approach would be to use three separate stacks, one for each language. You set the assignments for each language to point to the appropriate language stack.

+

Other than that, the principles described above still apply.

+
+
+

Switching stacks

+

It is possible to change the stack for an assignment. This can be done from either the assignment listing area from within the IDE. However, if this change were to be needed for all assignments then you would have to repeat this for each assignment individually.

+

It is therefore highly recommended that you start with a stack and stick with it wherever possible.

+
+
+

Stacks not owned by you

+

If you were to use one of Codio’s default stacks then you are not able to update these yourself as you don’t have permissions. However, you might want to start off with, say, the Java stack and then install new components.

+

In this case, you should plan this ahead of time. You would

+
    +
  • first create the assignment from Codio’s Java stack

  • +
  • install your components

  • +
  • create a new stack from your assignment (in the IDE) or from the stacks dashboard)

  • +
  • make sure your stack is switched to that newly created stack

  • +
+

You now own this stack and so you can update whenever you like down the line. When you create new assignments, you would then choose this new stack.

+
+
+

Use Latest Version

+

When you assign a stack to an assignment, it will be set by default to the Use Latest Version. You can view the stack settings from the IDE (Project-Stack Settings)

+

Understanding what Use Latest Version means is important. When you work with an assignment as a course author, that assignment is actually using a fixed version. It does not automatically switch to the latest version each time a new version of a stack is created. This could be dangerous as switching a stack resets everything outside the workspace folder. If you want to update to the latest version then you need to go to the stack settings dialog and press the save button.

+

Where Use Latest Version is useful is when you assign a course module and its assignments to a course. In this case, students who have not yet started an assignment will get the latest version of the stack.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/stacks.html b/docs/common/develop/stacks/stacks.html new file mode 100644 index 00000000..e5345881 --- /dev/null +++ b/docs/common/develop/stacks/stacks.html @@ -0,0 +1,816 @@ + + + + + + + + + Stacks — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Stacks

+
+
+

Codio projects are mounted to software configuration templates, known as Codio stacks. A stack refers to the software configuration of a project server (box), which includes everything on the server outside the code workspace (/home/codio/workspace) that you see in the IDE file tree.

+

When you create a new Codio project or course assignment, you must specify a stack that contains the operating system (always) and other components such as languages, databases and tools. You can use our pre-configured stacks or create your own using the project templates.

+

Codio’s templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can also snapshot a box’s stack create a stack and add it to the Stacks template library.

+
+

Note

+

It is very important to understand how Stacks are used in Codio, especially when working with courses. Incorrect usage can result in being able to edit a project but then failing when it is run.

+
+
+

Stack modifications

+

Any changes you or an application makes to the software on the server (box) outside the Workspace folder is considered a stack modification. Such modifications may include changes made using sudo apt-get install, manually editing a config file, or changes to a database due to application usage.

+

If you modify a stack, be sure to keep the following in mind prior to assigning it to a course:

+
    +
  • Projects - If you have made any modifications to the project, you should create a new stack and switch your project to the new stack after it is created to ensure maximum efficiency and speed. If you have not yet created a new stack to incorporate the modifications, go to Project > Stack > Create New to create a new stack before publishing the assignment.

    +

    It is good practice to go to your project and set it to point to this stack as soon as possible. It is however, much better practice to update the stack before you publish the assignment in the course module.

    +
  • +
  • Course Assignments - You should always create a custom stack first and then switch the project’s stack and any assignments that use the same configuration to the newly created stack. You can then assign a course module, which assigns all its assignments to the course.

  • +
+

See Modifying a Stack for more information.

+
+
+

Stack versions

+

When a new stack or new version of an existing stack is created, the new versions are organized under the existing stack. Assigning a new version to a stack also resets all project content outside the workspace folder to those of the new stack version.

+
+

Note

+

When referring to a stack in our documentation, we are talking about a single stack or a stack version beneath it.

+
+
+
+

Stack visibility and ownership

+

The following rules apply for visibility and ownership of stacks:

+
    +
  • By default, stacks are private to your account but you can make them public. When a stack is made public, it is displayed on the Stacks page under All and all Codio users can view it.

  • +
  • If you are the owner of the stack for your organization, the stack is displayed on the Stacks page under My Stacks and all members of your organization can view it.

  • +
  • If you are an owner in the organization, you can enable the setting that allows you to create public stacks. See Public/Private Settings.

  • +
  • If you want to keep your Stack private to your organization, select the Private option and set the Owner option to your organization. These settings are recommended for collaborating with others when authoring and editing content.

    +

    By default, you are the owner of the stack and only you can edit and create new versions. If you want to allow others to see and administer your stack, assign it to another organization.

    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/switch-stack.html b/docs/common/develop/stacks/switch-stack.html new file mode 100644 index 00000000..ece948de --- /dev/null +++ b/docs/common/develop/stacks/switch-stack.html @@ -0,0 +1,785 @@ + + + + + + + + + Switch Project to New Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Switch Project to New Stack

+

There are various reasons for switching your project’s stack to a new one, including:

+
    +
  • When you create a new stack. This is the most important and common use case. If you have modified your stack and then created a new stack (or a new version) from it, you need to point your project to the new stack.

  • +
  • If you mistakenly specified the wrong stack when you created the project.

  • +
  • If a new stack version has been created and you want to point your project to the latest version.

  • +
+

You can switch a project’s stack from Project > Stack > Settings on the menu bar or from the Settings (gear) icon on the project in the main project listing.

+

When you switch the stack from Project > Stack > Settings, all stack modifications that were made relative to the original stack are replaced by the new stack. Normally this is fine if you created a new stack from the project before switching it.

+

Important: +When you switch a stack, everything outside the workspace folder in the tree (/home/codio/workspace) is replaced by the new stack. See Stacks for more information.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/update-stack.html b/docs/common/develop/stacks/update-stack.html new file mode 100644 index 00000000..83ec9b47 --- /dev/null +++ b/docs/common/develop/stacks/update-stack.html @@ -0,0 +1,806 @@ + + + + + + + + + Update a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Update a Stack

+

After creating a new stack, you may want to update the stack properties or take another stack snapshot from a Codio project. You can update your stack from the Stacks area on the Codio dashboard or from the IDE.

+
+

Update stack from the dashboard

+

To update the stack from the Codio dashboard, follow these steps:

+
    +
  1. In the navigation pane, click Stacks and then select the stack from the list.

    +Stacks Dashboard +
  2. +
  3. Click Edit to update the Stack Name or Description.

  4. +
  5. Click New Version to create a new version of the stack and then choose the project from which the stack should be generated from the Source drop-down list.

  6. +
  7. Add a comment describing what has changed since the last version. A new version is generated (this can take a few minutes).

  8. +
+
+
+

Update stack from the IDE

+

You may find it easier to update a stack from within the IDE and the project that you are currently working on. After you have finished making changes to your box (installing new components etc.), follow these steps to create a new stack version:

+
    +
  1. Click the Projects tab on the menu bar and choose Stack > Create New.

    +Stacks New Version +
  2. +
  3. Click New Version and enter a description of the changes since the last stack version. A new version is generated (this can take a few minutes).

    +

    If your stack is pointing to the latest version, you’ve completed the procedure. However, if the stack is pointing to a specific stack version, you must change it to point to the latest version or the version you just built.

    +
  4. +
  5. Click Project on the menu bar and choose Stack > Settings to point to a different stack.

  6. +
+
+
+

View stack version history

+

You can view the version history of a stack from the Stacks page on the Codio dashboard. Select the stack from the listing and then click the Versions link at the top of the page.

+Stack Version History +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/develop/stacks/using-stacks.html b/docs/common/develop/stacks/using-stacks.html new file mode 100644 index 00000000..0cef0c93 --- /dev/null +++ b/docs/common/develop/stacks/using-stacks.html @@ -0,0 +1,818 @@ + + + + + + + + + Using Stacks — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Using Stacks

+

Codio Stacks enable you to create and manage a combination of a Codio box and installed system-level components (languages, databases, web servers etc.) to be used when creating new projects. Use the Stacks page to search for and select a stack.

+Stacks List +

You can also select a stack when creating a project or switching the stack for a project.

+

On the Stacks page, you can select a stack from the following lists:

+
    +
  • My Stacks - Stacks that were created by you or set to be owned by the organization.

  • +
  • Certified - Stacks that are approved by Codio and cover a wide range of common stack configurations.

  • +
  • All - Searchable repository of all stacks.

  • +
+
+

Search stacks

+

To search for a stack, enter the appropriate search criteria in the search field; this is typically the name of the main stack component(s). The search will return the stack name, description, and any tags that are used.

+

If you cannot find a stack that meets your needs, you can create your own stack and add it to your Stack library.

+
+
+

View stack details

+

Click the Stack in the list to view detailed information, including the version, description, components, and how to use the stack.

+

To view the different versions of the stack, click the Versions tab.

+
+
+

Create project from a stack

+

You can select a stack to use for creating a project using one of the following methods:

+
    +
  • On the stack Details page, click Use Stack. If there are multiple versions of the stack, the latest version is used to create the project.

  • +
  • On the stack Versions page, find the version in the list and click Use Stack. You can then create the project using that specific version. Codio recommends using the latest version of a stack.

    +Stack Versions +
  • +
  • On the Stacks page, click the arrow (Create project with) icon to the far right of the stack item without opening the details. If there are multiple versions of the stack, the latest version is used to create the project.

  • +
+

The Create Project dialog is then populated with the selected stack configuration.

+
+

Note

+

If you are in an assignment, click the Stack button while in Edit mode and set the stack version.

+
+
+

Exclude files and folders from stack

+

When you create a stack, it is based on the contents of the /home/codio folder but omits your code workspace. If you want to exclude other files or folders, follow these steps:

+
    +
  1. Create a ~/.codio/stack_exclusions file in the project the stack is based on.

  2. +
  3. Add the full paths to the file or folder to be excluded from the stack. When in the folder, run readlink -f <filename> to get the full path. Globbing and wildcards are not supported. Include only one path per line.

  4. +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/bitbucket.html b/docs/common/settings/bitbucket.html new file mode 100644 index 00000000..1621e2d9 --- /dev/null +++ b/docs/common/settings/bitbucket.html @@ -0,0 +1,590 @@ + + + + + + + + + Connect to BitBucket — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connect to BitBucket

+

If you are working with BitBucket, you must install your Codio SSH key and connect to the application.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the Applications tab.

    +Applications +
  4. +
  5. Navigate to the BitBucket section and click Upload Public Key.

  6. +
+

You will be redirected to your application account and asked to authorize the application. You will then be redirected back to your Codio account.

+
+

Note

+

If you need to connect to a different account, see SSH Key where you can get your Codio Public SSH Key and then add manually to your new repo account.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/env-variables.html b/docs/common/settings/env-variables.html new file mode 100644 index 00000000..5c0681f4 --- /dev/null +++ b/docs/common/settings/env-variables.html @@ -0,0 +1,593 @@ + + + + + + + + + Environment Variables — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Environment Variables

+

Environment Variables allow you to set your own environment variables in your projects. You access the Environment Variables from your project by going to Codio > Preferences > Environment Variables on the menu bar. Once set they are available in all your projects. The variables are not passed to students assignments in Courses.

+
    +
  • When adding and saving, the project needs to be restarted (Project > Restart Box) for the new variables to be available.

  • +
+
+
+

Student Assignments

+

As mentioned above, any variables instructors set in assignments are not inherited by students in their course assignments. Environment Variables can be used within Secure Scripts but your students will need to manually create the necessary variables themselves in their assignment.

+

If a student is working with an API across a number of assignments, they can set up the environment variables once and have it propagate to all their projects without having to manually add keys to each new assignment.

+ +
+

Important

+

Be aware that if you change the HOME variable you are changing the entry point for profile and it could adversely affect the user variables. If you do change this variable, it is your responsibility how environment will behave after that.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/github.html b/docs/common/settings/github.html new file mode 100644 index 00000000..7fdbf316 --- /dev/null +++ b/docs/common/settings/github.html @@ -0,0 +1,590 @@ + + + + + + + + + Connect to GitHub — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connect to GitHub

+

If you are working with GitHub, you must install your Codio SSH key and connect to the application.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the Applications tab.

    +GH account +
  4. +
  5. Navigate to the GitHub section and click Upload Public Key.

  6. +
+

You will be redirected to your application account and asked to authorize the application. You will then be redirected back to your Codio account.

+
+

Note

+

If you need to connect to a different account, see SSH Key where you can get your Codio Public SSH Key and then add manually to your new repo account.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/manage-password.html b/docs/common/settings/manage-password.html new file mode 100644 index 00000000..0f121a6a --- /dev/null +++ b/docs/common/settings/manage-password.html @@ -0,0 +1,619 @@ + + + + + + + + + Manage Password — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Manage Password

+

You can change or reset your password if you have forgotten it, or if it was reset by your instructor.

+
+

Forgot password

+

If you have forgotten your password, you can reset it using the following procedure:

+
    +
  1. On the Codio log-in page, click the Lost your password link.

  2. +
  3. Enter your Email or Username and click Reset Password.

  4. +
  5. Check your email inbox for an email notification and follow the instructions for resetting your password.

  6. +
+
+

Note

+

If you do not have access to the email address you used when creating your Codio account, contact your instructor and they can reset the password for you.

+
+
+
+

Change password

+

You can change your password from the Overview page. You should change it if you have forgotten your password or it was reset by your instructor.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane to open the Overview page.

    +Profile Icon +
  2. +
  3. Click the Overview tab.

  4. +
  5. In the Change Password area, enter your Current Password and a New Password, and click Update password.

    +Change password +
  6. +
+
+

Note

+

You are allowed three attempts to enter your current password before your account is temporarily suspended. If your account is suspended, wait 15 minutes and then try again.

+
+
+
+

Reset password

+

You can request a password reset from your Overview page. It may be necessary to request a password reset if you have previously logged into Codio using a saved password, but have since forgotten the password.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

    +Profile Icon +
  2. +
  3. Click the Overview tab.

  4. +
  5. In the Reset Password area, enter your Email address and click Reset password. A email is sent to your inbox with a link to reset your password.

  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/project-prefs.html b/docs/common/settings/project-prefs.html new file mode 100644 index 00000000..b03f6beb --- /dev/null +++ b/docs/common/settings/project-prefs.html @@ -0,0 +1,596 @@ + + + + + + + + + Project Preferences — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Preferences

+

Project preferences get the highest priority and are applied over User Preferences. You access the Project Preferences from your project using one of the following methods:

+
    +
  • Click Codio > Preferences > Project on the menu bar.

  • +
  • In the Filetree, open the .settings file.

  • +
+

You can modify any of the settings but use caution since project preferences will override user preferences.

+
+

More information

+

For more information about specific settings, see the relevant topic:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/settings.html b/docs/common/settings/settings.html new file mode 100644 index 00000000..d2a79376 --- /dev/null +++ b/docs/common/settings/settings.html @@ -0,0 +1,591 @@ + + + + + + + + + Account Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Account Settings

+
+
+

You manage your account and customize your user preferences on the Overview page. To access this page, click your user name or gravatar in the lower portion of the navigation pane.

+

From the Overview page, you can access and manage the following:

+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/ssh-key.html b/docs/common/settings/ssh-key.html new file mode 100644 index 00000000..5fff5077 --- /dev/null +++ b/docs/common/settings/ssh-key.html @@ -0,0 +1,583 @@ + + + + + + + + + SSH Key — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

SSH Key

+

An SSH public and private key pair is automatically generated for your account that can then be used when Codio attempts communication with an external server that requires authentication based on a public or private key, such as SSH terminal or SFTP. You access this key from the SSH Keys tab.

+
+
Codio SSH Key +
+

If you wish to regenerate the SSH public and private key in your Codio account, you can do so clicking the Regenerate button. If you would like to use your own custom key, click the Replace Key button. Any external servers that have used the original key will need to be updated to use the newly created key.

+

To connect to a remote server, you must upload your SSH key to the remote server.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/upload-ssh-key-remote-server.html b/docs/common/settings/upload-ssh-key-remote-server.html new file mode 100644 index 00000000..3553257b --- /dev/null +++ b/docs/common/settings/upload-ssh-key-remote-server.html @@ -0,0 +1,586 @@ + + + + + + + + + Upload SSH Key to Remote Server — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Upload SSH Key to Remote Server

+

To make a secure connection to a remote server, you must upload your SSH key to the server.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the SSH Keys tab.

    +SSH Dialog +
  4. +
  5. In the Upload Key section, enter the Server information and click Upload. Codio will upload your Codio SSH key to the server so you can make a secure connection.

  6. +
+

You can then use the SSH key to connect to GitHub or BitBucket servers. See the GitHub and BitBucket topics for instructions on connecting to the servers.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/user-prefs.html b/docs/common/settings/user-prefs.html new file mode 100644 index 00000000..b41be799 --- /dev/null +++ b/docs/common/settings/user-prefs.html @@ -0,0 +1,609 @@ + + + + + + + + + User Preferences — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

User Preferences

+

Codio offers a full collection of settings that apply to only you when you’re logged in. These user preferences cover all aspects of Codio usage, from code editor settings (tab stops, indentation, colors, fonts, etc.) to keyboard shortcuts.

+User Preferences +

You can customize these preferences at the user level (only affects you) or the project level (affects everyone using the project). For more information see Project Preferences. When logged in to Codio, the default preferences are used first, then any user preference overrides are applied, and finally any project-level preferences are applied.

+

You access the User Preferences from the Codio > Preferences > User menu option when you are in a project.

+User Preference Menu +
    +
  • Default Preferences are displayed in the right column and are read only.

  • +
  • Your (User) Preferences are displayed in the left column. When your account is created, the Your Preferences column is empty until you specify an override to the default preferences.

  • +
+

Below is an example of user settings that override the Codio default preferences:

+
[editor]
+theme=eclipse
+font_size=13
+
+[code-beautifier]
+indent_level=4
+indent_with_tabs=true
+
+
+
+

More information

+

For more information about specific settings, see the relevant topic:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/settings/user-profile.html b/docs/common/settings/user-profile.html new file mode 100644 index 00000000..1c7478d8 --- /dev/null +++ b/docs/common/settings/user-profile.html @@ -0,0 +1,590 @@ + + + + + + + + + User Profile — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

User Profile

+

You can update your user profile from the Overview tab. To access this page, click your user name or gravatar in the lower portion of the navigation pane.

+

Update your name, email address or password and click Save Changes.

+
+

Delete your account

+

You can delete your account by selecting the Overview tab.

+
+
Delete account +
+
+

Warning

+

If you delete your account it cannot be retrieved nor can its contents be restored. To archive your data for potential later usage, export your projects or push them to a remote depository.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/tools/code-commenting.html b/docs/common/tools/code-commenting.html new file mode 100644 index 00000000..9219caa3 --- /dev/null +++ b/docs/common/tools/code-commenting.html @@ -0,0 +1,780 @@ + + + + + + + + + Code Commenting — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Commenting

+

Instructors can add comments to your code to provide suggestions or corrections, and you can see the comments as you view the files.

+

To view all comments, click Education > Code Comments on the menu bar, and choose the file to open it.

+Commenting +

You can also add your own comments for the instructor to review. As you update your code, the comment is marked as resolved but can still be reviewed from the Education -> Code Comments menu item or from the Guide Settings.

+Guides Code Comments +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/tools/code-playback.html b/docs/common/tools/code-playback.html new file mode 100644 index 00000000..1f1a5cfa --- /dev/null +++ b/docs/common/tools/code-playback.html @@ -0,0 +1,799 @@ + + + + + + + + + Code Playback — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Playback

+

Use the Code Playback feature to generate a file and review how you built the code. To build the file, click Tools > Code Playback on the menu bar, or right-click the opened file and choose Code Playback.

+

The file that is currently active is built and displayed. To review other files or search for files, expand the folders in the left navigation pane, right-click the file name and choose Code Playback.

+
    +
  • To watch the code being built, click the Play button. Click Pause to stop playback.

  • +
  • To change the playback speed, click the Speed drop-down menu and choose the speed in number of changes per second.

  • +
  • To manually walk through the changes, click the Previous change and Next change buttons. You can drag the playback slider to find points of interest.

  • +
  • You can also see more detailed behavior insights by selecting Education > Behavioral Player from the menu.

  • +
+
+

Retrieving deleted files

+

If you delete a file in error, you can use Code Playback to find the file and recreate it. Follow these steps to retrieve a deleted file:

+
    +
  1. Open the assignment and click Tools > Code Playback.

  2. +
  3. Click the Folder icon and select the file that you want to recover.

  4. +
  5. Review the file and see how it was built by clicking the Play icon.

    +

    You can find your last saved work by clicking on Previous, Play/Pause, and Next icons, or by dragging the timeline bar.

    +
  6. +
  7. Copy the code from the playback and paste it into a new file.

  8. +
+
+

Note

+

If you don’t see Tools > Code Playback on the menu bar, right-click a tab or in the file tree, and choose Code Playback.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/tools/dyslexia.html b/docs/common/tools/dyslexia.html new file mode 100644 index 00000000..5c0dbd46 --- /dev/null +++ b/docs/common/tools/dyslexia.html @@ -0,0 +1,790 @@ + + + + + + + + + Tools — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Tools

+
+
+
+

Dyslexia Support

+

Codio has a built in dyslexia support feature for users with dyselexia that provides the ability to set your Theme to Dyslexia view. To enable dyslexia support mode, follow these steps:

+
    +
  1. Open an assignment.

  2. +
  3. In the upper right corner, and select the Settings icon (gear) and choose Theme > Dyslexic.

  4. +
+
+Dsylexia Theme +
+

When enabled, the screen is displayed in Dyslexia View.

+Dyslexia View +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/common/tools/lexikon.html b/docs/common/tools/lexikon.html new file mode 100644 index 00000000..83bcdf54 --- /dev/null +++ b/docs/common/tools/lexikon.html @@ -0,0 +1,796 @@ + + + + + + + + + Lexikon — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Lexikon

+

The Codio Lexikon is an integrated help system that enables you to quickly and easily look up information about a variety of languages and topics. It provides concise reference information within a coding project or assignment without having to search the web.

+Lexicon +

If Lexikon has been enabled by the project author, you can access it using one of the following methods:

+
    +
  • Click the Lexicon icon in the upper right corner of the assignment or coding project.

  • +
  • On the menu bar, click Tools > Lexicon.

  • +
  • Use the default keyboard shortcut Ctrl+Alt+L.

  • +
+
+

Note

+

If you cannot open the Lexicon using the above methods, contact your instructor for assistance.

+
+

The Lexikon is currently organized into the following topics:

+
    +
  • Crunch

  • +
  • CSS

  • +
  • HTML

  • +
  • Javascript

  • +
  • Linux

  • +
  • CyberSecurity

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/courses.html b/docs/courses.html new file mode 100644 index 00000000..6c4cb7e6 --- /dev/null +++ b/docs/courses.html @@ -0,0 +1,352 @@ + + + + + + + + + Your Courses — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Your Courses

+
+
+ +
+ +
+

Courses

+

The student courses are displayed in the right pane, as shown below with the default dashboard.

+Student Dashboard +

1 - Toggle between list view or tile view to see your courses.

+

2 - To Do panel shows your assignments, including due dates (if set by your instructor/teacher).

+
+
    +
  • Click the arrow to expand or collapse the panel.

  • +
  • Click the assignment pane open it.

  • +
+
+

3 - Feedback panel shows a list of recent feedback for your assignments when grades have been released by your instructor.

+
+
    +
  • Click the arrow to expand or collapse the panel.

  • +
  • Click the feedback panel to open it and review your assessments, grading comments, and any code comments from your instructor.

  • +
+
+

4 - Courses panel is the main panel on the page and is where you can see the courses, modules and assignments that have been assigned to you, and the end date for the assignment. If your teacher/instructor has enabled the feature, you will also see a progress bar displaying your overall progress. Up to five pinned assignments can be displayed more prominently at the top of the page. From this area, you can easily re-open the assignment you were last working on, or start any of the other assignments that have been assigned to you. You start or open an assignment using the navigation buttons.

+
+
    +
  • Click the course pane to open and view the modules and assignments in the course.

  • +
  • Click the arrow to expand or collapse the course pane.

  • +
+
+
Expanded Course on Default Dashboard +
+
+
+

Note

+

You can also create your own projects using the links under BUILD in the left navigation pane. See Creating or Importing a Project for more information.

+
+
+
+

Projects

+

You can create your own projects using the web-based IDE in Codio. To access the project area, use the BUILD links in the left navigation pane. See Projects for more information.

+

See Also:

+ +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop.html b/docs/develop.html new file mode 100644 index 00000000..24532d90 --- /dev/null +++ b/docs/develop.html @@ -0,0 +1,771 @@ + + + + + + + + + Developing Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Developing Code

+
+
+

A project is a Ubuntu server and is commonly referred to as a box. You can create as many projects (boxes) as needed, and with sudo privileges, you can install and configure them however you want. Each project box is fully isolated from your other project boxes.

+

When opening a project, you are taken into the project server (box) and are presented with the Codio IDE. You can access the command line via a terminal window.

+
+

Project templates

+

Codio works with a series of templates for software configurations, also commonly referred to as stacks. These templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can use our pre-configured templates or create your own. This template approach makes Codio easy to use, configure and adapt.

+
    +
  • You can take a snapshot of the software configuration on any box and add it to the Stacks template library.

  • +
  • You can take a snapshot of the stack/project code workspace combination and add it to the Starter Packs template library.

  • +
+
+
+

Project concepts and features

+

We strongly recommend that you familiarize yourself with the following project related concepts and features before you get started:

+ +

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/general.html b/docs/develop/develop/general.html new file mode 100644 index 00000000..153ddd9b --- /dev/null +++ b/docs/develop/develop/general.html @@ -0,0 +1,286 @@ + + + + + + + + + Cookies, Firewalls, Browser support — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + +
+ + +
+ +
+ + + + + + +
+ +
+ +
+

Cookies, Firewalls, Browser support

+ +
+

Firewall and network settings

+

Codio can usually run from anywhere in your browser without any special settings. However, some k12 or university firewall settings may require special configuration.

+

This page contains information for

+
    +
  • Network system administrators

  • +
  • Students and teachers who may be using Codio from home

  • +
+
+

Firewall settings

+

The following is a list of ports and URLs that Codio accesses from time to time. We have put these in priority order.

+
+
    +
  • *.codio.com the main Codio site and application

  • +
  • *.codio.io domains that are auto-generated for each user project

  • +
  • api.keen.io statistics gathering to measure student time spent in units (stats)

  • +
  • *.typekit.net web fonts

  • +
  • fonts.gstatic.com web fonts

  • +
  • fast.fonts.net web fonts

  • +
  • *.cloudfront.net our CDN for speeding up static content

  • +
  • *.youtube.com & *.vimeo.com for video’s included in Course content

  • +
  • gravatar.com used for user gravatars (pictures)

  • +
  • *.intercom.io, cdnjs.cloudflare.com and *.pubnub.com are highly recommended as they relate to the help and support application (Intercom) built into Codio.

  • +
+
+

If your institution blocks access to YouTube as a general rule, your IT department can whitelist YouTube access that only allows access to content from registered and accredited educational content repositories. See here for more information on this.

+
+
+

Ports

+

We recommend opening the following ports

+
    +
  • 80 and 443 for standard communications

  • +
+
+
+

Working from home

+

Sometimes the anti-virus/firewall settings on your personal devices may interfere with home usage and make the experience slow.

+

You should check your settings and ensure that items in the above Firewall settings list are added to your exclusion list.

+
+
+

Connectivity Test

+

If you continue to experience difficulties, visit the Connection Diagnostics page and send us back the generated output going to Help > Support/Contact Us and attach the output file using the paperclip icon

+
+
+
+

Browser support

+

Codio is best experienced on the very latest browsers, in particular Chrome, but should run fine on the following browsers:

+
    +
  • Chrome 21 or later

  • +
  • Firefox - 22 or later

  • +
  • Edge - 44 or later

  • +
  • Safari - 6 or later

  • +
+

If using Safari and accessing Codio via an LMS (Canvas/Blackboard/D2L/Moodle etc) , disable “Prevent cross-site tracking” to ensure access.

+Safari Settings +

If you are experiencing any issue where Codio will not run as it should, please send an email to help@codio.com.

+
+

Disable IE Compatibility View

+

It could happen that even if you have Internet Explorer 10 or a later version, we detect an older version of the browser.

+

This is due to the Compatibility Mode of the Browser which enables old features we no longer support.

+

To disable this option, please go to *Tools → F12 developer tools* and be sure that in Browser Mode is selected «Internet Explorer 10» and in Document Mode is selected «Standards (Page default)».

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/access.html b/docs/develop/develop/ide/boxes/access.html new file mode 100644 index 00000000..821b4421 --- /dev/null +++ b/docs/develop/develop/ide/boxes/access.html @@ -0,0 +1,795 @@ + + + + + + + + + Access Codio Box via SSH — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Access Codio Box via SSH

+

You can SSH into your Codio box from code using SSH public keys. Understanding how Codio uses SSH keys is important to accessing your box via ssh.

+
+

Note

+

You cannot connect to a Codio box without using a Public Key.

+
+
+

Codio box SSH keys

+

Codio generates a key-pair that can be uploaded to connect to applications such as Github and BitBucket. See SSH Key for information on uploading your public key to Github and Bitbucket.

+

When you create a new Codio project, your user keys are automatically copied into your project and can be found in the ~/.ssh folder. To access this folder, open a terminal window and navigate to the id_rsa file.

+
+
+

SSH into your box

+

Unless your project has the Always-On Boxes feature enabled, you must open your Codio project to start the box so that it is ready for receiving incoming SSH connections.

+

To prepare your box for external access, follow these guidelines:

+ +
+

Find your local machine’s SSH public key

+

To find your local machine’s SSH public key, use one of the following methods depending on your operating system:

+
    +
  • Mac or Linux - Copy your local machine’s public key to the clipboard from your local machine’s terminal using pbcopy < ~/.ssh/id_rsa.pub.

  • +
  • Mac or Linux - On your local machine, open the ~/.ssh/id_rsa.pub file and copy it to the clipboard. Be careful not to copy unwanted control characters.

  • +
  • Windows - Use Putty to obtain your key.

  • +
+
+
+
+

Upload your public key to your Codio box

+

Once you have obtained your local machine’s SSH public key, follow these steps to upload it your Codio box: +1. Copy the public key to your clipboard. +2. Open a terminal tab in your Codio project and enter the key into the .ssh/authorized_keys file. The easiest way to do this is to enter nano .ssh/authorized_keys to open the .ssh/authorized_keys file in the nano editor and paste the key into the file.

+

You can view all uploaded public keys in your project by opening the terminal and running cat ~/.ssh/authorized_keys.

+
+
+

Enable SSH forwarding and connect to your box

+

You can now enable SSH forwarding in Codio and then connect to your box from your local machine’s terminal window:

+
    +
  1. Click the Project tab on the menu bar and choose Settings.

  2. +
  3. Click the Forwarding Settings tab.

  4. +
  5. Click Enable SSH Forwarding to display the connection string, similar to:

    +

    SSH Forwarding: ssh codio@forwarding.codio.com:29119

    +
  6. +
  7. Connect to your box from any terminal window using the connection string that is displayed:

    +

    ssh codio@forwarding.codio.com -p 29119

    +
  8. +
+

If you get a message Permission denied (publickey), you have incorrectly entered your SSH public key.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/always-on.html b/docs/develop/develop/ide/boxes/always-on.html new file mode 100644 index 00000000..e99dbf60 --- /dev/null +++ b/docs/develop/develop/ide/boxes/always-on.html @@ -0,0 +1,777 @@ + + + + + + + + + Always-On Boxes — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Always-On Boxes

+

The Always-On feature for boxes is now available for all paid subscribers. This feature enables you to set boxes to always be on, which means they remain active whether you are in the IDE or logged out. The number of Always-On boxes you can have depends on your payment plan.

+

If your project is archived due to inactivity (usually 30 days since last opened), this process removes it from the active fileserver and can no longer be Always-On.

+

You can set a box to Always-On from the Project > Settings menu in the IDE or from the Project dashboard.

+
+

Enable Always-On

+
+

From IDE

+

To set a box to Always-On from the IDE:

+
    +
  1. Click the Project tab on the menu and choose Settings.

  2. +
  3. On the General Settings tab, toggle the Always-On Box setting to On.

  4. +
  5. Click Save Changes.

  6. +
+
+
+

From Project dashboard

+

To set a box to Always-On from Project dashboard:

+
    +
  1. Click My Projects in the left navigation pane.

  2. +
  3. Click the Settings icon (gear) for the project you want to enable Always-On.

  4. +
  5. Under Preferences, toggle the Always-On Box setting to On.

  6. +
  7. Click Save Changes.

  8. +
+
+
+
+

Keep terminal processes running

+

When you exit your project in the IDE and return to the dashboard, any processes that were started from within a terminal window will terminate. You can prevent processes from terminating using one of the following methods:

+
    +
  • Append terminal command - Append & to the terminal command that starts your process. You will see output as usual but may need to press the Enter key to get a fresh command prompt. Before closing the terminal window or exiting your project, enter the following command:

    +
    disown -a
    +
    +
    +
  • +
  • Install tmux

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/ext-access.html b/docs/develop/develop/ide/boxes/ext-access.html new file mode 100644 index 00000000..6f465c38 --- /dev/null +++ b/docs/develop/develop/ide/boxes/ext-access.html @@ -0,0 +1,768 @@ + + + + + + + + + External Access to Boxes and Ports — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

External Access to Boxes and Ports

+

When a new project is created in Codio, a unique subdomain name is generated:

+

word1-word2.codio.io

+

where word1 and word2 are randomly generated words resulting in a unique domain name.

+ +
+

Standard method for referencing box on specific port

+

You can also reference a Codio box using word1-word2-<port>.codio.io but you should be aware of the following restrictions to avoid wasting valuable time diagnosing why your browser cannot talk to the Codio box:

+
    +
  • Port ranges are restricted to 1024 to 9499 for HTTP access.

  • +
  • Port ranges are restricted to 9500 to 9999 for HTTPS access.

  • +
  • If your PC is behind a firewall, access over non-standard ports is blocked and will fail if using word1-word2-3000.codio.io to reference a Codio box.

  • +
+
+
+

Original request header

+

The X_FORWARDED_PROTO header contains original request schema, should you need it.

+
+
+

Preview menu

+

Codio offers a fully customizable Preview menu that allows you to preview both static files (.html) and server files (.php files, Ruby, Node apps, etc.). See Preview documentation for more information.

+

Using the Preview menu, you can set up any number of ‘aliases’ both for static files and box CLI commands.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/ide-access-permissions.html b/docs/develop/develop/ide/boxes/ide-access-permissions.html new file mode 100644 index 00000000..f7fe4edb --- /dev/null +++ b/docs/develop/develop/ide/boxes/ide-access-permissions.html @@ -0,0 +1,746 @@ + + + + + + + + + IDE Access Permissions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Access Permissions

+

By default, other users with read and write permissions cannot access your Codio box from the command line. However, you can grant access by assigning the Admin permission to the user.

+
+

Note

+

This feature requires an active payment plan.

+
+

For information about assigning permissions, see Project Permissions.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/default-installed.html b/docs/develop/develop/ide/boxes/installsw/default-installed.html new file mode 100644 index 00000000..a47cc5b1 --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/default-installed.html @@ -0,0 +1,743 @@ + + + + + + + + + Preinstalled Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Preinstalled Software Packages

+

When you create an empty box in Codio, you get a standard Ubuntu server and Git software.

+

If you want additional software installed by default, use Stacks or select one of the standard stacks from the New Project screen.

+

Refer to the Install software packages for details about how to install other languages, databases, web servers, and other system components.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/file-locations.html b/docs/develop/develop/ide/boxes/installsw/file-locations.html new file mode 100644 index 00000000..0b86b859 --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/file-locations.html @@ -0,0 +1,747 @@ + + + + + + + + + File and Software Locations — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

File and Software Locations

+

All Codio code workspace and software dependency files are located in the /home/codio folder, also reachable as ~.

+

Everything below this level can be accessed but is read-only. You should not change anything below this level because it will not persist.

+

Software that you install from the command line or using the Install Software option is installed in the usual location for an Ubuntu server.

+
+

Code workspace files

+

The code workspace you see in the project file tree is located at /home/codio/workspace or ~/workspace.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/gui.html b/docs/develop/develop/ide/boxes/installsw/gui.html new file mode 100644 index 00000000..04d392b5 --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/gui.html @@ -0,0 +1,805 @@ + + + + + + + + + GUI Based Output — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

GUI Based Output

+

If you are writing or using programs that have a GUI-based output, it is important that you read this section. Whether you are using UI libraries such as tkinter and qt, or simply using Ubuntu applications that have a non-web based UI, this section explains how to set up a virtual desktop.

+
+

Sample project

+

Codio provides a Starter Pack project that contains examples of GUI Output. Go to Starter Packs and search for Demo GUI Output if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+
+

Uses and limitations

+

X Server is a virtual desktop that is very effective for Codio’s cloud-based infrastructure. Any application that relies on a graphical user interface has its graphical output redirected to it and Codio’s viewer is then able to display the virtual desktop in a browser.

+

The Demo GUI Output project provides sample applications and also includes some complex UIs (for example, SQLite and StartUML). You may experience limitations when using fast-motion graphics where the virtual screen content is changing so fast that it cannot be rendered in real time over the internet. A stronger bandwidth will provide better performance and overall experience.

+
+
+
+

Install your own projects

+
+

Install X Server

+

To install X Server, follow these steps:

+
    +
  1. Click the Tools tab and choose Install Software.

  2. +
  3. Find the X Server component and click the Install icon.

  4. +
+

The installation may take a few minutes to complete. You should then Restart your box before proceeding.

+
+
+

Run code

+

Before you can view any output, you must first start your code so the program can run. When you start the viewer (see below), the UI output is automatically displayed.

+GUI Output +

You can also start the viewer first but it will be empty until a program is run; it will then refresh and display the output.

+
+
+

Use the viewer

+

The viewer is a special window that appears either inside Codio or in a separate browser tab. To open it, add “Viewer”: “https://{{domain3050}}/” to the .codio file, as follows:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Run Python (tkinter)": "python3 tkinterpy/demo.py",
+        "Run Java (Lunar Phases)": "cd swing && java LunarPhases",
+        "SQLite Browser App": "sqlitebrowser",
+        "StarUML": "staruml"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Viewer": "https://{{domain3050}}/"
+  }
+}
+
+
+

You can also access the viewer from any browser using:

+

https://pagoda-cigar-3050.codio.io/

+

where you should replace pagoda-cigar with the box domain name. You can find the box domain name on the Box Info page in the Web: Static content section (Project > Box Info ).

+
+

Note

+

X-server port was updated to use 3050 in August 2022. Any assignments/projects that were created prior to this date will continue to function on the original port 3000 unless/until any other packages/components in the stack are re-installed. Reinstallation of X-server will then be required for all to work and will then use port 3050

+
+
+
+

Customization

+

You can customize the X Server installation by modifying the config files in the normal way using vim or nano. For example you can use:

+
    +
  • sudo vim /etc/init/openbox.conf to open the openbox desktop config so you can change the default virtual desktop size.

  • +
  • sudo vim /etc/init/novnc-3000.conf to modify the port that the viewer runs on in case it conflicts with other services you may have configured on the default port 3000.

  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/install-software.html b/docs/develop/develop/ide/boxes/installsw/install-software.html new file mode 100644 index 00000000..c236ec7a --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/install-software.html @@ -0,0 +1,770 @@ + + + + + + + + + Installing Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Installing Software Packages

+
+
+

Codio provides a way to install the set of software packages that are in high demand. You can install this software from the Tools > Install Software menu. From the Install software page, you can run scripts that install, configure, or reconfigure software components instead of manually installing them from the command line.

+Install Software +

Locate the software that you want to install and click the Install icon to start the installation.

+
+

Install software from the command line

+

Our boxes provide full sudo (root) access, so you can also use the Ubuntu apt package manager, which provides thousands of software packages that are maintained by the Ubuntu community.

+

If you want to provide fully pre-configured boxes, use Stacks instead the Install Software option.

+
+
+

Add or request new software packages

+

You can request new software packages or add a new package yourself. If you require a new script to be added to the Install Software list, use one of the following methods:

+
    +
  • Visit the Issues page on our GitHub repository and create a new issue detailing your requirements.

  • +
  • Fork our GitHub repository, add the script yourself, and then submit a pull request.

  • +
+

For instructions on how to add your own software package scripts, see Add Your Own Packages.

+
+
+

Autostart

+

Services that require a restart, are automatically started on installation. You can manually start, stop, and restart services using the following terminal commands:

+

$ sudo service <package-name> start

+

$ sudo service <package-name> stop

+

$ sudo service <package-name> restart

+
+
+

Restricting Students from installing unauthorized software

+

If you wish to restrict students’ ability to install software packages in course assignments, you can do so at the course level. See revoking sudo access for all course assignments for more information.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/langserver.html b/docs/develop/develop/ide/boxes/installsw/langserver.html new file mode 100644 index 00000000..fa43d6c8 --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/langserver.html @@ -0,0 +1,770 @@ + + + + + + + + + Language Server Protocol — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Language Server Protocol

+

The Language Server Protocol (LSP) is used to integrate features such as autocomplete, go to definition, and find all references. Currently, Java, OCAML, and Python LSPs are available.

+

Below is a Python example:

+Python +
+

Enable LSP support

+

To enable enable LSP support, enter the following in your User or Project Preferences:

+
[codio-lsp]
+enable_lsp_support = true
+
+
+

If you are authoring content for use in a course, we recommend enabling LSP in Project Preferences, as these are applied over user preferences.

+
+
+

Install LSP

+

To install LSPs, follow these steps:

+
    +
  1. Click the Tools tab and choose Install Software.

  2. +
  3. Find the relevant component and click the Install icon.

  4. +
+

The installation may take a few minutes and you should then Restart your box before proceeding.

+
+
+

Autocomplete

+

Autocomplete is not automatically triggered as in HTML/CSS/JS files. To invoke autocomplete for LSP implemented files, use the following shortcuts:

+
    +
  • Mac - Shift+Space

  • +
  • Others - Ctrl+Space

  • +
+

If you want to change the default preference, see User Preferences.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/installsw/parts-coding.html b/docs/develop/develop/ide/boxes/installsw/parts-coding.html new file mode 100644 index 00000000..717ee6ff --- /dev/null +++ b/docs/develop/develop/ide/boxes/installsw/parts-coding.html @@ -0,0 +1,827 @@ + + + + + + + + + Add Your Own Software Packages — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Your Own Software Packages

+

If you cannot find the software you want to install in the list, you can add your own package to the Install Software list by forking our GitHub repository, making the necessary modifications, submitting a pull request.

+

The repository can be found at https://github.com/codio/install_software

+

Software packages are installed by running a script. You can code your own install package using the concepts in this topic.

+
+

Scripts

+

A script is typically, but not necessarily, a bash script that runs a series of commands as you would on the command line to install or configure software on your Codio box. However, it can be any executable code you choose.

+

The scripts written by Codio typically use Ansible, a very friendly deployment management system that greatly reduces complexity.

+
+

package_list.json

+

The package_list.json file is the manifest that lists the entire contents of the publicly available scripts. Each script has an entry in this file, and you must add a new item to the list when coding your own install package. Whenever you open the Install Software page (Tools > Install Software), this Install Software manifest is retrieved from our GitHub repo.

+

Here’s a example of the MySQL entry:

+
"mysql": {
+  "name": "MySQL",
+  "description": "MySQL is an open-source relational database management system (RDBMS)",
+  "script": "mysql/install.sh",
+  "version": "5.5.49",
+  "category": "data_stores"
+}
+
+
+

where:

+
    +
  • script - is the path, relative to the root of the repo, where the installation script can be found.

  • +
  • category - is the category that the component belongs to; you can update the category field field with any of the following categories:

    +
      +
    • data_stores

    • +
    • deployment

    • +
    • development_tools

    • +
    • libraries

    • +
    • shells

    • +
    • programming_languages

    • +
    • utilities

    • +
    • web_development

    • +
    +
  • +
+
+

Example : MySQL

+

The following example shows how to install MySQL from the Install Software page in a few seconds. Run the MySQL installation on a new box. The MySQL entry in the package_list.json file looks like this:

+
  "mysql": {
+  "name": "MySQL",
+  "description": "MySQL is an open-source relational database management system (RDBMS)",
+  "script": "mysql/install.sh",
+  "version": "5.5.49",
+  "category": "data_stores"
+}
+
+
+

You can see the reference to the mysql/install.sh script.

+
+
+
+

Bash script

+

This script calls our standard Ansible loader script, which in turn loads the relevant playbook.

+
#!/bin/bash
+
+bash -c "$(curl -fsSL https://raw.github.com/codio/install_software/master/tools/ansible.sh)" mysql
+
+echo "Mysql password root user password is 'codio'"
+
+
+
+
+

Ansible playbook script

+

Ansible simplifies installations and configurations, as easier to read and maintain than using the main bash script with standard Ubuntu commands. For more information about Ansible playbooks, click here.

+
---
+- name: Install MySQL
+  hosts: 127.0.0.1
+  sudo: True
+  vars:
+    MySQL_root_pass: codio
+  tasks:
+    - name: Set MySQL root password before installing
+      debconf: name='mysql-server' question='mysql-server/root_password' value='{{MySQL_root_pass | quote}}' vtype='password'
+    - name: Set MySQL root again password before installing
+      debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{MySQL_root_pass | quote}}' vtype='password'
+    - name: Install MySQL
+      apt: name={{ item }} state=present
+      with_items:
+        - mysql-server
+        - mysql-client
+        - python-mysqldb
+    - copy: src=my.cnf dest=/home/codio/.my.cnf
+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/overview.html b/docs/develop/develop/ide/boxes/overview.html new file mode 100644 index 00000000..1d0cd4f4 --- /dev/null +++ b/docs/develop/develop/ide/boxes/overview.html @@ -0,0 +1,749 @@ + + + + + + + + + IDE Box Overview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Box Overview

+
+
+

Each Codio project gets its own dedicated Ubuntu Server (box) with sudo access. Review the information in these topics to learn how to access your box, administer it, and install software dependencies.

+

To view details about your project box, click the Project tab on the menu bar and choose Box Info from the drop-down menu.

+Box Info +
+

Important ‘localhost’ configuration information

+

In many config files on your Box you would include a reference to 127.0.0.1 to access localhost. Please be sure to use 0.0.0.0 instead.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/restart-reset.html b/docs/develop/develop/ide/boxes/restart-reset.html new file mode 100644 index 00000000..089c1623 --- /dev/null +++ b/docs/develop/develop/ide/boxes/restart-reset.html @@ -0,0 +1,756 @@ + + + + + + + + + Restart or Reset Box — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Restart or Reset Box

+

You can restart or reset your project’s box from the Project menu.

+
+

Restart

+

To restart the box, click the Project tab and choose Restart Box. The reboot normally takes a few seconds.

+
+
+

Reset

+

Resetting a box is fairly destructive and should be used with caution. When performing a box reset, the box is returned to a fresh state but your code files are untouched. It also results in the following:

+
    +
  • Any new folders or files that have been created will be deleted.

  • +
  • All parts of the box outside the ~/workspace folder will be reset.

  • +
  • All code files in the ~/workspace folder are untouched.

  • +
  • Box restart.

  • +
+

After a Reset, you must reinstall components (npm modules, ruby gems, etc.) and other modifications you may have made.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/runmenu.html b/docs/develop/develop/ide/boxes/runmenu.html new file mode 100644 index 00000000..5fd478cd --- /dev/null +++ b/docs/develop/develop/ide/boxes/runmenu.html @@ -0,0 +1,802 @@ + + + + + + + + + Customize Run Button — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Customize Run Button

+

The Codio IDE offers the ability to customize the Run button, similar to using the alias command in the command line. When you click Run, a new terminal window opens to run the command. You can also force the command to run in an existing terminal window instead of opening a new window.

+
+

Configure Run to open new terminal window

+

To customize the Run button to open a new terminal window where you can see the output, you must edit the .codio file in the root (/home/codio/workspace or ~/workspace) of your project.

+Run Menu +

In the .codio file, locate the lines below, and then copy and paste the following code:

+
{
+  // Configure your Run and Preview buttons here.
+
+  // Run button configuration
+  "commands": {
+    "Install Learnyounode" : "npm install -g learnyounode",
+    "Run Lesson" : "./ns-executes.sh run {{filename_no_ext}} {{path}}",
+    "Verify Lesson" : "./ns-executes.sh verify {{filename_no_ext}} {{path}}",
+    "Completed Lessons" : "learnyounode",
+    "Run with Node" : "node {{filepath}} 3 4 5"
+  }
+}
+
+
+

When you click the Run button, it executes the last selected command.

+
+
+

Configure to run in current terminal window

+

If you want to configure the Run button to run commands in the current terminal window, modify the id field in the .codio file as follows:

+
{
+  "commands": {
+        "Node version": {
+            "id": "terminal_1",
+            "cmd": "node --version"
+        },
+        "ls": {
+            "id": "terminal_1",
+            "cmd": "ls"
+        }
+  },
+
+// Preview button configuration
+  "preview": {
+        "Project Index (static)": "http://{{domain}}/{{index}}",
+        "Current File (static)": "http://{{domain}}/{{filepath}}",
+        "Box URL": "http://{{domain3000}}/"
+  }
+}
+
+
+
+

Note

+

Commands with the same id will share the same terminal window.

+

The terminal id should be “backend-guide” to execute a command in the terminal window opened by guides.

+
+

When modifying the .codio file, you can also use the following tokens in the shell commands:

+
    +
  • {filepath}} - inserts the path and full file name (/path/to/file.ext).

  • +
  • {{path}} - inserts only the path to the selected file (/path/to/).

  • +
  • {{filename}} - inserts the filename with its extension (file.ext).

  • +
  • {{filename_no_ext}} - inserts the filename without the extension (file).

  • +
  • {{domain3000}} - inserts the public url to your box; word1-word2-3000.codio.io to access over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

  • +
  • {{domain80}} - can also be used instead of {{domain3000}} and it inserts the public url to your box; word1-word2-80.codio.io to access over port 80.

  • +
  • {{domain}} - inserts the alternate public url to your box; word1-word2.codio.io; be aware that you will usually need to specify a port to reach a service running on your box (for example, word1-word2-<port>.codio.io).

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/startup.html b/docs/develop/develop/ide/boxes/startup.html new file mode 100644 index 00000000..992ab158 --- /dev/null +++ b/docs/develop/develop/ide/boxes/startup.html @@ -0,0 +1,757 @@ + + + + + + + + + Autostart Services — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Autostart Services

+

Your box is automatically configured to autostart, which means it is automatically put to sleep, and when you open your project, the box and services are started.

+

You can also configure other services to autostart in the startup.sh bash script in your project or by installing Autostart Support from Tools > Install Software.

+

For the script to be included in the stack we recommend /home/codio/startup.sh.

+

If the project is using guides, you can use .guides/startup.sh or you can put the file in the workspace; students may be able to access and edit files visible to them in the workspace.

+
+

Upstart

+

Upstart can be used in Ubuntu 14.04 boxes. If you want to configure services to start when your box starts up, you should configure a .conf file. If you are not familiar with upstart, please Google it for configuration details.

+
+
+

Systemd

+

Systemd can be used in Ubuntu 18.04 and 22.04 boxes. If you want to configure services to start when your box starts up, you should configure a .service file and run sudo systemctl daemon-reload. If you are not familiar with systemd, please Google it for configuration details.

+

Important - You must specify the user account under which the service is run using setuid codio.

+
+
+

When is the Server put back to sleep?

+

Your server is put to sleep within a few minutes of you exiting your Project or after 60 minutes of inactivity.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/boxes/terminal.html b/docs/develop/develop/ide/boxes/terminal.html new file mode 100644 index 00000000..93c90f3f --- /dev/null +++ b/docs/develop/develop/ide/boxes/terminal.html @@ -0,0 +1,786 @@ + + + + + + + + + Terminal Window — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Terminal Window

+

You can open a terminal window in a new IDE panel using the menu bar or the icons in the Filetree:

+
    +
  • To open from menu bar, click Tools > Terminal on the menu bar.

  • +
  • To open from the file tree, click the Terminal icon in the upper menu bar of the file tree.

    +Terminal Icon +
  • +
+

You can also have multiple terminals open simultaneously.

+

You can create panels and tabs to customize your project layout. See Panels and Tabs for more information.

+Terminal +
+

Terminal settings

+

You can modify the Terminal settings from the Codio > Preferences menu. The following settings can be modified (defaults are shown):

+
[terminal]
+
+;Font size.
+; Type: int
+font_size = 12
+
+;Terminal theme.
+; Type: string
+theme = dark
+
+;Number of lines available in the scroll history.
+; Type: int
+scrollback = 3000
+
+;Quick Connect
+; Type: hotkey
+show-connect-dialog =
+
+;Connections Manager
+; Type: hotkey
+show-connections-manager =
+
+;Terminal. SSH connection to the box
+; Type: hotkey
+backend-connection = Shift+Alt+T
+
+
+

Preferences can be modified at the User level as described in User Preferences or at the Project level.

+
+

Note

+

When changing settings at the Project level, the settings will be applied for all users looking at the project.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/debugger/create-debug-target.html b/docs/develop/develop/ide/debugger/create-debug-target.html new file mode 100644 index 00000000..8080b78b --- /dev/null +++ b/docs/develop/develop/ide/debugger/create-debug-target.html @@ -0,0 +1,783 @@ + + + + + + + + + Create and Manage Debugger Targets — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create and Manage Debugger Targets

+

Before you can start debugging a project, you must first create your debug targets. Creating multiple targets allows you to:

+
    +
  • Quickly debug the same application with different command line arguments to test different scenarios.

  • +
  • Debug more than one application.

  • +
+

You manage your debug targets on the Debugger Settings page.

+Debugger Settings +
+

Create a debug target

+

To create a debug target, follow these steps:

+
    +
  1. Click the Tools tab on the menu bar and choose Debugger Settings. Alternatively, you can click the Configure tab on the far right on the menu bar.

  2. +
  3. On the Debugger Settings page, click Create.

  4. +
+Create Debug Target +
    +
  1. Click the Debugger Type drop-down and choose the programming language.

    +

    If you are using C, C++, or Java, and debugging a simple single code file project, choose Single C File, , or Single Java file so you don’t need to provide detailed compile and run configurations.

    +

    The field that are displayed depend on the programming language that is selected.

    +
  2. +
  3. Enter a Name for the configuration and then complete the fields on the form. Typically, you need to provide:

    +
      +
    • The command to execute to your program along with any command line parameters you may want to include.

    • +
    • Command to execute before debugging starts. This is usually a compile process.

    • +
    +

    You can also reference the active file in use using {{filepath}} token which inserts the path and full file name (/path/to/file.ext).

    +
      +
    • If you are not using a single file configuration, you must also complete the following fields:

    • +
    +
    +
      +
    • Before Launch - Compilation or build command.

    • +
    • Launch - Command to launch the program.

    • +
    +
    +
      +
    • If you are creating a target for a Java application, you must also set the Debugger Port Number to 5105.

    • +
    +
  4. +
  5. Click Create Target.

  6. +
+

You are now ready to Start Debug Session.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/debugger/debugger.html b/docs/develop/develop/ide/debugger/debugger.html new file mode 100644 index 00000000..ca85c687 --- /dev/null +++ b/docs/develop/develop/ide/debugger/debugger.html @@ -0,0 +1,762 @@ + + + + + + + + + Debugger — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Debugger

+
+
+

Codio offers an integrated, language specific debugger that supports the following languages.

+
    +
  • Java

  • +
  • Python 2

  • +
  • Python 3

  • +
  • NodeJS

  • +
  • C and C++

  • +
  • Deno

  • +
+
+

Note

+

Contact us if you would like support for other languages.

+
+

Codio provides a Starter Pack project that contains examples of debugger usage. Go to Starter Packs and search for Demo Codio Debugger if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+

If you are new to using a debugging tool, we suggest you view this useful video tutorial:

+
+

Prerequisites

+

To use the Codio debugger, you must have the GDB component installed. If you installed Java, C, or NodeJS from a stack, the GBD components that support debugging are automatically installed.

+

However, if you manually installed these languages, you will be prompted to install the GDB component when you attempt to run the debugger. Simply click the link to install the component.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/debugger/start-debug.html b/docs/develop/develop/ide/debugger/start-debug.html new file mode 100644 index 00000000..5b61c10d --- /dev/null +++ b/docs/develop/develop/ide/debugger/start-debug.html @@ -0,0 +1,804 @@ + + + + + + + + + Start Debug Session — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Start Debug Session

+

You can launch an application in debug mode using one of the following +methods:

+
    +
  • Click the Configure tab on the menu bar and choose your target from the drop-down list. If you have previously run the debug target, you can simply click the debug target the next time you want to run it.

  • +
  • On the Debugger Targets page, click Debug for the target you want to run.

  • +
  • Launch debugger from a page. See Custom Buttons for details.

  • +
+
+Launch Debugger +
+

The debugger launches and displays the code running. It may take a few seconds to load.

+
+Debugger Started +
+

It automatically stops on the first line of code, whether or not there is a breakpoint set. A breakpoint is a line of code where the debugger pauses code execution.

+
    +
  • To set a breakpoint, click in the gutter next to the line number. When a breakpoint is set, a red dot appears on the line.

  • +
  • Click the set breakpoint to remove it.

  • +
+
+

Debugger controls

+

Use the following controls at the top of the debug panel to perform actions to execute the debugger after it stops code execution:

+
+Debug Control Buttons +
+
    +
  • Resume - Continues execution without stopping until another breakpoint is encountered.

  • +
  • Stop - Stops execution and closes the debug window.

  • +
  • Step over - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it executes the contents of that function but does not stop unless the function contains a breakpoint.

  • +
  • Step into - Debugger executes the next line of code and then stops. If the line of code about to be executed is a function, it stops on the first line within that function.

  • +
  • +
    Step out - Debugger exits the current function and stops on the next line of the calling function. If the current line is the main

    entry function of the application, execution ceases and the debugger automatically restarts.

    +
    +
    +
  • +
+
+
+

Debugger features

+

The debug panel also includes the following features:

+
    +
  • Call stack - Shows the parent functions relative to the function that contains the currently executing line of code.

  • +
  • Local variables - All local variables of the current function and their current values are automatically displayed.

  • +
  • Watches - Allows you to watch a specific variable and expressions for some languages.

  • +
  • Breakpoints - Lists all the breakpoints currently set in any of your code files. You can disable them by unchecking the check boxes.

  • +
  • Console - Displays status messages from the system and output data when you write output to the console (for example, a print('message') statement in Python).

  • +
+
+
+

Standard input support

+

Support for standard input (stdin) is available for:

+
    +
  • C/C++

  • +
  • Node.js

  • +
  • GDB

  • +
+

Node example:

+
function testStdIn() {
+    console.log("What is your name?");
+    process.stdin.once('data', (chunk) => {
+        let name = chunk.toString();
+        console.log("Hello, " + name + "!");
+    });
+}
+
+testStdIn()
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/abbreviations.html b/docs/develop/develop/ide/editing/abbreviations.html new file mode 100644 index 00000000..bb18be90 --- /dev/null +++ b/docs/develop/develop/ide/editing/abbreviations.html @@ -0,0 +1,834 @@ + + + + + + + + + Abbreviations — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Abbreviations

+

Codio offers numerous HTML and CSS abbreviations that expand to code. You simply enter the abbreviation in the Code Editor and then press the Tab key to expand the abbreviation. For example:

+
div>ul>li*3
+
+
+

which expands to

+
<div>
+    <ul>
+        <li></li>
+        <li></li>
+        <li></li>
+    </ul>
+</div>
+
+
+
+

Basic HTML example

+
div>ul>li*3
+
+
+

results in

+
<div>
+    <ul>
+        <li></li>
+        <li></li>
+        <li></li>
+    </ul>
+</div>
+
+
+
+
+

Juicier HTML example

+
#page>div.logo+ul#navigation>li*5>a{Item $}
+
+
+

results in

+
<div id="page">
+    <div class="logo"></div>
+    <ul id="navigation">
+        <li><a href="">Item 1</a></li>
+        <li><a href="">Item 2</a></li>
+        <li><a href="">Item 3</a></li>
+        <li><a href="">Item 4</a></li>
+        <li><a href="">Item 5</a></li>
+    </ul>
+</div>
+
+
+
+
+

Insertion stops/edit points

+

Some abbreviations have insertion points. For example:

+
a:link
+
+
+

inserts:

+
<a href="http://|"></a>
+
+
+

Where the | character represents the cursor after insertion. After you have entered the href url, press Ctrl+Alt+right arrow (not the Tab key) to jump to the next edit point.

+

For more HTML abbreviations, see the Emmet documentation.

+
+
+

CSS examples

+
    +
  • w100p results in width: 100%

  • +
  • m10p30e5x results in margin: 10% 30em 5ex

  • +
+
p100+m10e
+
+
+

results in

+
padding: 100px;
+margin: 10em;
+
+
+
lg(left, #fc0, 30%, red)
+
+
+

results in

+
background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#fc0), color-stop(0.5, 30%), to(red));
+background-image: -webkit-linear-gradient(left, #fc0, 30%, red);
+background-image: -moz-linear-gradient(left, #fc0, 30%, red);
+background-image: -o-linear-gradient(left, #fc0, 30%, red);
+background-image: linear-gradient(left, #fc0, 30%, red);
+
+
+
+ +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/autocomplete.html b/docs/develop/develop/ide/editing/autocomplete.html new file mode 100644 index 00000000..ec482985 --- /dev/null +++ b/docs/develop/develop/ide/editing/autocomplete.html @@ -0,0 +1,780 @@ + + + + + + + + + Autocomplete — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Autocomplete

+

Autocomplete is supported in HTML, CSS, and Javascript files. Simply start typing and matches are automatically displayed.

+

If you choose, you can disable autocomplete in your preferences:

+

automatic_completions = false

+

Other languages are supported with language server protocol although in such files, autocomplete is not automatically enabled. See Language Server Protocol for more information.

+
+

HTML tags

+

Autocomplete is context sensitive, so you will only be shown tags that are relevant to your location in the HTML file.

+

For example, if you are not in <body></body>, fewer autocomplete options are shown. If you place your cursor inside the <body></body> tags, a full list of standard HTML tags are shown.

+
+
+

HTML attributes

+

If you enter <a and invoke autocomplete, a list of relevant attributes for the <a> tag are shown.

+
+
+

Tern and javascript

+

We support intelligent autocomplete using TernJS. Tern also supports explicit directives in the .tern-project file, which you can move to the root (/home/codio/workspace or ~/workspace) of your project.

+

The file looks like this:

+
{
+  "libs": [
+    "browser",
+    "jquery"
+  ],
+  "loadEagerly": [
+    "importantfile.js"
+  ],
+  "plugins": {
+    "requirejs": {
+      "baseURL": "./",
+      "paths": {}
+    }
+  }
+}
+
+
+

Codio only supports autocomplete for the currently opened file and items specified in the libs section of the .tern-project file. Refer to the Tern documentation for full details on how to configure the .tern-project file.

+
+
+

CSS

+

To invoke autocomplete in a css file, use the ctrl+space keyboard shortcut.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/av-chat.html b/docs/develop/develop/ide/editing/av-chat.html new file mode 100644 index 00000000..1fe9bde7 --- /dev/null +++ b/docs/develop/develop/ide/editing/av-chat.html @@ -0,0 +1,768 @@ + + + + + + + + + Audio Video Chat — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Audio Video Chat

+

When accessing another users project (where permissions have been granted by the project owner or for teachers viewing the students assignment, a Call button will show allowing Audio/Video calls and or real time chat.

+Audio Video +
+

Hide A/V calls

+

If you wish to disable A/V calls, organization owners can do this in the organization settings area. See Hide A/V Calls for more information

+
+
+

Permissions

+

Permission for your camera/microphone is required and your browser will prompt you to allow.Permission

+

If permission has been denied, you can re enable in your browser

+
+

Google Chrome:

+

If you are using Google Chrome you can access your settings through the padlock icon in the top left of your screen, next to the URL of the page you are currently on.

+

Click Site settings and make sure your camera and microphone both say Allow

+
+
+

Firefox:

+

If you are using Firefox as your internet browser you can access your settings by typing “about:permissions” into the location bar as if it were a website and hitting enter.

+

This will take you to your settings page, click the following link to find out more about changing your settings:

+

https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more?redirectlocale=en-US&redirectslug=how-do-i-manage-website-permissions

+
+
+

Safari:

+

If you are using Safari, you can access your browser settings by clicking Safari and then Preferences.

+

You will see a pop up box and can update your settings. Learn more about how to update the settings through the following link:

+

https://support.apple.com/en-nz/guide/safari/ibrwe2159f50/mac

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/code-beautifier.html b/docs/develop/develop/ide/editing/code-beautifier.html new file mode 100644 index 00000000..e4cb5ba9 --- /dev/null +++ b/docs/develop/develop/ide/editing/code-beautifier.html @@ -0,0 +1,761 @@ + + + + + + + + + Code Beautifier — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Beautifier

+

The Code Beautifier feature automatically indents and manages spaces in your code to format it correctly. You apply the Code Beautifier using the shortcut keys, which can be customized in User Preferences.

+
    +
  • key_format_code = cmd+Shift+B (Mac)

  • +
  • key_format_code = Ctrl+Shift+B (PC/Linux)

  • +
+

As an example, if you enter code as follows:

+
if ('this_is'==/an_example/){of_beautifer();}else{var a=b?(c%d):e[f];}
+
+
+

It transforms to this after applying the Code Beautifier shortcut:

+
if ('this_is' == /an_example/) {
+    of_beautifer();
+} else {
+    var a = b ? (c % d) : e[f];
+}
+
+
+
+

Settings

+

The Code Beautifier settings can be found in the [code-beautifier] section of the Codio Preferences. You can also modify these settings in Project Preferences to force beautification to all code, regardless of who edits it.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/code-editing.html b/docs/develop/develop/ide/editing/code-editing.html new file mode 100644 index 00000000..eafd8518 --- /dev/null +++ b/docs/develop/develop/ide/editing/code-editing.html @@ -0,0 +1,743 @@ + + + + + + + + + Code Editing Features — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Editing Features

+
+
+

Codio has various IDE features to enhance productivity when working with HTML, CSS, and Javascript files. These features are based on the Emmet web-developers toolkit (formerly Zen Coding). For additional information about Emmet syntax, see the Emmet documentation.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/color-picker.html b/docs/develop/develop/ide/editing/color-picker.html new file mode 100644 index 00000000..5a459196 --- /dev/null +++ b/docs/develop/develop/ide/editing/color-picker.html @@ -0,0 +1,759 @@ + + + + + + + + + Color Picker and Preview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Color Picker and Preview

+

You can preview colors of code and choose a different color using the Color Picker feature.

+

To preview a color, hover over the code to see the RGB hex value (100, 100, 100), or hsla (0,100%,50%,0.2) in a popup.

+
+Preview Color +
+

You can also preview gradients.

+
+Preview Gradients +
+
+

Color picker

+

To choose a new color, move your mouse into the color preview area and click to open the Color Picker. You can then select a new color by dragging the cursor or entering a specific value.

+
+Color Picker +
+
+Color Picker - Enter Value +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/command-bar.html b/docs/develop/develop/ide/editing/command-bar.html new file mode 100644 index 00000000..cd281cdd --- /dev/null +++ b/docs/develop/develop/ide/editing/command-bar.html @@ -0,0 +1,747 @@ + + + + + + + + + Command Bar — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Command Bar

+

The Command Bar allows you to access almost all of the Codio actions from a searchable list. You can also use it to look up keyboard shortcuts. You simply start typing and the list is refined as you type.

+Command Bar +

Use one of the following methods to invoke the Command Bar:

+
    +
  • Click Tools on the menu bar and choose Command Bar.

  • +
  • Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (PC/Linux) on the keyboard.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/connect-github-codio.html b/docs/develop/develop/ide/editing/connect-github-codio.html new file mode 100644 index 00000000..85baa62b --- /dev/null +++ b/docs/develop/develop/ide/editing/connect-github-codio.html @@ -0,0 +1,857 @@ + + + + + + + + + Connecting a Codio Box to a GitHub Repo — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connecting a Codio Box to a GitHub Repo

+

The first step to using GitHub in Codio is connecting your Codio and GitHub accounts. You only have to do this once. Follow these steps:

+
    +
  1. Click your user name in the bottom left of the main menu.

  2. +
  3. Click the Applications tab.

    + +
  4. +
  5. In the GitHub section, click Connect account and log in to your Github account when prompted.

    +GitHub Connect Account +
  6. +
  7. If you are using SSH connections, click Upload public key so Codio and Github can exchange keys.

  8. +
+
+

In GitHub: Make a new repo

+

Each Codio box (Assignment, Book, or Project) can be mapped to a GitHub repo. This connection only needs to be established once per box.

+
+

Note

+

If you have an existing repo you want to clone, you can import a project from a GitHub repo and this connection is made during the importing process. If you are familiar with Git, skip the rest of this guide and just use the terminal as usual by going to Tools > Terminal.

+
+

To create a new repo, follow these steps:

+
    +
  1. Go to your GitHub organization (or profile) and click the green New repository button.

    +New Repo Button +
  2. +
  3. Complete the requested details. We suggest not initializing a README since one already exists in Codio and will result in an immediate conflict.

    +Create New Repo +
  4. +
  5. Copy either the HTTP or SSH URL on the created repo page (if you do not want to type credentials and you uploaded your public key, use SSH).

    +Repo URL +
  6. +
+
+
+

In Codio: Connect to repo

+
+

Note

+

You can skip the rest of this guide and do your normal Git workflow via command line if you prefer. Open a terminal from Tools > Terminal on the menu.

+
+

To connect to your repo from Codio, follow these steps:

+
    +
  1. On the Codio Box you want to connect, click the Tools > Git > Remotes menu.

    +Remotes Menu +
  2. +
  3. When prompted, click Yes to initialize a local git repository.

    +Initialize +
  4. +
  5. When prompted, click Add Remote.

    +Add Remote +
  6. +
  7. Enter the name (origin is the git standard) and paste the URL that you copied into the URL field.

  8. +
  9. Click Save and then Close.

    +../../../../_images/RemoteConfig2.png +
  10. +
  11. Click Tools > Terminal on the menu to open a terminal window.

    +Terminal +
  12. +
  13. Type git add . and press Enter/Return.

  14. +
  15. Type git commit -m “initial commit” and press Enter/Return.

  16. +
  17. Type git push –set-upstream origin master and press Enter/Return.

  18. +
+
+
+

Collaboration in Codio with GitHub

+

If you share Codio boxes with other members of your GitHub repository (directly through Project > Permissions or a copy through Project > Fork), the connection to GitHub is maintained. However, other members must also link their GitHub and Codio accounts.

+
+
+

Saving your work with Git (Committing and Pushing)

+

Git allows you to save multiple versions of your work using a few commands in the terminal (Tools > Terminal).

+../../../../_images/terminal.png +

Follow these steps to save your work:

+
    +
  1. In the terminal window, type git add . and press Enter/Return. This command tells git to go collect all the changes you have made since your last save (which is called a commit in Git).

  2. +
  3. Type git commit -m “commit message” and press Enter/Return. This command bundles all your changes and gives them a useful human-readable name so make sure you provide something useful for the Commit Message.

  4. +
  5. Type git push and press Enter/Return. This command sends this bundle of changes to GitHub so you have a copy in the cloud.

  6. +
+
+
+

Going back to immediately previous save point (Reverting to previous commit)

+

To get rid of all changes since your last save or commit, follow these steps: +Warning: Be careful, you cannot undo this!

+
    +
  1. First, check what your last commit or save was to make sure you know where you are going back to. You can either look on GitHub or type git log. If you have a lot of commits, you will need to type Ctrl+c to exit git log.

  2. +
  3. Type git add . && git reset –hard HEAD.

  4. +
+
+
+

Manually importing a Git repo into Codio

+

To manually import a Git repo into Codio, follow these steps:

+
    +
  1. In GitHub, click the Clone URL link in the right pane and copy to the clipboard.

    +
    +create from GitHub +
    +
  2. +
+
+

If you are cloning using SSH, you must have already added the Codio SSH public key as described in Upload SSH Key to Remote Server.

+
+
    +
  1. Log in to Codio and click New Project.

  2. +
  3. Click the Click here link for more options.

    +create from GitHub +
  4. +
  5. In the Select your Starting Point area, click Import.

  6. +
  7. From the Source drop-down list, choose Git.

  8. +
  9. Paste the Git URL into the URL field and add details about the project.

  10. +
  11. Click Create. Codio loads the repo and displays it.

  12. +
+
+
+

A few Git helpers

+

We have added a few Git helpers to the Tools > Git menu.

+Git Overview +
+
+

More Information

+

Refer to the documentation on GitHub.com and http://git-scm.com/docs for complete information about using Git and GitHub.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/cursor.html b/docs/develop/develop/ide/editing/cursor.html new file mode 100644 index 00000000..3b50cdf7 --- /dev/null +++ b/docs/develop/develop/ide/editing/cursor.html @@ -0,0 +1,754 @@ + + + + + + + + + Cursor Features — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Cursor Features

+
+

Cursor presence

+

When accessing another users project (where permissions have been granted by the project owner), all active users in a project are indicated by a colored icon in the menu bar when files are being accessed or edited. If you click the icon, it changes focus to show which user is currently editing the file. If you hover over the icon, you can see the file name and line currently being edited.

+Cursor Presense +

This feature is useful when assisting other users so you can see what they are doing in real time, or when you are demonstrating to others so they can see what you are doing in real time.

+
+
+

Multiple cursors

+

You can place multiple cursors anywhere in a file using the following keyboard shortcut:

+
    +
  • Alt+Click

  • +
+

Click to place the cursor at the desired location, and then press and hold Alt clicking at new locations. When you release Alt you can start typing and the content will be duplicated at all cursor locations.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/force-language-highlighting.html b/docs/develop/develop/ide/editing/force-language-highlighting.html new file mode 100644 index 00000000..840b1be8 --- /dev/null +++ b/docs/develop/develop/ide/editing/force-language-highlighting.html @@ -0,0 +1,746 @@ + + + + + + + + + Language Highlighting — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Language Highlighting

+

Codio automatically selects the syntax highlighting rules based on the file extension.

+
+

ECMAScript 6 support

+

ECMAScript 6 is enabled by default in javascript files.

+

If you wish additional configurations to apply, you can add a .jshintrc file to the root (/home/codio/workspace or ~/workspace) of your project/assignment. See https://github.com/jshint/jshint/blob/master/examples/.jshintrc for more information

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/git.html b/docs/develop/develop/ide/editing/git.html new file mode 100644 index 00000000..4525f50f --- /dev/null +++ b/docs/develop/develop/ide/editing/git.html @@ -0,0 +1,976 @@ + + + + + + + + + Git and GitHub — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Git and GitHub

+

Git and GitHub are preinstalled, as well as Mercurial and SVN. You can open a Terminal window to access them from the command line. The Tools > Git menu includes options for using Git.

+

You can also configure your .codio file to create a Run menu from which you can access common commands in the Codio IDE. See Customize Run Button for more information.

+

If you are new to Git, refer to the following to get started:

+ +
+

Use Git without remote repos

+

You can use Git commands in your Codio project without using a remote repo, providing more collaborative capabilities and comprehensive version control. However, you can add a remote repository, such as GitHub (recommended), if you want to save your code in more than one location as a back up.

+

To add a repo, click Tools > Git > Remotes.

+
+
+

View GitHub repos

+

GitHub let’s you browse around a repo but it’s not the same as using an IDE. Codio gives you a great way of viewing any GitHub (or Git) repo. For web apps, you can even run and preview in Codio.

+
+ +
+

Manually import a Git repo into Codio

+

To manually import a Git repo into Codio, follow these steps:

+
    +
  1. In GitHub, click the Clone URL link in the right pane and copy to the clipboard.

    +
    +create from GitHub +
    +
  2. +
+
+

If you are cloning using SSH, you must have already added the Codio SSH public key as described in Upload SSH Key to Remote Server.

+
+
    +
  1. Log in to Codio and click New Project.

  2. +
  3. Click the Click here link for more options.

    +
    +create from GitHub +
    +
  4. +
  5. In the Select your Starting Point area, click Import.

  6. +
  7. From the Source drop-down list, choose Git.

  8. +
  9. Paste the Git URL into the URL field and add details about the project.

  10. +
  11. Click Create. Codio loads the repo and displays it.

  12. +
+
+
+

Create new GitHub repo from Codio

+

If you have code in Codio and want to create a new GitHub (or other remote) repo, follow these steps:

+
    +
  1. Create a new project in Codio or open up an existing project.

  2. +
  3. Open the terminal (Tools > Terminal), type git init and press Enter to initialize Git.

  4. +
  5. Create a new, empty repo on GitHub or other remote repo.

  6. +
  7. Copy the repo url to the clipboard.

  8. +
+
+

Note

+

If you’re using GitHub, use the SSH url rather than https. Also make sure that your Codio public key is uploaded to your GitHub account or repo settings as described in Upload SSH Key to Remote Server.

+
+github repo +
+
+
    +
  1. In the Codio IDE, click Tools > Git > Remotes on the menu.

  2. +
  3. Click the Edit icon and enter the Name and paste the URL into the field. It is recommended you use origin as the name to confirm the normal standards. You do not need to specify a username or password if you are using SSH.

  4. +
  5. Click Save.

  6. +
+
+
+

Check project status

+

Whenever you want to see the Git status of your project, enter git status. Initially, nothing will be returned until changes are committed.

+
$ git status
+# On branch master nothing to commit, working directory clean
+
+
+
+
+

Track files

+

Codio uses Git by default and if you import a project from a Git repo, all the existing files are ready to be tracked. Tracking means that Git knows about them. If you add a new file, Git does not know about it and needs to be explicitly told:

+
    +
  1. Add a new file (test.txt) and then add a few random characters to it.

  2. +
  3. Open any other existing file and make a small change to it.

  4. +
  5. Run git status and you should see results similar to the following, which shows the modified and the new (untracked) files:

  6. +
+
+
# On branch master `
+# Changes not staged for commit:`
+# (use "git add ..." to update what will be committed)
+# (use "git checkout -- ..." to discard changes in working directory)
+#
+#   modified: humans.txt
+#
+# Untracked files:
+# (use "git add ..." to include in what will be committed)
+#
+#   test.txt no changes added to commit (use "git add" and/or "git commit -a")
+
+
+
+
    +
  1. To tell GitHub to track the file, enter one of the following commands:

    +
      +
    • git add . - tells Git to track all files in the project that are not yet tracked. This is the quickest and simplest way to track any new files.

    • +
    • git add FILENAME - explicitly tracks a single file.

    • +
    +
  2. +
+
+
+

Stage files

+

A staged file is one that is tracked and is ready to commit to the repository. Once you run git add, the file is being tracked and staged. However, if you modify a tracked file, the modifications are not staged. To stage the file, rerun git add.

+
+
+

Commit your changes

+

Committing means that you want to add your staged files into the repository. You can commit using one of the following commands:

+
    +
  • git commit -m 'commit message' - commits all staged files to the repo.

  • +
  • git commit -a -m 'commit message' commits all staged files to the repo and also automatically stages any tracked files before committing them. If you use this command, you do not need to run git add unless you want to add new, untracked files.

  • +
+

The commit message is important as it allows you to see what general changes are included in the commit. For example:

+

git commit -a -m "added test.txt and modified some stuff" and get

+
[master d3e6bb1] added test.txt and modified some stuff
+2 files changed, 2 insertions(+)
+create mode 100644 test.txt`
+
+
+

If you run a git status, you can see that everything is clean and up-to-date.

+
# On branch master nothing to commit, working directory clean
+
+
+
+
+

Revert code

+

You can revert your code back to an earlier commit to roll back your changes. Use one of the following commands to revert:

+
    +
  • git revert 'commit id' - reverts back to the SHA (uid); you can see when you type git log.

  • +
  • git revert HEAD - reverts back to the last commit, deleting any uncommitted changes.

  • +
  • git revert HEAD~n - reverts to the last n commit; for example, HEAD~3 reverts to the 4th last commit.

  • +
  • git revert HEAD^^^ - (count of ^ is like ~n) - reverts to the last n commit; for example, HEAD^^^4 reverts to the 4th last commit.

  • +
+

For more information about reverting code, see http://git-scm.com/docs/git-revert.html.

+
+
+

Push to a remote repository

+

If you have a remote repository configure, commit your changes using the git push origin master command, where: +- origin - is the name of the remote repo. +- master - is the name of the branch. When you create a new Codio project, a master branch is automatically created and appears in brackets at the top of the file tree next to the project name.

+

You can view your pushed commits in the GitHub repo.

+
+
+

Pull from a remote repository

+

If others are working remotely on the same code (not in Codio), they are also pushing their code to the GitHub repo. Run the git pull origin master command to pull in changes from the remote repo and automatically merge the code.

+
+
+

Resolve conflicts

+

When you pull in from the remote, you may get a conflict warning. This occurs if someone else has modified code in a way that Git cannot automatically resolve it, usually because you have been editing the same code.

+

You can minimize conflicts by committing small changes and pulling from master often.

+

To resolve the conflict, follow these steps:

+
    +
  1. Open the file. Something similar to the following is displayed:

    +
    <<<<<<< HEAD:index.html
    +<div id="footer">contact : email.support@github.com</div>
    +=======
    +<div id="footer">
    +please contact us at support@github.com
    +</div>
    +>>>>>>> iss53:index.html
    +
    +
    +
  2. +
  3. Remove the code block that you do not want to keep. The top block is your code and the bottom comes from the code that is being merged. If you want to keep your code, modify as follows:

    +
    <div id="footer">contact : email.support@github.com</div>
    +
    +
    +

    If you want to keep the merged code, modify as follows:

    +
    <div id="footer">
    +    please contact us at support@github.com
    +</div>
    +
    +
    +
  4. +
+
+
+

Branches

+

When you create a branch, you are creating a new area to code. You then merge another branch (usually the master branch), into your new branch. From this point on, you can do whatever you want (add, commit, push etc) without impacting the master branch on any other branch. For more information about branching, see http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is.

+

Use the following commands for branching:

+
    +
  • git branch - creates a new branch.

  • +
  • git checkout - switches to that branch (be sure to commit your current branch before switching to another branch so you don’t lose any unstaged files).

  • +
  • git merge from-branch - merges code from from-branch into your current branch.

  • +
+

It is recommended that you switch to your master branch and pull in changes from the remote, and then switch back to your working branch and merge changes. This practice will minimize conflicts.

+

You can switch branches using the command line interface or from the Tools > Git > Switch Branch menu.

+
+

Active branch

+

You can see which branch is active by looking in the file tree. The top level item is the project name and the current branch is in brackets.

+
+
+

Basic commands

+
    +
  • git status - shows the status of your current branch.

  • +
  • git add . - adds all files, tracked or not, to the staged files.

  • +
  • git commit -a -m - stages and commits all files to the snapshot.

  • +
  • git push --set-upstream origin master - Run this command the first time you push to track the new remote.

  • +
  • git push - used for subsequent pushes; this command pushes all committed changes of the master branch to the tracked remote (origin).

  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/junit.html b/docs/develop/develop/ide/editing/junit.html new file mode 100644 index 00000000..2f3cf61b --- /dev/null +++ b/docs/develop/develop/ide/editing/junit.html @@ -0,0 +1,782 @@ + + + + + + + + + JUnit Testing Framework — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

JUnit Testing Framework

+

Codio provides a simple way to test Java in your project using Junit framework. To use JUnit, your project requires Java. Use one of the following methods to make sure your project uses Java:

+
    +
  • Use the Java8 Stack.

  • +
  • Manually install Java on your box.

  • +
  • Install Java from Tools > Install Software. See Install Software Packages for more information.

  • +
+
+

Configure JUnit

+

To configure to use JUnit for Java testing, follow these steps:

+
    +
  1. Click Tools on the menu bar and choose JUnit. You can also use the shortcut Shift+Alt+J.

    +JUnit Settings +
  2. +
  3. Complete the fields on the JUnit Settings page:

    +
      +
    • JUnit version - Select the version from the drop-down list.

    • +
    • Source path - Location of the source code.

    • +
    • Test source path - Location of the test cases source folder.

    • +
    • Library path - Path to any libraries used by the project.

    • +
    • Working directory - Path where the compiled code should execute.

    • +
    • Add test case - Specify the paths to a file with JUnit tests or drag and drop the file into the JUnit field.

    • +
    +
  4. +
+

Notes:

+
    +
  • All paths are relative to the root (/home/codio/workspace or ~/workspace) of the assignment/project.

  • +
  • If using multiple cases in an assignment/project, the files for each should all be in separate folders for them to work independently of each other. This applies to student code files as well as the code used for the cases.

  • +
  • All code files Source path will be compiled. Files that fail to compile successfully will cause the tests to fail, even if they are not used.

  • +
+
+
+

Timeout settings

+

The default timeout for JUnit execution is 30 seconds. You can change the timeout and default hotkey in User Preferences or Project Preferences. To ensure that the same settings apply to all students using the same project, we recommend changing the timeout and hotkey in Project Preferences.

+JUnit Preferences +
+
+

Execute JUnit Test

+

You execute the tests from the JUnits Execution page (Tools > JUnit > Junit Executions). Once completed, the results are shown on the page.

+JUnit Execute +

If you publish your project as a unit to a class, the JUnit configurations you set up are included in the unit for students.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/keyboard-shortcuts.html b/docs/develop/develop/ide/editing/keyboard-shortcuts.html new file mode 100644 index 00000000..3aee77a3 --- /dev/null +++ b/docs/develop/develop/ide/editing/keyboard-shortcuts.html @@ -0,0 +1,821 @@ + + + + + + + + + Keyboard Shortcuts — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Keyboard Shortcuts

+

Codio offers default keyboard shortcuts and Emmet keyboard shortcuts; all of which can be customized in User Preferences. General keyboard shortcuts can be found in the Help > Shortcuts menu.

+

See the Emmet Cheat Sheet for a complete list of shortcuts.

+
+Emmet Cheat Sheet +
+
+

Match tag pair

+

Searches for tag(s) content bounds from current cursor position and selects it. It will expand (outward balancing) or shrink (inward balancing) selection when called multiple times. Not every editor supports both inward and outward balancing due of some implementation issues, most editors have outward balancing only.

+
    +
  • Mac - Cmd+D (inward) and Shift+Cmd+D (outward)

  • +
  • PC/Linux - Ctrl+D (inward) and Shift+Ctrl+D (outward)

  • +
+
+
+

Go to matching pair

+

Allows you to quickly traverse between opening and closing tag in HTML code.

+

Mac - **Shift+Cmd+T* +PC/Linux- **Shift+Ctrl+T*

+
+
+

Wrap with abbreviation

+

Expands an abbreviation and places currently selected content in the last element of generated snippet. If there’s no selection, action silently calls Match tag pair to wrap context element.

+
    +
  • Mac - Shift+Cmd+A

  • +
  • PC/Linux - Shift+Cmd+A

  • +
+
+
+

Go to edit point

+

Allows you to quickly traverse between important code points in HTML code blocks, including between tags, empty attributes, and new lines with indentation.

+
    +
  • Win - Ctrl+Alt+Right Arrow or Ctrl+Alt+Left Arrow

  • +
+
+
+

Select item

+

Action selects important code parts. In HTML, it selects tag name, full attribute, and attribute value. For class attribute it also selects distinct classes. In CSS, it matches selector, full property, and property value. For complex values and functions like 1px solid red or url (image.jpg), it also selects part of it.

+
    +
  • Mac - Shift+Cmd+

  • +
  • PC/Linux - Shift+Cmd+

  • +
+
+
+

Toggle comment

+

Toggles comments on and off for the selected line in HTML and CSS files.

+
    +
  • Mac - Cmd+/

  • +
  • PC/Linux - Ctrl+/

  • +
+
+
+

Remove tag

+

Quickly removes tag, found by Match tag pair from current cursor position, and adjusts indentation.

+
    +
  • Mac - Cmd+K

  • +
  • PC/Linux - Ctrl+K

  • +
+
+
+

Merge lines

+

Merges selected lines into a single line. When there is no selection, it matches context HTML tag.

+

Mac - **Shift+Cmd+M* +PC/Linux - **Shift+Ctrl+M*

+
+
+

Inline calculator

+

Evaluates simple math expressions like 2*4 or 10/2 and outputs its result. You can use \ operator which is equivalent to round(a/b).

+
    +
  • Mac - Shift+Cmd+Y

  • +
  • PC/Linux - Shift+Ctrl+Y

  • +
+
+
+

Increment/decrement number

+

Increments or decrements the number under the cursor with different steps: 0.1, 1 or 10.

+
    +
  • Mac/PC/Linux - Alt+Up/Down (inc/dec by 0.1)

  • +
  • Mac/PC/Linux - Ctrl+Up/Down (inc/dec by 1)

  • +
  • Mac/PC/Linux - Ctrl+Alt+Up/Down (inc/dec by 10)

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/preview.html b/docs/develop/develop/ide/editing/preview.html new file mode 100644 index 00000000..2db76182 --- /dev/null +++ b/docs/develop/develop/ide/editing/preview.html @@ -0,0 +1,811 @@ + + + + + + + + + Preview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Preview

+

The Preview feature enables you to view your static and dynamic content. The menu options are configurable for both types of content:

+
    +
  • Preview status options - Can be used for only static content (HTML, CSS, JS, and text). You can also easily preview static content on your mobile device using Project > QR Code for Preview URL to generate a QR code that you can scan with a QR reader on your device.

  • +
  • Preview dynamic options - To access files or services that are executed on the server (PHY, Ruby, Note, etc.), you need to use the right-most menu option.

    +

    To access your server side application, enter word1-word2-port.codio.io. This accesses your box over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

    +

    word1-word2 is an automatically generated subdomain name for your Codio box. You can configure your application to listen on ports defined in the URL. However, Codio only supports a restricted range of ports. Refer to this section for more details (insert link).

    +
  • +
+
+

Using preview

+

Using the Preview button lets you preview one or more web pages with a simple button press. Codio creates three default entries in the Preview menu automatically:

+Preview Button +
    +
  • Project Index - this is the default file to run for your project. It can be set by right-clicking a file in the Filetree. This option should be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option.

  • +
  • Current File - whichever code file currently has focus. This option should only be used to preview static content (typically HTML files). For PHP, Ruby, etc., you should use the Box URL option.

  • +
  • Box URL - Use this option for previewing PHP, Ruby, or other server side languages over HTTPS. Click here <insert link> for more information on configuring port access for HTTPS.

  • +
+

If you right-click a file in the file tree or the tab, you can also select Preview Static.

+Preview Static +

See Apache Password Basic Authentication and HTTP Authentication with PHP for examples.

+
+
+

Modifying the Preview menu

+

You can customize the Preview menu using one of the following methods:

+
    +
  • From the Preview or Run drop-down menus, choose Configure.

  • +
  • Open the .codio file in the root (/home/codio/workspace or ~/workspace)of your project (if it exists).

  • +
+

To customize the Run and Preview buttons, modify this section of the .codio file:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Node version": "node --version"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Project Index (static)": "https://{{domain}}/{{index}}",
+        "Current File (static)": "https://{{domain}}/{{filepath}}",
+        "Box URL": "https://{{domain3000}}/"
+  }
+}
+
+
+

You can insert tokens to customize the menus:

+

{{domain3000}} is replaced by the public url required to access your project over port 80, which is useful if your corporate firewall blocks ports other than 80 and 443.

+

{{domain80}} can also be used instead of {{domain3000}} and is replaced by the public url required to access your project over port 80.

+

{{domain}} is used along with the port number (default 3000) to your service. For example:

+

"Box URL": "https://{{domain3000}}/",

+

For details about the various tokens that can be inserted see Customize Run Button.

+
+

Note

+

Static content is served over Port 80. To access dynamic content you may need to specify the appropriate Port.

+
+
+
+

Unsecure content error

+

Codio runs over a secure connection using HTTPS, therefore so does the inline preview. If your code references an external resource such as a script, font, or image, a browser error may occur indicating that there is some form of unsecure or mixed content because you are running in a mixed HTTP/HTTPS mode. This may occur when you reference something similar to the following:

+
<script src="http://code.angularjs.org/1.1.5/angular.js">
+
+
+

The error is caused by a restriction of the browser and cannot be easily modified. It is intended to protect you from insecure content.

+

To avoid this from occurring:

+
    +
  • Modify your external references to use HTTPS.

  • +
  • Modify your references to use the ‘current protocol’ by including ‘//’ without http or https, so <script src=”//code.angularjs.org/1.1.5/angular.js”>.

  • +
+

You can also download the external file to the Codio project and then reference it.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/quick-open.html b/docs/develop/develop/ide/editing/quick-open.html new file mode 100644 index 00000000..70333ea5 --- /dev/null +++ b/docs/develop/develop/ide/editing/quick-open.html @@ -0,0 +1,748 @@ + + + + + + + + + Quick Open — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Quick Open

+

The Quick Open feature allows you to open files from a dialog where you can start typing the file name and it returns matches as you type. To use the Quick Open feature, follow these steps:

+
    +
  1. Click the File tab on the menu bar and choose Open File, or use the keyboard shortcut Cmd+O (Mac) or Ctrl+O (PC/Linux).

    +Quick Open Dialog +
  2. +
  3. Start entering text in the text box at the top of the dialog to narrow the list of matches.

  4. +
  5. Select the file to open it.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/real-time-collaboration.html b/docs/develop/develop/ide/editing/real-time-collaboration.html new file mode 100644 index 00000000..281b2c43 --- /dev/null +++ b/docs/develop/develop/ide/editing/real-time-collaboration.html @@ -0,0 +1,743 @@ + + + + + + + + + Real-Time Code Collaboration — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Real-Time Code Collaboration

+

If you give other Codio users permission to access to your project, multiple users and view and edit the files simultaneously. You can see other people editing the file in real time. Your files are also saved in real time so there is no need to save them.

+

You can change full access to your project from the Project > Permissions menu, but we strongly recommend that you avoid this so you have the full benefits of collaboration on your code. If you change full access, only one person can edit the file at any one time.

+

Another approach is to use Git, where each user has their own project that can be synchronized with other projects in a remote repository such as GitHub or BitBucket.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/save-files.html b/docs/develop/develop/ide/editing/save-files.html new file mode 100644 index 00000000..5af246b4 --- /dev/null +++ b/docs/develop/develop/ide/editing/save-files.html @@ -0,0 +1,743 @@ + + + + + + + + + Save Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Save Files

+

There is generally no need to save your files as content is saved automatically. You can still save manually using the Ctrl+S|Cmd+S keyboard shortcut, but it isn’t necessary. +If you make a mistake, you can use undo (Ctrl+Z).

+

Version Control is the best possible way of managing restores and this is comprehensively supported using our Git integration.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/search-replace.html b/docs/develop/develop/ide/editing/search-replace.html new file mode 100644 index 00000000..928a8bba --- /dev/null +++ b/docs/develop/develop/ide/editing/search-replace.html @@ -0,0 +1,838 @@ + + + + + + + + + Search and Replace — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Search and Replace

+

Codio supports local and global search and replace. You can access these feature using a shortcut or from the Find menu. The shortcuts for each action are displayed in the Find menu. You can override these shortcuts in User Preferences.

+
+

Local search and replace

+

Search and replace is supported on the currently selected file. The default shortcuts are defined in the following section of User Preferences:

+
;Find.
+; Type: hotkey
+key_find = Cmd+F
+
+;Find next.
+; Type: hotkey
+key_find_next = Cmd+G
+
+;Find previous.
+; Type: hotkey
+key_find_prev = Shift+Cmd+G
+
+;Replace.
+; Type: hotkey
+key_replace = Cmd+Alt+F
+
+;Replace all.
+; Type: hotkey
+key_replace_all = Shift+Cmd+Alt+F
+
+
+
+
+

Global search and replace

+

Global search and replace are available from the Find > Find in project and Find > Replace in project menu options.

+

You can search regular expressions, ignore case, and whole word settings using the control button in the search dialog.

+
+authtoken +
+

Once the search operation has completed, all matches are shown in the Codio tab. Double-click the highlighted match to open the file in a new tab.

+
+global search dialog +
+
+

Pattern and wildcard matching (Globs)

+

When doing a search, you can specify a search pattern in the Where field. As an example, for the following project:

+
|-- lib
+|  |-- index.js
+|  |-- hello_world.js
+|-- index.html
+|-- 404.html
+|-- app.js
+`-- gruntfile.coffee
+
+
+

Use globs to search for files as follows:

+
    +
  • All files ending in .js: **/*.js. +- index.js +- hello_world.js +- app.js

  • +
  • All files ending in .html in the root (/home/codio/workspace or ~/workspace) folder: *.html +- index.html +- 404.html

  • +
  • All files in lib: lib/*.* +- index.js +- hello_world.js

  • +
  • All files ending in .html or .coffee: **/*{.html,.coffee} +- index.html +- 404.html +- gruntfile.coffee

  • +
  • All files beginning with index: **/index* +- index.js +- index.html

  • +
+

Any character that appears in a pattern, other than the special pattern characters described below, matches itself.

+
    +
  • The NULL character may not occur in a pattern.

  • +
  • A backslash escapes the following character; the escaping backslash is discarded when matching.

  • +
  • The special pattern characters must be quoted if they are to be matched literally.

  • +
+

The special pattern characters have the following meanings:

+
    +
  • * Matches any string, including the null string. When the globstar shell option is enabled, and * is used in a filename expansion context, two adjacent *s used as a single pattern will match all files and zero or more directories and subdirectories.

    +

    If followed by a /, two adjacent *s will match only directories and subdirectories.

    +
  • +
  • ? Matches any single character.

  • +
  • […] Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression; any character that sorts between those two characters, inclusive, using the current locale’s collating sequence and character set, is matched.

    +

    If the first character following the [ is a ! or a ^ then any character not enclosed is matched.

    +

    A - may be matched by including it as the first or last character in the set. A ] may be matched by including it as the first character in the set.

    +

    A character class matches any character belonging to that class. The word character class matches letters, digits, and the character _.

    +

    Within [ and ], an equivalence class can be specified using the syntax [=c=], which matches all characters with the same collation weight (as defined by the current locale) as the character c.

    +

    Within [ and ], the syntax [.symbol.] matches the collating symbol symbol.

    +
      +
    • ?(pattern-list) Matches zero or one occurrence of the given patterns.

    • +
    • *(pattern-list) Matches zero or more occurrences of the given patterns.

    • +
    • +(pattern-list) Matches one or more occurrences of the given patterns.

    • +
    • @(pattern-list) Matches one of the given patterns.

    • +
    • !(pattern-list) Matches anything except one of the given patterns.

    • +
    +
  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/share-project.html b/docs/develop/develop/ide/editing/share-project.html new file mode 100644 index 00000000..e42f5664 --- /dev/null +++ b/docs/develop/develop/ide/editing/share-project.html @@ -0,0 +1,757 @@ + + + + + + + + + Share Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Share Project

+

You can share a project if it is public (Project > Settings > General Settings > Public). To share a project or link to a project from a web page, follow these steps.

+
    +
  1. Click the Project tab on the menu bar and choose Share.

    +Share Project +
  2. +
  3. Click one of the options at the top of the dialog (Twitter, Facebook, Email, or Link) to share the project.

  4. +
  5. On the Share Your Project dialog, select the option for how you want to embed or link to your project for the IDE to render it:

    +
      +
    • Project URL - Use this URL to display the project with the active panel or opened file configuration. The URL can change depending on what the user has active.

    • +
    • Guide URL - Use this URL to display your project with your Guide automatically starting.

    • +
    • With Layout - Use this URL if you want to always use the exact panel and file configuration is currently opened. You should use this option if you want to embed it in a log post or page where the exact configuration needs to be retained.

    • +
    +
  6. +
+
+

If you prefer to paste the URL for the Project URL and With Layout options, click the link to generate it in Markdown or HTML format and then paste the code.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/editing/vscode.html b/docs/develop/develop/ide/editing/vscode.html new file mode 100644 index 00000000..987234c9 --- /dev/null +++ b/docs/develop/develop/ide/editing/vscode.html @@ -0,0 +1,783 @@ + + + + + + + + + VSCode — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

VSCode

+

You can set up your assignment to provide VSCode as the default code editor for your students.

+
+

Note

+

The Code Playback functionality will not work for code your students enter in VSCode.

+
+
+

Installing VSCode

+

Use the Tools > Install Software (more information) menu item to easily install VSCode. +After you have completed installing the software you will need to create a new stack or a new stack version to provide this for your students.

+
+
+

Opening VSCode

+

There are multiple ways to provide your students with access to the VSCode editor once you have installed the software. The following are a couple of the possibilities.

+
    +
  • Modify the Preview menu so that students can access VSCode through the menu and open it in a new browser tab.

    +
    +

    To customize the Preview button, modify this section of the .codio file:

    +
    {
    +// Preview button configuration
    +   "preview": {
    +         "Open Visual Studio": "https://{{domain4000}}/"
    +   }
    +}
    +
    +
    +
    +
  • +
  • Use guides to create a layout that automatically opens a pane containing VSCode. The example below shows a 2-Panel layout, you can create any number of panels and specify which panel should open VSCode.

    +
    +
    +
      +
    • Create a 2-Panel Layout.

    • +
    • Add a tab and for type select - “Preview”.

    • +
    • Into the Filename field paste: https://{{domain4000}}/

    • +
    +
    +Configuring the layout for VSCode +

    This is the result, a 2-Panel Layout with the VSCode editor:

    +A two panel display with VSCode as the code editor +
    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/tools/deployment.html b/docs/develop/develop/ide/tools/deployment.html new file mode 100644 index 00000000..1da67241 --- /dev/null +++ b/docs/develop/develop/ide/tools/deployment.html @@ -0,0 +1,966 @@ + + + + + + + + + IDE Tools — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Tools

+
+
+
+

Deployment

+

You do not to need to deploy when you are developing your project. Front-end code is automatically served up over Port 80. Access to back-end code (PHP, Ruby etc.) is done by accessing your Box.

+

You can deploy from the command line (Tools->Terminal menu), but Codio has a great Deployment Manager that lets you deploy all or any part of your project, with a single click ,to a custom ‘deployment target’. We support deployment to the following platforms.

+ +
+

Create/manage a target

+

The Manage Targets options are accessed via Tools > Deployment > Manage Targets menu. All Deployment dialogs will be displayed in the currently active Panel.

+

If you have not yet created any deployment targets then you will be prompted to create one.

+
+Deployment List +
+

In the Deployment Targets dialog, you can:

+
    +
  • list all defined deployment targets

  • +
  • modify existing targets

  • +
  • create new targets

  • +
+
+
+
+

Destination

+

The Destination drop down specifies the type of the target you are deploying to.

+
+

Base path field

+

You will notice that all deployment targets have a Preview Base Path field.

+
+base path +
+

It is important to complete this field for all target types involving remote servers so that the Preview option knows how to access your project once deployed.

+

For example, you might deploy to a remote server at a folder location /home/fmay/www. Accessing this application via a browser, however, depends on how you configure your remote web server.

+

So it could be http://123.456.789 or fmay.mydomain.com is the correct location.

+

Please see the Preview section for more information.

+
+
+

Public keys for remote servers

+

When you are setting up a remote server, Codio can automatically install the Codio public key on your remote server, which saves a tedious manual process.

+ +
+
+

Terminal access to remotes

+

If you are working with remote servers, you may find it useful to be able to SSH into your remote server.

+

Codio supports the ability to open an SSH terminal in a Codio tab. Click here for further details.

+
+
+

Deploying to a target

+

There are three ways to deploy projects.

+
+
+
+

Tools->Deployment->Deploy menu

+

This let’s you deploy to any of your deployment targets you created in Manage Targets. You are shown a log if any errors occur.

+
+deploy screen +
+
+
+

Right Click in the file tree

+

You can deploy an individual file or folder by right-clicking in the file tree.

+
+
+

Command Line

+

You can use the command line directly but you can also add your custom deployment actions by modifying the Run Menu.

+
+

Rsync target type

+

Rsync is a great way of working with remote servers. It behaves much the same as the SFTP deployment type but rather than deploying all files, it deploys only files that have changed.

+

You can use a password and/or a public key for authentication.

+
+rsync dialog +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Public Key Authentication

+

Codio auto-generates a public key that is uniquely associated with your user account. You can find this public key in the User Settings dialog. You should make sure that this public key is added to your remote server.

+
+
+

Protocol

+

There are two options available

+
    +
  • SSH : (recommended) uses an SSH connection to transfer

  • +
  • RSYNC Daemon : this requires you to set up an rsync daemon on the remote server. This is a more complex procedure and so should generally be avoided.

  • +
+
+
+

Specifying a Port

+

If you want to override the default SFTP port (22) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

User Name

+

You will need to supply a valid user name for your remote server regardless of the authentication method.

+
+
+

Password Authentication

+

If you are using a public key then you can leave the password field empty.

+

If you do not want to use a public key, then you will need to use a password for authentication. Simply provide the details in the Codio dialog.

+
+
+

Delete Missing Folders

+

This removes any folders from the remote server that are not present in the Codio project.

+
+

FTP target type

+

The FTP target type allows you to deploy to any FTP server. You supply the usual FTP access details.

+
+deply ftp +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Specifying a Port

+

If you want to override the default FTP port (21) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

Transfer Mode

+

FTP can operate in ‘Active’ or ‘Passive’ mode. Codio will attempt to connect in passive mode by default. If it fails, then it will automatically try active mode. If that fails then you will get an error.

+

However, if you get an error then try changing the setting to Active. This will ensure that Codio will only try to connect in active mode without a risk of confusing the target server.

+
+

SFTP target type

+

The SFTP target type allows you to deploy to any SFTP server. You can use a password and/or a public key for authentication.

+
+deply sftp +
+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+
+
+

Public Key Authentication

+

Codio auto-generates a public key that is uniquely associated with your user account. You can find this public key in the User Settings dialog. You should make sure that this public key is added to your remote server.

+
+
+

Specifying a Port

+

If you want to override the default SFTP port (22) then you can add the port number to the domain name as shown below

+

` +mydomain.com:1234 +`

+
+
+

User Name

+

You will need to supply a valid user name for your remote server regardless of the authentication method.

+
+
+

Password Authentication

+

If you are using a public key then you can leave the password field empty.

+

If you do not want to use a public key, then you will need to use a password for authentication. Simply provide the details in the Codio dialog. You can use both a public key and a password if you like.

+
+
+

Empty Destination Path

+

Be very careful when checking this box. It will brutally remove all content from specified location on the remote server before the deploy starts.

+
+

Nodejitsu target type

+

Nodejitsu is a high quality third party Node.js production platform, so we built a dedicated deployment target that makes life as easy as possible.

+

You will need to sign up for a Nodejitsu account before you use it.

+
+deploy nodejitsu +
+

Select Nodejitsu from the Destination drop down and then make sure you either provide an API Token in the highlighted field or just press the Generate button and we’ll create one for you.

+
+
+
+

Base Path

+

We recommend you set the base path field for remote servers as described here. This will be useful when using the Preview feature.

+

That’s all you will need to do. You’re now ready to deploy.

+
+

Git target type

+

The Git target type allows you to deploy to any remote Git server. You supply the usual Git access details.

+

If you prefer, you can deploy to any remote Git server using the command line. Simply access your Box Terminal. +.

+
+
+
+

Existing Remote

+

If you imported your project from a remote Git repo or used git add remote from the command line, you will see existing remotes listed in the Remote dropdown box and you can select it.

+
+
+

Adding a Remote

+

You can add a new remote by selecting Add remote … from the dropdown. You can then enter your remote details.

+
+
+

Committed Files

+

Codio will only do the equivalent of git push remote-name current-branch and so you need to have staged and committed your files first from the Command Line.

+
+

Deployment history

+

Each time you do a deploy, a history entry is created so you have a full record of deploys and who did them.

+
+deployment history +
+

If you have not selected any specific targets, then all deploys across all targets will be shown. If you select the history button for a specific target, then the history for that specific target is shown.

+
+
+

Deploying specific files & folders

+

If you are using a 3rd party hosting provider that does not support RSYNC (the recommended approach), then you can avoid Codio deploying your entire project by only deploying the files or folders that you specify.

+

Select any files and folders from the file tree and then use the right-click menu to deploy them.

+
+deploy specific files folders +
+

All defined deployment targets will be listed in the submenu. Click the target you want to deploy to.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/tools/desktopapp.html b/docs/develop/develop/ide/tools/desktopapp.html new file mode 100644 index 00000000..b9031cd7 --- /dev/null +++ b/docs/develop/develop/ide/tools/desktopapp.html @@ -0,0 +1,821 @@ + + + + + + + + + Desktop App — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Desktop App

+

The desktop app is to allow a local code workspace to synchronize with a Codio box.

+

Assignments/Projects from the Courses dashboard My Projects area can be connected.

+

A Codio account is required

+
+

Excluding files

+

Files/folders can be excluded from synchronisation by using .codioignore` file in the source project. Enter on a new line the file/folders to be excluded defining them relative to the location of he .codioignore file and defining folders with /

+

For example if the .codioignore file is located in the project workspace and you wish to exclude

+
    +
  • bin & node_modules folder

  • +
  • the file error.jade in the views folder

  • +
  • the files app.js and README.md

  • +
+

the .codioignore file will be

+
/bin
+/node_modules
+/views/error.jade
+app.js
+README.md
+
+
+
+codioignore +
+

Please note that the .codioignore file is included in the desktop app files.

+

If students wish to exclude files when pushing back to their Codio account they can do so, either by editing any existing .codioignore``file or creating the file themselves. If the teacher creates the ``.codioignore file, adding a ‘comment’ line to the top of the file to make it clear to any students what they should not change could help avoid potential problems. A line starting with # serves as a comment

+

Click here to go to the download page and install to your local machine

+
+
+

Starting the app

+

When first starting the app you need to choose the server to connect to. In most cases this will be https://codio.com but if you are in the United Kingdom/Europe, it maybe https://codio.co.uk.

+
+desktop server +
+

You can check by logging into your Codio account in your browser and you will see the server domain noted there

+

Having selected the server log in using your codio credentials.

+
+

Note

+

that if you usually access Codio through an LMS, you may not have a Codio account password set. If that is the case, go to the online login screen where you can go through the lost password process to define a Codio account password. We would then recommend you log into your account online and change this password to one you will remember in the future. Setting a Codio account password will not effect or change how you currently access Codio via your LMS

+
+
+
+

Accessing and connecting to your online content

+
+desktop options +
+

When logged in you first see a list of all courses you are a member of and can access your content either from Courses or My Projects area.

+

To pull the code, click on your course or My Projects

+
+desktop connect +
+

and then select either:

+
    +
  • connect - to pull all the code from the selected assignment to a folder on your PC that you define.

  • +
+

desktop workspace.

+
    +
  • Open in Codio - to open the assignment in your Codio account

  • +
+

When connecting, browse to a folder on your PC where you would like to store the code and pull the content

+
+
+

Managing your offline content

+

When you have connected you can then push/pull/open the assignment in Codio and manage the local workspace folder settings.

+
+desktop connected +
+

1. Click the pull button to pull content in from your Codio account. Note Any files you already have stored locally will be overwritten

+

2. Click the push button to push the content from your local workspace folder back to your Codio account. Note This will overwrite the project/assignment in your Codio account

+

3. Click the Open in Codio button to open your assignment in a browser tab. This can be useful if you wish to compare what you have stored locally to what you last pulled from your Codio account

+

4. Click the folder icon to manage your local workspace folder settings

+
+
+

Local workspace folder settings

+
+desktop workspace settings +
+

1. Click the Open the folder button to open the folder containing your local files

+

2. Click the Change folder button to change the folder storing your local files. Note the content of the previous folder will not be automatically copied or transferred to the newly selected folder. If you wish to do this, you should return to the previous screen and pull to that new folder

+

3. Click the Disconnect button to disconnect the assignment from your Codio account. You will be returned to the previous screen where you can then +connect the assignment again if you wish

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/tools/ghapi.html b/docs/develop/develop/ide/tools/ghapi.html new file mode 100644 index 00000000..b10baaaf --- /dev/null +++ b/docs/develop/develop/ide/tools/ghapi.html @@ -0,0 +1,926 @@ + + + + + + + + + Git Hub API — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Git Hub API

+

The Git Hub API can be used with Git Hub Actions to automate the publication of assignments.

+

You are able to create your assignments in Codio, connect the box to your GH repo and when merging your branch to master will be able to automatically publish the Codio assignment.

+
+

Set up GitHub API Integration

+

Create your API integration in the Organization->Integrations area. This is only available to users with +Admin rights.

+
+api integration +
+

The name of the integration is added to the version history record. There is no limit to the number you can create so you can use the ID’s in your individual GH repo or use in your GH account to apply to all repos

+
+
+

API Integration information

+

Click on the created integration to view the Client and Secret ID’s where you can copy to clipboard to add into your GH account

+
+api integration +
+

The secret ID can be regenerated if required to manage/control access to publishing the codio assignment.

+
+
+

Adding ID’s to GitHub account

+

In your repo go to Settings -> Secrets and create Client ID and Secret ID copying in from your Codio integration.

+
+GH secret +
+

To create secrets for your organization’s repo (these will apply to all repos in the account and be available for all collaborators), see encrypted secrets for an organization. To create these for an individual repo,, click on New repository secret and create your secret keys.

+

We recommend you that you use the words Client or Secret when you name each key to identify which one it is and also use the name to indicate if the key is for an individual repository or for all repos in an organization.

+
+
+

Implementing workflow actions

+

From your repository on GitHub or within your project, create a new file in the .github/workflows directory with the extension .yml and configure +for use.

+

See Quickstart for GitHub actions

+
+

Example .yml file for publishing a project to an assignment

+
name: codio-publish
+# Run this workflow every time a new commit pushed to your repository branch noted below
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+
+  build:
+  # Set the type of machine to run on - do not change this. Any warnings you may see in workflow actions can be ignored
+    runs-on: ubuntu-latest
+    steps:
+    # Checks out a copy of your repository on the ubuntu-latest machine
+      - name: Checkout
+        uses: actions/checkout@v1
+
+      - name: Cleanup
+     # removes the following files/folders when publishing
+        run: rm -rf README.md
+
+      - name: Publish to Codio
+        uses: codio/codio-assignment-publish-action@master
+        with:
+          # Use the ID's from the secrets below
+          client-id: ${{ secrets.CODIO_PRODUCTION_CLIENT_ID }}
+          secret-id: ${{ secrets.CODIO_PRODUCTION_SECRET_ID }}
+          dir: ./
+          course-id: d5acfd16bb506756595cef3399e1d4
+          assignment-id: 3b52656756565656cd19a4b869b8
+          # You can also use course-name or assignment-name to reference the course/assignment if you prefer
+          # course-name: your course name
+          # assignment-name: your assignment name
+          changelog: ${{ github.event.head_commit.message }}
+          # Set the domain you are working on - codio.com or codio.co.uk
+          domain: codio.com
+
+
+

The course/assignment id’s are found from the URL in your browser when opening the assignment when on the Overview tab. The assignments need to be published to get this information whether using the course/assignment id’s or the course/assignment names.

+
+Course/assignment id +
+
+
+

Publishing projects into multiple assignments

+

If you have a large project, you can use the same methodology to publish the project into multiple assignments in as many different modules as you required.

+
+

Mapping your project structure into the individual assignments

+

From your repository on GitHub or within your project, create a new folder in the .github/workflows directory and within that create individual .yml files for each of the assignments you wish to publish the project into, defining the ‘assignment’, ‘section’ and ‘paths’. It is these files that define what Chapters/Sections/Files from the main project are published into individual assignments

+
+
+

Example .yml file mapping section from project into individual assignments:

+
+Guides set up +
+

Based on the above image, to split the project into 3 separate assignments requires 3 .yml files in the mapping folder set above

+

To publish Chapter 1, Section 1.1 into an assignment:

+
# the id of assignment 1
+- assignment: 617c4f1cf9dcb8764hjk97100a980a09
+# or use the assignment name of assignment 1
+# - assignmentName: your assignment name
+# the section from guides, where both the Chapter and Section names are set in Guides
+  section:  ["Chapter 1", "Section 1.1"]
+# to include all files contained in the folder Section 1.1
+  paths: ['Section 1.1/**']
+
+
+

To publish Chapter 2, Section 2.1 and Chapter 2, Section 2.2 into an assignment:

+
# the id of assignment 2
+- assignment: 36f5f6d99f69a7dc65f5ce8d619e8494
+# or use the assignment name of assignment 2
+# - assignmentName: your assignment name
+ section:  ["Chapter 2", "Section 2.1"]
+  paths: ['Section 2.1/**']
+
+# to include another section from guides in the assignment
+- assignment: 36f5f6d99f69a7dc65f5ce8d619e8494
+# or use the assignment name of assignment 2
+# - assignmentName: your assignment name
+  section:  ["Chapter 2", "Section 2.2"]
+
+  paths: ['Section 2.2/**']
+
+
+

To publish Chapter 3, Section 3.1 into an assignment:

+
- assignment: 399098453265fb2c3eca360db6f5e462f
+# or use the assignment name of assignment 3
+# - assignmentName: your assignment name 3
+  section:  ["Chapter 3", "Section 3.1"]
+  # will show all files set to be visible whether within a folder shown for the student or in the workspace
+  paths: ['**']
+
+
+
+
+

Example .yml workflow actions file for publishing into multiple assignments:

+
name: codio-publish
+# Run this workflow every time a new commit pushed to your repository branch noted below
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+
+  build:
+  # Set the type of machine to run on - do not change this. Any warnings you may see in workflow actions can be ignored
+    runs-on: ubuntu-latest
+    steps:
+    # Checks out a copy of your repository on the ubuntu-latest machine
+      - name: Checkout
+        uses: actions/checkout@v1
+
+      - name: Cleanup
+     # removes the following files/folders when publishing
+        run: rm -rf README.md
+
+      - name: Publish to Codio
+        uses: codio/codio-assignment-publish-action@master
+        with:
+        # Use the ID's from the secrets below
+          client-id: ${{ secrets.CODIO_PRODUCTION_CLIENT_ID }}
+          secret-id: ${{ secrets.CODIO_PRODUCTION_SECRET_ID }}
+          dir: ./
+          course-id: d5acfd16bb506756595cef3399e1
+        # You can also use course-name or assignment-name to reference the course
+          # course-name: your course name
+          changelog: ${{ github.event.head_commit.message }}
+          # the location of your yaml mapping files
+          yml: ./.github/yaml_map
+          # Set the domain you are working on - codio.com or codio.co.uk
+          domain: codio.com
+
+
+
+

Note

+

The ‘assignment-id’ or ‘assignmentName’ field is not required when publishing to multiple assignments. The mapping of the content from the project to the individual assignments is managed by the files in the ‘yml’ location

+
+
+
+
+
+

Working with GH API

+

The basic premise is that when updating your Codio assignment, you connect to your GH repo and create a new branch. Make your required changes and push to your repo. +When you then merge your branch to the master branch, the GH workflow runs and publishes your Codio assignment. Progress/errors can be reviewed from the Actions area in your repo +It is recommended when you merge, that you select the option Squash and Merge as you can combine all your merge request’s commits into one and retain a clean history.

+
+
+

Working with GH API in staging

+

Your .yml file is commonly set up to execute against merges into the master branch but can be changed to execute when other branches merged and the codio assignment to be updated can be managed by reviewing/changing the course/assignment ids

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/tools/ssh.html b/docs/develop/develop/ide/tools/ssh.html new file mode 100644 index 00000000..6ad79db2 --- /dev/null +++ b/docs/develop/develop/ide/tools/ssh.html @@ -0,0 +1,799 @@ + + + + + + + + + Remote SSH Terminal Access — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Remote SSH Terminal Access

+

Important : if you are looking for information on how to connect to your project ‘Box’ using the terminal/console window, then please read about Boxes.

+

Codio provides the ability to connect to remote servers via SSH. You can open multiple connections and manage connections through the SSH Connection Manager.

+

A Quick Connect option lets you access remote servers on an ad hoc basis. The SSH Connection Manager lets you store connections for quick access later.

+

You can do the same things you can do in a regular terminal window, including running text editors like Nano etc.

+
+

Copy & Paste operations

+

Behavior varies between Macs and other operating systems. Using the right-click menu should work on all systems.

+
+

Mac

+

Copy and paste both works as expected with cmd+c and cmd+v.

+
+
+

Windows, Linux

+

Pasting is done as expected with ctrl+v but copying (ctrl+c) cannot be done as it conflicts with the kill process command, so you should use the right-click menu.

+
+
+
+

SSH connection manager

+

You can manage your SSH connections by going to the Tools > SSH > Connection Manager menu item. The Connection Manager lists all previously created connections, which you can then connect to or edit.

+

SSH Connection list

+
+
+

Creating and Editing Connections

+

Press the Create New button to create a new connection or the pencil icon to edit an existing connection.

+

You enter the remote server credentials : user name, hostname and optionally port. You can also specify a friendly name that will appear in the connections list.

+
+ssh connection edit +
+
+
+

Public Keys

+

If you want to add your Codio public key to the remote server, press the key icon in the main Connection Manager listing. This saves you from having to upload a public key manually and means you won’t need to enter a password to authenticate.

+

If you do want to add your public key manually, please refer to the Codio public key documentation.

+
+
+

Making a connection

+

To make a connection, you click on the leftmost icon, which opens the connection in a new tab.

+
+
+

Quick connect

+

The Quick Connect Option (Tools > SSH > Quick Connect) lets you access remote servers on an ad hoc basis. You just enter the remote server credentials : user name, hostname and optionally port.

+

Specify a friendly name if you want to save the connection details.

+
+ssh paramaters +
+

If you do not want to install a public key remotely, then Codio will connect to the remote server, which will prompt you for a password.

+
+
+

Connect

+

When you press Connect, a tab will open up in the current panel and off you go. The connection details will not be saved.

+
+
+

Connect & Save

+

This connects but also saves the connection details to the SSH Connection Manager.

+
+
+

Public Keys

+

If you want to add your Codio public key to the remote server, then you should Connect & Save. Then go to the SSH Connection Manager and press the public key button as described above.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/add-delete-files.html b/docs/develop/develop/ide/workspace/add-delete-files.html new file mode 100644 index 00000000..5d7ef4ee --- /dev/null +++ b/docs/develop/develop/ide/workspace/add-delete-files.html @@ -0,0 +1,781 @@ + + + + + + + + + Add and Delete Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add and Delete Files

+

You can create and delete files in your project using the File tab +on the menu bar or from the context menu in the Filetree.

+
+

Add a file

+

To add a new file, follow these steps:

+
    +
  1. Navigate to the folder in your project where you want to create the +file.

  2. +
  3. Click the File tab on the menu bar and choose New File, or +right-click the folder in the Filetree and choose New File from +the context menu.

  4. +
  5. On the Create New File dialog, enter the File Name and +extension.

  6. +
  7. Click OK.

  8. +
+
+
+

Copy a file

+

You can also copy a file to another location in the project.

+
    +
  1. Right-click the file in the Filetree and choose Copy from the +context menu.

  2. +
  3. Navigate to the location in the project where you want to copy it, +right-click and choose Paste.

  4. +
+
+
+

Move files

+

You can drag and drop a file to another location in the Filetree.

+
+
+

Delete a file

+

To delete a file, use one of the following methods:

+
    +
  • Right-click the file in the Filetree and choose Delete from the +context menu.

  • +
  • Use a keyboard shortcut fn+backspace (Mac) or shift+del +(Windows or Linux)

  • +
+

Warning - Deleting a file cannot be undone.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/add-delete-folders.html b/docs/develop/develop/ide/workspace/add-delete-folders.html new file mode 100644 index 00000000..06520eef --- /dev/null +++ b/docs/develop/develop/ide/workspace/add-delete-folders.html @@ -0,0 +1,782 @@ + + + + + + + + + Add and Delete Folders — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add and Delete Folders

+

You can create and delete folders in your project using the File tab +on the menu bar or from the context menu in the Filetree.

+
+

Add a folder

+

To add a new folder, follow these steps:

+
    +
  1. Navigate to the location in your project where you want to create the +folder.

  2. +
  3. Click the File tab on the menu bar and choose New Folder, or +right-click in the Filetree and choose New Folder from the +context menu.

  4. +
  5. On the Create New Folder dialog, enter the Folder Name and click +OK.

  6. +
+
+
+

Copy a folder

+

You can also copy a folder to another location in the project.

+
    +
  1. Right-click the folder in the Filetree and choose Copy from the +context menu.

  2. +
  3. Navigate to the location in the project where you want to copy it, +right-click and choose Paste.

  4. +
+

The folder and its contents are copied to the new location.

+
+
+

Move a folder

+

You can drag and drop a folder in the Filetree to move it to another +location.

+
+
+

Delete a folder

+

To delete a folder and its content, use one of the following methods:

+
    +
  • Right-click the folder in the Filetree and choose Delete from the +context menu.

  • +
  • Use a keyboard shortcut fn+backspace (Mac) or shift+del +(Windows or Linux)

  • +
+

Warning - Deleting a folder cannot be undone.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/open-file.html b/docs/develop/develop/ide/workspace/open-file.html new file mode 100644 index 00000000..8297ac9f --- /dev/null +++ b/docs/develop/develop/ide/workspace/open-file.html @@ -0,0 +1,742 @@ + + + + + + + + + Open a File — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Open a File

+

To open a file, simply navigate to the file and select it in the left Filetree. When you open a file, it appears in a tab in the currently active Panel.

+

Codio applies syntax highlighting based on the file type, which is displayed in the lower status bar. If you want to change the syntax highlighting to another language format, click the file type in the lower right corner and choose another language from the list.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/panels.html b/docs/develop/develop/ide/workspace/panels.html new file mode 100644 index 00000000..82761622 --- /dev/null +++ b/docs/develop/develop/ide/workspace/panels.html @@ -0,0 +1,777 @@ + + + + + + + + + Panels, Tabs, and Layouts — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Panels, Tabs, and Layouts

+

The Codio IDE gives you complete control over your project layout using panels, tabs, and layouts.

+
+

Panels

+

You can arrange your panels using the View > Panels menu options or shortcuts. Whenever you exit the project, its precise panel configuration is saved and reloaded when you open it again.

+

If you have multiple panels in your layout, click in a panel to bring it into focus (white border around it).

+

If you want to open a file in a different panel, click in the panel where you want to open it, and then select the file in the Filetree.

+

To close a panel, click in the panel and then click View > Panels > Close. You can also use the shortcut keys Cmd+Alt+C (Mac) and Ctrl+Alt+C (PC/Linux).

+
+
+

Tabs

+

Whenever you open a file, it opens in a new tab. You can have multiple tabs open in any panel. You can also drag tabs within a panel and to other panels.

+

The Filetree is a tab within a panel. You can move it to another panel, close it, and re-open it. To reopen it, click View > Filetree menu bar.

+

You can cycle between tabs in a panel using the keyboard shortcuts:

+
    +
  • Alt+Shift+. - takes you to the previous tab.

  • +
  • Alt+Shift+. - takes you to the next tab.

  • +
+

You can also customize these shortcuts in User Preferences:

+
    +
  • tab_switch_left

  • +
  • tab_switch_right

  • +
+

To expand a tab to full screen mode, press F11 on your keyboard. To reduce the size, press F11 again.

+
+

Note

+

Some Mac users may find that F11 is blocked. You can easily modify the keyboard shortcut in User Preferences.

+
+
+
+

Layouts

+

You can choose the layout of your workspace from the View > Layouts menu:

+
    +
  • Default - The default layout includes two panels layed out horizontally. To reset your layout to the default, click View > Layouts > Default. You can also use the shortcut keys Cmd+Alt+R (Mac) and Ctrl+Alt+R (PC/Linux).

  • +
  • Split Vertical - Splits the selected panel by drawing a vertical line down the middle, so you end up with two panels side-by-side. You can also use the shortcut keys Cmd+Alt+V (Mac) and Ctrl+Alt+V (PC/Linux).

  • +
  • Split Horizontal - Splits the selected panel by drawing a horizontal line across the middle, so you end up with one panel on top of the new panel. You can also use the shortcut keys Cmd+Alt+H (Mac) and Ctrl+Alt+H (PC/Linux).

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/upload-download-files.html b/docs/develop/develop/ide/workspace/upload-download-files.html new file mode 100644 index 00000000..a4257b81 --- /dev/null +++ b/docs/develop/develop/ide/workspace/upload-download-files.html @@ -0,0 +1,777 @@ + + + + + + + + + Upload and Download Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Upload and Download Files

+

You can upload files to your project, and download them to your local +computer.

+
+

Upload a file

+

To upload a file, follow these steps:

+
    +
  1. Navigate to the folder where you want to upload the file.

  2. +
  3. Click the File tab in the menu bar and choose Upload, or +right-click the folder and choose Upload from the context menu.

  4. +
+
+Upload +
+
    +
  1. On the Upload Files dialog, use one of the following methods to +upload the file:

  2. +
+
    +
  • Drag and drop the files from your desktop or File Explorer into the +dialog box and click Close.

  • +
  • Click Browse for Files, select the files to upload, and then +click Close.

  • +
  • Click Browse for Files from Folder, navigate to the folder and +select it, and then click Close.

  • +
+

Important: If you select Browse for Files from Folder, only the +files in the main folder are uploaded. You must manually upload one +folder at a time for multiple folders.

+
+
+

Download files

+

To download individual files from your project, right-click the file in +the Filetree and choose Download.

+
+Download File +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/ide/workspace/workspace.html b/docs/develop/develop/ide/workspace/workspace.html new file mode 100644 index 00000000..18920c7f --- /dev/null +++ b/docs/develop/develop/ide/workspace/workspace.html @@ -0,0 +1,768 @@ + + + + + + + + + IDE Workspace — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

IDE Workspace

+
+
+

The Codio IDE is a web-based, easy to use workspace when you are learning to code.

+

Review the following common tasks to get you started using the workspace:

+ +

When you open up a project for the first time in the IDE, the readme.md file in the root (/home/codio/workspace or ~/workspace) of the project is displayed in a tab in markdown. When you open the project again, it opens as you last left it with the same files and tabs. Whichever file was open in front is opened again.

+
+Readme.md File +
+

You can also select the README.md file in the Filetree. You can switch +between Preview, Code, or Splitview in the lower right +corner.

+

Subsequent times you see the project as you last left it with the files and tabs the same and whatever file was open in front will be open again.

+

The readme.md file should be written in markdown

+
+

Exit the IDE

+

You can exit the IDE and return to the Dashboard using one of the following methods:

+
    +
  • Click the Project tab on the menu bar and choose Exit.

  • +
  • Click the Gravatar or your user name in the menu bar.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/packs/create-starter-pack.html b/docs/develop/develop/packs/create-starter-pack.html new file mode 100644 index 00000000..d4984fce --- /dev/null +++ b/docs/develop/develop/packs/create-starter-pack.html @@ -0,0 +1,777 @@ + + + + + + + + + Create Starter Pack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create Starter Pack

+

You can create your own Starter Pack and upload it for others to use. Follow these steps to create a Starter Pack:

+
    +
  1. In the navigation pane, click Starter Packs.

  2. +
  3. On the Packs page, click New Pack.

  4. +
  5. Click the Workspace Source. The following options are available:

    +
      +
    • Codio - Use a Codio project that contains your code.

    • +
    • Git - Specify a Git repo; use the HTTPS URL to the repository.

    • +
    • Mercurial - Specify a Mercurial repo; use the HTTPS URL to the repository.

    • +
    +
    +

    Note

    +

    When you specify a Git or Mercurial repo, the repos is pulled into the project each time someone uses your Starter Pack.

    +
    +
  6. +
  7. Specify the Stack to be used. If you only need a base Ubuntu Box, you do not need to specify a Stack.

    +
    +

    Note

    +

    A Starter Pack is simply a Codio Stack and code workspace. If your Starter Pack is based on a project that has had the Box modified (additional Box components installed, npm global install etc.), these are not present in the project created from the Starter Pack.

    +
    +
  8. +
  9. Enter a Name and Description, and optionally an Image and Tags that allow searchability.

  10. +
  11. Specify the Visibility of the Starter Pack. By default, a Starter Pack is private to your account until you make it public, at which point it is displayed in the Popular and All pages where all Codio users can access it.

  12. +
+
+
+

Note

+

The organization owner can disable the ability for you to create public starter packs. See Enable or Disable Public/Private Settings.

+
+
+

Important

+

Do not make your Starter Pack public unless you have fully tested it.

+
+
+
    +
  1. Click Create.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/packs/packs.html b/docs/develop/develop/packs/packs.html new file mode 100644 index 00000000..c2cf80f6 --- /dev/null +++ b/docs/develop/develop/packs/packs.html @@ -0,0 +1,763 @@ + + + + + + + + + Starter Packs — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Starter Packs

+
+
+

Starter Packs offer an easy way to get started using templates of projects that include:

+
    +
  • A base Ubuntu operating system.

  • +
  • A Stack which includes base software dependencies such as databases, languages and other system components (optional).

  • +
  • Any code present in your project.

  • +
+

Using Starter Packs, you can organize and share your own packs, or use Codio’s certified packs. If you want additional Starter Packs, you can easily create your own or you can submit a request for Codio to add one for you. Simply email us at help@codio.com with full details and we’ll try to get it added for you.

+

Follow these steps to view and use a Starter Pack:

+
    +
  1. In the navigation pane, click Starter Packs.

  2. +
  3. Click the Certified tab and search for the technology you want to use.

    +Certified Starter Packs +
  4. +
  5. Click the Starter Pack and view the full details about the pack.

    +Starter Pack Details +
  6. +
  7. Click Use Pack to open the Projects > Create page.

    +

    If you want to create a new Starter Pack, click New Pack. See Create Starter Pack for more information.

    +
  8. +
  9. Optionally, change the Name or Description and then click Create.

  10. +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/packs/starter-pack-guidelines.html b/docs/develop/develop/packs/starter-pack-guidelines.html new file mode 100644 index 00000000..e11ece13 --- /dev/null +++ b/docs/develop/develop/packs/starter-pack-guidelines.html @@ -0,0 +1,809 @@ + + + + + + + + + Starter Pack Guidelines — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Starter Pack Guidelines

+

The following guidelines may help you When creating a Starter Pack.

+
+

Stack

+

When you create a Starter Pack, you should first create a new project from a stack that meets your requirements. You can also use the Base Stack and then install your own components.

+
+
+

.codio file

+

Create a .codio file in the root (/home/codio/workspace or ~/workspace) of your project so you can easily run common terminal commands and preview the code.

+

To enable your project to preview inside a Codio tab, you must configure the preview to run over https. We recommend this as being the default behavior as it will run both inside Codio and in a new browser tab. You should configure any services to run on any port between 9500 and 9000, depending on the server technology being used.

+

The following .codio file is typical:

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+  "commands": {
+        "Start Express Server": "npm start"
+  },
+
+// Preview button configuration
+  "preview": {
+        "Preview": "https://{{domain}}:9500/"
+  }
+}
+
+
+
+
+

Create a new stack

+

If you have installed or configured any components that are not a part of the code workspace, then you may want to create a special Stack that your Starter Pack uses. If you don’t do this, then Projects that are created from the Starter Pack will need to have these modifications performed after Project creation. This might be an npm install if you are using Node.

+
+
+

Use GitHub

+

Although you can use Codio as the source for your Starter Pack, we recommend pushing your Project to a Git remote. This gives better version control over time. The creation process is also somewhat faster.

+

When you create the Starter Pack, you can specify the Git url.

+
+
+

Long Description

+

You should include a full description of your Starter Pack that appears when someone clicks on it within the Starter Packs listing. Check out some of Codio Certified Pack long descriptions.

+
+
+

README.md file

+

You should create a README.md file in the root (/home/codio/workspace or ~/workspace) of your project that displays helpful information the user can see when they open the project.

+

Below is a template that can be used:

+
# Title
+Put the name of your Pack here containing the primary technology or technologies with a version number, along with a short description.
+
+## Using the Pack
+Describe how the user should get started. Point to your `.codio` menu options if you have created any.
+
+## How the Pack was prepared
+It can be helpful to others or even to you later on to describe how you built the Pack. What we often do is to include a set of instructions that can be pasted into a Bash script to recreate the Pack with a single command.
+
+**Example** : This Starter Pack was built on the Node+Grunt+MongoDB Stack. We than ran the following commands before creating the Pack.
+
+npm install -g express
+npm install -g express-generator
+express .
+npm install
+
+## Useful Links
+
+- [Express site](http://expressjs.com/)
+- [Node](http://nodejs.org/)
+- [npm](https://www.npmjs.org/)
+- [Grunt](http://gruntjs.com/)
+- [MongoDB](https://www.mongodb.org)
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/packs/update-starter-pack.html b/docs/develop/develop/packs/update-starter-pack.html new file mode 100644 index 00000000..e92eff41 --- /dev/null +++ b/docs/develop/develop/packs/update-starter-pack.html @@ -0,0 +1,765 @@ + + + + + + + + + Update a Starter Pack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Update a Starter Pack

+

When you edit your Starter Pack, the Source field is enabled if you are the owner of the source project and the project has not been deleted. If someone else owns the project or if you have deleted the underlying project, you can still edit the project data fields below the Source field and the original project that was used will be retained.

+

If you need to make changes to your Starter Pack, follow these steps:

+
    +
  1. Create a new project from your Starter Pack or locate an existing project where you want to use your Starter Pack.

  2. +
  3. Locate the Starter Pack and click Edit.

  4. +
  5. In the Source field, browse to the correctly configured project.

  6. +
  7. Click Create in the lower portion of the page.

  8. +
+
+

Note

+

Codio does not support versioning for Starter Packs.

+
+
+

Deleting a Starter Pack

+

To delete a Starter Pack, follow these steps:

+
    +
  1. On the My Packs page, click the Starter Pack to open it.

  2. +
  3. Click Remove.

  4. +
  5. On the confirmation dialog, click Yes to confirm the delete.

  6. +
+
+

Note

+

Any projects that were created from a Starter Pack will not be impacted.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/access-projects.html b/docs/develop/develop/projects/access-projects.html new file mode 100644 index 00000000..b17851a8 --- /dev/null +++ b/docs/develop/develop/projects/access-projects.html @@ -0,0 +1,794 @@ + + + + + + + + + Access Projects — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Access Projects

+

You access your projects from My Projects in the left navigation pane. The Projects page shows all of your coding projects and those projects that have been shared with you.

+

If a project has been shared with you, you can view the projects from the Shared with me page on the Projects dashboard.

+Shared Project +
+

Access another user’s project

+

If you know the user name of another Codio user, you can enter the URL for their account (https://codio.com/username) and view their Project dashboard, where all of their public projects will be displayed. You can click the project to load it into the IDE and copy it into your account (you cannot edit another user’s project). See Copying a Project for more information.

+

You cannot edit another user’s project but you can copy a project into your own account.

+
+
+

Open a project

+

To open a project in the IDE, simply click the project name.

+
+
+

Access project settings

+

Use one of the following methods to access your project settings:

+
    +
  • Open the project and click the Settings (gear) icon.

  • +
  • Open the project, click the Project tab and choose Settings on the menu bar.

  • +
+
+
+

Filter projects

+

You can filter how the projects are displayed on the Project page by name or most recently accessed. Click the filter drop-down and choose Name or Last Accessed.

+
+
+

Search projects

+

To search for a specific project, enter the name in the Search text box. The file list dynamically filters the projects as you enter characters.

+

Codio also supports advanced search capabilities which use search tokens to narrow your search criteria. The following search tokens are supported:

+
    +
  • Tokens with parameters allow you to type the search criteria after the colon delimiter:

    +
      +
    • name: search the project name

    • +
    • desc: search the project description

    • +
    • owner: search the project owner

    • +
    • org: search for an organization name

    • +
    • begin: search for a class start date (Education feature)

    • +
    • end: search for a class end date (Education feature)

    • +
    +
  • +
  • Tokens without parameters can be used simply by adding a space after them if you have anything else to enter in the search line:

    +
      +
    • my: show only projects owned by me

    • +
    • shared: show only projects that are shared with me

    • +
    • public: show only my public projects

    • +
    • private: show only my private projects

    • +
    +
  • +
+

For example:

+
    +
  • public: desc:javascript searches your public projects where ‘javascript’ appears in the project description.

  • +
  • owner:superman javascript searches projects owned by the user ‘superman’’ where ‘javascript’ appears in the project name or description.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/copy-project.html b/docs/develop/develop/projects/copy-project.html new file mode 100644 index 00000000..9afc4cea --- /dev/null +++ b/docs/develop/develop/projects/copy-project.html @@ -0,0 +1,756 @@ + + + + + + + + + Copy a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Copy a Project

+

You can copy any third-party public project into your account. To copy a project, follow these steps:

+
    +
  1. Click the Project tab and choose Create Copy.

  2. +
  3. On the Create Copy dialog, click the Clone Options button for the action you want to perform:

    +
      +
    • Clone Only Project - Copies only the workspace files and folders.

      +Copied Project +
    • +
    • Clone Only Box - Copies only the stack into an empty project.

      +Clone Box +
    • +
    • Clone Box & Project - Copies both the workspace and files, and the stack.

    • +
    +
  4. +
  5. Click Continue to create the copy of the project in your account.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/create-import-project.html b/docs/develop/develop/projects/create-import-project.html new file mode 100644 index 00000000..a0694008 --- /dev/null +++ b/docs/develop/develop/projects/create-import-project.html @@ -0,0 +1,772 @@ + + + + + + + + + Create or Import a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create or Import a Project

+

You can create a new project or import a project from the Projects page by following the relevant procedure.

+

Follow these steps:

+
    +
  1. Click My Projects in the navigation pane and click New Project.

    +Create Project +
  2. +
  3. Select one of the available options:

  4. +
+
+
    +
  • Empty with Stack - Create a new project selecting the Stack to use either from those shown or ‘browse for more’

  • +
  • Copy Project - Create a new project by copying one of your other projects. If you choose this option, browse to the project to Copy From.

  • +
  • Starter Pack - Create a project using one of our pre-configured Starter Packs as a starting point. This option is a combination of a Stack, a populated code workspace and in many cases a guide containing instructional material.

  • +
  • Import - Create a project by importing it from Git or from a Zip file of a Codio project. If you choose this option, browse to select a Stack and choose the Source from the drop-down list.

  • +
+
+

Projects created from a template include an explanatory README.md file that provides useful information to help you get started. The template (with the exception of Empty Stack) also includes a pre-configured .codio menu setup with basic actions the selected project requires. If you want to re-configure the .codio menu file, see Customizable Run Menu for more information.

+
+

Because you have sudo level privileges, you can also customize any stack from the command line. See Stacks to learn how to create and manage your own software configuration templates.

+
+
    +
  1. Enter a Name and Description for your project. This is the information that is displayed in your projects list.

  2. +
  3. Select the visibility of the project (Private or Public). By default, all projects are created as private and are only accessible to you (in My Projects, a padlock icon is displayed next to all private projects.

  4. +
+
+

Note

+

If enabled by your organization owner, you can create public projects but these are accessible by any Codio user. See Public and Private Settings for more information.

+

If your project is private, you can assign read, write, or full admin permissions (ability for others to access the box from the terminal) to other users from the Project > Permissions menu in the IDE.

+
+
    +
  1. Modify the Select gigabox value if your project will require more memory. See Gigaboxes for more information on Gigaboxes.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/export-project.html b/docs/develop/develop/projects/export-project.html new file mode 100644 index 00000000..db1f1360 --- /dev/null +++ b/docs/develop/develop/projects/export-project.html @@ -0,0 +1,751 @@ + + + + + + + + + Export a Project — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Export a Project

+

You can export a project from the Project tab on the menu bar or +using the context menu in the Filetree. Use one of the following methods +to export a project:

+
    +
  • Select the top-level folder in the Filetree, and then click the +Project tab on the menu bar and choose Export as Zip.

  • +
  • Right-click the folder and choose Export as Zip in the context +menu.

  • +
  • Click the Project tab on the menu bar and choose the Project Settings +page then click Export in the lower right corner.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/project-permissions.html b/docs/develop/develop/projects/project-permissions.html new file mode 100644 index 00000000..ed90c643 --- /dev/null +++ b/docs/develop/develop/projects/project-permissions.html @@ -0,0 +1,768 @@ + + + + + + + + + Project Permissions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Permissions

+

When a project is created, you can choose to make it private or public. By default, the following rules apply to project permissions:

+
    +
  • Anyone can view and copy a public project but cannot edit it.

  • +
  • No one but the project owner can view a private project.

  • +
+

To change the permissions on a project, follow these steps:

+
    +
  1. Click the Permissions tab and choose Project.

    +Project Permissions +
  2. +
  3. Select the permission level next to the user’s name:

    +
      +
    • Read - User can only view the project.

    • +
    • Write - User can edit the project.

    • +
    • Admin - User can access the terminal and the deployment screens. Caution should be used when assigning a user Admin permission because they have full access to keys and any other private data that might be stored on the box.

    • +
    +
  4. +
+
+

Add or remove a user

+

To add a user to a box, follow these steps:

+
    +
  1. Enter the user name in the Search text box.

  2. +
  3. Select it and click Add.

  4. +
  5. Assign the permission level to the user.

  6. +
+

To remove a user from a box, click the X button.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/project-settings.html b/docs/develop/develop/projects/project-settings.html new file mode 100644 index 00000000..da86fb0b --- /dev/null +++ b/docs/develop/develop/projects/project-settings.html @@ -0,0 +1,764 @@ + + + + + + + + + Project Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Settings

+

The Settings page within a project includes various options for specifying settings related to the project, including:

+
    +
  • Project Name and Description

  • +
  • Public or Private Project

  • +
  • Allow Box Cloning (payment required)

  • +
  • Always-On Box (see Always on Boxes)

  • +
  • Allow Private Static Preview. See Preview for more information. This setting is only available from Project > Settings.

  • +
  • Protect Dynamic Ports. Enable to restrict preview to the owner of the box; disable to allow preview of the box to anyone who knows the box url. This setting is only available from Project > Settings.

  • +
  • Stack Settings - specify current stack and version used in your project.

  • +
  • Forwarding Settings - enable SSH forwarding. See Access Codio Box via SSH for more information.

  • +
  • Gigaboxes Settings - set this to a larger size if you have a memory intensive project. You must first request a larger box for your organization. Contact help@codio.com to initiate this discussion. If you add your project to a course as an assignment, as you publish your assignment, the Propagate gigabox settings to the assignment settings option on the publish assignment dialog will show. By default it is enabled but you can disable it if you choose.

  • +
+Publish Dialog +

You can also perform the following tasks from the project settings:

+
    +
  • Delete your project.

  • +
  • Export the project as a Zip file.

  • +
+

You can access the project settings using one of the following methods:

+
    +
  • Click the Project tab on the menu bar and choose Settings.

  • +
  • In the Dashboard, click the Open Settings icon (gear) from the My Projects list.

  • +
+Project Settings +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/projects/projects.html b/docs/develop/develop/projects/projects.html new file mode 100644 index 00000000..7cd9984e --- /dev/null +++ b/docs/develop/develop/projects/projects.html @@ -0,0 +1,772 @@ + + + + + + + + + Developing Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Developing Code

+
+
+
+

Projects

+

A project is a Ubuntu server and is commonly referred to as a box. You can create as many projects (boxes) as needed, and with sudo privileges, you can install and configure them however you want. Each project box is fully isolated from your other project boxes.

+

When opening a project, you are taken into the project server (box) and are presented with the Codio IDE. You can access the command line via a terminal window.

+
+
+

Project templates

+

Codio works with a series of templates for software configurations, also commonly referred to as stacks. These templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can use our pre-configured templates or create your own. This template approach makes Codio easy to use, configure and adapt.

+
    +
  • You can take a snapshot of the software configuration on any box and add it to the Stacks template library.

  • +
  • You can take a snapshot of the stack/project code workspace combination and add it to the Starter Packs template library.

  • +
+
+
+

Project concepts and features

+

We strongly recommend that you familiarize yourself with the following project related concepts and features before you get started:

+ +

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/create-stack.html b/docs/develop/develop/stacks/create-stack.html new file mode 100644 index 00000000..4f8830b3 --- /dev/null +++ b/docs/develop/develop/stacks/create-stack.html @@ -0,0 +1,896 @@ + + + + + + + + + Create a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create a Stack

+

You can create a new stack or stack version from a project or assignment in the IDE, or from the Stacks page in the Codio dashboard.

+
+

Note

+

Prior to creating a stack, read the information about Stacks so you are familiar with how stacks work in Codio.

+
+
+

Stack guidelines

+

Before you create a stack, review the following strategies and considerations to improve their usefulness:

+
    +
  • Create a new project from a stack that most closely matches your requirements. You can also use the Base Stack and then install your own components.

  • +
  • Include a full description of the stack; this is the description that is displayed in the Stacks listing and the stack info (Projects > Stack > Info) in a project. For a reference, review some of the Codio Certified Pack long descriptions.

  • +
+
+
+

Create a new stack from the IDE

+

To create a new stack or new version of a stack from a project or assignment in the IDE, follow these steps:

+
    +
  1. Open the project in the IDE.

  2. +
  3. Click the Project tab on the menu bar and choose Stack > Create New.

    +Stacks Create New +
  4. +
+

By default, the stack is Private. To make it available to others, refer to Visibility and Ownership. We recommend that you set the owner to your organization.

+
+
+

Create a new stack from the dashboard

+

To create a new stack or new version of a stack from the Codio dashboard, follow these steps:

+
    +
  1. In the left navigation pane, Stacks.

  2. +
  3. On the Stacks page, click New Stack and point to your project.

    +Create New Stack +
  4. +
  5. Complete the required fields:

    +
      +
    • Stack Blueprint - Choose the Codio project to be used for the stack blueprint. Enter any part of the project name to view the blueprints in a drop-down list.

    • +
    • Name and Description - Enter a short name and a longer description for the stack. To add a more detailed overview of the stack, click the add a long description link. You can write the description using markdown.

    • +
    • Image - You can add an image to make your stack more instantly recognizable in the listing. The image should be square; the size will be reduced and appear in a circle.

    • +
    • Tags - You can add tags to the stack help ensure maximum search capabilities. Ideally, the tags should be component names. The autocomplete feature helps you find already defined tags to avoid duplication.

    • +
    +
  6. +
  7. Click Create to generate the stack image (this may take a few minutes depending on the size of the image).

  8. +
+
+

Note

+

You do not need to remain on the page while the stack image is being created; you may continue to other areas of Codio. However, the source project is not accessible until the stack has been created.

+
+
+

Sample template

+

Below is a sample template that can be modified for your stack.

+
# Title
+Put the name of your Stack here.
+
+## Using the Stack
+Describe how the user should get started.
+
+## Starter Pack
+If there are related Starter Packs you have created from this Stack that include code files, detail them here.
+
+## Components Installed
+It can be helpful to others or even to you later on to describe the installed Components and versions.
+
+## Configuration Files
+Detail where any component configuration files can be found. As you install components from `Tools>Install Software` a log file of all this information will be opened.
+
+## General Information
+Include any general information on the use and operation of any installed components.
+
+## Codio Documentation
+We recommend you include useful links to the Codio Documentation.
+
+##Stack Specific Links
+Provide useful links on the Stack components.
+
+
+
+
+

Sample template from Codio Certified LAMP stack

+
# LAMP
+
+## Using this Stack
+This Codio Stack gives you a complete **LAMP** stack ready to use and with all services up and running.
+
+## Related Stacks & Starter Packs
+There are various other Stacks and Starter Packs that may be of interest. Please search the listing for
+
+- Stack : **LEMP**
+- Stack : **LAPP**
+- Stack : **LAMP** + Composer
+- Starter Pack : **Laravel** (LAMP + Composer + Laravel)
+
+## Components Installed
+This Stack contains the following major component versions
+
+- **PHP** 5.5.9
+- **Apache** 2.4.7
+- **MySQL** 14.14 Distrib 5.5.46
+
+## Configuration Files
+You can find configuration files in the following locations
+
+- **PHP config file** : `/etc/php5/apache2/php.ini`
+- **Apache config** : `/etc/apache2/apache2.conf`
+- **MySQL default config file** :  `/etc/mysql/my.cnf`
+
+## General Information
+
+# Apache Server
+Apache should be started by default. You can manually start, stop and restart it using the following terminal commands:
+
+$ sudo service apache2 start
+$ sudo service  apache2 stop
+$ sudo service  apache2 restart
+
+
+# MySQL
+
+## Start, Stop, Restart the MySQL server
+MySQL should be started by default. You can manually start, stop and restart the MySQL server using the following terminal commands:
+
+$ sudo service mysql start
+$ sudo service mysql stop
+$ sudo service mysql restart
+
+
+## Connecting to the MySQL monitor
+Assuming the MySQL server is started, you can connect to it using `mysql` from the terminal. Exit using `ctrl+c`.
+
+## Root Password
+If you want to set the root password, use the following command from the terminal
+
+mysqladmin -u root password NEWPASSWORD`
+
+
+## Codio Documentation
+Please be aware of the following useful links
+
+- [How to Access your Box](https://docs.codio.com/develop/develop/ide/boxes/overview.html)
+- [If your firewall only allows access to port 80](https://docs.codio.com/develop/develop/ide/boxes/ext-access.html)
+- [Creating Codio menu items to avoid repetitive terminal commands](https://docs.codio.com/develop/develop/ide/boxes/runmenu.html#customizable-run-menu)
+- [Using Git in Codio](https://docs.codio.com/common/develop/ide/editing/git.html#git)
+- [Customizing the IDE settings](https://docs.codio.com/develop/settings/user-prefs.html#user-prefs)
+- [Restarting your Box](https://docs.codio.com/common/develop/ide/boxes/restart-reset.html#restart-and-reset)
+- [Creating multiple code editing panels in the IDE](https://docs.codio.com/common/develop/ide/workspace/panels.html#id1)
+
+## Stack Specific Links
+
+- [PHP](http://php.net)
+- [Apache](http://httpd.apache.org)
+- [MySQL](http://dev.mysql.com)
+
+## Updating Components
+If this Stack is not using any of the latest components, please email support@codio.com and we will update it.
+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/modify-stack.html b/docs/develop/develop/stacks/modify-stack.html new file mode 100644 index 00000000..d8cf272c --- /dev/null +++ b/docs/develop/develop/stacks/modify-stack.html @@ -0,0 +1,768 @@ + + + + + + + + + Modify a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Modify a Stack

+

Any changes you or an application makes to the software on the server (box) outside the Workspace folder is considered a stack modification. Such modifications may include changes made using sudo apt-get install, manually editing a config file, or changes to a database due to application usage.

+

You can modify the stack at any time by opening a project, or course assignment and making the stack changes from the command line. Keep in mind that your modifications will work fine on the project you are working on as the owner, but the modifications will not be transferred to those being run by your students.

+

You must first create a clean stack with your modifications and then switch the project to the clean stack. See Creating a Stack and Switching a Project Stack for more information.

+
+

Rules for modifying a stack

+

Before modifying a stack, be aware of the following rules:

+
    +
  • If you are the stack owner or have write access to the stack, you can create new versions of an existing stack.

  • +
  • If you do not have write access to the stack, which is the case for the Codio certified stacks, you need to create a new stack for which you are the owner and then create your own versions from that stack.

  • +
  • If the stack is Private and the owner is set to an organization where you are a member, you have write access and can create new versions of that stack.

  • +
+

See Stacks for information about visibility and ownership.

+
+

Use case of a stack modification

+

If a MySQL database’s data is in the normal location within the stack (/var/lib/mysql/), when the project is assigned to the course, each student gets their own database, independent of other students. However, if the stack is changed for any reason (for example, the project owner makes a change or the stack version has changed for an already assigned assignment), all database data will be reset to the state of the new stack since the database data folder is not a part of the workspace.

+

If you want to keep the database independent of the stack, you should include the database file in the Workspace folder (by editing /etc/mysql/mysql.conf.d/mysqld.cnf). You can then update the database software via a stack change but keep the database data intact when you switch stacks.

+

Remember the following points to avoid issues:

+
    +
  • Assignment = Selected Stack + Stack Changes + Workspace Folder

  • +
  • When run by students from an assignment: Assignment = Selected Stack + Workspace (no stack modifications)

  • +
  • Stack modifications in the source project or assignment are not transferred when students launch the assignment.

  • +
+
+

Note

+

Once the project or assignment is run by students, if they make changes to their stacks, each stack is individually handled so there are no issues unless a new stack is selected in Project > Stacks > Settings on the menu bar.

+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/stack-planning.html b/docs/develop/develop/stacks/stack-planning.html new file mode 100644 index 00000000..df6b6e9b --- /dev/null +++ b/docs/develop/develop/stacks/stack-planning.html @@ -0,0 +1,783 @@ + + + + + + + + + Stack planning — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Stack planning

+

You should be familiar with the concept of stack before creating content.

+
+

Minimize the number of stacks

+

It is important to think about the stack that your course uses. You should avoid creating a new stack for each assignment. There are very few cases where this is needed. If you unnecessarily create new stacks for each assignment, you will be less efficient and waste unnecessary time with stack builds/rebuilds.

+

You should look to use as few stacks as possible, ideally just one, and use that stack for all assignments. There are perfectly valid exceptions, but this is the rule.

+
+
+

Single stack example

+

To illustrate a single stack situation, let’s assume you are teaching a course “Programming in Java”. You could either use our default Java stack or you start with the Java stack and then add additional tools so it has all the components you require to teach all parts of your course.

+

Whether you have created your own stack or used a default one, you would then point all your assignments to that one, same stack.

+

If, as you create more assignments in your course, you find you need to install more tools, then you should update the stack with a new version.

+

By default, when you choose a stack for your new assignment, it will point to the latest version. So if the underlying stack is updated from any location at all, then any assignment that uses that stack will automatically be set to use it. Students who are using an assignment in a course will also automatically use the latest version when it is updated.

+

It follows that you should be very careful when pointing to a specific version of a stack, rather than the latest version. If you do this, then you will need to update all assignments that are not set to use the latest version.

+
+
+

Multiple stack example

+

Let’s say you are teaching a course “Introduction to Programming” and it has 3 modules “Java”, “Python” and “Haskell” and each module contains a good number of assignments. In this case, you could still choose the single stack approach, but you would need to install all three languages and their toolsets and then create a stack from it.

+

A simpler approach would be to use three separate stacks, one for each language. You set the assignments for each language to point to the appropriate language stack.

+

Other than that, the principles described above still apply.

+
+
+

Switching stacks

+

It is possible to change the stack for an assignment. This can be done from either the assignment listing area from within the IDE. However, if this change were to be needed for all assignments then you would have to repeat this for each assignment individually.

+

It is therefore highly recommended that you start with a stack and stick with it wherever possible.

+
+
+

Stacks not owned by you

+

If you were to use one of Codio’s default stacks then you are not able to update these yourself as you don’t have permissions. However, you might want to start off with, say, the Java stack and then install new components.

+

In this case, you should plan this ahead of time. You would

+
    +
  • first create the assignment from Codio’s Java stack

  • +
  • install your components

  • +
  • create a new stack from your assignment (in the IDE) or from the stacks dashboard)

  • +
  • make sure your stack is switched to that newly created stack

  • +
+

You now own this stack and so you can update whenever you like down the line. When you create new assignments, you would then choose this new stack.

+
+
+

Use Latest Version

+

When you assign a stack to an assignment, it will be set by default to the Use Latest Version. You can view the stack settings from the IDE (Project-Stack Settings)

+

Understanding what Use Latest Version means is important. When you work with an assignment as a course author, that assignment is actually using a fixed version. It does not automatically switch to the latest version each time a new version of a stack is created. This could be dangerous as switching a stack resets everything outside the workspace folder. If you want to update to the latest version then you need to go to the stack settings dialog and press the save button.

+

Where Use Latest Version is useful is when you assign a course module and its assignments to a course. In this case, students who have not yet started an assignment will get the latest version of the stack.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/stacks.html b/docs/develop/develop/stacks/stacks.html new file mode 100644 index 00000000..d0294a96 --- /dev/null +++ b/docs/develop/develop/stacks/stacks.html @@ -0,0 +1,781 @@ + + + + + + + + + Stacks — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Stacks

+
+
+

Codio projects are mounted to software configuration templates, known as Codio stacks. A stack refers to the software configuration of a project server (box), which includes everything on the server outside the code workspace (/home/codio/workspace) that you see in the IDE file tree.

+

When you create a new Codio project or course assignment, you must specify a stack that contains the operating system (always) and other components such as languages, databases and tools. You can use our pre-configured stacks or create your own using the project templates.

+

Codio’s templates deliver fully preconfigured servers in less than 5 seconds, no matter how complex the configuration. You can also snapshot a box’s stack create a stack and add it to the Stacks template library.

+
+

Note

+

It is very important to understand how Stacks are used in Codio, especially when working with courses. Incorrect usage can result in being able to edit a project but then failing when it is run.

+
+
+

Stack modifications

+

Any changes you or an application makes to the software on the server (box) outside the Workspace folder is considered a stack modification. Such modifications may include changes made using sudo apt-get install, manually editing a config file, or changes to a database due to application usage.

+

If you modify a stack, be sure to keep the following in mind prior to assigning it to a course:

+
    +
  • Projects - If you have made any modifications to the project, you should create a new stack and switch your project to the new stack after it is created to ensure maximum efficiency and speed. If you have not yet created a new stack to incorporate the modifications, go to Project > Stack > Create New to create a new stack before publishing the assignment.

    +

    It is good practice to go to your project and set it to point to this stack as soon as possible. It is however, much better practice to update the stack before you publish the assignment in the course module.

    +
  • +
  • Course Assignments - You should always create a custom stack first and then switch the project’s stack and any assignments that use the same configuration to the newly created stack. You can then assign a course module, which assigns all its assignments to the course.

  • +
+

See Modifying a Stack for more information.

+
+
+

Stack versions

+

When a new stack or new version of an existing stack is created, the new versions are organized under the existing stack. Assigning a new version to a stack also resets all project content outside the workspace folder to those of the new stack version.

+
+

Note

+

When referring to a stack in our documentation, we are talking about a single stack or a stack version beneath it.

+
+
+
+

Stack visibility and ownership

+

The following rules apply for visibility and ownership of stacks:

+
    +
  • By default, stacks are private to your account but you can make them public. When a stack is made public, it is displayed on the Stacks page under All and all Codio users can view it.

  • +
  • If you are the owner of the stack for your organization, the stack is displayed on the Stacks page under My Stacks and all members of your organization can view it.

  • +
  • If you are an owner in the organization, you can enable the setting that allows you to create public stacks. See Public/Private Settings.

  • +
  • If you want to keep your Stack private to your organization, select the Private option and set the Owner option to your organization. These settings are recommended for collaborating with others when authoring and editing content.

    +

    By default, you are the owner of the stack and only you can edit and create new versions. If you want to allow others to see and administer your stack, assign it to another organization.

    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/switch-stack.html b/docs/develop/develop/stacks/switch-stack.html new file mode 100644 index 00000000..295d828b --- /dev/null +++ b/docs/develop/develop/stacks/switch-stack.html @@ -0,0 +1,750 @@ + + + + + + + + + Switch Project to New Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Switch Project to New Stack

+

There are various reasons for switching your project’s stack to a new one, including:

+
    +
  • When you create a new stack. This is the most important and common use case. If you have modified your stack and then created a new stack (or a new version) from it, you need to point your project to the new stack.

  • +
  • If you mistakenly specified the wrong stack when you created the project.

  • +
  • If a new stack version has been created and you want to point your project to the latest version.

  • +
+

You can switch a project’s stack from Project > Stack > Settings on the menu bar or from the Settings (gear) icon on the project in the main project listing.

+

When you switch the stack from Project > Stack > Settings, all stack modifications that were made relative to the original stack are replaced by the new stack. Normally this is fine if you created a new stack from the project before switching it.

+

Important: +When you switch a stack, everything outside the workspace folder in the tree (/home/codio/workspace) is replaced by the new stack. See Stacks for more information.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/update-stack.html b/docs/develop/develop/stacks/update-stack.html new file mode 100644 index 00000000..0ffc0b91 --- /dev/null +++ b/docs/develop/develop/stacks/update-stack.html @@ -0,0 +1,771 @@ + + + + + + + + + Update a Stack — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Update a Stack

+

After creating a new stack, you may want to update the stack properties or take another stack snapshot from a Codio project. You can update your stack from the Stacks area on the Codio dashboard or from the IDE.

+
+

Update stack from the dashboard

+

To update the stack from the Codio dashboard, follow these steps:

+
    +
  1. In the navigation pane, click Stacks and then select the stack from the list.

    +Stacks Dashboard +
  2. +
  3. Click Edit to update the Stack Name or Description.

  4. +
  5. Click New Version to create a new version of the stack and then choose the project from which the stack should be generated from the Source drop-down list.

  6. +
  7. Add a comment describing what has changed since the last version. A new version is generated (this can take a few minutes).

  8. +
+
+
+

Update stack from the IDE

+

You may find it easier to update a stack from within the IDE and the project that you are currently working on. After you have finished making changes to your box (installing new components etc.), follow these steps to create a new stack version:

+
    +
  1. Click the Projects tab on the menu bar and choose Stack > Create New.

    +Stacks New Version +
  2. +
  3. Click New Version and enter a description of the changes since the last stack version. A new version is generated (this can take a few minutes).

    +

    If your stack is pointing to the latest version, you’ve completed the procedure. However, if the stack is pointing to a specific stack version, you must change it to point to the latest version or the version you just built.

    +
  4. +
  5. Click Project on the menu bar and choose Stack > Settings to point to a different stack.

  6. +
+
+
+

View stack version history

+

You can view the version history of a stack from the Stacks page on the Codio dashboard. Select the stack from the listing and then click the Versions link at the top of the page.

+Stack Version History +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/develop/stacks/using-stacks.html b/docs/develop/develop/stacks/using-stacks.html new file mode 100644 index 00000000..53c40c13 --- /dev/null +++ b/docs/develop/develop/stacks/using-stacks.html @@ -0,0 +1,783 @@ + + + + + + + + + Using Stacks — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Using Stacks

+

Codio Stacks enable you to create and manage a combination of a Codio box and installed system-level components (languages, databases, web servers etc.) to be used when creating new projects. Use the Stacks page to search for and select a stack.

+Stacks List +

You can also select a stack when creating a project or switching the stack for a project.

+

On the Stacks page, you can select a stack from the following lists:

+
    +
  • My Stacks - Stacks that were created by you or set to be owned by the organization.

  • +
  • Certified - Stacks that are approved by Codio and cover a wide range of common stack configurations.

  • +
  • All - Searchable repository of all stacks.

  • +
+
+

Search stacks

+

To search for a stack, enter the appropriate search criteria in the search field; this is typically the name of the main stack component(s). The search will return the stack name, description, and any tags that are used.

+

If you cannot find a stack that meets your needs, you can create your own stack and add it to your Stack library.

+
+
+

View stack details

+

Click the Stack in the list to view detailed information, including the version, description, components, and how to use the stack.

+

To view the different versions of the stack, click the Versions tab.

+
+
+

Create project from a stack

+

You can select a stack to use for creating a project using one of the following methods:

+
    +
  • On the stack Details page, click Use Stack. If there are multiple versions of the stack, the latest version is used to create the project.

  • +
  • On the stack Versions page, find the version in the list and click Use Stack. You can then create the project using that specific version. Codio recommends using the latest version of a stack.

    +Stack Versions +
  • +
  • On the Stacks page, click the arrow (Create project with) icon to the far right of the stack item without opening the details. If there are multiple versions of the stack, the latest version is used to create the project.

  • +
+

The Create Project dialog is then populated with the selected stack configuration.

+
+

Note

+

If you are in an assignment, click the Stack button while in Edit mode and set the stack version.

+
+
+

Exclude files and folders from stack

+

When you create a stack, it is based on the contents of the /home/codio folder but omits your code workspace. If you want to exclude other files or folders, follow these steps:

+
    +
  1. Create a ~/.codio/stack_exclusions file in the project the stack is based on.

  2. +
  3. Add the full paths to the file or folder to be excluded from the stack. When in the folder, run readlink -f <filename> to get the full path. Globbing and wildcards are not supported. Include only one path per line.

  4. +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/bitbucket.html b/docs/develop/settings/bitbucket.html new file mode 100644 index 00000000..ab5fab6d --- /dev/null +++ b/docs/develop/settings/bitbucket.html @@ -0,0 +1,321 @@ + + + + + + + + + Connect to BitBucket — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connect to BitBucket

+

If you are working with BitBucket, you must install your Codio SSH key and connect to the application.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the Applications tab.

    +Applications +
  4. +
  5. Navigate to the BitBucket section and click Upload Public Key.

  6. +
+

You will be redirected to your application account and asked to authorize the application. You will then be redirected back to your Codio account.

+
+

Note

+

If you need to connect to a different account, see SSH Key where you can get your Codio Public SSH Key and then add manually to your new repo account.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/env-variables.html b/docs/develop/settings/env-variables.html new file mode 100644 index 00000000..4cb66dd8 --- /dev/null +++ b/docs/develop/settings/env-variables.html @@ -0,0 +1,324 @@ + + + + + + + + + Environment Variables — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Environment Variables

+

Environment Variables allow you to set your own environment variables in your projects. You access the Environment Variables from your project by going to Codio > Preferences > Environment Variables on the menu bar. Once set they are available in all your projects. The variables are not passed to students assignments in Courses.

+
    +
  • When adding and saving, the project needs to be restarted (Project > Restart Box) for the new variables to be available.

  • +
+
+
+

Student Assignments

+

As mentioned above, any variables instructors set in assignments are not inherited by students in their course assignments. Environment Variables can be used within Secure Scripts but your students will need to manually create the necessary variables themselves in their assignment.

+

If a student is working with an API across a number of assignments, they can set up the environment variables once and have it propagate to all their projects without having to manually add keys to each new assignment.

+
    +
  • Environment Variables are not supported for Pair Programming assignments.

  • +
+
+

Important

+

Be aware that if you change the HOME variable you are changing the entry point for profile and it could adversely affect the user variables. If you do change this variable, it is your responsibility how environment will behave after that.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/github.html b/docs/develop/settings/github.html new file mode 100644 index 00000000..8d3df7d0 --- /dev/null +++ b/docs/develop/settings/github.html @@ -0,0 +1,321 @@ + + + + + + + + + Connect to GitHub — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connect to GitHub

+

If you are working with GitHub, you must install your Codio SSH key and connect to the application.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the Applications tab.

    +GH account +
  4. +
  5. Navigate to the GitHub section and click Upload Public Key.

  6. +
+

You will be redirected to your application account and asked to authorize the application. You will then be redirected back to your Codio account.

+
+

Note

+

If you need to connect to a different account, see SSH Key where you can get your Codio Public SSH Key and then add manually to your new repo account.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/manage-password.html b/docs/develop/settings/manage-password.html new file mode 100644 index 00000000..86e5c2e3 --- /dev/null +++ b/docs/develop/settings/manage-password.html @@ -0,0 +1,350 @@ + + + + + + + + + Manage Password — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Manage Password

+

You can change or reset your password if you have forgotten it, or if it was reset by your instructor.

+
+

Forgot password

+

If you have forgotten your password, you can reset it using the following procedure:

+
    +
  1. On the Codio log-in page, click the Lost your password link.

  2. +
  3. Enter your Email or Username and click Reset Password.

  4. +
  5. Check your email inbox for an email notification and follow the instructions for resetting your password.

  6. +
+
+

Note

+

If you do not have access to the email address you used when creating your Codio account, contact your instructor and they can reset the password for you.

+
+
+
+

Change password

+

You can change your password from the Overview page. You should change it if you have forgotten your password or it was reset by your instructor.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane to open the Overview page.

    +Profile Icon +
  2. +
  3. Click the Overview tab.

  4. +
  5. In the Change Password area, enter your Current Password and a New Password, and click Update password.

    +Change password +
  6. +
+
+

Note

+

You are allowed three attempts to enter your current password before your account is temporarily suspended. If your account is suspended, wait 15 minutes and then try again.

+
+
+
+

Reset password

+

You can request a password reset from your Overview page. It may be necessary to request a password reset if you have previously logged into Codio using a saved password, but have since forgotten the password.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

    +Profile Icon +
  2. +
  3. Click the Overview tab.

  4. +
  5. In the Reset Password area, enter your Email address and click Reset password. A email is sent to your inbox with a link to reset your password.

  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/project-prefs.html b/docs/develop/settings/project-prefs.html new file mode 100644 index 00000000..90ded7e9 --- /dev/null +++ b/docs/develop/settings/project-prefs.html @@ -0,0 +1,327 @@ + + + + + + + + + Project Preferences — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project Preferences

+

Project preferences get the highest priority and are applied over User Preferences. You access the Project Preferences from your project using one of the following methods:

+
    +
  • Click Codio > Preferences > Project on the menu bar.

  • +
  • In the Filetree, open the .settings file.

  • +
+

You can modify any of the settings but use caution since project preferences will override user preferences.

+
+

More information

+

For more information about specific settings, see the relevant topic:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/settings.html b/docs/develop/settings/settings.html new file mode 100644 index 00000000..8aab68ae --- /dev/null +++ b/docs/develop/settings/settings.html @@ -0,0 +1,322 @@ + + + + + + + + + Account Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Account Settings

+
+
+

You manage your account and customize your user preferences on the Overview page. To access this page, click your user name or gravatar in the lower portion of the navigation pane.

+

From the Overview page, you can access and manage the following:

+ +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/ssh-key.html b/docs/develop/settings/ssh-key.html new file mode 100644 index 00000000..3c75ce2e --- /dev/null +++ b/docs/develop/settings/ssh-key.html @@ -0,0 +1,314 @@ + + + + + + + + + SSH Key — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

SSH Key

+

An SSH public and private key pair is automatically generated for your account that can then be used when Codio attempts communication with an external server that requires authentication based on a public or private key, such as SSH terminal or SFTP. You access this key from the SSH Keys tab.

+
+
Codio SSH Key +
+

If you wish to regenerate the SSH public and private key in your Codio account, you can do so clicking the Regenerate button. If you would like to use your own custom key, click the Replace Key button. Any external servers that have used the original key will need to be updated to use the newly created key.

+

To connect to a remote server, you must upload your SSH key to the remote server.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/upload-ssh-key-remote-server.html b/docs/develop/settings/upload-ssh-key-remote-server.html new file mode 100644 index 00000000..e87fccf4 --- /dev/null +++ b/docs/develop/settings/upload-ssh-key-remote-server.html @@ -0,0 +1,317 @@ + + + + + + + + + Upload SSH Key to Remote Server — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Upload SSH Key to Remote Server

+

To make a secure connection to a remote server, you must upload your SSH key to the server.

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane.

  2. +
  3. Click the SSH Keys tab.

    +SSH Dialog +
  4. +
  5. In the Upload Key section, enter the Server information and click Upload. Codio will upload your Codio SSH key to the server so you can make a secure connection.

  6. +
+

You can then use the SSH key to connect to GitHub or BitBucket servers. See the GitHub and BitBucket topics for instructions on connecting to the servers.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/user-prefs.html b/docs/develop/settings/user-prefs.html new file mode 100644 index 00000000..247d02b1 --- /dev/null +++ b/docs/develop/settings/user-prefs.html @@ -0,0 +1,340 @@ + + + + + + + + + User Preferences — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

User Preferences

+

Codio offers a full collection of settings that apply to only you when you’re logged in. These user preferences cover all aspects of Codio usage, from code editor settings (tab stops, indentation, colors, fonts, etc.) to keyboard shortcuts.

+User Preferences +

You can customize these preferences at the user level (only affects you) or the project level (affects everyone using the project). For more information see Project Preferences. When logged in to Codio, the default preferences are used first, then any user preference overrides are applied, and finally any project-level preferences are applied.

+

You access the User Preferences from the Codio > Preferences > User menu option when you are in a project.

+User Preference Menu +
    +
  • Default Preferences are displayed in the right column and are read only.

  • +
  • Your (User) Preferences are displayed in the left column. When your account is created, the Your Preferences column is empty until you specify an override to the default preferences.

  • +
+

Below is an example of user settings that override the Codio default preferences:

+
[editor]
+theme=eclipse
+font_size=13
+
+[code-beautifier]
+indent_level=4
+indent_with_tabs=true
+
+
+
+

More information

+

For more information about specific settings, see the relevant topic:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/settings/user-profile.html b/docs/develop/settings/user-profile.html new file mode 100644 index 00000000..99b8a10d --- /dev/null +++ b/docs/develop/settings/user-profile.html @@ -0,0 +1,321 @@ + + + + + + + + + User Profile — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

User Profile

+

You can update your user profile from the Overview tab. To access this page, click your user name or gravatar in the lower portion of the navigation pane.

+

Update your name, email address or password and click Save Changes.

+
+

Delete your account

+

You can delete your account by selecting the Overview tab.

+
+
Delete account +
+
+

Warning

+

If you delete your account it cannot be retrieved nor can its contents be restored. To archive your data for potential later usage, export your projects or push them to a remote depository.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/tools/code-commenting.html b/docs/develop/tools/code-commenting.html new file mode 100644 index 00000000..400423e2 --- /dev/null +++ b/docs/develop/tools/code-commenting.html @@ -0,0 +1,231 @@ + + + + + + + + + Code Commenting — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Commenting

+

Instructors can add comments to your code to provide suggestions or corrections, and you can see the comments as you view the files.

+

To view all comments, click Education > Code Comments on the menu bar, and choose the file to open it.

+Commenting +

You can also add your own comments for the instructor to review. As you update your code, the comment is marked as resolved but can still be reviewed from the Education -> Code Comments menu item or from the Guide Settings.

+Guides Code Comments +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/tools/code-playback.html b/docs/develop/tools/code-playback.html new file mode 100644 index 00000000..6049b3f0 --- /dev/null +++ b/docs/develop/tools/code-playback.html @@ -0,0 +1,250 @@ + + + + + + + + + Code Playback — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Playback

+

Use the Code Playback feature to generate a file and review how you built the code. To build the file, click Tools > Code Playback on the menu bar, or right-click the opened file and choose Code Playback.

+

The file that is currently active is built and displayed. To review other files or search for files, expand the folders in the left navigation pane, right-click the file name and choose Code Playback.

+
    +
  • To watch the code being built, click the Play button. Click Pause to stop playback.

  • +
  • To change the playback speed, click the Speed drop-down menu and choose the speed in number of changes per second.

  • +
  • To manually walk through the changes, click the Previous change and Next change buttons. You can drag the playback slider to find points of interest.

  • +
  • You can also see more detailed behavior insights by selecting Education > Behavioral Player from the menu.

  • +
+
+

Retrieving deleted files

+

If you delete a file in error, you can use Code Playback to find the file and recreate it. Follow these steps to retrieve a deleted file:

+
    +
  1. Open the assignment and click Tools > Code Playback.

  2. +
  3. Click the Folder icon and select the file that you want to recover.

  4. +
  5. Review the file and see how it was built by clicking the Play icon.

    +

    You can find your last saved work by clicking on Previous, Play/Pause, and Next icons, or by dragging the timeline bar.

    +
  6. +
  7. Copy the code from the playback and paste it into a new file.

  8. +
+
+

Note

+

If you don’t see Tools > Code Playback on the menu bar, right-click a tab or in the file tree, and choose Code Playback.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/tools/dyslexia.html b/docs/develop/tools/dyslexia.html new file mode 100644 index 00000000..576fcb39 --- /dev/null +++ b/docs/develop/tools/dyslexia.html @@ -0,0 +1,755 @@ + + + + + + + + + Tools — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Tools

+
+
+
+

Dyslexia Support

+

Codio has a built in dyslexia support feature for users with dyselexia that provides the ability to set your Theme to Dyslexia view. To enable dyslexia support mode, follow these steps:

+
    +
  1. Open an assignment.

  2. +
  3. In the upper right corner, and select the Settings icon (gear) and choose Theme > Dyslexic.

  4. +
+
+Dsylexia Theme +
+

When enabled, the screen is displayed in Dyslexia View.

+Dyslexia View +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/develop/tools/lexikon.html b/docs/develop/tools/lexikon.html new file mode 100644 index 00000000..76e7f472 --- /dev/null +++ b/docs/develop/tools/lexikon.html @@ -0,0 +1,247 @@ + + + + + + + + + Lexikon — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Lexikon

+

The Codio Lexikon is an integrated help system that enables you to quickly and easily look up information about a variety of languages and topics. It provides concise reference information within a coding project or assignment without having to search the web.

+Lexicon +

If Lexikon has been enabled by the project author, you can access it using one of the following methods:

+
    +
  • Click the Lexicon icon in the upper right corner of the assignment or coding project.

  • +
  • On the menu bar, click Tools > Lexicon.

  • +
  • Use the default keyboard shortcut Ctrl+Alt+L.

  • +
+
+

Note

+

If you cannot open the Lexicon using the above methods, contact your instructor for assistance.

+
+

The Lexikon is currently organized into the following topics:

+
    +
  • Crunch

  • +
  • CSS

  • +
  • HTML

  • +
  • Javascript

  • +
  • Linux

  • +
  • CyberSecurity

  • +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/genindex.html b/docs/genindex.html new file mode 100644 index 00000000..11b9ddd3 --- /dev/null +++ b/docs/genindex.html @@ -0,0 +1,218 @@ + + + + + + + + Index — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + +
+ + +
+ +
+ + + + + + +
+ +
+ + +

Index

+ +
+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/getstarted.html b/docs/getstarted.html new file mode 100644 index 00000000..30d04854 --- /dev/null +++ b/docs/getstarted.html @@ -0,0 +1,281 @@ + + + + + + + + + Getting Started — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Getting Started

+
+
+
    +
  • Get an overview of Codio by viewing our collection of How to Videos.

  • +
  • Start using Codio by working through our interactive Onboarding Guide.

  • +
  • See what a course looks like in Codio by trying out one of our Instructional resources.

  • +
  • View our on-demand instructional webinars

  • +
  • Try our Hello Codio Starter Packs for language specific information on creating lessons.

    +
    +
      +
    • Click Starter Packs in the Navigation Pane on the left

    • +
    • Click the Certified tab

    • +
    • Type in “Hello Codio” in the search bar and select the Starter Pack that meets your needs.

    • +
    • Select Use Pack then click Create to add it to your projects.

    • +
    +
    +
  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..8b78d92e --- /dev/null +++ b/docs/index.html @@ -0,0 +1,298 @@ + + + + + + + + Codio — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/commoncartridge.html b/docs/instructors/admin/integration/commoncartridge.html new file mode 100644 index 00000000..243a635f --- /dev/null +++ b/docs/instructors/admin/integration/commoncartridge.html @@ -0,0 +1,812 @@ + + + + + + + + + Common Cartridge — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Common Cartridge

+

Allows you to export the Common Cartridge 1.3 data for the course to then use within your LMS system to import details of the assignments in your Codio courses.

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the LTI/LMS tab and then in the LTI/LMS Connections area, click to Common Cartridge the common cartridge information.

    +Common Cartridge Export +
  4. +
+
+

Important

+

If working with Canvas, each assignment within your LMS still needs to be configured. Refer to the system specific instructions for your LMS system.

+
+

See Also: +- Export Assignment Data to export individual assignment workspaces. +- Export LTI Settings to export unit LTI integration URLs. +- Import Project to import the zipped exported folder to review student workspaces. The exported workspace does not include the stack so you should select the appropriate stack when importing the project or switch the stack in Project > Stack > Settings.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/grading.html b/docs/instructors/admin/integration/grading.html new file mode 100644 index 00000000..7029d332 --- /dev/null +++ b/docs/instructors/admin/integration/grading.html @@ -0,0 +1,813 @@ + + + + + + + + + Grading — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Grading

+

Codio passes grades back to the LMS as a percentage earned out of the available points designated in Codio.

+

By default, grades are passed when assignment is completed and Release Grades setting is enabled, but if you want to customise/configure this behavior you can set CUSTOM_CODIO_SEND_GRADE custom parameter and here is list of possible values (case insensitive):

+
    +
  • GRADE_RELEASE - default behavior, grades are sent when the grades are released and the assignment is graded.

  • +
  • ALWAYS - grades (even if incomplete) are sent every time on assignment submission or manual grade action even if the grade hasn’t changed.

  • +
  • CHANGED - every time grade is different from the previous state.

  • +
+

Example:

+
CUSTOM_CODIO_SEND_GRADE="GRADE_RELEASE"
+
+
+

When grades are released a URL is passed to the LMS where students/teachers can access the grading information for the assignment in the grading area of the LMS. By default, only the course teachers and the individual student can access the grading preview URL.

+

In order to pass a different URL back to your LMS system where anyone who knows the URL can access the students grading information, enable the LMS shared feedback option for the course. To enable this, go to your course LTI/LMS tab and then toggle the switch to enable.

+
+
LMS Shared Feedback +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/intro.html b/docs/instructors/admin/integration/intro.html new file mode 100644 index 00000000..6c847cf7 --- /dev/null +++ b/docs/instructors/admin/integration/intro.html @@ -0,0 +1,828 @@ + + + + + + + + + Integrating with your LMS system (Canvas etc.) — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Integrating with your LMS system (Canvas etc.)

+
+
+

Learning Tools Interoperability (LTI) is a standard for passing user, organization, and course information between learning management systems (tool consumers) and learning tools and tool providers, such as Codio.

+

Video: LMS Integration Overview

+
+

Accessing Codio Directly for LMS Users

+

Students who initially accessed Codio through an LMS/LTI system, can set up direct access to Codio once their account has been created. They should use the same email address they use to access their LMS system for their Codio login, and then create a new password using the Lost Password process. See Manage Password for more information.

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-students.html b/docs/instructors/admin/integration/lms-students.html new file mode 100644 index 00000000..d0562e95 --- /dev/null +++ b/docs/instructors/admin/integration/lms-students.html @@ -0,0 +1,845 @@ + + + + + + + + + User account creation — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

User account creation

+

When integrating with an external system, you do not add/invite students or teachers to your course. All is handled when the users access an assignment in the system mapped to Codio and the features to invite students into the course are not enabled.

+

It is also important to understand how Codio maps external system users to Codio users. The following rules should be understood.

+
    +
  • If students or faculty access Codio via an LMS assignment then Codio will initially use the LMS email address to identify the user and create the Codio account.

  • +
+
+

Note

+

Anonymous students (with no email associated) can access Codio through an LMS. This must be set up within the LMS.

+
+
    +
  • In all subsequent access, the userID will be used so in the event the user changes their email address in the LMS, the user will be mapped to the same Codio account.

  • +
  • If the user is not known to Codio then we will sign up the user as a new Codio user in the background and take the user directly into the Codio content. The LMS user role will be carried over as well.

  • +
+
+

Note

+

The users LMS password is not passed to Codio so if the user may wish to log into Codio directly in the future, they will need to create a password for their Codio account (and of course it is always recommended that the same passwords are not used in different applications).

+
+
    +
  • If the user is known to Codio then Codio will take them directly into the Codio content without any sign-in required. If they are a Codio user but are not a member of your organization then they will be required to complete a verification via email.

  • +
  • After successful mapping of an user’s LMS account to their Codio account, if the user has changed their details such as name or email in their LMS account, Codio will automatically update those details the next time the user accesses Codio from their LMS. Codio will not update the email if another user with the same email already exists.

  • +
+
+

Teacher Roles

+

Based on the LMS role, if teachers join Codio via the LMS, the following will apply:

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

LMS Role

Will be added to Codio with these rights

Teaching Assistant

TEACHER

Content Developer

TEACHER

Mentor

TEACHER (with read only access to the course}

+

If you wish to only allow Mentors to view/manage specific students in the course, see Filter Learners For Mentors

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/blackboard.html b/docs/instructors/admin/integration/lms-systems/blackboard.html new file mode 100644 index 00000000..61fb51e3 --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/blackboard.html @@ -0,0 +1,900 @@ + + + + + + + + + Blackboard — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Blackboard

+

Please be sure to check out the Codio LTI App which allows for an easy way to integrate and to map Codio course assignments to your LMS system. The following page explains how to set up external apps in Blackboard Learn.

+

In Codio:

+
+

Enable LTI for Your Course

+
    +
  1. Open the course you would like to connect or create a new course.

  2. +
  3. Make sure you have at least one published assignment or add a new one. (see Add and Remove Course Assignments)

  4. +
  5. Select the LTI/LMS tab.

  6. +
  7. Select the ENABLE LTI option.

  8. +
+
+
enable lti +
+
    +
  1. Click Save Changes.

  2. +
+
+

Bring up the LTI Integration Information

+
    +
  1. Click your user name in the bottom left of your dashboard

  2. +
  3. Choose your Organization

  4. +
  5. Click the LTI Integrations tab to bring up the following settings.

  6. +
+
+
Org LTI info +
+
+
+
+

In Blackboard

+

The Blackboard user who carries out these steps must be a Blackboard system administrator.

+
    +
  1. Create a new Course in Blackboard. We suggest you create a test course called Codio Blackboard before you do it with a production course.

  2. +
  3. Look for the System Admin tab near the top right of the page and select it.

  4. +
  5. Look for the Building Blocks section and select it.

  6. +
  7. Click on LTI tool providers.

  8. +
  9. Click on Register Provider Domain in the menu bar.

  10. +
  11. In the Provider Domain field, enter apollo.codio.com.

  12. +
  13. In the Default Configuration section, set Default Configuration to be Set globally.

  14. +
  15. In the Organization Policies section you should

  16. +
  17. set Send User Data to Send user data only over SSL.

  18. +
  19. in User Fields to Send you should set all 3 fields (Constituency in Course, Name, Email Address).

  20. +
+
+
+

In Codio and Blackboard

+
    +
  1. Now return to the Default Configuration section in Blackboard. We will now copy the following global integration fields from Codio to Blackboard.

  2. +
+
    +
  • LTI Consumer -> Tool Provider Key

  • +
  • LTI Secret -> Tool Provider Secret

  • +
+
+

Codio course setup

+

You need to perform the following actions one time only for a course. The Blackboard user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments.

+
    +
  1. In Codio, go to your course and click on the LTI/LMS tab.

  2. +
  3. Go to the LTI/LMS Settings area.

  4. +
  5. At the top is a switch Enable LTI which you should check is enabled.

  6. +
  7. Below this is an empty field Course LMS URL. Switch back to Blackboard and make sure you are on the main the Codio Blackboard course you created earlier. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio.

  8. +
+

This URL ensures that Codio knows how to redirect students back to the correct Blackboard course should they attempt to access the course through their dashboard.

+
+
+

Mapping an assignment to Blackboard Content

+

The final mapping step needs to be taken for each individual assignment within Codio. It maps a piece of Blackboard content to a Codio assignment.

+
+
+
+

In Codio

+
    +
  1. On the main course screen, make sure the Edit Assignments tab is selected.

  2. +
  3. Click the Add Assignment button and select Project Based.

  4. +
  5. Select a project that has some autograded assessments. The My First Project that you created earlier in the Onboarding Guide has some auto-graded assessments. You can also assign another project but you will need to manually grade the assignment so there are some scores to pass back to the Blackboard gradebook.

  6. +
  7. Once the assignment has been added to the course, you should click the icon with 3 blue dots and select LTI Integration URL.

  8. +
  9. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy).

  10. +
+
+Unit URL +
+
+
+

In Blackboard

+

We now return to Blackboard complete the mapping.

+
    +
  1. Make sure you have selected the Blackboard course.

  2. +
  3. Click Content in the left hand menu.

  4. +
  5. Select or hover over Build Content in the menu bar

  6. +
  7. Select Web Link.

  8. +
  9. In the Web Link Information section …

  10. +
  11. Enter a name for the content

  12. +
  13. Paste in the LTI Integration URL that you just copied to the clipboard from Codio

  14. +
  15. Check the box Ths is a link to a tool provider

  16. +
  17. Select Yes for the field Enable Evaulation after which more fields will appear

  18. +
  19. Set the points you want to award for this content (Codio will automatically scale the percentage value it uses to the points you specify here)

  20. +
  21. Save the content settings.

  22. +
+
+

Authentication and account creation

+

To add students/teachers see Users account creation

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/canvas.html b/docs/instructors/admin/integration/lms-systems/canvas.html new file mode 100644 index 00000000..21ea6007 --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/canvas.html @@ -0,0 +1,964 @@ + + + + + + + + + Canvas — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Canvas

+
+

Integrating with Canvas using LTI App

+

This method is recommended.

+

The Codio LTI App method allows for an easy way to integrate and to map Codio course assignments to Canvas. Access the directions at LTI App page. If you are not able to use the LTI App, follow the manual integration directions below.

+
+

Note

+

Configuring your LTI settings using the LTI App is only for the US version of Codio. It will not work with Codio UK (codio.co.uk).

+
+
+
+

Integrating with Canvas Manually

+
+

In Codio

+
+
+

Enable LTI for Your Course

+
    +
  1. Open the course you would like to connect or create a new course.

  2. +
  3. Make sure you have at least one published assignment or add a new one. (see Add and Remove Course Assignments)

  4. +
  5. Select the LTI/LMS tab.

  6. +
  7. Select the ENABLE LTI option.

  8. +
+
+
enable lti +
+
    +
  1. Click Save Changes.

  2. +
+
+
+

Bring up the LTI Integration Information

+
    +
  1. Click your user name in the bottom left of your dashboard

  2. +
  3. Choose your Organization

  4. +
  5. Click the LTI Integrations tab to bring up the following settings.

  6. +
+
+
Org LTI info +
+
+
+

In Canvas, adding Codio as an App

+

The Canvas user who carries out these steps must be a system administrator.

+
    +
  1. Create a new Course in Canvas. We suggest you create a test course called Codio Canvas before you do it with a production course.

  2. +
  3. Select the Course.

  4. +
  5. Click on Settings in the left set of options.

  6. +
  7. In the top links, select Apps.

  8. +
  9. Click the large button View App Configurations.

  10. +
  11. Click on the blue + App button.

  12. +
+
+
+

In Codio and Canvas

+
    +
  1. We will now copy the following global integration fields from Codio to Canvas.

  2. +
+
    +
  • LTI Consumer -> Consumer Key

  • +
  • LTI Secret -> Shared Secret

  • +
  • LTI URL -> Launch URL

  • +
+
    +
  1. In Canvas you should then use one of the following steps:

  2. +
+
+
+

Option 1: By URL

+
    +
  • Enter a suitable name (Codio Canvas LTI) in the Name field.

  • +
  • In Codio select the Copy Consumer button to copy in to the Consumer Key field.

  • +
  • Select the Copy Secret Key to copy in to the Shared Secret field.

  • +
  • Select the Copy XML URL to copy in the to the Config URL field.

  • +
  • Submit

  • +
+
+
+

Option 2: Paste XML

+
    +
  • Enter a suitable name (Codio Canvas LTI) in the Name field.

  • +
  • In Codio select the Copy Consumer button to copy in to the Consumer Key field.

  • +
  • Select the Copy Secret Key to copy in to the Shared Secret field.

  • +
  • Click on the XML Configuration link to open the XML and then copy in the to the XML Configuration field.

  • +
  • Submit.

  • +
+
+
+

Option 3: Manual Entry

+
    +
  • Paste the 3 keys above into the appropriate fields.

  • +
  • Enter a suitable name (Codio Canvas LTI) in the Name field.

  • +
  • Enter apollo.codio.com into the Domain field.

  • +
  • In the Privacy field, select Public.

  • +
+

You should end up with something like this.

+
+Canvas Global +
+
+
+
+

Course LMS URL

+

This URL ensures that Codio knows how to redirect students back to the correct Canvas course should they attempt to access the course through their dashboard. You need to perform the following actions one time only for a course. The Canvas user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments.

+
    +
  1. In Codio, go to your course and click on the LTI/LMS tab.

  2. +
  3. Go to the LTI/LMS Settings area.

  4. +
  5. At the top is a switch Enable LTI which you should check is enabled.

  6. +
  7. Below this is an empty field Course LMS URL. Switch back to Canvas and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio. The url format should end with something like /courses/1121212 although the number will be different.

  8. +
+
+
+

Mapping an Assignment to a Canvas Assignment

+

The final mapping step needs to be taken for each individual assignment within Codio. It maps a Canvas assignment to a Codio assignment.

+
+

In Canvas

+
    +
  1. Make sure you are in the Courses area.

  2. +
  3. Click on the Assignments link in the left hand side.

  4. +
  5. Provide a name for the Assignment.

  6. +
  7. Set the points for the Assignment. When the grades get passed back later, the Codio percentage score will be scaled to the points value you specify here.

  8. +
  9. Scroll down and look for the Submission Type field.

  10. +
+
+Canvas Submission +
+
    +
  1. You should now click on the dropdown list and select External Tool.

  2. +
  3. Specify the assignment using one of the two options:

  4. +
+
+
    +
  • Add by Resource Selection Preview (recommended)

    +
    +
      +
    • Click the Find button.

    • +
    • Click the Codio tool.

    • +
    • Select the assignment you want to map to your course in Canvas.

    • +
    +
    +
  • +
  • Add by LTI Integration URL

    +
    +
      +
    • Return to Codio and navigate to the course. Ensure you are in Teach mode.

    • +
    • To the right of the assignment, click the icon with 3 blue dots and select LTI Integration URL. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy).

    • +
    • Paste the LTI Integration URL in the URL field under Enter or find an External Tool URL.

    • +
    +
    +
  • +
+
+
    +
  1. Select Load This Tool In a New Tab.

  2. +
  3. Click the Save and Publish button.

  4. +
  5. Make sure the Canvas course is published.

  6. +
+
+
+
+

Common Cartridge

+

In the Canvas course you have created go to Settings and Import Course Content and select Common Cartridge 1 x Package and proceed to upload the .ismcc file.

+

If using the Common Cartridge file to import the Codio course assignment details into Canvas, each assignment needs mapping as above using the Add by Resource Selection Preview (recommended) method noted above.

+
+
+

Authentication and account creation

+

To add students/teachers see Users account creation

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/d2l.html b/docs/instructors/admin/integration/lms-systems/d2l.html new file mode 100644 index 00000000..64f32006 --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/d2l.html @@ -0,0 +1,950 @@ + + + + + + + + + D2L — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

D2L

+
+

Creating an Admin level external tool

+
    +
  1. From the Manage Tool Provider tab select New Tool Provider

  2. +
+
+Create an admin tool in D2L +
+
    +
  1. For the Launch Point type in https://apollo.codio.com and fill out the next two fields as depicted below.

  2. +
+
+The Launch Point information +
+
    +
  1. Fill in the Consumer and Secret fields with those values provided by Codio (see instructions below)

  2. +
+
+Consumer and Secret +
+
    +
  1. Type Codio in the Name field and you can leave the Description and Contact Email fields empty.

  2. +
  3. The Visibility field “Allow users to use this tool provider” should remain checked.

  4. +
  5. For the Security Settings check off everything as depicted further down in this document.

  6. +
  7. Add Org units as necessary for your installation.

  8. +
  9. Save and Close

  10. +
  11. When the instructor wants to create a New Link in D2L (see below), they will use the LTI Integration link from the corresponding assignment in Codio.

  12. +
+
+Assigment URL +
+
+
+

Creating a course level tool

+

In Codio:

+
+

Enable LTI for Your Course

+
    +
  1. Open the course you would like to connect or create a new course.

  2. +
  3. Make sure you have at least one published assignment or add a new one. (see Add and Remove Course Assignments)

  4. +
  5. Select the LTI/LMS tab.

  6. +
  7. Select the ENABLE LTI option.

  8. +
+
+
enable lti +
+
    +
  1. Click Save Changes.

  2. +
+
+
+

Bring up the LTI Integration Information

+
    +
  1. Click your user name in the bottom left of your dashboard.

  2. +
  3. Choose your Organization.

  4. +
  5. Click the LTI Integrations tab to bring up the following settings.

  6. +
+
+
Org LTI info +
+

In D2L:

+
+ +
+

Connect your D2L Modules to your Codio Assignments

+
    +
  1. Select the Content tab from the top of the page.

  2. +
  3. Add a new module in your D2L course.

  4. +
  5. Select Add Existing Activities (1) -> External Learning Tools (2)

  6. +
+
+
D2L view 3 +
+
    +
  1. From the list of available LTI links, select the Codio tool you created earlier.

  2. +
  3. Click on the Codio link to bring up all the Codio courses for which you have enabled LTI.

  4. +
  5. Select the Codio assignment you want to connect.

  6. +
  7. Refresh your page to view the rendered connection. You will see the Teacher view of the course with the connected assignment selected. Students will see the assignment opened in student mode.

    +
    +
    +

    Note

    +

    Grade items in D2L are associated with the external tool and as such each assignment will write to the same Grade item. To get around this you can either import your grades using a .csv file or use LTI 1.3.

    +
    +
    +
  8. +
+
+
+
+

Common Cartridge

+

If using the Common Cartridge file you should first set up an External Tool in Brightspace with the LTI Key’s and URL’s for your organization.

+

When done then in the Brightspace course you have created go to Course Admin and Import/Export/Copy Components and Import Components and proceed to upload the .ismcc file.

+

When completed, View Content and then External Learning Tools where you will see all the assignments listed.

+

Then go to Content, select Existing Activities, External Learning Tools, select your assignment from the list to add as an activity to the course. Repeat for each Codio assignment you wish to create an activity for

+
+
+

Single sign-in and account creation

+

Codio maps D2L users to Codio users by using the D2L email address to identify the user and create the Codio account. In all subsequent access, the D2L userID will be used. In the event the user changes their email address in D2L, the user will be mapped to the same Codio account.

+
    +
  • If the user does not have a Codio account, a new user account will be created in the background and the user will enter directly into the Codio content. The D2L user role is carried into Codio.

  • +
  • If the user already has an account they will enter into the Codio content without any sign-in required. If they already have a Codio account, but are not a member of the organization, they will be required to complete an email verification.

  • +
+
+
+

Teacher Roles

+

Based on the LMS role, if teachers join Codio via the LMS, the following will apply:

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

LMS Role

Will be added to Codio with these rights

Teaching Assistant

TEACHER

Content Developer

TEACHER

Mentor

TEACHER (with read only access to the course}

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/google-classroom.html b/docs/instructors/admin/integration/lms-systems/google-classroom.html new file mode 100644 index 00000000..f7ef81ea --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/google-classroom.html @@ -0,0 +1,860 @@ + + + + + + + + + Google Classroom — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Google Classroom

+

Integrating Google Classroom is very easy to do. ​

+
+

Setting up Integration

+
+

In Google Classroom

+
+
    +
  1. Create a Class.

  2. +
+
+
+
+

In Codio

+
+
    +
  1. Go to the LTI/LMS area in the course you wish to integrate to Google Classroom.

  2. +
  3. Select Connect to Google Classroom and authenticate to your Google account.

  4. +
+
+Connect to Google +
+
    +
  1. When authenticated you will be redirected to the Classes List page and will see a list of your Google Classes.

  2. +
  3. Select Connect Class button for the Google class you wish to connect your Codio course to. ​

  4. +
+

Connect to Codio

+

Your Codio Course is now integrated with your Google Class.

+
+
+

Note

+

Google classrooms do not support the ordering of modules/assignments from the Codio Course, they will be generated randomly but can easily be reordered from the Classwork tab in your Google Class

+
+
+
+

Authentication and account creation

+
    +
  1. To add students/teachers see Users account creation

  2. +
+
+
+
+

Updating

+

If assignments/modules are added/removed in the Codio Course, to update to your Google Classroom:

+
    +
  1. Go to the LTI/LMS area in the course

  2. +
  3. Select Update Google Classroom to update

  4. +
+

As above, be aware that this may change the ordering in your Google classroom so review and reorder as required from the Classwork tab

+
+
+

Removing

+
    +
  1. To remove the integration link between Codio and your Google Classroom ​

  2. +
+
    +
  • Go to the LTI/LMS area in the course

  • +
  • Select Remove Google Classroom to update

  • +
+
+

Note

+

Removing the integration link will mean students will not be able to access any of their assignments any longer from Google Classroom

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/moodle.html b/docs/instructors/admin/integration/lms-systems/moodle.html new file mode 100644 index 00000000..99306d0a --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/moodle.html @@ -0,0 +1,826 @@ + + + + + + + + + Moodle — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Moodle

+

Please be sure to check out the Codio LTI App which allows for an easy way to integrate and to map Codio course assignments to your LMS system. Moodle added support for LTI™ apps in version 2.2. The following page explains how to set up external apps in Moodle.

+
+

Setup and configuration

+
+

Important

+

Codio needs the User Role, Email Address and Name of the Moodle user in order to work. It is important that you access the LTI security settings and ensure that these three fields are always enabled. If they are not available, contact Moodle support who can help you enable this. If enabled after you have mapped Codio content to Moodle, you may need to re publish for the changes to be implemented

+
+

Video: Connect Moodle to Codio using the LTI Integration URL

+
+
+

Common Cartridge

+

If using the Common Cartridge file you should first set up an External Tool in Moodle with the LTI Key’s and URL’s for your organisation. +When done then in the Moodle course you have created:

+
    +
  • go to the course settings and Restore,

  • +
  • select the .ismcc to upload it and proceed to restore,

  • +
  • and Restore into this Course.

  • +
  • Proceed through the steps.

  • +
+
+

Note

+

It is Restore that is required as Moodle currently does not support importing of .imscc files

+
+

When completed, you can check all is correct by then selecting any of the assignments listed in Moodle. If all OK you will be taken to the Teacher view of the assignment in Codio

+
+
+

Authentication and account creation

+

To add students/teachers see Users account creation

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/schoology.html b/docs/instructors/admin/integration/lms-systems/schoology.html new file mode 100644 index 00000000..317506dd --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/schoology.html @@ -0,0 +1,907 @@ + + + + + + + + + Schoology — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Schoology

+
+

Enable LTI for Your Course

+
+

In Codio

+

The Schoology system administrator should install a Codio external tool for the course so that it is quick and easy for instructors to add material. The Schoology system administrator should follow these directions to install Codio as an external tool:

+
    +
  1. Open the course you would like to connect or create a new course.

  2. +
  3. Make sure you have at least one published assignment or add a new one. (see Add and Remove Course Assignments)

  4. +
  5. Select the LTI/LMS tab.

  6. +
  7. Select the ENABLE LTI option.

  8. +
  9. Select the ENABLE LTI CONSTANT URLS option.

  10. +
  11. Note the Codio Course Target ID, you will need that in subsequent steps.

  12. +
  13. Click Save.

  14. +
+
+
enable lti and urls +
+
+
+
+

Bring up the LTI Integration Information

+
    +
  1. Click your user name in the bottom left of your dashboard.

  2. +
  3. Select your Organization.

  4. +
  5. Click the LTI Integrations tab to bring up the following settings. You will need to enter these into Schoology in the subsequent steps.

  6. +
+
+
Org LTI info +
+
+

In Schoology

+
    +
  1. In your System Administrator account, click Tools in the header.

  2. +
  3. Select School Management.

  4. +
  5. Click Integration on the left.

  6. +
  7. Click External Tools.

  8. +
  9. Click Add External Tool Provider and fill out the form:

  10. +
+
+
External Tool Form +
+
    +
  • Tool name: this is the name educators see when adding external tools to their courses, so call this Codio

  • +
  • Consumer Key: this is the LTI consumer key from Codio (reference step 10 above)

  • +
  • Shared Secret: this is the LTI secret key from Codio (reference step 10 above)

  • +
  • Privacy: Schoology suggests Name and email of the user who launches the tool

  • +
  • Configuration Type: choose Manual > Matchy By > URL

  • +
  • Domain/URL: this is the XML URL from Codio (reference step 10 above)

  • +
  • Custom Parameters: this is the Codio Course Target ID from Codio (reference step 6 above)

    +
    +

    Note

    +

    If you are teaching more than one course in Codio, your system administrator will need to enter each course’s Codio Course Target ID in the Custom Parameters field. Each Codio Course Target ID should be on a new line.

    +
    +
  • +
+
    +
  1. Click submit.

  2. +
+
+
+
+

Mapping an Assignment to a Schoology Assignment

+
+

In Schoology

+

Once the system administrator has configured the external tool at the system level, return to your Materials page in Schoology. Then, to add the tool into your course:

+
    +
  1. Click Add Materials.

  2. +
  3. Select Add File/Link/External Tool.

  4. +
  5. Select External Tool.

  6. +
  7. Enter the required information in the External Tool Form:

  8. +
+
    +
  • Tool Provider: select Codio if it has been configured beforehand

  • +
  • Title: name your assignment

  • +
  • URL: you will need to go back into Codio for this information (see steps 21-24 below)

    +Add External Tool +
  • +
+
+
+

In Codio

+
    +
  1. Navigate to the course you would like to integrate with Schoology and go to the Overview area.

  2. +
  3. Click the icon with 3 blue dots for each assignment you wish to map and select LTI Integration URL. Select the clipboard to copy the link.

    +
    +Unit URL +
    +
  4. +
+
+
+

Note

+

If you would like to access all the LTI integration URLs at once, navigate to the course, then the LTI/LMS in the Admin section. Select Assignment URLS and a CSV will download that provides the information for the course in one place.

+
+
+
+
+

In Schoology

+
    +
  1. Go back to Schoology and paste the LTI Integration URL into the URL field of the Add External Tool form from step 20.

  2. +
  3. You can enable grading on external tool items which adds the material to your Gradebook so that you can assign a grade for each student who completes the assignment launched via the external tool.

  4. +
+
+
+

Note

+

LTI and external tool materials that have grading enabled in Schoology do not trigger submission notifications, grading reminders, or overdue notifications because Schoology does not automatically detect submissions from external tools.

+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lms-systems/system-specific-directions.html b/docs/instructors/admin/integration/lms-systems/system-specific-directions.html new file mode 100644 index 00000000..58627ae9 --- /dev/null +++ b/docs/instructors/admin/integration/lms-systems/system-specific-directions.html @@ -0,0 +1,810 @@ + + + + + + + + + System specific instructions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

System specific instructions

+
+
+
+
Select your LMS below to access directions for integration:
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti-app.html b/docs/instructors/admin/integration/lti-app.html new file mode 100644 index 00000000..161cef58 --- /dev/null +++ b/docs/instructors/admin/integration/lti-app.html @@ -0,0 +1,932 @@ + + + + + + + + + LTI App — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI App

+
+

Note

+

To use the LTI App, your email address in Codio and your LMS system must match exactly.

+

The LTI App is only for the US version of Codio. It will not work with Codio UK (codio.co.uk).

+
+

The Codio LTI App method allows for an easy way to integrate and to map Codio course assignments to your LMS system.

+

Please note the steps below are for implementation in Canvas. For details on other supported systems see https://www.eduappcenter.com/tutorials.

+

Video - Connect Codio to Canvas using the LTI App:

+
+

In Codio

+
    +
  1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within Organizations.

  2. +
  3. Select the LTI Integrations tab.

  4. +
  5. Scroll down to the LTI Integration 1.0 section. You should see the following fields. Remain on this screen for the time being.

  6. +
+
+LTI Fields +
+
+
+

In Canvas

+

The Canvas user who carries out these steps must be a system administrator.

+
    +
  1. Create a new Course in your LMS system. We suggest you create a test course called Codio Test Course before you do it with a production course.

  2. +
  3. Select the Course.

  4. +
  5. Click on Settings in the left set of options.

  6. +
  7. In the top links, select Apps.

  8. +
  9. Click the large button View App Configurations.

  10. +
  11. Click on the View App Center button.

  12. +
+
+appcenter +
+
    +
  1. Navigate (or filter) to find the Codio app, select and + Add App

  2. +
+
+
+

In Codio and Canvas

+
    +
  1. We will now copy the following global integration fields from Codio to Canvas.

  2. +
+
    +
  • LTI Consumer -> Consumer Key

  • +
  • LTI Secret -> Shared Secret

  • +
+
    +
  1. and select the Add App button to confirm. You should then have something similar to this:

  2. +
+
+appconfigured +
+
+

Course LMS URL

+

The Course LMS URL is used to map an LMS course to a Codio course. It ensures that Codio knows how to redirect students back to the correct course should they attempt to access the course through the Codio dashboard. If not entered and students log into Codio to try to start new assignments there will be no link for them to click to be passed to your LMS Course. The LMS user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments.

+

Video - Course LMS URL:

+
    +
  1. In Codio, go to the LTI/LMS tab near the top.

  2. +
  3. Go to the LTI/LMS Settings section.

  4. +
  5. Select Enable LTI to enable.

  6. +
  7. Below this is an empty field Course LMS URL. Switch back to your LMS and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio.

  8. +
+
+lti-class-url +
+
+

Hiding not started assignments in students dashboard

+

Toggling Hide Not Started Assignments to on will suppress the display of assignments that haven’t been started in the student dashboard. Students will need to log into their LMS system to start new assignments. Students may not realize they need to go back to their LMS system to start a new assignment when they don’t see them in Codio. If you don’t hide assignments that haven’t been started you can use the Course LMS URL which will provide them with a link back to their LMS system to start the assignment.

+
+Hide not started assignments +
+
+
+

Filter learners for mentors

+

Enabling Filter Learners for Mentors to on will allow you to only show Mentor/Observers specific students that you wish them to see/manage in the Codio course.

+

To set this up, edit your LTI app as set up above or send as a custom parameter adding codio_custom_mentor_for as a custom field entering as the parameter either the students email addresses or their LMS user IDs. To enter multiple students separate with comma (‘,’)

+

Example:

+
codio_custom_mentor_for="student1@email.com,student2@email.com"
+
+
+
+Filter learners for mentors +
+

If you don’t enable Filter Learners for Mentors, then mentors can see all the students in the course and access all students’ work, even those for whom they are not a mentor.

+
+
+
+
+
+

Mapping an Assignment to a Canvas Assignment

+

The final mapping step needs to be taken for each individual assignment within Codio. It maps a Canvas assignment to a Codio assignment.

+
+

In Canvas

+
    +
  1. Make sure you are in the Courses area.

  2. +
  3. Click on the Assignments link in the left hand side.

  4. +
  5. Provide a name for the Assignment.

  6. +
  7. Set the points for the Assignment. When the grades get passed back later, the Codio percentage score will be scaled to the points value you specify here.

  8. +
  9. Scroll down and look for the Submission Type field.

  10. +
+
+Canvas Submission +
+
    +
  1. You should now click on the dropdown list and select External Tool.

  2. +
  3. Specify the assignment using one of the two options:

  4. +
+
+
    +
  • Add by Resource Selection Preview (recommended)

    +
    +
      +
    • Click the Find button.

    • +
    • Click the Codio tool.

    • +
    • Select the assignment you want to map to your course in Canvas.

    • +
    +
    +
  • +
  • Add by LTI Integration URL

    +
    +
      +
    • Return to Codio and navigate to the course. Ensure you are in Overview mode.

    • +
    • To the right of the assignment, click the icon with 3 blue dots and select LTI Integration URL. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy).

    • +
    • Paste the LTI Integration URL in the URL field under Enter or find an External Tool URL.

    • +
    +
    +
  • +
+
+
    +
  1. Select Load This Tool In a New Tab.

  2. +
  3. Click the Save and Publish button.

  4. +
  5. Make sure the Canvas course is published.

  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti-course-copy.html b/docs/instructors/admin/integration/lti-course-copy.html new file mode 100644 index 00000000..8d50d7da --- /dev/null +++ b/docs/instructors/admin/integration/lti-course-copy.html @@ -0,0 +1,837 @@ + + + + + + + + + LTI Course copy — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI Course copy

+

Enabling this setting allows existing Codio course content used in your LMS to be copied into a new Codio course and a new course in your LMS. This should be enabled for the courses connected with the “Master” course in your LMS. The parameter will be disabled by default for for all copied courses.

+

Video - LTI Course Copy:

+
+

Note

+

the screenshots below are for implementation in Canvas but other LMS systems should be similar. Refer to their documentation for more assistance

+
+

First enable LTI Constant URLs for your course.

+
    +
  1. In your existing Codio course, enable the Enable LTI course copy button, and save your changes

  2. +
+
+Enable course copy field +
+
    +
  1. In your LMS “Copy this Course” (or equivalent term for your LMS) and create your new course

  2. +
+
+Copy LMS Course +
+
    +
  1. When completed go to External Apps and edit the existing app connecting Codio to your LMS

  2. +
  3. Replace the existing custom field that was set from your original Codio course with an id of your own (e.g something like codio_class_target_id=my_class_id_10)

  4. +
+
+

Note

+

If your LMS supports lis_course_offering_sourcedid you do not need to specify codio_class_target_id for the copied course, lis_course_offering_sourcedid will be used automatically to detect the course. For cases when lis_course_offering_sourcedid is needed for course copy but not available due to privacy settings in Canvas, a custom parameter custom_codio_course_offering_sourcedid=$CourseOffering.sourcedId can be tried.

+
+
+course fork id +
+
    +
  1. In your existing Codio course, copy the content of the LTI course copy enabled field into a new line in the ‘Edit App’ custom field

  2. +
+
+Parent course ID +
+
    +
  1. Submit

  2. +
  3. In the new course created in your LMS, open one of the new assignments and this will then create the new course in Codio containing the content from your original Codio course.

  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti-keys-and-urls-information.html b/docs/instructors/admin/integration/lti-keys-and-urls-information.html new file mode 100644 index 00000000..479e67b2 --- /dev/null +++ b/docs/instructors/admin/integration/lti-keys-and-urls-information.html @@ -0,0 +1,882 @@ + + + + + + + + + LTI Keys and URLs — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI Keys and URLs

+

This page provides an overview of some of the key settings allowing for LTI integration. For more specific directions, access your LMS under system-specific directions.

+
+

LTI Constant URLs

+

Enabling this setting enables constant URL for course assignments, course detection will be done based on the custom parameter your LMS should pass.

+

Constant URL’s allows the transfer of learning content without modifying LTI links and they are also required if you wish to copy Codio courses and LMS Courses. See LTI Course Copy for more on this.

+

Video - LTI Constant URL:

+
+

Note

+

the screenshots below are for implementation in Canvas but other LMS systems should be similar. Refer to their documentation for more assistance

+
+
    +
  1. Create an External app in your LMS using the configuration type: By URL.

  2. +
+
+LTI URL config +
+
    +
  1. Enter in the Consumer Key and Shared Secret from your Codio organization.

  2. +
+
+LTI Fields +
+
    +
  1. Copy the XML URL into the Config URL field.

  2. +
  3. Submit.

  4. +
  5. Return to your Codio course and enable the Enable LTI constant URL’s button, and save your changes.

  6. +
  7. Copy the LTI constant URL’s enabled link.

  8. +
+
+

Note

+

If your LMS supports it, lis_course_offering_sourcedid is also supported as a unique course identifier so you can replace``codio_class_target_id`` if required. For cases when lis_course_offering_sourcedid is needed for course copy but not available due to privacy settings in Canvas, a custom parameter custom_codio_course_offering_sourcedid=$CourseOffering.sourcedId can be tried.

+
+
+Enable Constant URL +
+
    +
  1. Return to your LMS external app and ‘edit’.

  2. +
  3. Paste the LTI constant URL’s enabled link into the Custom Field.

  4. +
  5. Submit.

  6. +
+
+
+

LTI Keys

+

LTI Keys are used to integrate your LMS to Codio. These keys are required by your LMS administrator one time only so that Codio can be added as an LTI provider. Once Codio has been added as an LTI provider, you will not need them again and the remaining actions can be completed by LMS users who have Teacher/Instructor permissions. LTI keys are accessible to Codio Organization Owners only.

+

To find these keys:

+

1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within +Organizations. +2. Select the LTI Integrations tab. +3. Scroll down to the LTI Integration 1.0 section. You should see the following fields.

+
+lti-keys +
+
+
+

Course LMS URL

+

The Course LMS URL is used to map an LMS course to a Codio course. It ensures that Codio knows how to redirect students back to the correct course should they attempt to access the course through the Codio dashboard.

+

The LMS user who carries out these steps does not need to be a system administrator but must have suitable privileges to edit courses and assignments.

+
    +
  1. In Codio, go to the LTI/LMS section.

  2. +
  3. At the top is a switch Enable LTI which you should enable.

  4. +
  5. Below this is an empty field Course LMS URL. Switch back to your LMS and make sure you are on the Home page of the course. Copy the url in the address bar of your browser to the clipboard and paste it into the above mentioned field in Codio.

  6. +
  7. Save your changes.

  8. +
+
+lti-class-url +
+
+
+

LTI Integration Assignment URLs

+

The Assignment URL is needed to map each individual assignment within your Codio course to the corresponding assignment in your LMS. It directs a student to the correct Codio assignment and will automatically open the Codio assignment.

+
    +
  1. On the main course screen, click the icon with 3 blue dots for each of the assignments you wish to map and select LTI Integration URL.

  2. +
  3. You should copy the LTI integration url to the clipboard by clicking on the field (it will auto copy).

  4. +
+
+Assigment URL +
+
+

Note

+

The LTI integration URLs for the assignments in a course can be exported. Select the course, go to the LTI/LMS tab, and press the Assignment URLS button and a CSV will download that provides the information for the course in one place.

+
+
    +
  1. Complete the mapping in your LMS.

  2. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti1-3.html b/docs/instructors/admin/integration/lti1-3.html new file mode 100644 index 00000000..14a1cb58 --- /dev/null +++ b/docs/instructors/admin/integration/lti1-3.html @@ -0,0 +1,882 @@ + + + + + + + + + LTI version 1.3 — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI version 1.3

+

LTI version 1.3 improves upon version [LTI-1.1] by moving away from the use of OAuth 1.0a-style signing for authentication and towards a new security model, using OpenID Connect, signed JWTs, and OAuth2.0 workflows for authentication. As we have implemented the majority of these improvements already in Codio, we recommend using the LT1 1.1 integration instead of 1.3 unless your LMS specifically requires it, since it is much easier to set up using the Codio LTI App.

+

For more information, see Learning Tools Interoperability Core Specification

+

The deep linking url is : https://apollo.codio.com/lti/resource_selection

+
+

Canvas

+

See this page for written instructions:

+

LTI 1.3 integration for Canvas

+

There are a number of ways to integrate Codio with Canvas with LTI 1.3. Check out the following videos to see the option that best suits you.

+
+

How to configure lti1.3 tool in Canvas manually - part 1

+
+
+

How to configure lti1.3 tool in Canvas manually -part 2

+

The platform ID is https://canvas.instructure.com, but Public Keyset URL, Access Token URL and Authentication Request URL depend on each institution’s unique Canvas domain URL.

+
+
+
Public Keyset URL: https://[CANVAS DOMAIN]/api/lti/security/jwks
+
Access Token URL: https://[CANVAS DOMAIN]/login/oauth2/token
+
Authentication Request URL: https://[CANVAS DOMAIN]/api/lti/authorize_redirect
+
+
+
+
+

How to configure lti1.3 tool in Canvas by paste json object

+

The platform ID is https://canvas.instructure.com, but Public Keyset URL, Access Token URL and Authentication Request URL depend on each institution’s unique Canvas domain URL.

+
+
+
Public Keyset URL: https://[CANVAS DOMAIN]/api/lti/security/jwks
+
Access Token URL: https://[CANVAS DOMAIN]/login/oauth2/token
+
Authentication Request URL: https://[CANVAS DOMAIN]/api/lti/authorize_redirect
+
+
+
+
+

How to configure lti1.3 tool in Canvas by paste json url

+

The platform ID is https://canvas.instructure.com, but Public Keyset URL, Access Token URL and Authentication Request URL depend on each institution’s unique Canvas domain URL.

+
+
+
Public Keyset URL: https://[CANVAS DOMAIN]/api/lti/security/jwks
+
Access Token URL: https://[CANVAS DOMAIN]/login/oauth2/token
+
Authentication Request URL: https://[CANVAS DOMAIN]/api/lti/authorize_redirect
+
+
+
+
+

Connecting/mapping assignments in Canvas

+

There are also a number of ways you can connect/map assignments. Check out the following videos to see the option that best suits you.

+
+
+

How to connect assignment by lti integration url of assignment

+
+
+

How to connect assignment by resource selection preview

+
+
+

How to connect assignment by endpoint url

+
+
+

How to connect assignment with custom param

+

If you require any assistance, please don’t hesitate to contact us

+
+
+
+

Moodle

+
+

How to configure lti1.3 tool in Moodle manually

+
+
+

Connecting/mapping assignments in Moodle

+

There are a number of ways you can connect/map assignments. Check out the following videos to see the option that best suits you.

+
+
+

How to connect assignment by lti integration url

+
+
+

How to connect assignment by resource selection preview

+
+
+

How to connect assignment by endpoint url

+
+
+

How to connect assignment with custom param

+

If you require any assistance, please don’t hesitate to contact us

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti1-3BS-D2L.html b/docs/instructors/admin/integration/lti1-3BS-D2L.html new file mode 100644 index 00000000..9e843a16 --- /dev/null +++ b/docs/instructors/admin/integration/lti1-3BS-D2L.html @@ -0,0 +1,895 @@ + + + + + + + + + LTI 1.3 for Brightspace/D2L — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI 1.3 for Brightspace/D2L

+
+

In Brightspace - Register a Tool

+

The following is created in Manage Extensibility, LTI Advantage - Register a Tool, select Standard. +1. Name - Codio +2. In the Domain field enter - https://apollo.codio.com

+
+

Access LTI Integration settings in Codio

+
    +
  1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within Organizations.

  2. +
  3. Select the LTI Integrations tab.

  4. +
  5. Scroll down to the LTI Integration 1.3 section. You should see the following fields. Remain on this screen for the time being.

  6. +
+
+
The LTI 1.3 area of your LTI Integrations settings for your organization.
LTI 1.3 settings in Codio +
+
+
+
+

Copy fields from Codio to Brightspace/D2L

+
    +
  1. Copy Initiate Login URL to the OpenID Connect Login URL field.

  2. +
  3. Copy Redirect URL to the Redirect URL field.

  4. +
  5. Copy Keyset URL to the Keyset URL field.

  6. +
  7. In the Extensions section enable Assignment and Grader Services, Deep Linking and Names and Role Provisioning Services.

  8. +
  9. Press Register - leave the pop-up on the screen, you will be copying values from it.

  10. +
+
+
+

Add the Integration you created

+
    +
  1. In Codio on the LTI Integrations screen scroll down to the LTI 1.3 Configurations field and click Add Integration

  2. +
+
+
LTI 1.3 Configurations +
+
    +
  1. From the pop-up in Brightspace/D2L copy the Issuer ID and place in the PLATFORM ID field

  2. +
+
+
LTI 1.3 Platform information in Codio +
+
+
+

Copy fields from Brightspace/D2L pop-up to Codio

+
    +
  1. Copy the Client ID to the Client ID field in Codio.

  2. +
  3. Copy the Keyset URL to Public Keyset URL field.

  4. +
  5. Copy the Brightspace OAuth2 Access Token URL to the Access Token URL field in Codio

  6. +
  7. Copy the OpenID Connect Authentication Endpoint to the Authentication Request URL field in Codio

  8. +
  9. Click on View Deployments and create a New Deployment

  10. +
  11. In the Tool field select the tool you just created

  12. +
  13. Name it Codio Deployment or something similar.

  14. +
  15. Toggle Open as External Resource if you want to open the tool in a new tab, otherwise it will open as an iFrame.

  16. +
  17. Toggle Grades created by LTI will be included in Final Grade if you are using grades passed from Codio.

  18. +
  19. Add Org Units as you need for your setup.

  20. +
  21. Click Create Deployment.

  22. +
  23. Copy the deployment ID that is generated and paste it into Codio into the Deployment ID field.

  24. +
  25. Click Create in Codio.

  26. +
+
+ +
+
+

Connect Brightspace/D2L and Codio assignments

+

The final mapping step needs to be taken for each individual assignment within Codio. It maps a Brightspace/D2L assignment to a Codio assignment.

+
+

In Brightspace/D2L

+
    +
  1. Select the Content tab from the top of the page.

  2. +
  3. Add a new module in your D2L course.

  4. +
  5. Select Add Existing Activities

  6. +
  7. From the list of available LTI links, select the Codio tool you created earlier.

  8. +
  9. Click on the Codio link to bring up all the Codio courses for which you have enabled LTI.

  10. +
  11. Select the Codio assignment you want to connect.

  12. +
+
+
+
+

LTI Course copy for Brightspace/D2L

+

Enabling this setting allows existing Codio course content used in your LMS to be copied into a new Codio course and a new course in your LMS. This should be enabled for the courses connected with the “Master” course in your LMS. The parameter will be disabled by default for for all copied courses.

+

First enable LTI Constant URLs for your course.

+
    +
  1. In your existing Codio course, enable the Enable LTI course copy button, and save your changes

  2. +
+
+Enable course copy field +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/integration/lti1-3Canvas.html b/docs/instructors/admin/integration/lti1-3Canvas.html new file mode 100644 index 00000000..e329e258 --- /dev/null +++ b/docs/instructors/admin/integration/lti1-3Canvas.html @@ -0,0 +1,1023 @@ + + + + + + + + + LTI 1.3 for Canvas — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

LTI 1.3 for Canvas

+

See this page for a video demonstration:

+

LTI 1.3 integration

+
+

Part 1: In Canvas - Create a Developer Key

+

The Canvas user who carries out these steps must be a system administrator.

+
+

In Codio:

+
    +
  1. Go to your organization account settings by clicking on your user name in the bottom left of your dashboard and then selecting your organization within Organizations.

  2. +
  3. Select the LTI Integrations tab.

  4. +
  5. Scroll down to the LTI Integration 1.3 section; you should see the following fields. Keep this page open.

  6. +
+
+
LTI 1.3 settings in Codio +
+
+
+

In Canvas:

+
    +
  1. Select Admin -> Developer Keys.

  2. +
  3. Click on +Developer Key and select +LTI key.

  4. +
+
+
Creating a Canvas Developer key +
+
    +
  1. Complete the Key Name, Title and Description fields.

  2. +
  3. From Codio, under LTI 1.3 Integration, copy the LTI URL and paste it into the Target Link URI field in Canvas.

  4. +
  5. From Codio copy the Initiate Login URL and paste it into the OpenID Connect Initiation URL.

  6. +
  7. Copy the Redirect URL and paste it into the Canvas Redirect URI field.

  8. +
+
+
Adding the Developer key values +
+
    +
  1. In Canvas, change JWK Method to Public JWK URL.

  2. +
  3. From Codio, copy the Keyset URL and paste it into the Public JWK URL field.

  4. +
+
+
JWK URL +
+
    +
  1. Expand the LTI Advantage Services section and toggle each field on.

  2. +
  3. Expand the Additional Settings section

  4. +
+
    +
  • Type codio.com in both the Domain and Tool Id fields.

  • +
  • Select the Privacy level as Public.

    +LTI Advantage Services +
  • +
+

14. Scroll down to the Placements field. You can add a placement by starting to type the name and then selecting it when it appears. +Placements that should be included (remove any others): Link Selection, Editor Button, Assignment Selection and Course Navigation.

+
+
LTI Placements +
+
    +
  1. Expand each of the following fields, and copy the static links below:

  2. +
+
    +
  • +
    Link Selection
      +
    • Select LtiDeepLinkingRequest

    • +
    • Target Link URI: https://apollo.codio.com/lti/resource_selection

    • +
    • Icon Url: https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png

    • +
    +
    +
    +Link Selection +
  • +
  • +
    Editor button
      +
    • Target Link URI: https://apollo.codio.com/lti/editor_button

    • +
    • Icon Url: https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png

    • +
    +
    +
    +Editor Button +
  • +
  • +
    Assignment Selection
      +
    • Select LtiDeepLinkingRequest

    • +
    • Target Link URI: https://apollo.codio.com/lti/resource_selection

    • +
    • Icon Url: https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png

    • +
    +
    +
    +Assignment Selection +
  • +
  • +
    Course Navigation
      +
    • Target Link URI: https://apollo.codio.com/lti/course_navigation

    • +
    • Icon Url: https://static-assets.codio.com/dashboard/images/icons/favicon-16x16.da14ae918fd9bc3b.png

    • +
    +
    +
    +Course Navigation +
  • +
+
    +
  1. Press Save in bottom right corner

  2. +
  3. You will be back at the list of developer keys.

  4. +
+
    +
  • Update State to: on

  • +
  • Copy the number in the Details column (for use in Parts 2 and 3)

    +Developer Key +
  • +
+
+
+
+

Part 2: Create an application in your course in Canvas

+
+

In Canvas:

+
    +
  1. +
    Select an existing course or create a new course.
      +
    • Optional: create a test course called Codio Test Course before you do it with a production course.

    • +
    +
    +
    +
  2. +
  3. In your course, go to Settings → Apps → + App

  4. +
  5. In Configuration Type, select: By Client ID

  6. +
  7. Paste number you copied in Part 1 into Client ID field

  8. +
+
    +
  • Submit → Install

    +Add App +
  • +
+
    +
  1. After you click install, click the gear icon by the tool you just created

  2. +
+
    +
  • Select Deployment ID

  • +
+
    +
  1. Copy the ID displayed, it will be used in Part 3

  2. +
+
+
Deployment ID +
+
+
+
+

Part 3: Create an LTI configuration in Codio

+
+

In Codio:

+
    +
  1. In your org → LTI Integrations

    +
    +
      +
    • Scroll down to LTI 1.3 Configurations

    • +
    • Click Add Integration

    • +
    +
    +
  2. +
+
+
LTI 1.3 Configurations +
+
+
Updating the fields in Platform Information
+

Note

+

replace [CANVAS DOMAIN] with your institution’s domain in steps 5-7

+
+
+
+
    +
  1. Platform ID: https://canvas.instructure.com

  2. +
  3. Client ID: copied from Developer Keys at end of Part 1

  4. +
  5. Deployment Id: copied in Part 2

  6. +
  7. Public Keyset URL: https://[CANVAS DOMAIN]/api/lti/security/jwks

  8. +
  9. Access Token URL: https://[CANVAS DOMAIN]/login/oauth2/token

  10. +
  11. Authentication Request URL: https://[CANVAS DOMAIN]/api/lti/authorize_redirect

  12. +
  13. Click Create

  14. +
+
+
Create LTI Integration +
+
+
+
+

Part 4: Adding a resource

+
+

In Canvas:

+
    +
  1. Go to Assignments in your course, select +Assignment.

  2. +
  3. Give your assignment a name.

  4. +
  5. Select a number of points.

  6. +
  7. Under Submission Type, select External Tool.

  8. +
  9. Select Find.

  10. +
+
+
+

Note

+

Do not use LTI Integration URL to assign an assignment

+
+
+

6. Select the tool created in Part 1. +- Choose the Course and Assignment to connect to +- Recommended: Select Load in a new tab

+
+
Create an Assignment +
+
    +
  1. Select Save at bottom of the page

  2. +
+

Note: these settings are not final and can be edited in Canvas at a later time.

+
+
+
+

Important Notes on Course Copy in Canvas:

+
    +
  • +
    In Canvas, once you copy the course, you must enter a unique SIS ID in Course Settings.
      +
    • An SIS ID that is different from the Blueprint Course (Canvas’ Parent Course) is required for Codio to spawn a corresponding child course.

    • +
    • An SIS ID is optional for the Blueprint Course.

    • +
    +
    +
    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/legal.html b/docs/instructors/admin/legal.html new file mode 100644 index 00000000..a6c7b9b1 --- /dev/null +++ b/docs/instructors/admin/legal.html @@ -0,0 +1,601 @@ + + + + + + + + + Legal stuff — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/add-remove-org-owners.html b/docs/instructors/admin/organization/add-remove-org-owners.html new file mode 100644 index 00000000..b2e48ce9 --- /dev/null +++ b/docs/instructors/admin/organization/add-remove-org-owners.html @@ -0,0 +1,646 @@ + + + + + + + + + Add or Remove Organization Owners — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add or Remove Organization Owners

+

The person who created the organization is considered the Owner. However, you can add other owners that also have Admin permissions to perform administrator tasks. You can add a new user to your organization and grant them the Owner role or add an existing user in your organization as an Owner.

+
+

Add a new user to your organization Owners group

+

Follow these steps to add a new user to the Owners group in your organization:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. In the Invite Teacher to the Organization area, enter in the Teacher Email and select the Organization owner from the drop down.

    +Invite Owner +
  8. +
  9. Click Send Invite.

    +

    An email is sent to the teacher that contains a link to sign up. Upon completing the sign up process, they are added to your organization as an Owner.

    +
    +

    Note

    +

    They must use the email address the invitation was sent to for sign up or they will not be added to the organization.

    +
    +
  10. +
+
+

All pending invitations are displayed and you have the option to Resend or Revoke the invitation.

+Pending Invitations +
+
+
+

Add an existing Codio user to your organization Owners group

+

Follow these steps to add an existing Codio user to the Owners group in your organization:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. Click Owners and enter the username for the teacher you want to add as an Owner. Click the drop-down list and select the username.

    +Owners +
  8. +
  9. Click Add User.

  10. +
  11. On the confirmation dialog, click Yes.

  12. +
+
+
+

Remove owners

+

You can remove a user from the Owners group in your organization, but keep in mind that you must always have at least one Owner. Removing a user from the Owners group does not remove them from the organization, but rather removes them from the Owner role. Follow these steps to remove a user from the Owners group:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. Click Owners to view the list of owners in your organization.

    +Owmers +
  8. +
  9. Click Remove next to the username and then click Yes on the confirmation dialog.

  10. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/add-teachers.html b/docs/instructors/admin/organization/add-teachers.html new file mode 100644 index 00000000..fe987ee1 --- /dev/null +++ b/docs/instructors/admin/organization/add-teachers.html @@ -0,0 +1,644 @@ + + + + + + + + + Add Teachers to Organization — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Teachers to Organization

+

Once you have set up your organization, you can add teachers to provide them with access to Codio. You can invite teachers or send them a token to paste into the browers to access Codio.

+
+
+

Invite teacher to the organization

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. In the Invite Teacher to the Organization area, enter in the Teacher Email and select one of the following option from the drop down:

  8. +
+
+
    +
  • Teacher - Select this if you want the teacher to have standard teacher permissions, this is default.

  • +
  • Read-only teacher - Select this if you want to prevent the teacher from making changes to the content in courses (cannot switch to Edit mode).

  • +
  • Organization owner - Select this if you want the teacher to have full owner permissions, for more information see Add organization owner.

  • +
+
+
Invite Owner +
+
+
    +
  1. Click Send Invite.

    +

    An email is sent to the teacher that contains a link to sign up. Upon completing the sign up process, they are added to your organization.

    +
    +

    Note

    +

    They must use the email address the invitation was sent to for sign up or they will not be added to the organization.

    +
    +
  2. +
+
+

All pending invitations are displayed and you have the option to Resend or Revoke the invitation.

+Pending Invitations +
+
+

Send teacher invitation token to access Codio

+

To send a teacher an invitation token to use to access Codio, follow these steps:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Organization Settings tab and navigate to the Invitation section.

    +Organization Settings +
  6. +
  7. Click Copy URL or Copy Token to provide to the teacher:

    +Invitation +
  8. +
+
+
    +
  • If you send them the Invite URL, they can paste it into their browser and are automatically taken through the sign-up process. When they select that they are a teacher, they are added to your organization.

  • +
  • If you send them the Invite Token, they can register themselves for a Codio account using the sign-up process at www.codio.com. They provide the token to join your organization.

  • +
+
+
+

Note

+

If you already have courses set up, you can add and invite teachers directly into your course(s). See Add or Remove Teachers in a Course. You can then add them as an organization owner so they can then manage and create courses, and have full Admin access to the organization.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/auto-release-grades.html b/docs/instructors/admin/organization/auto-release-grades.html new file mode 100644 index 00000000..4811af64 --- /dev/null +++ b/docs/instructors/admin/organization/auto-release-grades.html @@ -0,0 +1,597 @@ + + + + + + + + + Enable or Disable Releasing Grades Automatically — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Enable or Disable Releasing Grades Automatically

+

By default, students are not shown their grades until the instructor releases them to the course. However, you can enable the Release Grades Automatically feature, which releases the grades when the students complete the assignment.

+

Follow these steps to enable releasing grades automatically:

+
+

Note

+

Enabling this feature does not affect existing courses. You can enable this feature on individual courses if needed.

+
+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. In the Education Settings area, toggle Release Grades Automatically to enable the feature.

    +Release Grades Automatically +
  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/create-org-library.html b/docs/instructors/admin/organization/create-org-library.html new file mode 100644 index 00000000..155220e1 --- /dev/null +++ b/docs/instructors/admin/organization/create-org-library.html @@ -0,0 +1,619 @@ + + + + + + + + + Create an Organization Assessments Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create an Organization Assessments Library

+

In addition to Codio’s global assessments library, you can create Organization assessments libraries. This allows your faculty to share assessment items with other instructors similar to how you can share Courses within an Organization.

+
    +
  • Click your name/gravatar, bottom of the left hand pane

    +
    +
    profile icon +
    +
  • +
  • Click the name of your organization (under Organizations)

    +
    +
    Organisation +
    +
  • +
  • Click the Assessments Library tab

    +
    +
    Assessment library +
    +
  • +
  • Click “Create a New Library”

  • +
  • Enter the name of the assessments library you want to create and press “Create”

    +
    +
    name library +
    +
  • +
+

Read more about assessment libraries here.

+
+

Add Collaborators to an Assessments Library

+
    +
  • Under the Assessments Library tab, click on the library you want to add collaborators to

    +
    +
    library +
    +
  • +
  • Click on the Permissions tab.

  • +
+

Add Permission: Either type the user name or use the drop down arrow to select an organization member to give permission to. By default, the collaborators are given “Read” permission, meaning they cannot add to or edit assessments in the library. To give a user “Write” permission, simply select the permission level next to their user name in the list.

+

Read Permission for Teachers: Turning this on allows all Teachers in the organization to have “Read” permission, meaning they cannot add to or edit assessments in the library.

+
+
library permissions +
+

Remove: To remove a collaborator, simply press the “Remove” button next to their user name. Please note that is “Read permission for teachers” is turned on, that user may still have read permission if they are still a teacher account and a member of the organization.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/default-student-dashboard.html b/docs/instructors/admin/organization/default-student-dashboard.html new file mode 100644 index 00000000..22533dc9 --- /dev/null +++ b/docs/instructors/admin/organization/default-student-dashboard.html @@ -0,0 +1,602 @@ + + + + + + + + + Set Users Dashboard — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Set Users Dashboard

+
+

Student Dashboard

+

Organization owners can specify the default page that is displayed to Students (My Projects or Courses). Follow these steps to set the default student dashboard:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Dashboard tab.

    +Dashboard Settings +
  6. +
  7. Click the Student Default Page drop-down list and choose Courses or My Projects.

  8. +
  9. You can also control the items that show for students in their dashboard from the grid shown

  10. +
+
+
+

Teachers Dashboard

+

Organization owners can also manage the dashboard items for teachers. In the same area as above, deselect the items that should not be shown for the teachers. Different settings can be applied for teachers that only have read only to those that have full editing access.

+
+

Note

+

If you make changes to these settings, your users may need to reload Codio in their browser upon the next login for the changes to be visible.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/delete-org.html b/docs/instructors/admin/organization/delete-org.html new file mode 100644 index 00000000..990bb8ff --- /dev/null +++ b/docs/instructors/admin/organization/delete-org.html @@ -0,0 +1,589 @@ + + + + + + + + + Deleting an Organization — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Deleting an Organization

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. Go to the Delete Organization area to enter the confirmation code, and click Delete to delete the organization.

  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/enable-custom-script.html b/docs/instructors/admin/organization/enable-custom-script.html new file mode 100644 index 00000000..787adc71 --- /dev/null +++ b/docs/instructors/admin/organization/enable-custom-script.html @@ -0,0 +1,603 @@ + + + + + + + + + Enable Custom Script — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Enable Custom Script

+

You can enable custom scripts to integrate third-party systems, such as Sense Network to help and track students from the Organization > Custom Scripts page in Codio. The script passes the userid, email, and user type (Student/Teacher).

+

If required by the third-party system, custom js code can be included in the Custom Script section. This code should be entered without script tags, for example:

+
var http = new XMLHttpRequest();
+var url = 'https://userdomain/url'; //Change to valid URL for your third-party system
+var params = 'userId=' + codio.userId ;
+http.open('POST', url, true);
+http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
+http.onreadystatechange = function()
+//Call a function when the state changes.
+    {if(http.readyState == 4 && http.status == 200) {
+        alert(http.responseText);
+    }
+}
+http.send(params);
+
+
+

You can also add console.log entries to be able to test and view output, for example:

+
console.log('params', codio);
+console.log('params', window);
+console.log('params', document)
+console.log(window.codio.currentPage)
+console.log(window.codio.totalNumberOfPages)
+
+
+Custom Script +

If you require any assistance enabling custom scripts, contact Codio.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/gigabox-usage.html b/docs/instructors/admin/organization/gigabox-usage.html new file mode 100644 index 00000000..0f589598 --- /dev/null +++ b/docs/instructors/admin/organization/gigabox-usage.html @@ -0,0 +1,580 @@ + + + + + + + + + Gigaboxes — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Gigaboxes

+

Codio’s default boxes are allocated 756 MB of memory. If larger boxes are needed, you can upgrade your subscription to get access to 1-GB, 2-GB, 4-GB, 8-GB, 16-GB and GPU (for GPU-accelerated instances) boxes.

+

You purchase a specific number of Gigaboxes that can be used by anyone in your organization. Codio tracks usage based on active projects rather than total projects. In other words, you can have 100 projects which use a Gigabox but as long as only one is active at a time, this requires only a single gigabox unit to be purchased.

+

You must first request a larger box for your organization. Contact help@codio.com to initiate this discussion.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/grade-templates.html b/docs/instructors/admin/organization/grade-templates.html new file mode 100644 index 00000000..efe6dc92 --- /dev/null +++ b/docs/instructors/admin/organization/grade-templates.html @@ -0,0 +1,612 @@ + + + + + + + + + Create Grading Templates — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create Grading Templates

+

The Grading Rubric feature includes a two-dimensional grid that provides grading guidance for manually assessing a coding project.

+Rubric Example +

You create the templates from the Grading Templates menu on the Organizations page, and then instructors can assign the templates to their assignments.

+
+

Note

+

Only organization Owners can access this page and create grading templates.

+
+

Follow these steps to create a rubric grading template:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Rubrics tab.

    +Grading Templates +
  6. +
  7. Click Create a New Template and then complete the following information:

  8. +
+
+
    +
  • Name - Enter a template name.

  • +
  • Rows - A row addresses a single assessment criterion and you must enter a weight percentage value where all rows total 100%.

  • +
  • Columns - Each column contains a score that you assign. Typically, the first column includes a 0 value that corresponds to failure to address the criterion. The remaining columns contain a range of values that you choose, with the far right column including a value for completely meeting the assessment criterion. Please read the following paragraph before choosing column values.

  • +
+
+

Important: When grading student code, the grading rubric is displayed and is clickable; point are awarded based on where you click. Codio then weighs the scores according to the weightings that are provided for each row.

+

A final score is calculated based on the selections and is re-based to the maximum column value. If you want the scores to calculate to percentages, choose a maximum value of 100, with other column values distributed between 0 and 100.

+
+
+
+

Note

+

A rubric can be cloned from another assignment instead of manually creating a new template. In the assignment that has a rubric template assigned to it, click the Settings icon to select the assignment.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/hide-av.html b/docs/instructors/admin/organization/hide-av.html new file mode 100644 index 00000000..63aa0c13 --- /dev/null +++ b/docs/instructors/admin/organization/hide-av.html @@ -0,0 +1,593 @@ + + + + + + + + + Hide A/V calls — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Hide A/V calls

+

The Hide A/V calls feature disables users from starting Audio/Video/Chat in their assignments.

+

Follow these steps to Hide A/V calls:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. In the Education Settingse area, toggle the Hide A/V calls to enable it. When enabled, members of your organization will not be able to start A/V calls

    +Hide A/V calls +
  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/org-contact-url.html b/docs/instructors/admin/organization/org-contact-url.html new file mode 100644 index 00000000..ef0187d9 --- /dev/null +++ b/docs/instructors/admin/organization/org-contact-url.html @@ -0,0 +1,599 @@ + + + + + + + + + Set Organization Contact URL — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Set Organization Contact URL

+

You can set your own contact URL for your students to use on the Organization Settings page. You may want to specify a contact URI if you have a forum or LMS discussion area for students to use or if you have your own resources available to assist students. Follow these steps to set a contact URL:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. In the Education Settings area, navigate to the Contact URLs field.

  8. +
  9. Click Add Contact URL and enter the URL and Text to be displayed.

    +Contact URL +

    You can add as many contact URLs as necessary to give students different options depending on the help they need. When multiple contact options are set, students are shown all of the options in addition to contacting Codio.

    +Contact Support Options +
  10. +
+
+

Note

+

Teacher accounts are not affected by this setting and are still able to contact Codio in the usual manner.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/organisation.html b/docs/instructors/admin/organization/organisation.html new file mode 100644 index 00000000..e49a4067 --- /dev/null +++ b/docs/instructors/admin/organization/organisation.html @@ -0,0 +1,629 @@ + + + + + + + + + Organization settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Organization settings

+
+
+
+

Organizations

+

An organization is always required for institutional teaching. The Organization page includes settings for managing accounts, LMS integration and many other organization related settings.

+

View the video to learn more about organizations

+

The person who creates the organization in Codio is the owner and is given the administrator role. Anyone with Admin permissions can perform the following tasks:

+ +

To access the Organizations page, follow these steps:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +

    The Admin options are displayed on the LH bar of the page.

    +Organization Page +
  4. +
+
+
    +
  • Overview - Update organization profile, enable or disable the ability to create public objects, enable or disable Codio support access, obtain invitation token, manage education settings, and delete the organization.

  • +
  • Members - View, add, and remove users in your organization and invite teachers to the organization.

  • +
  • Always-On Boxes - View the number of always-on boxes you currently have in your organization.

  • +
  • Billing - View your Codio plan information.

  • +
  • Rubrics - Create and manage your grading templates.

  • +
  • Dashboard - Specify the Student Dashboard default page (My Projects or Courses), and specify whether to hide/show Courses.

  • +
  • IP Consent - Enable or disable IP Consent and manage the versions.

  • +
  • Custom Scripts - Manage custom scripts used to integrate third-party systems to help and track students.

  • +
  • LTI Integrations - Specify and manage LTI integration settings.

  • +
  • Integrations - Specify API key for Sense.Network integration, and add other API integrations.

  • +
  • Assessment Libraries - Create and manage assessment libraries for your organization.

  • +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/public-private-settings.html b/docs/instructors/admin/organization/public-private-settings.html new file mode 100644 index 00000000..054015fa --- /dev/null +++ b/docs/instructors/admin/organization/public-private-settings.html @@ -0,0 +1,598 @@ + + + + + + + + + Enable or Disable Public/Private Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Enable or Disable Public/Private Settings

+

The Public/Private Settings feature determines whether users can create public projects, stacks, starter packs, courses, and modules. By default, this setting is disabled where everything is created as private.

+

Follow these steps to enable Public/Private Settings:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. In the Public/Private area, toggle the Public/Private Settings to enable it. When enabled, members of your organization can only create private objects.

    +Public/Private Settings +
  8. +
+

Notes:

+
    +
  • Private projects can still be shared with other users (See Project Permissions).

  • +
  • Any existing public projects, stacks, starter packs, courses, and modules created by members of the organization prior to changing this setting are not affected.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/remove-org-members.html b/docs/instructors/admin/organization/remove-org-members.html new file mode 100644 index 00000000..d11e65d6 --- /dev/null +++ b/docs/instructors/admin/organization/remove-org-members.html @@ -0,0 +1,594 @@ + + + + + + + + + Remove Organization Members — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Remove Organization Members

+

There are some occasions where you may want to remove old members in order to make room for new members; for example, if students in a course leave and you want to use the account licences for other students. Follow these steps to remove members from your organization:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. In the Organization Teams section, click All Members to view all the members of your organization. Alternatively, click Users without Courses to display students who were removed due to the course being deleted.

    +All Members +
  8. +
  9. Click Remove for each user you want to remove from your organization.

  10. +
+

If you want to use the accounts for new students, see Add or Remove Students in a Course.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/sso.html b/docs/instructors/admin/organization/sso.html new file mode 100644 index 00000000..78a70bb7 --- /dev/null +++ b/docs/instructors/admin/organization/sso.html @@ -0,0 +1,667 @@ + + + + + + + + + Enable SSO Integration — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Enable SSO Integration

+

You can enable sso integration to integrate with your own SSO service provider from the Organization > Integrations page in Codio.

+
+
SSO Integration +
+
+

Important

+

Your SSO Custom User fields need to be set up with FirstName, LastName, Email Address and Role (Teacher/Mentor or Student).

+
+
+

Enable SSO

+

1: Enable SSO and select the SSO type. Currently suported SAML 2.0

+

2: Log in to your SSO service provider

+

3: Find and add the SAML application

+

4: Go to Configuration and copy in from Codio

+
+
    +
  • the Login URL

  • +
  • the ACS (CONSUMER) URL

  • +
  • the ACS (CONSUMER) URL VALIDATOR

  • +
+
+

5: Save the configuration

+

6: Go to Parameters and set up the Custom User fields, checking Include in SAML assertion mapping the value field to the relevant fields from your SSO

+
+
    +
  • for Role, set the value to Role(Custom)

  • +
+
+

7: Go to SSO and copy the SAML 2.0 Endpoint HTTP and paste into the Identity Provider URL field in Codio, and find and copy the X. 509 Certificate into the Certificate field in Codio.

+
+

Note

+

These field names relate to OneLogin and may be different in other service providers

+
+

8: In Codio set up the Attributes to map the Custom User fields from your SSO service provider (see below)

+

9: Press the Update button in Codio to create the integration

+

10: Configure your SSO users to use the SAML application

+

11: Copy and distribute the Login URL from the Codio integration field for your users to use

+
+
+

Setting up Attributes

+

The attribute field in Codio is how your SSO custom user fields are mapped to Codio.

+

example:

+
{
+    "mapAttributes": {
+        "email": "Email",
+        "firstName": "FirstName",
+        "lastName": "LastName",
+        "role": "Role"
+    },
+    "mapRoles": {
+        "student": ["student"],
+        "teacher": ["teacher"]
+    }
+}
+
+
+

Where in your SSO you have set up the custom user fields as Email, FirstName, LastName, Role and your roles as student, teacher

+

If your SSO service provider provides urn:oid attributes for the custom user fields, you can use those

+

example:

+
{
+    "mapAttributes": {
+        "email": "urn:oid:0.9.2342.19200300.100.1.3",
+        "firstName": "urn:oid:2.5.4.42",
+        "lastName": "urn:oid:2.5.4.4",
+         "role": "Role"
+    },
+    "mapRoles": {
+        "student": ["student"],
+        "teacher": ["teacher"]
+    }
+}
+
+
+
+
+

SSO Roles

+

The SSO roles you set will determine whether the user accesses Codio as either a student or teacher. If your SSO service provider supports Mentor role, that can also be set for teachers who you wish to access with Read Only access.

+
+
+

Login URL

+

When set up, the login URL can then be used by your users to login through your SSO service provider.

+
+

Note

+

Your users will still be able to access Codio from the usual login URL but will not be authenticated through your SSO service provider.

+
+
+
+

Changing Email address in SSO

+

If the users email address is changed in the SSO, by default a new Codio account will be created when users access Codio from the SSO. To avoid this, instruct your users to log into Codio directly first and change their account email address before accessing from the SSO.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/student-consent-form.html b/docs/instructors/admin/organization/student-consent-form.html new file mode 100644 index 00000000..7ae689d6 --- /dev/null +++ b/docs/instructors/admin/organization/student-consent-form.html @@ -0,0 +1,614 @@ + + + + + + + + + Configure Student IP Consent Form — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/student-email.html b/docs/instructors/admin/organization/student-email.html new file mode 100644 index 00000000..bbc283dc --- /dev/null +++ b/docs/instructors/admin/organization/student-email.html @@ -0,0 +1,593 @@ + + + + + + + + + Show Student Emails — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Show Student Emails

+

The Show Student Emails feature can be enabled to show students email addresses in courses

+

Follow these steps to show student email:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Overview tab.

    +Organization Settings +
  6. +
  7. In the Education Settingse area, toggle the Show Student Emails to enable it. When enabled, teachers in your organization will be able to see student email addresses by hovering over their name in either the main student listing or in the individual assignment listing

    +Show Student Email +
  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/organization/view-org-members.html b/docs/instructors/admin/organization/view-org-members.html new file mode 100644 index 00000000..af85835e --- /dev/null +++ b/docs/instructors/admin/organization/view-org-members.html @@ -0,0 +1,613 @@ + + + + + + + + + View Organization Members — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

View Organization Members

+

You can view all members of your organization from the Members tab on the Organization page. Follow these steps to view all members:

+
    +
  1. Click your profile icon in the lower left corner of the screen.

    +Profile +
  2. +
  3. In the Organizations area, click the name of your organization.

    +My Organizations +
  4. +
  5. Click the Members tab.

    +Members +
  6. +
  7. Click All Members to see everyone who is a member of your organization.

    +All Members +

    You can also view members by the group to which they belong (Owners, Test Students, Teachers, Students, and Users without course).

    +
  8. +
+
+
    +
  • Owners - Users with the Admin role.

  • +
  • Test Students - Demo student accounts created with your organization.

  • +
  • Teachers - Instructors who have registered with your organization. You can also set a teacher account to read only where they only have access to courses in Teaching mode; they cannot add, edit, or delete any content in a course.

    +

    To set a teacher as read only, toggle the Course editor setting to enable it.

    +Read-Only Teacher +
  • +
  • Students - Students who have registered for courses in your organization.

  • +
  • Users without course - All users that are not members of a course as a result of a course being deleted or because a new user has joined your organization but is not yet a Teacher or a Student in a course.

  • +
+
+

To remove a user in this group from your organization, check the check box and click Remove Selected.

+Removing Users without Course +
+

Note

+

Removing users from your organization does not delete their Codio account. Only the account owner can delete users.

+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/admin/orgbilling.html b/docs/instructors/admin/orgbilling.html new file mode 100644 index 00000000..f4cbeef5 --- /dev/null +++ b/docs/instructors/admin/orgbilling.html @@ -0,0 +1,653 @@ + + + + + + + + + Organization Billing — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Organization Billing

+

For K12 and University organizations, the billing screen allows you to generate invoices for your account (for new accounts and renewal of existing accounts) or switch your organization to Student Pay, where students are prompted to enter a credit card when they sign up.

+
+

Access Billing Page

+
    +
  1. Click on your username in the bottom left corner of your Codio dashboard.

  2. +
  3. Click the name of your organization (under Organizations)

  4. +
+
+
Organization +
+
    +
  1. You will see the Billing option.

  2. +
+
+
Organization Billing +
+
+
+

Institution Pay

+

To generate an invoice or a quote, enter your country and follow the steps below:

+
+
Directions Billing +
+
    +
  1. Enter the number of student licenses required.

  2. +
  3. Enter the student start date.

  4. +
  5. If you have a promotion code, enter it in the appropriate field. Validation is case insensitive.

  6. +
+
    +
  • If the promotion code is invalid, the message +Invalid promotion code will be shown

  • +
  • If the promotion code has expired, the message +This promotion code has expired will be shown

  • +
  • Promotion codes are only available for new users and not available for student pay plans.

  • +
+
    +
  1. The plans available will be shown (semester or annual), select the plan you require and if you require the invoice to be sent to someone else, you can change the recipient.

  2. +
  3. When you are ready, click the ‘Generate Invoice’ button or ‘Generate Quote’ button as per your requirement, and the invoice or quote will be generated and sent to the email address.

  4. +
+
+
+

Note

+

You can access your invoice from the email, or you can click View Invoice from the Invoice History section. Pay your invoice at this link.

+
+View Invoice +
+
+
+

Student Pay

+

The option to switch to a Student Pay plan where students are prompted to enter a credit card when they sign up is also available. Be aware if you have an annual plan and have already paid, this might lead to a conflict.

+
+
Switch to Student Pay +
+
    +
  1. Navigate to the Billing page in your organization.

  2. +
  3. Click Switch to Student Pay. It will prompt you to confirm this action.

  4. +
  5. Students will now be prompted to make a payment when they access their Codio account, whether it be from Codio or from your LMS.

  6. +
  7. To support students in this process, provide them with this documentation link with specific emphasis to this section in the event they have problems especially if this may be first time they are trying to purchase online and the transaction may be refused by their bank due to the ever increasing fraud prevention measures card issuers are implementing or guide them to contact help@codio.com.

  8. +
+
+
+

Bookstore Pay

+

Codio offers the option to provide licenses through an institution’s campus bookstore. This can ensure students on financial aid who need to buy licenses can do so through the bookstore. Students pay the bookstore for the license, the bookstore provides a redemption code, and students enter the code when they first access their Codio account. Codio then invoices the campus bookstore for codes purchased.

+
    +
  1. Send this article to your bookstore manager to get the process started.

  2. +
  3. To support students in this process, provide them with this documentation or guide them to contact help@codio.com.

  4. +
+
+
+

Viewing Invoice History

+

To view previous invoices, click on the View Invoice link in the Invoice History section below:

+
+

Important

+

This is accessed from the Organization screen and having clicked on your Organization. Please do not use the normal Billing area for individuals that you can access by clicking on your name/gravatar (bottom left of screen) and selecting the Billing tab unless you wish to subscribe as an Individual or already are subscribed as an Individual.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/add-assessment.html b/docs/instructors/authoring/assessments/add-assessment.html new file mode 100644 index 00000000..986006f4 --- /dev/null +++ b/docs/instructors/authoring/assessments/add-assessment.html @@ -0,0 +1,651 @@ + + + + + + + + + Auto-graded assessments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Auto-graded assessments

+
+
+
+

Add a New Assessment

+

To add a new assessment for a course, follow these steps:

+
    +
  1. Open the assignment in the course, and click the Edit button to open the Guide Editor. You can also click the Tools menu and choose Guides > Edit.

  2. +
  3. Click the Assessments button and choose the type of assessment you want to add to the assignment.

    +Add Assessment +
  4. +
  5. Click Create.

  6. +
+

Refer to the specific topics for the type of assessment:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/advanced-code-test.html b/docs/instructors/authoring/assessments/advanced-code-test.html new file mode 100644 index 00000000..2f6317d9 --- /dev/null +++ b/docs/instructors/authoring/assessments/advanced-code-test.html @@ -0,0 +1,820 @@ + + + + + + + + + Advanced Code Test — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Advanced Code Test

+

The advanced code test assessment type allows you to easily implement unit tests, style checkers, or write custom code tests in any language that grades student-written code.

+

To ensure that your test scripts run securely and to prevent student access to your testing files or executables, place them in the .guides/secure folder. This folder is not available to students in their assignments and they cannot access it from the command line. Only teachers with editing privileges have access to the .guides/secure folder.

+
+
+

Note

+

If your assignment will contain multiple assessments, Code files and Test Cases for individual assessments should be placed in separate folders to avoid compiling all files.

+
+
+

Complete each section to set up your advanced code test.

+
    +
  1. On the General page, enter the following information:

    +General +
      +
    • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

      +

      Toggle the Show Name setting to hide the name in the challenge text the student sees.

      +
    • +
    • Instructions - Enter text that is shown to the student using optional Markdown formatting.

    • +
    +
  2. +
  3. Click Execution in the navigation pane and complete the following information:

    +
      +
    • Language Type - Click the drop-down and choose the language. The following language-specific frameworks are explicitly supported:

      + +
    • +
    • Language Assessment Subtype - Click the drop-down and choose a subtype for the selected language type, if applicable.

    • +
    • Timeout - Where you can amend the timeout setting for the code to execute. Arrows will allow you to set max 300 (sec), if you require longer, you can manually enter the timeout period.

    • +
    +
  4. +
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
+
    +
  1. Click Grading in the left navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Points - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points.

  • +
  • Allow Partial Points - Toggle to enable a percentage of total points to be given based on the percentage correctly answered. See Allow Partial Points for more information.

  • +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the rationale for the answer to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student’s project.

  • +
+
+
    +
  1. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  2. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - The Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+

RuboCop

+
+

RuboCop (website link) is a Ruby Linter.

+

To check if RuboCop is already installed on your stack, simply run rubocop from the command line. If it is not installed, you can easily install it either via the command line (gem install rubocop) or using bundler (by adding gem ‘rubocop’, require: false to your Gemfile).

+

When using Rubocop in Codio, specify the Ruby files you’d like RuboCop to check under the ADD CASE: option.

+

The student will need to follow all style conventions to earn full credit on the assessment.

+
+
+
+

RSpec

+
+

RSpec (website link) is a Ruby testing suite.

+

To check if RSpec is already installed on your stack, simply run rspec from the command line. If it is not installed, you can easily install it either via the command line (gem install rspec) or using bundler by adding it to your Gemfile.

+

When using RSpec in Codio, specify the ruby files containing RSpec tests you’d like to run under the ADD CASE: option.

+

If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on ALLOW PARTIAL POINTS to have Codio evenly weight each test.

+
+
+
+

JUnit

+
+

JUnit (website link) is a Java testing framework. Currently Codio supports JUnit 4 and JUnit 5 so you can choose any one of them as per your requirement.

+

When using JUnit in Codio, specify the Java files containing JUnit tests you’d like to run under the ADD CASE: option.

+

If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on ALLOW PARTIAL POINTS to have Codio evenly weight each test.

+

There are 4 optional configurations for more complex file structures:

+
    +
  • SOURCE PATH - specifies where the student code being tested is

  • +
  • TESTS SOURCE PATH - specifies where non-test-case test helper files are

  • +
  • LIBRARY PATH - specifies where .jar files needed to run the student code or test code at

  • +
  • WORKING DIRECTORY - specifies where in the file tree the actual test will run

  • +
+

All code files Source path will be compiled. Files that fail to compile successfully will cause the tests to fail, even if they are not used. +Codio has a JUnit runner for building JUnit tests.

+
+
+

Custom Feedback with JUnit in Codio

+
+

When using JUnit in Codio, you can add your own custom feedback to the standard feedback Junit returns to students. The feedback message is passed to the assert method as the first parameter.

+
+

assertEquals(feedback, expected, actual)

+
+
+
+

checkstyle

+
+

checkstyle (website link) is a Java linter.

+

When using checkstyle in Codio, specify the configuration file under CONFIG PATH – you can use the Google configuration, Sun configuration, or create your own configuration.

+

Select the CHECKSTYLE VERSION, by default the appropriate version is selected according to your installed Java version but you can also select one of the available options:

+
+
    +
  • Checkstyle v10.12(JRE 11 and above)

  • +
  • Checkstyle v8.24(JRE 8 and above)

  • +
  • Checkstyle v8.9(JRE 8)

  • +
  • Checkstyle v6.6(JRE 6 and 7)

  • +
+

Specify the Java files you’d like Checkstyle to check under the ADD CASE: option.

+
+

The student will need to follow all style conventions to earn full credit on the assessment.

+
+
+
+

pycodestyle

+
+

If you want to use pycodestyle, you must first install it. Use the following commands to install pycodestyle:

+
+
sudo apt update
+sudo apt install python3-pip
+sudo python3 -m pip install pycodestyle
+
+
+Pycodestyle +

To add individual Python source files whose style should be checked, either enter their relative path to ~/namespace or drag them from the File Tree into the Add Case text box and click Add Case. You may add as many cases as needed. When the assessment executes, pycodestyle inspects each added file and outputs all styling issues.

+
+
+

UnitTest

+
+

UnitTest (website link) is a python testing framework.

+

When using python UnitTest in Codio, specify the python files containing UnitTest tests you’d like to run under the ADD CASE: option.

+

Specify whether you are running python 2 (python) or python 3 (python3) under PYTHON EXECUTABLE.

+

If you have more then one test, by default, the student will need to pass all tests to earn the specified number of points. You can toggle on ALLOW PARTIAL POINTS to have Codio evenly weight each test.

+

There are 2 optional configurations for more complex file structures:

+
    +
  • PYTHON WORKING DIRECTORY - specifies where in the file tree the actual test will run

  • +
  • STUDENT FOLDER - specifies where the student code being tested is

  • +
+
+
+
+

JSHint and JSLint

+

JSHint or JSLint must first be installed as a Node.js global package using the following command:

+

sudo npm install -g jshint jslint

+

To add individual JavaScript source files for style checking, either enter their relative path to ~/namespace or drag them from the File Tree into the Add Case text box and click Add Case. You may add as many cases as needed.

+

You can also choose JSLint or JSHint in the Language Assessment Subtype drop-down menu. When the assessment executes, each added file is inspected and outputs all styling issues that were found.

+
+
+

Custom

+

If you choose Custom, enter the following information:

+
+
+
Custom +
    +
  • Command - Enter the command that executes the student code.

  • +
+
+
+

Note

+

If you store the assessment scripts in the .guides/secure folder, they run securely and students cannot see the script or the files in the folder.

+
+

The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code.

+
+
+
    +
  • Timeout - Enter the time period (in seconds) that the test runs before terminating.

  • +
  • Allow Partial Points - Toggle to enable partial points, the grade is then based on the percentage of test cases the code passes. See Allow Partial Points for more information.

  • +
+
+
+

See a Working Example

+

To see an example of a specific unit test or style checker, see the Starter Pack in the corresponding language:

+

Go to Starter Packs and search for Advanced Features in Python if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+

Information about C++ unit testing using GoogleTest is available in the C++ Unit Testing Using GoogleTest Starter Pack.

+

Additionally, Codio pre-populates a project in My Projects called Demo Guides and Assessments that contains examples for all assessment types and a guides authoring cheat sheet. If you do not see this project, go to Starter Packs and search for Demo Guides and Assessments. Click Use Pack and then Create to make a copy in your My Projects area.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/assessment-security.html b/docs/instructors/authoring/assessments/assessment-security.html new file mode 100644 index 00000000..61ad043b --- /dev/null +++ b/docs/instructors/authoring/assessments/assessment-security.html @@ -0,0 +1,647 @@ + + + + + + + + + Assessment Security — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assessment Security

+

Data for assessments is stored in individual files in the .guides/assessments folder. +Other folders automatically created in the .guides directory are: .guides/img and .guides/content. +Student assignments only receive the .guides folder and the .guides/img folder. If you have have provided student access to the file tree in the page layout, the .guides folder will not be visible.

+

The .guides folder is a good place to store bash files or data files because they can’t be easily deleted by the student via the file tree. Keep in mind though, if students have access to the terminal they can use it to view any files in their Linux container, including the .guides folder.

+

Files that are stored in the .guides folder can be updated even if students have already started an assignment. +When you publish an assignment that students have already started, pre-existing files in the student workspace \home\codio\workspace will not be updated in order to make sure student work is not overwritten. +More information on this topic may be found on the modify assignments page.

+
+

Blocking student access to the terminal

+

The terminal can be accessed from the file tree, the menu or by using the key combination (Shift+Alt+T on a PC, Shift+Option+T on a Mac). If you want to block all student access to the terminal you need to hide the file tree in the page layout, customize the IDE menu and block the keyboard short cut in project preferences.

+
+
+

The Secure folder

+

If you are creating your own testing scripts or unit tests you can create a folder named .guides\secure to safely store test files. The secure directory is not copied over to the student version of the assignment. +When a student runs a code test that references a file in the .guides\secure folder, an ephemeral container is created that is a combination of the student workspace and the .guides\secure folder the instructor created. +This container is referred to as ephemeral because it only exists during the execution of the assessment. If you open a student project to view their work, you will not have access to the secure folder because it does not exist in the student environment.

+

Your test should not write any information to the .guides\secure folder because it does not persist. +All output should conveyed using either stdout or the feedback buffer that is described in the individual assessesment types that can use the secure folder, Advanced Code Test, Free Text Autograde and Assignment Level Scripts.

+

Standard code tests do not have access to the secure folder by default but you can force a Standard Code Test to run in an ephemeral container by including a file name with the .guides\secure path in the Command portion on the Execution tab. +This could be done if you are passing a file name as a parameter or if you have no command line parameters, you can put the file name on the command line and it will be ignored by your program but Codio will run the test in a container with the Secure folder mounted. Then you can specify a file in .guides\secure as an input parameter.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/assessments.html b/docs/instructors/authoring/assessments/assessments.html new file mode 100644 index 00000000..1fb1d2c1 --- /dev/null +++ b/docs/instructors/authoring/assessments/assessments.html @@ -0,0 +1,637 @@ + + + + + + + + + Assessments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assessments

+

Assessments can be used to determine how well students understand course material, and can be automatically or manually graded. Codio offers a wide range of assessment types, including autom-graded code tests, multiple choice tests, fill in the blanks, drop-down selection, free text responses and assignment grading. Assessments can be interspersed throughout tutorial materials or stand alone using an assignment level script.

+

You can view the results of assessments in a course from the teacher dashboard.

+

Review the following topics to gain an understanding of using assessments:

+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/auto-grade-scripts.html b/docs/instructors/authoring/assessments/auto-grade-scripts.html new file mode 100644 index 00000000..213c3a38 --- /dev/null +++ b/docs/instructors/authoring/assessments/auto-grade-scripts.html @@ -0,0 +1,973 @@ + + + + + + + + + Assignment Level Scripts — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assignment Level Scripts

+

You can use assignment level scripts to evaluate student code, normalize points, and mark for participation grading. Assignment level scripts are added in the Script Grading field on the Script Grading settings page. These scripts can then transfer the grading value into the grading field. Assignment level scripts are run when an assignment is Marked as Complete.

+
+

Note

+

The script must execute within 3 minutes or a timeout error occurs. There is a maximum size for the feedback that can be returned of 1Mb. If this limit is exceeded, the message Payload content length greater than maximum allowed: 1048576 will be returned.

+
+

If you are using an LMS platform with Codio, be sure to enter a percentage value in the Grade Weight field to maintain compatibility with LMS gradebooks. This value is then transferred into your LMS gradebook once you release the grades.

+
+

Secure scripts

+

If you store grading scripts in the .guides/secure folder, they run securely and students cannot see the script or the files in the folder. Only instructors can access this folder. +You can find more information about assessment security here.

+
+
+

Access assessment results

+

You can access student scores for the auto-graded assessments in an assignment. You can get both summary data and data for each assessment. This data is in JSON format and can be accessed in the CODIO_AUTOGRADE_ENV environment variable. The following is an example of the format of this data:

+
{
+  "assessments": {
+    "stats": {
+      "total": 2,
+      "answered": 2,
+      "correct": 2,
+      "totalPoints": 12,
+      "points": 8
+    },
+    "info": [{
+      "name": "Test 1",
+      "points": 5,
+      "answer": {
+        "correct": true,
+        "points": 5
+      }
+    }, {
+      "name": "Test 2",
+      "points": 7,
+      "answer": {
+        "correct": true,
+        "points": 3
+      }
+    }]
+  },
+  "completedDate": "2017-02-07T09:47:54.471Z",
+  "student": {
+    "id": "codio_GUID",
+    "username": "astudent",
+    "fullName": "A Student",
+    "email": "email@example.com"
+  },
+  "course": {
+    "id": "codio_course_id",
+    "projectId": "codio_project_id",
+    "lti": true,
+    "assignment": {
+      "id": "codio_assignment_id",
+      "start": null,
+      "end": null
+    }
+  }
+}
+
+
+
+
+

Participation Grading

+

You can implement participation grading using assignment level scripts. In the examples below the Codio environment variable is checked to see how many questions were answered in the assignment. +The student grade is calculated based on whether they answered the question, not on correctness.

+
    +
  • Depending on your language of choice select either the .sh or .py file and add it to your .guides/secure folder.

  • +
  • If you are using the Bash version you will first need to install the utility “jq” to your stack (see create a new stack).

  • +
+
+
    +
  • +bash
  • +python
+
#!/bin/bash
+
+# save json based passed environment
+echo $CODIO_AUTOGRADE_ENV > save.json
+
+ANSWERED=$(jq -r '.assessments.stats.answered' save.json)
+TOTAL=$(jq -r '.assessments.stats.total' save.json)
+
+GRADE=$(($ANSWERED * 100 / $TOTAL))
+
+FEEDBACK=""
+
+if [ $TOTAL -eq $ANSWERED ]; then
+  FEEDBACK="✅ You answered all the questions and got full points on this assignment"
+else
+  FEEDBACK="❌ You did not answer all the questions and therefore only received points for the questions you answered"
+fi
+
+curl --retry 3 -s "$CODIO_AUTOGRADE_V2_URL" -d grade=$GRADE -d format=md -d feedback="$FEEDBACK"
+
+
+
+
import os
+import json
+
+# import grade submit function
+import sys
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+
+feedback=""
+env = os.environ.get('CODIO_AUTOGRADE_ENV')
+parsed = json.loads(env)
+answered = parsed['assessments']['stats']['answered']
+total=parsed['assessments']['stats']['total']
+
+grade=answered*100/total
+
+if total==answered:
+  feedback+="✅ You answered all the questions and got full points on this assignment"
+else:
+  feedback+="❌ You did not answer all the questions and therefore only received points for the questions you answered"
+
+res = send_grade_v2(grade, feedback, FORMAT_V2_MD)
+
+exit( 0 if res else 1)
+
+
+
    +
  • Add the file to Education>Test Autograde Script. If your file is not a bash script or other type of file that runs independently, you will need to specify the program that will run it, for example “python3 autograde.py”.

  • +
  • Note: The JSON is not updated until the assignment is marked as complete. If you are testing values from inside the assignment - you will not see the updated values.

  • +
  • Make sure to Publish the assignment.

  • +
  • In the course assignment settings Grade Weights section, enable Script Grading set Set custom script path to that file and disable Assessments Grading.

  • +
+
+
+

Regrade an individual student’s assignment

+

If students have clicked Mark as Complete and the custom script is triggered, you can regrade their work by resetting the complete switch, and then set it to complete again, which triggers the custom script to run again.

+
+
+

Regrade all student’s assignments

+

You can regrade all student’s assignments that have already been auto-graded from the Actions button on the assignment page.

+
    +
  1. Navigate to the assignment and open it.

  2. +
  3. Click the Actions button and then click Regrade Completed. This is useful if you have found a bug in your assignment level grading script. Regrade Completed does not run individual code test assessments.

  4. +
+
+
+

Test and debug your grading scripts

+
+

Note

+

Codio provides the ability to test your auto-grading scripts when creating your project, this should be done before publishing your project to a course. Once an assignment has been published to the course, any changes made to files in the student workspace (/home/codio/workspace) are not reflected in the published assignment. Grading scripts should be stored in the .guides/secure folder. Files in the .guides and guides/secure folders can be published even if students have already started.

+
+
+

Test your script in the IDE

+

You can test your auto-grading script in the Codio IDE from the Education > Test Autograde Script on the menu bar. This option allows you to specify the location of your auto-grading script and run it against the current project content. It also allows you simulate scores attained by any auto-graded assessments located in the Codio Guide and select which autograded assessments to test.

+Autograde Test +

Be sure to take the following into account when using this feature:

+
    +
  • When you click Test Script:

    +
      +
    • All output to stdout and stderr are displayed in the dialog.

    • +
    • The grade returned by your test script is at the bottom of the output section.

    • +
    +
  • +
  • stdout and stderr output is not available when running the actual auto-grading script (not in test mode) because it runs invisibly when the assignment is marked as complete. Because of this, you should only generate output for testing and debugging.

  • +
  • If you want your script to provide feedback to the student, you should output it to a file that can be accessed by the student when opening the project at a later date. In this case, you should allow read-only access to the project from the assignment settings after being marked as complete.

  • +
+
+
+

Test your script using bootstrap launcher

+

You can also use a simple bootstrap launcher that loads and executes the script from a remote location so that you can edit and debug independently of the Codio box. The following example bash script shows a Python script that is located as a Gist on GitHub. This script might be called .guides/secure/launcher.sh.

+
#!/bin/bash
+URL="https://gist.githubusercontent.com/ksimuk/11cd4e43b0c43f79d9478efbe21ba1b9/raw/validate.py"
+curl -fsSL $URL | python - $@
+
+
+

It is important that this file is stored in the .guides/secure folder. You then specify the full filepath .guides/secure/launcher.sh in the Set custom script path field in the assignment settings.

+

It is now possible to debug the Python script and fix any bugs that you may have noticed once students have started work on the assignment.

+
+
+
+

Sending Points to Codio

+

Codio provides a Python library to facilitate reporting points from your custom scripts. There are four functions in this library: send_grade, send_grade_v2, send_partial and send_partial_v2.

+
+
+

Note

+

Partial points are not used in assignment level scripts, see Allow Partial Points for more information about setting up partial points.

+
+
+

In order to use this library you need to add the following code to the top of your grading script:

+
# import grade submit function
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_grade
+
+
+

or:

+
# import grade submit function
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+
+
+

The calls to use these functions are as follows:

+
send_grade(grade)
+
+
+

grade - Should be the percent correct for the assessment.

+
send_grade_v2(grade, feedback, format=FORMAT_V2_TXT, extra_credit=None)
+
+
+

grade - Should be the percent correct for the assessment.

+

feedback - The buffer containing the feedback for your student - maximum size is 1 Mb.

+

format - The format can be Markdown, HTML or text and the default is text.

+

extra_credit - Extra points beyond the value for doing this correctly. These do not get passed to an LMS system automatically, just the percentage correct.

+
+
+

Auto-grading enhancements

+

The V2 versions of the grading functions allow you to:

+
    +
  • Send feedback in different formats such as HTML and Markdown/plaintext.

  • +
  • Provide separate debug logs.

  • +
  • Notify (instructors and students) and reopen assignments for a student on grade script failure.

  • +
+

If you don’t use the send_grade_v2 functions, this URL (passed as an environment variable) can be used:`CODIO_AUTOGRADE_V2_URL`

+

These variables allow POST and GET requests with the following parameters:

+
    +
  • Grade (`CODIO_AUTOGRADE_V2_URL`) - return 0-100 percent. This is the percent correct out of total possible points.

  • +
  • Feedback - text

  • +
  • Format - html, md, txt - txt is default

  • +
  • CompletedDate - can be set to determine relevant penalties from student completed date. State in UTC format (see example below)

  • +
  • Penalty - Penalty is number between 0-100,

  • +
+
+

Note

+

Grade would be set after any penalties applied. Grade + Penalty should be <= 100. The Penalty is available only for assignment grading. Set penalty to -1 to remove any penalty override.

+
+

With the V2 versions of grading, the script output is saved as a debug log. This means that all information you want to pass to students must use the Feedback mechanism.

+

If the script fails:

+
    +
  • The attempt is recorded.

  • +
  • The assignment is not locked (if due date is not passed).

  • +
  • An email notification with information about the problem is sent to the course instructor(s) containing the debug output from the script.

  • +
+

These Python and Bash files that can be loaded by a bootstrap script or as explained above in the participation grading section.

+
+
    +
  • +bash
  • +python
+
#!/bin/bash
+
+POINTS=$(( ( RANDOM % 100 )  + 1 ))
+EXTRA_CREDIT=$(( ( RANDOM % 100 )  + 1 ))
+PENALTY=$(( ( RANDOM % 100 )  + 1 ))
+curl --retry 3 -s "$CODIO_AUTOGRADE_V2_URL" -d grade=$POINTS -d format=md -d feedback='### Markdown text here'  -d extra_credit=$EXTRA_CREDIT -d penalty=$PENALTY
+
+
+
+
  #!/usr/bin/env python
+  import os
+  import random
+  import json
+  # import grade submit function
+  import sys
+  sys.path.append('/usr/share/codio/assessments')
+  from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+  CODIO_UNIT_DATA = os.environ["CODIO_AUTOGRADE_ENV"]
+  def main():
+  # Execute the test on the student's code
+  grade = random.randint(0, 100)
+  feedback = '## markdown text'
+  completedDate = json.loads(CODIO_UNIT_DATA)['completedDate']
+  if completedDate > "2023-05-20T00:00:00.00Z":
+      penalty = 20
+  elif completedDate > "2023-05-10T00:00:00.00Z":
+      penalty = 10
+  else:
+      penalty = -1
+  extra_credit = random.randint(0, 100)
+
+  # Send the grade back to Codio with the penalty factor applied
+  res = send_grade_v2(grade, feedback, FORMAT_V2_MD, extra_credit, penalty)
+  # res = send_grade_v2(grade, feedback, penalty=penalty) # if 'format' or/and 'extra credit' params are not in request then use penalty=penalty_value
+  print(CODIO_UNIT_DATA)
+  exit( 0 if res else 1)
+
+  main()
+
+
+
+
+

Example grading scripts

+

This section provides example assignment level scripts using the older methods to send grades.

+
+

Note

+

Both of these examples use random numbers to generate the grade - you can substitute whatever test you would like.

+
+
+
    +
  • +bash
  • +python
+
#!/bin/bash
+set -e
+# Your actual test logic
+# Our demo function is just generating some random score
+POINTS=$(( ( RANDOM % 100 )  + 1 ))
+# Show json based passed environment
+echo $CODIO_AUTOGRADE_ENV
+# Send the grade back to Codio
+curl --retry 3 -s "$CODIO_AUTOGRADE_URL&grade=$POINTS"
+
+
+
+
import os
+import random
+import requests
+import json
+import datetime
+
+# import grade submit function
+import sys
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_grade
+
+##################
+# Helper functions #
+##################
+
+
+# Get the url to send the results to
+CODIO_AUTOGRADE_URL = os.environ["CODIO_AUTOGRADE_URL"]
+CODIO_UNIT_DATA = os.environ["CODIO_AUTOGRADE_ENV"]
+
+def main():
+  # Execute the test on the student's code
+  grade = validate_code()
+  # Send the grade back to Codio with the penalty factor applied
+  res = send_grade(int(round(grade)))
+  exit( 0 if res else 1)
+
+########################################
+# You only need to modify the code below #
+########################################
+
+# Your actual test logic
+# Our demo function is just generating some random score
+def validate_code():
+  return random.randint(10, 100)
+
+main()
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/autograde-free-text.html b/docs/instructors/authoring/assessments/autograde-free-text.html new file mode 100644 index 00000000..6363c049 --- /dev/null +++ b/docs/instructors/authoring/assessments/autograde-free-text.html @@ -0,0 +1,850 @@ + + + + + + + + + Free Text Autograde — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Free Text Autograde

+

The Free Text Autograde assessment is similar to the Free Text assessment in that it allows students to answer questions in their own words, but includes a field for a command line to execute a script that allows autograding. The answer to the question is stored in the environment variable CODIO_FREE_TEXT_ANSWER.

+

Follow these steps to set up an autograde free text assessment:

+
    +
  1. On the General page, enter the following information:

    +General +
  2. +
+
+
    +
  • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

    +

    Toggle the Show Name setting to hide the name in the challenge text the student sees.

    +
  • +
  • Instruction - Enter text that is shown to the student using optional Markdown formatting.

  • +
+
+
    +
  1. Click Execution in the left navigation pane and complete the following fields:

    +Execution +
    +

    Note

    +

    If you store the assessment scripts in the .guides/secure folder, they run securely and students cannot see the script or the files in the folder. +The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code.

    +
    +
      +
    • Command - Enter the command that executes the student code.

    • +
    • Timeout - Enter the time period (in seconds) that the test runs before terminating.

    • +
    +
  2. +
  3. Click Grading in the navigation pane and complete the following fields:

    +Grading +
      +
    • Points - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points.

    • +
    • Allow Partial Points - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer.

    • +
    • Preview Type - Choose the input (plaintext or markdown) to be provided by the student. LaTex is also supported and is useful when students need to enter mathematical formulas in their answers. The following options are available:

    • +
    +
    +
      +
    • Plaintext - Students enter ordinary text with no markdown formatting; there is no preview window.

    • +
    • Plaintext + LaTeX - Students enter plaintext with no markdown formatting but offers support for LaTeX commands. A preview window is available where students can see the rendered LaTeX output.

    • +
    • Markdown + LaTeX - Students enter markdown that also offers support for LaTex commands. A preview window is available where students can see the rendered markdown with LaTeX output.

    • +
    +
    +
  4. +
+
+
    +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student’s project.

  • +
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - By default, Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+

Example scripts for free-text auto-grade with all or nothing scoring

+
+
    +
  • +bash
  • +python
+
#!/usr/bin/env bash
+
+# Initialize variables
+TOTAL_POINTS=10
+POINTS=0
+
+# Check for the term "immutable"
+if [[ $CODIO_FREE_TEXT_ANSWER == *"immutable"* ]]; then
+    POINTS=$((POINTS + 5))
+else
+    echo "❌ You did not specify that a Tuple is immutable. "
+fi
+
+# Check for the term "data structure"
+if [[ $CODIO_FREE_TEXT_ANSWER == *"data structure"* ]]; then
+    POINTS=$((POINTS + 5))
+else
+    echo "❌ You did not qualify that a Tuple is a data structure. "
+fi
+
+# If both terms were found, set the feedback buffer to "Your answer has passed"
+if [ $POINTS -eq $TOTAL_POINTS ]; then
+    echo "✅ Your answer has passed."
+    exit 0
+fi
+
+exit 1;
+
+
+
+
#!/usr/bin/env python
+import os, sys
+
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_grade_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+
+text = os.environ['CODIO_FREE_TEXT_ANSWER']
+
+points = 0
+total = 10
+
+
+# check for required key words
+if 'immutable' in text:
+    points+=5
+else:
+    print("❌ You did not specify that a Tuple is immutable. ")
+if 'data structure' in text:
+    points+=5
+else:
+    print("❌ You did not qualify that a Tuple is a data structure. ")
+
+if points==10:
+    print("✅ Your answer has passed. ")
+    exit(0)
+
+exit(1)
+
+
+
+
+

Example scripts for free-text auto-grade with partial points

+
+
    +
  • +bash
  • +python
+
#!/usr/bin/env bash
+
+# Initialize variables
+
+TOTAL_POINTS=10
+POINTS=0
+FEEDBACK_BUFFER=""
+
+# Check for the term "immutable"
+if [[ $CODIO_FREE_TEXT_ANSWER == *"immutable"* ]]; then
+    POINTS=$((POINTS + 5))
+else
+    FEEDBACK_BUFFER+="❌ You did not specify that a Tuple is immutable. "
+fi
+
+# Check for the term "data structure"
+if [[ $CODIO_FREE_TEXT_ANSWER == *"data structure"* ]]; then
+    POINTS=$((POINTS + 5))
+else
+    FEEDBACK_BUFFER+="❌ You did not qualify that a Tuple is a data structure. "
+fi
+
+# If both terms were found, set the feedback buffer to "Your answer has passed"
+if [ $POINTS -eq $TOTAL_POINTS ]; then
+    FEEDBACK_BUFFER+="✅ Your answer has passed."
+fi
+
+# Calculate the percentage score
+PERCENTAGE=$(($POINTS * 100 / $TOTAL_POINTS))
+
+curl  -s "$CODIO_PARTIAL_POINTS_V2_URL" -d points=$PERCENTAGE -d format=md -d feedback="$FEEDBACK_BUFFER"
+
+
+
+
#!/usr/bin/env python
+import os, sys
+
+text = os.environ['CODIO_FREE_TEXT_ANSWER']
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_partial_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+
+def main():
+
+points = 0
+total = 10
+feedback = ''
+
+# check for required key words
+if 'immutable' in text:
+    points+=5
+else:
+    feedback+="❌ You did not specify that a Tuple is immutable. "
+if 'data structure' in text:
+    points+=5
+else:
+    feedback+="❌ You did not qualify that a Tuple is a data structure. "
+
+if points==10:
+    feedback+="✅ Your answer has passed. "
+
+# calculate percent out of total
+percent = (points/total)*100
+# feedback+= "<h2>On this question you earned " + str(points) + " out of " + str(total) + " </h2>"
+
+res = send_partial_v2(percent, feedback, FORMAT_V2_HTML)
+exit( 0 if res else 1)
+
+main()
+
+
+
+
+

Automatically grade a Free Text assessment correct

+

This technique can be used to automatically mark the assessment correct for students who have submitted anything in the response. +In the Command field on the Execution tab enter the command below:

+
/bin/true
+
+
+

You can use the Rationale field on the Grading tab to provide feedback since you aren’t running an actual script.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/delete-assessment.html b/docs/instructors/authoring/assessments/delete-assessment.html new file mode 100644 index 00000000..d1551e15 --- /dev/null +++ b/docs/instructors/authoring/assessments/delete-assessment.html @@ -0,0 +1,643 @@ + + + + + + + + + Delete an Assessment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Delete an Assessment

+

To delete an assessment, follow these steps:

+
    +
  1. Select the page where your assessment is located.

  2. +
  3. Delete the assessment token on the page:

    +Assessment Token +

    Once deleted, an assessment remains hidden.

    +
  4. +
  5. To fully remove the assessment, in the Guide Editor, click the Assessments button.

  6. +
  7. Click the View Existing Assessments option to view the list of all assessments. Deleted assessments are highlighted in red.

  8. +
  9. Click the X next to the assessment you want to permanently delete.

  10. +
  11. You can also use the Filter By, select Not Used and delete all unused assessments together. You can search for assessments by name,points or order in guides and order them up or down using the arrow buttons

  12. +
+
+

Note

+

You can restore a deleted assessment, if it is still on the Assessments tab, by clicking on the name and copying the unique identification (see image below). For this example, the line in your guide will be: {Check It!|assessment}(multiple-choice-1735957228).

+Assessment Undelete +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/duplicate-assessment.html b/docs/instructors/authoring/assessments/duplicate-assessment.html new file mode 100644 index 00000000..0d4eff4a --- /dev/null +++ b/docs/instructors/authoring/assessments/duplicate-assessment.html @@ -0,0 +1,640 @@ + + + + + + + + + Duplicate an Assessment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Duplicate an Assessment

+

The duplicate function creates a copy of an existing assessment you can use as a starting point to make a different assessment.

+

To duplicate an assessment, open the assessment by either:

+
    +
  1. In the Guide Editor, click the Edit: <Assessment Name> button to the right of the assessment.

    +Edit Assessment +
  2. +
  3. Click the Assessment button to view the list of all assessments and click the assessment to open it.

    +Edit Assessment List +
  4. +
+

Then click the Duplicate and Save button.

+
+
Duplicate Assessment +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/edit-assessment-points.html b/docs/instructors/authoring/assessments/edit-assessment-points.html new file mode 100644 index 00000000..4101df0d --- /dev/null +++ b/docs/instructors/authoring/assessments/edit-assessment-points.html @@ -0,0 +1,633 @@ + + + + + + + + + Edit Assessment Points — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Edit Assessment Points

+

To edit assessment points, follow these steps:

+
    +
  1. In the Guide Editor, click the Assessments button to view the list of all assessments.

  2. +
  3. Click the assessment to open it and modify the points.

    +Edit Assessment Points +
  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/edit-assessment.html b/docs/instructors/authoring/assessments/edit-assessment.html new file mode 100644 index 00000000..aa731588 --- /dev/null +++ b/docs/instructors/authoring/assessments/edit-assessment.html @@ -0,0 +1,635 @@ + + + + + + + + + Edit an Assessment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Edit an Assessment

+

To edit an assessment, either:

+
    +
  1. In the Guide Editor, click the Edit: <Assessment Name> button to the right of the assessment.

    +Edit Assessment +
  2. +
  3. Click the Assessment button to view the list of all assessments and click the assessment to open it and make your changes.

    +Edit Assessment List +
  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/fill-in-blanks.html b/docs/instructors/authoring/assessments/fill-in-blanks.html new file mode 100644 index 00000000..2b5f942b --- /dev/null +++ b/docs/instructors/authoring/assessments/fill-in-blanks.html @@ -0,0 +1,729 @@ + + + + + + + + + Fill in the Blanks — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Fill in the Blanks

+

A Fill in the blank question can use either free text or offer options to be chosen from a drop-down list:

+
+
    +
  • Free Text Answers - Shows a question where the student must complete the missing words (fill in the blank) by entering the answers.

    +Free Text +
  • +
  • Drop-Down Answers - The possible answers are available in a drop-down list where the student chooses the correct answer.

    +Drop-Down +
  • +
+
+

Follow these steps to set up fill in the blank assessments:

+
    +
  1. On the General page, enter the following information:

    +General +
  2. +
+
+
    +
  • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

    +
    +

    Toggle the Show Name setting to hide the name in the challenge text the student sees.

    +
    +
  • +
  • Instruction - Enter the instructions to be shown to the students.

  • +
+
+
    +
  1. Click Execution in the navigation pane and complete the following information:

    +Execution +
  2. +
+
+
    +
  • Text - Enter the question in markdown, including the correct answer specification. For example:

  • +
+
+

A prime number (or a prime) is a <<<natural>>> number greater than <<<1>>> that has no positive divisors other than <<<1>>> and <<<itself>>>.

+
+
    +
  • Show Possible Values - Toggle to display possible options for the correct answer:

    +
      +
    • For text-free questions, blank fields are available for the student to enter the correct answer.

    • +
    • For drop-down questions, all the correct values (anything within the <<< >>> chevrons) are provided in each of the answer positions in a randomized order. You can also add incorrect answers (one per line).

      +Distractors +
    • +
    +
  • +
+

Regular Expression Support

+

Codio regular expression matching follows the Java language standards.

+

Examples of regular expressions supported for blank fields:

+
    +
  • Answer allows any characters - <<</./>>>

  • +
  • Answer starts with word “begin” - <<</^begin/>>>

  • +
  • Answer ends with word “end” - <<</end$/>>>

  • +
  • Answer can contain one or more spaces in “this is” - <<</this\s+is/>>>

  • +
  • Answer contains 1 or 2 or 3 - <<</[1 2 3]/>>>

  • +
  • Answer allows color or colour - <<</colou?r/>>>

  • +
  • Answer allows yes or “yes” - <<<"yes", ""yes"">>>

  • +
  • Answer allows hat or cat - <<</[hc]at/>>>

  • +
  • Answer allows i==0 or i == 0 - <<</i ?== ?0/>>>

  • +
  • Answer must only contain digits - <<</^[\d]+$/>>>

  • +
  • Answer must only contain non-digits - <<</^[\D]+$/>>>

  • +
  • Answer requires word character - <<</^[\w]+$/>>>

  • +
  • Answer requires non-word character - <<</^[\W]+$/>>>

  • +
  • Answer allows several answers (Place1 or Place2) - <<<"Place1", "Place2">>>

  • +
  • Answer requires case sensitivity - <<</[A-Z]/>>> or <<</[a-z]/>>>

  • +
+
+
    +
  1. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Points - Enter the score for correctly answering the question. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • Show Expected Answer - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting.

  • +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student’s project.

  • +
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - The Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/free-text.html b/docs/instructors/authoring/assessments/free-text.html new file mode 100644 index 00000000..0b00013b --- /dev/null +++ b/docs/instructors/authoring/assessments/free-text.html @@ -0,0 +1,717 @@ + + + + + + + + + Free Text — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Free Text

+

Free text assessments allow students to answer questions in their own words. Because Free Text assessments allow for LaTeX formatting, this type of assessment is recommended for math assessments. Teachers are then able to review and manually grade their answers. Follow these steps to set up a free text assessment:

+
    +
  1. On the General page, enter the following information:

    +General +
  2. +
+
+
    +
  • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

    +

    If you want to hide the name in the challenge text the student sees, toggle the Show Name setting to disable it.

    +
  • +
  • Instruction - Enter the instructions in markdown to be shown to the students.

  • +
+
+
    +
  1. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Points - Enter the score for correctly answering the question. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • Allow Partial Points - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer. Once you toggle this on, you will be able to add rubric items. Rubric items are negative points, they will be subtracted from the total score of the assessment.

  • +
  • Preview Type - Choose the input (plaintext or markdown) to be provided by the student. LaTex is also supported and is useful when students need to enter mathematical formulas in their answers. The following options are available:

    +
      +
    • Plaintext - Students enter ordinary text with no markdown formatting; there is no preview window.

    • +
    • Plaintext + LaTeX - Students enter plaintext with no markdown formatting but offers support for LaTeX commands. A preview window is available where students can see the rendered LaTeX output.

    • +
    • Markdown + LaTeX - Students enter markdown that also offers support for LaTex commands. A preview window is available where students can see the rendered markdown with LaTeX output.

    • +
    +
  • +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student’s project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed.

  • +
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - By default, Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+

Grading free text assessments

+

To review and grade answers given by students in a free text assessment, follow these steps:

+
    +
  1. Select the assignment to view the list of all assessments in the assignment for the student.

    +Free Text Grading +

    You can identify the free text assessments by the following icon in the Type column:

    +Free Text Assessments Icon +
  2. +
  3. Click any line to view the question and the answer submitted by the student.

  4. +
  5. In the Points for answer field, perform one of the following depending on whether Allow Partial Points was enabled or disabled for the question:

    +
      +
    • If Allow Partial Points was disabled, click Correct or Incorrect:

      +Allow Partial Points Disabled +
    • +
    • If Allow Partial Points was enabled, select the points to give for the answer up to the maximum points:

      +Allow Partial Points Enabled +
    • +
    +
  6. +
  7. In the Comments field, enter any information (in markdown + LaTeX) about the grade, which can be viewed by the student when the grade is released, and then click Submit Comment.

  8. +
+ +
+

View graded free text assessments

+

You can view the points given and the Correct column checked for all free text assessments that have been graded.

+View Graded Assessment +
+
+

Free text assessments that are automatically graded as correct

+

You can do this with Free Text Autograde.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/grade-book.html b/docs/instructors/authoring/assessments/grade-book.html new file mode 100644 index 00000000..6118b8e5 --- /dev/null +++ b/docs/instructors/authoring/assessments/grade-book.html @@ -0,0 +1,670 @@ + + + + + + + + + Grade Book — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Grade Book

+

A Grade Book assessment may be used to manually grade assignments, it will not appear in the student guides. When the instructor opens a student assignment, the Grade Book is available for rubric based grading. Comments, points, and rubric items are visible to the student when the assessment is graded and the grades are released. Grade Book assessments do not show in the total assessment count on student/teacher dashboard.

+
    +
  1. On the General page, enter a short Name that describes the test. This name is displayed in the teacher dashboard and when the teacher is viewing the student work. The name should reflect the challenge and thereby be clear when reviewing.

    +

    Leaving the name visible will make it easier to locate when grading and we do not recommend toggling the Show Name setting to disable it.

    +General +
  2. +
  3. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  4. +
+
+
    +
  • Points - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • Allow Partial Points - Partial points must be toggled on for this type of assessment. Once you toggle this on, you will be able to add rubric items. Rubric items are negative points, they will be subtracted from the total score of the assessment.

    +Rubric +
  • +
+
+
    +
  1. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  2. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - By default, Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Save to complete the process.

  4. +
+

The instructor must opening a student assignment to complete the Grade Book grading. Locate the Grade Book assessment in the student file and click Grade.

+
+
Grade book assessment +
+

Click on the 0 or 1 to allocate initial points for overall correctness and then use the other rubric items to subtract points for missing items. There is also a Points adjust field if you wish to adjust total points upwards.

+
+
Grade book assessment +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/math-assessments.html b/docs/instructors/authoring/assessments/math-assessments.html new file mode 100644 index 00000000..f6606008 --- /dev/null +++ b/docs/instructors/authoring/assessments/math-assessments.html @@ -0,0 +1,637 @@ + + + + + + + + + Math Assessments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Math Assessments

+

Codio allows you to set and grade math questions for any type and level of mathematics using the Free Text assessment. We only offer manual grading of mathematical expressions or proofs.

+
+

Manually graded assessments using free text

+

To create a manually graded math question, you can use the Free text assessment type. This allows the students to enter expressions or even full proofs and worked answers using Latex. For more information about Latex, please click here.

+

You can enter Latex in the Question and Rationale fields.

+

You should also set the Preview type drop down to either Plaintext + Latex or Markdown + Latex. Both of these ensure that the student sees a preview pane beneath their answer entry fully rendered in markdown and/or Latex. Please - click here to review the free text assessment.

+
+
+

Multiple choice

+

You can also use the multiple choice assessment type to create answers containing properly rendered Latex expressions.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/multiple-choice.html b/docs/instructors/authoring/assessments/multiple-choice.html new file mode 100644 index 00000000..a2683cd4 --- /dev/null +++ b/docs/instructors/authoring/assessments/multiple-choice.html @@ -0,0 +1,696 @@ + + + + + + + + + Multiple Choice — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Multiple Choice

+

Multiple choice type assessments provide a question and then single or multiple response options. Follow these steps to set up multiple choice assessments:

+
    +
  1. On the General page, enter the following information:

    +General +
  2. +
+
+
    +
  • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

    +

    If you want to hide the name in the challenge text the student sees, toggle the Show Name setting to disable it.

    +
  • +
  • Question - Enter the question instruction that is shown to the student.

  • +
+
+
    +
  1. Click Execution in the navigation pane and complete the following information:

    +Execution +
  2. +
+
+
    +
  • Shuffle Answers - Toggle to randomize the order of the answers so each student sees the answers in a different order.

  • +
  • Multiple Response - Toggle to enable a user to select more than one answer.

  • +
  • Answers - Mark the correct answer(s) to the question. You can add as many options as needed. For each answer, toggle to enable as correct answer (for multiple responses), or click the radio button for the correct single response.

  • +
  • Ordering - Use the Up and Down arrows to change the order in which the answers are presented.

  • +
+
+
    +
  1. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
+
    +
  • Correct Points - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • Incorrect Points is the score to be deducted if the student makes an incorrect selection. Typically, this value will be 0 but you can assign any positive numeric value if you wish to penalize guessing. If this assessment is to be ungraded, set ‘0’ points

  • +
  • Allow Partial Points - Toggle to enable a percentage of total points to be given based on the percentage of answers they correctly answer.

  • +
  • Show Expected Answer - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting.

  • +
+
+
    +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
+
+
    +
  • Show Rationale to Students - Toggle to display the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student’s project.

  • +
+
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - The Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/parameterized.html b/docs/instructors/authoring/assessments/parameterized.html new file mode 100644 index 00000000..bdd5ff17 --- /dev/null +++ b/docs/instructors/authoring/assessments/parameterized.html @@ -0,0 +1,709 @@ + + + + + + + + + Parameterized assessments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Parameterized assessments

+

For all assessment types except Gradebook and Random, you can generate parameters by writing python code on the PARAMETERS tab.

+
+
Parameterized Assessment +
+
+

Parameters tab

+

The PARAMETERS tab has a large built-in code editor to enter python code that generates parameters.

+
+
Parameters Tab UI +
+

On the right-hand side, the Add Code Example button will generate 3 lines of code which (1) import the python random library, (2) declare the codio_parameters dictionary you will store parameters and their values in, and (3) provide a sample parameter.

+

The Generate Sample Parameters button on the right-hand side will run the code in the editor and display in the small box below the button a sample set of generated parameters. If there is an error with the code, the box will turn red and the error message will be displayed.

+
+
+

Creating and using parameters

+

To create a parameter, store a value in the codio_parameters dictionary. You can then refer to the parameter throughout the assessment within double curly brackets (otherwise known as mustache templating).

+
+
Syntax for parameters in Codio +
+

See the first image on this page for an example of creating parameters. Once created, you can then refer to parameters throughout the other fields in your assessment (e.g. instructions on the General tab, fields on the Execution tab, rationale on the Grading tab).

+
+
Parameters in question field +Parameters in fields of multiple choice assessment +
+
+

Creating parameters from on web-based content

+

When parameters are generated, the script in the PARAMETERS tab does not have access to the files in the box or on the stack. To pull a random choice from a large dataset, instead of hardcoding the dataset into the script, you can use Github or some other web-based CDN.

+

If you choose to use Github, make sure your script has a URL that indicates the RAW version of the file which should look similar to:

+
https://raw.githubusercontent.com/github_user_name/repo_name/branch/folder_name/file_name.txt
+
+
+
+
To find this URL, find the file through the Github interface and click the RAW button:
Raw button in Github interface +
+
If it is a particularly large file, Github will present you a link instead:
View raw link in Github interface +
+
+

Here is an example script:

+
import random, string
+from urllib.request import urlopen
+
+codio_parameters = dict()
+
+words_file = urlopen("https://raw.githubusercontent.com/lorenbrichter/Words/master/Words/en.txt")
+words = words_file.readlines()
+codio_parameters["OUTPUT"] = words[random.randint(0,len(words))-1].decode('utf-8')
+
+
+

Limitations:

+
    +
  • We do not advise doing API calls during parameter generation due to the introduction of dependency on another system.

  • +
  • +
    Parameters are only re-generated on Publish if the PARAMETERS code has been changed. Updating to only the CDN or Github repo will NOT re-generate the parameters.
      +
    • Best practice is to upload a new file with a new name – and when you update the file name on the PARAMETERS tab, this will cause the regeneration and ensure clarity on which version of the file the assessment is using.

    • +
    +
    +
    +
  • +
+
+
+
+

Accessing parameters in Auto-grading scripts

+

When using parameters with assessments executing auto-grading scripts, such as with Advanced Code Tests, you can access parameters from the CODIO_PARAMETERS environment variable.

+
+
To test your parameterized auto-grading script, you need to do one of the following:
    +
  1. Within the authoring version of the assignment, click Generate Sample Parameters on the PARAMETERS tab and Save the assessment (even if you made no changes). This creates the CODIO_PARAMETERS environment variable within your authoring version of the assignment. Then you can simply click the assessment button when previewing the Guide. (Note: CODIO_PARAMETERS environment variable is only accessible through the assessment, not via the command line).

  2. +
  3. publish your assignment and either Preview as a teacher or as a Test Student

  4. +
  5. manually create the CODIO_PARAMETERS environment variable inside the authoring version of the assignment

  6. +
+
+
+
+
+

More examples

+
+
You can find more examples of parameterized assessments in Codio:
    +
  1. In our blog post on parameterized assessments

  2. +
  3. In our Developing Evergreen Course Materials webinar

  4. +
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/parsons-puzzle.html b/docs/instructors/authoring/assessments/parsons-puzzle.html new file mode 100644 index 00000000..556914c2 --- /dev/null +++ b/docs/instructors/authoring/assessments/parsons-puzzle.html @@ -0,0 +1,739 @@ + + + + + + + + + Parsons Puzzle — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Parsons Puzzle

+

Parson’s problems are available in Codio as Parsons Puzzles. Parson’s Puzzles are formative assessments that ask students to arrange blocks of scrambled code, allowing them to focus on the purpose and flow of the code (often including a new pattern or feature) instead of syntax. Codio uses js-parsons for Parson’s Puzzles.

+

Complete the following steps to set up a Line Based Grader Parsons Puzzle assessment. The Line Based Grader assessment treats student answers as correct if and only if they match the order and indentation found in Initial Values. For incorrect answers, it highlights the lines that were not ordered or indented properly.

+
    +
  1. On the General page, enter the following information:

    +General +
  2. +
+
+
    +
  • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

    +

    If you want to hide the name in the challenge text the student sees, toggle the Show Name setting to disable it.

    +
  • +
  • Instruction - Enter the instructions in markdown to be shown to the students.

  • +
+
+
    +
  1. Click Execution in the navigation pane and complete the following information:

    +Execution +
  2. +
+
+
    +
  • Code to Become Blocks - Enter code blocks that make up the initial state of the puzzle for the students.

  • +
  • Code to Become Distractor Blocks - Enter code blocks that serve as distractions.

  • +
  • Max Distractors - Enter the maximum number of distractors allowed.

  • +
  • Grader - Choose the appropriate grader for the puzzle from the drop-down list.

  • +
  • Show Feedback - Select to show feedback to student and highlight error in the puzzle. Deselect to hide feedback and not show highlight error in the puzzle.

  • +
  • Require Dragging - If you enter Code to Become Distractor Blocks, Require Dragging will automatically turn on. Without distractor blocks, you can decide whether or not you want students to drag blocks to a separate area to compose their solution.

  • +
  • Disable Indentation - If you do not want to require indention, check the Disable Indentation box.

  • +
  • Indent Size - Each indention defaults to 50 pixels.

  • +
+
+
    +
  1. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Points - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the answer, and the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student’s project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed.

  • +
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - By default, Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+

Grader Options

+

VariableCheckGrader - Executes the code in the order submitted by the student and checks variable values afterwards.

+

Expected and supported options:

+
    +
  • vartests (required) array of variable test objects

    +
    +

    Each variable test object can/must have the following properties:

    +
    +
      +
    • initcode - code that will be prepended before the learner solution code

    • +
    • code - code that will be appended after the learner solution code

    • +
    • message (required) - a textual description of the test, shown to learner

    • +
    +
  • +
+

Properties specifying what is tested:

+
    +
  • variables - an object with properties for each variable name to be tested; the value of the property is the expected value

    +

    or

    +
  • +
  • variable - a variable name to be tested

  • +
  • expected - expected value of the variable after code execution

  • +
+

TurtleGrader - for exercises that draw turtle graphics in Python. Grading is based on comparing the commands executed by the model and student turtle. If the executable_code option is also specified, the code on each line of that option will be executed instead of the code in the student constructed lines.

+
+
+

Note

+

Student code should use the variable myTurtle for commands to control the turtle in order for the grading to work.

+
+
+
+ +Required options:
    +
  • turtleModelCode - The code constructing the model drawing. The turtle is initialized to modelTurtle variable, so your code should use that variable. The following options are available:

    +
      +
    • turtlePenDown - A boolean specifying whether or not the pen should be put down initially for the student constructed code

    • +
    • turtleModelCanvas - ID of the canvas DOM element where the model solution will be drawn. Defaults to modelCanvas.

    • +
    • turtleStudentCanvas - ID of the canvas DOM element where student turtle will draw. Defaults to studentCanvas.

    • +
    +
  • +
+

UnitTestGrader - Executes student code and Skulpt unit tests. This grader is for Python problems where students create functions. Similar to traditional unit tests on code, this grader leverages a unit test framework where you set asserts - meaning this grader checks the functionality of student code.

+

LanguageTranslationGrader - Code translating grader where Java or psuedocode blocks map to Python in the background. Selecting the language allows the Parson’s problem to check for correct indentation and syntax.

+
+
+

Sample Starter Pack

+

There is a Starter Pack project - Demo Guides and Assessments that you can add to your account that includes examples of Parson’s Puzzle assessments. If not already loaded to your account (in your My Projects area), go to Starter Packs and search for Demo Guides and Assessments.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/partial-points.html b/docs/instructors/authoring/assessments/partial-points.html new file mode 100644 index 00000000..92d43e2e --- /dev/null +++ b/docs/instructors/authoring/assessments/partial-points.html @@ -0,0 +1,760 @@ + + + + + + + + + Partial Points — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Partial Points

+

You can award partial points for student assessments in your testing scripts. Use the following Bash and Python grading scripts to enable partial points. You must toggle Allow Partial Points on in the Grading section of the Advanced Code Test dialog.

+
+

Autograding enhancements for partial points

+

To provide you with more robust auto-grade scripts, you can send back feedback in different formats HTML, Markdown, or plaintext and a URL is passed as an environment variable `CODIO_PARTIAL_POINTS_V2_URL`. These variables allow POST and GET requests with the following parameters:

+
    +
  • Score (`CODIO_PARTIAL_POINTS_V2_URL`) - 0-100 percent for assessment, should be a percentage of total points possible.

  • +
  • Feedback - text - this is limited to 1 Mb

  • +
  • Format - html, md, or txt (default)

  • +
+

If you use Python, you can also use the function send_partial_v2. Also, through HTTP requests you can use any other language you feel comfortable with.

+

As a general rule, your script should always exit with 0; otherwise, the grade will be 0. If the student receives partial points, the results will display an orange percent sign rather than a green check mark or red x.

+
+

Example auto-grading scripts with partial points

+

The following examples in Python and JavaScript show how you can write your scripts in any language.

+

The Python script parses the student’s file and then assigns points based on specific criteria. In the JavaScript version, it uses Unit Testing through Mocha, a popular node library and it is invoked with mocha 2>&1 || true to force the exit code to be 0.

+
+
    +
  • +javascript
  • +python
+
const assert = require('assert');
+
+const CODIO_PARTIAL_POINTS_V2_URL = process.env.CODIO_PARTIAL_POINTS_V2_URL;
+var points = 0;
+var total_tests = 2;
+var feedback = "";
+
+describe('Operations', function () {
+  describe('Sum', function () {
+    it('should return 2 for 1 + 1', function () {
+      assert.equal(1 + 1, 2);
+      points++;
+      feedback += "<h2>Test 1 passed!</h2>"
+    });
+  });
+
+  describe('Multiplication', function () {
+    it('should return 4 for 2 x 2', function () {
+      assert.equal(2 * 2, 4);
+      points++;
+      feedback += "<h2>Test 2 passed!</h2>"
+    });
+  });
+
+  after(function () { // Runs once after all tests
+    if (CODIO_PARTIAL_POINTS_V2_URL) {
+      percentage = points/total_tests*100
+      fetch(CODIO_PARTIAL_POINTS_V2_URL, {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/x-www-form-urlencoded',
+        },
+        body: 'points=' + percentage + '&format=html&feedback=' + feedback,
+      })
+    }
+  });
+});
+
+
+
+
import os, requests, random, re, io, subprocess, shutil, sys
+from subprocess import Popen, PIPE, STDOUT
+
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_partial_v2, FORMAT_V2_MD, FORMAT_V2_HTML, FORMAT_V2_TXT
+
+score = 0
+feedback = ""
+
+# Get student code
+
+with open('code/quizquestion2.c') as response:
+  answer = response.read()
+
+# Check student code
+
+if re.search('pi.*=.*3.14',answer) and re.search('r.*=.*8',answer):
+  feedback+="Correct variable initialization.\n"
+  score+=5
+else:
+  feedback+="Incorrect variable initialization.\n"
+
+if re.search('float.*pi',answer) and re.search('float.*r',answer):
+  feedback+="Correct variable declaration.\n"
+  score+=5
+else:
+  feedback+="Incorrect variable declaration.\n"
+
+# Give final feedback to the student and scale up score to be out of 100
+
+feedback+= "<h2>On this question you earned " + str(score) + " out of 10</h2>"
+percent = (score/10)*100
+
+# Send grades back to Codio
+
+res = send_partial_v2(percent, feedback, FORMAT_V2_HTML)
+exit(0 if res else 1)
+
+
+
+
+
+

Example grading script for partial points

+

These are examples of the older method of partial points reporting.

+
+
    +
  • +bash
  • +python
+
POINTS=5
+curl -s "$CODIO_PARTIAL_POINTS_URL&points=${POINTS}" > /dev/null
+
+
+
+
#!/usr/bin/env python
+
+import random
+import sys
+# import grade submit function
+sys.path.append('/usr/share/codio/assessments')
+from lib.grade import send_partial
+def main():
+  # Execute the test on the student's code
+  grade = random.randint(10, 50)
+
+  # Send the grade back to Codio
+  res = send_partial(int(round(grade)))
+  exit( 0 if res else 1)
+
+main()
+
+
+

The score you award should be any value between 0 and the maximum score you specified when defining the assessment in the Codio authoring editor.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/random.html b/docs/instructors/authoring/assessments/random.html new file mode 100644 index 00000000..a66fc10c --- /dev/null +++ b/docs/instructors/authoring/assessments/random.html @@ -0,0 +1,662 @@ + + + + + + + + + Random Assessment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Random Assessment

+

The Random assessment type allows you to set up a group of assessments to then randomly assign one to each individual student assignment. Only one random assessment can be included on a page in Guides.

+

There is assignment level duplication prevention such that regardless of the query, Codio checks whether the library assessment IDs are unique. This prevents students from seeing the same assessment question multiple times in an assignment, as long as every question in the library is unique, and all randomized assessments are drawn from the same library. +If duplicate assessments are generated, it indicates that the assessment library does not have enough unique assessments for the set of random assessment queries in the assignment. +‌

+
    +
  1. On the General page, enter the name of your assessment that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

  2. +
  3. On the Grading page, enter the amount of points to assign to the assessment. Enter the score for correctly answering the question they are assigned. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  4. +
  5. On the Execution page, browse to an assessment library where you can set up filters define the range of assessments to randomly assign. You can work from any assessment library you have access to.

  6. +
+

Click here for more information on how to use Assessment Libraries.

+
+

Updating Random assessments

+

If you wish to update, change or review the assessments assigned to the random assessment, select the Update Search button on the Execution tab and this will open the assessment library field with the saved search parameters.

+
+
Update Random assessment +
+

You can then review the assesments and publish the assignment if you wish in the usual manner, but if the only changes made are in relation to the random assignment and there are students who may have already started the assignment you should do go to the Edit tab and use the Sync button. If you have made other changes to the assignment though, publish in the usual manner as well and then go to the Edit tab. If students have already started the assignment, the Sync button will show

+
+
+

Publishing/Synchronising changes from the Course

+

If the only changes to a previously published assignment are for the random assessment(s), or if someone else in the organization has updated the assessments being used in the assignment, the changes made can be updated/synchronised from the Edit tab in the course.

+

A Sync button will be shown on the Edit tab for the assignment if there are changes that can be updated/synchronised.

+
+
Synchronise Random assessment +
+

If there are students that have already started the assignment they will not get the updates/changes unless their assignments is also reset so they will start again ‘as new’ and any previous work will be lost.

+

Pressing the Sync button will identify if there are students who have already started and then give you the option to reset and publish or just publish so then only students who have not started the assignment will get the update/changes

+

Synchronising where no students started assignment

+
+
Synchronise Random assessment no students started +
+

Synchronising where students have started assignment

+
+
Synchronise Random assessment students started +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/sense-network.html b/docs/instructors/authoring/assessments/sense-network.html new file mode 100644 index 00000000..b08c4505 --- /dev/null +++ b/docs/instructors/authoring/assessments/sense-network.html @@ -0,0 +1,690 @@ + + + + + + + + + Sense Network — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Sense Network

+

Sense.Education is an AI-based code analysis package to give students feedback on their code submissions and is supported in Codio in the Sense.Network assessment type. Students can submit their work and can view feedback from Sense. They can then review their code and resubmit if One Attempt Only is not enabled.

+

To help and track students activity through Sense, you can enable a custom script.

+

This assessment type is only visible when the sense.network API key is entered on the Organization > Integrations page.

+Organization Integrations +

Follow these steps to set up a Sense.Network assessment:

+
    +
  1. On the General page, enter the following information:

    +General +
      +
    • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

      +

      If you want to hide the name in the challenge text the student sees, toggle the Show Name setting to disable it.

      +
    • +
    • Instructions - Enter the markdown text that is shown to the student.

    • +
    +
  2. +
  3. Click Execution in the navigation pane and complete the following information:

    +Execution +
  4. +
+
+
    +
  • Pre-exec Command (Optional) - Enter the command that executes a check to confirm the code is compiling as required. If you store the assessment scripts in the .guides/secure folder, they run securely so students cannot see the script or the files in the folder. The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution code:

  • +
  • Pre-exec Feedback (Optional) - Used to show feedback if the Pre-exec Command fails; otherwise it shows pre-exec output.

  • +
  • Sense Feedback URL (Required) - Enter the feedback URL used to extract assignment id.

  • +
  • Filename (Optional) - Enter the path to the file to pass. If empty, the currently opened file is sent.

  • +
+
+
    +
  1. Click Grading in the navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Gradable - Toggle to enable if the asessment is to be used within the grade total for the assignment. If disabled, students can be given feedback on their submission for this assessment without it being graded.

    +
    +

    Note

    +

    The Rationale does not return anything to the student if the assignment is not gradable. When enabled, each submission overrides any previous submissions for grading purposes.

    +
    +
  • +
  • Points - Enter the score if the student selects the correct answer. You can choose any positive numeric value. If this is an ungraded assessment, enter zero (0).

  • +
  • One Attempt Only - Toggle to enable if you want to restrict the student to only answering the question once. If disabled, students can edit their answer until the assignment is marked as completed.

  • +
  • Show Rationale to Students - Toggle to enable if you want both the answer and the rationale for the answer to the student.

  • +
  • Rationale - Enter guidance for the assessment. This is visible to the teacher when the project is opened in the course or when opening the student’s project. This guidance information can also be shown to students after they have submitted their answer and when they reload the assignment after marking it as completed.

  • +
+
+
    +
  1. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  2. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then its Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - By default, Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/standard-code-test.html b/docs/instructors/authoring/assessments/standard-code-test.html new file mode 100644 index 00000000..de54a1c8 --- /dev/null +++ b/docs/instructors/authoring/assessments/standard-code-test.html @@ -0,0 +1,770 @@ + + + + + + + + + Standard Code Test — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Standard Code Test

+

Standard code tests are dialog driven, where you specify input data and the expected output. Codio then executes the student code, supplies the specified input data, and compares the expected output to the student code’s actual output.

+
+

Note

+

The output (including white space) of all the test cases in your Standard Code test cannot exceed 20,000 characters. +If your output will exceed this limit, or you need finer control of the tests, you can create custom code tests. See Advanced Code Tests for more information.

+
+

Codio provides a Starter Pack project that contains examples for all assessment types and a guides authoring cheat sheet. Go to Starter Packs and search for Demo Guides and Assessments if not already loaded in your My Projects area. Click Use Pack and then Create to install it to your Codio account.

+

For more information about adding a Standard Code Test, view this video

+

Follow these steps to set up a standard code test:

+
    +
  1. On the General page, enter the following information:

    +General +
      +
    • Name - Enter a short name that describes the test. This name is displayed in the teacher dashboard so the name should reflect the challenge and thereby be clear when reviewing.

      +

      Toggle the Show Name setting to hide the name in the challenge text the student sees.

      +
    • +
    • Instructions - Enter text that is shown to the student using optional Markdown formatting.

    • +
    +
  2. +
  3. Click Execution in the navigation pane and complete the following information:

    +Execution +
    +

    Note

    +

    If you store the assessment scripts in the .guides/secure folder, they run securely and students cannot see the script or the files in the folder. +The files can be dragged and dropped from the File Tree into the field to automatically populate the necessary execution and run code.

    +
    +
  4. +
+
+
    +
  • Timeout - Where you can amend the timeout setting for the code to execute. Arrows will allow you to set max 300 (sec), if you require longer, you can manually enter the timeout period.

  • +
  • Command - Enter the command that executes the student code. This is usually a run command. If the Pre-exec command fails, the Command will not run.

  • +
  • Pre-exec command - Enter the command to execute before each test is run. This is usually a compile command.

    +
    +
      +
    • Java

      +

      Compile: javac -cp path/to/file filename.java

      +

      Run: java -cp path/to/file filename

      +
    • +
    • Python

      +

      Run: python path/to/file/filename.py

      +
    • +
    • C

      +

      Compile: gcc filename.c -o filename -lm

      +

      Run: ./filename

      +
    • +
    • C++

      +

      Compile: g++ -o filename filename.cpp

      +

      Run: ./filename

      +
    • +
    • Ruby

      +

      Run: ruby filename.rb

      +
    • +
    • Bash

      +

      Run: bash full_path.sh

      +
    • +
    • SQL

      +

      Codio provides three helper scripts to facilitate running queries on the database your students are modifying. These queries use ODBC to connect to and query the database and it is more strict about spacing than sqlcmd.

      +

      Run: (depending on your version of SQL)

      +

      python .guides/scripts/helper_mssql.py –db_host localhost –db_user SA –db_pass YourPassword –db_name DBNAME

      +

      python .guides/scripts/helper_mysql.py –db_host localhost –db_user root –db_pass YourPassword –db_name DBNAME

      +

      python .guides/scripts/helper_postgres.py –db_host localhost –db_port 5432 –db_user postgres –db_pass YourPassword –db_name DBNAME

      +
      +

      Note

      +

      First you must use Tools > Install Software to install the appropriate helper script for your database (MSSQL,MySql,PostgreSQL). For example, if you are using MSSQL, you would download the Helper MSSql.

      +
      +Install SQL Helper Script +
    • +
    +
    +
  • +
+
+
    +
  1. Click Grading in the left navigation pane and complete the following fields:

    +Grading +
  2. +
+
+
    +
  • Points - The score given to the student if the code test passes. You can enter any positive numeric value. If this assessment should not be graded, enter 0 points.

  • +
  • Allow Partial Points - Toggle to enable partial points, the grade is then based on the percentage of test cases the code passes. See Allow Partial Points for more information.

  • +
  • Case Insensitive - Toggle to enable a case insensitive output comparison. By default, the comparison is case sensitive.

  • +
  • Ignore White Space - Toggle to enable stripping out any white space characters (carriage return, line feed, tabs, etc.) from both the expected output and the student output.

  • +
  • Substring Match - Toggle to enable substring match when comparing the expected output to the student output. The entire expected output needs to be contiguous in the student output.

  • +
  • Add Item to Check - Click to create another set of input/output fields.

  • +
  • Input - Arguments - Enter the command line arguments that are read by the student code.

    +Input Arguments +
  • +
  • Input - Stdin - Enter data that would be entered manually in the console. For example, Enter your Name:. If using this input method:

    +
      +
    • The input data should have a new line if it would be expected in the actual program execution.

    • +
    • In the Output field, the prompt text that is displayed to the user appears in stdout and should be reflected in your output field but without the data entered by the user. You do not need a new line in the output field between each input prompt as the new line character is part of the user input.

    • +
    • Ignore white space and Substring match are recommended options as they make the test more tolerant. The following image shows how to format input and output fields if you are not ignoring white space or doing a Substring match. Note how the input field only supplied the values to be input, not the prompt itself (which is actually a part of stdout). It is important to accurately account for all spaces and carriage returns.

      +Input and Output Example +
    • +
    +
    +

    The following image shows the more tolerant approach with the Ignore whitespace option set. In this case everything on its own line for readability. The whitespace characters will be stripped out of both the expected output and the student output at runtime.

    +Ignore Whitespace +
    +
  • +
  • Generate - Click this button to generate the expected output based on the input you provided in the left half of the box. You need to have the solution code in the code file in order for the output to be generated. If there is already some content in the output box then you will get a pop up asking you if you want to overwrite the existing output.

  • +
  • Check - Use this to test whether running the solution code, using the optional input, will result in the value in the expected output box. If the test fails an output box will appear below showing the difference between the current output and the expected output.

    +Check Test Case +
  • +
  • Check All - Press to check all test cases at once so you can see how many of them are passed or failed.

  • +
  • Show Error Feedback - Toggle to enable feedback to students about errors related to the specific test case.

    +Show Error Feedback +
  • +
  • Show Expected Answer - Toggle to show the students the expected output when they have submitted an answer for the question. To suppress expected output, disable the setting.

  • +
  • Define Number of Attempts - enable to allow and set the number of attempts students can make for this assessment. If disabled, the student can make unlimited attempts.

  • +
  • Show Rationale to Students - Toggle to display the answer, and the rationale for the answer, to the student. This guidance information will be shown to students after they have submitted their answer and any time they view the assignment after marking it as completed. You can set when to show this selecting from Never, After x attempts, If score is greater than or equal to a % of the total or Always

  • +
  • Rationale - Enter guidance for the assessment. This is always visible to the teacher when the project is opened in the course or when opening the student’s project.

  • +
+
+
    +
  1. Click on the Parameters tab if you wish to set up Parameterized Assessments. See Parameterized Assessments for more information.

  2. +
  3. Click Metadata in the left navigation pane and complete the following fields:

    +Metadata +
  4. +
+
+
    +
  • Bloom’s Level - Click the drop-down and choose the level of Bloom’s Taxonomy: https://cft.vanderbilt.edu/guides-sub-pages/blooms-taxonomy/ for the current assessment.

  • +
  • Learning Objectives The objectives are the specific educational goal of the current assessment. Typically, objectives begin with Students Will Be Able To (SWBAT). For example, if an assessment asks the student to predict the output of a recursive code segment, then the Learning Objectives could be SWBAT follow the flow of recursive execution.

  • +
  • Tags - The Content and Programming Language tags are provided and required. To add another tag, click Add Tag and enter the name and values.

  • +
+
+
    +
  1. Click Files in the left navigation pane and check the check boxes for additional external files to be included with the assessment when adding it to an assessment library. The files are then included in the Additional content list.

    +Files +
  2. +
  3. Click Create to complete the process.

  4. +
+
+

Output written to a file

+

If the output of a program is written to a file rather than Standard Output (stdout) you can use the Command portion of the execution tab to run a bash command to list out the contents of the file.

+

For example if the output is written to a file called output.txt, you would put the following into the Command.

+
cat output.txt
+
+
+

In Linux, the command cat lists out the contents of the file. You can use the Pre-exec command to run the student code in this case.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/student-submission.html b/docs/instructors/authoring/assessments/student-submission.html new file mode 100644 index 00000000..eabae223 --- /dev/null +++ b/docs/instructors/authoring/assessments/student-submission.html @@ -0,0 +1,660 @@ + + + + + + + + + Student submission options — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Student submission options

+

There are two important settings that control

+
    +
  • the way a student submits individual questions

  • +
  • the way a student notifies the course instructors that an assignment is completed.

  • +
+
+

The submit button

+

By default each assessment has a submit button beneath the assessment. Once pressed, the answer is autograded.

+

Each assessment type allows you to define the number of attempts students can make. On the last allowed attempt, the student will be warned that they will not be able to resubmit after that attempt.

+

You can suppress the use of submit buttons for Advanced Code Test, Standard Code Test, MCQ, Fill in the Blank, Free Text and Free Text Autograde assessments. You cannot suppress the submit buttons for Parsons Puzzle assessments.

+

This feature is handy for exams, students do not need to worry about the effect of pressing the button. They can provide a response and move on to other assessments or pages in the guide.

+

To suppress the use of the Submit button, go to the settings button in the guide and disable Use submit buttons.

+
+
Global Settings +
+

Once the project is marked as complete (see below) all assessment responses are submitted automatically. All students work must be marked as complete either manually or using the automated Mark as Complete option on the final deadline.

+
+
+

Mark as Complete

+

To suppress the student Mark as complete action, go to the guide settings (see above screenshot) and disable Use mark as complete.

+

A student can proactively mark an assignment as complete. This can trigger an assignment level autograde script and it is also displayed in the teacher dashboard for that student.

+

The drawback of using the student driven mark as complete option is that once students mark an assignment as complete, they are no longer able to make changes to the assignment, including answering assessments. The advantage is that instructors are able to grade those students’ work ahead of a deadline.

+

If the project has been marked as completed, students can click on the ‘graded’ button to access grade feedback. If they wish to view the project, they can click on the name of the project on the left hand side. As the assignment is completed they will not be able to edit anything but can still view the content.

+

You can disable your students’ ability to Mark as Complete entirely and eliminate instances of prematurely marking as complete or forgetting to do so. This means students won’t need to request that their assignment be re-enabled if they submitted by mistake or decide they want to change something after marking as complete.

+

If you choose to disable your students’ ability to mark as complete, you can use one of the following methods to mark assignments as complete:

+
    +
  • Once the assignment deadline has been reached and you want to start grading student work, mark all students’ work as complete from the assignment actions area.

  • +
  • Set an end of assignment date and specify that once the date is reached, the students’ work should be Marked as Complete automatically.

  • +
+
+
+

Penalty deadlines

+

Another related feature is Penalty deadlines which allow you to specify deadlines, before the final grading deadline, where a percentage deduction of the final grade is made. Click here for more information on managing penalty deadlines.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/assessments/ungraded-assessments.html b/docs/instructors/authoring/assessments/ungraded-assessments.html new file mode 100644 index 00000000..8b8096f3 --- /dev/null +++ b/docs/instructors/authoring/assessments/ungraded-assessments.html @@ -0,0 +1,627 @@ + + + + + + + + + Ungraded Assessments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Ungraded Assessments

+

As an instructor, you can set up assessments that are not graded. They can be used as a consequence free way to check a student’s understanding of the content. The assessment is not graded if the correct/incorrect points are set to zero (0). No points are added or deducted from the student’s overall grade for the assignment.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/add_media.html b/docs/instructors/authoring/guides/add_media.html new file mode 100644 index 00000000..9258efc2 --- /dev/null +++ b/docs/instructors/authoring/guides/add_media.html @@ -0,0 +1,707 @@ + + + + + + + + + Adding media — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Adding media

+

Audio, Images and Videos can be added to a Guide page.

+
+

Audio

+

Audio files can be added to and played from your project.

+

To add Audio: select Media icon in the guides editor ribbon where you can define the source audio file along with any actions the should be triggered at specific times during playback.

+
+
Media +
+
    +
  • Source Name - select the source file either from .guides/media folder if already uploaded to the project or upload directly from your PC and it will be stored in the .guides/media folder.

  • +
  • Add Action - specifies actions that are triggered at specific times during playback. The following options are available.

    +

    Open file +Close file +Open Terminal +Close Terminal +Run command +Highlight +Close all tabs +Pause

    +
  • +
+
+
+

Images

+

Inserting an image is similar. You can use the Image icon in the guides editor ribbon or write in markdown within your content area. Here are some examples. PNG and JPG image types are supported. Note that the 2nd and 3rd examples point to images within your project.

+

Store your images in the .guides/img folder if you do not want them to be readily accessible to students.

+
![optional alt tag](http://any-url-you-like.png)
+![](image-in-project-root.jpg)
+![](.guides/img/best-place-for-images.png)
+
+
+

You can drag/drop images from your project file tree into your content. They will automatically contain the correct path.

+

For Markdown pages:

+
![.guides/img/displayimage](.guides/img/displayimage.png)
+
+
+

For HTML pages:

+
![.guides/img/displayimage](.guides/img/displayimage.png)
+
+
+
+
+

Videos

+

You can use the Image icon in the guides editor ribbon defining the URL to the video or you can manually add to your content.

+

Include embedded videos using the standard <iframe> html tag.

+
+

YouTube

+

If you wish to embed a YouTube video, go to the Share option and select Embed to obtain the code snippet.

+
+
You Tube embed +
+

` +<iframe width="560" height="315" src="//www.youtube.com/embed/1JNhoVbmNAo" frameborder="0" allowfullscreen></iframe> +`

+
+
+

Vimeo

+
+

If you wish to embed a Vimeo video, go to the Share option and select Embed to obtain the code snippet.

+Vimeo embed +
+

` +<iframe src="//player.vimeo.com/video/110479088" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe> <p><a href="http://vimeo.com/110479088">Codio - Innovation in Computer Programming Education</a> from <a href="http://vimeo.com/user20752628">Codio</a> on <a href="https://vimeo.com">Vimeo</a>.</p> +`

+
+
+ +
+

iframes

+

You can embed content in an iframe using the <iframe> html tag.

+

To embed from Google Docs, go to File>Publish to Web and select Embed to get the code snippet

+
+
iframe embed +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/author_student.html b/docs/instructors/authoring/guides/author_student.html new file mode 100644 index 00000000..74a36af9 --- /dev/null +++ b/docs/instructors/authoring/guides/author_student.html @@ -0,0 +1,728 @@ + + + + + + + + + Author and student views — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Author and student views

+

Students do not have access to the Codio content authoring tools in Guides. When a student begins an assignment, the Guide is automatically shown and the content will be rendered as intended for them and they cannot modify it. Content authors may specify whether students can close the Guides in the Global Guide Settings. Content authors are able to view content as students would see it.

+
+

Editing content in Guides

+

Only an author is able to edit the content. Students and users with read-only rights will not be able to. Click here for details on page editing.

+
+
+

Preview content in Guides

+

You can preview content in Guides in one of the following ways:

+
    +
  • Press the preview button in the top right area of the edit pane, this will switch to preview mode. You can switch back to editor mode by pressing the Editor button.

  • +
  • Select the Tools->Guide->Play menu option.

  • +
  • Click the launch button at the top of the Filetree.

    +StartGuides +
  • +
+
+
+

Customizing IDE menu

+

The top menu can be customized to remove options you don’t want your students to have access to.

+
+

Note

+

Only students will see the modified menus. Teachers previewing the assignment will not see the customization. To view the environment as a student use the test student accounts.

+
+

Use a .codio-menu file to specify which menu items should be hidden. +Example:

+
{
+    "Logo": false, // hides the Codio logo
+    "Codio": false, // hides the Codio menu dropdown
+    "Project": {
+         "Permissions": false // hides the Permissions option in the Project menu dropdown
+    },
+    "Help": false, // hides the Help menu dropdown
+    "Run": false, // hides the Run menu dropdown
+    "Preview": false, // hides the Preview menu dropdown
+    "Debugger": false, // hides the Debugger menu dropdown
+    "Status": false // hides the Status icon, user Avatar, user name and exit button
+}
+
+
+
+

Note

+

If you set Status to false students will need to use the ‘Back to Dashboard’ button shown on the last page of the guides to return to their dashboard area.

+
+

Setting up .codio-menu file:

+
+
EditorMode +
+

Menu items that the student will see:

+
+
Preview Mode +
+

Students do not have access to the .codio-menu file in the Filetree.

+

You can also customize the three menu items to the right of Help menu item using the .codio file. These items are often used to provide compile and run options and access to the debugger.

+

Example of a .codio file to customize the menu for a C++ development environment:

+
{
+    // This file is used to configure the three buttons along Codio's top menu.
+
+    // Run button configuration
+    "commands": {
+        "Compile & Run": "g++ -o {{filename_no_ext}} {{filename}} && ./{{filename_no_ext}}",
+        "Compile": "g++ -o {{filename_no_ext}} {{filename}}",
+        "Run": "./{{filename_no_ext}}"
+    },
+    // Preview button configuration
+    "preview": {
+        "Project Index (static)": "https://{{domain}}/{{index}}",
+        "Current File (static)": "https://{{domain}}/{{filepath}}",
+        "Box URL": "http://{{domain3000}}/",
+        "Box URL SSL": "https://{{domain3000}}/"
+    },
+    // Debugger target button configuration
+    "debugger": [{"type":"GDB","command":"/tmp/program83b0717fa37e2e0346bafc8c1429cb87 ","before":"g++ -g {{filepath}} -o /tmp/program83b0717fa37e2e0346bafc8c1429cb87","single":true,"lang":"cpp","additionalCompilerFlags":"","sourcePath":"{{filepath}}","args":"","uuid":"63f293ba-8385-602d-bcbe-7b86f94c9c58","name":"Debug Current File"}]
+}
+
+
+

The resulting menu:

+
+
Compile and Run and Debug menu +
+

Students do not have access to the .codio file in the Filetree. See a preview of static or dynamic content for more information on configuring these items.

+
+
+

Guide player Options

+
+
Player Options +
+

When the Guide is in Play mode, the following options may be available depending on who is viewing:

+
    +
  • The Collapse button allows the user to collapse the content pane to provide a larger working area. This option does not show if the page layout is One Pane.

  • +
  • Navigation Buttons provide forward/backward scrolling in the guide.

  • +
  • Settings allow the user to view the assignment as a teacher (e.g. show solution information hidden to students) change the Theme (light/dyslexic), Mark as Complete, change the font size, reset both the theme and fonts, to restore the current files (see below) and to access Code Comments. See Dyslexia Support section

  • +
  • Show/Hide Index List the Index icon allows the user to show/hide the index.

  • +
  • Grading is available for teachers to access the grading area. Students do not see this option.

  • +
+
+

Restore current files

+

The Restore current files feature provides the ability to reset/restore any edited files on that page to their initial state. Files can be restored from the menu as shown below.

+
+
Restore Current Files +
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/authoring_guidelines.html b/docs/instructors/authoring/guides/authoring_guidelines.html new file mode 100644 index 00000000..4a3e6e16 --- /dev/null +++ b/docs/instructors/authoring/guides/authoring_guidelines.html @@ -0,0 +1,676 @@ + + + + + + + + + Authoring Guidelines — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Authoring Guidelines

+

The following are guidelines for authoring content in Guides.

+
+

Style your content using Markdown

+

You can style your content using Markdown, a simple formatting language that is easier to use than HTML. You can embed HTML snippets in Guide content if you need a feature that is unavailable in Markdown.

+
+
+

Load the Demo Guides and Assessments project to learn more about authoring with Guides

+

Demo Guides and Assessments is an example project you can use as a tutorial to learn more about creating Guides. If you do not see it in the My Projects tab of your Navigation Pane, you can load it using the instructions below.

+
    +
  1. Click the Starter Packs area in your Navigation Pane.

  2. +
  3. Search for Demo Guides and Assessments.

  4. +
  5. Click Use Pack and then Create to install it to your Codio account.

  6. +
+
+
+

Using Media assets in your Guides

+

When creating a guide, you will often be working with images, video and other media. We recommend the following.

+
    +
  • Images should be placed in the .guides/img folder. You can create sub-folders for organizational purposes.

  • +
  • Videos should be hosted on a 3rd party platform such as YouTube or Vimeo. You can embed these using regular HTML embed tags provided by those platforms.

  • +
  • Web based media such as Google Doc documents can be embedded using regular HTML embed tags provided by those platforms.

  • +
+
+
+

Use callout blocks to highlight important information

+

Callout blocks provide icons and highlighted backgrounds for various categories such as : Important, Info, Challenge, Topic, Definition, Meetups, Headline, Hackathon, Create, Calendar, Growth Hack, Debugging, Cross Discipline and more.

+

Refer to the Callout section of the Demo Guides and Assessments project loaded to your My Projects area, if not loaded see instructions above.

+
+
+

Don’t make pages too long

+

If the topic is a long one, consider breaking it up into several pages. This avoids the need for lots of scrolling and allows students to access information in manageable chunks.

+
+
+

Use hidden folders to organize your code samples

+

You can place code samples for each page in separate directories and then you can show only the relevant folders for a specific page.

+

Click here for more details on folder hiding.

+
+
+

Assessments may be used to test student knowledge

+

Codio offers a range of manually and auto-graded assessments. When used in content, assessments provide students with challenges and exercises that help reinforce what they have learned.

+

When used in a course, assessments provide teachers with a way to monitor student progress across a course using the teacher course dashboard.

+

Many of Codio’s assessment types (code tests, multiple choice questions, text, fill in the blank and list-based) are auto-graded, saving teachers time and offering students instant feedback on the correctness of their answers.

+

You can also use the free-text assessment type for answers that require a typed answer that will be manually graded by faculty. Free text assessments support Latex, and can be used to respond to math questions and graded.

+

You can save your assessments in a library for use in other assignments. See here for more information on this. Codio provides an extensive library of assessments you can use or modify. See here for more details

+
+
+

Use panel layouts to organize your instructional materials

+

The editor lets you create different panel layouts for each page of your guide content.

+

Click here for more information on panel layouts.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/cpumemdisk.html b/docs/instructors/authoring/guides/cpumemdisk.html new file mode 100644 index 00000000..1a376f7b --- /dev/null +++ b/docs/instructors/authoring/guides/cpumemdisk.html @@ -0,0 +1,658 @@ + + + + + + + + + System Resources — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

System Resources

+

There following are system resources you may need to consider when designing your assignment or project. +In most cases the default allocations Codio provides are sufficient but occasionally more may be required.

+
+

CPU

+

All Codio assignments/projects use shared CPU resources where there is fair balancing among users. You cannot configure the CPU usage for a process.

+

You can monitor running processes and CPU utilization in real time by typing the top command in the Terminal. A 100% CPU utilization means that your process is using only one vCPU (virtual CPU) core, a 200% utilization means your process is using two CPU cores. Long-running single-threaded processes do not usually affect the performance. +If you have multithreaded, long-running processes, we recommend using Virtual Machines or limiting the number of threads.

+
+
A view of CPU usage using the top utility +
+
+
+

Memory

+

The default memory configuration for asssignments/projects is 756Mb. If your usage requires more memory, you can purchase a larger Gigabox configuration. +The top command can also be used to view how much memory is used by your processes. Note the value in the used column during the heaviest memory consumption as software is running. +If the used memory, (highlighted below) is close to the limit, you will likely experience performance degradation.

+
+
A view of memory usage using the top utility +
+
+
+

Disk space

+

Codio assignments/projects have 5Gb of disk space available to them. You can check the disk space available and the disk space used by typing the df -h at the command prompt in the terminal.

+
+
A view of how much disk space is available in your Codio box +
+

This number does not include stack size, which can be more than 5Gb. You can also easily check how much space your assignment is using by typing du -hs ./. +Smaller assignments can be provisioned more quickly and this becomes important for large online classes. For example, node modules can be very large and you might choose to not publish them to student assignments. +You can exclude the node modules by creating an :.assignmentignore file. Your students will need to run npm install when they start the assignment.

+

We recommend caching the dependencies in the stack for large simultaneous user cohorts to avoid downloading the same dependencies multiple times from GitHub or npmjs.com.

+

You can do this by running npm install or yarn install and making a stack version after. That should cache the dependencies according to the lock file in ~/.npm/ folder.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/custom_button.html b/docs/instructors/authoring/guides/custom_button.html new file mode 100644 index 00000000..401acf72 --- /dev/null +++ b/docs/instructors/authoring/guides/custom_button.html @@ -0,0 +1,747 @@ + + + + + + + + + Custom Buttons in Guides — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Custom Buttons in Guides

+

Custom buttons allow you to insert a button into your guide content that when pressed can carry out any custom action.

+

Use buttons to perform a variety of actions:

+
+

To jump to a page in the content

+

This will jump to a specific page in the guide

+
{Button Text | go-to-section-titled}(section title)
+
+
+

example:

+
{Go to Section: LTI | go-to-section-titled}(LTI)
+
+
+
+
+

To launch a process

+

This will launch a process and execute a terminal command. In this example a Python program is run and output is displayed in the guide.

+
{Button Text}(command parameter1 parameter2 parameterN)
+
+
+

example:

+
{Try it}(python3 input.py)
+
+
+
+
+

Launching a process in a terminal window

+

There are cases where you will want to launch a command in a dedicated terminal window, for example when student code requires input. Codio cannot handle standard input through the guides window. The “Try it” button command below will compile and run a Java program in the terminal window, allowing for user input.

+
+

{Button Text | terminal}(command)

+
+

example:

+
{Try it | terminal}(javac Main.java&&java Main)
+
+
+
+
+

To launch a process in the background

+

This will launch a process in the background.

+
{ Button | background}(my_command_in_background)
+
+
+
+
+

Launching a debugger configuration

+

You can launch a debugger configuration as shown below. It is important to specify the configuration name exactly. More information about the debugger here.

+
{Button text | debugger}(debugger configuration name)
+
+
+
+
+

To restore current files in guides

+

Students can restore current files to the default setting from the setting menu but you can also offer them a button within your guides content as well.

+
{Button text | reset}(optional commands to run)
+
+
+
+
+

Writing a custom event handler

+

This offers you the most flexibility and allows you to write your own custom button press handler. A common use case is executing tests on user code.

+

To do this, you should use the following format for your custom button.

+
{Button Text|custom}(myId)
+
+
+

If you wish to use a custom event handler to allow students to restore current files and handle other functions, you can do so but you will need to include this code in your custom script:

+
window.addEventListener('codio-button-custom', function (ev) {
+  if(codio) {
+    codio.resetCurrentFiles()
+  }
+});
+
+
+
+

Loading Scripts

+

You should point your content page to a script file to load javascript scripts.

+
    +
  1. In Edit mode in the Guide click Settings.

  2. +
  3. Select the Global tab in the Guide.

  4. +
  5. Enter the location of your scripts in the Scripts area.

  6. +
+
+
Global Scripts +
+
+
+

Event Listener

+

The event listener executes a custom task. It will display a custom message area into which you can write your own results data. The message data can be a custom message and can be plain text or HTML.

+

For the event listener to run you need to include the following in the Scripts area of your Global settings(see Loading Script above).

+ +

The icon that appears in the top left of the message area can be controlled from your event listener, as shown in the example below.

+
window.addEventListener('codio-button-custom', function (ev) {
+  console.log('id:', ev.id, 'cmd:', ev.cmd, ev);
+  if (codio) {
+    codio.setButtonValue(ev.id, codio.BUTTON_STATE.PROGRESS, 'Checking');
+    codio.setButtonValue(ev.id, codio.BUTTON_STATE.FAILURE, 'Bad Job :(');
+    codio.setButtonValue(ev.id, codio.BUTTON_STATE.INVALID, 'Internal error');
+    window.setTimeout(function () {
+      codio.setButtonValue(ev.id, codio.BUTTON_STATE.SUCCESS, 'Extremely well done!');
+    },1000);
+
+  }
+});
+console.log('test.js script loaded');
+
+
+
    +
  • ev.id is the contents internal id for the button.

  • +
  • ev.cmd is the myId text you specified in the button with {Button Text|custom}(myId). This is typically used to indicate the id of the test you wish to run or just the specific button that is being pressed.

  • +
+

The available button commands are

+
codio.setButtonValue(ev.id, codio.BUTTON_STATE.PROGRESS, 'Checking..');
+codio.setButtonValue(ev.id, codio.BUTTON_STATE.SUCCESS, 'Good job!');
+codio.setButtonValue(ev.id, codio.BUTTON_STATE.FAILURE, 'Bad Job :(');
+codio.setButtonValue(ev.id, codio.BUTTON_STATE.INVALID, 'Internal error');
+
+
+

The 3rd parameter can contain text to display in the button’s attached message area. It can be plain text or HTML.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/excludingfiles.html b/docs/instructors/authoring/guides/excludingfiles.html new file mode 100644 index 00000000..179dfb65 --- /dev/null +++ b/docs/instructors/authoring/guides/excludingfiles.html @@ -0,0 +1,654 @@ + + + + + + + + + Excluding Files/Folders — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Excluding Files/Folders

+
+

To Students

+

Files/folders may need to be excluded from students assignments. Such files may be unused resources/logs and other files used when testing the assignment prior to publishing.

+

This can be handled by using .assignmentignore or .unitignore file in the source project and when published to a course, these files/folders will not be available to the students.

+

Enter on a new line the file/folders to be excluded defining them relative to the location of the .assignmentignore or .unitignore file and defining folders with /

+

For example if the .assignmentignore or .unitignore file is located in the project workspace and you wish to exclude

+
    +
  • testing & node_modules folder

  • +
  • the file checkscore.js in the views folder

  • +
  • the files app.js and README.md

  • +
+

the .assignmentignore or .unitignore file will be

+
/testing
+/node_modules
+/views/checkscore.js
+app.js
+README.md
+
+
+
+
+

To collaborating teachers

+

When collaborating with other teachers in Codio, an authorassignmentignore or .authorunitignore file can be used in the same way as the .assignmentignore or .unitignore file above. When a collaborating teacher in the course accesses the published assignment in edit mode, the files/folders included in the file will not be available to them.

+
+

If using Desktop App

+

See Desktop App where .codioignore file is used in the same manner.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/freeze_code.html b/docs/instructors/authoring/guides/freeze_code.html new file mode 100644 index 00000000..1d5d656f --- /dev/null +++ b/docs/instructors/authoring/guides/freeze_code.html @@ -0,0 +1,643 @@ + + + + + + + + + Freezing Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Freezing Code

+

If you wish to freeze portions of code in a code file that students won’t be able to edit, you can surround the code with the tags FREEZE CODE BEGIN and FREEZE CODE END. Use the appropriate syntax for your programming language (ex. Python - ‘#’, C++ - ‘//’ to designate these lines as comments. The section of code will be highlighted to the students along with a padlock icon at the top right of the code block. Check that you do not have mis-matched BEGIN and END statements by viewing the assignment as a test student.

+

Example Python solution file:

+
def main:
+    # FREEZE CODE BEGIN
+    print('Hello world!')
+    # FREEZE CODE END
+
+
+

will then show to students as:

+
+
Frozen Code +
+

If you just wish to highlight code to the students but allow them to be able to edit, you can use Highlight in Open Tabs.

+
+

Supported language files

+

.c .cpp .java .py .html .css .r .rb .js .ts .sql .h .hpp .ocaml .ml .php .pas .yml .xml .cs .coffescript .fs .go .kt .kts .less .lua .m .h .pl .scala .vb .swift .sh .scss .sass .md .yaml .hs .rkt .ss .scm .lisp .erl .ex .exs .elm .asm .s .rs .rlib .dart .jl

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/hide_folders.html b/docs/instructors/authoring/guides/hide_folders.html new file mode 100644 index 00000000..7697845c --- /dev/null +++ b/docs/instructors/authoring/guides/hide_folders.html @@ -0,0 +1,627 @@ + + + + + + + + + Hiding folders — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Hiding folders

+

You can organize your code samples in a dedicated folder and then use Show Folders on layout settings to specify this folder. All non-specified folders are hidden from view in the file tree.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/html_content.html b/docs/instructors/authoring/guides/html_content.html new file mode 100644 index 00000000..3b559f58 --- /dev/null +++ b/docs/instructors/authoring/guides/html_content.html @@ -0,0 +1,674 @@ + + + + + + + + + HTML content editing — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

HTML content editing

+

We do not recommend this setting unless you have very specific reasons. It is much harder to use and maintain than markdown but for those who want ultimate control over appearance it is a good option.

+
+

Setting HTML

+

You can specify that an individual page be authored using HTML from the content Settings. You will find the Content type dropdown where you can switch between HTML and markdown.

+
+ +
+

Support functions

+

In a page authored using Markdown, you are able to create buttons and other actions. We provide some javascript functions that support the same functionality.

+

Important : if you use any of the functions listed below then you must load https://codio.com/codio-client.js in the HTML Header as shown in the example above.

+
    +
  • codio.run(command, callback) - Run a command on the box. callback will fire once executed and should be used to communicate back to the user.

  • +
  • codio.runAndShow(command, outputElementId) - Run a command on the box. All stdout will be displayed in outputElementId.

  • +
  • codio.open(‘file’, path, panel_num) - Opens a file located in path in the panel_num panel, where 0 is the first panel from top left

  • +
  • codio.open(‘terminal’, command, panel_num)- Opens a terminal window and executes command. panel_num specifies the location of the panel, where 0 is the first panel from top left.

  • +
  • codio.open(‘preview’, url, panel_num) - Opens a preview window at url. panel_num specifies the location of the panel, where 0 is the first panel from top left.

  • +
  • codio.goToNextSection() - Moves to the next page in the guide.

  • +
  • codio.goToPreviousSection() - Moves to the previous page in the guide.

  • +
  • codio.switchUnit(unitId) - Changes to a different assignment. The assignment ID is found by opening the assignment and getting the ID from the URL.

  • +
  • codio.goToSectionTitled(‘Section Title’) - Switches to the page whose title is “Section Title’.

  • +
  • codio.assessments.check(assessmentId) - Executes the assessment

  • +
  • codio.assessments.reset(assessmentId) - Resets any response and score that the user may have already provided for assessmentId.

  • +
  • codio.assessments.get(assessmentId, callback) - Gets the result data for a completed assessment

  • +
  • codio.assessments.send(assessmentId, answer, points, callback) - Sends result data for a custom assessment. answer contains the custom result data for assessment and will be stored in Codio. You can use codio.assessments.get() to reconstruct the output for an already answered question.

  • +
  • codio.resetCurrentFiles() - Allows students to restore current files in guides within your content.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/intro.html b/docs/instructors/authoring/guides/intro.html new file mode 100644 index 00000000..ae463803 --- /dev/null +++ b/docs/instructors/authoring/guides/intro.html @@ -0,0 +1,663 @@ + + + + + + + + + Authoring — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Authoring

+
+
+
+

Introduction to Guides

+

Codio provides a powerful authoring tool called Guides you can use to create rich tutorial and instructional content as well as assessments. Here are a few of the key features.

+

From a Guides page you can:

+ +
+

Accessing Codio Guides

+

You can launch Guides and begin content authoring in one of the following ways:

+
    +
  • Click Tools->Guide->Edit in the menu.

  • +
  • Click the button at the top of the Filetree as shown below

    +Start Authoring +
  • +
+
+
+

Designing for Accessibility

+

Codio provides a range of tools to support Accessibility.

+
+

See:

+
+ +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/latex.html b/docs/instructors/authoring/guides/latex.html new file mode 100644 index 00000000..dcde8d9d --- /dev/null +++ b/docs/instructors/authoring/guides/latex.html @@ -0,0 +1,662 @@ + + + + + + + + + Latex for math expressions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Latex for math expressions

+

Latex is ideal for entering mathematical expressions into your pages. You can also insert Latex expressions into many assessment fields. Codio uses Mathjax for the rendering of all Latex expressions, so certain macros are not supported.

+
+

Inline Latex expressions

+

An example of an inline expression is $frac{x^3+1}{x^2-1}$. When your page is shown, the Latex expression will render appropriately.

+
+
+

Display mode Latex expressions

+

You can also render one more more lines of Latex expressions in a more prominent format as shown below.

+
$$
+y=x^2
+\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}
+$$
+
+
+
+
+

Latex Resources

+

Google is often your friend when it comes to discovering Latex syntax. However, here are two very useful references that will accelerate things for you.

+
+
+

Mathjax

+

Here is a list of Latex commands supported by Mathjax.

+
+
+

Stack Exchange

+

Here is a page on Math StackExchange that has an excellent overview of Mathjax/Latex syntax as well as explaining general concepts.

+

Click here :Stack Exchange

+
+
+

Detextify

+

Detextify is an excellent way of finding a Latex symbol by free hand drawing it on the screen using your mouse or touchpad.

+
+
Detextify +
+

Important: you should not use commands that are not in the standard package. In the image above, you can see the last one has a usepackage command. Symbols in a special package may not work.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/markdown_content.html b/docs/instructors/authoring/guides/markdown_content.html new file mode 100644 index 00000000..b2e73da9 --- /dev/null +++ b/docs/instructors/authoring/guides/markdown_content.html @@ -0,0 +1,863 @@ + + + + + + + + + Markdown content editing — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Markdown content editing

+

Content can be written in

+
    +
  • Markdown - Markdown is a lightweight markup language that you can use to add formatting elements to plaintext text documents. More information below.

  • +
  • HTML - Hypertext Markup Language allows more detailed control of your formatting. More information can be found here.

  • +
+

When you are in edit mode, you can select a section by

+
    +
  • using the navigation buttons in the header area

  • +
  • selecting a section from the index list

    +editnav +
  • +
+
+

Renaming the Section

+

Rename your section by clicking on the section title in the header area.

+
+
+

Writing content

+

Write content in the main content area.

+

You can also set hotkeys for a range of commonly used editing functions.

+
    +
  • Bold selected text

  • +
  • Enumerate selected text

  • +
  • Order selected text

  • +
  • Make selected text as a code block

  • +
  • Command button

  • +
+

See the [guides] area in the User Preferences

+
+
+

Custom CSS

+

In Play Mode or as you preview, your content is rendered as students will see it. You can override the default CSS styling by accessing Tools->Guide->Add Custom CSS

+
+
Guide CSS +
+

‘Reset Custom CSS’ will restore the default CSS styling

+

Click here for details on how to insert images, videos and hyperlinks.

+
+
+

Markdown

+

To assist with your creation of markdown content, an editor ribbon is available, including Codio specific buttons to open/close content within Guides.

+
+
Markdown Editor Ribbon +
+

If you prefer to write markdown yourself, a summary of formatting codes:

+
+
+

Headers/Titles

+

To display a header or title, you can use the # character at the start of the line. The more # characters you add, the smaller the font.

+
# Big title
+## Smaller title
+### Even smaller title
+#### etc.
+
+
+
+
+

Bold and Italic

+

To create bold or italic text, you use ** and * either side of the respective words.

+
I want to say that **this is really important**, you know
+I *really* like chocolate
+
+
+
+
+

Bullet Lists

+

To create a list of bullet points, you start the line with a -

+
- Bullet 1
+- Bullet 2
+- Bullet 3
+- etc
+
+
+
+
+

Numbered Lists

+

To create a numbered list, you start the line with a 1. The numbers are automatically calculated for you.

+
1. Item 1
+1. Item 2
+1. Item 3
+1. etc
+
+
+
+
+

Code Blocks

+

If you want to show some code, styled with the courier font, in a box and with syntax highlighting applied you surround your code block with three backticks. For example, the following javascript snippet

+
var i;
+for(i = 0; i < 10; i++) {
+   document.write(i);
+}
+
+
+

is written with the first line as

+

`` `js

+

then your code, and the last line as three backticks

+

Note that you can specify a language type after the top 3 back ticks. Entering python after the backticks would apply syntax highlighting for python. Many languages are supported. See a full list of supported languages here. You should search for your language and then use the alias shown.

+

The Code block also includes a ‘copy to clipboard’ button to allow students to easily copy the code to their clipboard where you may want them to run this code in the assignment

+
+
copy to clipboard +
+

If you wish to suppress the ‘copy to clipboard’ button in the code block, append `-hide-clipboard` to the first line

+

Example

+
+
hide copy to clipboard +
+
+
+

Code Segments

+

If you want to insert a piece of code inline with the rest of your text, then you use a single ` (backtick) character either side of the text. For example,

+

We can define a variable var x; if we like

+

… is written in markdown as

+

We can define a variable `var x;` if we like

+
+
+

Indented Lists

+

If you want to indent a list, then indent just 2 spaces and it will indent.

+
- Bullet 1
+- Bullet 2
+- Bullet 3
+- etc
+
+
+
+
+

Callout Blocks

+

If you want to show a callout block a number of options are available and others can be easily added if required

+
+
    +
  • important

  • +
  • info

  • +
  • warning

  • +
  • topic

  • +
  • definition

  • +
  • challenge

  • +
  • guidance

  • +
  • meetup

  • +
  • hackathon

  • +
  • create

  • +
  • calendar

  • +
  • growthhack

  • +
  • xdiscipline

  • +
  • debugging

  • +
+
+

e.g.

+
  |||info
+  # My Title
+
+  Some text
+
+  |||
+
+.. image:: /img/guides/callout_info.png
+   :alt: calloutinfo
+
+
+

The Guidance callout block is only visible in play mode to designated teachers within a course. It is not visible for students.

+
+ +
+

HTML

+

You can include HTML tags

+
+
+

Latex / MathJax

+

Latex is supported using MathJax. For example

+
When $a \ne 0$ there are two solutions to $(ax^2 + bx + c = 0)$ and they are $x = {-b \pm \sqrt{b^2-4ac} \over 2a}$
+
+and for multiple lines we do the following
+
+$$
+y=x^2
+y=\frac{x^2}{x+1}
+$$
+
+
+

Click here for more details on Latex and Mathjax.

+
+
MathJax +
+

Inline math equations are encapsulated in a single $ like this: $omega = dphi / dt$.

+
+
+

Collapsible Content

+

In writing content, it is sometimes useful to provide information for the student, but to keep it hidden until they are ready.

+

This can be achieved with collapsible content and the <details> <summary> elements. The content is treated as HTML and as such a mix of HTML and Markdown can be required.

+
+

Note

+
    +
  • If you have code blocks you must have an empty line after the closing </summary> tag.

  • +
  • All code block starter lines, e.g. ```js must be preceded by a blank line.

  • +
  • The closing block ``` tag must be followed by a newline.

  • +
  • If you have multiple collapsible sections you must have an empty line after the closing </details> tag.

  • +
  • If you want the content to show by default, use <details open>.

  • +
+
+
+

Example

+
+
CollapsibleContent +
+

The following is the code used to create the image above. Three code blocks are required for this display.

+
###Example Collapsible Content
+
+<details><summary>
+    There are some <b>Special Numeric Values</b> which are part of the number data type. For each of the variables <code>a</code> <code>b</code>and <code>c</code> print out their data types and values.
+</summary><hr>
+
+The result of any mathematical operation will produce a value of type `number`.
+
+1. Variable `a` contains a value of `infinity` which represents mathematical infinity.
+2. Variable `b` is assigned a value where the left-hand operator looks like a `string` however JavaScript tries to convert it into a number which is successful.
+3. In the case of variable `c`, the string can't be converted and the operation returns the value of `NaN` which means _not a number_. If this is then used in subsequent operations the value cascades and the result will also be `NaN`.
+
+
+
<h6>Code Block</h6>
+
+```js `
+const name = {
+        first: 'John',
+        'last name': 'Doe',
+        dob: {
+            year: 1970,
+            month: 'January'
+    }
+}
+
+
+
</details>
+
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/open_close_content.html b/docs/instructors/authoring/guides/open_close_content.html new file mode 100644 index 00000000..1aff4b5e --- /dev/null +++ b/docs/instructors/authoring/guides/open_close_content.html @@ -0,0 +1,717 @@ + + + + + + + + + Open/close tabs from content — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Open/close tabs from content

+

You can include links in your content to open and close files in tabs and highlight lines of text similar to what is available in the open tabs dialog.

+
+

Syntax Summary

+

The syntax is as follows and actions can be chained together using, separated by a ;.

+

` +[Hyperlink text](open_file file1 file2; cmd ls -al) +`

+
+
+

Opening directives

+
    +
  • open_file file1 file2 fileN panel=0 where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • open_preview file panel=0 where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • open_terminal command panel=0 where command (a system command) is optional and where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • cmd systemcommand argument1 argument2 argumentN

  • +
  • open_tutor file panel=0 to open visualiser and where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • open_vm panel=0 to open virtual machine and where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • open_preview https://{{domain5000}} panel=0 to open preview of the box (on port 5000 in this example) where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
  • open_preview https://www.codio.com panel=0 to open defined website where panel is optional, in which case the default panel (0) will be used if not specified.

  • +
+
+
+

Closing directives

+
    +
  • close_all closes all tabs in all panels, except the Guide itself.

  • +
  • close_all panel=0 closes all tabs in panel 0.

  • +
  • close_file file1 closes file1 in all panels

  • +
  • close_file file1 file2 fileN panel=0 where panel is optional, in which case the default panel (0) will be used.

  • +
  • close_preview behaves like close_file for preview tabs.

  • +
  • close_terminal behaves like close_file for terminal tabs.

  • +
  • close_tutor file panel=0 where visualiser is closed for file open in panel 0

  • +
+
+
+

Important - spaces and ; in file names and commands

+

If any of your files contain a space in the name, enclose the file name in double quotes.

+
    +
  • open_file “file name.txt”

  • +
+

If you use cmd and the command has a ; character in it, then you should also use quotes.

+
    +
  • cmd “cp file1 file2; cp file3 file4”

  • +
+
+
+

Examples

+

Open a file file.txt

+

` +[Click here](open_file file.txt) +`

+

Open a file file.txt in panel 1

+

` +[Click here](open_file file.txt panel=1) +`

+

Open a file file.txt in panel 1, with a code reference and highlight 3 lines

+

` +[Click here](open_file file.txt panel=1 ref="some text in your code" count=3) +`

+

Open files file.txt and file2.txt

+

` +[Click here](open_files file.txt file2.txt) +`

+

Open a file file.txt and preview of file.txt in panel 2

+

` +[Click here](open_file file.txt; open_preview file.txt panel=2) +`

+

Run a command then open a preview of file.txt in panel 2

+

` +[Click here](cmd cp source.txt target.txt; open_preview file.txt panel=2) +`

+

Open a Terminal window in panel 1

+

` +[Click here](open_terminal panel=2) +`

+

Close file.txt and open a preview file.txt

+

` +[Click here](close_file file.txt; open_preview file.txt) +`

+

Close all open files, previews and terminals in all panels, then open a file file.txt

+

` +[Click here](close_all; open_file file.txt) +`

+

Close all open files, previews and terminals, then open a file file.txt

+

` +[Click here](close_all; open_file file.txt) +`

+

Close all open files, previews and terminals that are in panel 2, then open a file file.txt

+

` +[Click here](close_all panel=2; open_file file.txt) +`

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/page_editing.html b/docs/instructors/authoring/guides/page_editing.html new file mode 100644 index 00000000..4fb29436 --- /dev/null +++ b/docs/instructors/authoring/guides/page_editing.html @@ -0,0 +1,711 @@ + + + + + + + + + Page editing overview — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Page editing overview

+

To create new content or to edit existing content, go to the Tools->Guide->Edit menu option.

+

Use the Split View button to switch into split view mode.

+

Use the Preview button to switch into preview mode.

+

When in preview mode, you can quickly switch back to editor mode by selecting the Edit button:

+Guides Edit Mode +

Video: Editing Existing Guides Content

+
+

Anatomy of the content editor

+

Below is a screenshot of the editor with the main components highlighted.

+
+
overview +
+
+
+

Layout

+
+
Layout settings +
+

Layout settings gives you access to the key functions:

+
+
    +
  • Layout allows you to specify the number of panels/columns you want to choose for this section, or set to Previous to inherit the layout settings from the previous page.

  • +
  • +
    Show File Tree allows you to define whether to show or hide the file tree.
      +
    • Show Folders allows you to define specific folders in your project that you wish to be visible when the current section is displayed.

    • +
    +
    +
    +
  • +
  • Content Type allows you to write your content in either Markdown or HTML.

  • +
  • Guides on Left allows you to define whether the guides content shows on the left or right.

  • +
  • Teacher Only allows you to show content that only teachers are able to see.

  • +
  • +
    Close Tabs allows you to close all tabs open from previous section.
      +
    • Close Terminal Session when Close tabs enabled, allows you the option to retain terminal session from previous section. By default, terminal session will close.

    • +
    +
    +
    +
  • +
  • Teacher Only allows you to show content that only teachers are able to see.

  • +
  • Learning Objectives allows you to define learning objectives for this section.

  • +
  • +
    Open Tabs allows you to specify:
      +
    • which files you want to automatically open when the current section is displayed,

    • +
    • Preview (including external websites),

    • +
    • Open a Terminal window (including running a terminal command),

    • +
    • which lines (if any) you wish to highlight within each file.

    • +
    +
    +
    +
  • +
+
+
+
+

Assessments

+
+
Assessment settings +
+

This allows you to set up assessments and view all assessments in the assignment/project

+
+
+

Settings

+
+
Global Settings +
+
    +
  • Scripts allows you to point to one or more .js files in your project (usually located within the .guides folder) that is run when the page is shown. This is especially useful when interacting with a button in a page of content.

  • +
  • Theme allows you to select the default theme for people viewing the content. There is currently a light theme and a dark theme will be added at a later time. Dyslexic users can also choose a special theme from the Settings drop down in the content player.

  • +
  • Lexicon Topic if you use this option, an icon will appear in the toolbar that will load the Lexikon window with the selected topic automatically selected. Students can still access the Lexicon from the Tools>Lexicon menu (unless of course you are restricting the top menu available to them)

  • +
  • Suppress page numbering allows you to suppress the section page numbers when in Play Mode.

  • +
  • Hide Menu allows you to hide the main Codio menu items in the IDE (Codio/Project/File/Edit etc) when the assignment is run in a course).

  • +
  • Allow guide to be closed allows students to be able to close the content. It can be restarted by selecting the Start icon in the file tree:

    +StartGuides +
  • +
  • Use Submit Buttons see Student submission options for more information

  • +
  • Use Mark as Complete see Student submission options for more information

  • +
  • Collapsed on start starts the assignment with the guides pane collapsed. Students can show the content by clicking on the index icon on the right

    +OpenGuides +
  • +
  • Hide Section Toggle hides the sections list in your content for the students.

  • +
  • Hide Back to Dashboard button hides this button that would otherwise show on the last page of the guides.

  • +
  • Protect Layout prevents students from closing files in tabs.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/previewing_content.html b/docs/instructors/authoring/guides/previewing_content.html new file mode 100644 index 00000000..700cc6ef --- /dev/null +++ b/docs/instructors/authoring/guides/previewing_content.html @@ -0,0 +1,648 @@ + + + + + + + + + Previewing content — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Previewing content

+
+

Preview mode

+

You can switch from editing your page content to previewing it as users will see it. To do this press the preview button in the top right of the content window. When the guide renders, it will open at the page you were editing.

+
+
Preview button +
+

To return to the edit mode, press the Editor button and you will return to edit mode on the same page.

+
+
Editor Button +
+
+
+

Split screen

+

You can switch layout mode to split view mode by selecting the 2nd from left button in the header bar. Split view allows you to see the edit text and the rendered text side by side.

+
+
Split Button +
+
+
+

Play

+

You can start the Guide player from the Tools->Guide->Play menu or selecting the ‘>’ icon in the file tree

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/project_book.html b/docs/instructors/authoring/guides/project_book.html new file mode 100644 index 00000000..cc9462cc --- /dev/null +++ b/docs/instructors/authoring/guides/project_book.html @@ -0,0 +1,650 @@ + + + + + + + + + Project or course assignment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Project or course assignment

+

Before you start to author content you should be aware of the two different places you can create content using guides. Let’s look at each of the ways to create content and why you might choose each one.

+
+

Projects

+

A project is simply a standalone Codio box. It may or may not have guides content. Projects are to be found in the My Projects page on the main Codio dashboard.

+
+
Courses +
+

You would want to choose a project as the place to create your content if you have individual, ad hoc assignments or examples that do not constitute more extensive coursework or are not part of a larger series of associated projects.

+

A project can be assigned to a course at any time. All the students in that course will then be able to access that project and its content.

+

There are drawbacks to using projects to assign to students. If you have related projects and the number of projects grows, it can be hard to quickly find a project you want to assign to a course. There is also no way to arrange your projects into chronological order. Courses offer excellent solutions to this organizational problem.

+
+
+

Assignments

+

An assignment is essentially the same as a project. The only difference is that your project assignments are located in the courses area in the main Codio dashboard and accessible to other teachers who can edit the item and to students in the course. Assignments are very easy to locate as they are tidily organized within the course module they belong to. You can also arrange your assignments within a course module.

+
+
Courses +
+

You would typically use an assignment if either of the following apply.

+
    +
  • You have a logically related series of projects that you want to assign to a student that form a course module.

  • +
  • You have a collection of assessments relate to a course that are used for homework, lab assessments, projects etc.

  • +
+

A course allows you to subdivide your course into modules and then chronologically arrange your assignments within your modules. When you create a course, you have to create at least one module. A module does nothing special other than contain assignments and are simply a nice way to group your assignments.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/settings/assessments.html b/docs/instructors/authoring/guides/settings/assessments.html new file mode 100644 index 00000000..0dc17a46 --- /dev/null +++ b/docs/instructors/authoring/guides/settings/assessments.html @@ -0,0 +1,632 @@ + + + + + + + + + Assessment Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assessment Settings

+

Access assessment settings settings by clicking on Assessments while editing a Guide and then clicking on the View Existing Assessments option.

+

All the assessments in the book or guide are displayed and you can change point values from this area.

+
+
Edit Assessment Points +
+

Assessments that had been created and then deleted from a page will be highlighted in red. You can delete them from the project by clicking on the x to the left of the points.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/settings/global.html b/docs/instructors/authoring/guides/settings/global.html new file mode 100644 index 00000000..b5e137de --- /dev/null +++ b/docs/instructors/authoring/guides/settings/global.html @@ -0,0 +1,701 @@ + + + + + + + + + Global Guide Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Global Guide Settings

+

Access Global settings by clicking on Settings while editing a Guide.

+

The settings on this page apply to the entire guide or book.

+
+
Global Settings +
+
+

Scripts

+

This allows you to set up the path and file name of a script file and then load it from a page using an HTML <src> tag and just the name. Provide one script path per line.

+
+ +
+

Theme

+

There is currently only a single theme.

+
+
+

Lexikon Topic

+

Designate the name of the Lexikon topic you wish to appear, this is optional.

+
+
+

Suppress page numbering

+

Page numbers will not be shown on the individual pages.

+
+
+

Hide Menu

+

Hides the Codio menu, this will prohibit access to functions that are accessible via the menu.

+
+
+

Allow Guide to be closed

+

Students will be able to close the guide content. The content can be restarted by selecting the ‘start guide’ icon in the file tree:

+
+
StartGuides +
+
+
+

Use Submit Buttons

+

For a discussion on the use of this feature, please click here.

+

This setting is enabled by default and provides students with a button on assessments for them to submit their answers. To suppress the submit buttons, this can be disabled. +If you have set the assignment duration, when the end of assignment duration date/time is reached, all answers to the assessments will be automatically submitted.

+
+
+

Use Mark as Complete

+

For a discussion on the use of this feature, please click here.

+
+
This setting is enabled by default. Students will be able to mark an assignment as complete in one of three ways:
    +
  • Using a button at the end of the assignment.

  • +
  • From their dashboard.

  • +
  • Selecting Mark as Completed” from the **Education menu in the IDE.

  • +
+
+
+

You may decide to disable your students’ ability to Use Mark as Complete if you have set the assignment duration ‘On assignment End’ action to Mark as Complete or Disable assignment and Mark as Complete.

+
+
+

Collapsed on Start

+

Enabling this collapses the guides pane in an assignment/project when the layout is not 1 Panel. This performs a similar task to the collapse button in playmode.

+

The guides can be reopened by clicking the index icon:

+
+
StartGuides +
+
+
+

Hide Sections Toggle

+

Enabling this hides the option for students to switch sections using the Section list index icon.

+
+
+

Hide Back to Dashboard button

+

Enabling this hides the ‘Back to Dashboard’ button that otherwise displays at the end of an assignment.

+
+
+

Protect Layout

+

Enabling this prevents tabs being opened or closed by students in an assignment. This protection will not affect teachers.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/settings/media.html b/docs/instructors/authoring/guides/settings/media.html new file mode 100644 index 00000000..827dd9e6 --- /dev/null +++ b/docs/instructors/authoring/guides/settings/media.html @@ -0,0 +1,629 @@ + + + + + + + + + Media Settings for a Guide — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Media Settings for a Guide

+

Access Media settings by clicking on Media icon in the guides editor ribbon while editing a Guide.

+

This setting allows you to add a soundtrack to your page that will play when the page is shown. You can use designated times within the track to trigger opening of files, terminal windows and preview windows.

+

click here for details on how to use this feature.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/settings/opentabs.html b/docs/instructors/authoring/guides/settings/opentabs.html new file mode 100644 index 00000000..af5a55d8 --- /dev/null +++ b/docs/instructors/authoring/guides/settings/opentabs.html @@ -0,0 +1,750 @@ + + + + + + + + + Open tabs — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Open tabs

+

You can automatically perform any of the following actions when a page is shown:

+
    +
  • Reconfigure the overall IDE panel layout.

  • +
  • Open files.

  • +
  • Open a url preview including external websites.

  • +
  • Open a terminal window and optionally run a terminal command.

  • +
  • Select lines you wish to highlight within each file.

  • +
  • Open a virtual machine when set up for students.

  • +
+

You should also be aware that you can achieve the same actions from Markdown directives on a page. click here for details.

+

Files can be opened automatically to present the student with relevant files.

+

The Add Tab button allows you to create multiple lines into your configuration to address most scenarios you are likely to encounter.

+

You can also drag and drop files in from your project file tree to the page to add them to the Open Tabs section so that file will be opened in a tab for the reader as well as Drag and Drop on the Open Tabs area in the content.

+

Please note: image files dragged in to a page will be automatically tagged to display within the content rather than in a new panel. If you wish to have an image file open in a panel, then you would need to add it directly in the Open Tabs area. You can also drag/drop from the file tree. The correct path to the file will be included.

+
+

Opening Files

+

To open files, select the file type from the drop down and enter the file name, including the path to the file if not in the root (/home/codio/workspace or ~/workspace) of the project workspace.

+
+
open file +
+

To open multiple files in the same panel, enter in the following format:

+

` +index.html, main.css +`

+
+
+

Previewing

+

To preview your project, select the Preview type from the drop down. If you wish to show a workspace or external website page, use the Preview option and enter the appropriate URL.

+
+
Preview +
+

Please note: If the URL you are previewing does not allow embedding in an <iframe>, then you won’t be able to use https addresses. You would have to use an http address instead, in which case it will automatically open in a new browser tab and not within Codio.

+
+
+

Opening the terminal and running system commands

+

To open a terminal window, select the Terminal type from the drop down.

+

You can also specify a terminal command to run when a section is displayed. For example, your content may run bash scripts to copy files into the root (/home/codio/workspace or ~/workspace) of your project from the /.guides folder (which is hidden when content is running) at a certain point in your content.

+
+
terminal +
+

You can also specify system commands in a new terminal window like so:

+
+
terminal command +
+
+
+

Highlighting lines in your code

+

To highlight one or more lines within an auto-opened file, select the Highlight type from the drop down and then

+
    +
  1. Enter a piece of reference text, contained within your target file, into the Reference … field

  2. +
  3. Specify the number of lines, from that reference point, you want to highlight

  4. +
+
+
Highlight +
+

Using reference text rather than a line number means that if you insert anything into your file in the future, Codio is able to adjust the highlighted block based on the reference text. If you insert or remove lines within the block then you would need to adjust the line count.

+

If there is any potential ambiguity with this approach, simply insert a comment which is guaranteed unique and reference that.

+

Any combinations are acceptable and they will be opened in the order specified.

+

If you wish to higlighlight code but not allow students to make any changes, you can freeze code in code files.

+
+
+

Visualiser

+

Codio supports Python Tutor, allowing students to overcome a fundamental barrier to learning programming: understanding what happens as the computer executes each line of a program’s source code. +Select Visualiser and enter the path to your file.

+

Supported languages:

+
    +
  • Python

  • +
  • Java

  • +
  • JavaScript

  • +
  • TypeScript

  • +
  • Ruby

  • +
  • C

  • +
  • C++

  • +
+

Students can visualise what the computer is doing step-by-step as it executes those programs.

+
+
python tutor +
+
+
+

Examples

+

Python

+
nested = ['spam', 1, ['Brie', 'Roquefort', 'Pol l Veq'], [1, 2, 3]]
+for temp in nested:
+  print(temp)
+
+
+Python Visualizer Example +

Java

+
public static void countdown(int n) {
+  if (n == 0) {
+    System.out.println("Blastoff!");
+  } else {
+    System.out.println(n);
+    countdown(n - 1);
+  }
+}
+
+
+Java visualizer Example +

For more information and examples see Python Tutor.

+
+
+

Open Computed VM

+

Select this option to automatically open the virtual machine for the students.

+
+
Open VM +
+
+

Note

+

If selected but the assignment is not set up for virtual machine nothing will happen for the student.

+
+
+
+

Specifying the panel number

+

If your layout for this page involves multiple panels, then you can also specify the panel number to display the file in.

+
+
Panel +
+

If you leave the panel field empty, then the default panel will be chosen, which is the same as 0.

+

The panel order is left to right and then top to bottom and the last of all, the filetree (which you would rarely want to use).

+

The Guide defaults to the right unless Guides Left is specified in Page Layout.

+

Important: The first panel is 0, not 1.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/settings/page.html b/docs/instructors/authoring/guides/settings/page.html new file mode 100644 index 00000000..0ef0b76f --- /dev/null +++ b/docs/instructors/authoring/guides/settings/page.html @@ -0,0 +1,696 @@ + + + + + + + + + Guides Settings and Page actions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Guides Settings and Page actions

+
+
+
+

Layout settings

+

Access Layout settings by clicking on Layout while editing a Guide.

+
+
Page settings +
+
+

Use layout to control the appearance of your panels

+

You can choose from a variety of panel layouts to control the display inside the window for each page of content.

+
+
Layouts +
+

The dropdown list contains the available layouts.

+

click here for information on how to reference these panels when auto opening code files, url previews or terminal windows.

+

The top-most entry in the Layout dropdown is Previous. This means it will use the same panel layout as specified on the previous page.

+
+
+

Show/Hide Folders

+

You can place code samples for each page in separate directories and then you can show only the relevant folders for a specific page. On the Layout settings when Show File Tree is enabled you can specify that folder and all non-specified folders are hidden from view in the file tree.

+

The benefit of hiding folders is that the student is not distracted by other folders and files that are not relevant to the page.

+
+
+

Full File Tree:

+
+
Full File Tree +
+
+
+

Hiding of Folders:

+
+
Hiding Folders +
+
+
+

Defining folders to hide:

+
    +
  1. From edit mode on the page you wish to hide folders, access Layout settings by clicking on Layout.

  2. +
  3. Enable Show File Tree and then in the Show Folders field, specify the folder or folders which should be shown in the file tree. Use the ; character to separate multiple folders.

  4. +
+
+
Defining folders +
+

If you have several pages that show the same folders, you only need define the folders on the first page of the set of pages. All subsequent pages will use the same Show Folders setting until a new one is encountered.

+
+
+
+

Guides on Left

+

If you wish the guides content to show on the left, enable this option.

+
+
+

Close Tabs

+

Enable this to close all panels open from the previous page.

+
    +
  • Close Terminal Session when Close tabs enabled, allows you the option to retain terminal session from previous section. By default, terminal session will close.

  • +
+
+
+

Content Type

+

You can specify whether the page content type is Markdown or HTML. If you choose HTML, you will need to set the page HTML header and footer in Settings.

+
+
+

Teacher only content

+

If this switch is enabled then the page contents will not be show to students. Teachers will be able to see it when they open an assignment in a course or when opening a students assignment.

+
+
+

Learning Objectives

+

A tag field that can be used for data analysis.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/solution_templating.html b/docs/instructors/authoring/guides/solution_templating.html new file mode 100644 index 00000000..91a8f813 --- /dev/null +++ b/docs/instructors/authoring/guides/solution_templating.html @@ -0,0 +1,647 @@ + + + + + + + + + Solution File Templating — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Solution File Templating

+

To help you test/check solutions for students prior to publishing, you can write your solution code within tags CODIO SOLUTION BEGIN and CODIO SOLUTION END. Use the appropriate syntax for your programming language (ex. Python - ‘#’, C++ - ‘//’ to designate these lines as comments. The code will be visible to the teacher when editing the assignment and allow the code to be executed for testing purposes but will not be available to the student when the assignment is published. Check that you do not have mis-matched BEGIN and END statements by viewing the assignment as a test student.

+

Example Python solution file:

+
def main:
+    # CODIO SOLUTION BEGIN
+    print('Hello world!')
+    # CODIO SOLUTION END
+
+
+

will then show to students as:

+
def main:
+    # WRITE YOUR CODE HERE
+
+
+
+

Note

+

In order that other teachers working with the assignment in a course can also see the solution information to help their students, it is recommended that the solution information is also included within the guidance code block |||guidance ….. ||| on the guides page or in a specific Teacher Only page.

+
+
+

Supported language files

+

.c .cpp .java .py .html .css .r .rb .js .ts .sql .h .hpp .ocaml .ml .php .pas .yml .xml .cs .coffescript .fs .go .kt .kts .less .lua .m .h .pl .scala .vb .swift .sh .scss .sass .md .yaml .hs .rkt .ss .scm .lisp .erl .ex .exs .elm .asm .s .rs .rlib .dart .jl

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/teacher_only.html b/docs/instructors/authoring/guides/teacher_only.html new file mode 100644 index 00000000..be94b160 --- /dev/null +++ b/docs/instructors/authoring/guides/teacher_only.html @@ -0,0 +1,656 @@ + + + + + + + + + Teacher only content — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Teacher only content

+

Teacher only content can be viewed by teachers when:

+ +

Warning

+
    +
  • If your project is public and a user accesses this project via the public listing of your account they will have access to the solutions.

  • +
+

You can make Guides content available only to course teachers in the following ways:

+
+

Setting an entire page as teacher only content

+

Enable the Teacher Only slider in the layout settings to mark a page as teacher only The page will only appear in the index for teachers.

+
+
+

Setting selected content within a page as teacher only

+

To hide pieces of information within a page from students enclose the content in |||guidance ….. |||. An example is shown below.

+
|||guidance
+# Solution
+This solution will only be shown
+
+- to teachers
+- provided the content is published within a assignment
+- if you share a project normally or it is public and a student loads it, they have access to this content.
+
+|||
+
+
+

Teacher only content can also be shown to teachers within an assessment question. This allows a questions answer rationale to be shown. Please refer to the assessments section for more details.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/authoring/guides/toc.html b/docs/instructors/authoring/guides/toc.html new file mode 100644 index 00000000..2d0a8500 --- /dev/null +++ b/docs/instructors/authoring/guides/toc.html @@ -0,0 +1,691 @@ + + + + + + + + + Table of contents management — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Table of contents management

+

Once you are in the Codio IDE, you are able to create and manage content. There are two ways to access the Codio Guide.

+
    +
  • Press the pencil at the top of the file tree.

  • +
+
+
start authoring +
+
    +
  • From the menu, select Tools->Guide->Edit.

  • +
+
+

Editing page content and actions

+

Please refer to the following pages for details on how to edit page content and control page actions.

+
    +
  • Page Editing contains information on how to edit page content using markdown or HTML, hiding folders and other actions.

  • +
  • Settings and page actions contains information about opening and closing files, panel configuration and other settings.

  • +
+
+
+

Editing content

+

The image below highlights the main components of the editing page.

+
+
Edit Book +
+
+
+

Accessing the table of contents

+

To open and close the table of contents, press the Index Icon at the top right. From here you can add and organize content.

+
+
+

Chapters, sections and pages

+

A guide is comprised of pages organized into chapters and sections. A chapter is a top level item only. Sections can be placed at any location and nested to any depth.

+

You can add a new chapter, section or page by

+
    +
  • right clicking on the appropriate location within the table of contents.

  • +
  • by first selecting the item in the table of contents below which the new element should be added and then pressing one of the buttons at the top of the table of contents.

  • +
+
+
+

Deleting pages, chapters and sections

+

When in edit mode and viewing the table of contents you can select the item you wish to delete and use the trash can icon that appears on the right. Alternatively, you can ctrl-click (Mac) or right-click (PC) on a page or chapter or section and select delete from the menu of options that appears.

+
+
+

Adding content to a chapter or section

+

By default, chapters and sections are passive and do not have page content assigned to them. However, you can add content by right-clicking the item and then selecting Add content from the menu.

+

If you want to reverse the procedure, you right click and select Remove content.

+
+
+

Multiple selection

+

You can multi-select pages as follows

+
    +
  • Select an item then shift+click on a different item to select all pages between the two items. This only works for items at the same level.

  • +
  • Use ctrl+click (PC/Linux) or cmd+click (Mac) to multi select individual pages.

  • +
+
+
+

Drag and Drop

+

Drag and drop within the table of contents works with individual or multiple selected pages.

+

The following are the rules that govern the destination of the items you are dropping.

+
    +
  • If you drop in the top portion of the target item, the selection will be dropped above it at the same level.

  • +
  • If you drop in middle portion of the target item, the selection will be dropped within it if the target is a section.

  • +
  • If you drop in the lower portion of the target item, the selection will be dropped below the target at the same level.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/getstarted/howto.html b/docs/instructors/getstarted/howto.html new file mode 100644 index 00000000..a11b787b --- /dev/null +++ b/docs/instructors/getstarted/howto.html @@ -0,0 +1,268 @@ + + + + + + + + + How to Videos — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

How to Videos

+

Codio overview

+

Using Codio Resources

+

Editing Existing Guides Content

+

Adding Students and Test Students

+

Creating a Standard Code Test

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/getstarted/onboard.html b/docs/instructors/getstarted/onboard.html new file mode 100644 index 00000000..2b027b56 --- /dev/null +++ b/docs/instructors/getstarted/onboard.html @@ -0,0 +1,273 @@ + + + + + + + + + Onboarding Guide — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Onboarding Guide

+

The Codio Onboarding-Quick Start Guide provides a short interactive tour through all the key Codio features.

+

If you don’t see the Onboarding-Quick Start guide in the My Projects tab of your navigation pane,

+
+
    +
  • Click Starter Packs in the navigation pane on the left

  • +
  • Click the Certified tab

  • +
  • Type in “Onboarding” in the search bar and select the Starter Pack.

  • +
  • Select Use Pack and click Create to add it to your projects.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/getstarted/startlist.html b/docs/instructors/getstarted/startlist.html new file mode 100644 index 00000000..663f0980 --- /dev/null +++ b/docs/instructors/getstarted/startlist.html @@ -0,0 +1,279 @@ + + + + + + + + + Getting Started — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Getting Started

+
    +
  • Get an overview of Codio by viewing our collection of How to Videos.

  • +
  • Start using Codio by working through our interactive Onboarding Guide.

  • +
  • See what a course looks like in Codio by trying one of our Instructional resources.

  • +
  • View our on-demand instructional webinars

  • +
  • Try our Hello Codio Starter Packs for language specific information on creating lessons.

    +
    +
      +
    • Click Starter Packs in the Navigation Pane on the left

    • +
    • Click the Certified tab

    • +
    • Type in “Hello Codio” in the search bar and select the Starter Pack that meets your needs.

    • +
    • Select Use Pack then click Create to add it to your projects.

    • +
    +
    +
  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/getstarted/support/changelog.html b/docs/instructors/getstarted/support/changelog.html new file mode 100644 index 00000000..528a63ca --- /dev/null +++ b/docs/instructors/getstarted/support/changelog.html @@ -0,0 +1,1222 @@ + + + + + + + + + Changelog — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Changelog

+

This page contains a list of recent updates made to the Codio platform. We update Codio regularly, so this page should provide information to help you.

+

We do not report small bug fixes or issues that affect individual users, who we will notify directly.

+

[I] = Update or improvement +[F] = New feature

+

October 2023

+
    +
  • [I] [10th]: Added an ability to configure the individual Behavior Insights options

  • +
+

August 2023

+ +

July 2023

+
    +
  • [F] [12th]: Added Prime Assignment feature to remove loading time when a large number of students start assignments at the same time

  • +
+

May 2023

+ +

April 2023

+
    +
  • [F] [28th]: Update Plagiarism Checker to use Dolos tool and library

  • +
  • [F] [26th]: Allow teachers to revoke sudo access to prevent students installing unauthorized software in all assignments in a course

  • +
+

March 2023

+
    +
  • [F] [30th]: Add support for custom button in guides to launch process in the background

  • +
  • [F] [10th]: Allow users to enable Behavior Insights for their course to detect plagarism based on IDE data

  • +
+

January 2023

+ +

December 2022

+
    +
  • [F] [08th]: Add support to create hotkeys for commonly used editing functions in Guides editor

  • +
+

November 2022

+ +

October 2022

+
    +
  • [F] [25th]: Add feature to copy Pair Programming groups between assignments

  • +
  • [F] [ 4th]: Add ability to freeze code within code files that students cannot change

  • +
+

September 2022

+ +

August 2022

+ +

July 2022

+
    +
  • [F] [20th]: Add support for Windows OS with Virtual Machine

  • +
  • [F] [12th]: Add support to hide copy to clipboard button for individual code blocks

  • +
+

June 2022

+
    +
  • [F] [ 6th]: Allow users to regenerate and replace automatically created SSH keys for their account

  • +
+

May 2022

+
    +
  • [F] [26th]: Add ability to copy prerequisite assignment workspace to subsequent assignment for students

  • +
  • [I] [23rd]: Update Home/End button navigation when grading students

  • +
  • [I] [20th]: Allow submit buttons to be suppressed for Standard and Advanced Code tests

  • +
  • [I] [18th]: Add support for ‘no access until grades released’ for student assignment visibility

  • +
+

April 2022

+ +

March 2022

+
    +
  • [I] [30th]: Improve messaging if publishing assignments with gigabox slots enabled

  • +
  • [F] [29th]: Add All tab to courses dashboard to allow owners to see only courses they are a teacher in

  • +
  • [F] [29th]: Add support for solution file templating

  • +
+

February 2022

+
    +
  • [F] [ 3rd]: Add function to export individual student data in a course

  • +
  • [I] [ 2nd]: Improve handling of Scratch autosaving

  • +
  • [I] [ 2nd]: Fix problem downloading files from chrome browser

  • +
  • [I] [ 2nd]: Update handling of linter

  • +
+

January 2022

+
    +
  • [F] [12th]: Add ability to disconnect child course from parent course

  • +
+

December 2021

+ +

November 2021

+
    +
  • [F] [29th]: Add option to show/hide feedback and higlighting errors in parsons puzzle

  • +
  • [F] [26th]: Add ability to disconnect assignments in child courses from parent course

  • +
  • [F] [26th]: Add information to assignment version history to show details of the associated parent course

  • +
  • [F] [26th]: Add support for custom_codio_course_offering_sourcedid=$CourseOffering.sourcedId as a unique course identifier in Canvas where privacy settings do not allow use of lis_course_offering_sourcedid

  • +
  • [F] [26th]: Add ability to show Course/Module progress bar in students dashboard

  • +
  • [F] [18th]: Enable support to allow define number of attempts students can make for auto-graded assessments

  • +
  • [I] [15th]: Enable ECMAScript 6 syntax checking

  • +
  • [F] [10th]: Add support in Exam Proctoring for SSO authentication

  • +
  • [F] [10th]: Add support for SSO Integration

  • +
  • [I] [ 9th]: Add new User and Project preference setting (show_dot_files) to show/hide . files in file tree from students. Default = true

  • +
+

October 2021

+
    +
  • [I] [18th]: Update handling of disabled assignments when opening from LMS

  • +
  • [F] [15th]: Add support for Common Cartridge

  • +
  • [F] [13th]: Add option to export csv file for students assessment data

  • +
+

September 2021

+ +

August 2021

+
    +
  • [I] [27th]: Fix problem exporting course data for large courses

  • +
  • [F] [23rd]: Add feature to sent announcements from parent courses to associated child courses

  • +
  • [F] [19th]: Add assignment option to Disable Download prohibiting students from downloading assignment before completing

  • +
  • [I] [19th]: Fix issue where students are first to access course from LMS when created using LTI Course Copy and being added in as teacher to the course

  • +
  • [I] [18th]: Fix problem deleting large courses

  • +
  • [I] [12th]: Improve error messaging for connections to Google Classrooms

  • +
  • [F] [10th]: Add Pair Programming allowing teachers to group students to work together

  • +
  • [F] [ 5th]: Add new Random Assessment type to allow random assessments to be offered to students in assignments

  • +
+

July 2021

+
    +
  • [I] [29th]: Add timeout field for Advanced Code Test and Standard Code Test

  • +
  • [I] [21st]: Fix problem with closing of terminal session within guides

  • +
  • [I] [ 9th]: Add confirmation dialog for scratch assignments when students mark assignments as completed to ensure all work is saved correctly

  • +
  • [I] [ 8th]: Add ability to export currently published assignments in a course

  • +
  • [I] [ 6th]: Add ability to control when to show answer/rationale to students in assessments

  • +
+

June 2021

+
    +
  • [I] [30th]: Add ability to hide/disable Audio/Video/Chat in organization

  • +
  • [I] [ 9th]: Improve handling for teachers previewing disabled assignments

  • +
  • [I] [ 9th]: Fix problem with debugger

  • +
  • [I] [ 8th]: Update handling of Protect Layout guides setting to no affect teachers

  • +
  • [I] [ 4th]: Improve Git Hub API and add functions to split and publish projects into multiple assignments

  • +
  • [I] [ 1st]: Add ability to archive students in courses

  • +
+

May 2021

+
    +
  • [F] [25th]: Add ability to manage users dashboard items

  • +
  • [I] [18th]: Add extra credit field to csv downloads of students work

  • +
  • [F] [13th]: Add support for Pyret

  • +
  • [I] [12th]: Remove students ability to grant permissions to other students in assignments

  • +
  • [F] [11th]: Add support for realtime Audio/Video/Chat between active users in assignments/projects

  • +
  • [I] [ 6th]: Fix problem with top menu hiding when students mark assignments as complete

  • +
  • [I] [ 6th]: Improve Close Tabs to allow option to retain terminal session from previous sections

  • +
  • [F] [ 5th]: Add support for teachers to enable a writable copy of students work at any time

  • +
  • [F] [ 4th]: Add support for Participation Grading

  • +
+

April 2021

+
    +
  • [F] [30th]: Add support to integrate with Google Classroom

  • +
  • [I] [27th]: Update handling of guides opening in teachers working copies

  • +
  • [I] [27th]: Fix problem with Junit test output

  • +
  • [F] [21st]: Added support for Pencil Code

  • +
  • [I] [21st]: Improve PDF export allowing all selected assignments to be compiled into separate or one PDF file

  • +
  • [I] [21st]: Add SQL query grading support to Standard Code Test

  • +
  • [I] [20th]: Add support to allow anonymous LTI connections so students name/email addresses not passed to Codio

  • +
  • [I] [14th]: Improve handling of student grading for teachers

  • +
  • [F] [14th]: Add support for teachers to allow students to reset assignments in the course

  • +
  • [I] [12th]: Improve playing of video files within projects

  • +
  • [I] [ 8th]: Fix problem with handling of variables in debugger

  • +
  • [I] [ 6th]: Fix issue allowing students to access assignments before start date where Visibility on Disabled = Read Only

  • +
  • [I] [ 6th]: Add support for custom feedback message handling in Junit advanced code test

  • +
  • [I] [ 6th]: Improve publish assignment dialog

  • +
  • [F] [ 1st]: Added support for Jeroo

  • +
+

March 2021

+
    +
  • [F] [29th]: Add support to extend time for individual students when a time limit is enabled for exam proctoring

  • +
  • [I] [25th]: Add ability to filter by assessments not used and delete all together

  • +
  • [I] [25th]: Fix problem adding complex assessments from assessment library

  • +
  • [I] [23rd]: Improve visibility for teachers to preview course assignments

  • +
  • [I] [22nd]: Fix formatting in Download CSV

  • +
  • [I] [22nd]: Fix problem with Beautify

  • +
  • [I] [17th]: Fix problem with handling of LTI Course Copy when user creating parent course is removed from organisation

  • +
  • [I] [17th]: Fix problem with Teach & Edit tabs not synching location when changing tabs

  • +
  • [F] [15th]: Add ability to send Notification emails to students when either not started, started but not completed and also when grade feedback is available for them to view

  • +
  • [I] [12th]: Add feature for teachers to obtain PDF export of guides content for course assignments

  • +
  • [I] [11th]: Update Teacher Dashboard view separating ‘Assignments’ to ‘Teach’ & ‘Edit’ tabs

  • +
  • [I] [ 5th]: Add filter tag to allow search by name in Assessment Library

  • +
  • [I] [ 4th]: Restrict students from signing up by token or invite URL where course is LTI enabled.

  • +
  • [I] [ 4th]: Increase limit allowed on uploading files

  • +
  • [F] [ 2nd]: Add ability for students to earn extra credit on assignments

  • +
  • [I] [ 1st]: Add shortcut for publishing assignments in courses

  • +
  • [I] [ 1st]: Update handling of Forward Only Navigation function to warn students of un-answered assessments before allowing them to proceed to next page. They will have the option to review their answers or leave un-answered if they wish

  • +
+

February 2021

+
    +
  • [I] [17th]: Update handling of Autograde Free Text assessment feedback

  • +
  • [I] [ 2nd]: Allow teachers to make changes to students completed/read-only assignments

  • +
  • [F] [ 2nd]: Allow cloning/sharing of courses to be restricted

  • +
+

January 2021

+
    +
  • [I] [25th]: Add configuration option for nbgrader/jupyter units to allow ClearSolutions.code_stub to be used

  • +
  • [I] [25th]: Fix problem with teacher guidance not showing when previewing assignment in course

  • +
  • [I] [22nd]: Add support for ungraded assessments and for survey usage

  • +
  • [I] [19th]: Update Desktop App for new student dashboard

  • +
  • [I] [18th]: Add Student Path field for python unit tests

  • +
  • [I] [18th]: Add prolog syntax highlighting support

  • +
  • [F] [18th]: Added Git Hub API that can be used with Git Hub Actions to automate the publication of assignments.

  • +
  • [I] [15th]: Add support for HTML to be used in creating student consent form

  • +
  • [F] [11th]: New Student Dashboard released with ability for students to switch back to old dashboard if they wish for next month

  • +
  • [I] [ 5th]: Fix issue with teachers seeing different standard code test output to students

  • +
  • [I] [ 5th]: Improve standard and advanced code tests allowing files to be dragged into command/pre-exec command fields and automatically populate with relevant execution code

  • +
  • [I] [ 5th]: Improve handling of Multiple Choice questions to recalculate score for students where initially published with incorrect settings

  • +
+

December 2020

+
    +
  • [I] [24th]: Add support to show images in Fill in the Blank drop down option, and also in distractor field

  • +
  • [I] [23rd]: Add support for partial points in Multiple Choice assessment

  • +
  • [I] [22nd]: Update course creation changing to show button consistent with creating new projects/stacks/packs

  • +
  • [I] [18th]: Improve handling of adding new teachers to organisation and/or course as Read-Only teachers

  • +
  • [I] [18th]: Fix problem with UnitTestGrader type of Parsons Puzzle assessment not showing correctly in student’s assignment

  • +
  • [I] [18th]: Improve handling for saving of Scratch projects

  • +
  • [I] [16th]: Add support for partial points with Fill in the Blanks assessment allowing student to get % of total points based on % of blanks they get correct

  • +
  • [I] [ 2nd]: Improve handling of publishing Jupyter Notebook assignments to better update students version if already started

  • +
+

November 2020

+
    +
  • [F] [27th]: Add ability to revert published assignments to earlier versions

  • +
  • [I] [25th]: Improve handling of self-invoicing

  • +
  • [I] [24th]: Update handling of Parsons Puzzle assessments to always show check/submit button irrespective of submit button surpressed in guides

  • +
  • [I] [23rd]: Add ability to randomise answers to students for Multiple Choice assessment

  • +
  • [I] [19th]: Fix problem with final grades in disabled assignments

  • +
  • [I] [19th]: Fix problem with time shown in assessments being for when assignment opened, not when assessment run

  • +
  • [I] [19th]: Improve handling Master/Child to make pulling into child courses simpler

  • +
  • [I] [17th]: Improve handling of export course data for large courses

  • +
  • [I] [17th]: Update handling of adjusting deadline for assignments past end time where not previously started

  • +
  • [I] [12th]: Fix issue with submission of assessments in completed assignment when in disabled state

  • +
  • [I] [11th]: Improve switch to self pay dialogs

  • +
  • [I] [10th]: Improve handling of course view remembering module collapsed state on next visit

  • +
  • [I] [10th]: Fix issue with org owners not seeing student count in all courses

  • +
  • [I] [10th]: Improve handling of partial point grading

  • +
  • [I] [ 9th]: Update handling of changes to grading rubrics for students grandes

  • +
  • [F] [ 5th]: Add support for code test assessments output box to be expanded

  • +
  • [I] [ 2nd]: Fix problem with MCQ answer colours showing incorrectly

  • +
  • [I] [ 2nd]: Fix problem in Junit test parsing

  • +
+

October 2020

+
    +
  • [I] [30th]: Update handling of code blocks in guides

  • +
  • [I] [30th]: Fix problem with courses not showing correctly when switching between teacher and student views

  • +
  • [F] [30th]: Scratch added

  • +
  • [I] [29th]: Fix problem with LTI navigation to large codio courses

  • +
  • [I] [23rd]: Fix issue with Mark as Completed button in Guides not updating promptly

  • +
  • [I] [22nd]: Fix problem with unittest not correctly parsing test outputs

  • +
  • [F] [22nd]: Add configuration option for nbgrader/jupyter units to allow custom grading scripts with jupyter

  • +
  • [F] [20th]: Add feature to allow teachers to control receipt of autograde failure notifications in a course

  • +
  • [I] [20th]: Update user identification handling in LMS based on LMS userID to allow users to change email address in their LMS and continue to use same Codio account

  • +
  • [I] [19th]: Add ‘Parent Course’ section to Module browser when adding new module into a course

  • +
  • [I] [19th]: Add copy to clipboard icon to Code Blocks

  • +
  • [I] [14th]: Update handling of filters on assessments listings

  • +
  • [I] [ 7th]: Further updates to improve handling of course dashboard loading

  • +
  • [I] [ 7th]: Add ability to reorder answers for Multiple choice question assessment

  • +
  • [I] [ 5th]: Improve handling of dragging/dropping assignments into modules to place where dropped

  • +
  • [I] [ 5th]: Update handling of changing passwords to require existing password

  • +
  • [I] [ 2nd]: Update handling of course dashboard loading to improve loading times on slow/intermittent internet connections

  • +
  • [I] [ 1st]: Add ability to seach list of assessments in a project by name,point or order in guides.

  • +
+

September 2020

+
    +
  • [I] [29th]: Fix issue with Desktop App when connecting to assignments in courses

  • +
  • [F] [29th]: Add distractors for Fill in the blank assessment when showing possible values

  • +
  • [F] [25th]: Add Time Limit option for exam proctoring

  • +
  • [I] [25th]: Allow deadlines to be adjusted forward by days/hours and minutes

  • +
  • [I] [23rd]: Update handling of visibility on completed to require students to change status of assignment from completed to be able to continue working

  • +
  • [I] [18th]: Update handling of visibility on disabled for assignments not started before end date of course

  • +
  • [F] [16th]: Add ability to more easily generate items for Standard Code test

  • +
  • [I] [16th]: Fix problem with Code Commenting where guides layout protected

  • +
  • [I] [15th]: Improvements for Code Commenting to remember toggled state and to show new comments in real time

  • +
  • [I] [14th]: Fix problem with Fill in the Blank assessment points allocation

  • +
  • [I] [14th]: Improve handling of <pre> tags used in Fill in the Blank assessments

  • +
  • [I] [14th]: Improve presentation of adjusted deadline details to students and teachers

  • +
  • [I] [ 9th]: Further improvements in handling of adjusting deadlines past end date of assignments

  • +
  • [I] [ 3rd]: Improve handling of adjusting deadlines past end date of assignments

  • +
  • [I] [ 3rd]: Improve course assignment list handling remembering scroll location from previous visit

  • +
  • [I] [ 3rd]: Add additional student sorting options at assignment level

  • +
  • [I] [ 3rd]: Improve handling for resolving Code comments

  • +
+

August 2020

+
    +
  • [I] [27th]: Improve handling of teacher/student switching

  • +
  • [I] [26th]: Add support for grading rubric items with Grade Book assessment

  • +
  • [I] [26th]: Add support for Anonymous Grading

  • +
  • [I] [21st]: Improve information shown to students from teacher grading

  • +
  • [I] [19th]: Improve accesssibility in clickable buttons/icons for screen readers

  • +
  • [I] [17th]: Improve access to Code Comments within Guides settings

  • +
  • [I] [13th]: Fix problem with FITB assessment overflowing callout area

  • +
  • [I] [12th]: Fix issue with downloading user access data

  • +
  • [I] [12th]: Improve rubric handling allowing word wrapping and multiple lines

  • +
  • [I] [12th]: Fix problem with guides edit button

  • +
  • [I] [12th]: Improve view of modules when adding existing into courses

  • +
  • [I] [11th]: Add Code Commenting support

  • +
  • [I] [ 5th]: Add support for LTI Roles

  • +
  • [I] [ 5th]: Add support for new files to be added to existing assignments

  • +
+

July 2020

+
    +
  • [I] [31st]: UI/icon changes for guides editor

  • +
  • [I] [30th]: Improve handling of autograde scripts where error causes autograde URL not to be called

  • +
  • [I] [29th]: Add ability to easily amend assessment points for multiple assessments

  • +
  • [I] [28th]: Accessibility improvements

  • +
  • [I] [21st]: Add support for partial points in standard code test assessment

  • +
  • [F] [21st]: Add cursor presence to show other users activity in project/assignment in real time

  • +
  • [I] [16th]: UI updates for Assessment Library

  • +
  • [I] [14th]: Fix issue switching Guides to edit mode

  • +
  • [I] [14th]: Improve password management advising users if password used has been leaked

  • +
  • [I] [14th]: Fix issues opening ‘Shared with me’ projects

  • +
  • [I] [14th]: Hide .codio file in assignments without guides

  • +
  • [I] [14th]: Enlarge the grade field on course-assignment screen

  • +
  • [I] [14th]: Fix issue with Parsons puzzle

  • +
  • [I] [ 8th]: Add support for AST Parser for the Processing Language

  • +
  • [I] [ 8th]: Improve handling of script output for free text auto assessment if script passes

  • +
  • [I] [ 8th]: Improve handling of incompatible assessments when updating course assignments

  • +
  • [I] [ 8th]: Remove http preview option

  • +
  • [I] [ 3rd]: Update guides table of contents, moving buttons to the top

  • +
  • [I] [ 3rd]: Fix problem with release grade settings not passing correctly when cloning course

  • +
  • [I] [ 3rd]: Add example using [collapsible content](courses/authoring/#collapsible-content) in guides

  • +
  • [I] [ 2nd]: Update default points for assessments from 1 to allow better implementation of partial points

  • +
  • [F] [ 2nd]: Add support for Regular Expressions in Fill in the Blank assessments

  • +
  • [I] [ 1st]: Fix issue with roles when inviting teachers to organisation

  • +
  • [I] [ 1st]: Fix layout of expand/collapse arrows shown in dialogs

  • +
+

June 2020

+
    +
  • [I] [30th]: Improve handling of multiple incorrect login password attempts

  • +
  • [I] [30th]: Update naming of code playback tabs

  • +
  • [I] [22nd]: Improve handling of teachers accessing students completed assignments

  • +
  • [I] [22nd]: Enhance Autograde scripting functions.

  • +
  • [I] [22nd]: Improve loading of large courses lists

  • +
  • [I] [22nd]: Optimise messaging for teachers when accessing students assignments

  • +
  • [I] [22nd]: Fix issue with Project settings values of ALLOW PRIVATE STATIC PREVIEW and PROTECT DYNAMIC PORTS params not being correctly applied in student’s assignment project

  • +
  • [I] [19th]: Update Parsons Puzzle assessment

  • +
  • [I] [17th]: Allow users to be teacher and student in same course

  • +
  • [F] [15th]: Code Playback allowing teachers to playback students steps

  • +
  • [I] [15th]: Improve messages in empty archived courses

  • +
  • [I] [12th]: Make jupyter lock cell editing flag value as true by default

  • +
  • [I] [11th]: Fix problem with loading course listings

  • +
  • [I] [10th]: Update logic handling renewal dates for self invoicing

  • +
  • [I] [ 9th]: Fix problem when deleting last page in guides

  • +
  • [I] [ 8th]: Fix problem with guides fonts

  • +
  • [I] [ 5th]: Improve naming of preview tabs

  • +
  • [I] [ 5th]: Fix problem for teachers opening students jupyter notebook files

  • +
  • [I] [ 3rd]: Fix issue with formatting of .md files downloaded from projects/assignments

  • +
  • [I] [ 3rd]: Fix problem with jupyter assignment feedback for multiple submissions and/or publishes

  • +
  • [I] [ 1st]: Fix problem with deployment functions

  • +
  • [I] [ 1st]: Update behaviour of 4 panel guides layout

  • +
+

May 2020

+
    +
  • [I] [30th]: Update content in $CODIO_AUTOGRADE_ENV variable

  • +
  • [I] [29th]: Fix problem running autograde scripts on archived assignments

  • +
  • [I] [28th]: Improve messaging when errors in autograde scripts

  • +
  • [I] [28th]: Update message shown when users try to access others projects without permission

  • +
  • [I] [27th]: Fix issue with incorrect redirection when pressing enter on assessment name creation

  • +
  • [I] [27th]: Fix problem with 3 blue dot menu not being accessible on disabled assignments

  • +
  • [I] [27th]: Update search in documentation so Enter key no longer clears search field

  • +
  • [I] [27th]: Fix problem with assignment of partial points

  • +
  • [I] [27th]: Improve messaging for autograde script issues

  • +
  • [I] [27th]: Fix problem with visibility on completed

  • +
  • [I] [26th]: Fix issue where users can be added twice to project permissions

  • +
  • [I] [26th]: Update students assignments on next run if Gigabox settings are changed in the course

  • +
  • [I] [26th]: Improve message when users credentials not passed

  • +
  • [I] [22nd]: Improve messaging for students creating account from LMS

  • +
  • [I] [21st]: Upgrade user password requirements - min length to 8 symbols

  • +
  • [I] [21st]: Update messaging if user tries to open url of existing project of another user without permission

  • +
  • [I] [21st]: Fix problem with Blockly blocks in assignments

  • +
  • [I] [19th]: Fix problem accessing assignments from test student accounts

  • +
  • [I] [18th]: Fix problem creating similarly named assignments in different coursers

  • +
  • [I] [15th]: Improve [Pin](/courses/classes/#pinunpin-units) function to allow multiple assignments to be pinned

  • +
  • [I] [15th]: Recommended stacks updated to use Ubuntu 18.04

  • +
  • [F] [15th]: Codio Feedback released where you can raise new feature requests and vote/comment on ideas raised by others

  • +
  • [I] [14th]: Fix problem with lack of context options when mouse right click on file tree root

  • +
  • [I] [14th]: Accessibility fixes/improvements

  • +
  • [I] [13th]: Fix problem with release grade switch showing incorrect status

  • +
  • [F] [09th]: Add Exam Mode Options for course assignments

  • +
  • [I] [08th]: Update handling of archived courses showing in LMS’s

  • +
  • [I] [07th]: Fix problem with searching/finding users/orgs/groups when adding permissions to projects/assignments

  • +
  • [F] [07th]: Update project/assignment creation to include configured .codio file and sample files

  • +
  • [I] [06th]: Update default Readme.md files created with new projects/assignments

  • +
  • [I] [06th]: Improve presentation of Debug menu

  • +
+

April 2020

+
    +
  • [I] [30th]: Improve error messaging in Parsons Puzzle

  • +
  • [I] [24th]: Fix issue deleting tabs saved in course

  • +
  • [I] [22nd]: Improve handling of LMS roles passing to Codio

  • +
  • [F] [21st]: Add function to allow teachers to preview assignments in courses

  • +
  • [F] [20th]: Add function to Add new assignments from Master to Child courses

  • +
  • [F] [14th]: Show assignment end date (where set) to students in their recently used cards in their dashboard

  • +
  • [I] [14th]: Fix issue with mark as completed button not showing on frame reload

  • +
  • [I] [14th]: Update message to students when trying to start assignments in LTI enabled courses

  • +
  • [I] [14th]: Add Rubric feedback to students when viewing their grades

  • +
  • [I] [14th]: Add functions to allow pull to child courses at course module level

  • +
  • [I] [14th]: Improve updating child courses showing pull option for child of child courses

  • +
  • [I] [13th]: Added ‘Number of started’ and ‘Number of completed’ to student tab order by field

  • +
  • [I] [ 9th]: Onboarding Guide updated for new IDE

  • +
  • [I] [ 8th]: Fix issue in My Projects - Shared with Me

  • +
  • [F] [ 8th]: Add feature to set teachers as Read Only at Organisation and/or Course level

  • +
  • [I] [ 8th]: Accessing Codio Resources from IDE now opens in new tab

  • +
  • [I] [ 7th]: Improve updating child courses from master to only show pull button when updates available

  • +
  • [I] [ 6th]: Fix issue with incorrect format for download csv

  • +
  • [I] [ 6th]: Add functionality to allow updates to assignments in a master course to be pulled to cloned courses

  • +
  • [I] [ 3rd]: Fix loading of guides content in CS: Introduction in Python

  • +
  • [I] [ 3rd]: Rename filter option names for student grading

  • +
  • [I] [ 2nd]: Fix problem with LTI course integration parameter

  • +
  • [I] [ 1st]: Fix problem when trying to add CS: Introduction in Python resource to account

  • +
  • [I] [ 1st]: Fix problem filtering students by ‘Not Graded’ in a course

  • +
  • [F] [ 1st]: Release of new IDE improving Teacher section

  • +
  • [F] [ 1st]: Update internal IDE links to new documentation

  • +
+

January 2020

+
    +
  • [I] [08th]: Remove Firefox performance warning as earlier issues now addressed in latest FF versions

  • +
+

December 2019

+
    +
  • [I] [17th]: Update Phonegap API

  • +
  • [I] [12th]: Review handling of .git in authors units to improve collaboration

  • +
+

November 2019

+
    +
  • [I] [22nd]: Improve visibility of assessment id to list of assessments

  • +
  • [I] [21st]: Fix problem uploading images to stacks/packs/units/course/modules

  • +
  • [I] [19th]: Fix problem with assessment button not showing

  • +
  • [F] [17th]: Add support for LTI 1.3 integration

  • +
  • [I] [11th]: Fix problem connecting to BitBucket repo’s

  • +
  • [I] [06th]: Update messaging when unable to publish jupyter based units

  • +
  • [I] [05th]: Update handling of users signing up through LMS

  • +
+

October 2019

+
    +
  • [F] [16th]: Add function to allow Classes to be sorted by begin date of class

  • +
  • [I] [02nd]: Fix problem with AOB allocation for self pay organisations

  • +
+

September 2019

+
    +
  • [I] [27th]: Improve handling of autograde scripts for large units

  • +
  • [I] [24th]: Improve accessibility function in Find panel

  • +
  • [I] [19th]: Fix problem opening files in same tab as guides

  • +
  • [I] [11th]: Fix problem with SSH connections

  • +
  • [I] [09th]: Fix problem with handling of answer/rationale for free text assessment

  • +
  • [F] [04th]: Add support for the standard input when debugging C/C++, node.js and GDB programs.

  • +
+

August 2019

+
    +
  • [I] [29th]: Fix problem with marking units as completed

  • +
  • [I] [28th]: Update handling of grade book comments

  • +
  • [I] [28th]: Improve stack creation when creating from an older stack

  • +
  • [F] [28th]: Add Codio Global Assessment library

  • +
  • [I] [27th]: Add hint to student tab in classes for number of students

  • +
  • [I] [27th]: Update handling of answer/rationale showing for students

  • +
  • [F] [20th]: Add Assessments Library to allow sharing of assessments

  • +
  • [I] [15th]: Fix issue with navigation after searching in guides

  • +
  • [F] [15th]: Add support for self pay students to purchase through institutions bookstores

  • +
  • [I] [09th]: Fix problem accessing projects in ‘Shared with Me’ area

  • +
  • [I] [02nd]: Fix problem deleting modules in course

  • +
+

July 2019

+
    +
  • [I] [31st]: Update handling ofviewing Git repo’s in Codio account

  • +
  • [I] [30th]: Add currentPage and totalNumberofPages parameters for custom scripts

  • +
  • [I] [30th]: Fix problem with contact URL settings in IDE chat area

  • +
  • [I] [29th]: Fix issue with sorting of new classes being added

  • +
  • [I] [25th]: Fix issue with guides section list not correctly showing for completed unit

  • +
  • [I] [23rd]: Fix problem with focus on guides pages

  • +
  • [I] [23rd]: Redesign dialog pages for assessments

  • +
  • [I] [19th]: Add user cues when using git remote

  • +
  • [I] [11th]: Improve handling of long class names

  • +
  • [I] [11th]: Fix problem with color picker

  • +
  • [I] [02nd]: Update Class Dashboard pages and other menus for better accessibility

  • +
+

June 2019

+
    +
  • [I] [19th]: Update Dashboard pages for better accessibility

  • +
  • [I] [17th]: Improve handling of publication of large units

  • +
  • [I] [11th]: Fix issue with showing/hiding folders in guides

  • +
+

May 2019

+
    +
  • [I] [17th]: Fix guides navigation problem causing layout to be incorrect

  • +
  • [I] [07th]: Fix issue with library path not saving correctly in JUnit settings

  • +
  • [I] [07th]: Fix issue with debugger with Node 11

  • +
  • [F] [06th]: Add additional configuration options for nbgrader/jupyter units

  • +
  • [I] [03rd]: Improve handling of autograder custom scripts

  • +
+

April 2019

+
    +
  • [I] [30th]: Add python working directory parameter for Advanced Code Test to support python unit tests running from dot folders

  • +
  • [I] [23rd]: Update clike codemirror plugin for better handling of objective c files

  • +
  • [I] [23rd]: Fix layout problem for pull/push buttons in desktop app

  • +
  • [I] [23rd]: Fix problem with updating Jupyter Notebook units to a class

  • +
  • [I] [22nd]: Improve layout of private/public icon in class

  • +
  • [I] [18th]: Fix problem with autograde scripts where units are read only

  • +
  • [F] [18th]: Add support to extend timeout for nbgrader/jupyter units

  • +
  • [I] [17th]: Improve messaging where assessment submissions unable to complete correctly

  • +
  • [I] [17th]: Improve handling of code assessment submissions files

  • +
  • [I] [16th]: Update handling of test students to show correct class logged into

  • +
  • [I] [15th]: Fix problem with handling of grading templates for class units

  • +
  • [I] [ 9th]: Fix problem with changing theme in guides

  • +
  • [I] [10th]: Remove grading button when unit is opened as teacher

  • +
  • [I] [10th]: Fix problem with saving panel layout on submission

  • +
  • [F] [10th]: Add support for secure assessment script execution

  • +
  • [I] [10th]: Improve handling of copying links/tokens to show confirmation

  • +
  • [F] [10th]: Add assessment attempts count into download csvfiles

  • +
  • [I] [10th]: Fix problem with partial points for advanced code test not showing correctly in dashboard

  • +
  • [F] [10th]: Add custom script to allow third-party systems to track/help students.

  • +
  • [I] [ 9th]: Improve standard code feedback field text handling

  • +
  • [I] [ 9th]: Fix problem with changing theme in guides

  • +
  • [F] [ 9th]: Add sense.network] assessment to offer feedbackdback to students on code submissions

  • +
  • [I] [ 7th]: Improve visibility of keyboard focus

  • +
  • [I] [ 7th]: Change wording Upgrade to Update for consistency of language

  • +
  • [F] [ 6th]: Add ability to exclude files from students units in a class

  • +
+

March 2019

+
    +
  • [F] [31st]: Empty Stack set to use Ubuntu 18.04.

  • +
  • [F] [29th]: Add ability to clone class from main class dashboard

  • +
  • [I] [27th]: Fix terminal scrolling problem when unit run in iframe

  • +
  • [I] [26th]: Update messaging to students marking units as completed

  • +
  • [I] [26th]: Minor dashboard text changes

  • +
  • [I] [22nd]: Fix problem with handling of read only projects where external services are used (e.g. Jupyter/RStudio)

  • +
  • [I] [21st]: Fix problem with storage of guides layout settings in units

  • +
  • [I] [20th]: Improve handling of adding teachers to class

  • +
  • [I] [19th]: Fix problem with teachers not able to access students projects after deadline passed

  • +
  • [I] [15th]: Fix problem for student feedback when unit running in iframe

  • +
  • [I] [15th]: Fix issue with students able to start units after deadline is past

  • +
  • [I] [15th]: Remove menu item “Submit Jupyter assessments” from jupyter units

  • +
  • [I] [14th]: Improve handling of test autograde script

  • +
  • [F] [11th]: Improve organisation and class contact url for students, allowing multiple contact urls to be defined.

  • +
  • [I] [ 7th]: Improve layout for unit penalty screen

  • +
  • [F] [ 7th]: Add Education>Validate Jupyter menu item to allow authors to validate and check Jupyter projects before publishing

  • +
  • [I] [ 7th]: Update guides page navigation handing to mitigate content synchronisation issues

  • +
  • [I] [ 6th]: Improve handling of submit jupyter assessments button

  • +
  • [I] [ 6th]: Fix issue with show expected answer in html pages

  • +
  • [I] [ 5th]: Improve validation to detect errors better in .codio-menu file

  • +
  • [I] [ 4th]: Fix issue with symbols used in guides TOC

  • +
  • [I] [ 4th]: Fix problem with Tools>Guides>Remotes menu item

  • +
  • [F] [ 4th]: Add support to provide additional feedback to students when test fails in standard code test

  • +
  • [I] [ 1st]: Improve messaging when stack used in class unit is deleted where unit was not re published

  • +
+

February 2019

+
    +
  • [I] [28th]: Fix issue in upgrade course where long names used in module and/or units

  • +
  • [I] [28th]: Fix layout issue in standard code test assessment in html type of page

  • +
  • [I] [26th]: Improve messaging when connecting project in desktop app

  • +
  • [I] [26th]: Improve handling of redirection when unit run in LMS when students mark the unit as completed

  • +
  • [I] [26th]: Add refresh button to visualisation assessment

  • +
  • [I] [26th]: Fix problem for students being unable to view the content of the unit when marked as complete and visibility set to read only

  • +
  • [I] [26th]: Update Light reading theme drop down in guides global settings to read only

  • +
  • [I] [26th]: Make course/module owner brighter

  • +
  • [F] [25th]: Add visualisation assessment support in guides

  • +
  • [F] [21st]: Add support for promotion codes in Self Invoicing

  • +
  • [I] [20th]: Update handling of soft tabs for python that were not handling backspace and delete buttons actions correctly

  • +
  • [I] [20th]: Improve messaging on stack version creation if user has no access

  • +
  • [I] [19th]: Improve messaging when publishing unit in a module that the user hasn’t previously opened

  • +
  • [I] [18th]: Improve handling of course upgradein class where there is a mix of public and private modules

  • +
  • [I] [15th]: Enlarge size of confirmation dialogs text for better accessibility

  • +
  • [I] [15th]: Remove project settings from desktop app

  • +
  • [I] [15th]: Improve messaging display when invalid dates entered for a class

  • +
  • [I] [15th]: Update download csv to remove data of students removed from the class

  • +
  • [I] [15th]: Improve guides settings to save and close from one click

  • +
  • [F] [15th]: Add new guides layout including file tree with guides presented on the left hand side

  • +
  • [F] [14th]: Add new assessment type: Parson’s puzzle

  • +
  • [I] [12th]: Review button colours on Class Admin screen

  • +
  • [I] [12th]: Fix issue with one attempt only message for assessments showing incorrectly when not enabled

  • +
  • [I] [12th]: Fix problem with dark theme in FF65 on MacOS

  • +
  • [I] [11th]: Improve handling of invitation of teachers into classes

  • +
  • [F] [ 6th]: Fix problem with exporting project as zip

  • +
  • [I] [ 5th]: Increase inactive timeout period to 60mins

  • +
  • [F] [ 4th]: Add course permissions feature to restrict access to courses for teachers/students

  • +
+

January 2019

+
    +
  • [I] [30th]: Improve handling of project preview when waiting for services to start

  • +
  • [F] [29th]: Add statistical collection for teachers/instructors to export class activity

  • +
  • [I] [25th]: Fix issue with changing stack in project

  • +
  • [I] [25th]: Improve handling for Brightspace D2L integration where by if you have `resource_link_id```field an endping URL of ```https://apollo.codio.com/lti/link_endpoint` can be used

  • +
  • [I] [24th]: Fix problem with unit ordering in course module when adding new units

  • +
  • [I] [23rd]: Fix problem updating students units in class when archived

  • +
  • [I] [23rd]: Fix problem with partial points implemented in Advanced Code Test assessment

  • +
  • [F] [21st]: Add new guides layout for ‘3 panels without tree’ with guides presented on the left hand side

  • +
  • [F] [18th]: Add ability to clone content of existing class into a new class

  • +
  • [F] [18th]: Add new Custom Button function to all users to restore current files in guides

  • +
  • [F] [17th]: Add new guides layout for ‘2 panels without tree’ with guides presented on the left hand side

  • +
  • [F] [16th]: Add new global setting in guides to restrict students from opening/closing tabs in unit

  • +
  • [I] [16th]: Fix problem with handling of .codiomenu on guides being closed

  • +
  • [I] [16th]: Fix problem for self-pay students agreeing to Student Consent

  • +
  • [I] [11th]: Fix problem with grade feedback dialogs not opening for students

  • +
  • [I] [ 8th]: Improve contrast colour for confirmation code dialogs

  • +
  • [I] [ 8th]: Update [RStudio](https://codio.com/home/stacks/dd949669-ae2d-480b-b2b7-44f69476a07c?tab=details) stack to be loginless

  • +
  • [I] [ 6th]: Improve handling of syncronisation in desktop app

  • +
+

December 2018

+
    +
  • [I] [28th]: Improve accessibility handling of next/previous buttons in guides

  • +
  • [I] [26th]: Improve handling of user authentication when allow private static preview is enabled

  • +
  • [I] [24th]: Improve handling of .git folder if it is in .guides/secure folder

  • +
  • [I] [17th]: Add setting to manage students access to project based units when completed

  • +
  • [I] [14th]: Fix problem with event listener

  • +
  • [I] [14th]: Add jupyter preview to student’s grade feedback preview

  • +
  • [I] [14th]: Improve guides for visually impaired users

  • +
  • [I] [14th]: Add additional fields for students answers into the download csv

  • +
  • [I] [11th]: Improve handling of gigabox allocation when run from a course

  • +
  • [I] [10th]: Fix problem with Advanced Code Test with Custom language type and Allow Partial Points

  • +
  • [I] [ 7th]: Add answer and rationale fields to grading feedback for student dashboard

  • +
  • [I] [ 6th]: Fix problem with global scripts in guides

  • +
  • [I] [ 5th]: Improve grading feedback for student dashboard

  • +
  • [I] [ 4th]: Improve messaging when synchronising of files pulled/pushed to desktop app

  • +
+

November 2018

+
    +
  • [F] [29th]: Add grading feedback for student dashboard

  • +
  • [F] [29th]: Pass grading feedback URL to LMS systems

  • +
  • [I] [29th]: Improve handling of line delimiters in .codio-menu file

  • +
  • [I] [29th]: Improve synchronisation of files pulled/pushed to desktop app

  • +
  • [F] [22nd]: Allow files/folders to be excluded from synchronisation with desktop app

  • +
  • [F] [22nd]: Add support for python3 in unit tests

  • +
  • [F] [21st]: Add separate fields for first and last name to download csv

  • +
  • [I] [21st]: Fix problem with first time execution of advanced code test assessments

  • +
  • [I] [20th]: Fix problem trying to start unit from a course

  • +
  • [I] [16th]: Fix problem with delete confirmation dialog showing in error when deleting owned module

  • +
  • [I] [15th]: Improve highlighting of differences in standard code text

  • +
  • [I] [14th]: Improve sorting when accented characters used

  • +
  • [I] [13th]: Fix problem with project permissions not updating when project renamed

  • +
  • [I] [12th]: Update handling of autograde scripts in .guides/secure folder

  • +
  • [I] [ 9th]: Improve handling of Public/Private Settings

  • +
  • [I] [ 9th]: Improve messaging for Allow Box Cloning

  • +
  • [I] [ 8th]: Fix problem with scrolling in guides with assessments

  • +
  • [I] [ 6th]: Fix problem with handling of spaces in Standard Code Test output

  • +
  • [I] [ 6th]: Fix sorting of modules

  • +
  • [I] [ 6th]: Update message shown when units already graded by another teacher

  • +
  • [F] [ 5th]: Add Autograde Free Text assessment

  • +
+

October 2018

+
    +
  • [I] [31st]: Update guidelines for privacy settings for Safari 12.0 browser

  • +
  • [I] [29th]: Fix problem accessing grading in students units

  • +
  • [F] [29th]: Allow use of accented characters

  • +
  • [I] [26th]: Fix issue with users able to update project settings when not having admin rights

  • +
  • [I] [26th]: Improve handling of guide editor

  • +
  • [I] [24th]: Fix focus problem when adding assessments to guides page

  • +
  • [I] [24th]: Improve tab handling in pop up dialogs

  • +
  • [I] [23rd]: Add function to hide Codio logo icon when customizing top menus for students

  • +
  • [I] [19th]: Fix rendering of bold text in guides for Firefox browser

  • +
  • [I] [19th]: Fix problem using tabs in Firefox

  • +
  • [F] [18th]: Add new user/project preference navigateWithinSoftTabs to simplify navigation when soft tabs are used

  • +
  • [I] [18th]: Fix problem with loss of focus when in split view mode editing guides

  • +
  • [I] [18th]: Fix problem in guides saving close tab state

  • +
  • [I] [18th]: Add text description that is visible on mouse over when the icon gets focus.

  • +
  • [I] [18th]: Fix problem rendering output of code tests on Mac OS

  • +
  • [I] [15th]: Fix problem unpacking projects

  • +
  • [I] [15th]: Fix problem with page focus in guides

  • +
  • [I] [15th]: Improve menu handling when customizing top menus for students

  • +
  • [F] [10th]: Add function to automatically release grades in new classes. See organisation release grades for more information

  • +
  • [F] [ 9th]: Add ability to change all students completed unit to incomplete. See force marked as complete for more information.

  • +
  • [I] [ 3rd]: Fix problem when executing commands in Guides that contain brackets

  • +
  • [F] [ 3rd]: Add organisation and class contact url for students to be able to raise questions, seek assistance from your preferred area (forums/LMS discussion areas etc)

  • +
  • [F] [ 3rd]: Add ability to sort students in classes by first or last names

  • +
+

September 2018

+
    +
  • [I] [30th]: Fix problem with Multiple Choice assessments not showing students correct answers on submission

  • +
  • [I] [26th]: Fix layout of media page in guides settings

  • +
  • [F] [26th]: Add feature for IDE top menu to be customized for student view when running guides

  • +
  • [I] [24th]: Fix problem with Self Invoicing

  • +
  • [I] [24th]: Improve messaging of local file changes when disconnecting project in desktop application

  • +
  • [I] [20th]: Fix problem embedding content in Canvas

  • +
  • [I] [20th]: Improve download csv content adding students email address

  • +
  • [I] [20th]: Remove character limitation for grading comments

  • +
  • [I] [15th]: Improve download csv content, adding 2 new fields for Points and Max Points

  • +
  • [F] [13th]: Add ability for ‘mark as completed’ to be disabled for individual units in classes

  • +
  • [I] [12th]: Remove https preview warning to avoid confusion for students

  • +
  • [I] [12th]: Improve handling of fullscreen button in frames

  • +
  • [I] [12th]: Improve Usability handling in menus

  • +
  • [I] [11th]: Fix problem with changing state of ‘use submit buttons’ setting in guides

  • +
  • [I] [11th]: Fix problem when adding projects to module with reserved words

  • +
  • [I] [10th]: Update explanatory text for Visibility Summary for Course and Modules

  • +
  • [I] [10th]: Fix problem with Guides Table of Contents

  • +
  • [I] [10th]: Improve handling of LTI full screen support

  • +
  • [I] [10th]: Improve handling of empty points field in Grade book assessment

  • +
  • [I] [ 5th]: Add example bash script for autograding on completion

  • +
  • [I] [ 5th]: Improve handling of duplicate file warning

  • +
  • [I] [ 4th]: Improve colour contrast on Quick Open and Command Bar

  • +
  • [I] [ 4th]: Fix problem with handling of cancel button actions in project settings area

  • +
  • [I] [ 3rd]: Add support for lis_course_offering_sourcedid as a unique course identifier in LMS systems

  • +
+

August 2018

+
    +
  • [I] [29th]: Update handling of panel widths when guides is collapsed/reopened when in 3 column layout

  • +
  • [I] [29th]: Fix problem with Quick Open handling in screen readers

  • +
  • [F] [29th]: Added Self Invoicing for University and School organisation

  • +
  • [F] [29th]: Added support for LTI Constant URLs and LTI Class fork

  • +
  • [F] [22nd]: Added Codio LTI App to improve ease of integrating Codio with LMS systems

  • +
  • [I] [16th]: Fix issue with Custom Buttons incorrectly handling

  • +
  • [F] [ 9th]: Add ability to use current file in debugger targets

  • +
  • [I] [ 7th]: update handling of Crunch projects

  • +
  • [I] [ 7th]: Improve visibility of form elements and handling of Quick Open dialog

  • +
  • [I] [ 7th]: Update menu handling for screen readers

  • +
  • [F] [ 7th]: Add additional 3 column layout options

  • +
  • [I] [ 4th]: Fix problem with terminal opening in guides

  • +
  • [I] [ 2nd]: Add support for manual grading for nbgrader

  • +
+

July 2018

+
    +
  • [F] [26th]: Add typescript support for desktop application

  • +
  • [F] [18th]: Improve handling of enabling/disabling of class units

  • +
  • [F] [17th]: Fix issue with cloning Partial Point Rubric in IE browser

  • +
  • [F] [13th]: Add support for nbgrader

  • +
  • [I] [12th]: Improve handing of copy file actions

  • +
  • [I] [11th]: Improve handling of cookie consent

  • +
  • [F] [10th]: Allow Partial Point Rubric to be cloned from other units

  • +
  • [I] [ 3rd]: Update handling of Edge browser integration with LMS systems

  • +
  • [I] [ 3rd]: Improve Plagiarism checker adding new filters that can be set

  • +
  • [I] [ 2nd]: Fix problem with tab focus being lost in guides

  • +
  • [I] [ 2nd]: Fix problem when removing units from module/course in a class

  • +
+

June 2018

+
    +
  • [I] [29th]: Improve visibility of active buttons in tabs

  • +
  • [I] [29th]: Improve export class data to better handle any archived units

  • +
  • [I] [29th]: Fix problem with layout for manual grading in IE browser

  • +
  • [I] [27th]: Fix problem with adding user project permissions

  • +
  • [F] [22nd]: Add STACK file type in Math assessment authoring and YAML validation.

  • +
  • [I] [21st]: Improve teacher view of pinned units

  • +
  • [F] [20th]: Add Partial Point Rubric for manual grading

  • +
  • [I] [19th]: Improve behaviour of free text assessment

  • +
  • [I] [19th]: Update unit publishing to ignore assessmentsAnswers.json file

  • +
  • [I] [19th]: Update handling of assessment submiit button

  • +
  • [F] [15th]: Add collapse on start for guides

  • +
  • [I] [15th]: Improve handling of exporting class data

  • +
  • [I] [13th]: Improve support for keyboard and screen readers

  • +
  • [I] [13th]: Update handling of dynamic port protection

  • +
  • [I] [ 5th]: Add overview video for desktop application

  • +
  • [I] [ 4th]: Improve handling of mark as completed process for students

  • +
+

May 2018

+
    +
  • [I] [31st]: Improve handling of autocomplete when searching for users to share projects

  • +
  • [I] [28th]: Improve handling of local deleted files and folders in desktop application

  • +
  • [I] [28th]: Improve handling of assessment points if changed when updating unit in class

  • +
  • [I] [24th]: Improve handling of exit terminal commands

  • +
  • [I] [21st]: Fix problem with teachers opening own last version of unit in courses

  • +
  • [I] [21st]: Fix issue with restarting guides after changing settings

  • +
  • [I] [21st]: Improve message handling of errors in debugger

  • +
  • [I] [21st]: Fix issue for students opening list of units

  • +
  • [I] [18th]: Fix issue with updating stack causing issue publishing new version of course unit

  • +
  • [F] [18th]: Add support for timeout period in advanced code tests

  • +
  • [I] [18th]: Improve layout for student grading screens

  • +
  • [I] [18th]: Update subscription information shown when plan expires

  • +
  • [I] [16th]: Teachers in Self-Pay organisations no longer require subscription

  • +
  • [F] [14th]: Restrict preview of box url to owners of the box. See Project Settings for more information

  • +
  • [I] [14th]: Improve handling of file and directory names in desktop application

  • +
  • [F] [ 8th]: Add support for Python and Javascript in advanced code tests

  • +
  • [F] [ 4th]: Improve handling of tab focus when returning to a unit

  • +
  • [I] [ 4th]: Fix issue with project list last accessed sorting

  • +
  • [F] [ 4th]: Add Grade Book assessment

  • +
+

April 2018

+
    +
  • [F] [27th]: Add support for Java and Ruby in advanced code tests

  • +
  • [I] [27th]: Improve handling of downloading files in private projects

  • +
  • [I] [27th]: Improve handling for language server protocol

  • +
  • [I] [24th]: Improve accessibility to support dialog actions accessible from keyboard

  • +
  • [I] [24th]: Fix issue with replace in projects

  • +
  • [I] [20th]: Fix grading issue with rubric templates

  • +
  • [I] [20th]: Improve messaging for errors when synchronising units in desktop application

  • +
  • [I] [19th]: Fix problem with invite teacher process

  • +
  • [I] [16th]: Improve handling of unit/project descriptions in desktop application

  • +
  • [I] [14th]: New desktop application allowing a local code workspace to synchronize with a Codio box.

  • +
  • [I] [13th]: Improve performance of X-server

  • +
  • [I] [13th]: Improve handling of double clicking on submission of assessments

  • +
  • [I] [ 4th]: Improve visualisation of navigation options in teacher dashboard

  • +
  • [I] [ 2nd]: Update IDE shortcut key for accessing menu (to F10)

  • +
  • [I] [ 2nd]: Update handling of download csv to better handle characters in grading comments

  • +
+

March 2018

+
    +
  • [I] [27th]: Improve IDE menu items for better keyboard accessibility

  • +
  • [I] [27th]: Update structure of exporting class data

  • +
  • [I] [27th]: Improve memory handling for language server protocol

  • +
  • [I] [23rd]: Improve handling of focus when switching panels using keyboard shortcuts

  • +
  • [I] [20th]: Improve messaging when stack/pack owner is changed

  • +
  • [F] [20th]: Allow adjustment of unit penalties for individual students

  • +
  • [I] [19th]: Fix sorting of units in classes

  • +
  • [I] [16th]: Fix problem starting Plagiarism tool

  • +
  • [I] [15th]: Fix problem with export class data for old classes

  • +
  • [I] [12th]: Fix issue with image handling when editing/creating starter packs

  • +
  • [I] [ 7th]: Improve handling of course updates in classes

  • +
  • [I] [ 7th]: Fix issue with class dashboard in IE browser

  • +
  • [F] [ 6th]: Add support for searching/filtering of classes

  • +
  • [I] [ 5th]: Improve handling for opening of large project warning

  • +
  • [I] [ 5th]: Fix issue with terminal reconnections

  • +
+

Febuary 2018

+
    +
  • [I] [26th]: Fix issue with unit reloading for students

  • +
  • [F] [26th]: Expand Gigabox options to include 1GB, 2GB, 8GB,16GB and GPU (for GPU-accelerated instances) boxes.

  • +
  • [I] [26th]: Fix issue with regrade complete

  • +
  • [I] [13th]: Fix issue with MCQ]/FITB assessments not showing correct answers

  • +
  • [I] [13th]: Fix issue with undo/redo

  • +
  • [I] [12th]: Fix issue with file tree not updating correctly when files created via terminal

  • +
  • [I] [12th]: Fix issue with unit settings changing when Upgrade Course is run

  • +
  • [I] [12th]: Fix issue with icon handling

  • +
  • [F] [ 9th]: Exporting LTI settings

  • +
  • [I] [ 9th]: Fix problem with txt files not opening correctly

  • +
  • [F] [ 8th]: Export class data enabling all class data, including students workspaces to be exported.

  • +
  • [I] [ 1st]: Fix issue with content being lost when switching browsers

  • +
+

January 2018

+
    +
  • [I] [24th]: Fix problem with Test students in Self-Pay organisations

  • +
  • [I] [24th]: Update handling of Autocomplete in Language Server Protocol

  • +
  • [I] [22nd]: Improve Run Button so that the command name is used for run button command as terminal name

  • +
  • [I] [22nd]: Fix issue with [stack exclusions](/project/stacks/exclusions/

  • +
  • [I] [22nd]: Fix issue when the wrong students answer is shown when switching between students projects

  • +
  • [I] [19th]: Fix issue with assessments on Reset Unit

  • +
  • [I] [19th]: Implement completion and hover support for Language Server Protocol

  • +
  • [I] [16th]: Fix problem for teachers not being able to edit course/module units

  • +
  • [I] [15th]: Always use tabs regardless of user/project settings when using Makefile

  • +
  • [I] [ 4th]: Fix issue with guides table of contents focus on open

  • +
+

December 2017

+
    +
  • [I] [21st]: Fix problem with advanced code test output

  • +
  • [I] [20th]: Update guides table of contents so current selection is always visible in large tree

  • +
  • [I] [18th]: Executing exit command in terminal or guides content will automatically close the terminal tab

  • +
  • [I] [14th]: Improve handling of application of grades for large classes

  • +
  • [I] [11th]: Update handling of Free Text Assessment submissions

  • +
  • [I] [11th]: Update handling of Upgrade Course for Firefox browser

  • +
  • [I] [ 8th]: Fix duplicate messaging issue when deleting units in course modules

  • +
  • [I] [ 6th]: Improve handling of Unit Penalties

  • +
  • [I] [ 4th]: Update messaging when removing modules from courses

  • +
  • [I] [ 1st]: Update helper text for stack version change in units

  • +
  • [I] [ 1st]: Update handling of layout change

  • +
  • [I] [ 1st]: Fix issue with changes to metadata.json files not saving correctly

  • +
+

November 2017

+
    +
  • [I] [30th]: Update definition of incorrect points for multiple choice assessments

  • +
  • [I] [30th]: Improve messaging highlighting Public/Private Settings when creating Courses/Modules/Projects/Stacks/Starter Packs

  • +
  • [I] [28th]: Fix XSS image issue

  • +
  • [I] [28th]: Improve handling of teachers joining class as student through LTI

  • +
  • [I] [28th]: Update Unit Duration

  • +
  • [I] [28th]: Improve student submission options

  • +
  • [I] [28th]: Update Guides global settings

  • +
  • [F] [27th]: Add functionality to change/review JUnit timeout settings

  • +
  • [F] [24th]: Unit Penalties to allow teachers/instructors to specify grading deadlines and associated penalties

  • +
  • [I] [15th]: Fix issue when changing stack for ad-hoc projects in a class

  • +
  • [I] [15th]: Update guides collapse button handling when layout set to 1 panel

  • +
  • [I] [14th]: Block deletion of a course that contains modules

  • +
  • [I] [14th]: Improve warnings when deleting units and modules

  • +
  • [I] [13th]: Fix issue publishing units in IE browser

  • +
  • [I] [13th]: Fix icon for Advanced Code Tests

  • +
  • [I] [13th]: Fix handling for teachers opening students project assessments

  • +
  • [I] [09th]: Fix TOC scrolling issue in guides for Firefox and IE browsers

  • +
  • [I] [07th]: Improve Mark as Completed process to provide warning of assessments in the unit not completed

  • +
  • [I] [07th]: Update teacher dashboard for grading, allowing teachers to filter to find students and by status of unit. See Grading project work for more information

  • +
  • [I] [03rd]: Fix terminal light theme to show cursor

  • +
  • [I] [03rd]: Fix problem where teachers are not always able to view content of 3 blue dot menu in the students listing

  • +
  • [I] [03rd]: Update Codemirror components and fix soft tabs

  • +
  • [I] [02nd]: Fix problem when Guides TOC opened and closed to cause terminal to resize incorrectly

  • +
+

October 2017

+
    +
  • [I] [26th]: Update message handling for change stack for units in a course

  • +
  • [I] [25th]: Improve stack creation from the IDE

  • +
  • [I] [24th]: Update unit action to also update codio files (e.g .codio, .settings)

  • +
  • [I] [18th]: Update saving of draft free text assessments

  • +
  • [I] [16th]: Fix problem for students answering assessments

  • +
  • [I] [16th]: Fix problem with custom assessment grades not being passed correctly

  • +
  • [I] [13th]: Improve grading for Free text assessments supporting comment field and easy navigation to other students and other assessments for the currently selected student

  • +
  • [I] [12th]: Update handling of symbols in free text assessment previewing

  • +
  • [I] [12th]: Improve class navigation for teachers, click units tab to return to main unit listing

  • +
  • [F] [11th]: Unify guides table of contents

  • +
  • [I] [11th]: Fix issue with creating projects importing from zip file

  • +
  • [I] [10th]: Improve handling of size of free text assessment field for student

  • +
  • [I] [09th]: Show points assigned for free text assessments to students within the unit when grades released

  • +
  • [F] [06th]: Add user preference editor setting to show a vertical ruler in files. [ruler]=xx

  • +
  • [I] [06th]: Improve handling of unit ordering when adding or updating a course in a class to match the order set in the course

  • +
  • [I] [05th]: Improve warnings for unsaved changes when authoring guides

  • +
  • [I] [05th]: Ignore .git and .hg files in search and replace actions

  • +
  • [I] [04th]: Improve handling of students ability to amend answer submissions during completion of a unit

  • +
  • [I] [04th]: Fix problem so students can not create courses,modules and units

  • +
  • [I] [04th]: Improve grading free text to show confirmation message when applying

  • +
  • [I] [04th]: Improve stack handling when publishing units

  • +
  • [I] [04th]: Improve upgrade course process

  • +
  • [I] [02nd]: Allow LMS students to access already started units from Codio dashboard

  • +
  • [I] [02nd]: Redirect LMS users back to their LMS when marking unit as complete

  • +
+

September 2017

+
    +
  • [I] [29th]: Update Recommended Course content to resolve reported issues in assessments

  • +
  • [I] [29th]: Update messaging if cookies not allowed.

  • +
  • [I] [28th]: Reorganization of documentation structure.

  • +
  • [F] [27th]: Changes to terms of use

  • +
  • [I] [22nd]: Improve handling for publishing new stack versions

  • +
  • [I] [21st]: Improve handling of student output in standard code assessment

  • +
  • [I] [21st]: Improve handling of students starting units while new stack version is being updated

  • +
  • [I] [21st]: Update the handling of student data when removing modules from classes

  • +
  • [F] [19th]: Update documentation to advise on cookie requirements

  • +
  • [I] [18th]: Fix students seeing grading stats before grades are released

  • +
  • [I] [18th]: Fix Teacher Invitation list in classes showing test students

  • +
  • [I] [15th]: Update handling of Upgrade course for IE11 browser

  • +
  • [I] [14th]: Improve teacher dashboard view to show date students completed units and answers submitted

  • +
  • [I] [14th]: Improve handling for accessing binary files

  • +
  • [I] [12th]: Allow teachers to grade draft answers

  • +
  • [I] [12th]: Improve create stack from current project process

  • +
  • [I] [12th]: Improve the updating of manual grading actions for teachers

  • +
  • [I] [11th]: Improve message handling if student working with stack unit they do not have access to.

  • +
  • [I] [11th]: Refactor Guides buttons changing Settings to smaller gear icon

  • +
  • [I] [08th]: Remove version entry field from stack version and just auto-increment

  • +
  • [F] [08th]: Added preview type for free text assessments

  • +
  • [I] [07th]: Update teacher dashboard for free text assessment grading

  • +
  • [I] [07th]: Add confirmation step when unit is marked as complete by students.

  • +
  • [F] [02nd]: Add student IP consent

  • +
  • [I] [01st]: Improvement to publishing units allowing for simpler handling of stack changes.

  • +
  • [F] [01st]: Upgrade course. If any updates to the course(s) used in your class are detected, you can upgrade the content to the latest version within the class. Update unit option removed from courses in a class.

  • +
+

August 2017

+
    +
  • [F] [30th]: Support pug for syntax highlighting (mapping to jade).

  • +
  • [I] [25th]: Review field ordering for assessments

  • +
  • [I] [25th]: Change public/private settings to private by default.

  • +
  • [F] [23rd]: Add go to line hotkey (default Alt+G).

  • +
  • [I] [17th]: Invite teachers into a class with email invitation.

  • +
  • [I] [16th]: Update guide icons and add new callout blocks.

  • +
+

We implemented the changelog page in August, 2017 so this is as far back as we go.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/getstarted/support/support.html b/docs/instructors/getstarted/support/support.html new file mode 100644 index 00000000..e8ed6acd --- /dev/null +++ b/docs/instructors/getstarted/support/support.html @@ -0,0 +1,304 @@ + + + + + + + + + Codio Support — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Codio Support

+

If you need support, then the most effective way is to use our integrated support system. You will find this in the dashboard and the IDE.

+
+

Dashboard

+

Support is available in the dashboard from the Chat link on the left.

+
+
+

IDE

+

Support is available within the IDE from the Help menu item, then Support.

+
+
+

Support Dialog

+

There is a support dialog that appears when you invoke the support option. This tracks all conversations and threads you have had with Codio and where you can also start a new conversation.

+
+
Intercom Start +
+

If you are in Codio, you can see when a reply to your query arrives even if you have closed the support dialog box

+Intercom Notification +

An email will also be sent to you if you do not see the reply within 2 minutes or have logged out of your Codio account

+
+
+

Feedback

+

We are always interested to hear from our users about their thoughts/ideas for future improvements. To raise an idea or vote on other ideas already raised, either click on Feedback in your dashboard area or go to Codio Feedback directly.

+
+
Feedback +
+
+
+

Community

+

The Codio community forum is a place for Codio users to engage with each other and share best practices. You can access it from the Connect area or go to Codio Community directly.

+

This forum does not replace our in-product customer support chat or our help center, please continue to use the support chat for product issues, and refer to our help center for product use guidance.

+
+
+

Student Support

+

You can set a Contact URL for your students at the organization level, see Organization Contact URL and/or at the course level, see Course Contact URL so they can raise questions directly to your preferred area.

+

If you set the contact URL for a course, this will override any contact URL you may have set at the organization level.

+

Students will then be given the option to report a problem, ask a question related to their course work or access Codio support if they have a problem accessing the Codio platform.

+
+
Student options +
+

N.B. “Teacher” accounts will not be effected by this setting and they will still be able to contact Codio in the usual manner.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/add-remove-assignment.html b/docs/instructors/setupcourses/add-remove-assignment.html new file mode 100644 index 00000000..1bd81212 --- /dev/null +++ b/docs/instructors/setupcourses/add-remove-assignment.html @@ -0,0 +1,904 @@ + + + + + + + + + Add and Remove Course Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add and Remove Course Assignments

+

In Codio, a module is a container that holds a collection of assignments. An assignment is a project that has been assigned to a course (also referred to as an assessment). The scope of the assignments is entirely up to you. It can be a project assignment that a course works on or a tutorial, but they typically relate to the lessons in the course.

+
+

Create Course Module

+

You must first create the module that holds the assignments. You can create an empty module or copy an existing module. Follow these steps to add a module to a course:

+
    +
  1. From the Courses page, select the course to open it.

  2. +
  3. Click the Edit Assignments tab. When you first create a course, the list of modules and assignments is empty.

  4. +
  5. Click the New Module button and choose Add Empty Module or Add Copy from Existing.

    +
    +
      +
    • To add an empty module, enter the name for the new module and click Add Module.

    • +
    • To add copy from existing module, select a course, check the check boxes for the modules to be copied, and then click Select. The modules are added to your course.

    • +
    +
    +
  6. +
+
+
+

Add Assignments to Module

+

Once the course modules are created, you can add assignments (projects). You can create a new project or import existing projects.

+
    +
  1. In the course module, click Add Assignment.

  2. +
  3. On the Create Assignment page, click Project based or Existing.

    +
      +
    • To create a project-based assignment:

      +
        +
      1. Add assignment, and choose: project based.

      2. +
      3. Select the project type.

      4. +
      5. Enter a name and description, and click Create.

      6. +
      +
    • +
    • If you want to import a project-based assignment:

      +
        +
      1. Add assignment, and choose: project based.

      2. +
      3. Click the Click here link under Selecting your Starting Point.

      4. +
      5. Click Copy Project and browse to the project and select it.

      6. +
      7. Click Create.

      8. +
      +
    • +
    • To add assignments from existing courses:

      +
        +
      1. Add assignment, and choose: from existing.

      2. +
      3. Select the course and module.

      4. +
      5. Check the check boxes for the assignments to be added to the course.

      6. +
      7. Click Select.

      8. +
      +
    • +
    • To add assignments from course share codes:

      +
        +
      1. Add assignment, and choose: from existing.

      2. +
      3. Select Get by code.

      4. +
      5. Enter course share code and click the Show Content button.

      6. +
      7. Check the check boxes for the assignments to be added to the course.

      8. +
      9. Click Select.

      10. +
      +
    • +
    +
    +

    Note

    +

    For more information about authoring course content, click here.

    +
    +
  4. +
  5. Open the assignment to review it in the IDE and when ready Publish it . The assignment is not visible to students until it’s published.

    +
    +
      +
    • As you update your assignment, a Publish button will show on the top menu bar, to the left of your username.

    • +
    +Quick Publish +
      +
    • There is also an option to publish in the Education menu item in the top menu bar.

    • +
    +
    +
  6. +
+
+

Note

+

If you change the stack or files via the terminal, the publish button on the top menu bar will NOT appear +If you add and remove the same character, it will assume that you made a change even though the start and end file are the same

+

If you make changes to the assignment, you must publish it again before the changes are visible to your students. You can view the details of previously published versions in the log area and also if the course is a child of a parent course, details of the associated parent course.

+
+

After assignments are added to the course, students can access them from their dashboard. To confirm the assignments are available, log in as a student, select the course and module, and view the assignments.

+
+
+

Update assignment content and stacks

+

Codio recommends that you connect your assignments to a remote repo such as GitHub or BitBucket, so you can push updates and maintain version control of the content being pulled into your assignments.

+
    +
  • Assignment Updates - You can update all assignments that use the same content by pushing the updates to the repo and then pulling the changes into the different courses that use the content. You can also review the changes by others before deciding whether to pull the content into the course assignment.

    +
    +

    Note

    +

    The code workspace can be updated with new files that have been added and students can see the changes. However, existing files cannot be updated as this can invalidate work for students who have already started the assignment.

    +
    +

    To enable students to see new content in a course they have already started, you can Reset the assignment (see Assignment Settings). However, if you reset an assignment, the existing work they have already completed is lost.

    +
  • +
  • Stack Updates - If changes to the stack used in the assignment are required, the stack must be updated before publishing the assignment updates. You can either create a new version of the stack (if you have permissions) or create a new stack. See Modify Stack for more information.

    +

    You can also change the stack details in the assignment if the changes are only to the stack.

    +
  • +
  • Assessment Updates - Most assessment changes can be safely upgraded unless the structure of the question has been changed (for example, a multiple choice question has been changed from single response to multiple responses). In this case, the student response data can be invalidated.

  • +
+
+
+

Remove course assignments

+

You can remove assignments from a course and remove course modules. However, you should be aware that when you delete a module or assignment from your course, it removes all student data for all assignments in the module, including assessment data and results. This data cannot be restored so it’s recommended that you download the data to a .csv file before deleting a module or assignment.

+

To delete an assignment in a course module, click Delete for the specific assignment.

+Delete Assignment +

To delete a course module, click Delete in the module.

+Delete Module +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/add-remove-students.html b/docs/instructors/setupcourses/add-remove-students.html new file mode 100644 index 00000000..f07ad193 --- /dev/null +++ b/docs/instructors/setupcourses/add-remove-students.html @@ -0,0 +1,888 @@ + + + + + + + + + Add, Remove or Archive Students in a Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add, Remove or Archive Students in a Course

+

You can add, remove or archive students assigned to your course. View this video to learn more.

+
+

Add Students

+

To add a student to your course, follow these steps: follow these steps to add students to a course:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and then click the Add a student button.

    +
    +
    Students Tab +
    +
  4. +
  5. On the Add a Student dialog, use one of the following methods to add your students to a course

    +
    +
    Add Students +
      +
    • Copy the two-word token and send to your students. Instruct your students to go to https://codio.com/p/join-class or click the Join Course button on our main website. They should enter the token and register their Codio account.

    • +
    +
    +
      +
    • Copy the URL and send to your students. Instruct them to simply click the URL and register their Codio account.

    • +
    +
    +

    Note

    +

    We would recommend the Student Invite URL option as all the students need to do is enter that URL into their browser to join the correct course in your organization.

    +
    +

    The students who have been added are displayed on the Students page for the course.

    +
  6. +
+
+
+

Add Test Students

+

You may view your course using the special student accounts Codio creates for you. There are three test student accounts within your organization that allow you to view content from the student perspective.

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and click the Add a student button.

  4. +
  5. Click on the Add test students button. You will now see three test students displayed on the Students page for the course.

    +
    +
    Test Students +
    +
  6. +
  7. Now that you have added test students, you are able to log in as one of the test students by pressing the Login as button. Please note that this is only available for the special test student accounts.

    +
    +
    +

    Note

    +

    When logged in as a test student, you will see a bar on the top of the window letting you know you are logged in as a test student. You can switch back to your main teacher account by selecting Switch back to teachers account.

    +
    +
    +
  8. +
+
+
+

Remove Students

+

To remove a student from a course, follow these steps:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and find the student you want to remove from the course.

    +
    +
    Students Tab +
    +
  4. +
  5. Click the Options menu and choose Remove student.

    +
    +
    Remove Student +
    +
  6. +
  7. Students can rejoin the course using either the options above. If you wish to prevent this, you can Regenerate the student token so the previously advised code will not work

  8. +
+
+
+

Archive Students

+

To archive a student from a course, follow these steps:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and find the student you want to archive in that course.

    +
    +
    Students Tab +
    +
  4. +
  5. Click the Options menu and choose Archive student.

    +
    +
    Archive Student +
    +
  6. +
  7. Teachers can unarchive students from the same Options meno

    +
    +

    Note

    +

    These actions do not remove your student entirely from your organization and any/all data for them in the course is not deleted. If/when they rejoin the course, all their data will be available. To remove a student entirely from your organization, when all their data will also be deleted, see - remove members.

    +
    +
  8. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/add-ta.html b/docs/instructors/setupcourses/add-ta.html new file mode 100644 index 00000000..f5c840aa --- /dev/null +++ b/docs/instructors/setupcourses/add-ta.html @@ -0,0 +1,816 @@ + + + + + + + + + Add Teaching Assistant to a Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Teaching Assistant to a Course

+

Teaching assistants can be added to a course by sending them an invite. They can then switch between being a teacher and a student. When they are in teacher mode, they can see all the courses in which they are set as a teacher; when in student mode, they see all the courses in which they are set as a student.

+

Follow these steps to add a teaching assistant to a course:

+
    +
  1. From the Courses page, select the course to open it.

  2. +
  3. Click the Teachers tab.

  4. +
+
    +
  1. Enter the teaching assistant’s email address in the Invite Teacher box.

    +Invite Teacher +
  2. +
  3. If you want to restrict the teaching assistant to only be able to view the course but not edit its content, check the Add this teacher as read-only check box. You can change this later by toggling the Course Editor setting switch.

    +Read-Only Toggle +
  4. +
  5. Click Send Invite.

  6. +
+
+

Enable teaching assistant to be a student in course

+

To enable a teaching assistant to be a student in a course, copy the Student Invite URL on the Students page, selecting the Add a student button and send it to your TA. The TA can paste it into a browser and they will be added to the course as a student.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/add-teachers.html b/docs/instructors/setupcourses/add-teachers.html new file mode 100644 index 00000000..cde9c7bd --- /dev/null +++ b/docs/instructors/setupcourses/add-teachers.html @@ -0,0 +1,833 @@ + + + + + + + + + Add or Remove Teachers in a Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add or Remove Teachers in a Course

+

Your course may be taught by more than one teacher so you can add teachers to your course. You can also enable a teacher to be a student in the course to test it. Follow these steps to add a teacher to your Codio course:

+
    +
  1. From the Courses page, select the course to open it.

  2. +
  3. Click the Teachers tab.

  4. +
  5. If the teacher is already a member in your organization start entering their username in the field and you can add them to the course.

  6. +
  7. Select the teacher’s name in the search results and click Yes on the confirmation dialog.

    +Search Teacher +
  8. +
+

5: If the teacher is not a member of your organization, you can send them an invitation email. Enter their email address and click Send Invite. An email is sent that includes a link for them to sign up for a Codio account. Upon completion, they are automatically added to your organization and course.

+
+
Invite Teacher +
+
    +
  1. If you want to restrict the teacher to only be able to view the course but not edit its content, check the Add this teacher as read-only check box. You can change this later by toggling the Course Editor setting switch.

    +Read-Only Toggle +
  2. +
+
+

Remove teacher from a course

+

If you want to change a teacher in a course, you must first add the new teacher and then follow these steps to remove old teacher from a course:

+
    +
  1. In the Teachers section, click the Remove next to the teachers name.

  2. +
  3. Click Yes on the confirmation dialog.

  4. +
+
+
+

Enable teacher to be a student in course

+

To enable a teacher to be a student in a course, copy the Student Invite URL on the Students page, selecting the Add a student button and send it to the teacher. The TA can paste it into a browser and they will be added to the course as a student.

+
+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/archive-course.html b/docs/instructors/setupcourses/archive-course.html new file mode 100644 index 00000000..957ba344 --- /dev/null +++ b/docs/instructors/setupcourses/archive-course.html @@ -0,0 +1,813 @@ + + + + + + + + + Archive Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Archive Course

+

To help manage the number of courses visible to instructors, you can archive courses so they are no longer visible on the Active page. When a course is archived, it is moved to the Archived page and is read-only. Students can still see their grades/feedback but they cannot continue working on assignments in an archived course. You can move an archived course back to the Active page at any time.

+

To archive a course, follow these steps:

+
    +
  1. On the Courses page, click the Active tab if it’s not already selected.

  2. +
  3. Click the menu on the right side of the course (3 horizontal dots) and choose and choose Archive Course.

  4. +
  5. In the confirmation dialog, enter make read-only and click Yes.

  6. +
+

To move an archived course to the Active page, follow these steps:

+
    +
  1. On the Courses page, click the Archived tab.

  2. +
  3. Click the menu on the right side of the course (3 horizontal dots) and choose Unarchive Course.

  4. +
+
+

Note

+

Courses will also automatically archive when the archive date set for the course is reached. This date can be amended in the course details area if you require the course to continue to be active

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/allow-student-reset.html b/docs/instructors/setupcourses/assignment-settings/allow-student-reset.html new file mode 100644 index 00000000..092258a3 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/allow-student-reset.html @@ -0,0 +1,799 @@ + + + + + + + + + Reset Assignment by Student — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Reset Assignment by Student

+

You can allow students to be able to reset their assignments in the course to start again. All work they may have done will be lost.

+

When enabled, students can reset their completed assignments either from the Education -> Reset Assignment menu option or selecting the Reset Assignment button offered to them in the pop up message

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assign-grade-template.html b/docs/instructors/setupcourses/assignment-settings/assign-grade-template.html new file mode 100644 index 00000000..050abfa6 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assign-grade-template.html @@ -0,0 +1,817 @@ + + + + + + + + + Assign Grading Template to an Assignment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assign Grading Template to an Assignment

+

If grading templates have been created for your organization, you can assign them to your course assignments. Follow these steps to assign a template to an assignment:

+
    +
  1. From the Courses page, select the course to open it.

  2. +
  3. Click the Settings icon for the assignment you want to assign a grading template.

    +Assignment Settings +
  4. +
  5. In the Grade Weights section, complete the following information:

    +Grade Weights +
  6. +
+
+
    +
  • Teachers Grading - Check to enable the feature.

  • +
  • Rubrics - Check to enable the feature.

  • +
  • Select Rubric - Click the drop-down arrow and choose the grading template to be used for the assignment.

  • +
+
+
    +
  1. Click Save Changes.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assignment-actions.html b/docs/instructors/setupcourses/assignment-settings/assignment-actions.html new file mode 100644 index 00000000..110ab68c --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assignment-actions.html @@ -0,0 +1,817 @@ + + + + + + + + + Assignment Action Buttons — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assignment Action Buttons

+

Additional options are available from the Actions button in the assignment. Access assignment Actions by selecting the Settings icon in the assignment.

+Settings +

Open the Actions menu to see additional buttons that allow you to run a plagiarism check, mark and unmark all assignments as completed, download the assignment grade data, reset student’s work on assignments, re-run an auto-grade script, and release the grades for the assignment.

+Actions Button +
    +
  • Plagiarism - Click this button to run the Plagiarism Checker. You can also access this from the menu (3 horizontal dots) in the assignment.

  • +
  • Mark All As Completed - Click this button to mark all student assignments as completed. Hover over a student name to see the switch appear to the left of the students name.

  • +
+Mark All As Completed +
    +
  • Unmark As Complete - Click this button to clear the Mark All As Complete.

  • +
  • Download CSV - Click this button to download a CSV file with student grade data for the assignment. For more information on the data included see Export Assignment Data

  • +
  • Reset - Click this button to clear all student work. This option is used when you have updated an assignment in your course and you need to reset it so all student assignments are updated with the new assignment. You can reset assignments using the Action > Reset button, or the menu in the assignment:

  • +
+Action > Reset +Reset Assignment +
    +
  • Regrade Completed - Click this button to re-run an auto-grade script after an assignment is marked as completed.

  • +
  • Release grades - Toggle this button to ON when you are ready to release grades to students. By default, grades are not shown to students or transferred to the LMS gradebook if you are using LMS integration for a course.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assignment-duration.html b/docs/instructors/setupcourses/assignment-settings/assignment-duration.html new file mode 100644 index 00000000..b58122c2 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assignment-duration.html @@ -0,0 +1,821 @@ + + + + + + + + + Assignment Duration — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assignment Duration

+

The Assignment Duration setting is used to specify a Start Time and Closing Time for the assignment, and what happens when the Closing Time has been reached. The assignment is disabled until the start date/time and then it is displayed in the student dashboard.

+

View this video to learn more.

+

To set the assignment duration, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. Navigate to the Assignment Duration settings area.

  4. +
  5. Specify the assignment Start Time and Closing Time:

    +
      +
    • Click the Calendar icon and select the date.

    • +
    • Click the Clock icon and select the time.

    • +
    +
  6. +
+

Note:: The time zone is automatically taken from the Course time zone, if you wish to change to a different time zone click the ‘click here’ link to open the Course Details settings. There you can change the time zone for all the assignments in the course.

+
    +
  1. Click the On Assignment End drop-down and choose one of the following options to indicate what happens when the Closing Time has been reached:

    + +
  2. +
  3. Click Save Changes.

  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assignment-gigabox.html b/docs/instructors/setupcourses/assignment-settings/assignment-gigabox.html new file mode 100644 index 00000000..ce978132 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assignment-gigabox.html @@ -0,0 +1,804 @@ + + + + + + + + + Gigabox Slot — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Gigabox Slot

+

If you have a memory intensive assignment, you can specify here that it should use a Gigabox slot. Gigabox slots are allocated on an organization level.

+
+
Setting Giga box usage +
+

As you publish your assignment, the Propagate gigabox settings to the assignment settings option on the publish assignment dialog will show and will also show if you publish a new version and the gigabox setting for the working copy is different to that set for the assignment. See Modify Assignments for more information.

+

By default it is enabled but you can disable it if you choose.

+Publish Dialog +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assignment-settings.html b/docs/instructors/setupcourses/assignment-settings/assignment-settings.html new file mode 100644 index 00000000..e02e8dc2 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assignment-settings.html @@ -0,0 +1,833 @@ + + + + + + + + + Managing assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Managing assignments

+
+
+

You can manage assignments from the teacher dashboard or by selecting the settings gear icon on the assignment when in Overview mode.

+
+

Teacher Dashboard

+

From the teacher dashboard, access shortcuts to assignment actions. The image below highlights the main components of Overview mode in the teacher dashboard.

+Teacher Dashboard +
    +
  • Started: shows the number of students who have started the assignment, where the green line indicates this number as a fraction of the whole class

  • +
  • Completed: shows the number of students who have completed the assignment, where the green line indicates this number as a fraction of the quantity of those that started it

  • +
+
+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/assignment-surveys.html b/docs/instructors/setupcourses/assignment-settings/assignment-surveys.html new file mode 100644 index 00000000..256784cc --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/assignment-surveys.html @@ -0,0 +1,818 @@ + + + + + + + + + Assignment Surveys — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assignment Surveys

+

The Assignment Survey setting can be enabled so when students mark the assignment as completed a survey can be launched for them to complete.

+Assignment Survey Settings +
+

Adding questions to ask students

+
    +
  • Select Add Question to select the survey question type(s) you wish to present to the students

    +
    +
      +
    • Free Text - where students can enter their reponse in their own words

    • +
    • Rate - where students can rate the assignment from 1 to 10

    • +
    +
    +
  • +
+

The question you wish to ask can be written in Markdown format if required. See Markdown Content Editing for more information.

+

You can add as many questions as you like, re-order them using the up/down arrows and remove if necessary using the Remove button and then press the Save Changes button to save the changes

+
+
+

Collecting survey results

+

Click the Download CSV button

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/disable-assignment.html b/docs/instructors/setupcourses/assignment-settings/disable-assignment.html new file mode 100644 index 00000000..c69b2362 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/disable-assignment.html @@ -0,0 +1,810 @@ + + + + + + + + + Disable Assignment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Disable Assignment

+

You can enable or disable assignments that have been assigned to a course to control when students can access them. This is useful when your students are working in controlled assessment conditions and you only want them to have access to their work within a prescribed timeframe.

+
+

Note

+

For book based assignments, if another assignment gives access to the book then students can access the book. If students are able to access the terminal window or see the File Tree, other areas intended to be disabled may be accessible.

+
+

To enable or disable an assignment, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click Disable Assignment to prevent students from accessing it.

    +

    To enable the assignment, uncheck Disable Assignment.

    +
  4. +
  5. Click Save Changes.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/disable-download.html b/docs/instructors/setupcourses/assignment-settings/disable-download.html new file mode 100644 index 00000000..2b4f93f9 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/disable-download.html @@ -0,0 +1,810 @@ + + + + + + + + + Disable Download — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Disable Download

+

As well as being able to customise the IDE menu for students you can also disable the ability for students to download (Project > Export as Zip) their assignments before completed in the assignment settings. Once the assignment is completed they can then download the assignment.

+
+

Note

+

Be aware that if you also enable Read Only with Resubmit option on Visibility on Completed setting they can mark as complete, download the zip file and change the status to incomplete to carry on working. If that option is enabled, we suggest you customise the IDE menu to hide that option whether the assignment is completed or not.

+
+

To enable or disable downloading an assignment, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click Disable Download by Student to prevent students from being able to download.

    +

    To enable the assignment, uncheck Disable Download by Student.

    +
  4. +
  5. Click Save Changes.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/disable-mark-completed.html b/docs/instructors/setupcourses/assignment-settings/disable-mark-completed.html new file mode 100644 index 00000000..56f4c8ef --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/disable-mark-completed.html @@ -0,0 +1,810 @@ + + + + + + + + + Disable Mark as Completed — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Disable Mark as Completed

+

The Disable Mark as Completed setting is used to prevent students from marking an assignment as completed. If assignments in your course are of a playground type where students can experiment with their code, it’s useful to enable this setting to prevent them from marking the assignment as completed, which would require you to reset the status so they can continue working on it.

+
+

Note

+

If your assignment contains guides content, you should disable this option to show the Mark as Completed button in guides.

+
+

To disable the mark as completed feature, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click the Disable Mark as Completed.

    +

    To enable student’s ability to mark an assignment as completed, uncheck the Disable Mark as Completed setting.

    +
  4. +
  5. Click Save Changes.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/exam-proctoring.html b/docs/instructors/setupcourses/assignment-settings/exam-proctoring.html new file mode 100644 index 00000000..ce2667da --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/exam-proctoring.html @@ -0,0 +1,833 @@ + + + + + + + + + Exam Proctoring — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Exam Proctoring

+

The Exam Proctoring settings are used to enable various options for assignment exams. After you have completed your selections, click Save Changes.

+Exam Proctoring Settings +
    +
  • Time Limit - If enabled, assignments are marked as complete after the indicated amount of time has passed since the student started the assignment or the Closing Time of the assignment has been reached.

    +
      +
    • Click Time Limit to enable it and then enter the value for Days, Hours, and Minutes.

    • +
    • To disable, uncheck Time Limit.

    • +
    • Students can be granted additional time if required. Select the 3 blue dot menu for the students assignment and Extend Time

    • +
    +
  • +
+Extend Time +
    +
  • Shuffle Question Order - If enabled, each student receives the pages of the assignment in a random order to avoid students having exact duplicate assignments.

    +
    +
      +
    • Click Shuffle Question Order to enable it.

    • +
    • To disable, uncheck Shuffle Question Order.

    • +
    +
    +
  • +
  • Forward Only Navigation - If enabled, navigation buttons and menus that allow students to re-visit questions are hidden; students can only move forward through the pages. Students are advised of this restriction as they start the assignment.

  • +
  • Single Login - If enabled, once a student has started the assignment and until they mark it as complete, all other account login attempts are blocked. As students start the assignment, they are advised that it is restricted to single login and to ensure that they have:

    +
      +
    • Closed other tabs or browsers where Codio is open.

    • +
    • A stable internet connection.

    • +
    • Enough power in their device.

    • +
    • Sufficient time to complete the assignment.

    • +
    +

    If students attempt to access the assignment from a different IP address or browser, they will be restricted and advised to contact their course instructor for assistance.

    +

    If students try to log out of Codio before the assessment is fully completed, they will be advised that if they continue, they will not be able to access it again.

    +

    Instructors can reset the single login restriction if they feel it is appropriate:

    +

    On the Students tab in the course, click the menu icon (3 horizontal dots) and choose Reset Single Login.

    +
  • +
  • Authentication - If enabled, your students will need to authenticate through your SSO service provider before they can open the assignment. This option can only be used if you have configured SSO Integration for the organization.

  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/grade-weights.html b/docs/instructors/setupcourses/assignment-settings/grade-weights.html new file mode 100644 index 00000000..da4744e4 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/grade-weights.html @@ -0,0 +1,852 @@ + + + + + + + + + Grade Weights — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Grade Weights

+

The Grade Weights settings are used to enable and disable the grading model to be used: Teachers Grading, Assessments Grading, or Script Grading, and to manage the grading weight.

+

The total grade is based on the grade weight assigned to each option:

+
+
    +
  • If only one option is enabled, 100 percent of the points of that option go to the final grade.

  • +
  • If the enabled options have the same weight, the final grade is calculated as an even split in weight between the enabled options.

    +
      +
    • In the case of all three grading options enabled, each with the same weight, each option has a weight of 1/3.

    • +
    • In the case of two grading options enabled, each with the same weight, each option has a weight of 1/2.

    • +
    +
  • +
+
+
    +
  • If the enabled options have the different weights, the final grade is calculated as a fraction of the enabled options. For example, if Teachers Grading has a grading weight of 2 and Assessments Grading has a grading weight of 1, the final grade is calculated as Teachers Grading points * 2/3 + Assessments Grading points * 1/3.

  • +
+Grade Weights +
+

To specify Grade Weights, follow these steps:

+
    +
  1. Navigate to your course, and go to the Overview area.

  2. +
  3. Select the settings gear to the right of the assignment name.

  4. +
  5. Under assignment settings, scroll all the way down.

  6. +
  7. In the Grade Weights area, click the grading options you want to enable and assign the grading weights to each option:

  8. +
+
+
    +
  • Teachers Grading - This option allows you to specify a Grading Rubric Template to use with an assignment and specify the grading weight.

    +
      +
    • Click Teachers Grading and enter a value in the Grading Weight field.

    • +
    • Click Rubics to assign a grading rubic template to the assignment and then choose the rubic template from the drop-down list.

    • +
    +
  • +
  • Assessments Grading - If your assignment includes auto-graded assessments, this option is enabled by default. If you do not want the results of the assessments to be included in the grading, disable this option.

    +
      +
    • Click Assessments Grading and enter a value in the Grading Weight field.

    • +
    +
  • +
  • Script Grading - This option allows you to specify an auto-grade script that runs when the assignment is marked as complete.

    +
      +
    • Click Script Grading and enter a value in the Grading Weight field. Assign it a weight out of 10 or 100 that has the desired proportion to the “Assessments Grading” weight.

    • +
    • Click Set Custom Script Path and choose the path from the drop-down list. The “Set Custom Script Path” drop down menu will contain the autograde scripts you set up using the Education Menu in your assignment. Select the script you want to use for the assignment. Note: The “Set Custom Script Path” drop down only lets you run one script. You will need a helper script if you want to combine multiple tests.

    • +
    +
  • +
+
+

For more information about assignment level scripts, see Using Assignment Level Scripts.

+
+
+
    +
  1. Make sure to Save Changes.

  2. +
  3. To force your Assignment level script to run, select Actions and Run autograde script.

  4. +
+

View this video to learn more.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/groupwork.html b/docs/instructors/setupcourses/assignment-settings/groupwork.html new file mode 100644 index 00000000..2d71d44b --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/groupwork.html @@ -0,0 +1,846 @@ + + + + + + + + + Pair Programming — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pair Programming

+

The Paired Programming setting is enabled to allow groups of students to work together on assignments. Within each group a student will be a Driver who has the ability to edit and make changes in the assignment and others in the group will be Navigators who can view the work done by the Driver. Control can be passed between the driver and navigators as required. See below

+Group Work +
    +
  • Paired Programming - Enable to auto-assign students into groups. Groups can be between 2 and 5 students. See below

  • +
  • Shared Focus - Enable to apply Shared Focus. Shared focus means the “navigator” sees exactly what the “driver” sees. This prevents a student in the “navigator” role from manipulating the view of the driver (changing guide pages, opening other code files, etc) and as the driver moves around in the assignment, the navigator view will change to follow.

  • +
  • Copy Groups From - Allows you to use Pair Programming groups already set up in other assignments. As other assignments are enabled for Pair Programming, each of those assignments will show in the drop down.

  • +
+
+

Note

+

If an assignment has Copy Workspace configured and both the ‘to be copied from’ and ‘to be copied to’ assignments are pair programming assignments, groups will be automatically copied.

+
+
    +
  • Number of Students - Set the number of students to work together as a group (max 5). If the total number of students is greater than an equal division for the groups, extra groups will be created

  • +
+
+

Note

+

Both the Prime Assignment setting and the Pair Programming setting can not be enabled at the same time.

+
+
+

Warning

+

Pair Programming should not be used for Crunch, Flode, Jeroo, Scratch , Pencil Code, Pyret, Processing/p5, Jupyter notebook or assignments using virtual machine assignments.

+
+
+

Managing Groups

+

Once groups have been set up and saved, teachers/instructors can manage the groups by selecting the Groups tab. Select the Arrange Groups button to create initial groups automatically or to move students between the groups.

+
+

Note

+

Test students will not automatically be added to any groups. If you need them you can add them manually by dragging them from the Students area present at the right side and drop them into the respective groups.

+
+

You can also rename the groups. The Add Empty Group button can be used to create an empty group to move students into.

+Managing Groups +
+
+

Adding New Students

+

If a new student joins the course after Pair Programming is enabled, they will automatically be added to any existing group that is not already at the maximum number of students. If all groups are already at the maximum number a new group will be created. Teachers/Instructors may then want to review the existing groups so there are no students operating on their own in their own group.

+
+
+

Driver/Navigator

+

Within a group there is a Driver who has control of the assignment and Navigators who are able to view the work being done by the driver where they can see the drivers cursor location and selections (similar to googleDocs). If the cursor cannot be seen (e.g. the driver is on another page or file in the assignment), clicking on the drivers username in the top panel will take the navigator to their location

+

To transfer control between users, the navigator can start to type and if the existing driver is not actively working, they will see the Driver toggle switch flip to show they now have control.

+

If the existing driver is still actively working, the navigator can flip the toggle switch next to “Driver” to request control.

+Driver control +

If the driver is still working they will get a notification asking for control. This will not block the driver from continuing their work if they deny the request and when they are ready to release control, they can toggle the switch to transfer control to the requestor or grant access from the notification pop up if still showing.

+

The navigator will see the Driver toggle switch flip to show they now have control.

+
+
+

Accessing projects and grading

+

Grading operates the same as for individual assignments although for any manual grading (rubrics, overriding final grade, etc) there is an option for the teacher/insructor to choose whether to manually affect one student grade or entire group.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/mandatory.html b/docs/instructors/setupcourses/assignment-settings/mandatory.html new file mode 100644 index 00000000..fc69ee93 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/mandatory.html @@ -0,0 +1,802 @@ + + + + + + + + + Mandatory Progress — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Mandatory Progress

+

By default all assignments are mandatory but can be made optional by toggling the switch off. If Mandatory is toggled off, the assignment will not be included within the progress bar calculation for students.

+
+

Note

+

This feature is only available once course/module progress bar is enabled in the course.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/penalties.html b/docs/instructors/setupcourses/assignment-settings/penalties.html new file mode 100644 index 00000000..f12e2412 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/penalties.html @@ -0,0 +1,868 @@ + + + + + + + + + Penalties — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Penalties

+

You can add penalties to the assignment if students don’t complete it within the specified start time and closing time.

+

Penalties are not cumulative. Your student will receive the penalty associated with their submission date.

+
+

Note

+

It is recommended that you set the closing date/time for the assignment (see Assignment Duration) to the last date/time for the penality to avoid having to change the assignment status for a student who submits the assignment late.

+
+Penalties +
+

Add Penalties

+

To add a penalty for a late assignment, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Penalties area, click Add Penalty and complete the following fields:

    +
      +
    • Number (auto-incremental)

    • +
    • Date - The date the penalty is applied.

    • +
    • Time - The time the penalty is applied on the specified date.

    • +
    • Penalty % - Percentage of the total score for the assignment to be deducted as a penalty.

    • +
    • Message - Description of the penalty. If a message is not specified, one of the following default messages is displayed:

      +
        +
      • If a student opens a project after the deadline or the student is working in the assignment when deadline is reached, the following message is displayed:

      • +
      +
      +

      `Deadline X (the table row number) has been reached. This deadline carries a penalty of Y%. You can review your answers with no penalty. However, if you decide to change any answers by pressing the Modify button beneath a question, a Y% penalty deduction will be applied to your overall results. Once a modify button has been pressed once, the penalty deduction will be applied and you will be free to modify as many questions as you like with no additional penalty`

      +
      +
        +
      • If a student clicks Modify after the deadline has passed, the following message is displayed:

      • +
      +
      +

      `Deadline X (the table row number) has been reached. This deadline carries a penalty of Y%. If you proceed, a Y% penalty deduction will be applied to your overall results. You will then be able to modify as many questions as you like with no additional penalty`

      +
      +
        +
      • If the final deadline has passed, the assignment is forced to read-only and the following message is displayed:

      • +
      +
      +

      `You have exceeded the final deadline. You are no longer able to make changes to your answers. You are free to review your answers.`

      +
      +
    • +
    +
  4. +
  5. Click Save Changes.

  6. +
+
+
+

View Penalties in Instructor Dashboard

+

You can view any penalties that have been applied in the Instructor Dashboard. If a penalty has been applied, the grade field has a light red background. Hover above the field to view the penalty details, including number, date/time, and the penalty percentage that has been applied.

+
+
Penalty Indicator +
+

The Final Grade shows the final graded score less any penalty deduction. If you have overwritten the field (see Adjust deadline), the penalty deduction is not applied.

+
+
+

Removing Penalties

+

If required you can remove any applied penalties to the students final grade. For more information see Grading

+
+
+

Adjust deadline for individual students

+

You can adjust the deadline for individual students should the circumstances warrant additional time to complete the assignment.

+

To adjust the assignment deadline for an individual student, follow these steps:

+
    +
  1. Open the assignment.

  2. +
  3. Find the student in the list, and then click the menu icon in the far right side (3 horizontal dots), and choose Adjust deadline.

    +Adjust Deadline +
  4. +
  5. On the Adjust Deadline for Student dialog, choose the New Closing Date/Time from the date/time picker or Extend Time by a Set Amount by increasing the Days, Hours, and Minutes for the student to complete the assignment, and then click Apply.

    +Penalty Adjusted +

    The adjustment is displayed next to the Grade field in the Instructor Dashboard.

    +Deadline Adjustment in Dashboard +
  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/pin-assignment.html b/docs/instructors/setupcourses/assignment-settings/pin-assignment.html new file mode 100644 index 00000000..d6228c3b --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/pin-assignment.html @@ -0,0 +1,813 @@ + + + + + + + + + Pin and Unpin Assignment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pin and Unpin Assignment

+

When an assignment is pinned, it is displayed in the upper portion of the student dashboard. Typically, the assignment you are currently teaching is pinned so students can easily access it, and then unpinned when the course is completed.

+
+
Pinned Assignment +
+

To pin or unpin an assignment, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click Pin Assignment to pin it to the dashboard. The setting is checked when it is enabled.

    +

    To unpin it, click the setting again to uncheck it.

    +
  4. +
  5. Click Save Changes.

  6. +
+
+

Note

+

Only four assignments can be pinned at any time.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/prerequisite-assignments.html b/docs/instructors/setupcourses/assignment-settings/prerequisite-assignments.html new file mode 100644 index 00000000..5e319dda --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/prerequisite-assignments.html @@ -0,0 +1,822 @@ + + + + + + + + + Prerequisite Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Prerequisite Assignments

+

The Prerequisite Assignment is used to set requirements based on other published assignments in the course so that students cannot start the assignment until they have been met.

+

The prerequisite states that can be set are:

+
    +
  • Started

  • +
  • Completed

  • +
  • Passed (with a minimum grade)

  • +
+

Multiple assignments can be included if necessary but they all will have the same prerequisite state.

+
+
Prerequisite Rules +
+

When enabled, students can start the assignment if the requirements are met. If not, they will receive a message advising them of the prerequisite requirements.

+
+
Student Warning +
+
+

Copy workspace from Prerequisite Assignment

+

The Copy Workspace From setting allows you to copy content from one assignment to a subsequent assignment.

+
+

Important

+

This will only pull the workspace in upon the first opening of the assignment (when it is created for the student) – there is no update mechanism. Because of this, we highly encourage you to setup the prerequisite assignment state to Completed.

+
+

When the assignment is created by the student, the workspace files/folders (excluding .guides, .git folder, any node modules and any .codio, .codio-menu or .settings files) of the assignment selected in the dropdown will be copied into the prerequisite assignment’s workspace and will be included in the new assignment.

+

If a file of the same name exists in both assignnments, the most recent changes to the initial assignment will be updated in the subsequent assignment. This will apply to changes that students made.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/prime-assignment-containers.html b/docs/instructors/setupcourses/assignment-settings/prime-assignment-containers.html new file mode 100644 index 00000000..e75790c8 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/prime-assignment-containers.html @@ -0,0 +1,807 @@ + + + + + + + + + Prime Assignment Containers — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Prime Assignment Containers

+

The Prime Assignment Containers settings is useful when you have a large number of students scheduled to start an assignment at the same time. You do not need to do this for cohorts of less than 500 simultaneous starts. +After enabling this setting, Codio will make the specified number of containers available at the scheduled time. +When your students open the assignment the containers will already be set up and they will not face any performance issues even when thousands of students begin at the same time.

+Prime Assignment Options +

You can specify the Start Time when you want the containers available and the Number of Students that will start the assignment at the same time.

+

The Start Time must be at least 4 hours in the future so Codio will have enough time to ensure that the containers are available and can be started at your specified time.

+
+

Note

+

Both the Prime Assignment setting and the Pair Programming setting can not be enabled at the same time.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/visibility-completed.html b/docs/instructors/setupcourses/assignment-settings/visibility-completed.html new file mode 100644 index 00000000..11a23935 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/visibility-completed.html @@ -0,0 +1,817 @@ + + + + + + + + + Visibility on Completed — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Visibility on Completed

+

The Visibility on Completed setting is used to specify your students ability to access the assignment when completed.

+
+

Note

+

This setting is not available for book-based assignments.

+
+

To specify student visibility to assignments once completed, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click the Visibility on Completed drop-down and choose one of the following options:

    +
    +
      +
    • Read Only with Resubmit - Allows students to access the assignment in read-only mode. They can also change the status of their assignment from completed to not completed and regain full access to resubmit their work. Any assignments not limited to one attempt only can be resubmitted.

    • +
    • Read-Only - Allows students to access their assignment but cannot make changes.

    • +
    • No Access - Prevents students from accessing their assigment.

    • +
    • No Access until Grades Released Prevents students from accessing their assignment until the grades are released.

    • +
    +
    +
  4. +
  5. Click Save Changes.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/assignment-settings/visibility-disabled.html b/docs/instructors/setupcourses/assignment-settings/visibility-disabled.html new file mode 100644 index 00000000..60a1e930 --- /dev/null +++ b/docs/instructors/setupcourses/assignment-settings/visibility-disabled.html @@ -0,0 +1,814 @@ + + + + + + + + + Visibility on Disabled — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Visibility on Disabled

+

The Visibility on Disabled setting is used to specify how your students can access a disabled assignment.

+
+

Note

+

This setting is not available for book-based assignments.

+
+

To specify student visibility to disabled assignments, follow these steps:

+
    +
  1. Open the assignment Settings.

  2. +
  3. In the Assignment settings, click the Visibility on Disabled drop-down and choose one of the following options:

    +
      +
    • Read-Only - Allows students to access their assignment but cannot make changes.

    • +
    • No Access - Prevents students from accessing their assignment.

    • +
    • No Access until Grades Released Prevents students from accessing their assignment until the grades are released.

    • +
    +
  4. +
  5. Click Save Changes.

  6. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/change-student-password.html b/docs/instructors/setupcourses/change-student-password.html new file mode 100644 index 00000000..10aaae7e --- /dev/null +++ b/docs/instructors/setupcourses/change-student-password.html @@ -0,0 +1,805 @@ + + + + + + + + + Change Student Passwords — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Change Student Passwords

+

To change a student’s password, follow these steps:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and find the student whose password you want to change.

    +
  4. +
  5. Click the Options menu and choose Change student’s password.

  6. +
  7. Follow the onscreen instructions to reset the password. A temporary password is generated, which you can send to the student.

  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/clone-course.html b/docs/instructors/setupcourses/clone-course.html new file mode 100644 index 00000000..56e415ea --- /dev/null +++ b/docs/instructors/setupcourses/clone-course.html @@ -0,0 +1,822 @@ + + + + + + + + + Clone a Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Clone a Course

+

You can clone an existing course to create a new course from it. Follow these steps to clone a course:

+
    +
  1. Sign in to Codio at www.codio.com.

  2. +
  3. Navigate to the Courses page and use one of the following methods: +- Click the menu on the right side of the course (3 horizontal dots) and choose Clone Course.

    +
    +
    Clone Course +
    +
      +
    • Select the course, and then click the Course Details tab and click Clone Course in the Course Management section.

    • +
    +
  4. +
  5. On the Clone the course form, complete the fields and click Create Course.

    +

    Your new course is displayed on the Courses page.

    +
  6. +
+
+

Note

+

Students in the course that is being cloned are not added to the new course.

+
+

See Also:

+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/course-contact.html b/docs/instructors/setupcourses/course-contact.html new file mode 100644 index 00000000..d1725de2 --- /dev/null +++ b/docs/instructors/setupcourses/course-contact.html @@ -0,0 +1,811 @@ + + + + + + + + + Course contact URL — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Course contact URL

+

Contact URLs can be set at the course level to direct students to specific areas or forums for your course where they can raise questions. The contact URLs will override the setting in Organization Contact URL. You can set multiple options and specify a default option for students.

+

When students access the Support Chat they will be shown the options you have specified along with an option to contact Codio directly if they have a problem accessing the Codio platform.

+
+
Student options +
+
    +
  • Select the course, go to the Course Details area and Add Support URLS where you can then enter the text and URL’s to direct students to when they use any of the Contact us options.

    +Course contact url +
  • +
+
+

Note

+

“Teacher” accounts will not be effected by this setting and they will still be able to contact Codio in the usual manner. See Support for more on this

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/course-module-progress.html b/docs/instructors/setupcourses/course-module-progress.html new file mode 100644 index 00000000..1f563bad --- /dev/null +++ b/docs/instructors/setupcourses/course-module-progress.html @@ -0,0 +1,851 @@ + + + + + + + + + Gamification — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Gamification

+

Progress bars and Leaderboards can be enabled to show to the students dashboard.

+
    +
  1. From the Courses page, select the course to open it.

  2. +
  3. Click the Gamification tab.

  4. +
+
+

Course/Module Progress Bar

+

Show Course and/or Module progress can be enabled so students can see their progress in the course/module in their dashboard. Either or both options can be enabled as required

+
+
Enable Progress Bars +
+

Students Dashboard view example (Leaderboard not enabled):

+
+
Student Progress +
+
    +
  • Progress for the Course progress is calculated as = # completed mandatory assignments / # mandatory assignments * 100 (round up to the next integer)

  • +
  • Progress for the Module progress is calculated as = # completed mandatory assignments / # mandatory assignments * 100 (round up to the next integer)

  • +
+
+
+

Average Course Progress Bar

+

Show a progress bar to students that represents the average progress of the students in the course.

+
+
Enable Average Course Progress Bar +
+
+

Note

+

Progress of any test students in the course are excluded

+
+
+
+

Mandatory Assignments

+

By default all assignments are mandatory but can be changed to optional in the Assignment settings area

+
+
+

Configure Progress Bar

+

Once enabled, you can configure the progress bar and can select or deselect whichever modules and/or assignments you wish to include in the progress bar. By default all assignments will be selected.

+
+
Configure Progress bar +
+
+
+

Leaderboard

+

Show a leaderboard in a bar representing each student’s performance in the course from largest to smallest bar (best to worst) where performance = number of points earned on mandatory assignments / total number of points on mandatory assignments.

+

Students can see their own details (name and performance) but details of all other students are anonymous (ie obfuscated) to them.

+
+
Leaderboard +
+
+

Note

+

Information of any test students in the course are excluded

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/course-revoke-sudo-access.html b/docs/instructors/setupcourses/course-revoke-sudo-access.html new file mode 100644 index 00000000..6433d5cf --- /dev/null +++ b/docs/instructors/setupcourses/course-revoke-sudo-access.html @@ -0,0 +1,812 @@ + + + + + + + + + Revoke sudo access for all assignments in the course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Revoke sudo access for all assignments in the course

+

The Revoke sudo access is used to prevent students from installing unauthorized software packages in any assignment in a course.

+

To revoke sudo access, follow these steps:

+
    +
  1. On the Courses page, select the course and then click the Course Details tab.

  2. +
  3. In the Course Management section, select Revoke sudo access button

  4. +
+

To reinstate sudo access, click the Grant sudo access

+
+

Note

+

The settings will be inherited to any child course subsequently created from the parent course.

+
+
+

Note

+

If students have already started the assignment(s), this setting will only be applied after their assignment is restarted/reset.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/courses.html b/docs/instructors/setupcourses/courses.html new file mode 100644 index 00000000..dcaf1981 --- /dev/null +++ b/docs/instructors/setupcourses/courses.html @@ -0,0 +1,802 @@ + + + + + + + + + Courses Set Up — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Courses Set Up

+
+
+

A course is a grouping of students who are taught as a logical group. One of the main tasks for instructors is to create the courses for their students, and then add content (modules and assignments), share it with others, add teachers and students to it, and other tasks. +With courses, you can instantly access student code and projects.

+

You can also integrate the course with any LTI-enabled LMS platform such as Canvas, D2L, Moodle, Blackboard and many others. Your LMS can auto-populate courses and grade data can be fed back from Codio to the LMS.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/create-course.html b/docs/instructors/setupcourses/create-course.html new file mode 100644 index 00000000..4a66e639 --- /dev/null +++ b/docs/instructors/setupcourses/create-course.html @@ -0,0 +1,872 @@ + + + + + + + + + Create a New Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Create a New Course

+

To work with the course features in Codio, you must first set up a course for your students. You can author your own course or create a course using share code or add a course from Codio Courseware Catalog. Creating a course using share code is often used when you want to create a course from content outside your organization. You can also clone a course.

+
+

Author Your Own Course

+

To author your own course, follow these steps:

+
    +
  1. Sign in to your Codio account.

  2. +
  3. Click the Codio icon in the top left corner of the IDE, or click Courses in the left navigation menu on the dashboard to open the Courses page.

  4. +
  5. Click the New Course drop-down and choose Author Your Own Course.

    +New Course +
  6. +
  7. Complete the fields on the Create a new Course form, including the Name, Start Date (optional), Archive Date (optional) and Tags (optional). If you wish to set a different timezone for your course you can do so from the Timezone drop down field

    +Create Empty Course +
  8. +
+
+

Note

+

Courses will also automatically archive when the archive date set for the course is reached. This date can be amended (or removed) in the course details area if you require the course to continue to be active

+
+
    +
  1. Click Create Course.

    +

    Your new course will appear in your Courses area.

    +
  2. +
+
+
+

Create course from share code

+

You can create courses from code users in other organizations share with you. When using share code, any updates or changes you make in your course can be pulled in by other users who are using the same share code. See Working with Parent/Child Courses.

+

To create a course from share code, follow these steps:

+
    +
  1. Sign in to your Codio account.

  2. +
  3. Click the Codio icon in the top left corner of the IDE, or click Courses in the left navigation menu on the dashboard to open the Courses page.

  4. +
  5. Click the New Course drop-down and choose Add From Share Code.

    +Create Course from Share Code +
  6. +
  7. Complete the fields on the Clone a Course by code form, including the Course Code, Name, Organization, Start Date (optional), Archive Date (optional) and Tags (optional).

  8. +
+
+

Note

+

Courses will also automatically archive when the archive date set for the course is reached. This date can be amended (or removed) in the course details area if you require the course to continue to be active

+
+
    +
  1. Click Create Course.

  2. +
+
+
+

Choose From Courseware Catalog

+

You can add a resource from Codio Courseware Catalog. These resources are completely editable and can be customized to suit your teaching context. You can mix-and-match different resources together and add your own content.

+

To add a resource from Codio Courseware Catalog, follow these steps:

+
    +
  1. Sign in to your Codio account.

  2. +
  3. Click the Codio icon in the top left corner of the IDE, or click Courses in the left navigation menu on the dashboard to open the Courses page.

  4. +
  5. Click the New Course drop-down and choose Choose From Courseware Catalog.

  6. +
  7. Select a resource you want from the resource list.

  8. +
  9. Click Evaluate button to add the selected resource into your Codio account.

    +Evaluate Button +
  10. +
  11. Complete the fields on the Clone a Course by code form, including the Course Name, Organization, Start Date (optional), Archive Date (optional) and Tags (optional).

    +Create Course from Share Code +
  12. +
+
+

Note

+

Courses will also automatically archive when the archive date set for the course is reached. This date can be amended (or removed) in the course details area if you require the course to continue to be active

+
+
    +
  1. Click Create Course.

  2. +
+
+
+

More information

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/delete-course.html b/docs/instructors/setupcourses/delete-course.html new file mode 100644 index 00000000..0f821a1b --- /dev/null +++ b/docs/instructors/setupcourses/delete-course.html @@ -0,0 +1,813 @@ + + + + + + + + + Delete Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Delete Course

+

A course can be deleted by course teachers and organization owners. You can also export the course data before you delete it, if you choose to do so. Follow these steps to delete a course:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Course Details tab and then click Delete Course button on the right hand side.

  4. +
  5. On the Delete course confirmation dialog, enter the confirmation code in the text box and click one of the following buttons:

    +
      +
    • Delete Course Only - Click this button to delete only the course and not the students.

    • +
    • Delete Course and Students - Click this button to delete the course and remove the students from your organization. If you select this option, and any of the students in the course are also assigned to other courses, they will only be removed from the course being deleted. They will not be removed from the organization or from other courses they are assigned.

    • +
    +
  6. +
+

When deleting a course, all students work will also be deleted. If you wish to retain a copy of their work, you can export course data

+
+

Note

+

Organization owners can view a list of any members that are no longer assigned to courses and remove users from the organization.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/export-assignment-data.html b/docs/instructors/setupcourses/export-assignment-data.html new file mode 100644 index 00000000..77a8f183 --- /dev/null +++ b/docs/instructors/setupcourses/export-assignment-data.html @@ -0,0 +1,843 @@ + + + + + + + + + Export Assignment Data — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Export Assignment Data

+

Use this to export data related to a specific assignment. Exported data includes student workspace files, in a zip archive for each student. If students have completed the assignment there will also be a .csv file with information such as number of assessment attempts, completion date, time spent, final grade and more.

+

Follow these steps to export assignment data:

+
    +
  1. Open the course and expand the course module.

  2. +
  3. Click the Options menu (the 3 dots on the far right) for the assignment and choose Export Assignment Data.

    +

    An email notification is sent when the data is available for download.

    +

    The following data is included in a .csv file:

    +
      +
    • Student_Name

    • +
    • First_Name

    • +
    • Last_Name

    • +
    • Username

    • +
    • Hashed_ID

    • +
    • Email Address

    • +
    • Right Count

    • +
    • Wrong Count

    • +
    • Answered Assessments

    • +
    • Points/Max_points

    • +
    • Points

    • +
    • Total Points

    • +
    • Time_Spent

    • +
    • Final Grade

    • +
    • Comments

    • +
    • Teacher Grade

    • +
    • Assessments Grade

    • +
    • Script Grade

    • +
    • Grade Override

    • +
    • Extra Credit

    • +
    • Created Date

    • +
    • Completed (True/False)

    • +
    • Completed Date/Time (all instances)

    • +
    +
  4. +
+

and for each assessment:

+
+
    +
  • <Assessment_Name>_Correct (True/False)

  • +
  • <Assessment_Name>_Answer

  • +
  • <Assessment_Name>_Attempts

  • +
+
+
+

Note

+

The data is retained for a maximum of 6 months.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/export-course-data.html b/docs/instructors/setupcourses/export-course-data.html new file mode 100644 index 00000000..33ae02f8 --- /dev/null +++ b/docs/instructors/setupcourses/export-course-data.html @@ -0,0 +1,922 @@ + + + + + + + + + Data Exports — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Data Exports

+
+

Export Coursework Data

+

You can export course data (including students workspaces) prior to deleting a course, if you want to retain the data. Follow these steps to delete the course data:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Export tab and then click Coursework Data.

    +Export Course Data +

    All the data from the course is compiled in a .zip file. An email is then sent to you that includes a link to download the course data. The link remains active for 7 days and then the file is removed.

    +
  4. +
  5. To access the download file within the 7-day period it remains active or to export additional files, click Course Data and click Export to download the file.

    +Course Export Links +
  6. +
+
+

Note

+

You can also export individual assignment data if you do not need or require data for all the assignments in your course. See Export assignment data

+
+
+
+

Export Student Data for the Course

+

You can export course data for individual students (including their workspaces) rather than having to export the whole course data. Follow these steps to delete the course data:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Students tab and select the student

  4. +
  5. Right click the 3 blue dot menu and select Export Student Data.

    +Export Student Data +

    All the data from the course is compiled in a .zip file. An email is then sent to you that includes a link to download the students data. The link remains active for 7 days and then the file is removed.

    +
  6. +
+
+
+

Export Assessment Data

+

To export data related to students assessment in individual or multiple assignments in the course, follow these steps:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Export tab and then click Assessment Data in the Export section.

    +Assessment Data Export +
  4. +
+

When selected, a dialog shows allowing you to select the assignments to obtain the data.

+
+

The following data is exported to a .csv file for download (or into a .zip file containing individual csv files if multiple assignments selected):

+
    +
  • Student_Name

  • +
  • First_Name

  • +
  • Last_Name

  • +
  • Username

  • +
  • Hashed_ID

  • +
  • Email Address

  • +
  • Assignment_Name

  • +
  • Total_Points_Earned

  • +
  • Total_Points_Possible

  • +
  • Time_Spent

  • +
+
+

and for each assessment:

+
+
    +
  • <Assessment_Name>_Attempts

  • +
  • <Assessment_Name>_Answer

  • +
  • <Assessment_Name>_Earned_Points

  • +
  • <Assessment_Name>_Total_Points_Possible

  • +
+
+
+

Note

+

The data is retained for a maximum of 6 months.

+
+
+
+

Export Course Access Data

+

To export data related to users accessing assignments in the course, follow these steps:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Export tab and then click Course Access Data in the Export section.

    +Export Course Data +

    The following data is exported to a .csv file for download:

    +
      +
    • Username

    • +
    • Users registered email address

    • +
    • First name

    • +
    • Last name

    • +
    • Date/time when user logged in

    • +
    • Access type (Log In, Log Out, Project Open, Project Close)

    • +
    • Assignment name (Book based assignments will report the name of the book)

    • +
    • Role in course (Teacher/Student)

    • +
    • Project path

    • +
    • IP address (IP address associated with login session)

    • +
    +
  4. +
+
+

Note

+

The data is retained for a maximum of 6 months.

+
+
+
+
+

Course Content Exports

+
+

Export PDF

+
+
PDF Export +
+

Use this to obtain PDF versions of the guides content in your assignments. When selected, a dialog shows allowing you to select the assignments to obtain the PDF version.

+
    +
  • You can select a single PDF where all selected assignments are compiled into one PDF file or to receive a PDF for each selected assignment.

  • +
  • You can also include teacher only notes in the PDF export

  • +
  • The link will be active for 7 days and after this time the file will be removed.

  • +
+
+
+

Export Course Sources

+

You can export course sources to obtain a zip file containing all the currently published assignments.

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Export tab and then click Course Sources in the Export section.

    +Export Course Data +

    The currently published versions of each assignment are compiled into a .zip file and each assignment is compiled into a .tar.zst file and can be downloaded. If you update the assignment in the future, you can create a new export.

    +
  4. +
  5. To access the download or to export updated assignments, click Course Sources and click Export to create a new export or click the link to download the zip file.

    +Course Export Links +
  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/export-lti.html b/docs/instructors/setupcourses/export-lti.html new file mode 100644 index 00000000..6f2bdaa7 --- /dev/null +++ b/docs/instructors/setupcourses/export-lti.html @@ -0,0 +1,803 @@ + + + + + + + + + Export LTI Settings — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Export LTI Settings

+

The LTI integration URLs for the assignments in a course can be exported.

+
    +
  • Select the course, go to the LTI/LMS area and then press the Assignment URLs button.

    +Export LTI settings +
  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/add-questions-from-library.html b/docs/instructors/setupcourses/library/add-questions-from-library.html new file mode 100644 index 00000000..bfcfd9ba --- /dev/null +++ b/docs/instructors/setupcourses/library/add-questions-from-library.html @@ -0,0 +1,634 @@ + + + + + + + + + Add Questions from Assessments Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Questions from Assessments Library

+

After searching the library, click Add for the questions you want to include in your assessment.

+Add Question +

In Codio’s Assessments Library, there are two types of layouts that determine how the question is inserted into your assessment:

+
    +
  • Simple - An assessment in the library has a simple layout if it was added with the 1 Panel without tree layout. When adding a simple layout question to your project or book, the assessment is inserted into the current page at your cursor’s location.

  • +
  • Complex - An assessment in the library has a complex layout if it was added with any layout other than 1 Panel without tree. When adding a complex layout question to your project or book, the assessment is inserted on a new page directly after the current page. If a question has the complex layout, an icon is displayed on the assessment question.

    +
  • +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/add-questions-to-library.html b/docs/instructors/setupcourses/library/add-questions-to-library.html new file mode 100644 index 00000000..d13b67ee --- /dev/null +++ b/docs/instructors/setupcourses/library/add-questions-to-library.html @@ -0,0 +1,653 @@ + + + + + + + + + Add Questions to an Assessments Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Add Questions to an Assessments Library

+

Once an assessment is added to an assessment library, it can be accessed later and added to a project or course.

+

Prerequisite: +Before you can add questions to an assessment library, an Admin in your organization must create an organization assessments library. See Create an Organization Assessments Library for more information.

+

Follow these steps to add questions to your assessments library:

+
    +
  1. Create the assessment (see Add a New Assessment) for the assignment and be sure to keep the following in mind:

  2. +
+
+
    +
  • Assessments on pages set to the *1 Panel without tree* layout are saved with a simple layout.

  • +
  • Use the Metadata tab to tag your assessment so it appears when the searching the assessments library.

  • +
  • Use the Files tab to ensure all dependent files, such as grading scripts, images used in the guides pane, etc. are associated with the assessment so it works properly when added from the library.

  • +
+
+
    +
  1. Once the assessment is created, click Save in Library in the lower right corner on the assessment page.

    +Save in Library +
  2. +
  3. On the Select Library dialog, choose the library from the drop-down list.

    +Choose Library +
  4. +
  5. Click Select to save the assessment to the library.

    +Select Library +

    If you receive an error message, ensure that you have write access to your organization’s assessment library. See Create an Organization Assessments Library for more information.

    +
  6. +
  7. Once a question has been added, follow the steps in Update an Existing Assessment from Library to update your assessment with the newly added question.

  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/assessmentslibrary.html b/docs/instructors/setupcourses/library/assessmentslibrary.html new file mode 100644 index 00000000..a79fe067 --- /dev/null +++ b/docs/instructors/setupcourses/library/assessmentslibrary.html @@ -0,0 +1,631 @@ + + + + + + + + + Assessments Libraries — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Assessments Libraries

+
+
+

An assessment library in Codio is a collection of existing assessment items that you can add to or pull from to include in your assignments. You can create your own organization assessment library or use the Codio Global Assessment Library.

+

You can also use the assessment libraries with the Random Assessment to randomly assign a group of assessments to students.

+

You can organize your library by course number, programming language, department, etc. and filter the library based on tags when searching for assessments.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/global-library.html b/docs/instructors/setupcourses/library/global-library.html new file mode 100644 index 00000000..f01ee57b --- /dev/null +++ b/docs/instructors/setupcourses/library/global-library.html @@ -0,0 +1,664 @@ + + + + + + + + + Codio Global Assessments Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Codio Global Assessments Library

+

The Global Assessments Library is an assessment library to which all Codio users have read-only access. The library contains auto-graded assessment questions that cover a wide variety of topics, difficulties, and assessment types. We are currently populating it with assessments in:

+
    +
  • Java

  • +
  • C / C++

  • +
  • Python

  • +
  • JavaScript

  • +
  • Data Structures (in Java)

  • +
+

All assessments in the global library are auto-graded, contain example solutions and answer explanations for the student, and some include teacher notes to help better convey the intended learning objective of the assessment.

+
+

Using the Global Assessments Library

+

To access the Codio Global Assessments Library, follow these steps:

+
    +
  1. Click the Assessments button and choose Assessment from the Add from Library area

  2. +
  3. On the Choose an Assessment to Add dialog, click the Library Name drop-down and choose Codio Main.

  4. +
  5. You can filter through the different assessments by tags:

    +Bloom's Taxonomy +
  6. +
+
+
    +
  • Programming language

  • +
  • Assessment type (auto-detected)

  • +
  • Category (topic-level)

  • +
  • Content (sub-topic level)

  • +
  • Learning Objective (in SWBAT form - “Students will be able to….”)

  • +
  • Bloom’s Taxonomy level

  • +
+
+
    +
  1. Once you find the question you want to add to your assessment, click Add.

  2. +
+
+
+

Modify question from Global Assessment Library

+

If you like a question in the Assessments Library but want to modify it, unlink the question from the library and then modify it for your assignment.

+

You can then add your new version of the assessment to your organization’s assessment library.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/search-library.html b/docs/instructors/setupcourses/library/search-library.html new file mode 100644 index 00000000..a61dbd8e --- /dev/null +++ b/docs/instructors/setupcourses/library/search-library.html @@ -0,0 +1,673 @@ + + + + + + + + + Search Assessments Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Search Assessments Library

+

You search an assessment library the same whether you are using Codio’s Global Assessment Library or your organization assessment library. Follow these steps to search a library:

+
    +
  1. In the Guide Editor, click the Assessments button and choose Assessment from the Add from Library area.

  2. +
  3. Click the Library Name drop-down and choose the assessments library you want to search.

    +Select Library +
  4. +
  5. To narrow the assessments that are displayed, enter a tag and value pair. For example, you can search by the Programming Language (tag) and indicate you want Python (value) questions. The search is not case sensitive and Codio presents auto-complete suggestions as you type.

    +Autocomplete +

    You can also click any of the tag fields in the results to automatically filter and add a new row (click +) to your search query. You can add as many tag:value pairs as needed to narrow your search.

    +Add Tags +

    Once you have completed entering tag and value pairs, the results are displayed.

    +Search Results +
  6. +
  7. Scroll through the search results using the scroll bar or use the navigation buttons in the upper portion of the page to move forward, back, or to a specific page.

    +Scroll Results +
  8. +
  9. Click an assessment to preview the question.

    +Preview Question +

    If you preview a second question, the first preview collapses.

    +Preview Collapsed +
  10. +
+
+

Saving searches

+

If you want to save search parameters, follow these steps:

+
    +
  1. Click the Save button to the right of the tags and values.

    +
  2. +
  3. On the Save Search dialog, enter a Search Name and click OK.

    +Search Name +
  4. +
+
+
+

Using saved searches

+

To use a saved search, click the Saved drop-down list and choose the saved search.

+
+
+

You can edit these search parameters without changing your saved search.

+
+
+

Delete saved searches

+

To remove a saved search, click the Saved drop-down list and click the red x to the name.

+
+
Delete Saved Search +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/unlink-assessment.html b/docs/instructors/setupcourses/library/unlink-assessment.html new file mode 100644 index 00000000..3a89412f --- /dev/null +++ b/docs/instructors/setupcourses/library/unlink-assessment.html @@ -0,0 +1,643 @@ + + + + + + + + + Unlink an Assessment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/library/update-assess-from-library.html b/docs/instructors/setupcourses/library/update-assess-from-library.html new file mode 100644 index 00000000..a1b4969b --- /dev/null +++ b/docs/instructors/setupcourses/library/update-assess-from-library.html @@ -0,0 +1,641 @@ + + + + + + + + + Update an Existing Assessment in Library — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Update an Existing Assessment in Library

+

If you want to update an assessment that is in the library, follow these steps to find the assessment you wish to modify, either by:

+
    +
  1. In the Guide Editor, click the Edit: <Assessment Name> button to the right of the assessment.

    +Edit Assessment +
  2. +
+

Or

+
    +
  1. Click the Assessment button to view the list of all assessments and click the assessment to open it.

    +Edit Assessment List +
  2. +
  3. To update the assessment, open the assessment, and click Update in Library in the lower right corner.

    +Update in Library +
  4. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/lmsconnect.html b/docs/instructors/setupcourses/lmsconnect.html new file mode 100644 index 00000000..a71e00d3 --- /dev/null +++ b/docs/instructors/setupcourses/lmsconnect.html @@ -0,0 +1,798 @@ + + + + + + + + + Connecting to your LMS — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Connecting to your LMS

+

For more information on this see Integrating with your LMS system

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/mark-assignments-complete.html b/docs/instructors/setupcourses/mark-assignments-complete.html new file mode 100644 index 00000000..973c0339 --- /dev/null +++ b/docs/instructors/setupcourses/mark-assignments-complete.html @@ -0,0 +1,829 @@ + + + + + + + + + Mark Assignment as Complete/Uncomplete — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Mark Assignment as Complete/Uncomplete

+

An assignment can be marked as complete using one of the following methods:

+
    +
  • Student marks the assignment as complete from their dashboard.

  • +
  • Instructor marks the assignment as complete for the student from the assignment on the Courses dashboard.

  • +
  • Instructor marks all assignments as complete for all students from the Actions button on the assignment.

  • +
  • If the Assignment Duration feature is enabled, all student assignments are marked as complete as soon as the assignment duration expiration date and time is reached.

  • +
  • Mark All As Completed - Click this button to mark all student assignments as completed. Hover over a student name to see the switch appear to the left of the students name.

    +Mark All As Completed +
  • +
  • Unmark As Complete - Click this button to clear the Mark All As Complete.

  • +
+
+

View When a Student Marks Assignment as Complete

+
+
To see when a student marks an assignment as complete, open the grading dialogue box
+
    +
  1. Navigate to the assignment in Overview mode.

  2. +
  3. Click the numerical grade box to open the dialogue to see the completed date/time.

  4. +
+
+Mark As Complete Time +
+
If you want to see submission times in one place: Download the CSV
    +
  1. Navigate to the course.

  2. +
  3. Ensure you are in Overview mode and click the settings gear to the right of the assignment to access Assignment Settings.

  4. +
  5. Click the Actions button to drop down more options.

  6. +
  7. Select Download CSV.

  8. +
+
+
+Mark As Complete Time with CSV +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/modify-assignments.html b/docs/instructors/setupcourses/modify-assignments.html new file mode 100644 index 00000000..7d0d0e8f --- /dev/null +++ b/docs/instructors/setupcourses/modify-assignments.html @@ -0,0 +1,855 @@ + + + + + + + + + Modify Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Modify Assignments

+

You can make changes to assignments that have already been published but it is not available to students until you re-publish it. There are certain considerations when making changes to assignments that students have already started to avoid invalidating their work. You can also reset assignments so that your students have the latest version.

+

Follow these steps to modify an assignment and re-publish it:

+
    +
  1. On the Courses page, click the course that contains the assignment you want to edit.

  2. +
  3. Click on the Edit Assignments tab and expand the module and click the assignment to open it. If there is a more recent version published than your working copy, a message will be shown offering you the option to open your current version or the last published version.

  4. +
  5. Click the assignment and make your changes to the assignment (see below).

  6. +
  7. When you have completed your changes, click Publish in the upper right corner of the assignment or from the Education menu area

  8. +
  9. Enter a description of your updates in the Change Log and then click Publish.

  10. +
+
+

Note

+

If you wish to discard the changes you have made in your working copy, go to Project > Discard Changes to revert back to the last published version.

+
+
+

Re-publish assignment that students have already started

+

When you make changes to an assignment and attempt to re-publish it, if students have already started the assignment, you are warned that Students have started this assignment and provide options for you to continue. You can add new files but cannot update existing files as it will invalidate the student’s work.

+Update Assignment +
+

Note

+

The Propagate gigabox settings to the assignment settings option will show if the gigabox setting for the working copy is different to that set for the assignment. By default it is enabled but you can disable it if you choose.

+
+
+
+

Reset assignment for individual student

+

When you make changes to an assignment that students have already started, you can reset the assignment so the students will see the updates but any work they have done so far, will be lost. Follow these steps to reset an assignment for an individual student:

+
    +
  1. Open the course, go to the Overview tab and click the assignment.

  2. +
  3. Find the student and click the 3 blue dot button on the right.

  4. +
  5. Click the Reset button.

  6. +
  7. Enter the confirmation code and then click Yes to confirm the reset.

  8. +
  9. You can also allow your students to reset their own assignments.

  10. +
+
+
+

Reset assignment for all students

+

Follow these steps to reset an assignment for all students:

+
    +
  1. Open the course, go to the Overview tab and click the assignment.

  2. +
  3. Click the Actions button and choose Reset.

  4. +
  5. Enter the confirmation code and then click Yes to confirm the reset.

  6. +
+
+
+

Options for modifying an assignment

+

The following settings allow you to modify an assignment:

+Assignment Settings +
    +
  • Rename name the module (1) - Click the Rename icon, modify name and description, and click Save Changes.

  • +
  • Change the name of the assignment (2) - Click the Rename icon, modify name and description, and click Save Changes.

  • +
  • Version history (3) - View the version history of published assignments, including date/time assignment was published who published it, and the name/version of the stack.

    +Versions +
  • +
  • Delete assignment (4) - Click Delete to remove the assignment from the course module. You can choose to Convert content to a project, which saves the assignment content to your project list, or Delete content entirely.

  • +
  • Delete module (5) - Click Delete to remove the entire module.

  • +
  • Reorder modules (6) - Click the Up or Down arrow to move the assignment to a different position in the course. You can also change the order of the assignments in a module by dragging and dropping it to the desired position in the list. View this video to learn more

  • +
  • Duplicate assignment (7) - Click Duplicate to create a copy of the assignment.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/notification-email.html b/docs/instructors/setupcourses/notification-email.html new file mode 100644 index 00000000..2ef25385 --- /dev/null +++ b/docs/instructors/setupcourses/notification-email.html @@ -0,0 +1,837 @@ + + + + + + + + + Automated Emails — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Automated Emails

+

Automatic email notifications can be set up in your courses to send emails to your students. Go to the Automated Emails tab in your course to create automatic email notifications. Not available for Read only teachers in the course.

+
+
Notifications +
+
+

Automated Email details

+
    +
  • Not Started Assignment: you can schedule the notifications to be sent to all students in the course that have never opened the assignment that is due soon

  • +
  • Incomplete Assignment: you can schedule the notifications to be sent to all students who have started but not finished an assignment that is due soon. Students that have also not started will also be notified

  • +
  • Started and Incomplete Assignment you can schedule the notifications to be sent to all students who have started but not finished an assignment that is due soon. Students that have not started will not be notified

  • +
  • New Feedback: the email notification will be sent when new feedback is available for the student

  • +
  • New Comment: the email notification will be sent when new comment is available for the student

  • +
+
+
+

Before

+
    +
  • Due Date (before late penalties) where penalties deadlines are set and the Closing Date is set to the final date of completion, the Due Date is taken from the penalty deadline date

  • +
  • Closing Date is taken from the Closing Date set for the assignment duration

  • +
+

Reply to Email Address: enter an email address that students can then reply to if they have questions or require further assistance.

+
+
+

Automated Email Template

+

We prefill a default title name and the body text including links (in the `<<<  >>>` tags) that will assist the students.

+

You may edit this as you wish.

+

Supported tags

+
    +
  • Student name `<<<student name>>>` : Students name

  • +
  • Assignment name `<<<assignment name>>>`: Assignment name

  • +
  • Course name `<<<course name>>>`: Codio course name

  • +
  • Course link `<<<course link>>>`: link to Codio course for non LTI and for LTI enabled courses the `COURSE LMS URL`

  • +
  • Assignment link `<<<assignment link>>>`: link to students project (if the project is not started then the course link as above used)

  • +
  • Feedback link `<<<feedback link>>>`: Link to assignment feedback

  • +
  • Due In `<<<due in>>>`: when the assignment is due for completion relative to current date/time

  • +
  • Comment Text `<<<Comment Text>>>` : Comment Text

  • +
  • File Name `<<<File Name>>>` : File Name where the new comment is added

  • +
+

Please note: we have plans to develop this feature in the future but if you have ideas/suggestions please raise in our Feedback area

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/parent-child-courses.html b/docs/instructors/setupcourses/parent-child-courses.html new file mode 100644 index 00000000..ec99727b --- /dev/null +++ b/docs/instructors/setupcourses/parent-child-courses.html @@ -0,0 +1,942 @@ + + + + + + + + + Working with Parent/Child Courses — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Working with Parent/Child Courses

+

When a course is created by cloning or using a share code, the course (child) is tied to the original (parent) course and any updates to an assignment in the parent course may also be updated. Details of the parent course for any child assignments can be seen from the version history button and individual child assignments as well as the entire course can be disconnected if required.

+
+

Update & pull updates

+

After an update in the parent course has been published, from Edit Assignments area, a Pull icon will appear next to assignments that have changed. Follow these steps to pull the updates.

+
    +
  1. In the Dashboard, select the course to open it and click on the Edit Assignments tab. The assignments that have changed show a Pull icon.

    +Pull +
  2. +
  3. Click the Pull icon to view the details of the update.

    +Update Details +
  4. +
  5. Click Update to pull the updates into the cloned (child) course.

    +
    +

    Note

    +

    You can also click Pull All to pull all available updates for the module but you cannot view the details.

    +
    +Pull +
  6. +
+
+
+

Note

+

Pulling updates from the parent course overwrites changes made in the child course.

+
+
+
+
+

Update & pull updates - with notification sent to child courses

+

Some people prefer to send notifications to alert child courses of updates. After an update in the parent course has been published, you can send a notification that displays a banner in the child course(s) informing all instructors that there are available updates.

+

To send notifications, follow these steps:

+
    +
  1. In the Dashboard, select the course to open it and then click the Course Details tab.

  2. +
  3. Click the Send New Notification button in the Course Management section.

  4. +
  5. In the Notification Message text box, enter the message to instructors that explains the changes that have been made to the parent course and are now available in the child course.

    +Notification Message +

    The message can include details of all the changes made in each assignment or just be a summary. If a summary is included, instructors can pull the assignments and review the information in the publish assignment changelog.

    +
  6. +
+
+
+

Note

+

To view a history of all notifications sent for published updates in the parent course, click the View Sent Notification button.

+
+
+
    +
  1. After a notification has been sent, a Download icon is displayed in the upper right corner of the course.

    +Course Update Icon +

    If you open the course, a banner is displayed indicating that the course has been updated.

    +Course Update Banner +
  2. +
  3. Click Show Changes to view the updates, including the tagged parts of the assignment that has updates.

    +Course Update Details +

    To understand the tags, click the ? to view a description.

    +Tag Descriptions +

    To view the notification message that was send with the update, click Update History.

    +
  4. +
  5. Check the check box next to the assignments you want to update and then click Apply.

  6. +
  7. On the confirmation dialog, confirm that you want to update the assignments.

  8. +
+
+
+

Note

+

Pulling updates from the parent course overwrites changes made in the child course.

+
+
+
+
+

Add new assignments from parent to child courses

+

When a new assignment has been added in the parent course, it will not automatically be added to child courses. Rather, child courses will need to add it manually to allow future updates to be pulled. Follow these steps to add an assignment from the parent course to the child course:

+
    +
  1. In the Dashboard, select the child course to open it and go to the Edit Assignments tab.

  2. +
  3. Select the module and click Add assignment.

    +Add Assignment +
  4. +
  5. On the Create Assignment dialog, click Existing

  6. +
  7. Select the parent course, module and assignment(s) to be added to the child course. The assignment in the child course is automatically published.

  8. +
+
+
+

Revert to earlier version

+

You can revert back to earlier published versions of your courses. However, reverting automatically publishes the course and it’s available to your students.

+
    +
  1. In the Dashboard, select the course to open it and go to the Edit Assignments tab.

  2. +
  3. On the Assignments page, click the Versions button.

    +View Versions +
  4. +
  5. View the list of all previous versions and click Revert for the version to which you want to revert.

    +Revert Version +
  6. +
  7. When other instructors open the assignment (in Edit mode), they can click Latest Published Version to update their working copy to the currently published version.

    +Latest Published Version +
  8. +
+
+
+

Parent/Child relationship information

+

Details of the parent course associated with child assignments can be seen from the Versions button.

+
+
Linked Parent Course +
+
+
+

Disconnecting assignments or an entire course from a parent course

+
+

Individual assignments

+

Assignments in child courses can be disconnected from the parent assignment so any future updates released for the parent assignment will not be available to update.

+
+
Disconnect assignment +
+
+
+

Entire Course

+

The entire course can be disconnected from the parent course so any future updates released for the parent course will not be available to update.

+
+
    +
  • Select the course, and then click the Course Details tab and click Disconnect button in the Course Management section.

    +Linked Parent Course +
  • +
+
+
+
+
+

Send announcements

+

Announcements can be sent to instructors that displays a similar banner as above in the child course informing all instructors of an announcement. These can be used to provide other information to instructors.

+

To send an announcement, follow these steps:

+
    +
  1. In the Dashboard, select the course to open it and then click the Course Details tab.

  2. +
  3. Click the Send New Announcement button in the Course Management section.

  4. +
  5. In the Notification Message text box, enter the message to instructors you wish to send.

    +Announcement Message +
  6. +
+
+
+

Note

+

To view a history of all announcements sent in the parent course, click the View Sent Announcements link.

+
+
+
    +
  1. When an instructor opens the course, a banner is displayed indicating that there is an announcement for the course.

    +Course Announcement Banner +
  2. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/preview-course.html b/docs/instructors/setupcourses/preview-course.html new file mode 100644 index 00000000..312e691f --- /dev/null +++ b/docs/instructors/setupcourses/preview-course.html @@ -0,0 +1,841 @@ + + + + + + + + + Preview Courses and Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Preview Courses and Assignments

+

You can preview a course and assignments as a student by logging into one of the Test Student accounts that are provided with your Codio account. Follow these steps to preview a course:

+
    +
  1. On the Courses page, click the course that includes the assignments you want to preview

  2. +
+
+
Access Course +
+
    +
  1. Go to the Overview tab.

  2. +
  3. Click the assignment to open it. You should see a list of Test Students. If you do not see Test Students, see Add or Remove Students in a Course to learn how to add students.

  4. +
  5. Use one of the following methods to login as the student:

    +
      +
    • Click the Options menu to the far right of the student’s name and choose Login as.

    • +
    +Login as student +
      +
    • Click the Students tab and then click the Login as button to the right of the student’s name.

      +Student login +
    • +
    +
  6. +
  7. To return to your teacher account, click Switch back to teacher’s account.

  8. +
+
+

Preview assignment as teacher

+

You can also preview an assignment as a teacher after you have added them. Follow these steps to preview an assignment in Overview mode:

+
    +
  1. On the Courses page, click the course that includes the assignments you want to preview.

  2. +
  3. On the Overview page, click the Preview button.

    +
    +
    Preview Assignment +
    +
  4. +
  5. Within the Guide Editor, the “View as Teacher” setting defaults to off, so select the settings gear and ensure it is toggled on. When View as Teacher is toggled on, you can see additional guidance appear in the Guide that students can not see.

    +
    +
    View as Teacher +
    +
  6. +
+
+

Note

+

Each time you preview an assignment, it opens as new. Anything you may have added as notes to your preview is not saved.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/rename-course.html b/docs/instructors/setupcourses/rename-course.html new file mode 100644 index 00000000..15064843 --- /dev/null +++ b/docs/instructors/setupcourses/rename-course.html @@ -0,0 +1,806 @@ + + + + + + + + + Rename Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Rename Course

+

A course can be renamed by course teachers and organization owners. Follow these steps to rename a course:

+
    +
  1. Navigate to the Courses page and select the course to open it.

  2. +
  3. Click the Course Details tab.

    +Rename Course +
  4. +
  5. Select the Name field and change the course’s name.

  6. +
  7. Click Save Changes at the bottom of the page.

  8. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/rename-reorder-assignments.html b/docs/instructors/setupcourses/rename-reorder-assignments.html new file mode 100644 index 00000000..28c8cdf3 --- /dev/null +++ b/docs/instructors/setupcourses/rename-reorder-assignments.html @@ -0,0 +1,833 @@ + + + + + + + + + Rename/Reorder Modules and Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Rename/Reorder Modules and Assignments

+

You can rename and reorder modules and assignments when on the Edit tab on the Courses page. To rename or reorder course modules or assignments, follow these steps:

+
+

Rename and Reorder Modules

+
    +
  1. Open the course that contains the course module you want to rename or reorder and go to the Edit Assignments tab.

  2. +
  3. To rename the module, click the Rename button at the top

  4. +
  5. To reorder the modules on the page, click the Up and Down arrows until they are in the desired position.

  6. +
+
+
+

Rename and Reorder Assignments

+
    +
  1. Open the course that contains the course assignment you want to rename or reorder and go to the Edit Assignments tab.

  2. +
  3. To rename an assignment, click on the Rename button for that assignment.

  4. +
  5. To reorder an assignment within the module, click the assignment, and then drag and drop it into the desired position.

  6. +
+

You can rename and reorder modules and assignments when the Edit Assignments tab is selected inside your course. To rename or reorder course modules or assignments, follow these steps:

+
+
+

Rename and Reorder Modules

+
    +
  1. Open the course that contains the course module you want to rename or reorder.

  2. +
  3. Select the Edit Assignments tab.

  4. +
  5. Click the pencil next to the module you want to rename, enter the new name, and click Save.

  6. +
  7. To reorder the modules on the page, click the Up and Down arrows until they are in the desired position.

  8. +
+
+
+

Rename and Reorder Assignments

+
    +
  1. Open the course that contains the course assignment you want to rename or reorder.

  2. +
  3. Select the Edit Assignments tab.

  4. +
  5. Click the pencil in the rename column of the assignment, enter the new name, and click Save Changes.

  6. +
  7. To reorder an assignment within the module, click the assignment, and then drag and drop it into the desired position.

  8. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/codioresources.html b/docs/instructors/setupcourses/resources/codioresources.html new file mode 100644 index 00000000..97f4d90a --- /dev/null +++ b/docs/instructors/setupcourses/resources/codioresources.html @@ -0,0 +1,810 @@ + + + + + + + + + Codio instructional resources — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Codio instructional resources

+
+
+

Codio’s scaffolded resources use an interactive approach so students can actively construct knowledge. Students are presented with code samples as well as an online IDE so they can experiment hands-on. Codio instructional resources are completely editable and can be customized to suit your teaching context. You can mix-and-match different resources together and add your own content.

+

Video: Assigning Codio Resources

+

Select Resources from the dashboard. You will see a list of courses recommended by Codio.

+
+
CodioResources +
+

Select a course and you can scroll down to see details of the content in the module.

+

To use this content in your course click the Evaluate button(s) and it will be added to your Codio account.

+
+
CreatefromResources +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/editingresources.html b/docs/instructors/setupcourses/resources/editingresources.html new file mode 100644 index 00000000..507a6204 --- /dev/null +++ b/docs/instructors/setupcourses/resources/editingresources.html @@ -0,0 +1,799 @@ + + + + + + + + + Editing Resources — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Editing Resources

+

Once you have created a course from the codio resources, although there is an inherent link between our resource and your course (see Working with Parent/Child Courses for more information), you can edit/update the content as you wish. See Page Editing for more on this

+

If our resource is updated in the future you will still see the option to pull the changes into your course but be aware this can then overwrite the changes you made.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/crunch.html b/docs/instructors/setupcourses/resources/resourcetools/crunch.html new file mode 100644 index 00000000..64a5df29 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/crunch.html @@ -0,0 +1,918 @@ + + + + + + + + + + Additional resources — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Additional resources

+
+
+
+

Crunch

+

Crunch is a modern, full-featured alternative to Little Man Computer. It is testament to Little Man Computer that it is still being used many years later. We have taken inspiration from it and given it a modern feel and a more complete instruction set that allows you to focus on thinking about your algorithm rather than having to learn the syntax.

+
+

Warning

+

Pair Programming should not be used for Crunch assignments.

+
+
+
+

Crunch Course

+

We have built a 3 assignment Course that combines teaching materials with over 20 challenges of gradually increasing complexity. This is a great resource for teachers wanting to teach the basics of Assembly Language programming as well as computational thinking.

+

From the Dashboard, go to Resources and then look for Crunch - Little Man Computer on Steroids.

+
+
+

Lexikon

+

We recommend you use Codio’s Lexikon feature to get inline help on Crunch usage and commands. You can find the Lexikon in the Tools menu. Once it appears, select the dropdown list on the right side and select Crunch. You can then search for commands. Try entering Overview in the search box for an overview of all the Crunch commands.

+
+
+

Crunch Module

+

We strongly recommend you use the Crunch module to teach Crunch. The Module can be found in the Crunch - Little Man Computer on Steroids Course. From the Dashboard, go to Resources and then look for Crunch - Little Man Computer on Steroids, within that course you will find the Crunch module and can add as a course to your account.

+
+
+

Video Overview

+
+
+ +
+
+
+

Creating a Crunch file

+

If you want to create your own Crunch files in a Codio project, create a new file of type Crunch by giving it the .crunch extension.

+

A new file is created from either the File menu or by right-clicking on the project name line in the file tree.

+new file +
+
+

Saving changes

+

All changes are changed automatically, so you don’t have to explicitly save.

+
+
+

Source Code Editing

+

Editing source code is done by hovering over a line until the popup +button bar appears.

+Crunch Insert +

If you have not yet added any code, then you should see the button bar already there in the top of the code area.

+

Click on the + to add a new instruction.

+
+
+

Instructions

+

Crunch comes with a good base set of instructions. To see the full set of instructions, along with explanations for each one, add a new line as explained above. You can then scroll through the list of available instructions. There is also a complete Lexicon available. Go to Tools>Lexicon and select the Crunch option to search.

+

The following instructions are not available in Little Man Computer and provide a more complete experience.

+
    +
  • BGT branch if greater than

  • +
  • BGE branch if greater than or equal to

  • +
  • BLT branch if less than

  • +
  • BLE branch if less than or equal to

  • +
  • BEQ branch if equal to

  • +
  • BNE branch if not equal to

  • +
  • JMP jump to a label

  • +
  • PSH push accumulator onto a stack

  • +
  • POP pop accumulator off the stack

  • +
  • MUL multiply the accumulator by a literal value of a value stored +in a memory location

  • +
  • INC increment the accumulator by 1

  • +
  • DEC decrement the accumulator by 1

  • +
+

You can access the full instruction list from the dropdown when you add a new instruction or you can simply type the instruction mnemonic (3 letter instruction) and press enter.

+
+
+

Adding labels

+

Instructions such as BEQ, BNE, BLT, BLE, BGT, BGE, JMP require that you jump to a specific label if the condition is met. You can add such a label by pressing the add label button from the floating toolbar.

+
+Crunch Label +
+

Enter a label name that can be used as a target for the above listed instructions.

+
+
+

Comments

+

If you want to add comments to your code, click the comment button, circled below, and you can add a comment description into the code.

+
+Crunch Comment +
+
+
+

Selecting lines of code - deleting or moving

+

If you want to select one or more lines of code (to delete or move to another location) then you should do the following

+
    +
  • click on a line you want to select but make sure you click away from a field that requires input

  • +
  • to select more multiple lines, then press the shift key and click on another line in order that all lines between the first line and this line are selected. You should then see the multiple lines highlighted.

  • +
+

Once you have the one or more lines selected, you can either delete all lines (by pressing delete from the toolbar on the right) or by dragging the selected lines to the required destination.

+
+
+

Running your code

+
+

Step / debug mode

+

One very nice way of running your code is to step through it line by line so you can see how it executes at your own pace. To do this, press the Step button on the right hand side. It will immediately start executing.

+

At any time, you can press the Run button to run to completion at full speed.

+
+Crunch stepping +
+
+
+

Run mode

+

This runs your program at full speed.

+
+

Output window

+

All output is written to the output window at the bottom of the screen, which is scrollable.

+
+
+
+
+

Stack contents

+

If you push the accumulator to the stack using the PSH command, the stack content is displayed in a scrollable window within the display below the code window. As you POP items off the stack, you will see the topmost item being removed.

+
+
+

Undo & redo

+

You can undo and redo changes using the buttons on the right hand side.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/flode.html b/docs/instructors/setupcourses/resources/resourcetools/flode.html new file mode 100644 index 00000000..cc6a014e --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/flode.html @@ -0,0 +1,885 @@ + + + + + + + + + Flode — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Flode

+

Flode is a flowcharting application, using Javascript as its engine, that allows you to:

+
    +
  • create annotated flowcharts

  • +
  • execute flowcharts

  • +
  • write proper code expressions, including decisions, in chart elements

  • +
  • integrate a debugger

  • +
  • export charts as images for project write-ups

  • +
  • input and output elements so automated tests can auto-grade charts

  • +
+
+
flode +
+
+

Warning

+

Pair Programming should not be used for Flode assignments.

+
+
+

Creating and editing a new Flode file

+

If you want to create Flode charts in your content, start by creating either a new project or assignment in your course. You can use any stack.

+

Once inside a project, to create a new flowchart, simply create a new file with the extension .flode. A new Flode window will appear and you can start creating and editing your chart.

+

A new file is created from either the File menu or by right-clicking on the project name line in the file tree.

+

To edit an existing .flode file, simply click on the file name to open the Flode editor.

+
+
+

Dragging in blocks

+
    +
  • Drag from the top toolbar into the chart.

  • +
+
+
+

Connecting blocks with lines

+
    +
  • Hover over a block to see the connection points

  • +
  • Move the mouse over one of the small connection point circles

  • +
  • Click and drag with the mouse to start creating the line

  • +
  • Release the mouse to move in another direction then click to change direction again or connect to another connection point

  • +
+
+
+

Resizing blocks

+
    +
  • Click on a block then drag a highlighted point

  • +
+
+
+

Zooming & centering your chart

+
    +
  • Zoom controls are in the toolbar or using the mouse wheel if you have one

  • +
+
+
+

Multi selection

+
    +
  • Press the shift key then drag the mouse to surround blocks to multi-select

  • +
  • Select one block then press the shift key then start dragging the mouse

  • +
+
+
+

Aligning blocks

+
    +
  • Multi select the blocks to align

  • +
  • Right click and select one of the alignment options

  • +
+
+
+

Undo & Redo

+
    +
  • Undo Ctrl+Z (PC) Cmd+Z (Mac)

  • +
  • Redo Shift+Ctrl+Z (PC) Shift+Cmd+Z (Mac)

  • +
+
+
+

Adding comments

+
    +
  • Click on a block then press the speech bubble icon to add a comment.

  • +
+
+
+

Video overview

+
+
+ +
+
+
+

Credits

+

Many thanks to the folks at JGraph for their flowcharting and diagramming tools.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/jeroo.html b/docs/instructors/setupcourses/resources/resourcetools/jeroo.html new file mode 100644 index 00000000..7e4c3529 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/jeroo.html @@ -0,0 +1,818 @@ + + + + + + + + + Jeroo — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Jeroo

+

Jeroo is now available in Codio as a Stack.

+

Jeroo

+
+

Warning

+

Pair Programming should not be used for Jeroo assignments.

+
+

With Codio guides you can provide instructions for an assignment side-by-side with the Jeroo environment.

+

Start by creating either a new project or assignment in your course, selecting the Jeroo stack.

+

When created, select File > New from the Codio menu and create a file with an .jev suffix for a map file or .jsc for a program file.

+

You can set up your Guide to automatically open files you want your students to use. If you don’t want the guide to take up screen space, you can set it up to collapse on open or students can simply click on the files in the file tree for them to open in Jeroo.

+

Jeroo files are not saved automatically, you must select File > Save to save your work.

+

For more information on Jeroo, click here.

+
+

Starter Pack

+

We have a Hello Jeroo in Codio Starter Pack to help you get started.

+

You can find this by either searching for “jeroo” in the starter pack area or:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/lexikon.html b/docs/instructors/setupcourses/resources/resourcetools/lexikon.html new file mode 100644 index 00000000..819257b0 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/lexikon.html @@ -0,0 +1,821 @@ + + + + + + + + + Lexikon — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Lexikon

+

The Codio Lexikon is an integrated help system that lets users lookup information on a variety of languages and topics quickly and easily. Having access to concise reference information as new topics are learned is extremely useful and saves having to search the web and separate the wheat from the chaff!

+

The Lexikon is organized into Topics. We currently have added:

+
    +
  • Crunch

  • +
  • CSS

  • +
  • HTML

  • +
  • Javascript

  • +
  • Linux

  • +
  • CyberSecurity

  • +
+

However, we can easily add coverage for any other Topic. If you are interested in additional topics, please email help@codio.com.

+
+Lexikon +
+
+

Using the Lexikon with guide content

+

To make accessing the Lexikon from your content even easier, we have a Global Option in the Guide settings that lets you specify the default topic to select. If you use this option, an icon will appear in the toolbar that will load the Lexikon window with the selected topic automatically selected.

+

Click the Settings button, then select the Global tab. You can then specify the Topic name in the available field.

+

To see what topics are available, bring up the Lexikon from the Tools menu. The available topics are shown in the dropdown list.

+

Once you have specified a Lexikon topic, the student will see an icon in the Guide toolbar. When they press this, the Lexikon will appear in the same panel as the Guide with the correct topic automatically selected.

+
+Lexikon Guides +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/pencilcode.html b/docs/instructors/setupcourses/resources/resourcetools/pencilcode.html new file mode 100644 index 00000000..474b1a23 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/pencilcode.html @@ -0,0 +1,817 @@ + + + + + + + + + Pencil Code — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pencil Code

+

Pencil Code is now available in Codio installing from Tools->Install Software

+

Pencil Code

+
+

Warning

+

Pair Programming should not be used for Pencil Code assignments.

+
+

With Codio guides you can provide instructions for an assignment side-by-side with the Pencil Code environment.

+

Start by creating either a new project or assignment in your course and selecting the Pencilcode Alpha stack.

+

To create an empty Pencil Code project in Codio, select File > New from the Codio menu and create a file with an .pencilcode suffix.

+

You can set up your Guide to automatically open files you want your students to use. If you don’t want the guide to take up screen space, you can set it up to collapse on open or students can simply click on the files in the file tree for them to open in Pencil Code.

+

For more information on Pencil Code, click here.

+
+

Starter Pack

+

We have a Hello Pencil Code in Codio Starter Pack to help you get started.

+

You can find this by either searching for “pencilcode” in the starter pack area or:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/processing-and-p5.html b/docs/instructors/setupcourses/resources/resourcetools/processing-and-p5.html new file mode 100644 index 00000000..4b79cba6 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/processing-and-p5.html @@ -0,0 +1,824 @@ + + + + + + + + + Processing and p5 — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Processing and p5

+

Processing has cultivated a passionate following among the visual arts and education communities over the last sixteen years. Processing is based on Java but simplifies the syntax by not requiring that everything be an object. Some educators use Processing as a gradual introduction to Java. Students can focus on syntax and types while not having to worry about objects and methods. Also, Processing’s output is visual in nature. This makes the language well-suited for beginners.

+

p5 is a JavaScript library for creative coding that focuses on making coding accessible for beginners, artists, designers, etc. p5.js has a full set of drawing functionality and more.

+
+
p5 example +
+
+

Warning

+

Pair Programming should not be used for Processing/p5 assignments.

+
+

We have a two starter packs available to help you get started:

+
    +
  1. Hello Processing/p5 in Codio Starter Pack: You can find this by either searching for “processing/p5” in the starter pack area or:

  2. +
+ +
    +
  1. Processing Demo Starter Pack: You can find this by either searching for “processing” in the starter pack area or:

  2. +
+ +

Processing is also available in Codio as a Stack: +- For Codio.com users, click here +- For Codio.co.uk users, click here

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/pyret.html b/docs/instructors/setupcourses/resources/resourcetools/pyret.html new file mode 100644 index 00000000..cab4648e --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/pyret.html @@ -0,0 +1,807 @@ + + + + + + + + + Pyret — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pyret

+

Pyret is now available in Codio.

+

Pyret

+
+

Warning

+

Pair Programming should not be used for Pyret assignments.

+
+

With Codio guides you can provide instructions for an assignment side-by-side with the Pyret environment.

+

To create an empty Pyret project in Codio, select File > New from the Codio menu and create a file with an .arr suffix.

+

You can set up your Guide to automatically open files you want your students to use. If you don’t want the guide to take up screen space, you can set it up to collapse on open or students can simply click on the files in the file tree for them to open in Pyret.

+

For more information on Pyret, click here.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/scratch.html b/docs/instructors/setupcourses/resources/resourcetools/scratch.html new file mode 100644 index 00000000..06b87a8b --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/scratch.html @@ -0,0 +1,826 @@ + + + + + + + + + Scratch — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Scratch

+

The desktop version of Scratch is available in Codio. This version of Scratch has all the features of the online version but because it is the standalone version, students won’t be able to view or comment on Scratch community projects.

+
+

Warning

+

Pair Programming should not be used for Scratch assignments.

+
+

With Codio guides you can provide instructions for an assignment side-by-side with the Scratch development environment.

+

first project

+

To create an empty Scratch project in Codio, select File > New from the Codio menu and create a file with an .sb3 suffix. You can set up +your Guide to automatically open the Scratch file you want your students to use. If you don’t want the guide to take up screen +space, you can set it up to collapse on open.

+

To use a project you have already created on the web version of Scratch, open the project in Scratch and select File > Save to your computer then in Codio select File > Upload and open the Scratch file you downloaded.

+

Scratch files are saved automatically.

+

Get started by clicking on Tutorials in the Scratch menu area. For more information see Scratch.

+
+

Scratch Backpack

+

The Scratch Backpack may be used to store sprites or blocks of code that can then used in other Scratch files or other projects. There is a size limit of 30Mb for each item added to the backpack.

+
+
Scratch Backpack +
+
+

Starter Pack

+

We also have a Hello Codio in Scratch Starter Pack to help you get started.

+

You can find this by either searching for ‘Scratch’ in the starter pack area or:

+ +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/tkinter.html b/docs/instructors/setupcourses/resources/resourcetools/tkinter.html new file mode 100644 index 00000000..020ce8ae --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/tkinter.html @@ -0,0 +1,901 @@ + + + + + + + + + Tkinter — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Tkinter

+

Important: Tkinter is used to build User Interfaces for Python development. For those following the OCR GCSE, this is not a requirement. For more advanced students, we recommend that you use HTML, CSS and Javascript for building modern front-end UIs that have far superior workplace relevance than Python+Tkinter.

+

There are a number of teachers who use the Tkinter UI library for Python. Tkinter normally relies on a local PC with a graphics card. Codio, being Cloud based, does not not have graphics cards. Nevertheless, we have implemented a fully functional solution that works within a browser and in the Cloud.

+

This page describes the various ways you can get Tkinter up and running.

+
    +
  • Starter Pack : Clean - gives you a clean Tkinter project with preconfigured menu buttons for running your Python file and the viewer.

  • +
  • Starter Pack : Widgets - gives you a set of demo widgets you can play with.

  • +
  • Stack - gives you an empty project with tkinter ready to run.

  • +
  • From scratch - describes how to make any existing Codio project ready to run Tkinter that was not initially set up to run Tkinter.

  • +
+
+

Starter Pack : Clean

+

Perhaps the best place for most users to start is the TKinter Clean Starter Pack. This gives you a clean project with a simple demo Python file to play with.

+

Here is a video that runs you through the entire process.

+
+
+ +
+

From the main dashboard, select Starter Packs on the left, then the Certified tab at the top of the main page.

+

Tkinter Pack

+

Search for tkinter in the search field then select the TKinter Clean pack as shown above. You will be taken to the new project screen where you can enter a name for your project. Finally, press the Create button at the bottom of the page and a new project will be created.

+

Once it is loaded, follow these steps to see the demo file working.

+
    +
  1. Open up demo.py in the file tree.

  2. +
  3. In the Codio menu, press the Start Current button (the one with the rocket icon next to it). This will run your Python file. It opens a new terminal window, which you should leave open.

  4. +
  5. The right most Codio menu item should be Viewer. Press this to run the viewer. It will take a few seconds to load.

  6. +
+

If you change your Python code, you will need to close the terminal window and then press the Start Current button again to reload it. You do not need to reload the Viewer, which will automatically reconnect when you rerun your Python file.

+
+
+

Starter Pack - Widgets

+

This gives you a complete set of demo widgets. From the main dashboard, select Starter Packs on the left, then the Certified tab at the top of the main page.

+

Tkinter Widgets

+

Search for tkinter in the search field then select the TKinter Widgets pack as shown above. You will be taken to the new project screen where you can enter a name for your project. Finally, press the Create button at the bottom of the page and a new project will be created.

+
+
+
+

TKinter Widgets

+

This Pack contains a set of widget demo files that you can play with.

+

Once your project opens, you can quickly play with this in one of 2 ways using the Rocket menu item. This is the Codio menu item with a rocket next to it.

+
+

Full Widget Demo

+
    +
  • In the Codio menu, select ‘Start widget.py’.

  • +
  • From the neighbouring menu item, press View widget demo.

  • +
+
+
+

Individual python file

+
    +
  • Open a python file in the file tree.

  • +
  • From the neighbouring menu item, press View widget demo.

  • +
+
+
+

Stack

+

If you want to create a completely empty Codio project that is Tkinter ready, then go to the Stacks menu item in the main dashboard.

+
    +
  1. Click on the Certified tab at the top

  2. +
  3. then search for tkinter

  4. +
  5. Finally, select the stack

  6. +
  7. after which you will be taken to the new project screen. Enter a project name then press the Create button at the bottom of the page and a new project will be created.

  8. +
+

Tkinter Stack

+

This Stack will not give you any preconfigured buttons (see the above Starter Pack: Clean for this). You can now create your Python files and run Tkinter. Here are some tips on how to do this.

+
+
+
+

Running the Python file

+

To run a Python file you will need to use the Terminal or configure you own Codio button shortcut. To use the terminal, open a new Terminal from the Tools->Terminal menu item. Then make sure you are in the correct folder and type python3 mypythonfile.py.

+

Once this is running, do not close the terminal window or you will terminate the Python process. Go to the right most Codio menu and from the dropdown, select Box URL. This will open up the viewer.

+

For information on how to set up your own Codio menu buttons, click here.

+
+

From scratch

+

For those of you who want to add Tkinter support to an existing Codio project, you should follow the steps below. Adding the XServer component will add support for any application that writes to the screen.

+

Xserver Install

+
    +
  • Open the Install Software screen from the Tools->Install Software menu.

  • +
  • Type x server into the search box.

  • +
  • Press the Install button to install the XServer component.

  • +
  • When the installation has completed (This can take some time, so be patient), Restart the box

  • +
+

We would recommend that you configure your .codio file to have an option to start the viewer. This is described here. You should either overwrite the entire contents of this file with the content shown below, or if you already have a .codio file with contents you want to keep, just add the line with the Viewer entry you can see below into the preview section.

+
{
+// Configure your Run and Preview buttons here.
+
+// Run button configuration
+"commands": {
+::
+
+    "Start Current": "python3 {{filename}}"
+
+},
+
+// Preview button configuration
+"preview": {
+::
+
+    "Viewer": "https://{{domain}}:9500/"
+
+}
+}
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/resources/resourcetools/turtle.html b/docs/instructors/setupcourses/resources/resourcetools/turtle.html new file mode 100644 index 00000000..0222bf10 --- /dev/null +++ b/docs/instructors/setupcourses/resources/resourcetools/turtle.html @@ -0,0 +1,876 @@ + + + + + + + + + Turtle — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Turtle

+

With Turtle Graphics, students can produce animations and graphical output. Lines are drawn following the turtle movement.

+
+
turtle graphics +
+
+

In Python

+
+

Starter Pack

+

We have a Turtle Graphics in Python Starter Pack to help you get started.

+

You can find this by either searching for “turtle” in the starter pack area or:

+ +
+
+

Manual Set up

+

Turtle is pre-installed in the Python library, so manual installation is simple:

+
    +
  1. Start by creating either a new project or assignment in your course and selecting the Python Trajectory Stack.

  2. +
  3. Select Tools at the top and click Install software. Search for X server and select install.

  4. +
  5. Once the software has downloaded, go to Project > Restart Box in the menu.

  6. +
  7. Create two files:

  8. +
+
    +
  • .py: This is the student code file.

  • +
  • bg.sh: This is the bash script.

  • +
+
    +
  1. Within the bg.sh file, write the following bash script:

  2. +
+
#!/bin/bash
+set -e
+set -o pipefail
+. /etc/profile.d/codio-xserver.sh
+$1 -m py_compile $2
+nohup $@ > /dev/null 2>&1&
+
+
+
    +
  1. Set up your page panels by selecting the settings wrench from inside your Guide Editor. Select 3-panels without tree, and then navigate to Open Tabs.

  2. +
  3. Under Open Tabs, drag in your .py file and position it in panel 0.

  4. +
  5. Press the Add Tab button and specify the type as Preview. Paste the following in the URL field: https://{{domain3050}}/ Position this in panel 1.

  6. +
  7. Select Save and close settings.

  8. +
  9. The last thing you need to do is set up a Try It button so that once code is written in the code file, it can be executed in the server. In the Guide Editor, write the following: {Try it}(bash .guides/bg.sh python3 file.py)

    +
    +

    Note

    +

    You need to import the turtle library with import turtle as the first line of your code and end your code by calling turtle.mainloop().

    +
    +
  10. +
  11. Turtle automatically chooses the window position. To configure your own behavior create turtle.cfg file in the working directory with content defines window position.

  12. +
+

Example:

+
leftright=0
+topbottom=0
+width=1.0
+height=1.0
+
+
+
+
+
+

In Java

+

We have a Turtle Graphics in Java Starter Pack to help you get started.

+

You can find this by either searching for “turtle” in the starter pack area or:

+ +
+
+

In C++

+

We have a Turtle Graphics in C++ Starter Pack to help you get started.

+

You can find this by either searching for “turtle” in the starter pack area or:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/search-course.html b/docs/instructors/setupcourses/search-course.html new file mode 100644 index 00000000..53a52313 --- /dev/null +++ b/docs/instructors/setupcourses/search-course.html @@ -0,0 +1,827 @@ + + + + + + + + + Search and Order Courses — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Search and Order Courses

+

Courses are displayed in groups based on their creation date. The most recent course is displayed first. Courses are grouped as follows:

+
    +
  • Sep-Dec - Autumn

  • +
  • Jan-May - Spring

  • +
  • Jun-Aug - Summer

  • +
+
+

Note

+

The season dividers can be turned off for the organization if required. See Set Users Dashboard

+
+
+

My and All tabs

+

The My tab will show all courses in which you are a Teacher. This can be useful where you are in the Owners group and do not wish to see all the courses in the organization.

+

If you wish to see all the courses in the organization go to the All tab.

+
+
+

Sort courses

+

You can sort the courses within the group by Name, Created Date, Student Count, or Start Date.

+Sort Courses +
+
+

Search course

+

If you have a large number of courses, you can search by Name, Created Date, Student Count, or Start Date. Choose the sort option and then simply start typing your search criteria in the Search box. Codio searches all course names and filters your list accordingly.

+Search +

You can use this feature to more easily view just courses you teach. Search for your username and Add as Tab as described below.

+
+
+

Add as Tab

+

To save your search parameters as a tab, click Add as Tab. Your search is then saved as a tab so you can quickly perform the same search again.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/share-course.html b/docs/instructors/setupcourses/share-course.html new file mode 100644 index 00000000..993476ba --- /dev/null +++ b/docs/instructors/setupcourses/share-course.html @@ -0,0 +1,815 @@ + + + + + + + + + Share Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Share Course

+

To share your course with others, follow these steps:

+
    +
  1. On the Courses page, select the course and then click the Course Details tab.

  2. +
  3. In the Course Management section, toggle the Course share code button to On and a code is generated.

    +Create Share Code +
  4. +
  5. Click the Copy to Clipboard icon next to the code to share it with others.

  6. +
+

To manage access to the course code, toggle the Course share code button to Off after you have shared the code, or click Regenerate to create a new code. When you regenerate a new code, the old code is disabled and can no longer be used.

+

When enabled you can also manage IP Consent by clicking the Manage IP Consent link offered.

+Manage IP consent +

You should first create the content that you wish to display. You enter your text in the lower portion of the screen. You can use markdown or HTML to format your text. If you are not familiar with markdown, here is a reference for markdown:

+ +

Press the Save Draft button to save your changes and continue editing later.

+

You can also Preview your changes to see how the rendered output appears.

+

When you are happy you can then publish and then enable IP consent that will then require teachers to accept your terms

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/view-student-username.html b/docs/instructors/setupcourses/view-student-username.html new file mode 100644 index 00000000..ef9a5a79 --- /dev/null +++ b/docs/instructors/setupcourses/view-student-username.html @@ -0,0 +1,805 @@ + + + + + + + + + View Student Usernames — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

View Student Usernames

+

Students can log in with their username if they can’t remember their email address. If they have forgotten their username, organization owners can find their username on the Members tab on the Organization dashboard.

+
    +
  1. Click your profile icon in the lower left corner of the screen.

  2. +
  3. Under Organizations, click the link for the organization you want to view.

  4. +
  5. On the Members tab, click Students and find the student’s name in the list.

  6. +
  7. Provide the student with their username.

  8. +
+

Alternatively, you can obtain the student’s username from the browser when you access the students assignments.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/setupcourses/virtualmachine.html b/docs/instructors/setupcourses/virtualmachine.html new file mode 100644 index 00000000..c2e4a5d3 --- /dev/null +++ b/docs/instructors/setupcourses/virtualmachine.html @@ -0,0 +1,955 @@ + + + + + + + + + Virtual Machines — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Virtual Machines

+

Codio supports Windows and Ubuntu OS in Virtual Machine boxes. To enable this for your organization, send an email to help@codio.com with approximate details of the number of students who will require access to computed VMs.

+
+

Note

+

Codio is not responsible for licensing issues in regard to any software you install to use.

+
+

The virtual machines can support 1, 4, 8 or 16Gb memory. VM’s are enabled for the organization and then set up at the Course level. All assignments in the course can utilize the virtual machines boxes, so we would recommend setting up a new course for those assignments that require them. All assignments in the course would use the same VM Stack.

+

Virtual machines are not available for individual projects (ie when created in My Projects area).

+
+

Please note: we have plans to develop this feature in the future but if you have ideas/suggestions please raise in our Feedback area

+
+

When virtual machines have been enabled for your organization, follow these steps:

+
+

Enabling VM for the Course

+
    +
  • On the Courses page, select the course and then click the Course Details tab.

  • +
  • In the Virtual Machine section, toggle the Enable Virtual Machine button to On.

  • +
  • Select Operating System (currently supported: Windows & Ubuntu).

  • +
  • Select Memory to allocate the memory required.

  • +
  • Select Stack - select either Windows Codio Ami or Ubuntu Codio Ami depending on the OS type selected above but once you have published your own VM Stack (see below), you will be able to select those as required.

  • +
  • Save the changes.

  • +
+
+
+

Setting up the assignment(s)

+
    +
  • Create an assignment and open the working copy in the usual manner.

  • +
  • Go to Tools>Virtual Machine to open the VM. If using Ubuntu OS you can use open ssh to open the same instance of the main ubuntu vm if you’d prefer to install/set up your VM that way. You can have both options active at the same time.

  • +
+
+

Note

+

It takes some time for the VM to activate and start.

+
+
    +
  • Once the VM has started you can setup or install any items you need. If using Ubuntu OS you can also use Tools>Virtual Machine>open ssh to be able to open the same instance of the main ubuntu vm if you’d prefer to install/set up your VM that way. You can have both options active at the same time

  • +
  • Once you have completed setting up your environment and tested everything select Tools>Virtual Machine>Publish from the menu to publish the changes as an updated VM stack assignment providing your own name for the VM Stack.

  • +
+
+

Note

+

It can take around 10 minutes for the new stack to be created and available for use.

+
+
    +
  • When the stack has been fully published go to Courses>Virtual Machine>Stack and select the newly published stack to make it available to students for their assignment(s).

  • +
  • Save the changes.

  • +
  • Return to the assignment in Edit Assignments and publish the assignment either from the publish button in the upper right corner or from Education>Publish Assignment to make the assignment accessible to your students.

  • +
+
+

Note

+

Publishing the assignment should be done as the last step to avoid students starting the assignments before the required VM Stack is saved to the course.

+
+
+
+

Updating the VM Stack after students have started the assignment(s)

+

Students that have already started working before a new/updated VM stack has been published will need to reset the Virtual Machine in their assignment(s) to use the updated VM stack, restart the VM if it does not restart itself. There are buttons available for this purpose in the VM tab.

+
+

Note

+

Reset and restart for students can take a substantial period of time (around 20mins on average) so we recommend that you fully test the VM stack you create before making it available to students.

+
+
+
+

Updating the assignment content after initial publish

+

Any changes to the actual assignment (ie in Guides or the file structure) only require the assignment to be published in the usual manner either from the publish button in the upper right corner or from Education>Publish Assignment menu item..

+
+
+

Automatically starting/opening Virtual Machine

+

You can automatically start/open the Virtual Machine for students using Open tab setting for VM or direct them to Tools>Virtual Machine>Open to start themselves.

+
+
+

Pair Programming

+

Pair Programming is not supported for Virtual Machines.

+
+
+

Interacting with guides and Codio file system

+

You can interact with Virtual Machine using commands that can run from the Terminal

+
+VM Commands +
+

or from a Custom Guide Button

+
{Try it | terminal}(codio-vm help)
+
+
+

The working directories for:

+
    +
  • Codio - “/home/codio/workspace”

  • +
  • Windows Virtual Machine - “C:\”

  • +
  • Ubuntu Virtual Machine - “/home/ubuntu”

  • +
+

Following are some example of commands that can be used to interact with Virtual Machine:

+
    +
  • codio-vm help - This command gives you a brief introduction about many commands that can be used to interact with Virtual Machine.

  • +
  • codio-vm upload - This command is used to upload a file from Codio filetree to Virtual Machine.

    +
    +

    Windows example:

    +
    codio-vm upload "/home/codio/workspace/local_file.sh" "C:\remote_file.sh"
    +
    +
    +

    Running above command will upload ‘local_file.sh’ file present in your Codio filetree into the Virtual Machine as ‘remote_file.sh’.

    +

    Same Command in Ubuntu would be:

    +
    codio-vm upload "/home/codio/workspace/local_file.sh" "/home/ubuntu/remote_file.sh"
    +
    +
    +

    Similar to file, you can also upload the Folder

    +

    In Windows:

    +
    codio-vm upload "/home/codio/workspace/local_folder" "C:\remote_folder"
    +
    +
    +

    In Ubuntu:

    +
    codio-vm upload "/home/codio/workspace/local_folder" "/home/ubuntu/remote_folder"
    +
    +
    +
    +
  • +
  • codio-vm download - This command is used to download a file from Virtual Machine into your Codio filetree.

    +
    +

    Windows example:

    +
    codio-vm download "C:\remote_file.sh" "/home/codio/workspace/local_file.sh"
    +
    +
    +

    Running above command will download ‘remote_file.sh’ file from your Virtual Machine into your Codio filetree and saves it as ‘local_file.sh’.

    +

    Same Command in Ubuntu would be:

    +
    codio-vm download "/home/ubuntu/remote_file.sh" "/home/codio/workspace/local_file.sh"
    +
    +
    +

    Similar to file, you can also download the Folder from your Virtual Machine

    +

    In Windows:

    +
    codio-vm download "C:\remote_folder" /home/codio/workspace/local_folder"
    +
    +
    +

    In Ubuntu:

    +
    codio-vm download "/home/ubuntu/remote_folder" /home/codio/workspace/local_folder"
    +
    +
    +
    +
  • +
  • codio-vm start - This command is used to start the Virtual Machine.

  • +
  • codio-vm restart - This command is used to restart the Virtual Machine.

  • +
  • codio-vm terminate - This command is used to reset the Virtual Machine.

  • +
  • codio-vm status - This command will return the current state of Virtual Machine. The returned value will be one of RUNNING, INACTIVE, STARTING, STOPPING.

  • +
  • codio-vm get-ip - This command will return the IP address of Virtual Machine.

  • +
  • codio-vm get-host-name - This command will return the Host Name of Virtual Machine.

  • +
  • codio-vm exec/codio-vm exec-async - This command is used to execute a command on Virtual Machine.

    +
    +

    For example

    +
    codio-vm exec mkdir -p “my_folder”
    +
    +
    +

    Running above command will create “my_folder” folder in the working directories of your Virtual Machine.

    +

    You can also open the Chrome browser using this command

    +
    codio-vm exec start chrome
    +
    +
    +

    Can also open a particular URL in the Chrome browser

    +
    codio-vm exec start chrome /incognito  https://codio.com
    +
    +
    +
    +
  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/addstudents.html b/docs/instructors/teaching/addstudents.html new file mode 100644 index 00000000..255f4002 --- /dev/null +++ b/docs/instructors/teaching/addstudents.html @@ -0,0 +1,336 @@ + + + + + + + + + Inviting students to your course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Inviting students to your course

+

See Add or Remove Students in a Course

+
+

Note

+

When integrating with an external system, you do not need to add/invite students or teachers to your course. When users access an assignment from the system mapped to Codio, they will automatically be added to the Codio course. The features to invite students into a Codio course directly are not enabled when your course is connected to an external system such as an LMS.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/behaviorinsights.html b/docs/instructors/teaching/behaviorinsights.html new file mode 100644 index 00000000..a4dd7994 --- /dev/null +++ b/docs/instructors/teaching/behaviorinsights.html @@ -0,0 +1,457 @@ + + + + + + + + + Behavior Insights — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Behavior Insights

+

All teachers have access to Codio’s Behavior Insights which combines different IDE logs into understandable measures to detect cases of potential plagiarism.

+
+

Enable Behavior Insights for your Course

+

Behavior Insights is enabled at the course-level. Navigate to the Courses page and select the course to open it. Then choose Basic Settings under Grading in the left hand menu.

+
+
Select: Course, Basic Settings, Enable behavioral insights, Save Changes +
+

Toggle on the Enable Behavioral Insights setting and click Save Changes.

+
+
+

Configure Behavior Insights Options

+

You can toggle the availability of individual Behavior Insights tiles and change the minimum and maximum values for a particular option. Values less than or equal to the minimum or greater than or equal to the maximum will trigger an indicator and show up in the Behavior column for that respective student.

+
    +
  • +
    Time Spent (minutes)

    Codio tracks the amount of time the students spent working on the assignment in our online IDE.

    +
    +
    +
      +
    • You can set the minimum value in minutes, and students who spent less than or equal to that will trigger an indicator flagging potential plagiarism concerns.

    • +
    • You can set the maximum value in minutes, and students who spent greater than or equal to the maximum will trigger an indicator flagging potential student struggle.

    • +
    +
    +Toggle to enable/disable minimum and maximum thresholds on time spent and enter the threshold value in minutes. +
    +
    +
    +
  • +
  • +
    Rate of Edits (Characters per Second)

    Based on thousands of student submissions, we determined that submissions created with a pace of more than 4 characters edited (inserted or deleted) per second had a high likelihood of being plagiarized.

    +
    +
    +
      +
    • You can set the minimum value in characters per second, and students who edited at a rate less than or equal to the minimum will trigger an indicator flagging potential student struggle.

    • +
    • You can set the maximum value in characters per second, and students who edited at a rate greater than or equal to the maximum will trigger an indicator flagging potential plagiarism concerns.

    • +
    +
    +Toggle to enable/disable minimum and maximum thresholds on rate of edits and enter the threshold value in characters per second. +
    +
    +
    +
  • +
  • +
    Coding vs Debugging Time

    You can monitor the percent of time spent students spent in an error state (debugging) vs a non-error state (coding). In the context of detecting plagiarism, it would be odd for students to never have errors or spend no time trying to resolve them. Based on thousands of student submissions, we determined a generalized threshold of less then 4% of the time in an error state (i.e. “debugging”) had a high likelihood of being plagiarized.

    +
    +
    +
      +
    • You can set the minimum value as a percent, and students who spent less than or equal to the minimum time debugging will trigger an indicator flagging potential plagiarism concerns.

    • +
    • You can set the maximum value as a percent, and students who spent greater than or equal to the maximum time debugging will trigger an indicator flagging potential student struggle.

    • +
    +
    +Toggle to enable/disable minimum and maximum thresholds on coding vs debugging time and enter the threshold value as a percent. +
    +
    +
    +
  • +
  • +
    Insertions vs Deletions

    You can monitor the percent of characters inserted vs characters deleted across assignment code files for the student.

    +
    +
    +
      +
    • You can set the minimum value as a percent, and students who deleted less than or equal to the minimum will trigger an indicator flagging potential plagiarism concerns.

    • +
    • You can set the maximum value as a percent, and students who deleted greater than or equal to the maximum will trigger an indicator flagging potential student struggle.

    • +
    +
    +Toggle to enable/disable minimum and maximum thresholds on insertions vs deletions and enter the threshold value as a percent. +
    +
    +
    +
  • +
  • +
    External Pastes

    You can monitor each occurrence of a paste that did not come from an assignment code file or the Guide.

    +
    +
    +
      +
    • You can set the minimum number of lines of code that count as an occurrence of an external paste. The smallest accepted value is 2 lines of code, meaning that when students paste 2 or more lines of code, Codio counts that as an external paste occurrence. Students often paste code that is one line or less (e.g. import statement, regular expression from a testing website, symbols they cannot find on their keyboard such as |) which is not captured by this dimension due to the lower chance of plagiarism concern. For more fine-grained information on a student’s coding process which would show these smaller pastes, see Code Playback.

    • +
    • You can set the maximum number of paste occurrences, and students who had greater than or equal to the number of paste occurrences will trigger an indicator potentially indicating plagiarism concerns.

    • +
    +
    +Toggle to enable/disable external paste threshold and enter the threshold values. +
    +
    +
    +
  • +
+
+

Note

+

For reference, the values in the images above are Codio’s default values.

+
+
+
+

Viewing Behavior Insights

+

When you go to the Student progress page of an assignment in that course, you will now see a Behavior column and be able to filter and sort based on the behavior indicator.

+
+
A Behavior column on the assignment progress dashboard can be filtered and sorted +
+
+

Note

+

Behavior Insights will only appear once an assignment is marked as complete. A lack of indicator means no behavior thresholds have been met - the student has no indications of the specified behavior.

+
+

Click on an indicator under the Behavior column to see the Behavior Insights Dashboard.

+
+
Five tiles showing numeric metrics with text descriptions under each +
+

There will be between 1 and 5 tiles displayed. Tiles are only displayed if the student value is outside of a given threshold (indicated by dashed lines or red on the tile). Each tile has a textual description directly below it to help teachers interpret the numerical date presented in graphical form on the tile.

+

Click the Ignore button at the bottom of the dashboard to remove the behavior indicator for that student on that assignment. This action cannot be undone.

+
+
+

Behavioral Player

+

You can also view students activity for all files in the assignment going to Education > Behavioral Player menu option.

+
+
+

History of External Pastes and CodePlayback

+

If you click on a bar in the History of External Pastes tile, you will be presented with that paste in Codio’s Code Playback feature.

+
+
Code playback with code changes on top and a timeline underneath with file name and pastes indicated +
+

The top pane shows the contents of the modified file with the change higlighted in green (inserted characters) or red (deleted characters).

+

The timeline at the bottom indicates all detected pastes, and clicking on the paste will bring you to that point in the timeline.

+
+
+

No Data

+

Behavior Insights is built on Codio’s IDE instrumentation. This means if your students work on their local IDE and simply upload their work to Codio, or you have them working on a 3rd party IDE inside Codio (e.g. VSCode, Jupyter, RStudio, vim, nano), you might see that some tiles are being shown to indicate lack of data:

+
+
No data displayed on Coding vs Debugging and Insertions vs Deletions tiles +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/commenting.html b/docs/instructors/teaching/commenting.html new file mode 100644 index 00000000..034b9821 --- /dev/null +++ b/docs/instructors/teaching/commenting.html @@ -0,0 +1,342 @@ + + + + + + + + + Code Commenting — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Commenting

+

Teachers can also comment on code within students files.

+

To do this, open the students project and open the file. Hover over the left hand side of the gutter bar and click the + to open the comment window and enter the comments as required. This comment will be visible to the student when they next view the file

+
+
Single-line comments on the left files and a multi-line comment on the file on the right +
+

Multiple lines of code can be selected and the teacher can also edit/delete or add additional comments (from the 3 dots to the right of the comment window when the comment is saved) if required.

+

When actioned by the student, the comment will be marked as resolved but will still be available for review in the Education -> Code Comments menu item or from the Guides settings area.

+
+
Guides Code Comments +
+

Students can also go to this to see all comments and click to open the neccessary file.

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/cursor.html b/docs/instructors/teaching/cursor.html new file mode 100644 index 00000000..ee2eeb9c --- /dev/null +++ b/docs/instructors/teaching/cursor.html @@ -0,0 +1,338 @@ + + + + + + + + + Cursor Presence — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Cursor Presence

+

When accessing a students assignment, all active users in a project/assignment will be shown with a color in an icon showing in the menu bar when files are being accessed/edited

+

Clicking on the icon will change focus to show what that user is currently editing highlighted in that color and will show the users cursor. +Hovering over the icon will show the filename and line currently being edited.

+
+
Cursor Presence +
+

This can be very useful if a student needs assistance as you can see what they are doing, real time and if you need to demonstrate something to them, they can see what you are doing

+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/grading/grade-freetext.html b/docs/instructors/teaching/grading/grade-freetext.html new file mode 100644 index 00000000..1c0275ec --- /dev/null +++ b/docs/instructors/teaching/grading/grade-freetext.html @@ -0,0 +1,363 @@ + + + + + + + + + Grading Free Text Questions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Grading Free Text Questions

+

Free text questions normally require a manual grading process. Follow these steps to grade free text questions:

+
    +
  1. Open the assignment and view the list of students.

    +Student List +
  2. +
  3. Click a student name to view the list of all assessments for that student within the assignment. Free text questions are denoted by the icon highlighted in the following screenshot.

  4. +
+
+
Student Assessments +

If a student has started to answer a question but has not yet submitted it, DRAFT is shown next to it. Once the answer is submitted, GRADE is shown next to it indicating that the question has been submitted and is ready to be graded. If a course deadline has been reached, you can grade questions that are set to DRAFT and questions with partial answers.

+
+

You can also see the date and time for each submitted answer as well as the date that the assignment was marked as complete by the student.

+
+

Partial point assessments that do not have full points awarded are indicated by the following icon:

+Partial Point Icon +
+
    +
  1. Review the assignment and answers submitted by the student. Use the following information to enter your grade.

  2. +
+
+
    +
  • Partial point rubric - If an answer allows partial points, a rubric is displayed to allow you to dynamically deduct points from the maximum score. You can add an item, change an item weight, or remove an item. The changes are applied for all students in the assignment, including already graded student assignments. The rubric is dynamic for each assignment, and every new assignment starts with an empty rubric.

  • +
+
+
Partial Point Rubric +

Every rubric item is includes the item weight and item name. If an item or multiple items are selected, the weight is deducted from student’s score (cannot be a negative score).

+
+
    +
  • Points adjust - The Points adjust field allows the you to manually adjust the student’s total score without having to edit the rubric.

  • +
  • Comments - Use the Comments text box to provided feedback to the student.

  • +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/grading/grading.html b/docs/instructors/teaching/grading/grading.html new file mode 100644 index 00000000..6f5fcee7 --- /dev/null +++ b/docs/instructors/teaching/grading/grading.html @@ -0,0 +1,431 @@ + + + + + + + + + Grading — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Grading

+
+
+

Codio offers the following grading features:

+
    +
  • Assign Grade - Manually review student projects and assign a grade.

  • +
  • Grading Moderation - Other instructors review grades already assigned to monitor grading consistency.

  • +
  • Grading Rubric - A two-dimensional grid that provides grading guidance for manually assessing a coding project.

  • +
  • LMS Gradebook Synchronization - Ensures that when grades are released, the data is automatically passed to any LTI enabled LMS platform such as Moodle, Blackboard and Canvas.

  • +
+
+

Grading process

+

Once students have completed their assignments, they notify the teacher by using the Education > Mark as Completed menu in the IDE. Instructors can also mark the assignment as complete or change the status to incomplete. Follow these steps to view and grade the assignments:

+
    +
  1. Open the assignment and view the students that have a green check mark to the left of their name. This indicates that they have marked as complete.

  2. +
+
+
Grading Access +
+
    +
  1. Optionally, click the Filter drop-down and choose one of the following options to filter the list of students based on the status of the assignments:

  2. +
+
+
Filtering +
    +
  • Any Status

  • +
  • Started

  • +
  • Not Started

  • +
  • Has Final Grade

  • +
  • No Final Grade

  • +
  • Completed

  • +
  • Uncompleted

  • +
  • Needs Grading

  • +
+
+
    +
  1. Click the Options menu and choose Open the Project to start grading the student’s assignment.

  2. +
  3. Use one of the following methods to assign the grade:

  4. +
+
+
    +
  • In the IDE, click the Education menu. You must have a student project open in the IDE.

  • +
  • On the Course dashboard, click the Grade icon > Add Grade and complete the fields. You can also add comments.

  • +
+Assign Grade +
+
+
+

Grading Queue

+

Information on all students that require grading for all assignments in the course can be seen from the course Queue area in the Grading section.

+

By default, the list is sorted by submission time, with the oldest submission at the top but other filters can be set as required.

+
+
Grading Queue +
+
    +
  • Assignment Name

  • +
  • Student Name

  • +
  • Grade

  • +
  • Points

  • +
  • Graded

  • +
  • Answered

  • +
  • Time

  • +
+
+
+

Override Grade

+

If the students assignment has already been graded, another teacher in the course can click Override Grade to manually change the grade with additional comments.

+

The Override Grade feature can also be used to provide comments at the assignment level. If you do not wish to alter the numeric grade when adding assignment level comments, re-enter it under Grade, add your comment and then select Done.

+
+
Assignment Comments +
+
+
+

Removing Penalties

+

If required you can remove penalties currently applied to the students grade.

+
+
Remove Penalties +
+
+
+

Anonymous grading

+

If required, anonymous grading can be set for the course so students cannot see the names of the teachers who graded their work. The teacher names are hidden in the shared feedback, project, and dashboard.

+

To enable anonymous grading, follow these steps:

+
    +
  1. Open the course and click the Grading/Basic Settings tab.

  2. +
  3. Toggle Anonymous Grading to enable it and then click Save Changes.

  4. +
+
+
+

Code Commenting

+

You can add comments to the code so that students can see them when they open the file. To comment on the code, follow these steps:

+
    +
  1. Open the project and then open the file.

  2. +
  3. Hover over the left-hand side of the gutter bar and click + to open the comment window.

  4. +
  5. Enter your comments. You can select multiple lines of code, edit, and delete lines of code.

    +Commenting +
  6. +
+

Students can then view the comments from the Education > Code Comments menu. They can also open the file from the comments.

+Code Comments +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/grading/nbgrader.html b/docs/instructors/teaching/grading/nbgrader.html new file mode 100644 index 00000000..6fa78d43 --- /dev/null +++ b/docs/instructors/teaching/grading/nbgrader.html @@ -0,0 +1,480 @@ + + + + + + + + + Auto-Grade with nbgrader — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Auto-Grade with nbgrader

+

Codio supports Jupyter notebook auto-grading functionality through nbgrader. Assignments are created with Jupyter notebook and when the assignment is published to a course, the release version is created for the student. If the assignment is updated and republished, it overwrites all tests and read-only cells with the new version and the release version for the students is updated. If you change the jupyter version or nbgrader version or any other nbgrader metadata in the assignment, it will not reflect automatically for students who have already started the assignment, instructor need to reset their assignment to reflect those changes. Students who haven’t started the assignment will receive the updated version of assignment.

+

When a student submits the assignment by marking the assignment as complete, the assignment is automatically graded. However, manual grading is also possible if desired.

+

User configurations for nbgrader can be stored in a nbgrader_config.py or in .codio-jupyter file. A .codio-jupyter file must be present in a project to let Codio know that nbgrader should be used to grade Jupyter assessments.

+
+

Important

+

If using nbgrader_config.py for your configurations, the .codio-jupyter is still required but can be empty/blank

+
+
+

Note

+

If both files are used the settings in the nbgrader_config.py take precedence. This file is not visible to students in their assignments

+
+
+

Note

+

Notebook files are only supported if in the root (/home/codio/workspace or ~/workspace) folder

+
+
+

Warning

+

Pair Programming should not be used for Jupyter Notebook

+
+
+

Configuration

+

Use the following configuration information when setting up nbgrader in a .codio-jupyter file. If using nbgrader_config.py, see example below.

+
    +
  • Extend Timeout period - To extend the time required for completion (to 90 seconds in this example), you can add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   ExecutePreprocessor.timeout: 90
+
+
+
    +
  • Lock all cells - To lock all cells (Default: False), add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   LockCells.lock_all_cells: True
+
+
+
    +
  • Lock all grade cells - To lock all grade cells (Default: True) where grade cells are locked (non-deletable), add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   LockCells.lock_grade_cells: True
+
+
+
    +
  • Lock all read-only cells - To lock all grade cells (Default: True) where read only cells are locked (non-deletable and non-editable), add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   LockCells.lock_readonly_cells: True
+
+
+
    +
  • Lock all solution cells - To lock all solution cells (Default: True) where solution cells are locked (non-deletable and non-editable), add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   LockCells.lock_solution_cells: True
+
+
+
    +
  • Execute preprocessor on timeout - If execution of a cell times out, interrupt the kernel and continue executing other cells rather than throwing an error and stopping by adding the following to the .codio-jupyter file:

  • +
+
nbgrader:
+   ExecutePreprocessor.interrupt_on_timeout: True
+
+
+
    +
  • Run custom grading with Jupyter - To avoid execution of autograder with nbgrader and allow Codio script autograder to be executed, add the following to the .codio-jupyter file. When this is set, Jupyter files do not display as assessments in Codio and are not submitted through nbrader after the assignment is marked as completed (no assessments and points are set in the assignment).

  • +
+
codio:
+  grader: false
+
+
+
    +
  • ClearSolutions.code_stub - Add the following to the .codio-jupyter file:

  • +
+
nbgrader:
+    ClearSolutions.code_stub:
+        R: |
+            # BEGIN YOUR CODE
+            # END YOUR CODE
+        python: |
+            # YOUR CODE HERE
+            raise NotImplementedError()
+        ruby: |
+            # BEGIN YOUR CODE
+            raise NotImplementedError.new()
+            #END YOUR CODE
+
+
+
    +
  • Postgrader

  • +
+

You can add a post-grading hook to Jupyter to alter the result html for the student. You can do this to remove and/or replace text from the notebook file that the students will see in their feedback.

+
codio:
+  postGrader: .guides/secure/postgrader.py
+
+
+

To enable this, create a file postgrader.py in .guides/secure folder. This file needs to be executable. +Running `chmod +x .guides/secure/postgrader.py` will make this file executable.

+
+

Example postgrader.py file

+
#!/usr/bin/env python3
+import sys
+import re
+START = '<span class="c1">### BEGIN HIDDEN TESTS</span>'
+END = '<span class="c1">### END HIDDEN TESTS</span>'
+html_path = sys.argv[1].rstrip()
+with open(html_path, 'r') as content_file:
+    content = content_file.read()
+
+def replaceTextBetween(originalText, delimeterA, delimterB, replacementText):
+    index_from = 0
+    index_to = len(originalText)
+    if delimeterA in originalText:
+        index_from = originalText.index(delimeterA)
+
+    if delimterB in originalText:
+        index_to = originalText.index(delimterB) + len(delimterB)
+
+    return originalText[0:index_from] + originalText[index_to:]
+
+while START in content:
+    content = replaceTextBetween(content, START, END, '')
+with open(html_path, 'w+') as stream:
+    stream.write(content)
+
+
+

In this example anything between the ### BEGIN HIDDEN TESTS and ### END HIDDEN TESTS in the .ipynb file will not be shown to the students

+

If using the nbgrader_config.py, see example below

+
+
+
+

Example nbgrader_config.py

+
c = get_config()
+c.ClearHiddenTests.begin_test_delimeter = "BEGIN HIDDEN TESTS"
+c.ClearHiddenTests.end_test_delimeter = "END HIDDEN TESTS"
+c.LockCells.lock_all_cells = True
+c.LockCells.lock_grade_cells = True
+c.LockCells.lock_readonly_cells = True
+c.LockCells.lock_solution_cells = True
+c.ExecutePreprocessor.interrupt_on_timeout = True
+c.ExecutePreprocessor.timeout = 20
+c.ClearSolutions.code_stub = {
+"R": "# your R code here\n# end of R code\n",
+"python": "# your python code here\n# end of python code\n",
+"ruby": "# your ruby code here            \n# end of ruby code"
+}
+
+
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/grading/release-grades.html b/docs/instructors/teaching/grading/release-grades.html new file mode 100644 index 00000000..4b818610 --- /dev/null +++ b/docs/instructors/teaching/grading/release-grades.html @@ -0,0 +1,349 @@ + + + + + + + + + Release Grades — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Release Grades

+

By default students are not shown the grades until you decide to release them to the course. This allows you to release all the grades at once after the grading process has been completed. To learn more about release grades, view the video

+

If you want to release the grades as the assignments are graded, follow these steps:

+
    +
  1. Open the course and click the Grading Basics tab.

  2. +
  3. Toggle the Release Grades Automatically setting to enable it.

    +Release Grades Automatically +
  4. +
+
+

Enable Release Grades toggle

+

You can enable the Release Grades Automatically at the organization level so that the Release Grades toggle is visible on the Course page.

+Release grades toggle +
+
+

Release grade from assignment

+

You can also release grades for an assignment by toggling the switch in the Release grades column.

+Release grades toggle in assignment +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/insights.html b/docs/instructors/teaching/insights.html new file mode 100644 index 00000000..76b64a8d --- /dev/null +++ b/docs/instructors/teaching/insights.html @@ -0,0 +1,366 @@ + + + + + + + + + Learning Insights — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Learning Insights

+

Higher Education institutions in the United States have access to Codio’s Learning Insights. Use this feature to gain insight into learning behavior at the course, module, assignment and student level.

+
+

Available Learning Insight Views

+

Access Learning Insights from inside a course. Navigate to the Courses page and select the course to open it.

+
+
Select Course +
+
+
+

Course level insights

+

Click the Insights tab.

+
+
+

Module level insights

+

Click Show Insights to the right of the module name.

+
+
Module Insights +
+
+
+

Assignment level insights

+
    +
  1. Click the Overview tab.

  2. +
  3. Click the assignment name.

  4. +
  5. Click the Insights tab.

  6. +
+
+
+

Student level insights

+
    +
  1. Click the Students tab

  2. +
  3. Click the student name.

  4. +
  5. Click the Insights tab

  6. +
+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/plagiarism.html b/docs/instructors/teaching/plagiarism.html new file mode 100644 index 00000000..31aa595e --- /dev/null +++ b/docs/instructors/teaching/plagiarism.html @@ -0,0 +1,394 @@ + + + + + + + + + Plagiarism Checker — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Plagiarism Checker

+

Plagiarism detection allows you to check for code copying and potential cases of cheating between members of a course. With the current version, Codio will compare the code projects of all students within a course for a specific teaching assignment.

+

If you want to include other reference code to include in the cross comparison, then you will need to create a dummy student account, add that dummy student to the course and upload the reference code as that student for that assignment. The Codio Test Student accounts could be used for this purpose

+

Plagiarism detection is best used with programming project assignments rather than Codio authored projects. It will work in both cases but it is really designed to test general coding projects rather than lots of auto-graded assessments within a assignment.

+

Codio does not determine whether cheating has or has not taken place and leaves the decision making up to you.

+

To run the Plagiarism checker you need to first select the assignment within the course and then press the actions button next to the assignment name.

+
+
Plagiarism start +
+
+

Courses

+

In order to use this feature you need to set up a course. If you are not using Codio as your main IDE and want to use only the plagiarism detection feature then you should still follow these instructions and ask your students to upload their code into the project using Git or by uploading files manually.

+
+
+

Access Plagiarism features

+

When in your course, select your assignment and then click the Actions button (button to the top right of the screen) to show the available actions that includes Plagiarism

+
+
Plagiarism start +
+
+
+

Run

+

You can see the Plagiarism button near in the upper part of the screen. When you press this you are taken to the following screen.

+
+
Plagiarism summary +
+

This screen will show you any plagiarism reports that were run in the past. You can open these if you wish.

+

On the left you can:

+
    +
  • enter a relative path in the workspace to check.

  • +
  • upload items to compare against (e.g. previous years information).

  • +
  • filter out template code setting the maximum fingerprint percentage between 0 and 100%. For more information on fingerprinting see https://dolos.ugent.be/about/algorithm.html#fingerprinting

  • +
  • restrict the file types that should be checked. It is possible to add multiple file types by pressing the Add Extension button.

  • +
  • add the file list in the Files Excludes box that you don’t want to be inlcuded. If there are multiple files, add each file on a new line.

  • +
+
+

Note

+

Files Excludes is useful when there is a large data set and reporting on all returns an error.

+
+

These filters can be useful to avoid generating unnecessary noise in your report.

+

Once you are ready to run a new report, press the Start button, which will package up all the files and pass them to the detection engine. You are free to leave the screen at this point and return to it later to see whether the report has been generated.

+

Codio will include all code from all students in the report, irrespective of whether the assignment is marked by the student as completed.

+
+
+

The report

+

Once the report has been generated it can be opened by clicking the Open button. A typical report is shown below. The interpretation of the report is explained below.

+
+
Plagiarism main report +
+

From the report overview you can also then view by:

+
    +
  • submission

  • +
  • clusters

  • +
  • graph

  • +
  • pair

  • +
+

In the Global Settings (under the cog icon at the top right) you can configure global parameters

+
    +
  • Similarity Threshold (The similarity threshold is the minimum similarity a file pair must have to be considered plagiarised)

  • +
  • Anonymize Dataset (Anonymize the dataset by removing the names of the authors and the files)

  • +
  • Active Labels (Select the labels that should be displayed in the visualizations)

  • +
+

For more information see the Dolos documentation and if you have any feedback on the report, raise in the GitHub repository issues.

+
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/playback.html b/docs/instructors/teaching/playback.html new file mode 100644 index 00000000..98859cb6 --- /dev/null +++ b/docs/instructors/teaching/playback.html @@ -0,0 +1,339 @@ + + + + + + + + + Code Playback — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Code Playback

+

Teachers have access to all of the files that students produce on Codio. In order to see how these code files were built, teachers can use Code Playback. If your cursor is in the code file you want to see the playback of, simply select Tools->Code Playback menu. If you are looking into a multi-file program or did not have the file you want to investigate in-focus, search for the student’s file by clicking on the folder icon.

+
+
Code Playback +
+

To watch the code be built, click the play button. You can change the speed using the Speed drop down which is in changes per second. To walk through the changes manually, you can use the “Previous change” and “Next change” buttons. You can drag along the playback slider to find points of interest.

+
+
Code Playback +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/remove.html b/docs/instructors/teaching/remove.html new file mode 100644 index 00000000..539080bb --- /dev/null +++ b/docs/instructors/teaching/remove.html @@ -0,0 +1,343 @@ + + + + + + + + + Removing Students — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Removing Students

+
    +
  1. From the Courses area, click on your course to open it.

  2. +
+
    +
  1. Click on the Students tab.

  2. +
+
    +
  1. You will see all students in your course displayed on this screen. Find the student that you want to remove from the course and click on the blue triple dot icon to the right of their name. Choose Remove student to take them out of the course. (Note: this does not remove your student entirely from your organization - if you wish to do this, see Remove Members)

  2. +
+
+
Remove Student +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/resetpassword.html b/docs/instructors/teaching/resetpassword.html new file mode 100644 index 00000000..180934c7 --- /dev/null +++ b/docs/instructors/teaching/resetpassword.html @@ -0,0 +1,344 @@ + + + + + + + + + Resetting student passwords — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Resetting student passwords

+

You can change a student’s password in the following way:

+
    +
  1. From the Courses area, click on your course to open it.

  2. +
+
    +
  1. Click on the Students tab, top centre of your screen.

  2. +
+
+
Students tab +
+
    +
  1. You will see all students in your course displayed on this screen. Find the student whose password needs to be changed and click on the blue triple dot icon to the right of their name. Choose Change student’s password and follow the steps to reset.

  2. +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/instructors/teaching/viewstudentwork.html b/docs/instructors/teaching/viewstudentwork.html new file mode 100644 index 00000000..025bd341 --- /dev/null +++ b/docs/instructors/teaching/viewstudentwork.html @@ -0,0 +1,367 @@ + + + + + + + + + Viewing student work — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Viewing student work

+

As a teacher you have access to your students’ assignments within Codio. This allows you to view and access work your students have completed at any time.

+
    +
  1. From the Courses area, click on your course to open it.

  2. +
+
+
Course +
+
    +
  1. Click on the Students tab.

  2. +
+
    +
  1. You will see all students in your course displayed on this screen. By default they will show sorted alphabetically by first name but you can also sort them by last name, number of started or number of completed assignments if preferred.

  2. +
+
    +
  1. To view/access an individual students work click on their name. On the far right of the screen, under the heading Open, click the blue arrow to open the students work.

  2. +
+
+
Open student work +
+
+

Writeable Copy

+

When you open a student assignment, changes you make will be saved in their assignment and they will see them when they open their assignments.

+

If you would like to try something out in their code without changing their version, click on the WRITEABLE COPY button on the top right. Changes made in this copy won’t be saved.

+
+
../../_images/writeable.png +
+
+
+

Downloading student workspaces

+

If you wish to download student workspaces you can do so either for individual assignments, individual students or for all students in the course:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/objects.inv b/docs/objects.inv new file mode 100644 index 00000000..dadc8028 Binary files /dev/null and b/docs/objects.inv differ diff --git a/docs/robots.txt b/docs/robots.txt new file mode 100644 index 00000000..c7ca60a6 --- /dev/null +++ b/docs/robots.txt @@ -0,0 +1,4 @@ +User-agent: * + +Sitemap: https://docs.codio.com/sitemap.xml +Sitemap: https://docs.codio.com/sitemap-student.xml diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 00000000..5f0ffc47 --- /dev/null +++ b/docs/search.html @@ -0,0 +1,247 @@ + + + + + + + + Search — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + +
+ + +
+ +
+ + + + + + +
+ +
+ +

Search

+ + + + +

+ Searching for multiple words only shows matches that contain + all words. +

+ + +
+ + + +
+ + + +
+ +
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/searchindex.js b/docs/searchindex.js new file mode 100644 index 00000000..8b05f19b --- /dev/null +++ b/docs/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["admin","authoring","common","common/develop/general","common/develop/ide/boxes/access","common/develop/ide/boxes/always-on","common/develop/ide/boxes/ext-access","common/develop/ide/boxes/ide-access-permissions","common/develop/ide/boxes/installsw/default-installed","common/develop/ide/boxes/installsw/file-locations","common/develop/ide/boxes/installsw/gui","common/develop/ide/boxes/installsw/install-software","common/develop/ide/boxes/installsw/langserver","common/develop/ide/boxes/installsw/parts-coding","common/develop/ide/boxes/overview","common/develop/ide/boxes/restart-reset","common/develop/ide/boxes/runmenu","common/develop/ide/boxes/startup","common/develop/ide/boxes/terminal","common/develop/ide/debugger/create-debug-target","common/develop/ide/debugger/debugger","common/develop/ide/debugger/start-debug","common/develop/ide/editing/abbreviations","common/develop/ide/editing/autocomplete","common/develop/ide/editing/av-chat","common/develop/ide/editing/code-beautifier","common/develop/ide/editing/code-editing","common/develop/ide/editing/color-picker","common/develop/ide/editing/command-bar","common/develop/ide/editing/connect-github-codio","common/develop/ide/editing/cursor","common/develop/ide/editing/force-language-highlighting","common/develop/ide/editing/git","common/develop/ide/editing/junit","common/develop/ide/editing/keyboard-shortcuts","common/develop/ide/editing/preview","common/develop/ide/editing/quick-open","common/develop/ide/editing/real-time-collaboration","common/develop/ide/editing/save-files","common/develop/ide/editing/search-replace","common/develop/ide/editing/share-project","common/develop/ide/editing/vscode","common/develop/ide/tools/deployment","common/develop/ide/tools/desktopapp","common/develop/ide/tools/ghapi","common/develop/ide/tools/ssh","common/develop/ide/workspace/add-delete-files","common/develop/ide/workspace/add-delete-folders","common/develop/ide/workspace/open-file","common/develop/ide/workspace/panels","common/develop/ide/workspace/upload-download-files","common/develop/ide/workspace/workspace","common/develop/packs/create-starter-pack","common/develop/packs/packs","common/develop/packs/starter-pack-guidelines","common/develop/packs/update-starter-pack","common/develop/projects/access-projects","common/develop/projects/copy-project","common/develop/projects/create-import-project","common/develop/projects/export-project","common/develop/projects/project-permissions","common/develop/projects/project-settings","common/develop/projects/projects","common/develop/stacks/create-stack","common/develop/stacks/modify-stack","common/develop/stacks/stack-planning","common/develop/stacks/stacks","common/develop/stacks/switch-stack","common/develop/stacks/update-stack","common/develop/stacks/using-stacks","common/settings/bitbucket","common/settings/env-variables","common/settings/github","common/settings/manage-password","common/settings/project-prefs","common/settings/settings","common/settings/ssh-key","common/settings/upload-ssh-key-remote-server","common/settings/user-prefs","common/settings/user-profile","common/tools/code-commenting","common/tools/code-playback","common/tools/dyslexia","common/tools/lexikon","getstarted","index","instructors/admin/integration/commoncartridge","instructors/admin/integration/grading","instructors/admin/integration/intro","instructors/admin/integration/lms-students","instructors/admin/integration/lms-systems/blackboard","instructors/admin/integration/lms-systems/canvas","instructors/admin/integration/lms-systems/d2l","instructors/admin/integration/lms-systems/google-classroom","instructors/admin/integration/lms-systems/moodle","instructors/admin/integration/lms-systems/schoology","instructors/admin/integration/lms-systems/system-specific-directions","instructors/admin/integration/lti-app","instructors/admin/integration/lti-course-copy","instructors/admin/integration/lti-keys-and-urls-information","instructors/admin/integration/lti1-3","instructors/admin/integration/lti1-3BS-D2L","instructors/admin/integration/lti1-3Canvas","instructors/admin/legal","instructors/admin/organization/add-remove-org-owners","instructors/admin/organization/add-teachers","instructors/admin/organization/auto-release-grades","instructors/admin/organization/create-org-library","instructors/admin/organization/default-student-dashboard","instructors/admin/organization/delete-org","instructors/admin/organization/enable-custom-script","instructors/admin/organization/gigabox-usage","instructors/admin/organization/grade-templates","instructors/admin/organization/hide-av","instructors/admin/organization/org-contact-url","instructors/admin/organization/organisation","instructors/admin/organization/public-private-settings","instructors/admin/organization/remove-org-members","instructors/admin/organization/sso","instructors/admin/organization/student-consent-form","instructors/admin/organization/student-email","instructors/admin/organization/view-org-members","instructors/admin/orgbilling","instructors/authoring/assessments/add-assessment","instructors/authoring/assessments/advanced-code-test","instructors/authoring/assessments/assessment-security","instructors/authoring/assessments/assessments","instructors/authoring/assessments/auto-grade-scripts","instructors/authoring/assessments/autograde-free-text","instructors/authoring/assessments/delete-assessment","instructors/authoring/assessments/duplicate-assessment","instructors/authoring/assessments/edit-assessment","instructors/authoring/assessments/edit-assessment-points","instructors/authoring/assessments/fill-in-blanks","instructors/authoring/assessments/free-text","instructors/authoring/assessments/grade-book","instructors/authoring/assessments/math-assessments","instructors/authoring/assessments/multiple-choice","instructors/authoring/assessments/parameterized","instructors/authoring/assessments/parsons-puzzle","instructors/authoring/assessments/partial-points","instructors/authoring/assessments/random","instructors/authoring/assessments/sense-network","instructors/authoring/assessments/standard-code-test","instructors/authoring/assessments/student-submission","instructors/authoring/assessments/ungraded-assessments","instructors/authoring/guides/add_media","instructors/authoring/guides/author_student","instructors/authoring/guides/authoring_guidelines","instructors/authoring/guides/cpumemdisk","instructors/authoring/guides/custom_button","instructors/authoring/guides/excludingfiles","instructors/authoring/guides/freeze_code","instructors/authoring/guides/hide_folders","instructors/authoring/guides/html_content","instructors/authoring/guides/intro","instructors/authoring/guides/latex","instructors/authoring/guides/markdown_content","instructors/authoring/guides/open_close_content","instructors/authoring/guides/page_editing","instructors/authoring/guides/previewing_content","instructors/authoring/guides/project_book","instructors/authoring/guides/settings/assessments","instructors/authoring/guides/settings/global","instructors/authoring/guides/settings/media","instructors/authoring/guides/settings/opentabs","instructors/authoring/guides/settings/page","instructors/authoring/guides/solution_templating","instructors/authoring/guides/teacher_only","instructors/authoring/guides/toc","instructors/getstarted/howto","instructors/getstarted/onboard","instructors/getstarted/startlist","instructors/getstarted/support/changelog","instructors/getstarted/support/support","instructors/setupcourses/add-remove-assignment","instructors/setupcourses/add-remove-students","instructors/setupcourses/add-ta","instructors/setupcourses/add-teachers","instructors/setupcourses/archive-course","instructors/setupcourses/assignment-settings/allow-student-reset","instructors/setupcourses/assignment-settings/assign-grade-template","instructors/setupcourses/assignment-settings/assignment-actions","instructors/setupcourses/assignment-settings/assignment-duration","instructors/setupcourses/assignment-settings/assignment-gigabox","instructors/setupcourses/assignment-settings/assignment-settings","instructors/setupcourses/assignment-settings/assignment-surveys","instructors/setupcourses/assignment-settings/disable-assignment","instructors/setupcourses/assignment-settings/disable-download","instructors/setupcourses/assignment-settings/disable-mark-completed","instructors/setupcourses/assignment-settings/exam-proctoring","instructors/setupcourses/assignment-settings/grade-weights","instructors/setupcourses/assignment-settings/groupwork","instructors/setupcourses/assignment-settings/mandatory","instructors/setupcourses/assignment-settings/penalties","instructors/setupcourses/assignment-settings/pin-assignment","instructors/setupcourses/assignment-settings/prerequisite-assignments","instructors/setupcourses/assignment-settings/prime-assignment-containers","instructors/setupcourses/assignment-settings/visibility-completed","instructors/setupcourses/assignment-settings/visibility-disabled","instructors/setupcourses/change-student-password","instructors/setupcourses/clone-course","instructors/setupcourses/course-contact","instructors/setupcourses/course-module-progress","instructors/setupcourses/course-revoke-sudo-access","instructors/setupcourses/courses","instructors/setupcourses/create-course","instructors/setupcourses/delete-course","instructors/setupcourses/export-assignment-data","instructors/setupcourses/export-course-data","instructors/setupcourses/export-lti","instructors/setupcourses/library/add-questions-from-library","instructors/setupcourses/library/add-questions-to-library","instructors/setupcourses/library/assessmentslibrary","instructors/setupcourses/library/global-library","instructors/setupcourses/library/search-library","instructors/setupcourses/library/unlink-assessment","instructors/setupcourses/library/update-assess-from-library","instructors/setupcourses/lmsconnect","instructors/setupcourses/mark-assignments-complete","instructors/setupcourses/modify-assignments","instructors/setupcourses/notification-email","instructors/setupcourses/parent-child-courses","instructors/setupcourses/preview-course","instructors/setupcourses/rename-course","instructors/setupcourses/rename-reorder-assignments","instructors/setupcourses/resources/codioresources","instructors/setupcourses/resources/editingresources","instructors/setupcourses/resources/resourcetools/crunch","instructors/setupcourses/resources/resourcetools/flode","instructors/setupcourses/resources/resourcetools/jeroo","instructors/setupcourses/resources/resourcetools/lexikon","instructors/setupcourses/resources/resourcetools/pencilcode","instructors/setupcourses/resources/resourcetools/processing-and-p5","instructors/setupcourses/resources/resourcetools/pyret","instructors/setupcourses/resources/resourcetools/scratch","instructors/setupcourses/resources/resourcetools/tkinter","instructors/setupcourses/resources/resourcetools/turtle","instructors/setupcourses/search-course","instructors/setupcourses/share-course","instructors/setupcourses/view-student-username","instructors/setupcourses/virtualmachine","instructors/teaching/addstudents","instructors/teaching/behaviorinsights","instructors/teaching/commenting","instructors/teaching/cursor","instructors/teaching/grading/grade-freetext","instructors/teaching/grading/grading","instructors/teaching/grading/nbgrader","instructors/teaching/grading/release-grades","instructors/teaching/insights","instructors/teaching/plagiarism","instructors/teaching/playback","instructors/teaching/remove","instructors/teaching/resetpassword","instructors/teaching/viewstudentwork","setupcourses","teaching"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":4,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["admin.rst","authoring.rst","common.rst","common/develop/general.rst","common/develop/ide/boxes/access.rst","common/develop/ide/boxes/always-on.rst","common/develop/ide/boxes/ext-access.rst","common/develop/ide/boxes/ide-access-permissions.rst","common/develop/ide/boxes/installsw/default-installed.rst","common/develop/ide/boxes/installsw/file-locations.rst","common/develop/ide/boxes/installsw/gui.rst","common/develop/ide/boxes/installsw/install-software.rst","common/develop/ide/boxes/installsw/langserver.rst","common/develop/ide/boxes/installsw/parts-coding.rst","common/develop/ide/boxes/overview.rst","common/develop/ide/boxes/restart-reset.rst","common/develop/ide/boxes/runmenu.rst","common/develop/ide/boxes/startup.rst","common/develop/ide/boxes/terminal.rst","common/develop/ide/debugger/create-debug-target.rst","common/develop/ide/debugger/debugger.rst","common/develop/ide/debugger/start-debug.rst","common/develop/ide/editing/abbreviations.rst","common/develop/ide/editing/autocomplete.rst","common/develop/ide/editing/av-chat.rst","common/develop/ide/editing/code-beautifier.rst","common/develop/ide/editing/code-editing.rst","common/develop/ide/editing/color-picker.rst","common/develop/ide/editing/command-bar.rst","common/develop/ide/editing/connect-github-codio.rst","common/develop/ide/editing/cursor.rst","common/develop/ide/editing/force-language-highlighting.rst","common/develop/ide/editing/git.rst","common/develop/ide/editing/junit.rst","common/develop/ide/editing/keyboard-shortcuts.rst","common/develop/ide/editing/preview.rst","common/develop/ide/editing/quick-open.rst","common/develop/ide/editing/real-time-collaboration.rst","common/develop/ide/editing/save-files.rst","common/develop/ide/editing/search-replace.rst","common/develop/ide/editing/share-project.rst","common/develop/ide/editing/vscode.rst","common/develop/ide/tools/deployment.rst","common/develop/ide/tools/desktopapp.rst","common/develop/ide/tools/ghapi.rst","common/develop/ide/tools/ssh.rst","common/develop/ide/workspace/add-delete-files.rst","common/develop/ide/workspace/add-delete-folders.rst","common/develop/ide/workspace/open-file.rst","common/develop/ide/workspace/panels.rst","common/develop/ide/workspace/upload-download-files.rst","common/develop/ide/workspace/workspace.rst","common/develop/packs/create-starter-pack.rst","common/develop/packs/packs.rst","common/develop/packs/starter-pack-guidelines.rst","common/develop/packs/update-starter-pack.rst","common/develop/projects/access-projects.rst","common/develop/projects/copy-project.rst","common/develop/projects/create-import-project.rst","common/develop/projects/export-project.rst","common/develop/projects/project-permissions.rst","common/develop/projects/project-settings.rst","common/develop/projects/projects.rst","common/develop/stacks/create-stack.rst","common/develop/stacks/modify-stack.rst","common/develop/stacks/stack-planning.rst","common/develop/stacks/stacks.rst","common/develop/stacks/switch-stack.rst","common/develop/stacks/update-stack.rst","common/develop/stacks/using-stacks.rst","common/settings/bitbucket.rst","common/settings/env-variables.rst","common/settings/github.rst","common/settings/manage-password.rst","common/settings/project-prefs.rst","common/settings/settings.rst","common/settings/ssh-key.rst","common/settings/upload-ssh-key-remote-server.rst","common/settings/user-prefs.rst","common/settings/user-profile.rst","common/tools/code-commenting.rst","common/tools/code-playback.rst","common/tools/dyslexia.rst","common/tools/lexikon.rst","getstarted.rst","index.rst","instructors/admin/integration/commoncartridge.rst","instructors/admin/integration/grading.rst","instructors/admin/integration/intro.rst","instructors/admin/integration/lms-students.rst","instructors/admin/integration/lms-systems/blackboard.rst","instructors/admin/integration/lms-systems/canvas.rst","instructors/admin/integration/lms-systems/d2l.rst","instructors/admin/integration/lms-systems/google-classroom.rst","instructors/admin/integration/lms-systems/moodle.rst","instructors/admin/integration/lms-systems/schoology.rst","instructors/admin/integration/lms-systems/system-specific-directions.rst","instructors/admin/integration/lti-app.rst","instructors/admin/integration/lti-course-copy.rst","instructors/admin/integration/lti-keys-and-urls-information.rst","instructors/admin/integration/lti1-3.rst","instructors/admin/integration/lti1-3BS-D2L.rst","instructors/admin/integration/lti1-3Canvas.rst","instructors/admin/legal.rst","instructors/admin/organization/add-remove-org-owners.rst","instructors/admin/organization/add-teachers.rst","instructors/admin/organization/auto-release-grades.rst","instructors/admin/organization/create-org-library.rst","instructors/admin/organization/default-student-dashboard.rst","instructors/admin/organization/delete-org.rst","instructors/admin/organization/enable-custom-script.rst","instructors/admin/organization/gigabox-usage.rst","instructors/admin/organization/grade-templates.rst","instructors/admin/organization/hide-av.rst","instructors/admin/organization/org-contact-url.rst","instructors/admin/organization/organisation.rst","instructors/admin/organization/public-private-settings.rst","instructors/admin/organization/remove-org-members.rst","instructors/admin/organization/sso.rst","instructors/admin/organization/student-consent-form.rst","instructors/admin/organization/student-email.rst","instructors/admin/organization/view-org-members.rst","instructors/admin/orgbilling.rst","instructors/authoring/assessments/add-assessment.rst","instructors/authoring/assessments/advanced-code-test.rst","instructors/authoring/assessments/assessment-security.rst","instructors/authoring/assessments/assessments.rst","instructors/authoring/assessments/auto-grade-scripts.rst","instructors/authoring/assessments/autograde-free-text.rst","instructors/authoring/assessments/delete-assessment.rst","instructors/authoring/assessments/duplicate-assessment.rst","instructors/authoring/assessments/edit-assessment.rst","instructors/authoring/assessments/edit-assessment-points.rst","instructors/authoring/assessments/fill-in-blanks.rst","instructors/authoring/assessments/free-text.rst","instructors/authoring/assessments/grade-book.rst","instructors/authoring/assessments/math-assessments.rst","instructors/authoring/assessments/multiple-choice.rst","instructors/authoring/assessments/parameterized.rst","instructors/authoring/assessments/parsons-puzzle.rst","instructors/authoring/assessments/partial-points.rst","instructors/authoring/assessments/random.rst","instructors/authoring/assessments/sense-network.rst","instructors/authoring/assessments/standard-code-test.rst","instructors/authoring/assessments/student-submission.rst","instructors/authoring/assessments/ungraded-assessments.rst","instructors/authoring/guides/add_media.rst","instructors/authoring/guides/author_student.rst","instructors/authoring/guides/authoring_guidelines.rst","instructors/authoring/guides/cpumemdisk.rst","instructors/authoring/guides/custom_button.rst","instructors/authoring/guides/excludingfiles.rst","instructors/authoring/guides/freeze_code.rst","instructors/authoring/guides/hide_folders.rst","instructors/authoring/guides/html_content.rst","instructors/authoring/guides/intro.rst","instructors/authoring/guides/latex.rst","instructors/authoring/guides/markdown_content.rst","instructors/authoring/guides/open_close_content.rst","instructors/authoring/guides/page_editing.rst","instructors/authoring/guides/previewing_content.rst","instructors/authoring/guides/project_book.rst","instructors/authoring/guides/settings/assessments.rst","instructors/authoring/guides/settings/global.rst","instructors/authoring/guides/settings/media.rst","instructors/authoring/guides/settings/opentabs.rst","instructors/authoring/guides/settings/page.rst","instructors/authoring/guides/solution_templating.rst","instructors/authoring/guides/teacher_only.rst","instructors/authoring/guides/toc.rst","instructors/getstarted/howto.rst","instructors/getstarted/onboard.rst","instructors/getstarted/startlist.rst","instructors/getstarted/support/changelog.rst","instructors/getstarted/support/support.rst","instructors/setupcourses/add-remove-assignment.rst","instructors/setupcourses/add-remove-students.rst","instructors/setupcourses/add-ta.rst","instructors/setupcourses/add-teachers.rst","instructors/setupcourses/archive-course.rst","instructors/setupcourses/assignment-settings/allow-student-reset.rst","instructors/setupcourses/assignment-settings/assign-grade-template.rst","instructors/setupcourses/assignment-settings/assignment-actions.rst","instructors/setupcourses/assignment-settings/assignment-duration.rst","instructors/setupcourses/assignment-settings/assignment-gigabox.rst","instructors/setupcourses/assignment-settings/assignment-settings.rst","instructors/setupcourses/assignment-settings/assignment-surveys.rst","instructors/setupcourses/assignment-settings/disable-assignment.rst","instructors/setupcourses/assignment-settings/disable-download.rst","instructors/setupcourses/assignment-settings/disable-mark-completed.rst","instructors/setupcourses/assignment-settings/exam-proctoring.rst","instructors/setupcourses/assignment-settings/grade-weights.rst","instructors/setupcourses/assignment-settings/groupwork.rst","instructors/setupcourses/assignment-settings/mandatory.rst","instructors/setupcourses/assignment-settings/penalties.rst","instructors/setupcourses/assignment-settings/pin-assignment.rst","instructors/setupcourses/assignment-settings/prerequisite-assignments.rst","instructors/setupcourses/assignment-settings/prime-assignment-containers.rst","instructors/setupcourses/assignment-settings/visibility-completed.rst","instructors/setupcourses/assignment-settings/visibility-disabled.rst","instructors/setupcourses/change-student-password.rst","instructors/setupcourses/clone-course.rst","instructors/setupcourses/course-contact.rst","instructors/setupcourses/course-module-progress.rst","instructors/setupcourses/course-revoke-sudo-access.rst","instructors/setupcourses/courses.rst","instructors/setupcourses/create-course.rst","instructors/setupcourses/delete-course.rst","instructors/setupcourses/export-assignment-data.rst","instructors/setupcourses/export-course-data.rst","instructors/setupcourses/export-lti.rst","instructors/setupcourses/library/add-questions-from-library.rst","instructors/setupcourses/library/add-questions-to-library.rst","instructors/setupcourses/library/assessmentslibrary.rst","instructors/setupcourses/library/global-library.rst","instructors/setupcourses/library/search-library.rst","instructors/setupcourses/library/unlink-assessment.rst","instructors/setupcourses/library/update-assess-from-library.rst","instructors/setupcourses/lmsconnect.rst","instructors/setupcourses/mark-assignments-complete.rst","instructors/setupcourses/modify-assignments.rst","instructors/setupcourses/notification-email.rst","instructors/setupcourses/parent-child-courses.rst","instructors/setupcourses/preview-course.rst","instructors/setupcourses/rename-course.rst","instructors/setupcourses/rename-reorder-assignments.rst","instructors/setupcourses/resources/codioresources.rst","instructors/setupcourses/resources/editingresources.rst","instructors/setupcourses/resources/resourcetools/crunch.rst","instructors/setupcourses/resources/resourcetools/flode.rst","instructors/setupcourses/resources/resourcetools/jeroo.rst","instructors/setupcourses/resources/resourcetools/lexikon.rst","instructors/setupcourses/resources/resourcetools/pencilcode.rst","instructors/setupcourses/resources/resourcetools/processing-and-p5.rst","instructors/setupcourses/resources/resourcetools/pyret.rst","instructors/setupcourses/resources/resourcetools/scratch.rst","instructors/setupcourses/resources/resourcetools/tkinter.rst","instructors/setupcourses/resources/resourcetools/turtle.rst","instructors/setupcourses/search-course.rst","instructors/setupcourses/share-course.rst","instructors/setupcourses/view-student-username.rst","instructors/setupcourses/virtualmachine.rst","instructors/teaching/addstudents.rst","instructors/teaching/behaviorinsights.rst","instructors/teaching/commenting.rst","instructors/teaching/cursor.rst","instructors/teaching/grading/grade-freetext.rst","instructors/teaching/grading/grading.rst","instructors/teaching/grading/nbgrader.rst","instructors/teaching/grading/release-grades.rst","instructors/teaching/insights.rst","instructors/teaching/plagiarism.rst","instructors/teaching/playback.rst","instructors/teaching/remove.rst","instructors/teaching/resetpassword.rst","instructors/teaching/viewstudentwork.rst","setupcourses.rst","teaching.rst"],objects:{},objnames:{},objtypes:{},terms:{"0":[3,13,14,22,27,34,97,99,100,112,118,124,127,128,133,134,135,137,138,139,140,141,142,143,145,146,154,156,157,158,165,173,237,248,251],"00":127,"000":143,"00z":127,"01st":173,"02":127,"02nd":173,"03rd":173,"04":[17,173],"04th":173,"05":127,"05th":173,"06th":173,"07t09":127,"07th":173,"08th":173,"09th":173,"0a":100,"1":[0,3,4,13,14,22,34,35,43,44,86,88,92,97,99,111,118,127,128,133,135,138,140,154,156,157,158,163,165,173,186,191,211,212,220,228,237,241,243,248],"10":[3,4,22,32,34,95,118,127,128,140,157,186,191,241],"100":[22,27,111,112,118,127,128,140,149,191,203,251],"1000":150,"100644":32,"100px":22,"1024":6,"1048576":127,"10em":22,"10t00":127,"10th":173,"11":[3,118,124,173],"110479088":146,"1121212":91,"113":3,"11cd4e43b0c43f79d9478efbe21ba1b9":127,"11th":173,"12":[18,124,127,173],"123":42,"1234":42,"127":[13,14],"12th":173,"13":[3,78],"13th":173,"14":[17,63,102,140],"14th":173,"15":73,"15th":173,"16":[3,111],"16gb":[173,241],"16th":173,"16x16":102,"1735957228":129,"17th":173,"18":[17,173],"18615":3,"18th":173,"19200300":118,"1970":157,"19th":173,"1gb":173,"1jnhovbmnao":146,"1mb":127,"1px":34,"1st":173,"2":[3,4,20,22,27,32,34,41,43,44,63,92,94,99,101,111,118,124,127,133,138,140,156,157,158,165,173,174,191,192,220,236,237,243],"20":[95,127,143,228,248],"200":[110,149],"2017":[127,173],"2018":173,"2019":173,"2020":173,"2021":173,"2022":[10,173],"2023":[127,173],"20min":241,"20t00":127,"20th":173,"21":[3,42,95],"21st":173,"22":[3,17,42],"22nd":173,"2342":118,"23rd":173,"24":[95,124],"24th":173,"25th":173,"26th":173,"27th":173,"281":146,"28th":173,"29119":4,"29th":173,"2a":157,"2aa":103,"2gb":173,"2n":156,"2nd":[146,160,173],"3":[0,16,20,22,32,43,44,65,86,88,90,92,95,97,99,118,124,127,133,138,140,156,157,158,165,173,179,182,190,191,194,201,208,209,220,228,237,244],"30":[5,22,33],"300":[124,143],"3000":[6,10,16,18,35],"3050":[10,173],"30em":22,"30mb":235,"30th":173,"315":146,"31st":173,"36f5f6d99f69a7dc65f5ce8d619e8494":44,"399098453265fb2c3eca360db6f5e462f":44,"3b52656756565656cd19a4b869b8":44,"3rd":[42,146,148,150,173,243],"4":[3,16,22,32,34,43,63,78,92,110,111,118,124,140,173,197,220,241,243],"404":39,"42":118,"44":3,"443":[3,16,35],"44f69476a07c":173,"456":42,"46":63,"47":127,"471z":127,"480b":173,"49":13,"4ac":157,"4th":[32,173],"5":[2,3,13,16,22,35,62,63,66,102,118,124,127,128,140,178,192,220,243],"50":[27,139,140],"500":[146,197],"5000":158,"509":118,"5105":19,"54":127,"5432":143,"55":3,"560":146,"5672":3,"5ex":22,"5gb":149,"5th":173,"6":[3,95,102,118,124,156,173,208,209,220],"60":17,"602d":147,"60min":173,"617c4f1cf9dcb8764hjk97100a980a09":44,"63f293ba":147,"64":3,"6th":173,"7":[3,63,102,118,124,127,209,220],"7331872":[],"73331872":[],"756":111,"756mb":149,"789":42,"7b86f94c9c58":147,"7th":173,"8":[111,118,124,127,138,140,154,173,241],"80":[3,6,16,35,42,63],"8385":147,"8gb":173,"8th":173,"9":[3,63,118,124],"90":248,"9000":54,"9499":6,"9500":[6,54,236],"978":[],"9999":6,"9th":173,"boolean":139,"break":148,"case":[10,33,39,43,58,65,67,87,98,99,122,124,127,133,143,149,150,157,158,165,175,191,215,243,251],"class":[22,33,34,39,56,93,149,173,176,185,248],"const":[140,157],"default":[3,7,8,10,12,18,31,32,33,34,35,39,41,42,49,52,54,58,60,61,63,65,66,78,83,87,90,98,101,105,106,107,108,111,115,116,118,124,125,127,128,134,135,139,140,142,143,144,149,150,157,158,159,163,165,166,169,173,182,184,191,193,194,202,203,220,221,223,231,243,247,248,249,255,257],"do":[3,4,11,24,29,30,32,39,42,43,44,45,52,54,63,64,65,71,73,76,89,90,91,93,95,97,98,102,122,124,125,127,134,135,138,139,141,143,144,146,147,148,149,150,152,154,157,160,161,165,167,169,173,174,176,191,197,206,207,209,223,228,236,237,238,242,244,245,246,247,248,253,255,257],"export":[1,51,61,79,86,88,92,99,155,173,182,188,207,229,255,257],"final":[78,90,91,97,101,102,112,140,144,173,191,192,194,208,221,236,247],"float":[140,228],"function":[10,21,34,41,110,127,130,139,140,150,157,159,163,173,233,236,248],"import":[2,4,10,17,34,42,45,50,62,65,66,67,86,89,91,92,94,112,127,128,138,140,143,144,149,150,154,156,157,165,173,175,236,237,243,248],"int":[18,127,140,165],"long":[63,111,141,149,173],"new":[4,6,8,13,15,18,20,27,30,34,39,41,42,43,44,45,46,47,49,52,53,55,58,64,65,66,68,69,70,71,72,73,81,88,89,90,91,92,95,97,98,100,102,107,110,112,117,118,119,121,122,126,127,138,139,141,143,151,159,165,166,169,173,174,175,178,182,184,194,196,201,209,211,212,214,215,220,221,223,225,228,230,231,232,234,235,236,237,239,241,246,248,251],"null":[39,127,140,237],"public":[16,29,32,35,40,44,52,56,57,58,60,61,66,70,72,76,91,100,101,102,115,165,168,173],"return":[5,15,22,29,32,36,43,51,69,90,91,95,97,99,119,124,127,140,142,143,147,157,160,173,223,241,248,251],"short":[54,63,124,125,128,133,134,135,137,139,142,143,171],"static":[3,6,10,16,35,61,102,147,165,173],"switch":[32,51,64,66,69,86,87,90,91,97,99,105,122,127,147,154,159,160,163,166,173,176,177,178,182,192,193,219,223,249],"throw":248,"true":[12,13,78,110,127,128,140,147,173,208,248],"try":[42,53,73,84,97,122,150,172,173,190,228,237,241,243,255,257],"var":[13,25,64,110,140,157],"void":165,"while":[63,69,162,163,164,166,173,233,248],A:[2,10,13,21,32,34,39,43,45,52,53,62,65,66,68,73,112,115,127,128,133,134,135,139,141,144,149,150,161,166,169,190,200,205,207,216,224,228,229,243,247,248,251,256],And:154,As:[25,39,63,71,80,93,100,140,144,145,175,182,184,188,190,192,219,228,255,257],At:[90,91,99,228],Be:[4,29,42,71,122,124,127,128,133,134,135,137,139,142,143,188],By:[7,52,58,60,61,63,65,66,87,95,99,102,106,107,116,128,129,134,135,139,142,143,144,159,166,169,182,184,193,203,220,247,249,255,257],For:[0,7,10,11,13,17,22,23,26,32,34,35,42,43,56,63,74,78,89,92,97,98,99,100,122,124,128,129,133,134,135,136,137,138,139,142,143,146,149,150,151,157,163,165,173,175,182,187,191,194,215,218,230,232,233,234,235,236,237,241,243,251,255,257],IT:3,If:[3,4,5,6,8,10,11,12,13,16,17,19,20,21,23,24,29,30,31,32,33,34,35,37,38,39,40,42,43,44,45,48,49,50,52,53,54,55,56,58,61,63,64,65,66,67,68,69,70,71,72,73,76,79,81,83,86,89,91,92,93,94,95,97,98,99,100,105,108,110,111,112,117,118,119,122,124,125,127,128,133,134,135,137,138,139,140,141,142,143,144,146,147,148,149,150,152,157,158,161,163,165,166,168,169,171,173,174,175,176,177,178,181,184,187,188,189,190,191,192,193,194,196,204,206,207,208,209,211,212,214,215,216,217,219,220,222,223,227,228,229,230,231,232,234,235,236,238,239,240,241,243,246,247,248,249,251,252,255,257],In:[3,14,16,32,34,42,43,44,52,53,55,61,63,65,68,73,74,77,82,87,89,92,98,99,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,127,128,130,131,132,134,138,140,143,149,150,154,156,157,167,175,178,179,181,187,188,189,191,194,195,198,199,204,209,211,215,216,217,221,222,236,239,241,243,247,248,251,252],Into:41,Is:32,It:[3,6,15,21,25,32,34,35,42,44,54,63,65,66,73,83,89,90,91,94,97,99,101,122,127,129,143,150,154,157,159,161,175,194,228,236,237,241,251],NOT:[138,175],No:[60,145,198,199,247],Not:[34,97,129,173,221,247],ON:182,On:[4,19,21,29,32,40,46,47,50,52,55,57,61,63,69,73,83,90,99,104,115,124,128,133,134,135,137,138,139,140,141,142,143,144,163,166,175,176,179,183,190,194,201,204,207,212,214,215,220,222,223,239,240,241,247,251,255,257],One:[142,147,205,228,256],Or:[216,217],Such:[64,66,151],TO:[],That:[42,149],The:[3,4,5,6,9,10,12,13,15,16,18,19,21,23,25,28,29,32,33,35,36,39,40,41,42,43,44,45,47,49,51,52,54,56,58,61,63,66,69,71,81,83,86,89,90,91,92,94,95,97,98,99,100,101,102,103,104,110,112,113,115,116,118,119,120,122,124,127,128,130,133,134,135,137,138,139,140,141,142,143,145,146,147,148,149,150,152,154,157,158,161,163,165,166,167,168,169,171,174,175,176,177,178,183,185,186,189,190,191,192,194,195,196,197,198,199,202,204,208,209,210,214,215,220,222,228,231,235,236,237,238,241,242,243,246,247],Then:[45,92,95,125,130,138,236,243],There:[38,41,42,44,63,65,67,100,117,124,127,135,139,141,144,149,150,157,159,161,163,169,174,175,176,183,220,228,235,236,241,243],These:[2,26,62,66,78,99,118,127,140,143,147,154,176,206,222,251],To:[4,5,10,12,14,15,16,18,19,20,21,23,27,29,32,33,35,36,40,41,43,44,45,46,47,48,49,50,54,55,56,57,60,63,65,68,69,75,76,77,79,80,81,82,87,90,91,92,93,94,97,99,105,107,115,118,121,122,123,124,128,129,130,131,132,133,134,135,136,137,138,139,140,142,143,144,146,147,157,159,160,163,165,167,168,169,174,175,176,177,178,179,183,187,188,189,190,192,194,195,198,199,200,204,206,209,214,215,216,217,219,222,223,225,226,228,229,231,232,234,235,236,237,238,239,241,244,247,248,249,251,252,255,257],Will:[89,92,124,128,133,134,135,137,139,142,143],With:[40,127,205,230,232,234,235,237,251,256],_:39,_answer:[208,209],_attempt:[208,209],_correct:208,_earned_point:209,_not:157,_total_points_poss:209,abil:[11,16,24,42,45,52,58,82,115,127,144,147,163,173,188,189,192,198],abl:[10,17,42,44,65,66,91,93,110,113,114,118,120,124,128,133,134,135,137,139,142,143,144,147,152,154,159,161,163,165,166,169,173,174,176,177,178,180,187,188,190,192,194,202,214,235,241,243],about:[3,7,8,13,14,21,24,26,29,32,35,45,53,63,64,65,66,74,78,83,107,115,124,127,134,136,143,144,150,169,174,175,191,228,233,241,249,251],abov:[3,44,45,65,71,83,90,91,93,95,97,99,108,124,127,144,148,150,151,154,156,157,169,176,194,221,222,228,236,241,243],abroad:[],abus:[],ac:118,acceler:[111,156,173],accent:173,accept:[3,165,239,243],access:[2,3,9,10,11,14,16,17,24,28,30,32,35,37,39,41,44,52,58,60,61,62,63,64,71,73,74,75,76,78,79,83,85,87,89,90,91,92,93,94,95,96,97,99,100,102,108,111,112,115,118,119,121,124,141,144,146,147,148,151,157,159,161,162,163,164,166,168,173,174,175,182,185,187,190,195,198,199,202,205,212,214,219,228,231,233,239,240,241,242,243,245,250,252,255,256,257],accesss:173,accident:[],accomplish:[],accord:[112,124,149],accordingli:238,account:[0,10,17,20,29,32,42,43,52,56,57,66,70,72,73,76,78,88,95,97,99,101,102,105,107,114,115,117,118,121,122,124,127,139,143,147,148,150,168,173,174,176,178,190,202,206,223,226,228,251],accredit:3,accumul:228,accur:143,achiev:[157,165],across:[42,49,71,148,243],act:103,action:[21,28,34,39,42,57,58,87,90,91,99,122,127,144,146,150,154,158,163,165,173,176,185,191,219,220,243,244,251],activ:[5,7,19,30,40,42,48,81,92,101,103,111,142,173,179,192,206,209,226,241,243,245,251],activetab:32,actual:[65,124,127,128,143,241],ad:[3,11,29,32,43,45,53,56,71,89,90,92,93,94,95,97,99,104,105,124,127,128,133,137,139,143,145,157,159,161,170,173,175,176,177,178,201,211,212,221,222,223,226,231,235,236,242,247,248],adapt:[2,62],adblock:[],add:[2,10,29,31,32,33,41,42,44,45,51,53,61,62,63,65,66,68,69,70,71,72,80,84,89,90,91,92,93,94,95,97,102,110,114,115,117,118,121,124,126,127,128,133,134,135,137,138,139,142,143,146,157,164,165,169,171,172,173,186,192,202,205,206,213,214,215,216,220,223,226,228,229,231,236,237,242,244,246,247,248,251,256],addeventlisten:150,addit:[8,26,31,52,53,65,102,107,114,124,128,133,134,135,137,139,142,143,173,182,190,194,209,223,231,244,247],addition:124,additionalcompilerflag:147,address:[3,32,73,79,88,89,90,91,92,94,97,99,104,105,112,119,120,122,165,173,177,178,190,208,209,221,240,241],addresss:[],adjac:39,adjust:[34,135,165,173,246],admin:[7,44,58,60,85,90,95,102,104,105,115,121,173,212],administ:[14,66],administr:[3,90,91,95,97,99,102,104,115],advanc:[56,123,125,138,140,143,144,173,236],advantag:[101,102,144],advers:71,advis:[138,173,176,190,196],ae2d:173,affect:[71,78,106,114,116,149,163,173,192],after:[15,17,21,22,25,41,54,56,66,68,71,89,90,94,102,124,127,128,133,134,137,139,140,142,143,144,149,157,163,173,175,182,190,192,194,197,204,209,211,222,223,236,239,248,249],afterward:139,again:[13,43,49,51,73,99,127,141,175,180,190,195,229,236,238],against:[44,127,251],agre:[119,173],agreement:[103,119],ahead:[65,144],ai:142,aid:122,al:158,alert:[110,222],algorithm:[228,251],alia:[16,157],alias:6,all:[3,4,5,9,10,11,12,15,18,21,25,28,29,30,32,33,34,39,42,43,44,45,52,56,58,63,64,65,66,67,69,71,78,80,89,90,92,94,95,97,98,101,104,105,107,112,114,117,119,121,124,125,129,130,131,132,133,134,138,140,141,143,144,146,149,153,154,156,157,158,159,161,162,163,165,166,169,171,173,174,175,176,177,180,182,183,190,191,192,193,196,203,207,208,209,212,214,216,217,219,221,222,228,235,241,243,244,245,246,247,248,249,251,252,253,254,255,257],alloc:[111,135,149,173,184,241],allot:[],allow:[3,6,19,21,24,28,29,32,34,36,42,43,52,56,61,63,66,71,73,86,89,90,91,92,94,97,98,99,101,107,122,124,127,128,133,134,135,136,137,139,140,141,143,144,147,148,150,152,154,157,159,160,161,164,165,166,167,168,173,176,180,182,190,191,192,196,198,199,209,220,222,228,229,246,248,249,251,255,257],allowfullscreen:146,almost:28,alon:126,along:[19,35,54,146,147,152,202,228,252],alpha:232,alphabet:[255,257],alreadi:[10,20,29,32,43,63,64,89,92,100,105,122,124,125,127,139,141,143,146,154,173,174,175,178,179,192,197,204,228,235,236,241,246,247,248],also:[2,3,6,9,10,11,15,16,17,18,19,21,23,25,27,28,29,32,33,34,35,37,42,44,45,46,47,49,51,54,56,58,61,62,63,65,66,69,80,81,86,89,90,99,100,104,108,110,118,121,122,123,124,127,128,129,133,134,135,136,139,140,141,142,144,147,148,149,150,156,157,158,159,161,165,167,168,173,174,175,176,179,182,184,188,192,198,201,205,206,207,208,209,213,215,220,221,222,223,228,233,235,239,241,243,244,246,247,248,249,251,255,256,257],alt:[18,22,30,33,34,39,49,83,125,146,157,173],alter:[247,248],altern:[16,19,117,169,228,240],although:[23,54,91,192,227],alwai:[3,4,40,61,66,87,89,94,104,115,124,128,133,134,137,139,140,143,173,174],ambigu:165,amend:[124,143,173,179,206],ami:241,among:[149,233],amount:[141,190,194,243],an:[3,4,7,8,9,13,16,20,21,22,25,29,32,33,34,35,39,42,43,45,52,53,54,55,56,57,58,61,63,64,65,66,69,71,73,76,78,82,83,84,88,89,94,98,99,101,103,105,115,119,122,124,125,126,128,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,151,154,156,157,159,161,163,165,166,169,172,173,174,175,177,178,179,182,184,185,187,188,189,191,192,194,195,197,201,202,208,209,211,213,214,215,219,221,223,225,226,227,228,229,230,231,232,233,234,235,236,241,242,243,245,246,248,249,251,255,257],an_exampl:25,analysi:[142,166],angular:35,angularj:35,ani:[2,3,4,5,6,10,13,15,19,21,32,33,37,39,41,42,43,44,49,53,54,55,57,58,60,62,63,64,65,66,69,71,74,76,78,89,92,93,94,100,102,110,116,119,121,124,125,127,128,133,134,135,136,137,139,140,141,142,143,146,147,150,154,157,158,159,161,165,169,173,174,176,179,192,194,195,196,197,198,202,203,204,205,206,207,211,215,220,222,228,229,231,236,241,247,248,251,255,256,257],anim:237,annot:229,announc:173,annual:122,anonym:[89,173,203,251],anoth:[21,24,30,32,37,44,46,47,48,49,66,68,89,90,112,124,128,133,134,135,137,138,139,142,143,144,173,187,192,228,229,247],answer:[124,127,128,133,134,135,136,137,139,140,141,142,143,144,148,154,163,168,173,194,208,214,246,247],anti:3,anyon:[60,61,87,111,115],anyth:[9,39,56,128,133,142,144,165,223,248],anywher:[3,30,32],aob:173,apach:[35,63],apache2:63,api:[3,42,71,100,102,115,138,142,173],apollo:[90,91,92,100,101,102,173],app:[0,6,10,32,39,88,90,94,98,99,100,102,173],appear:[10,21,32,39,45,48,54,56,63,90,102,135,143,150,154,159,163,168,169,174,175,182,206,212,219,222,223,228,229,231,239,243],append:[5,127,128,139,140,157],appl:24,appli:[12,18,25,31,33,44,48,60,65,66,74,78,89,92,108,127,157,161,163,173,192,194,196,204,222,246,247],applic:[3,4,10,19,21,29,35,42,64,66,70,72,89,110,118,124,140,173,229,236],approach:[2,6,37,42,62,65,143,165,226],appropri:[32,35,65,69,86,91,122,124,139,143,152,156,165,167,169,190,216],approv:69,approxim:241,april:173,apt:[11,13,64,66,124],ar:[1,2,3,4,5,6,9,10,11,12,13,15,17,18,19,20,21,23,24,26,29,30,32,33,35,37,39,41,42,43,44,45,47,50,51,52,54,55,56,58,62,63,64,65,66,67,68,69,70,71,72,73,74,78,87,89,90,91,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,111,112,114,115,116,117,118,119,121,122,124,125,127,128,129,133,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,153,154,155,156,157,158,159,161,162,163,165,166,169,173,174,175,176,177,178,179,182,184,187,189,190,191,192,193,194,195,196,197,198,199,201,203,205,206,207,209,211,212,214,215,219,220,221,222,223,225,226,228,229,230,231,235,236,237,238,239,241,242,243,245,246,247,248,249,251,252,256],archiv:[5,79,173,206,208,256],area:[10,20,24,27,29,32,43,44,63,65,68,73,86,87,90,91,93,95,97,101,104,105,106,108,109,112,113,114,115,116,117,119,120,121,122,124,139,143,144,146,147,148,150,154,157,161,162,165,173,174,175,179,183,187,191,192,194,202,203,206,210,214,215,220,221,222,228,230,232,233,235,237,241,244,247,253,254,255,257],aren:128,arg:147,argument1:158,argument2:158,argument:[19,143],argumentn:158,argv:248,around:[32,49,92,192,241],arr:234,arrai:139,arrang:[49,139,161,192],arriv:174,arrow:[22,34,69,107,124,129,134,137,143,173,181,186,220,225,255,257],art:233,articl:[4,122],artist:233,asess:142,ask:[70,72,124,128,133,134,135,137,139,142,143,174,192,251],asm:[152,167],aspect:78,assembl:228,assert:[118,124,139,140],assertequ:124,asses:[141,216],assess:[1,90,112,115,124,133,135,137,139,140,142,143,144,154,155,156,161,163,168,173,175,187,190,191,208,246,247,248,251],assesses:125,assessment_nam:[208,209],assessmentid:154,assessmentsansw:173,asset:102,assig:198,assign:[7,10,11,24,29,31,33,41,43,58,60,61,63,64,65,66,69,81,82,83,86,87,89,93,94,98,102,106,112,113,120,123,124,125,126,128,133,134,135,137,138,139,140,141,142,143,144,145,147,148,149,151,152,154,157,159,163,165,166,167,168,169,173,176,179,184,188,189,190,191,192,193,194,198,199,205,207,209,210,212,213,214,221,226,228,229,230,232,233,234,235,237,240,242,243,245,246,247,248,251,255,256,257],assignment_nam:209,assignmentignor:[149,151],assignmentnam:44,assignn:196,assist:[30,83,89,92,98,99,100,110,114,157,173,178,190,221,245],associ:[42,89,92,161,173,175,194,209,212,222],asssign:149,assum:[63,65,175],ast:173,astud:127,async:241,attach:[3,150],attain:127,attempt:[20,22,42,73,76,90,91,97,99,124,127,128,133,134,137,139,142,143,144,173,190,198,208,220],attribut:34,audio:[113,173],aug:238,august:[10,173],authent:[35,45,76,100,101,102,118,173,190],author:[2,12,62,65,66,70,72,83,85,124,138,140,143,154,161,173,175,239,251],authorassignmentignor:151,authoris:[],authorize_redirect:[100,102],authorized_kei:4,authorunitignor:151,auto:[3,42,90,91,97,99,124,148,165,166,173,182,191,192,194,205,214,215,229,251,256],autocomplet:[63,74,78,173],autograd:[90,123,125,127,134,144,173,191,248],autom:[44,126,144,173,229],automat:[1,4,10,11,12,17,20,21,23,25,31,32,35,38,40,41,42,43,44,65,76,89,90,95,98,99,105,115,124,125,126,127,139,142,143,144,146,147,155,157,159,163,165,173,178,179,183,192,206,215,221,222,228,230,231,232,234,235,236,237,242,247,248,249],automatic_complet:23,autosav:173,autumn:238,avail:[5,12,13,18,21,22,39,42,44,52,58,61,63,71,87,92,94,98,99,101,114,122,124,127,128,133,134,135,139,146,147,149,150,151,157,158,159,166,167,168,173,174,175,176,182,193,197,198,199,208,220,221,222,228,230,231,232,233,234,235,241,243,244,251],avatar:147,averag:[173,241],avoid:[6,35,37,42,43,63,64,65,118,124,148,149,173,190,194,220,241,248,251],awai:[100,228],awar:[6,16,63,64,71,93,122,161,165,175,188,227],award:[90,112,140,246],ax:157,b2b7:173,b:[25,34,157,174],back:[3,32,42,43,70,72,87,90,91,95,97,99,102,127,140,147,154,157,159,173,176,179,205,215,220,222,223,256],backend:[16,18],background:[22,89,92,139,148,173,194],backpack:173,backslash:39,backspac:[46,47,173],backtick:157,backward:147,bad:150,balanc:[34,149],bandwidth:10,bank:122,banner:222,bar:[4,14,18,19,21,24,30,32,33,36,40,46,47,48,49,50,51,56,59,61,63,64,67,68,71,74,80,81,83,84,90,91,97,99,115,127,160,171,172,173,175,176,193,215,228,243,244,245,247],barrier:165,base:[26,31,44,48,51,52,53,54,63,69,76,89,90,92,99,111,112,124,127,128,134,135,137,139,140,142,143,148,165,173,175,187,191,196,198,199,209,213,228,233,236,238,243,247],baseurl:23,bash:[17,54,125,127,128,140,143,165,173,237],basi:45,basic:[35,44,58,228,243,247,249],bb:173,bcbe:147,beautif:25,beautifi:[74,78,173],becaus:[9,32,35,58,60,95,121,125,127,134,196,235],becom:[139,149],been:[15,24,30,32,55,56,63,67,83,88,90,95,97,99,127,134,138,144,162,173,175,176,181,183,187,190,192,194,196,212,216,220,222,241,243,246,247,249,251],befor:[2,5,10,12,13,19,32,42,54,62,63,64,65,66,67,73,90,91,97,102,112,118,119,124,127,128,139,143,144,147,161,163,173,175,188,190,207,212,241],beforehand:95,begin:[1,39,56,124,128,133,134,135,137,139,142,143,147,152,155,167,173,197,248],begin_test_delimet:248,beginn:[32,233],behalf:[],behav:[42,71,158],behavior:[45,54,81,87,173,237,250],behaviour:173,behind:6,being:[30,32,54,63,64,66,81,97,101,117,121,124,127,141,142,150,163,173,175,177,188,192,201,207,228,236,243,245],belong:[13,39,121,161],below:[1,3,9,10,12,16,39,41,42,44,54,55,63,78,90,91,92,95,96,97,98,99,102,118,122,127,128,129,138,143,144,147,148,149,150,154,155,156,157,159,168,169,185,192,220,228,236,238,241,243,248,251],beneath:[66,136,144,194],benefit:[37,166],beq:228,best:[3,38,100,138,146,174,203,236,251],better:[10,54,66,173,214],between:[0,34,39,45,49,51,54,88,93,103,112,127,140,143,154,169,173,177,191,192,227,228,243,248,251],beyond:127,bg:237,bge:228,bgt:228,big:157,bill:[75,115],bin:[13,43,127,128,140,237,248],binari:173,bit:3,bitbucket:[4,37,77,173,175],bjlo2e_ch04:154,blackboard:[0,3,88,96,205,247,256],blank:[123,126,144,148,157,173,248],blastoff:165,ble:228,blob:31,block:[3,6,16,32,34,35,49,90,139,152,165,167,173,190,192,235],blocker:[],blockli:173,blog:[4,138],bloom:[124,128,133,134,135,137,139,142,143,214],blt:228,blue:[90,91,95,97,99,173,190,209,220,253,254,255,257],blueprint:[63,102],bne:228,bodi:[23,140,154,221],bold:173,book:[29,32,123,162,163,173,187,198,199,209,211],bookstor:173,border:49,both:[6,24,34,35,42,44,45,54,57,102,127,128,136,142,143,147,192,196,197,203,241,248,251],bottom:[29,32,90,91,92,95,97,99,101,102,107,122,127,165,224,228,236,243],bound:34,box:[2,7,8,10,11,12,13,16,17,18,21,24,33,35,36,42,43,44,45,50,52,56,57,58,60,61,62,63,64,66,68,69,71,90,111,115,119,121,124,127,128,133,134,135,137,138,139,142,143,147,154,157,158,161,173,174,175,177,178,185,207,219,222,228,236,237,238,241,246,251],bracket:[32,138,173],branch:[42,44,138,228],brand:32,breakpoint:21,brie:165,brief:241,brighter:173,brightspac:[92,173],bring:[49,101,231,243],brower:105,brows:[32,43,50,55,58,141,175],browser:[6,10,23,24,35,41,42,43,44,54,90,91,97,99,105,108,165,173,176,177,178,190,236,240,241],brutal:42,bubbl:229,buffer:[125,127,128],bug:[127,173],bui:122,build:[3,19,44,65,81,90,124,236],built:[3,42,54,68,81,82,138,228,243,252],bundl:29,bundler:124,button:[1,10,21,24,29,32,35,39,41,42,43,45,54,57,60,65,69,76,81,90,91,92,93,97,98,99,101,102,107,118,119,122,123,127,129,130,131,132,134,137,138,141,143,147,154,155,157,159,160,165,169,173,175,176,177,178,180,186,189,190,192,194,204,206,207,210,214,215,216,217,219,220,222,223,225,226,228,231,236,237,239,241,243,251,252,255,257],button_st:150,bx:157,c1:248,c:[13,19,20,21,25,29,39,45,49,63,124,140,143,147,152,157,165,167,173,214,241,248],cach:149,calcul:[112,127,128,157,191,193,203],calendar:[148,157,183],call:[1,13,21,29,34,90,91,95,97,102,110,115,124,127,138,143,155,173,237],callback:154,callout:173,callout_info:157,calloutinfo:157,camera:24,campu:122,can:[1,2,3,4,5,6,7,9,10,11,13,15,16,17,18,19,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83,87,88,89,90,92,93,94,95,97,98,99,100,101,102,103,104,105,106,107,108,110,111,112,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,192,193,194,195,196,197,198,199,200,201,202,203,205,206,207,209,210,212,213,214,215,216,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,248,249,251,252,254,255,256,257],cancel:173,cannot:[4,6,7,10,13,29,32,35,45,46,47,56,60,69,79,83,105,107,121,124,127,128,142,143,144,147,149,150,173,175,179,192,196,198,199,220,222,243,246,247],canva:[3,85,86,96,98,99,139,173,205,247,256],capabl:[32,56,63],captur:243,card:[122,173,236],cardhold:[],cardin:[],care:[4,29,42,65],carefulli:[],carri:[89,90,91,92,97,99,102,150,188,194],carriag:143,cartridg:[88,173],cascad:157,cat:[4,133,143],categori:[13,148,214],caus:[33,35,124,138,173],caution:[15,60,74],cd:10,cdn:[3,138],cdnj:3,ceas:21,cell:[173,248],center:[97,174],centr:254,certain:[3,156,165,220],certif:118,certifi:[53,54,64,69,84,171,172,236],cfg:237,cft:[124,128,133,134,135,137,139,142,143],chaff:231,chain:158,challeng:[124,128,133,134,135,137,139,141,142,143,148,157,228],chanc:243,chang:[5,9,10,12,18,24,29,30,33,37,40,42,43,44,48,53,55,60,64,65,66,68,71,79,81,87,89,90,91,92,93,94,98,99,101,102,105,108,110,116,119,122,127,131,137,138,144,147,154,162,165,173,175,177,178,181,183,186,187,188,189,190,191,192,194,195,196,198,199,203,206,215,216,220,222,224,225,227,229,236,239,241,243,245,246,247,248,252,254,255,257],changelog:[44,222],chapter:44,charact:[4,22,32,39,56,133,143,157,158,166,173,175,243],charg:[],charset:154,chat:[113,173,174,202],cheat:[34,124,143,251],check:[3,21,29,42,43,44,54,73,90,91,92,94,100,118,121,124,127,128,129,133,134,135,137,139,140,141,142,143,145,149,150,152,154,167,173,175,177,178,181,182,195,222,247,251],checker:[124,173,182],checkout:[32,44],checkscor:151,chevron:133,child:[102,173,175,201,204,206,227],chmod:248,chocol:157,choic:[123,126,127,129,138,148,173,175],choos:[4,5,10,12,13,14,15,19,21,23,27,28,29,32,33,35,36,40,43,46,47,48,49,50,51,56,57,58,59,60,61,63,65,68,80,81,82,90,91,92,95,102,108,112,119,123,124,128,133,134,135,137,138,139,141,142,143,144,149,159,161,166,175,176,179,181,183,184,190,191,192,194,198,199,200,201,207,208,212,214,215,220,223,237,238,243,247,253,254],chosen:[133,165],chrome:[173,241],chronolog:161,chunk:[21,148],cigar:10,circl:[63,228,229],circumst:194,clarif:[],clariti:138,classif:[],classroom:[0,88,96,173],classwork:93,clean:[32,44,64],cleanup:44,clear:[43,124,128,133,134,135,137,139,141,142,143,173,182,219],clearhiddentest:248,clearsolut:[173,248],cli:6,click:[1,4,5,10,11,12,13,14,15,16,18,19,20,21,24,27,28,29,30,32,33,35,36,39,40,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,68,69,70,72,73,74,75,76,77,79,80,81,83,84,86,90,91,92,95,97,99,101,102,104,105,106,107,108,109,112,113,114,115,116,117,119,120,121,122,123,124,127,128,129,130,131,132,133,134,135,136,137,138,139,141,142,143,144,147,148,150,155,156,157,158,159,162,163,164,165,166,169,171,172,173,174,175,176,177,178,179,181,182,183,185,186,187,188,189,190,191,192,194,195,198,199,200,201,203,204,206,207,208,209,211,212,214,215,216,217,219,220,222,223,224,225,226,228,229,230,231,232,233,234,235,236,237,238,239,240,241,243,244,245,246,247,249,250,251,252,253,254,255,257],clickabl:[112,173],client:[13,44,101,102,150,154],clike:173,clipboard:[4,29,32,44,90,91,95,97,99,157,173,239],clock:183,clone:[29,32,57,61,112,173,206,222,256],close:[1,5,21,29,34,49,50,63,92,101,146,147,149,155,157,159,169,173,174,183,190,194,209,221,236,237],close_al:158,close_fil:158,close_preview:158,close_termin:158,close_tutor:158,closest:22,cloud:[10,29,236],cloudflar:3,cloudfront:3,cluster:251,cmd:[16,25,28,34,36,38,39,45,49,150,158,169,229],cnf:[13,63,64],co:[43,44,91,97,150,230,232,233,235,237],code:[4,13,15,16,19,21,22,27,33,34,35,40,41,42,43,51,52,53,54,56,58,63,66,69,74,78,83,85,109,110,112,122,123,125,126,127,128,133,134,135,137,138,139,140,142,144,146,147,150,153,158,166,167,168,170,173,175,176,189,192,205,207,220,222,226,229,233,235,236,237,239,243,248,251,255,256,257],code_stub:[173,248],codemirror:173,codio:[0,2,3,6,7,8,9,10,11,12,13,14,16,17,18,20,22,23,25,26,28,31,33,34,35,37,39,41,42,43,44,45,48,49,51,52,53,55,56,58,61,62,64,65,66,67,68,69,70,71,72,73,74,76,77,78,82,83,84,85,86,87,89,94,98,99,100,103,107,108,110,111,112,114,115,118,119,121,122,125,126,128,133,136,138,139,140,141,142,143,146,147,148,149,150,151,154,156,157,158,159,161,163,165,167,169,170,171,172,173,175,176,178,190,196,197,201,202,205,206,211,213,215,221,223,227,228,230,231,232,233,234,235,236,237,238,242,243,247,248,250,251,252,255,256,257],codio_assignment_id:127,codio_autograde_env:[127,173],codio_autograde_url:127,codio_autograde_v2_url:127,codio_class_target_id:[98,99],codio_course_id:127,codio_custom_mentor_for:97,codio_free_text_answ:128,codio_guid:127,codio_paramet:138,codio_partial_points_url:140,codio_partial_points_v2_url:[128,140],codio_production_client_id:44,codio_production_secret_id:44,codio_project_id:127,codio_unit_data:127,codioignor:[43,151],codiomenu:173,coffe:39,coffescript:[152,167],cog:251,cohort:[149,197],collabor:[32,44,66,173],collaps:[147,159,173,215,230,232,234,235],collat:39,collect:[29,78,84,161,172,173,175,213],colon:56,color:[22,30,78,133,173,245],colou:133,colour:[133,173],column:[78,102,112,134,149,159,173,225,243,249],com:[3,4,13,24,29,31,32,42,43,44,53,54,56,61,63,90,91,92,97,100,101,102,105,111,122,127,138,146,149,150,154,158,173,176,201,230,231,232,233,235,237,241],combin:[2,44,58,62,69,125,165,191,228,243],come:[32,156,228,243],comfort:140,comma:97,command:[1,2,5,6,7,9,10,13,16,19,29,35,45,54,58,62,63,64,124,125,128,134,138,139,142,143,146,147,149,150,154,155,156,157,159,173,228,236,241],comment:[43,68,134,135,147,152,165,167,173,208,221,235,246],commit:[44,103],common:[32,51,54,63,67,69,88,150,173],commonli:[2,44,62,157,173],commun:[3,11,76,154,233,235],compani:[],compar:[43,139,143,251],comparison:[143,251],compat:127,compil:[19,33,124,142,143,147,150,173,209],complet:[10,16,19,29,33,34,39,41,42,49,63,68,87,89,90,92,94,95,98,99,102,104,105,106,112,119,124,127,128,133,134,135,137,139,142,143,147,154,159,173,175,178,180,181,182,183,185,186,188,190,191,194,195,196,201,203,206,208,215,220,221,226,228,236,241,243,246,247,248,249,251,255,257],completedd:127,complex:[2,10,13,34,42,62,66,124,173,211,228],complianc:103,compon:[8,10,11,12,13,15,20,52,53,54,63,65,66,68,69,92,159,169,173,185,236],compos:[63,139],comprehens:[32,38],compris:169,comput:[50,146,228,235,241],concept:[13,65,85,156],concern:243,concis:[83,231],condit:[187,228],conf:[10,17,63,64],config:[10,14,63,64,66,91,99,124],configur:[2,3,10,11,13,17,19,21,23,31,32,35,40,41,42,44,49,54,55,58,62,63,66,69,86,87,90,91,95,97,99,101,115,118,124,147,149,165,169,173,190,192,236,237,251],confirm:[32,55,97,104,109,122,142,173,175,178,179,207,216,220,222],conflict:[10,29,45,122],confus:[42,173],connect:[18,35,42,44,63,76,77,86,90,91,93,94,95,97,98,102,143,173,174,175,190,242],consent:[115,173,239],consequ:145,consid:[64,66,104,148,149,251],consider:[63,220],consist:[173,247],consol:[21,45,110,143,150],constant:[95,98,101,173],constitu:90,constitut:161,construct:[139,226],consum:[0,88,90,91,92,95,97,99,118],consumpt:149,contact:[3,20,32,61,73,83,92,94,100,110,111,115,122,173,174,190],contain:[3,6,10,20,21,41,43,44,52,54,58,63,65,66,98,104,105,112,119,124,125,127,133,136,143,146,150,154,157,158,161,165,166,169,173,175,185,189,191,209,214,220,225,236],content:[1,2,3,10,12,13,21,30,34,38,42,44,47,62,65,66,69,79,89,91,92,94,98,99,101,103,105,110,119,121,124,125,127,128,133,134,135,137,139,140,142,143,144,145,146,155,161,163,165,170,173,176,177,178,186,189,196,205,206,214,220,226,227,229,236,237,239,243,248,256],content_fil:248,context:[23,34,39,46,47,50,59,173,206,226,243],contigu:143,continu:[3,10,21,57,63,103,119,173,174,179,189,190,192,206,220,239,248],contrast:173,control:[1,4,32,38,39,44,49,54,108,139,143,144,150,154,155,157,169,173,175,187,192,229],convei:[125,214],convent:124,convers:174,convert:[157,220],cooki:[24,173],copi:[0,4,13,16,29,32,42,43,44,56,58,60,81,85,88,90,91,92,95,97,99,105,118,124,125,129,130,157,165,173,175,176,177,178,184,192,207,220,222,239,241,251],core:[100,149],corner:[48,51,59,82,83,102,104,105,106,108,109,112,113,114,115,116,117,119,120,121,122,206,212,216,217,220,222,240,241],corpor:[16,35],correct:[22,42,80,90,91,94,97,99,127,133,135,137,139,140,142,145,146,148,165,173,176,231,236],correctli:[3,25,55,124,127,128,133,134,137,141,173],correspond:[92,99,102,112,124],could:[3,42,43,65,71,124,125,128,133,134,135,137,139,142,143,251],count:[32,135,158,165,173,208,238,243],countdown:165,countri:122,coupl:41,courier:157,cours:[0,2,3,11,12,43,44,61,62,64,65,66,71,84,85,86,87,88,89,93,94,105,106,107,108,115,116,117,120,121,123,124,126,127,128,133,134,137,138,139,142,143,144,148,151,157,159,166,167,168,172,173,174,180,181,182,183,187,189,190,191,192,193,195,196,200,208,210,212,213,219,220,221,225,226,227,229,230,232,237,246,247,248,249,253,254,255,257],course_navig:102,courseoff:[98,99,173],courser:173,coursework:161,cover:[69,78,214],coverag:231,cp:[143,158],cpp:[143,147,152,167],creat:[1,2,4,6,8,10,11,15,18,20,29,35,41,43,44,46,47,53,55,57,60,62,64,65,66,67,68,71,73,76,78,84,88,89,90,91,93,94,95,97,98,99,104,105,115,116,118,119,121,123,124,125,127,128,130,133,134,136,137,139,142,143,146,148,149,154,155,157,159,161,162,165,169,170,171,172,173,176,181,192,196,201,204,205,208,209,212,213,220,221,222,227,230,232,234,235,236,237,238,239,241,243,248,251,256],creation:[0,32,54,88,157,173,238],creativ:233,credenti:[29,43,45,173],credit:[122,124,127,173,208],criteria:[56,69,140,173,238],criterion:112,cross:[3,148,251],crunch:[83,173,192,231],cs:[152,167,173],css:[12,26,34,35,83,152,165,167,231,236],csv:[92,95,99,119,173,175,182,186,208,209,219],csvfile:173,ctrl:[12,22,23,25,28,29,34,36,38,45,49,63,83,169,229],cue:173,cultiv:233,cumul:194,curl:[13,127,128,140],curli:138,current:[12,21,23,24,30,32,34,35,39,40,42,43,45,48,61,68,73,81,83,94,115,118,124,127,128,133,134,135,137,139,142,143,154,159,163,173,195,209,211,214,220,221,222,231,236,241,245,247,251],currentpag:[110,173],cursor:[22,23,27,34,173,192,211,252],custom:[3,18,21,25,32,34,35,41,42,49,58,63,66,75,76,78,87,95,97,98,99,115,118,125,127,142,143,154,173,174,191,206,226,241,248],custom_codio_course_offering_sourcedid:[98,99,173],custom_codio_send_grad:87,customis:[87,173,188],customiz:[6,58,63],cut:125,cybersecur:[83,231],cycl:49,d2l:[0,3,88,96,173,205,256],d3e6bb1:32,d5acfd16bb506756595cef3399e1:44,d5acfd16bb506756595cef3399e1d4:44,d:[25,34,64,124,127,128,133,237,241],da14ae918fd9bc3b:102,daemon:[17,42],dai:[5,173,190,194,209],daili:[],danger:65,dare:239,dark:[18,159,173],dart:[152,167],dash:243,dashboard:[32,43,51,56,61,65,90,91,92,95,99,101,102,115,122,124,126,128,133,134,135,137,139,141,142,143,144,147,148,159,161,173,175,183,195,203,206,219,222,226,228,236,238,240,243,247],data:[3,21,55,60,64,79,86,90,103,125,127,128,143,150,154,157,166,173,175,176,182,205,207,214,247,251,255,256,257],data_stor:13,databas:[8,13,53,64,66,69,143],dataset:[138,251],date:[10,32,56,119,122,127,144,163,173,179,183,194,206,208,209,219,220,221,238,243,246],datetim:127,db_host:143,db_name:143,db_pass:143,db_port:143,db_user:143,dbname:143,dd949669:173,deadlin:[173,221,246],debconf:13,debug:[20,147,148,157,173,243],debugg:[147,173,229],dec:[34,228,238],decemb:173,decid:[139,144,163,175,194,249],decis:[229,251],declar:[138,140],declin:[],decod:138,decrement:228,dedic:[14,42,150,153],deduct:[137,144,145,194,246],deep:[100,101],deeplink:173,def:[127,128,140,152,167,248],defin:[35,39,42,43,44,63,124,128,133,134,137,139,140,141,143,144,146,151,157,158,159,173,237],definit:[12,22,148,157,173],degrad:149,del:[46,47],delet:[15,32,51,61,115,117,121,125,126,162,173,175,176,209,220,243,244,247,248],delimetera:248,delimit:[56,173],delimterb:248,deliv:[2,62,66],demand:[11,84,172],demo:[10,20,32,121,124,127,139,143,233],demonstr:[30,102,245],deni:[4,24,192],deno:[20,173],denot:[39,246],depart:[3,213],depend:[4,5,9,14,19,40,42,53,54,63,100,114,127,134,138,143,147,149,212,241],depict:92,deploy:[13,60,101,102,173],depositori:79,depth:169,desc:56,describ:[18,29,32,39,42,45,54,63,65,68,124,125,128,133,134,135,137,139,140,141,142,143,157,236,238],descript:[13,52,53,56,58,61,63,68,69,92,102,139,173,175,194,220,222,228,243],deselect:[108,139,203],design:[85,87,149,152,157,163,164,167,233,251],desir:[30,191,220,225,248],desire2learn:[],desktop:[10,50,173,235],dest:13,destin:[169,228],destruct:15,detail:[8,11,14,17,19,21,22,23,29,32,35,42,45,53,63,81,86,89,91,97,102,147,148,157,164,165,168,169,173,175,179,183,194,201,202,203,204,206,207,222,224,226,239,241],detect:[3,95,98,99,173,214,243,251],determin:[116,118,126,127,211,243,251],dev:[63,140,237],develop:[3,26,42,63,85,89,92,138,147,221,235,236,241],development_tool:13,devic:[3,35,190],df:149,diagnos:6,diagnost:3,diagram:229,dialog:[18,36,39,40,42,46,47,50,55,57,61,65,69,104,127,134,140,143,158,173,176,178,179,184,194,207,209,212,214,215,222],dialogu:219,dict:138,dictionari:138,did:[42,127,128,243,252],differ:[19,27,34,44,49,68,69,70,72,87,89,91,102,108,114,118,127,130,137,140,143,148,154,161,169,173,175,183,184,190,191,206,214,220,226,243],difficulti:[3,214],digit:[39,133],dimens:243,dimension:[112,247],dir:44,direct:[23,88,91,95,96,99,165,202,229,241],directli:[29,42,89,92,105,118,146,165,173,174,202,211,242,243],directori:[32,33,39,44,124,125,148,166,173,237,241],disabl:[21,23,24,52,61,98,101,113,115,124,127,128,133,134,135,137,139,142,143,144,163,173,183,184,185,190,191,220,239],discard:[32,39,220],disciplin:148,disclos:[],disconnect:[43,173,216],discov:156,discuss:[61,111,114,163,173],dismiss:101,disown:5,displai:[4,10,19,21,23,29,32,39,40,42,48,51,52,54,56,58,63,66,78,81,82,97,102,104,105,108,112,114,115,117,119,124,127,128,133,134,135,137,138,139,140,141,142,143,144,150,154,157,159,162,163,165,166,173,176,183,194,195,201,211,215,216,222,228,238,239,243,246,248,251,253,254,255,257],displayimag:146,distinct:34,distract:[139,166],distractor:[139,173],distrib:63,distribut:[1,112,118,155],div:[22,32],divid:238,divis:192,divisor:133,dob:157,doc:[29,32,63,146,148],document:[3,4,6,22,23,26,29,45,63,66,92,98,99,110,122,148,157,173,251],doe:[21,32,35,42,55,65,86,90,91,92,94,95,97,99,104,106,121,125,127,138,141,142,147,149,157,161,165,174,236,241,251,253],doesn:[],dolo:[173,251],dom:139,domain3000:[16,35,147],domain3050:[10,237],domain4000:41,domain5000:158,domain80:[16,35],domain:[3,6,10,16,35,42,43,44,54,90,91,95,100,101,102,147,236],don:[19,32,54,65,81,97,100,127,147,171,194,228,230,232,234,235,251],done:[42,45,65,92,94,99,119,125,127,150,180,192,220,228,241,247],dot:[21,90,91,95,97,99,173,179,182,190,194,201,208,209,220,244,253,254],doubl:[39,138,158,173],down:[3,14,19,21,29,32,33,34,35,42,49,56,58,63,65,68,81,91,92,97,99,101,102,104,105,107,108,119,124,126,128,129,133,134,135,136,137,139,142,143,159,165,173,181,183,186,191,192,198,199,206,212,214,215,219,220,225,226,247,252],download:[35,43,51,85,95,99,119,143,149,173,175,182,186,208,209,219,222,235,237,241],dphi:157,draft:[119,173,239,246],drag:[27,33,46,47,49,50,81,124,128,139,142,143,146,165,173,192,220,225,228,237,252],draw:[49,139,156,233],drawback:[144,161],drawn:[139,141,237],drill:[],driven:[143,144],driver:[],drop:[3,14,19,21,29,32,33,35,42,46,47,50,56,58,63,68,81,104,105,107,108,119,124,126,128,133,134,135,136,137,139,142,143,146,159,165,173,181,183,191,192,198,199,206,212,214,215,219,220,225,247,252],dropdown:[42,91,97,147,154,166,196,228,231,236],dt:157,du:149,due:[3,5,34,64,66,98,99,117,122,127,138,221,243],dummi:251,duplic:[30,63,141,173,190,220],durat:[163,173,185,194,219,221],dure:[29,125,138,146,149,173],dynam:[35,56,61,147,173,246],dyselexia:82,dyslex:[82,147,159],dyslexia:[1,103,147,155],e:[25,98,127,138,147,157,173,192,237,243,251],each:[2,3,13,14,29,33,37,39,42,44,52,62,64,65,71,86,90,91,92,95,97,99,100,101,102,112,117,124,127,133,137,139,141,142,143,144,148,157,159,161,165,166,174,190,191,192,203,208,209,222,223,228,235,243,246,251],earlier:[3,32,90,92,101,173],earn:[87,124,128,140,173,203],eas:173,easi:[2,22,42,51,53,62,90,91,93,94,95,97,146,161,173],easier:[13,68,100,135,148,231],easiest:4,easili:[35,41,49,53,54,83,93,124,125,149,157,173,195,231,238],echo:[13,127,128],eclips:78,ecmascript:173,edg:[3,173],edit:[1,16,17,25,30,32,37,43,55,56,60,63,64,66,68,69,90,91,92,97,98,99,102,105,107,108,119,121,123,124,126,127,130,141,142,144,150,151,152,155,160,161,162,163,164,166,167,170,173,175,177,178,186,192,206,215,216,217,220,221,222,225,226,239,241,243,244,245,246,247,248],editor:[4,22,34,41,45,78,102,121,123,129,130,131,132,138,140,146,147,148,157,160,164,173,177,178,215,216,217,223,229,237],editor_button:102,edu:[124,128,133,134,135,137,139,142,143],eduappcent:97,educ:[3,56,80,81,95,103,106,113,114,115,120,124,127,128,133,134,135,137,139,142,143,146,163,173,175,180,191,220,233,241,243,244,247,250],effect:[10,43,144,174,202],effici:[65,66],either:[10,29,42,43,58,65,92,97,107,118,120,124,125,127,130,131,133,136,138,144,146,157,159,161,173,174,175,176,180,203,216,217,228,229,230,232,233,235,236,237,241,255,257],elect:3,element:[34,139,157,169,173,229],elif:127,elimin:144,elm:[152,167],els:[25,32,55,56,122,127,128,140,141,165],email:[3,32,40,53,63,73,79,88,89,90,92,94,95,97,104,105,110,119,122,127,173,174,177,178,208,209,231,240,241],emb:[40,146,148],embed:[146,148,165,173],emmet:[22,26,34],emphasi:122,empti:[8,10,32,34,57,58,78,90,91,92,97,99,142,157,165,173,175,192,232,234,235,236,246,248],en:[24,32,138],enabl:[23,24,31,35,39,52,54,55,58,61,66,69,82,83,87,89,94,97,98,99,101,113,115,120,121,124,127,128,133,134,137,139,140,142,143,144,159,163,166,168,173,175,180,181,184,186,187,188,189,190,191,192,193,195,196,197,203,205,219,220,221,239,242,247,248,256],enable_lsp_support:12,encapsul:157,enclos:[39,158,168],encount:[21,165,166],encourag:196,encrypt:44,end:[39,42,49,56,91,102,127,133,144,152,163,167,173,175,183,236,237,248],end_test_delimet:248,endp:173,endpoint:[101,118],engag:174,engin:[229,251],enhanc:[26,173],enlarg:173,enough:[141,190,197],ensur:[3,33,42,63,66,90,91,92,94,97,99,122,124,136,138,173,190,197,212,219,223,247],enter:[3,4,5,12,19,22,23,24,25,27,29,32,35,36,41,42,43,45,46,47,52,56,58,60,63,68,69,73,77,90,91,92,95,97,99,101,102,104,105,107,109,110,112,114,119,122,124,127,128,133,134,135,136,137,138,139,141,142,143,150,151,156,157,165,173,175,176,177,178,179,186,190,191,202,207,215,220,221,222,225,228,236,239,244,246,247,251],entir:[13,42,143,144,163,175,176,192,220,236,253],entri:[13,21,35,42,71,110,136,166,173,236],enumer:157,env:[127,128,140,248],environ:[75,101,125,127,128,138,140,147,173,230,232,234,235,241],ephemer:125,eq:[127,128],equal:[124,128,133,134,137,139,140,143,192,228,243],equat:157,equival:[34,39,42,98],erl:[152,167],error:[42,43,44,81,127,138,139,143,150,173,212,243,248,251],escap:39,especi:[66,122,159],essenti:161,establish:29,etc:[3,6,10,15,32,35,42,45,52,63,64,68,69,78,85,143,157,159,161,173,192,212,213,233,237],europ:43,ev:150,evalu:[34,127,206,226],evaul:90,even:[3,32,33,54,63,87,97,124,125,127,136,138,157,174,175,191,197,231],evenli:124,event:[44,89,92,122,173],ever:122,evergreen:138,everi:[22,34,44,87,141,246],everyon:[78,121],everyth:[9,32,65,66,67,92,116,143,233,241],ex:[152,167],exact:[40,190],exactli:[97,150,192],exam:[144,173,185],exampl:[10,12,16,20,21,23,25,31,32,35,39,41,42,43,54,56,64,78,87,97,110,117,118,129,133,134,135,137,139,142,143,146,147,148,149,150,151,152,154,156,161,167,168,173,175,191,203,214,215,237,241],exce:143,exceed:[127,194],excel:[156,161],except:[39,58,65,138,158],exchang:29,exclud:[149,173,196,203,251],exclus:[3,173],exec:[142,143,173,241],execut:[13,16,19,21,35,44,124,125,127,128,133,134,135,137,138,139,140,141,142,143,150,154,165,167,173,228,229,237,241,248],executable_cod:139,executepreprocessor:248,exercis:[139,148],exist:[16,29,32,35,43,45,55,64,66,89,92,98,101,102,106,116,122,125,129,130,143,159,162,170,173,175,192,196,201,212,213,220,222,229,236],exit:[5,17,21,29,49,63,127,128,140,147,173],expand:[22,34,49,81,102,173,208,220],expans:39,expect:[45,124,133,137,139,143,173],experi:[3,10,103,149,189,226,228],experienc:3,expir:[122,173,219],explain:[3,10,32,90,94,127,156,222,228,251],explan:[214,228],explanatori:[58,173],explicit:23,explicitli:[32,124,228],explor:[3,50],express:[21,34,39,54,133,136,173,229,243],expressj:54,ext:[16,19,63],extend:[173,190,194,248],extens:[16,31,44,46,101,148,161,228,229,251],extern:[4,35,76,89,90,91,94,95,97,98,99,101,102,124,128,133,134,135,137,139,142,143,159,165,173,242],extra:[127,173,192,208],extra_credit:127,extract:142,extrem:[150,231],f10:173,f11:49,f12:3,f:[25,39,69,173],face:197,facebook:40,facilit:[127,143],factor:127,faculti:[89,107,148],fail:[6,33,42,66,124,127,142,143,173],failur:[112,127,150,173],fair:149,fairli:15,fals:[23,124,147,208,248],famili:103,familiar:[2,17,29,62,63,65,239],far:[19,69,112,173,194,208,220,223,236,255,257],fast:[3,10],faster:54,favicon:102,fc0:22,featur:[1,3,4,5,7,12,25,27,35,36,39,42,56,63,81,82,85,89,106,112,113,116,120,124,127,139,144,147,148,155,163,164,171,173,181,189,193,206,219,221,228,235,238,241,242,243,247,250],februari:173,febuari:173,fed:[205,256],feder:103,feed:143,feedback:[87,125,127,128,139,140,142,143,144,148,173,179,221,241,246,247,248,251],feedback_buff:128,feedbackdback:173,feel:[140,190,228],fetch:140,few:[1,10,12,13,15,17,21,32,63,65,68,155,236],fewer:23,ff65:173,ff:173,fi:[127,128],field:[13,16,19,29,32,33,39,41,44,55,63,69,90,91,92,94,95,97,98,99,102,114,118,122,124,127,128,133,134,135,136,137,138,139,141,142,143,156,165,166,173,178,191,194,201,206,215,224,228,231,236,237,246,247],file1:158,file2:158,file3:158,file4:158,file:[1,3,4,6,10,12,13,14,15,16,17,18,19,21,23,26,30,31,33,34,35,36,37,39,40,41,47,49,51,56,57,58,61,63,64,66,74,80,91,92,94,95,119,124,125,127,128,133,134,135,137,138,139,140,142,146,149,153,154,155,159,160,163,164,169,173,175,182,187,188,192,196,208,209,212,220,221,230,232,234,235,237,243,244,245,247,251,252],file_nam:138,filen:158,filenam:[16,32,39,41,69,142,143,147,236,245],filename_no_ext:[16,147],filepath:[16,19,35,127,147],fileserv:5,filetre:[1,18,35,46,47,48,49,50,51,59,74,147,155,165,241],fill:[92,95,123,126,144,148,173],filter:[89,129,141,173,213,214,215,238,243,247,251],financi:122,find:[10,12,13,22,24,39,42,49,63,65,68,69,81,91,97,99,102,118,127,138,154,156,161,173,174,176,194,200,214,216,217,220,228,230,232,233,235,237,240,243,252,253,254],fine:[3,64,67,243],finer:143,fingerprint:251,finish:[68,221],fire:154,firebal:239,firefox:173,firewal:[6,16,35,63],first:[10,19,21,29,32,39,42,43,51,54,61,64,65,66,78,90,92,94,98,101,111,112,118,122,124,127,138,143,154,157,165,166,169,173,175,178,196,206,209,215,228,237,238,239,251,255,257],first_nam:[208,209],firstnam:118,fitb:173,five:[],fix:[65,127,173],flag:[173,243],flexibl:150,flip:192,flode:192,flow:[124,128,133,134,135,137,139,142,143],flowchart:229,fmai:42,fn:[46,47],focu:[30,35,49,139,173,192,228,233,245,252],focus:233,folder:[4,9,15,33,39,44,46,50,51,57,59,64,65,66,67,81,86,124,127,128,142,143,146,149,159,165,169,173,196,236,241,248,252],folder_nam:138,folk:229,follow:[1,2,3,4,5,6,10,11,12,13,15,16,18,19,20,21,24,25,28,29,30,32,33,35,36,39,40,41,42,44,46,47,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,68,69,73,74,75,81,82,83,89,90,91,92,94,95,97,99,100,101,102,104,105,106,108,112,113,114,115,116,117,119,120,121,122,123,124,126,127,128,129,132,133,134,135,137,138,139,140,142,143,144,146,147,148,149,150,155,157,158,161,165,168,169,175,176,177,178,179,181,183,185,187,188,189,192,194,195,198,199,200,201,204,206,207,208,209,212,214,215,216,217,219,220,222,223,224,225,228,233,236,237,238,239,241,246,247,248,249,251,254,256],font:[3,18,35,78,147,157,173],font_siz:[18,78],footer:[32,166],forc:[16,25,125,140,173,191,194],forget:144,forgotten:[73,240],fork:[11,13,29,173],form:[19,35,95,110,115,139,140,161,173,201,206,214,243],format:[25,40,48,91,119,124,127,128,134,140,143,148,150,156,157,165,173,186,239],format_v2_html:[127,128,140],format_v2_md:[127,128,140],format_v2_txt:[127,128,140],formerli:26,formula:[128,134],forum:[114,173,174,202],forward:[61,147,173,190,215],found:[4,13,25,34,44,63,124,125,127,128,139,154,157,161,228],four:[127,195],frac:[156,157],fraction:[185,191],frame:173,framebord:146,framework:[74,78,124,139],fraud:122,free:[123,125,126,133,144,145,148,156,173,186,194,251],freez:[165,173],frequent:[],fresh:[5,15],friend:156,friendli:[13,45],from:[1,2,4,7,8,9,10,13,14,15,17,18,20,21,22,28,29,33,34,35,36,37,39,40,42,43,45,46,47,48,49,50,52,54,55,56,58,59,60,61,62,64,65,67,71,73,74,75,76,78,79,80,81,87,89,90,91,92,93,95,97,98,99,100,102,104,105,108,110,112,113,117,118,121,122,124,125,126,127,128,133,134,135,137,139,140,142,143,144,145,146,147,149,150,151,153,154,155,157,159,160,162,163,165,166,168,169,173,174,175,176,177,180,181,182,183,185,186,187,188,189,190,191,192,194,198,199,201,203,204,205,207,209,212,213,215,216,219,220,221,226,227,228,229,230,231,232,234,235,237,240,241,242,243,244,246,247,248,250,251,253,254,255,256,257],front:[42,51,236],fs:[152,167],fssl:[13,127],full:[6,11,16,19,23,34,37,42,49,53,54,58,60,63,69,78,105,108,124,127,136,157,173,198,228,233,246],full_path:143,fulli:[2,6,11,52,62,66,129,136,190,236,241],fullnam:127,fullscreen:173,fund:[],fundament:165,further:[42,92,173,221],futur:[43,89,165,174,197,209,221,222,227,241],g:[16,39,54,98,124,138,143,147,157,173,192,243,251],gain:[4,126,250],gather:3,gb:111,gbd:20,gcc:143,gcse:236,gdb:[20,21,147,173],gear:[5,56,61,67,82,102,173,185,191,219,223],gem:[15,124],gemfil:124,gener:[3,5,6,32,34,35,38,40,42,54,63,68,76,81,93,101,122,124,127,128,133,134,135,137,138,139,140,141,142,143,156,173,200,239,243,251],get:[2,4,5,8,14,29,32,42,44,51,53,54,58,62,63,64,65,66,69,70,72,74,85,91,92,97,111,122,127,140,141,143,146,154,173,175,192,228,230,232,233,235,236,237,241],get_config:248,giga:185,gigabox:[58,61,115,149,173,220],gist:127,git:[8,37,38,52,54,58,63,74,78,173,196,251],github:[4,11,13,31,37,74,77,78,127,138,149,175,251],github_user_nam:138,githubusercont:[127,138],give:[24,29,32,37,49,54,63,102,107,114,134,140,141,142,159,187,228,236,241],given:[39,107,115,124,128,134,137,142,143,174,228,243],glob:69,global:[52,90,91,97,107,124,147,150,154,173,213,215,231,251],globstar:39,go:[3,10,12,20,32,43,44,45,65,66,71,87,90,91,92,93,94,95,97,98,99,101,102,109,118,124,139,141,143,144,146,150,152,159,167,173,174,176,191,202,210,220,221,222,223,225,228,236,237,238,241,243,244],goal:[124,128,133,134,135,137,139,142,143],good:[65,66,125,150,154,228],googl:[0,17,88,96,124,146,148,156,173],googledoc:192,googletest:124,got:127,gotonextsect:154,gotoprevioussect:154,gotosectiontitl:154,govern:[103,169],gpu:[111,173],gradabl:142,grade:[0,1,88,90,91,92,95,97,101,115,124,126,133,137,139,141,142,143,144,145,147,148,155,173,179,182,185,194,196,198,199,205,208,212,214,219,229,243,251,256],grade_releas:87,gradebook:[90,95,127,138,182,247],grader:[101,248],gradient:[22,27],gradual:[228,233],grain:243,grand:173,grant:[7,24,30,104,173,190,192,204],graph:251,graphic:[10,139,236,237,243],gravatar:[3,51,70,72,73,75,77,79,107,122],great:[32,42,228],greater:[124,127,128,133,134,137,139,143,192,228,243],greatli:13,green:[29,140,185,243,247],grid:[108,112,247],group:[103,121,141,161,173,205,213,238,256],grow:161,growth:148,growthhack:157,grunt:54,gruntfil:39,gruntj:54,gstatic:3,guarante:165,guess:137,guid:[2,16,17,24,29,40,41,44,58,62,80,84,85,90,122,123,124,125,127,128,129,130,131,132,133,134,135,137,138,139,141,142,143,144,146,154,157,158,159,160,161,162,165,167,168,169,170,172,173,189,192,196,209,212,215,216,217,223,230,232,234,235,237,243,244,248],guidanc:[112,124,128,133,134,137,139,142,143,157,167,168,173,174,223,247],guidelin:[4,103,173],gutter:[21,244,247],h2:[128,140],h6:157,h:[22,49,149,152,167],ha:[4,10,13,24,26,32,35,37,39,40,42,52,55,56,63,64,65,67,68,82,83,88,89,90,92,95,99,112,121,122,124,127,128,133,138,141,144,156,158,173,175,183,190,191,192,194,211,212,216,222,233,235,236,237,241,243,246,247,249,251],hack:148,hackathon:[148,157],had:[52,162,174,243],half:143,hamburg:[],hand:[90,91,97,107,138,144,156,157,173,207,226,228,243,244,247],handi:144,handl:[64,89,150,151,173],happen:[3,165,183],happi:239,hard:[29,161],hardcod:138,harder:154,hashed_id:[208,209],haskel:65,hasn:[87,173],hat:133,have:[3,4,5,10,15,18,20,21,22,24,29,30,32,34,37,39,41,42,43,44,45,49,52,54,55,56,58,60,61,63,64,65,66,67,68,71,73,76,83,90,91,92,94,95,97,99,100,101,104,105,107,108,111,114,115,118,119,121,122,124,125,127,128,133,134,137,138,139,141,142,143,147,148,149,152,154,157,161,163,165,166,167,168,169,173,174,175,176,180,181,182,184,185,187,190,191,192,194,196,197,202,204,208,209,212,214,215,221,222,223,227,228,229,230,231,232,233,235,236,237,238,239,240,243,246,247,248,250,251,252,255,257],haven:[97,248],hc:133,he:43,head:[29,32,92,154,255,257],head_commit:44,header:[95,140,160,166],headlin:148,hear:174,heaviest:149,height:[146,237],hello:[21,84,152,167,172,230,232,233,235],hello_world:39,help:[3,4,34,43,53,54,58,61,63,83,94,110,111,114,115,122,142,147,148,167,173,174,179,214,228,230,231,232,233,235,237,241,243],helper:[124,127,143,173,191],helper_mssql:143,helper_mysql:143,helper_postgr:143,her:[],here:[1,3,10,13,16,29,32,35,42,43,54,63,87,90,91,97,107,127,136,138,141,144,146,147,148,150,154,155,156,157,158,163,164,165,166,167,169,175,183,184,230,232,233,234,235,236,237,239,248],hesit:100,hex:27,hg:173,hi:[],hidden:[22,129,147,153,157,165,166,190,247,248],hide:[3,115,124,125,128,133,134,137,139,142,143,147,148,157,159,168,169,173,188],high:[11,42,243],higher:250,highest:74,highli:[3,65,196],highlight:[39,42,48,129,139,146,149,152,157,158,159,162,169,173,185,228,229,245,246],higlighlight:165,higlight:[173,243],hint:173,histori:[3,18,44,75,173,220,222],hit:24,hoc:[45,161,173],hold:[30,175],holder:[],home:[9,13,16,17,23,31,32,33,35,39,42,51,54,66,67,69,71,91,97,99,125,127,165,173,241,248],homepag:92,homework:161,honor:[],hook:[173,248],horizont:[49,179,182,190,194,201],host:[13,42,148,241],hostnam:45,hotkei:[18,33,39,157,173],hour:[173,190,194,197],hover:[27,30,90,120,173,182,194,219,228,229,244,245,247],how:[2,3,4,8,10,11,13,14,23,24,32,40,42,43,45,54,56,58,62,63,66,69,71,81,84,89,90,91,94,97,99,103,107,118,126,127,140,141,143,149,157,164,166,169,172,199,211,223,228,236,239,252],howev:[2,3,7,13,20,29,32,35,42,62,63,64,65,66,68,104,106,156,157,169,175,194,222,231,248],hpp:[152,167],hr:157,href:[22,146,154],hs:[149,152,167],hsla:27,html:[1,6,12,26,32,34,35,39,40,63,83,119,127,140,146,148,150,152,155,159,165,166,167,169,173,231,236,239,248,251],html_path:248,http:[4,6,10,13,16,22,24,29,31,32,35,41,42,43,52,54,56,63,92,97,100,101,102,110,118,124,127,128,133,134,135,137,138,139,140,142,143,146,147,150,154,158,165,173,176,236,237,241,251],httpd:63,hub:173,human:[29,32],hyperlink:158,hypertext:157,hyphen:39,i:[24,133,156,157,173,243],ibrwe2159f50:24,ico:[],icon:[3,5,10,11,12,18,24,30,32,43,45,56,58,61,67,69,81,82,83,90,91,95,97,99,102,104,105,106,108,109,112,113,114,115,116,117,119,120,121,134,146,147,148,150,152,159,160,163,164,169,173,181,182,183,185,190,194,206,211,220,222,229,231,236,239,240,245,246,247,251,252,253,254],id1:63,id:[1,2,16,18,22,26,40,49,56,58,62,65,66,95,97,98,100,101,102,119,125,139,141,142,150,154,155,159,163,165,169,173,175,188,206,226,243,247,251],id_rsa:4,idea:[173,174,221,241],ideal:[63,65,156],ident:118,identif:[129,173],identifi:[44,89,92,99,134,141,173],ie11:173,ie:[173,203,241],ifram:[101,165,173],ignor:[39,44,125,143,173,243],illustr:65,imag:[3,22,32,34,35,44,52,63,102,129,138,143,148,156,165,169,173,185,212,229,243],img:[125,146,148,157],immedi:228,immut:128,impact:[32,55],impair:173,implement:[12,34,94,97,98,99,100,122,124,127,173,236],importantfil:23,importgiturl:32,importtyp:32,improv:[63,100,103,173,174],imscc:94,inact:[5,17,173,241],inbox:73,inc:[34,228],includ:[3,10,14,17,19,21,32,33,34,35,39,43,44,45,49,53,54,58,61,63,64,66,67,69,86,101,102,110,112,115,118,124,125,126,128,133,134,135,137,139,141,142,143,144,146,149,150,151,157,158,159,165,167,173,175,178,182,191,193,194,196,203,206,208,209,211,213,214,220,221,222,223,229,246,251],inclus:39,incognito:241,incom:4,incompat:173,incomplet:[87,173,188,221,247],incorpor:66,incorrect:[66,133,134,137,139,140,145,173],incorrectli:[4,173],increas:[122,173,194,228],increment:[173,194,228],indent:[25,34,78,139],indent_level:78,indent_with_tab:78,independ:[33,64,127],index:[16,32,35,39,85,147,157,159,163,165,168,169,248],index_from:248,index_to:248,indic:[30,35,44,138,141,150,183,185,190,215,222,243,246,247],individu:[42,50,64,65,75,86,87,90,91,97,99,101,106,120,122,124,125,141,144,154,161,163,169,173,192,209,241,243,255,257],indvidu:[255,257],infin:157,info:[10,14,63,127,148,157],inform:[0,3,4,6,7,11,13,18,23,24,26,31,32,33,35,41,42,45,53,54,56,58,61,63,64,66,67,69,77,83,84,86,87,88,99,100,102,105,112,115,119,124,125,127,128,133,134,136,137,139,141,142,143,144,147,150,154,157,159,165,166,167,168,169,172,173,175,181,182,184,186,191,194,203,208,212,218,227,230,231,232,234,235,236,243,246,247,248,251],infrastructur:10,inher:227,inherit:[71,159,204],ini:63,init:[10,32],initcod:139,initi:[29,32,61,88,89,101,102,111,128,135,139,140,147,173,192,196,236],inlcud:251,inlin:[35,157,228],innov:146,input:[125,128,134,143,150,173,228,229],insecur:35,insensit:[87,122,143],insert:[16,19,32,35,146,150,156,157,165,211,243],insid:[10,23,54,127,138,166,225,229,237,243,250],insight:[81,173],inspect:124,inspir:228,insructor:192,instal:[2,5,8,9,13,14,16,17,20,33,42,43,45,52,54,62,63,64,65,66,68,69,70,72,92,95,102,124,127,143,148,149,173,204,232,236,237,241],install_softwar:13,instanc:[111,144,173,208,241],instant:148,instantli:[63,205,256],instead:[11,14,16,22,35,100,112,138,139,165],institut:[3,100,102,115,173,250],instruct:[1,11,54,58,73,77,84,86,92,100,118,124,128,133,134,137,138,139,142,143,155,172,176,200,230,232,234,235,251],instructor:[1,71,73,80,83,92,95,99,106,107,112,121,125,127,135,144,145,155,173,179,190,192,205,219,222,247,248,256],instructur:[100,102],instrument:243,insuffici:[],intact:64,integ:203,integr:[12,20,38,83,85,86,89,94,96,97,102,110,115,142,173,174,182,190,205,210,218,229,231,242,256],intellectu:119,intellig:23,intend:[35,147,187,214],intens:[61,184],interact:[84,159,171,172,173,226],intercom:3,interest:[63,81,174,231,252],interf:[],interfac:[10,32,138,236],interfer:3,intermitt:173,intern:[150,173],internet:[3,10,24,173,190],interoper:[0,88,100],interpret:[243,251],interrupt:248,interrupt_on_timeout:248,interspers:126,introduct:[65,85,138,173,233,241],invalid:[122,150,173,175,220],investig:252,invis:127,invit:[89,104,115,173,176,177,178],invoic:173,invok:[12,23,28,140,174],involv:[42,165],inward:34,io:[3,6,10,16,35,140],ip:[3,115,173,190,209,239,241],ipynb:248,irrespect:[173,251],isbn:[],ismcc:[91,92,94],isn:38,isol:[2,62],iss53:32,issu:[3,11,34,64,124,173,174,197,241,251],issuer:[101,122],item:[3,13,22,23,32,41,45,63,69,80,92,95,107,108,134,135,143,147,157,159,161,169,173,174,175,213,228,235,236,241,244,246,251],its:[10,14,16,34,47,49,65,66,79,134,135,139,142,143,161,177,178,229],itself:[39,133,143,158,241],j:33,jade:[43,173],jan:238,januari:[157,173],jar:124,java8:33,java:[10,12,19,20,33,65,124,133,139,143,150,152,165,167,173,214,233],javac:[143,150],javascript:[26,31,56,83,124,140,150,154,157,165,173,214,229,231,233,236],jeroo:[173,192],jev:230,jgraph:229,jl:[152,167],jmp:228,job:[44,150],john:157,join:[89,92,105,121,173,176,192],jpg:[34,146],jq:127,jqueri:23,jre:124,js:[12,21,23,35,39,42,43,110,124,139,150,151,152,154,157,159,167,173,233],jsc:230,jshint:31,jshintrc:31,json:[127,173],juli:173,jump:[22,228],jun:238,june:173,junit:[74,78,173],jupyt:[173,192,243,248],just:[29,42,45,65,68,90,101,102,127,141,150,152,157,163,173,222,236,238],jwk:[100,102],jwt:100,k12:[3,122],k:34,kb:24,keen:3,keep:[32,64,66,102,104,125,157,212,236],kei:[0,1,5,22,25,29,32,44,49,60,70,71,72,75,88,90,91,92,94,95,97,115,125,128,142,155,159,171,173,228,229],kernel:248,key_find:39,key_find_next:39,key_find_prev:39,key_format_cod:25,key_replac:39,key_replace_al:39,keyboard:[23,28,30,36,38,46,47,49,74,78,83,125,173,243],keyset:[100,101,102],kill:45,kingdom:43,know:[29,32,42,56,61,87,90,91,97,99,157,176,248],knowledg:226,known:[66,89,138],ksimuk:127,kt:[152,167],l:[83,165],lab:161,label:251,lack:[173,243],lai:49,lang:147,languag:[8,19,20,21,23,35,48,53,65,66,69,83,84,124,127,128,133,134,135,137,139,140,142,143,148,157,165,172,173,213,214,215,228,231,233],languagetranslationgrad:139,lapp:63,laravel:63,larg:[44,91,97,138,149,173,197,238,251],larger:[61,111,147,149,161],largest:203,last:[5,16,29,32,34,39,43,51,56,68,81,144,147,156,157,159,165,173,194,209,220,233,237,241,255,257],last_nam:[208,209],lastnam:118,late:[194,221],later:[3,45,54,63,79,91,97,102,119,127,159,177,178,212,228,239,251],latest:[3,44,63,67,68,69,173,220,222],latex:[128,134,136,148],launch:[1,19,21,64,91,92,95,147,155,173,186],law:103,layout:[1,18,40,41,125,147,153,155,160,165,168,173,211,212],lead:122,leaderboard:173,leak:173,learn:[0,14,24,51,58,88,90,99,100,115,124,128,133,134,135,137,139,142,143,159,165,176,183,191,214,220,223,228,231,249],learner:[89,139,173],learnyounod:16,least:[90,91,92,95,104,161,197],leav:[42,92,101,117,135,165,173,236,251],left:[5,22,24,29,34,48,51,56,63,78,81,84,90,91,92,95,97,99,101,102,104,105,106,107,108,109,112,113,114,115,116,117,119,120,121,122,124,128,133,134,135,137,139,142,143,144,150,154,157,159,160,162,165,171,172,173,174,175,182,206,219,236,240,243,244,247,251],leftmost:45,leftright:237,lemp:63,len:[138,248],length:[127,173],less:[2,62,65,66,152,167,194,197,228,243],lesson:[16,84,172,175],let:[21,32,35,42,45,65,148,161,176,191,231,248],letter:[39,228],level:[9,11,18,32,58,59,60,69,78,95,102,103,107,124,125,126,128,133,134,135,136,137,139,141,142,143,144,169,173,174,184,191,202,214,241,243,247,249],leverag:139,lexicon:[83,159,228],lexikon:159,lg:22,lh:115,li:22,lib:[23,39,64,127,128,140],librari:[2,10,13,33,62,66,69,115,124,127,128,133,137,138,139,140,141,143,148,173,216,233,236,237],licenc:117,licens:[122,241],life:42,light:[147,159,173,194],lightweight:157,like:[13,20,23,32,34,42,43,45,65,76,84,90,91,92,95,98,119,124,127,146,149,157,158,165,172,186,194,214,255,257],likelihood:243,limit:[44,127,138,140,143,149,173,190,198,235],line:[2,7,9,13,16,18,19,21,29,30,32,43,49,56,58,62,64,65,69,95,98,124,125,128,129,133,134,138,139,143,151,152,156,157,158,159,163,167,173,185,236,237,243,244,245,247,251],linear:22,link:[20,22,24,29,35,40,54,63,68,73,90,91,93,95,97,99,100,102,104,105,122,124,138,154,158,173,174,175,178,183,209,221,222,227,239,240],link_endpoint:[92,173],linter:[124,173],linux:[4,25,28,34,36,46,47,49,83,125,143,169,231],lis_course_offering_sourcedid:[98,99,173],lisp:[152,167],list:[3,11,13,21,23,28,29,32,33,34,36,39,42,43,45,48,54,56,58,61,63,65,67,68,69,87,91,92,93,94,97,101,102,104,107,108,119,120,124,128,129,130,131,132,133,134,135,137,139,142,143,147,148,154,156,159,163,166,168,173,175,191,194,206,207,212,215,216,217,220,222,223,226,228,231,238,240,246,247,251],listen:[35,173],liter:[39,228],littl:228,ll:[42,53],lm:[3,43,85,86,87,89,90,92,93,94,95,96,98,100,101,114,115,122,127,143,173,182,205,210,221,242,247,256],load:[10,13,20,21,29,32,56,91,97,102,124,127,139,143,154,159,163,168,173,231,236],loadeagerli:23,loader:13,local:[21,29,50,173,236,243],local_fil:241,local_fold:241,localhost:143,locat:[11,16,23,24,30,32,33,42,43,44,46,47,55,63,64,65,127,129,135,150,151,154,159,161,169,173,192,211,228],lock:[127,149,173,248],lock_all_cel:248,lock_grade_cel:248,lock_readonly_cel:248,lock_solution_cel:248,lockcel:248,log:[5,21,29,32,40,42,43,63,73,78,89,97,110,118,119,127,150,151,173,174,175,176,190,209,220,223,240,243],logic:[22,127,161,173,205,256],login:[43,88,100,101,102,108,173,176,190,209,223],loginless:173,logo:[22,147,173],logout:[],longer:[3,5,63,93,124,143,144,173,179,194,207,239],look:[13,18,23,28,29,32,45,65,83,84,90,91,97,138,146,157,161,172,228,252],lookup:231,lorenbricht:138,lose:32,loss:173,lost:[43,73,88,141,173,175,180,220],lot:[29,148,251],lower:[48,51,55,59,70,72,73,75,77,79,104,105,106,108,109,112,113,114,115,116,117,119,120,121,169,212,216,217,239,240,243],ls:[16,158],lt1:100,lti:[0,86,87,88,93,94,115,127,150,173,205,221,247,256],ltideeplinkingrequest:102,lua:[152,167],lunar:10,lunarphas:10,m10e:22,m10p30e5x:22,m:[29,32,34,124,152,167,237],mac:[4,12,24,25,28,34,36,46,47,49,125,169,173,229],machin:[43,44,149,158,165,173,192],maco:[3,173],macro:156,made:[6,15,29,64,66,67,127,138,141,144,173,175,193,196,220,222,227,255,257],mai:[3,5,10,12,15,17,19,21,32,35,39,42,43,44,49,54,63,64,66,68,73,89,93,94,97,107,108,114,117,118,122,124,125,127,135,141,147,149,151,154,156,157,161,163,165,173,174,176,178,180,187,192,221,222,223,235,238],mail:[],main:[3,13,21,29,44,45,50,67,69,90,99,120,127,128,140,150,152,154,157,159,161,165,167,169,173,176,185,205,214,236,241,251,256],mainloop:237,maintain:[11,13,29,103,127,154,175],major:[63,100],make:[2,3,13,22,24,32,33,38,42,43,44,52,55,60,62,63,64,65,66,68,77,90,91,92,95,97,99,105,108,117,122,124,125,127,128,130,131,133,134,135,137,138,139,143,144,149,157,165,168,173,175,179,191,192,194,197,198,199,206,216,220,228,231,233,236,241,248,251,255,257],makefil:173,man:228,manag:[0,1,11,13,18,24,25,38,44,58,69,75,88,89,92,95,97,101,105,108,115,122,144,148,155,173,179,191,201,204,222,239],mandatori:185,mani:[2,14,44,58,62,114,115,124,127,137,143,148,156,157,186,194,205,215,228,229,241,256],manifest:13,manipul:192,manner:[114,141,151,174,202,241],manual:[1,11,20,33,38,42,45,50,63,64,66,70,71,72,81,87,90,95,112,124,126,134,135,138,143,144,146,148,155,173,192,222,246,247,248,251,252],map:[29,89,92,94,99,101,118,139,173,230,242],mapattribut:118,maprol:118,march:173,margin:22,mark:[80,124,127,128,133,134,137,139,140,142,143,147,159,168,173,182,183,185,186,188,190,191,243,244,246,247,248,251],markdown:[40,51,63,119,124,127,128,133,134,136,139,140,142,143,146,154,159,165,166,169,173,186,239],market:[],markup:157,master:[13,29,31,32,44,98,101,138,173],match:[23,36,63,97,133,139,143,152,167,173,206,226],matchi:95,materi:[58,95,126,138,228],math:[34,134,148,157,173],mathemat:[128,134,136,156,157],matter:[2,32,62,66],max:[124,139,143,173,192],max_point:208,maximum:[63,66,112,127,134,139,140,192,208,209,243,246,251],mayb:43,mb:[111,127,140],mcq:[144,173],md:[43,44,51,58,127,128,140,151,152,167,173],me:[56,173],mean:[5,17,32,39,45,65,93,107,127,139,144,149,157,165,166,192,243],measur:[3,122,243],mechan:[127,196],media:173,meet:[54,69,84,103,112,172],meetup:[148,157],member:[29,43,64,66,89,92,104,105,107,113,115,116,176,178,207,240,251,253],memori:[58,61,111,173,184,228,241],meno:176,mention:[71,90,91,97,99],mentor:[89,92,118,173],menu:[1,4,5,11,14,15,18,19,21,28,29,30,32,33,34,36,37,39,40,41,45,46,47,49,50,51,54,56,58,59,61,63,64,67,68,71,74,78,80,81,83,90,112,123,124,125,127,150,155,159,160,169,173,174,175,176,179,180,182,188,190,191,194,196,200,201,206,208,209,220,223,228,229,230,231,232,234,235,236,237,241,243,244,245,247,252],merchant:[],mercuri:[32,52],merg:[32,44],messag:[4,21,29,32,44,92,122,124,127,138,139,150,173,180,194,196,212,216,220,222],met:[196,228,243],meta:154,metadata:[124,128,133,134,135,137,139,142,143,173,212,248],method:[4,5,11,21,28,32,33,35,42,46,47,50,51,56,59,61,69,74,83,91,97,102,124,127,140,143,144,176,201,219,223,233,247],methodolog:44,mi:[152,167],microphon:24,middl:[49,169],might:[42,54,60,65,122,127,149,161,243],min:173,mind:[64,66,104,125,212],minim:32,minimum:[196,243,251],minor:173,minut:[10,12,17,63,68,73,127,173,174,190,194,241,243],miss:[133,135],mistak:[38,144],mistakenli:67,mitig:173,mix:[35,157,173,206,226],mkdir:241,ml:[152,167],mnemon:228,mo:[],mobil:35,mocha:140,mode:[3,21,32,35,49,69,82,91,92,97,105,121,127,147,150,151,157,159,166,169,173,177,185,198,219,222,223],model:[100,139,191],modelcanva:139,modelturtl:139,moder:247,modern:[228,236],modif:[13,15,32,54,67],modifi:[10,16,18,25,32,41,42,49,52,58,63,66,67,74,99,125,127,132,143,147,148,175,184,194,216,217,243],modul:[15,44,65,66,85,93,101,116,149,161,168,173,193,196,205,208,220,222,226,256],mongodb:54,monitor:[63,148,149,243,247],month:[157,173,208,209],moodl:[0,3,88,96,205,247,256],more:[0,3,6,11,13,18,19,22,23,24,31,32,33,35,39,41,42,53,56,58,61,63,64,65,66,67,81,88,90,95,98,99,100,105,107,115,124,125,127,128,133,134,136,137,139,140,141,143,144,147,149,150,156,157,159,161,165,168,173,175,176,178,182,183,184,186,191,194,202,208,212,218,219,220,227,228,230,232,233,234,235,236,238,243,249,251],most:[34,35,43,56,63,67,149,150,165,166,174,175,196,236,238],motion:10,mount:[66,125],mous:[27,156,173,229],move:[23,27,49,100,144,154,173,179,190,192,215,220,229],movement:237,moz:22,mozallowfullscreen:146,mozilla:24,mssql:143,much:[42,66,100,149,154],mul:228,multi:[169,252],multipl:[18,19,29,33,34,37,41,45,49,50,63,69,97,114,119,123,124,126,129,140,141,148,149,157,165,166,173,175,191,196,202,209,228,244,246,247,251],multipli:228,multithread:149,must:[4,10,13,15,16,17,19,20,29,32,39,50,54,61,64,66,68,70,72,76,77,89,90,91,97,99,102,104,105,111,112,119,124,127,133,135,139,140,143,144,154,157,173,175,178,197,206,212,230,247,248,251],mustach:138,my:[5,10,13,20,43,55,56,58,61,63,66,69,90,108,115,124,139,143,148,154,157,161,171,173,241],my_class_id_10:98,my_command_in_background:150,my_fold:241,mydomain:42,myid:150,mypythonfil:236,mysql:[63,64,143],mysql_root_pass:13,mysqladmin:63,mysqld:64,mysqldb:13,myturtl:139,n:[32,140,156,165,174,248],name:[6,10,11,13,16,19,21,29,30,32,34,35,36,44,45,46,47,51,52,53,54,56,58,60,61,63,68,69,70,72,73,75,77,79,81,89,90,91,92,94,95,97,99,101,102,104,105,106,107,108,109,112,113,114,115,116,117,118,119,120,121,122,124,125,127,128,129,130,131,133,134,135,137,138,139,141,142,143,144,146,147,150,157,163,165,173,175,178,182,191,196,203,206,209,214,215,216,217,219,220,221,223,224,225,228,229,231,236,238,240,241,246,247,250,251,253,254,255,257],namespac:124,nan:157,nano:[4,10,45,243],narrow:[36,56,215],natur:[133,233],navig:[4,5,22,46,47,48,50,52,53,56,58,63,68,70,72,73,75,77,79,81,84,86,91,95,97,102,105,114,122,124,127,128,133,135,137,139,142,143,147,148,157,171,172,173,176,183,190,191,200,201,206,207,209,215,219,224,237,243,250],navigatewithinsofttab:173,nbgrader:173,nbgrader_config:173,nbrader:248,ne:157,neccessari:244,necessari:[13,38,71,73,92,114,124,128,142,143,186,196],necessarili:13,need:[2,3,5,6,16,19,29,32,35,37,38,40,41,42,43,44,45,52,54,55,62,63,64,65,67,69,70,71,72,76,84,86,89,90,91,94,95,97,98,99,101,106,108,111,114,118,122,124,125,127,128,134,137,138,143,144,147,148,149,150,151,165,166,172,174,176,182,190,191,192,197,209,215,222,236,237,241,242,245,247,248,251,254],neg:[134,135,246],neighbour:236,nest:[165,169],net:[3,63],network:[110,115,173],never:[124,128,133,134,137,139,143,221,243],nevertheless:236,newli:[43,65,66,76,212,241],newlin:157,newpassword:63,next:[21,22,24,32,39,49,58,60,81,89,92,104,107,108,129,154,173,178,192,194,203,222,225,236,239,244,246,251,252],nice:[161,228],node:[6,16,21,35,42,54,124,140,149,173,196],node_modul:[43,151],nodej:[20,54],nohup:237,nois:251,non:[6,10,124,133,153,166,221,243,248],none:127,nor:79,normal:[10,15,29,32,64,67,122,127,168,236,246],note:[33,35,43,44,91,95,97,107,116,127,138,143,146,149,157,165,176,183,191,209,214,221,223,241,253],notebook:[173,192,248],noth:[32,161,165],notic:[42,127],notif:[73,95,127,173,192,208,221],notifi:[127,144,173,221,247],notimplementederror:248,novemb:173,novnc:10,now:[4,5,19,42,65,90,91,93,97,122,127,173,176,192,222,230,232,234,236,243],npm:[15,16,52,54,124,149],npmj:[54,149],ns:16,number:[5,6,18,19,21,35,41,42,44,54,71,81,91,100,102,111,115,122,124,127,128,133,134,137,139,143,144,149,159,161,173,179,185,192,194,197,203,208,213,236,238,241,243,255,257],number_:157,numer:[22,124,128,133,134,135,137,139,141,142,143,157,219,243,247],nz:24,o:[22,36,143,147,237],oauth2:[100,101,102],oauth:100,obfusc:203,object:[115,116,124,128,133,134,135,137,139,142,143,159,173,214,233],observ:97,obtain:[4,115,146,173,209,240],obviou:[],ocaml:[12,152,167],occas:117,occasion:149,occur:[32,35,39,42,127],occurr:[39,243],ocr:236,octob:173,odbc:143,odd:243,of_beautif:25,off:[34,45,65,92,193,223,228,238,239],offer:[6,16,20,22,34,53,78,122,126,128,133,134,136,148,150,161,173,180,220,239,247],offici:3,often:[6,32,54,139,147,148,156,206,243],ofview:173,oh:22,oid:118,ok:[46,47,94,215],old:[3,117,173,178,239],older:[3,127,140,173],oldest:247,omega:157,omit:69,onboard:[84,90,172,173],onc:[4,21,29,32,33,39,41,42,64,71,88,90,95,99,102,105,127,129,134,135,138,140,142,143,144,154,169,175,188,190,192,193,194,198,203,212,214,215,227,228,229,231,236,237,241,243,246,247,249,251],one:[1,4,5,8,11,19,21,28,29,32,33,35,37,39,40,42,43,44,46,47,49,50,51,53,56,58,59,60,61,65,67,69,74,83,84,90,91,92,95,97,98,99,104,105,111,124,133,134,137,138,141,144,147,148,149,155,156,159,161,163,165,166,169,172,173,176,178,183,191,192,194,196,198,199,201,207,209,219,223,228,229,236,241,243,247],onelogin:118,onli:[3,9,16,23,29,34,35,37,39,42,44,50,52,56,57,58,60,61,63,66,69,78,87,89,90,91,92,97,99,105,108,111,112,116,118,121,122,124,125,127,133,136,138,139,141,142,143,147,148,149,157,159,161,163,167,169,173,175,176,177,178,179,187,188,190,191,193,194,195,196,198,199,204,207,209,214,221,241,243,248,251],onlin:[122,149,226,235,243],onreadystatechang:110,onscreen:200,onto:228,open:[1,2,3,4,5,10,13,17,18,23,27,29,32,34,35,39,40,42,43,44,45,49,51,53,54,55,61,62,63,64,69,73,74,80,81,82,83,86,90,91,92,95,98,99,101,102,110,123,124,125,127,128,130,131,132,133,134,135,137,139,140,141,142,143,146,152,154,155,157,159,160,163,164,166,168,169,173,175,176,177,178,181,182,183,187,188,189,190,192,194,195,196,197,198,199,200,203,206,207,208,209,216,217,219,220,221,222,223,224,225,229,230,232,234,235,236,237,243,244,246,247,248,249,250,251,253,254,255,257],open_fil:158,open_preview:158,open_termin:158,open_tutor:158,open_vm:158,openbox:10,openid:[100,101,102],openssh:4,oper:[4,34,39,42,53,63,66,140,157,192,241],optimis:173,option:[3,9,11,23,29,32,35,39,40,42,44,45,49,52,53,54,57,58,61,66,78,87,90,92,95,97,100,102,104,105,114,115,119,122,124,125,127,128,129,133,134,137,141,142,143,146,150,154,157,158,159,162,163,165,166,169,173,174,175,176,180,182,183,184,188,189,190,191,192,193,198,199,200,202,203,206,207,208,219,223,227,228,229,231,236,238,241,247],orang:140,order:[3,87,93,94,117,125,127,129,133,137,139,143,154,157,161,165,167,173,186,190,220,228,251,252],ordinari:[128,134],org:[24,35,54,56,63,92,101,102,173],organ:[0,24,29,44,52,53,56,58,61,63,64,66,69,83,88,89,90,91,92,95,97,99,101,102,106,108,110,111,112,113,116,118,119,120,141,142,153,161,169,173,174,176,178,181,184,190,202,206,207,212,213,214,215,216,224,231,238,240,241,249,253],organis:[94,173],organiz:[148,161],origin:[10,29,32,55,67,76,98,222],originaltext:248,os:[127,128,140,173,241],other:[2,7,8,10,12,15,16,17,20,23,29,30,32,33,35,37,39,44,45,49,52,53,54,58,60,62,63,64,65,66,69,81,97,98,99,102,104,107,111,112,115,116,117,118,125,127,133,135,138,140,141,144,148,150,151,154,157,161,166,167,169,173,174,175,187,190,192,196,203,205,206,207,211,222,231,235,239,247,248,251,256],other_branch:32,otherwis:[101,138,140,142,159,163],our:[2,3,11,13,38,58,62,65,66,84,103,127,138,172,174,176,221,227,241,243],out:[5,21,24,44,49,54,84,87,90,91,92,94,95,97,99,100,102,127,128,140,143,150,157,165,174,190,191,209,248,251,253,255,257],output:[1,3,5,16,21,34,110,119,124,125,127,128,133,134,135,137,138,139,142,150,154,155,173,229,233,237,239],outputelementid:154,outsid:[15,64,65,66,67,206,243],outward:34,ov:22,over:[6,10,12,16,21,27,30,35,42,49,54,74,89,90,120,125,154,157,173,182,219,228,229,233,244,245,247],overal:[10,135,145,165,194],overcom:165,overdu:95,overflow:[22,173],overrid:[39,42,74,78,127,142,157,174,192,202,208],overview:[0,44,63,73,75,79,84,85,88,95,97,99,106,109,113,114,115,116,120,156,170,172,173,185,191,219,220,223,250,251],overwrit:[43,143,222,227,236,248],overwritten:[43,125,194],ovh:22,own:[2,11,14,37,52,53,54,55,56,58,62,63,64,66,69,71,76,80,98,114,118,124,125,128,134,143,150,173,186,192,203,213,216,220,226,228,236,237,241],owner:[24,30,52,55,56,58,60,61,63,64,66,99,105,108,112,115,121,173,207,224,238,240],ownership:[63,64],p100:22,p5:192,p:[4,28,146,176,241],pa:[152,167],pace:[228,243],pack:[2,10,20,58,62,63,84,116,124,143,148,171,172,173,233],packag:[10,33,91,124,142,156,204,251],pad:22,padlock:[24,58,152],page:[1,3,10,11,13,19,21,22,24,29,32,33,35,40,43,52,53,55,56,58,59,61,63,66,68,69,73,75,79,85,86,90,91,92,93,94,95,97,99,100,101,102,108,110,112,114,115,118,121,124,125,127,128,129,133,134,135,137,138,139,141,142,143,144,146,147,154,155,156,160,161,162,164,165,167,173,175,176,177,178,179,181,190,192,200,201,203,204,206,207,209,211,212,215,220,222,223,224,225,227,236,237,239,241,243,249,250],pagoda:10,pai:173,paid:[5,122],pair:[39,71,76,173,185,197,215,228,229,230,232,233,234,235,248,251],pane:[5,29,32,41,52,53,56,58,63,68,70,72,73,75,77,79,81,84,107,124,128,133,134,135,136,137,139,142,143,147,148,159,163,171,172,212,243],panel:[18,21,40,41,42,45,48,63,154,158,159,163,169,173,192,211,212,231,237],panel_num:154,paperclip:3,paragraph:112,param:[110,127,173],paramet:[19,56,87,95,97,98,99,101,118,124,125,127,128,133,134,137,139,140,141,143,150,173,215,238,251],parameter1:150,parameter2:150,parameter:[124,128,133,134,137,139,143,173],parametern:150,parent:[21,102,173,175,201,204,206,227],pars:[127,140,173],parser:173,parson:[123,144,173],part:[15,34,42,54,63,64,65,143,157,161,222,251],parti:[3,42,57,110,115,148,173,243],partial:[124,127,134,135,137,143,173,246],particip:173,particular:[3,241,243],particularli:138,pass:[0,71,87,88,89,90,91,97,99,101,110,124,125,127,128,140,142,143,173,190,192,194,196,247,251],passion:233,passiv:[42,169],password:[13,24,32,35,43,45,63,75,79,88,89,173],past:[4,16,29,32,40,41,46,47,54,81,90,92,95,97,99,101,102,105,118,173,177,178,237,251],path:[13,16,19,23,33,44,69,124,125,127,128,140,142,143,146,154,163,165,173,191,209,251],patient:236,pattern:139,paus:[21,81,146],payload:127,payment:[5,7,61,75,122],pbcopi:4,pc:[6,25,28,34,36,43,49,125,146,169,229,236],pdf:[1,155,173],pen:139,penal:[137,194],penalti:[127,173,185,221],penalty_valu:127,pencil:[45,169,173,192,225],pencilcod:232,pend:[104,105],peopl:[37,159,222],per:[29,69,81,122,124,133,163,243,252],percent:[127,128,140,191,243],percentag:[87,90,91,97,112,124,127,128,134,137,140,143,144,194,251],perfectli:65,perform:[10,15,21,54,57,61,90,91,104,115,134,149,150,163,165,173,185,197,203,238],perhap:236,period:[124,128,143,173,209,241,248],perman:129,permiss:[2,4,29,30,37,58,62,65,99,104,105,107,115,116,147,173,175],persist:[9,125],person:[3,37,104,115],perspect:176,phase:10,phonegap:173,php5:63,php:[6,35,42,63,152,167],phy:35,pi:140,picker:[173,194],pictur:3,piec:[90,146,157,165,168],pin:[173,185],pinunpin:173,pip:124,pipe:[1,140,155],pipefail:237,pixel:139,pl:[152,167],place1:133,place2:133,place:[23,30,34,95,99,101,124,125,146,148,161,163,166,169,173,174,219,236,251],placement:102,plagar:173,plagiar:[173,182,243],plagiaris:251,plai:[81,146,147,157,159,164,173,236,252],plain:150,plaintext:[127,128,134,136,140,157],plan:[5,7,115,122,173,221,241],platform:[4,42,100,101,102,127,148,173,174,202,205,247,256],playback:[41,146,173,243],player:[81,146,159,160],playground:189,playmod:163,pleas:[3,14,17,32,42,43,45,63,90,94,97,100,107,112,122,136,163,165,168,169,174,176,221,231,241],plugin:[23,173],pm:157,png:[102,146,157],point:[32,52,54,58,63,64,65,66,67,68,71,81,87,90,91,92,97,102,112,124,126,129,130,133,134,135,137,139,141,142,143,145,146,150,154,157,159,162,165,173,175,191,203,208,229,243,246,247,248,251,252],pol:165,polici:[3,90,103],pop:[24,143,173,180,192,228],popen:140,popul:[58,69,124,128,142,143,173,205,214,256],popular:[52,140],popup:[27,228],port:[10,16,19,35,45,54,61,63,158,173],portion:[55,70,72,73,75,77,79,125,143,152,169,195,215,239],posit:[34,124,128,133,134,135,137,139,141,142,143,220,225,237],possibl:[38,41,42,65,66,87,127,133,140,173,248,251],post:[40,110,127,138,140,248],postgr:143,postgrad:173,postgresql:143,potenti:[43,79,165,243,251],power:[1,155,190],practic:[32,66,138,174],pre:[2,11,58,62,66,124,125,142,143,173,237],preced:[157,248],precis:49,preconfigur:[2,62,66,236],predict:[124,128,133,134,135,137,139,142,143],pref:63,prefer:[1,3,5,12,18,23,24,25,29,33,34,39,40,42,44,49,71,75,103,125,155,157,173,174,222,241,255,257],prefil:221,preinstal:32,prematur:144,premis:44,prepar:[4,54],prepend:139,preprocessor:248,prerequisit:[173,185,212],prescrib:187,presenc:173,present:[2,13,42,52,53,62,137,138,165,173,186,192,215,226,241,243,248],press:[5,22,28,29,30,32,35,42,45,49,65,99,101,102,107,118,119,141,143,144,147,150,160,169,173,176,186,194,210,228,229,231,236,237,239,251],prevent:[3,5,105,122,124,141,159,163,173,176,187,188,189,192,198,199,204],preview:[1,10,16,32,41,42,51,54,61,74,78,87,91,97,119,128,134,136,138,154,155,157,158,159,164,166,173,215,236,237,239],previou:[39,43,49,81,87,122,141,142,154,159,166,173,222,251,252],previous:[21,45,73,141,173,175,176],primari:54,prime:[133,173,185,192],principl:65,print:[21,127,128,152,157,165,167],println:165,prior:[10,63,66,116,151,167,209],prioriti:[3,74],privaci:[3,91,95,98,99,102,103,173],privat:[52,56,58,60,61,63,64,66,76,115,173],privileg:[2,58,62,90,91,97,99,124],proactiv:144,problem:[43,122,127,139,161,173,174,202],proce:[91,92,94,173,194],procedur:[42,58,68,73,169],proceed:[10,12],process:[19,21,29,42,43,45,54,88,104,105,122,124,128,133,134,135,137,139,140,142,143,149,173,192,236,243,246,249],proctor:[173,185],produc:[157,237,252],product:[26,42,90,91,97,102,174],profession:[],professor:[],profil:[29,71,75,104,105,106,108,109,112,113,114,115,116,117,119,120,121,237,240],program83b0717fa37e2e0346bafc8c1429cb87:147,program:[10,19,65,71,124,125,127,128,133,134,135,137,139,142,143,146,150,152,165,167,173,185,197,213,214,215,228,229,230,232,233,234,235,248,251,252],programming_languag:13,progress:[44,148,150,173,243],prohibit:[163,173],project:[1,3,4,6,7,8,9,12,14,15,16,17,18,19,20,23,24,25,29,30,31,33,35,37,39,42,43,45,46,47,49,50,51,52,53,54,55,63,64,65,66,68,71,75,78,79,83,84,85,86,90,103,108,111,112,115,116,124,125,127,128,133,134,137,139,142,143,144,146,147,149,151,155,159,162,163,165,168,171,172,173,175,188,194,205,209,211,212,220,221,228,229,230,232,234,235,236,237,241,244,245,247,248,251,255,256,257],projectid:127,prolog:173,promin:156,promot:[122,173],prompt:[5,20,24,29,42,45,122,143,149],promptli:173,proof:136,propag:[61,71,184,220],proper:229,properli:[136,139,154,212],properti:[34,68,119,139],proport:191,protect:[35,61,103,159,173],protocol:[23,35,173],provid:[0,1,10,11,19,20,29,33,41,42,45,58,63,80,82,83,88,90,91,92,95,97,99,105,112,118,122,124,125,127,128,133,134,135,137,138,139,140,142,143,144,147,148,149,154,155,157,163,168,171,173,190,220,222,223,228,230,232,234,235,240,241,246,247],provis:[101,149],psh:228,psuedocod:139,pub:4,publickei:4,publicli:13,publish:[33,61,66,90,91,92,94,95,97,119,125,127,138,146,149,151,167,168,173,175,184,196,209,222,239,248],pubnub:3,pug:173,pull:[11,13,43,52,138,173,175,196,206,213,227],purchas:[111,122,149,173],purpos:[139,142,148,167,241,251],push:[42,43,44,54,79,173,175,228],put:[3,54,63,125,139,143],putti:4,puzzl:[123,144,173],py:[10,127,143,150,152,167,173,236,237],py_compil:237,pyret:[173,192],python3:[10,124,127,150,173,236,237,248],python:[10,12,13,20,21,65,124,127,128,138,139,140,143,150,152,157,165,167,173,214,215,248],qr:35,qt:10,qualifi:128,qualiti:42,quantiti:185,queri:[141,143,173,174,215],question:[1,13,127,128,133,134,136,137,140,141,142,143,144,148,154,155,168,173,174,175,190,194,202,215,221],queue:173,quick:[18,95,171,173],quickest:32,quickli:[19,34,83,149,159,161,231,236,238],quicklink:101,quickstart:44,quizquestion2:140,quot:[13,39,122,158],r:[49,127,133,140,152,167,248],radio:137,rais:[173,174,202,221,241,248,251],ran:54,randint:[127,138,140],random:[32,123,127,133,137,138,140,173,190,213],randomis:173,randomli:[6,93,141,213],rang:[1,6,35,39,69,112,126,141,148,155,157],rare:165,rate:[186,243],rather:[32,42,65,104,111,140,143,165,209,222,228,248,251],rational:[124,128,133,134,136,137,138,139,142,143,168,173],raw:[13,127,138],rb:[143,152,167],rdbm:13,re:[10,24,32,42,49,58,78,94,112,127,128,138,140,144,173,182,186,190,247,248],reach:[16,144,163,179,183,190,194,206,219,246],reachabl:9,read:[7,9,10,13,45,58,60,63,78,89,92,105,107,108,112,118,121,127,140,143,147,173,177,178,179,188,194,198,199,214,221,248],readabl:[29,143],reader:[35,165,173],readi:[4,19,32,42,63,122,157,175,182,192,236,246,251],readili:146,readlin:138,readlink:69,readm:[29,43,44,51,58,151,173],readyst:110,real:[10,24,30,149,173,245],realiz:97,realli:[157,251],realtim:173,reason:[64,67,154],reboot:15,rebuild:65,recal:[],recalcul:173,receipt:173,receiv:[4,125,127,140,190,194,196,209,212,248],recent:[56,173,196,220,238],recipi:122,recogniz:63,recommend:[2,3,12,17,32,33,37,42,43,44,54,62,63,65,66,69,89,91,97,100,102,134,135,143,148,149,154,167,173,175,176,194,226,228,236,241],reconfigur:[11,165],reconnect:[173,236],reconstruct:154,record:[42,44,103,127],recov:81,recreat:[54,81],recurs:[124,128,133,134,135,137,139,142,143],red:[21,22,34,129,138,140,162,194,215,243],redeem:[],redempt:122,redesign:173,redirect:[10,70,72,90,91,93,97,99,101,102,173],redirectlocal:24,redirectslug:24,redo:173,reduc:[13,49,63],ref:[158,173],refactor:173,refer:[2,6,8,12,13,14,19,23,29,32,35,44,45,62,63,66,83,86,95,98,99,123,125,138,148,156,158,165,166,168,169,174,175,231,239,243,251],refin:28,reflect:[124,127,128,133,134,135,137,139,141,142,143,248],refresh:[10,92,173],refus:122,regain:198,regard:241,regardless:[25,42,141,173],regener:[44,76,138,173,176,239],regist:[3,90,105,121,176,209],regrad:[173,182],regul:103,regular:[39,45,133,148,173,243],regularli:173,reinforc:148,reinstal:[10,15],reinstat:204,rejoin:176,rel:[13,21,33,43,67,124,151,154,221,251],relat:[2,3,13,61,62,63,103,115,118,141,143,144,161,174,175,208,209],releas:[30,87,115,127,134,135,173,182,192,198,199,222,229,247,248],relev:[12,13,23,58,74,78,118,127,148,165,166,173,236],reli:[10,236],reload:[17,49,108,134,139,142,173,236],remain:[5,63,92,97,99,101,112,129,209],rememb:[43,64,173,240],remind:95,remot:[29,37,54,75,76,79,127,173,175],remote_fil:241,remote_fold:241,remov:[5,21,32,42,44,55,90,91,92,95,102,105,107,115,121,127,129,147,165,169,173,186,206,207,209,215,220,223,228,242,243,246,248,251,256],renam:[173,192,220],render:[10,40,92,119,128,134,136,147,156,157,160,173,239],renew:[122,173],reopen:[49,127,163,173],reorder:[93,173,220],reorgan:173,repeat:[65,92],repetit:63,replac:[10,35,67,74,76,78,98,99,102,173,174,248],replacementtext:248,replacetextbetween:248,repli:[174,221],repo:[13,42,44,52,70,72,138,173,175],repo_nam:138,repons:186,report:[127,140,173,174,209],repositori:[3,11,13,29,37,44,52,69,251],repres:[22,157,203],republish:248,request:[13,29,44,53,61,73,100,101,102,111,127,138,140,144,173,192],requestor:192,requir:[1,7,10,11,24,33,35,42,43,44,54,58,61,63,65,76,89,92,93,94,95,99,100,102,110,111,115,122,124,128,133,134,135,137,139,140,142,143,148,149,150,155,157,173,175,179,186,189,190,192,194,196,203,206,209,221,222,228,233,236,238,239,241,244,246,247,248],requirej:23,requisit:173,rerun:[32,236],resend:[104,105],reserv:173,reset:[29,49,63,64,65,66,127,141,147,150,154,157,173,175,182,185,189,190,200,204,241,248],resetcurrentfil:[150,154],resiz:173,resolv:[80,173,243,244],resourc:[35,84,91,92,97,101,114,151,170,172,173,206],resource_link_id:173,resource_select:[100,101,102],respect:[157,192,243],respond:148,respons:[71,126,128,137,140,144,154,175,241],responsetext:110,rest:[29,157],restart:[10,11,12,21,63,71,159,163,173,204,236,237,241],restor:[38,79,94,129,154,157,173,175],restrict:[6,35,61,142,159,173,177,178,190,251],resubmit:[142,144,188,198],result:[6,15,22,29,32,33,34,41,66,121,126,140,143,147,150,154,157,175,178,191,194,215,248],resum:21,retain:[40,44,55,159,166,173,207,208,209],retri:127,retriev:[13,79],revers:169,revert:[173,220],review:[14,44,51,63,80,81,86,93,124,126,128,133,134,135,136,137,139,141,142,143,173,175,192,194,222,244,246,247,256],revis:119,revok:[11,104,105,173],rf:44,rgb:27,ribbon:[146,157,164,173],rich:[1,155],rid:29,right:[19,22,29,32,34,35,44,45,46,47,48,50,51,59,69,78,81,82,83,89,90,91,92,97,102,103,112,130,131,134,138,147,152,159,160,165,169,173,179,191,192,194,201,207,208,209,212,215,216,217,219,220,222,223,228,229,236,241,244,250,251,253,254,255,257],risk:42,rkt:[152,167],rlib:[152,167],rm:44,robust:140,rocket:236,role:[94,101,104,115,121,173,192,209],roll:32,room:117,root:[11,13,16,23,31,33,35,39,51,54,63,143,146,165,173,248],root_password:13,root_password_again:13,roquefort:165,round:[34,127,140,203],row:[112,194,215],rs:[152,167],rstrip:248,rstudio:[173,243],rubi:[6,15,35,42,124,143,165,173,248],rubic:191,rubric:[112,115,134,135,173,181,191,192,246,247],rule:[3,31,60,65,66,89,140,169],ruler:173,run:[3,4,6,11,13,17,19,20,21,32,35,42,44,45,54,58,63,64,66,69,124,125,127,128,138,140,142,143,146,147,149,150,154,157,158,159,173,182,191,241,248],runandshow:154,runmenu:63,runner:124,runtim:143,s:[0,3,6,10,13,15,32,34,38,39,42,53,60,64,65,66,67,69,88,89,92,94,95,99,100,102,103,105,107,111,122,124,128,133,134,135,137,139,140,141,142,143,145,147,148,150,152,161,165,167,173,175,177,178,179,182,186,189,196,200,202,203,204,211,212,214,215,216,220,222,223,224,226,228,233,240,243,246,247,250,252,254],sa:143,safari:173,safe:[125,175],sai:[24,65,157],same:[16,19,32,33,39,42,44,45,51,65,66,88,89,92,108,141,149,151,154,160,161,165,166,169,173,175,176,191,192,196,197,206,215,231,238,241],saml:118,sampl:[138,153,166,173,226],sass:[152,167],satisfi:173,save:[5,32,37,42,49,65,71,73,79,81,90,91,92,95,97,98,99,101,102,118,119,127,130,135,138,141,148,173,181,183,186,187,188,189,190,191,192,194,195,198,199,212,220,223,224,225,230,231,235,237,238,239,241,243,244,247,255,257],sb3:235,scaffold:226,scala:[152,167],scale:[90,91,97,140],scan:35,scenario:[19,165],schedul:[197,221],schema:6,school:[95,173],schoologi:[0,88,96],scm:[29,32,152,167],scope:175,score:[90,91,97,112,124,127,133,134,135,137,139,140,141,142,143,154,173,194,246],scrambl:139,scratch:[173,192],screen:[8,10,24,43,49,60,82,90,97,99,101,104,105,106,108,109,112,113,114,115,116,117,119,120,121,122,156,173,228,230,232,234,235,236,239,240,251,253,254,255,257],screenshot:[98,99,144,159,246],script:[11,17,35,54,71,115,124,125,126,142,143,144,154,159,165,173,182,191,208,212,237,248],scroll:[18,91,97,99,101,102,147,148,173,191,215,226,228],scrollabl:228,scrollback:18,scss:[152,167],seach:173,search:[10,20,34,53,60,63,74,78,81,83,84,85,124,129,139,140,141,143,148,157,171,172,173,178,211,212,213,228,230,231,232,233,235,236,237,252],searchabl:[28,52,69],season:238,sec:[124,143],second:[2,13,15,21,33,62,66,81,124,128,215,236,243,248,252],secret:[44,90,91,92,95,97,99],section:[3,10,23,25,29,35,39,41,42,70,72,77,90,95,97,99,101,102,105,110,117,122,124,127,140,147,148,150,152,154,159,165,166,168,173,178,181,201,204,209,222,236,239,241,247],secur:[35,71,77,92,94,100,102,124,126,128,142,143,173,248],see:[0,1,2,3,4,5,6,7,9,10,11,12,13,16,18,21,22,23,24,26,27,30,31,32,33,34,35,37,42,43,44,51,52,53,54,56,58,61,62,64,66,67,70,72,74,77,78,80,81,84,86,88,89,90,91,92,93,94,95,97,99,100,101,102,103,105,116,117,118,120,121,122,127,128,129,133,134,136,137,138,139,141,142,143,144,147,148,150,151,155,156,157,159,160,165,166,167,171,172,173,174,175,176,177,179,182,183,184,186,187,191,192,194,201,202,203,206,209,212,218,219,220,223,226,227,228,229,231,235,236,238,239,241,242,243,244,245,246,247,248,251,252,253,254,255,257],seek:173,seen:[192,222,247],segment:[124,128,133,134,135,137,139,142,143],select:[3,8,16,19,27,29,31,32,33,35,36,39,40,41,42,43,44,48,49,50,51,58,59,60,64,66,68,69,79,81,82,84,86,90,91,92,93,94,95,96,97,99,101,102,104,105,107,112,118,119,121,122,124,126,127,128,129,133,134,135,137,139,141,142,143,146,147,150,157,159,160,163,165,171,172,173,175,176,177,178,179,180,181,182,183,185,186,190,191,192,196,200,201,202,203,204,206,207,209,210,212,219,222,223,224,225,226,230,231,232,234,235,236,237,239,241,243,244,246,247,250,251,252],selector:34,self:173,semest:122,send:[3,29,90,97,104,110,122,140,154,173,176,177,178,200,221,241],send_grad:127,send_grade_v2:[127,128],send_parti:[127,140],send_partial_v2:[127,128,140],sens:[110,115,173],sensit:[23,133,143,215],sent:[73,87,104,105,122,127,142,173,174,178,208,209,221],sep:238,separ:[10,33,39,44,65,97,124,127,139,148,158,166,173,231],septemb:173,sequenc:39,seri:[2,13,62,161],serv:[35,42,43,139],server:[2,6,8,9,13,14,23,29,32,35,43,45,54,62,63,64,66,69,75,76,173,236,237],servic:[10,11,16,35,54,63,101,102,118,173,190],session:[19,159,166,173,209],set:[4,5,6,10,11,13,19,21,24,29,32,35,39,40,41,42,52,54,58,59,63,64,65,66,67,68,69,71,74,78,80,82,85,86,87,88,89,90,91,92,94,95,97,98,99,100,102,105,106,112,121,124,127,128,133,134,135,136,137,138,139,141,142,143,144,145,147,150,153,157,165,169,173,174,175,177,178,179,181,182,183,184,186,187,188,189,190,191,192,194,195,196,197,198,199,202,203,204,206,212,219,220,221,223,228,230,231,232,233,234,235,236,238,243,244,246,247,248,249,251],setbuttonvalu:150,setrequesthead:110,settimeout:150,settings:[113,120],setuid:17,setup:[58,101,196,241],sever:[133,148,166],sftp:76,sh:[13,16,17,127,143,152,167,237,241],sha:32,share:[16,29,53,56,87,91,95,97,99,107,116,127,128,140,146,149,168,173,174,175,192,201,205,222,247,256],sheet:[34,124,143],shell:[13,16,39],shift:[12,18,25,28,33,34,39,46,47,49,125,169,228,229],shortcut:[12,23,25,28,30,33,36,38,39,46,47,49,74,78,83,173,185,236],should:[3,6,9,10,12,15,16,17,32,33,35,40,41,42,43,45,51,54,60,63,64,65,66,68,73,86,88,89,90,91,92,94,95,97,98,99,101,102,108,110,124,125,127,128,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,154,156,157,158,161,165,166,169,173,175,176,184,189,192,194,223,228,229,230,232,233,234,235,236,239,241,248,251],show:[13,18,21,24,30,32,41,44,56,61,97,108,115,124,127,128,133,134,135,137,139,140,141,142,143,147,148,152,153,157,159,165,167,173,175,184,185,189,192,194,203,209,220,222,238,243,245,250,251,255,257],show_dot_fil:173,shown:[1,18,23,32,33,39,42,44,58,106,108,114,122,124,128,133,134,137,139,141,142,143,147,150,154,155,156,157,159,163,164,165,166,168,173,182,202,220,231,236,243,245,246,248,249,251],shrink:34,shuffl:[137,190],shutil:140,si:102,side:[35,49,91,97,138,144,157,160,173,179,192,194,201,207,228,230,232,234,235,244,247],sign:[42,89,100,104,105,122,140,173,178,201,206],silent:34,similar:[4,16,32,35,97,98,99,101,107,128,138,139,146,158,163,192,222,241,251],similarli:173,simpl:[19,33,34,35,127,148,211,212,236,237],simpler:[32,65,173],simplest:32,simpli:[10,20,21,22,23,28,42,48,52,53,56,107,124,138,161,165,176,228,229,230,232,234,238,243,252],simplifi:[13,173,233],simul:127,simultan:[18,37,149,197],sinc:[5,29,32,64,68,73,74,100,128,190],singl:[19,32,34,39,42,54,66,111,112,137,147,149,157,163,175,190,209],site:[3,24,32,54,92],situat:65,sixteen:233,size:[10,18,49,61,63,127,139,147,149,173,235],skip:29,skulpt:139,slider:[81,168,252],slot:[173,185],slow:[3,173],small:[32,138,173,229],smaller:[149,157,173,243],smallest:[203,243],snapshot:[2,32,62,66,68],snippet:[22,34,146,148,157],so:[4,6,10,11,19,23,29,30,32,35,37,41,42,43,44,45,49,54,63,64,65,76,77,86,89,90,93,95,99,105,122,124,127,128,133,134,137,139,141,142,143,144,150,156,165,173,174,175,176,178,179,182,186,189,192,195,196,197,203,206,207,212,220,222,223,226,228,229,236,237,238,241,247,249,255,257],soft:173,softwar:[2,10,12,14,17,33,41,53,58,62,63,64,66,143,149,173,204,232,236,237,241],solid:34,solut:[139,143,147,152,157,161,168,173,214,236,248],solv:[],some:[3,10,21,22,32,34,35,49,54,63,90,99,117,127,138,143,146,154,157,158,214,222,233,236,241,243],someon:[32,52,54,55,122,141],someth:[29,32,35,91,97,98,101,144,245,255,257],sometim:[3,157],somewhat:54,soon:[66,219,221],sort:[39,173,243,247,255,257],soundtrack:164,sourc:[13,29,32,33,43,52,54,55,58,63,64,68,124,146,151,158,165],sourcedid:[98,99,173],sourcepath:147,space:[12,23,25,56,133,143,157,173,230,232,234,235],spam:165,span:248,spawn:102,special:[3,10,39,54,156,157,159,161,176],specif:[20,21,27,32,56,63,65,68,69,74,78,84,86,89,97,99,100,111,122,123,124,128,133,134,135,137,139,140,142,143,146,148,150,154,157,159,166,167,172,175,202,208,215,228,251],specifi:[16,17,23,32,33,35,39,41,45,52,54,61,66,67,78,90,91,97,98,108,114,115,124,125,127,128,139,140,143,144,146,147,150,153,154,157,158,159,166,173,183,184,194,197,198,199,202,231,237,243],speech:229,speed:[3,66,81,228,252],spend:243,spent:[3,208,243],split:[44,49,159,173,191],splitview:51,spring:238,sprite:235,sql:[143,152,167,173],sqlcmd:143,sqlite:10,sqlitebrows:10,sqrt:157,squar:63,squash:44,src:[13,35,146,154,163],ss:[152,167],ssh:[18,29,32,42,61,70,72,75,173,241],ssl:[90,147],sso:[115,173,190],stabl:190,stack:[2,8,10,11,17,20,21,33,41,52,53,57,58,61,62,86,116,124,127,138,149,173,220,229,230,232,233,237],stack_exclus:69,stack_version_id:32,stackexchang:156,stackvers:32,stage:42,stand:126,standalon:[161,235],standard:[0,3,8,13,23,29,32,88,101,105,123,124,125,133,144,146,150,156,170,173],start:[2,4,5,10,11,17,19,23,28,29,30,32,36,40,42,51,53,54,56,58,62,63,65,85,102,113,122,125,127,130,133,141,144,149,157,159,160,161,171,173,174,175,178,180,183,185,190,192,194,196,197,204,206,221,228,229,230,232,233,235,236,237,238,246,247,248,251,255,257],starter:[2,10,20,58,62,63,84,116,124,143,148,157,171,172,173,233],startuml:10,startup:17,staruml:10,stat:[3,127,173],state:[13,15,64,87,102,110,127,139,147,173,196,241,243,250],statement:[21,152,167,243],statist:[3,173],statu:[21,35,48,110,119,147,173,188,189,194,198,241,247],stderr:127,stdin:[21,143],stdout:[125,127,140,143,154],step:[4,10,12,19,21,29,32,33,34,36,40,44,46,47,50,52,53,55,57,58,60,63,68,69,81,82,90,91,94,95,97,99,101,102,104,105,106,108,112,113,114,115,116,117,119,120,121,122,123,128,129,132,133,134,137,139,142,143,165,173,175,176,177,178,179,181,183,187,188,189,194,195,198,199,200,201,204,206,207,208,209,212,214,215,216,217,220,222,223,224,225,236,239,241,246,247,249,254],steroid:228,stick:65,still:[38,55,65,80,86,107,114,116,118,129,144,159,174,179,192,202,227,228,244,248,251],stipul:[],stop:[11,21,63,78,81,241,248],storag:173,store:[24,43,45,60,124,125,127,128,138,142,143,146,154,228,235,248],str:[128,140],strategi:63,stream:248,strict:143,strictli:[],string:[4,18,39,138,157],strip:143,stripe:[],stronger:10,strongli:[2,6,37,62,228],structur:[124,128,173,175,214,241],struggl:243,student1:97,student2:97,student:[1,3,17,24,33,41,43,44,64,65,85,86,87,88,89,90,91,92,93,94,95,99,103,106,110,112,114,115,117,118,121,124,126,128,133,135,136,137,138,139,140,141,142,143,145,146,149,150,152,154,155,157,159,161,163,165,166,167,168,170,173,175,179,182,183,185,187,188,189,190,193,195,196,197,198,199,201,202,203,204,205,206,207,208,213,214,221,222,223,226,230,231,232,233,234,235,236,237,238,243,244,245,246,247,248,249,251,252,256],student_nam:[208,209],studentcanva:139,studi:[],studio:41,stuff:[32,146],style:[100,124,154,157],stylesheet:154,sub:[124,128,133,134,135,137,139,142,143,148,214],subdirectori:39,subdivid:161,subdomain:[6,35],submenu:42,submiit:173,submiss:[87,91,95,97,102,142,159,173,194,219,243,247,251],submit:[11,13,53,91,95,98,99,102,124,127,128,133,134,137,139,140,142,143,159,173,194,246,248],subprocess:140,subscrib:[5,122],subscript:[111,173],subsequ:[32,51,89,92,95,157,166,173,196,204],substanti:241,substitut:127,substr:143,subtract:[134,135],subtyp:124,success:[89,150,157],successfulli:[33,124,216],sudo:[2,10,11,13,14,17,58,62,63,64,66,124,173],suffici:[149,190],suffix:[230,232,234,235],suggest:[20,29,80,90,91,95,97,188,215,221,241],suit:[100,124,206,226,233],suitabl:[90,91,97,99],sum:140,sum_:156,summari:[127,157,173,222],summer:238,sun:124,superior:236,superman:56,suport:118,suppli:[42,143],support:[1,17,20,23,24,32,34,35,38,39,42,55,56,63,69,71,93,94,97,98,99,103,115,118,122,124,128,133,134,139,142,146,147,148,155,156,157,165,173,202,221,236,241,248],suppress:[97,133,137,143,144,157,159,173],sure:[3,14,24,29,32,33,42,65,66,90,91,92,94,95,97,99,125,127,138,191,212,228,236],surpress:173,surround:[152,157,229],survei:[173,185],suspend:73,svn:32,swbat:[124,128,133,134,135,137,139,142,143,214],swift:[152,167],swing:10,switchunit:154,sy:[127,128,140,248],syllabu:[],symbol:[39,156,173,243],sync:141,synch:173,synchron:[37,43,173,247],synchronis:[43,173],syncronis:173,syntax:[26,31,39,48,139,152,156,157,167,173,228,233],system:[3,4,8,13,21,45,53,66,69,83,85,86,87,89,90,91,94,95,97,98,99,102,110,115,127,138,158,173,174,218,231,242],systemcommand:158,systemctl:17,t:[18,19,32,34,38,45,54,65,81,87,97,100,125,127,128,144,147,152,157,165,171,173,194,228,230,232,234,235,240,248,251,255,257],ta:[177,178],tab:[3,4,5,10,12,14,15,18,19,21,22,29,35,36,39,40,41,42,43,44,45,46,47,48,50,51,53,54,56,57,59,60,61,63,68,69,70,72,73,76,77,78,79,81,84,86,87,90,91,92,93,95,97,99,101,102,104,105,106,107,108,109,112,113,114,116,117,119,120,121,122,124,125,128,129,133,134,137,139,141,143,146,148,150,152,154,159,163,171,172,173,175,176,177,178,179,185,190,192,200,201,203,204,207,209,212,220,221,222,223,224,225,231,236,237,239,240,241,247,249,250,253,254,255,257],tab_switch_left:49,tab_switch_right:49,tabl:[1,155,173,194],tag:[52,63,69,110,124,128,133,134,135,137,139,142,143,146,148,152,157,163,165,166,167,173,206,212,213,214,215,221,222],take:[2,10,12,15,21,24,49,62,63,68,89,127,192,230,232,234,235,236,241,248,253],taken:[2,62,90,91,94,97,101,105,183,221,228,236,251],talk:[6,66],tar:209,target:[21,95,102,147,158,165,169,173,228],task:[13,51,61,104,115,150,163,185,205,256],taught:[178,205,256],taxonomi:[124,128,133,134,135,137,139,142,143,214],teach:[32,65,85,89,91,92,95,115,121,173,178,195,206,226,228,238,251],teacher:[1,3,24,43,87,90,91,93,94,99,104,107,110,114,115,118,120,121,124,126,128,133,134,135,137,138,139,141,142,143,144,147,148,155,157,159,161,163,167,173,174,176,177,181,191,192,202,205,207,208,209,214,221,224,228,236,238,239,242,243,244,247,252,255,256,257],team:117,techniqu:128,technolog:[53,54],techrepubl:4,tediou:42,telephon:[],tell:[29,32],temp:165,templat:[53,54,58,66,85,115,138,173,185,191,251],temporari:200,temporarili:73,term:[98,119,128,173,239],termin:[1,2,4,11,29,32,54,58,60,62,63,76,124,128,146,149,154,155,158,159,164,166,173,175,187,236,241],terminal_1:16,ternj:23,test:[19,32,52,74,78,90,91,97,102,110,121,123,125,126,128,133,134,135,137,138,139,140,141,142,144,147,150,151,152,167,170,173,178,191,192,203,223,229,241,243,248,251],testament:228,teststdin:21,text:[35,36,45,56,60,114,119,123,124,125,126,127,133,137,139,140,142,143,144,146,148,150,154,157,158,160,165,173,186,202,207,221,222,239,248],textual:[139,243],th:90,than:[2,13,16,19,32,35,39,42,54,62,65,66,95,111,124,127,128,133,134,137,139,140,143,148,149,154,161,165,178,192,197,209,211,220,228,236,243,248,251],thank:229,thei:[3,5,30,32,33,39,43,54,60,64,71,73,88,89,90,91,92,93,94,97,99,104,105,107,114,119,121,122,124,125,127,128,133,134,135,137,139,141,142,143,144,145,146,147,148,149,157,161,165,166,168,173,174,175,176,177,178,179,180,188,189,190,192,196,197,198,202,207,220,221,222,225,226,231,240,242,243,244,245,247,255,257],them:[2,3,11,17,21,29,32,33,37,42,43,50,56,62,63,66,79,89,97,99,104,105,106,122,124,129,139,143,146,147,149,150,151,152,157,159,162,163,165,169,173,175,176,177,178,180,181,186,187,189,192,196,203,223,230,232,234,241,243,245,247,249,251,253,255,257],theme:[18,78,82,147,159,173],themselv:[43,71,105,241],therebi:[124,128,133,134,135,137,139,141,142,143],therefor:[35,65,127],thi:[2,3,4,5,6,7,9,10,11,13,19,20,23,24,25,29,30,32,33,35,37,38,40,41,42,43,44,45,54,58,61,62,63,65,66,67,68,69,71,75,76,79,87,89,90,91,92,93,94,95,97,98,99,100,101,102,105,106,107,110,111,112,114,116,118,119,121,122,124,125,127,128,129,133,134,135,136,137,138,139,140,141,142,143,144,147,148,149,150,151,153,154,157,158,159,160,161,162,163,164,165,166,168,169,173,174,175,176,177,178,179,182,183,185,187,189,190,191,192,193,194,196,197,198,199,202,204,206,207,208,209,218,219,220,221,226,227,228,230,231,232,233,235,236,237,238,241,243,244,245,247,248,249,250,251,253,254,255,257],thing:[4,42,45,156,237],think:[32,65,228],third:[3,42,57,110,115,173],this_i:25,those:[39,56,58,64,66,89,92,97,108,118,144,148,154,165,185,192,236,241,248],though:[125,141,175],thought:174,thousand:[11,197,243],thread:[149,174],three:[35,42,65,73,94,143,147,157,163,176,191],threshold:[243,251],through:[24,29,41,43,45,81,84,88,89,90,91,94,97,99,105,118,122,134,138,140,142,150,171,172,173,190,214,215,228,236,248,252],throughout:[126,138],ti:222,tick:157,tidili:161,tile:243,time:[3,6,10,21,22,24,30,32,34,42,44,50,51,52,54,64,65,87,89,90,91,97,99,101,102,111,119,122,124,128,133,134,137,139,141,143,146,148,149,159,161,163,164,173,179,183,190,192,194,195,197,208,209,219,220,221,223,228,236,241,243,245,246,247,248,255,257],time_sp:[208,209],timefram:187,timelin:[81,243],timeout:[124,127,128,143,173,248],timezon:206,tip:236,titl:[54,63,92,95,102,150,154,221],tkinter:10,tkinterpi:10,tmp:147,tmux:5,toc:173,togeth:[129,158,173,192,206,226],toggl:[5,87,97,101,102,106,113,116,119,120,121,124,128,133,134,135,137,139,140,142,143,159,173,177,178,182,192,193,223,239,241,243,247],token:[16,19,35,42,56,100,101,102,115,129,173,176],told:32,toler:143,tool:[0,1,3,10,11,12,13,17,18,19,20,28,29,32,33,41,45,63,65,66,81,83,88,90,91,94,95,97,102,123,143,147,155,157,159,160,169,173,228,229,231,232,236,237,241,252],toolbar:[159,228,229,231],toolkit:26,toolset:65,top:[1,21,24,32,36,40,43,49,59,68,90,91,92,97,99,101,127,134,147,149,150,152,154,155,157,159,160,165,166,169,173,175,176,192,206,225,228,229,236,237,243,247,251,254,255,257],topbottom:237,topic:[13,14,74,77,78,83,123,125,126,148,157,159,214,231,256],topmost:228,tostr:21,total:[111,112,124,127,128,133,134,135,137,139,140,142,143,173,191,192,194,203,208,246],total_point:128,total_points_earn:209,total_points_poss:209,total_test:140,totalnumberofpag:[110,173],totalpoint:127,touch:[],touchpad:156,tour:171,toward:100,track:[3,110,111,115,142,164,173,174,243],tracker:3,tradit:139,trajectori:237,transact:122,transfer:[43,64,99,127,182,192],transform:25,translat:139,trash:169,travers:34,treat:[139,157],tree:[9,18,32,35,66,67,81,124,125,128,142,143,146,153,159,160,163,165,169,173,187,211,212,228,229,230,232,234,236,237],tri:[98,99,157,173],trigger:[12,95,127,144,146,164,243],tripl:[253,254],ts:[152,167],tupl:128,turn:[13,107,138,139,238],turtl:[139,173],turtlegrad:139,turtlemodelcanva:139,turtlemodelcod:139,turtlependown:139,turtlestudentcanva:139,tutor:165,tutori:[1,2,20,32,62,97,126,148,155,175,235],twice:173,twitter:40,two:[39,42,49,91,92,97,112,144,149,156,157,161,169,176,191,211,233,237,247],txt:[32,127,138,140,143,158,173],type:[18,19,23,24,28,29,30,32,35,36,39,41,44,48,56,84,91,92,95,97,99,101,102,107,110,118,123,124,125,126,127,128,134,135,136,137,138,140,141,142,143,144,146,147,148,149,154,157,159,165,171,172,173,175,186,189,192,209,211,214,215,228,233,236,237,238,241,251],typekit:3,typescript:[165,173],typic:[13,19,35,54,69,112,124,128,133,134,135,137,139,142,143,150,154,161,175,195,251],u:63,ubuntu:[2,8,9,10,11,13,14,17,44,52,53,62,173,241],ugent:251,ui:[10,173,236],uid:32,uk:[43,44,91,97,150,230,232,233,235,237],ul:22,ultim:154,un:173,unabl:173,unarch:[176,179],unauthor:[173,204],unavail:148,uncheck:[21,187,188,189,190,195],uncommit:32,uncomplet:247,under:[5,17,34,66,91,92,97,99,102,107,122,124,175,191,237,240,243,247,251,255,257],underli:[55,65],understand:[4,65,66,89,126,145,165,222,243],understood:89,undo:[29,38,173],undon:[46,47,243],unfortun:[],ungrad:[126,133,134,135,137,139,141,142,173],unifi:173,uniqu:[6,42,99,100,102,129,141,165,173],unit:[3,33,43,86,92,101,111,124,125,139,140,173,250],unitid:154,unitignor:151,unittest:173,unittestgrad:[139,173],univers:[3,122,173],unknown:22,unless:[4,10,21,32,52,64,100,122,141,154,159,165,175],unlimit:[124,128,133,134,137,139,143],unlink:214,unlock:[],unmark:[182,219],unnecessari:[65,251],unnecessarili:65,unpack:173,unpin:185,unsav:173,unstag:32,unsur:[],until:[10,21,32,52,63,78,106,127,142,157,166,173,175,183,190,196,198,199,220,225,228,249],untouch:15,untrack:32,unus:[129,151],unwant:4,unwil:[],up:[3,6,10,17,24,28,32,33,34,41,42,45,49,51,63,71,83,85,88,89,94,97,100,104,105,122,124,127,128,129,133,134,137,139,140,141,142,143,145,146,147,148,159,163,165,173,175,178,180,186,191,192,197,203,206,220,221,225,229,230,231,232,234,235,236,243,248,251],updat:[10,13,24,32,44,63,64,65,66,73,76,79,80,89,102,115,118,119,124,125,127,138,173,182,196,206,209,212,220,227,248],upgrad:[111,173,175],upgradein:173,upload:[29,32,45,51,52,70,72,75,76,91,92,94,138,146,173,235,241,243,251],upon:[100,104,105,108,178,196],upper:[18,82,83,195,215,220,222,241,251],upstream:[29,32],upward:135,uri:[102,114],url:[0,3,16,22,24,29,32,34,35,40,44,52,54,56,61,86,87,88,90,92,94,95,98,101,102,105,110,115,127,138,140,142,146,147,154,165,166,173,174,176,177,178,210,221,236,237,241],urlencod:[110,140],urllib:138,urlopen:138,urn:118,us:[1,2,3,4,5,6,8,9,11,12,13,14,15,16,17,18,19,20,21,23,24,25,27,28,29,30,33,34,36,37,38,39,40,41,42,43,44,45,46,47,49,50,51,52,53,55,56,58,59,60,61,62,63,66,67,71,73,74,76,77,78,81,83,84,86,88,89,90,92,94,97,98,99,100,101,102,103,104,105,107,111,114,115,117,118,119,122,124,125,126,128,129,130,133,134,135,137,139,140,141,142,143,144,145,146,147,149,150,152,153,154,155,156,157,158,159,161,164,165,167,169,170,171,172,173,174,175,176,181,182,183,184,186,187,189,190,191,192,196,197,198,199,201,202,204,206,208,209,212,213,219,221,222,223,226,228,229,230,232,233,234,235,236,238,239,241,245,246,247,248,250,251,252],usabl:173,usag:[3,20,32,64,66,78,79,111,149,173,228],usepackag:156,user20752628:146,user:[0,1,3,4,7,10,12,13,17,18,24,25,29,30,32,33,34,37,39,40,44,45,49,51,52,54,58,63,66,70,71,72,73,74,75,77,82,90,91,92,93,94,95,97,99,101,102,103,107,110,113,115,116,117,118,119,121,122,137,143,147,149,150,154,155,157,159,160,168,173,174,192,206,207,209,214,230,231,232,233,235,236,237,238,242,245,248],userdomain:110,userid:[89,92,110,173],usernam:[32,56,73,104,122,127,175,178,192,208,209,238],usr:[127,128,140,248],usual:[3,5,9,16,19,29,32,42,43,114,118,141,143,149,159,174,202,241],utc:127,utf:[138,154],util:[13,127,149,241],uuid:147,v10:124,v1:44,v2:127,v6:124,v8:124,v:[45,49,115],valid:[42,65,110,118,122,127,173],validate_cod:127,valu:[13,21,27,34,58,87,90,91,92,97,101,112,118,124,127,128,133,134,135,137,138,139,140,141,142,143,149,157,162,173,190,191,215,228,241,243],valuabl:6,vanderbilt:[124,128,133,134,135,137,139,142,143],vari:45,variabl:[21,75,127,128,138,139,140,157,173],variablecheckgrad:139,varieti:[83,150,166,214,231],variou:[26,35,61,63,67,148,190,236],vartest:139,vb:[152,167],vcpu:149,ve:68,ventura:3,veq:165,veri:[3,10,13,42,65,66,93,149,154,156,161,228,245],verif:[89,92],verifi:16,versa:173,version:[3,13,16,29,33,35,38,41,44,54,55,61,63,64,67,69,91,94,97,115,119,124,125,127,138,140,143,149,173,175,184,209,214,216,220,235,248,251,255,257],vertic:[49,173],via:[2,3,29,42,43,45,61,62,64,89,92,95,124,125,138,163,168,173,175],vice:173,video:[0,3,20,84,88,94,97,98,99,100,102,113,115,143,148,159,172,173,176,183,191,220,226,236,249],view:[4,10,14,20,24,35,37,43,44,49,53,56,60,63,65,66,80,82,84,85,89,91,92,94,97,101,104,110,115,117,119,124,125,126,128,129,130,131,132,133,135,137,139,142,143,144,149,151,152,153,159,160,162,166,167,168,169,172,173,175,176,177,178,183,191,192,203,207,216,217,220,222,223,235,236,238,244,246,247,249,251],viewer:236,vim:[10,243],vimeo:[3,148],virtual:[10,149,158,165,173,192],viru:3,visibl:[17,44,52,58,63,64,92,108,124,125,128,133,134,135,137,139,142,143,157,159,167,173,175,179,183,185,188,244,248,249],visit:[3,11,173,190],visual:[41,173,233,251],visualis:[158,173],vote:[173,174],vs:243,vscode:243,vtype:13,w100p:22,w:[133,248],wa:[10,29,51,54,55,73,81,98,104,105,134,173,211,220,222,236,246],wai:[1,4,10,11,32,33,38,41,42,53,90,91,94,97,100,144,145,147,148,151,155,156,161,163,168,169,174,191,228,236,241,254],wait:[73,173],walk:[81,252],want:[2,5,8,11,12,13,16,17,19,21,29,32,40,42,45,46,47,48,49,50,53,54,55,57,58,62,63,64,65,66,67,68,69,81,87,90,91,92,97,101,104,105,107,112,114,117,119,123,124,125,127,129,134,137,139,142,143,144,146,147,150,154,157,159,161,165,169,175,176,177,178,181,187,191,192,197,200,206,209,211,214,215,216,217,219,220,222,223,225,228,229,230,232,234,235,236,240,249,251,252,253],warn:[29,32,44,46,47,144,157,168,173,220],warrant:194,wast:[6,65],watch:[21,81,252],wcag:103,we:[2,3,12,17,20,23,29,32,33,37,42,43,44,53,54,62,63,66,89,90,91,97,100,135,136,138,148,149,154,157,173,174,176,188,196,214,221,228,230,231,232,233,235,236,237,241,243],web:[3,8,10,26,32,35,40,42,51,69,83,90,103,146,148,231,235],web_develop:13,webinar:[84,138,172],webkit:22,webkitallowfullscreen:146,websit:[3,24,103,124,158,159,165,176,243],weigh:112,weight:[39,112,124,127,181,185,246],well:[1,32,33,89,126,141,150,155,156,165,188,222,226,228,233,246],were:[5,10,24,55,65,67,69,117,124,127,128,139,160,173,251,252],what:[21,29,30,32,40,43,44,54,65,68,84,139,148,158,165,172,183,192,231,245],whatev:[32,51,127],wheat:231,wheel:229,when:[2,4,5,6,8,10,13,15,16,18,20,21,24,26,29,30,32,34,35,39,42,43,44,45,48,49,51,52,54,55,60,62,64,65,66,67,69,71,73,76,78,82,86,87,89,91,92,93,94,95,97,98,99,102,105,106,110,112,113,114,116,118,120,122,124,125,127,128,133,134,135,137,138,139,140,141,142,143,147,148,149,150,151,156,157,159,160,161,163,164,165,166,167,168,169,173,174,175,176,177,179,180,182,183,185,186,187,191,192,194,195,196,197,198,202,206,207,208,209,211,212,213,220,221,222,223,225,228,230,231,236,239,240,241,242,243,244,245,247,248,251,255,257],whenev:[13,32,49,65],where:[3,6,10,13,16,21,22,24,29,30,32,33,36,37,39,40,43,44,46,47,49,50,52,55,56,63,64,65,70,72,87,92,112,116,117,118,121,122,124,128,129,133,134,139,141,143,144,146,149,150,151,154,157,158,173,174,185,186,189,190,192,202,203,209,221,236,238,248],wherev:65,whether:[5,10,21,44,65,115,116,118,122,124,127,134,139,141,143,147,159,166,175,188,192,215,251],which:[3,5,11,13,16,17,19,22,23,25,29,30,32,34,35,39,41,42,44,45,48,52,53,56,64,66,68,90,91,92,94,95,97,99,101,106,111,121,127,134,137,138,143,144,147,149,150,157,158,159,163,165,166,169,177,189,200,214,220,222,228,236,238,243,251,252],whichev:[35,51,203],white:[49,143],whitelist:3,whitespac:143,who:[3,25,42,61,65,87,88,90,91,94,95,97,99,102,104,115,117,118,119,121,122,128,141,147,154,161,173,175,176,185,192,194,205,206,220,221,236,241,243,247,248,256],whole:[39,185,209],whom:97,whose:[124,154,200,254],why:[6,161],wide:[69,126,214],width:[22,146,173,237],wildcard:69,win:34,window:[1,2,4,5,10,21,29,32,46,47,62,110,128,134,154,155,158,159,160,164,165,166,173,176,187,229,231,236,237,241,244,247],wish:[11,24,31,43,44,76,89,92,93,95,97,99,118,122,124,128,133,134,135,137,139,141,143,144,146,150,151,152,157,159,163,165,166,169,173,176,183,186,203,206,207,216,217,220,221,222,227,238,239,247,251,253,255,257],with_item:13,within:[5,17,21,39,44,49,54,61,64,65,68,71,83,86,89,90,91,97,99,101,102,107,127,133,138,142,146,150,154,157,159,161,164,165,167,169,173,174,176,187,192,193,194,209,223,225,228,236,237,238,244,246,251,255,257],without:[3,4,16,21,35,42,56,69,71,83,89,92,99,110,117,121,139,142,143,173,211,212,215,237,246,255,257],won:[45,144,152,165,235,255,257],word1:[6,16,35],word2:[6,16,35],word:[6,39,44,111,128,133,134,138,157,173,176,186],words_fil:138,work:[2,10,26,32,33,41,42,45,62,63,64,65,66,68,70,71,72,81,84,85,86,91,94,97,125,127,135,136,139,141,142,144,147,148,156,167,169,172,173,174,175,176,179,180,182,184,187,188,189,192,194,198,201,206,207,212,220,227,230,236,237,241,243,247,251],workflow:[29,100],workplac:236,workspac:[2,15,16,17,23,31,33,35,39,44,49,52,54,57,58,62,63,64,65,66,67,69,85,86,125,127,151,165,173,175,192,208,209,241,248,251],world:[152,167],worri:[144,233],worst:203,would:[13,14,20,43,65,76,90,91,92,95,119,127,143,147,157,159,161,165,176,189,236,241,243,255,257],wrap:[154,173],wrench:237,writabl:173,write:[7,10,21,22,58,60,63,64,92,107,124,125,138,140,146,159,167,212,229,236,237,248],writeabl:85,written:[13,51,100,124,157,186,228,237],wrong:[67,173,208],www:[4,42,54,97,105,110,140,146,158,201],x:[60,91,110,118,124,128,129,133,134,137,139,140,143,156,157,162,173,194,215,236,237,248],x_forwarded_proto:6,xdisciplin:157,xml:[95,99,152,167],xmlhttprequest:110,xserver:[236,237],xss:173,xx:173,y:[34,156,157,194],yaml:[44,152,167,173],yaml_map:44,yarn:149,ye:[29,55,90,104,133,178,179,220],year:[157,228,233,251],yet:[32,42,65,66,121,228,246],yml:[152,167],you:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,83,86,87,89,90,91,92,93,94,95,97,98,99,100,102,103,104,105,106,107,108,110,111,112,114,115,117,118,119,121,122,123,124,125,126,127,128,129,130,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,171,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,194,195,196,197,200,201,202,203,205,206,207,209,211,212,213,214,215,216,217,219,220,221,222,223,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,245,246,247,248,249,251,252,253,254,255,256,257],your:[2,3,5,6,7,11,12,14,15,16,17,18,19,20,21,23,24,25,27,31,33,35,37,38,40,41,42,45,46,47,49,50,51,52,53,54,55,56,57,58,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,80,81,82,83,84,85,86,87,89,93,94,96,97,98,99,100,101,103,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,124,125,128,129,131,138,139,140,141,143,144,146,147,149,150,152,153,154,156,157,158,159,160,161,163,164,167,168,171,172,173,174,175,176,177,178,181,182,184,187,189,190,191,194,197,198,199,201,202,205,207,209,211,212,213,214,215,216,220,221,222,223,225,226,227,230,231,232,234,235,236,237,238,239,240,241,246,247,248,251,252,253,254,255,256,257],your_codio_project_nam:32,your_github_nam:32,your_repo_nam:32,yourpassword:143,yourself:[2,11,62,65,157],youtub:[3,148],z:[38,133,229],zen:26,zero:[39,133,134,135,137,139,141,142,145],zip:[58,59,61,86,173,188,208,209],zone:183,zst:209},titles:["Admin","Authoring","Developing Code","Cookies, Firewalls, Browser support","Access Codio Box via SSH","Always-On Boxes","External Access to Boxes and Ports","IDE Access Permissions","Preinstalled Software Packages","File and Software Locations","GUI Based Output","Installing Software Packages","Language Server Protocol","Add Your Own Software Packages","IDE Box Overview","Restart or Reset Box","Customize Run Button","Autostart Services","Terminal Window","Create and Manage Debugger Targets","Debugger","Start Debug Session","Abbreviations","Autocomplete","Audio Video Chat","Code Beautifier","Code Editing Features","Color Picker and Preview","Command Bar","Connecting a Codio Box to a GitHub Repo","Cursor Features","Language Highlighting","Git and GitHub","JUnit Testing Framework","Keyboard Shortcuts","Preview","Quick Open","Real-Time Code Collaboration","Save Files","Search and Replace","Share Project","VSCode","IDE Tools","Desktop App","Git Hub API","Remote SSH Terminal Access","Add and Delete Files","Add and Delete Folders","Open a File","Panels, Tabs, and Layouts","Upload and Download Files","IDE Workspace","Create Starter Pack","Starter Packs","Starter Pack Guidelines","Update a Starter Pack","Access Projects","Copy a Project","Create or Import a Project","Export a Project","Project Permissions","Project Settings","Developing Code","Create a Stack","Modify a Stack","Stack planning","Stacks","Switch Project to New Stack","Update a Stack","Using Stacks","Connect to BitBucket","Environment Variables","Connect to GitHub","Manage Password","Project Preferences","Account Settings","SSH Key","Upload SSH Key to Remote Server","User Preferences","User Profile","Code Commenting","Code Playback","Tools","Lexikon","Getting Started","Welcome to CodioDocs\u2019s documentation!","Common Cartridge","Grading","Integrating with your LMS system (Canvas etc.)","User account creation","Blackboard","Canvas","D2L","Google Classroom","Moodle","Schoology","System specific instructions","LTI App","LTI Course copy","LTI Keys and URLs","LTI version 1.3","LTI 1.3 for Brightspace/D2L","LTI 1.3 for Canvas","Legal stuff","Add or Remove Organization Owners","Add Teachers to Organization","Enable or Disable Releasing Grades Automatically","Create an Organization Assessments Library","Set Users Dashboard","Deleting an Organization","Enable Custom Script","Gigaboxes","Create Grading Templates","Hide A/V calls","Set Organization Contact URL","Organization settings","Enable or Disable Public/Private Settings","Remove Organization Members","Enable SSO Integration","Configure Student IP Consent Form","Show Student Emails","View Organization Members","Organization Billing","Auto-graded assessments","Advanced Code Test","Assessment Security","Assessments","Assignment Level Scripts","Free Text Autograde","Delete an Assessment","Duplicate an Assessment","Edit an Assessment","Edit Assessment Points","Fill in the Blanks","Free Text","Grade Book","Math Assessments","Multiple Choice","Parameterized assessments","Parsons Puzzle","Partial Points","Random Assessment","Sense Network","Standard Code Test","Student submission options","Ungraded Assessments","Adding media","Author and student views","Authoring Guidelines","System Resources","Custom Buttons in Guides","Excluding Files/Folders","Freezing Code","Hiding folders","HTML content editing","Authoring","Latex for math expressions","Markdown content editing","Open/close tabs from content","Page editing overview","Previewing content","Project or course assignment","Assessment Settings","Global Guide Settings","Media Settings for a Guide","Open tabs","Guides Settings and Page actions","Solution File Templating","Teacher only content","Table of contents management","How to Videos","Onboarding Guide","Getting Started","Changelog","Codio Support","Add and Remove Course Assignments","Add, Remove or Archive Students in a Course","Add Teaching Assistant to a Course","Add or Remove Teachers in a Course","Archive Course","Reset Assignment by Student","Assign Grading Template to an Assignment","Assignment Action Buttons","Assignment Duration","Gigabox Slot","Managing assignments","Assignment Surveys","Disable Assignment","Disable Download","Disable Mark as Completed","Exam Proctoring","Grade Weights","Pair Programming","Mandatory Progress","Penalties","Pin and Unpin Assignment","Prerequisite Assignments","Prime Assignment Containers","Visibility on Completed","Visibility on Disabled","Change Student Passwords","Clone a Course","Course contact URL","Gamification","Revoke sudo access for all assignments in the course","Courses Set Up","Create a New Course","Delete Course","Export Assignment Data","Data Exports","Export LTI Settings","Add Questions from Assessments Library","Add Questions to an Assessments Library","Assessments Libraries","Codio Global Assessments Library","Search Assessments Library","Unlink an Assessment","Update an Existing Assessment in Library","Connecting to your LMS","Mark Assignment as Complete/Uncomplete","Modify Assignments","Automated Emails","Working with Parent/Child Courses","Preview Courses and Assignments","Rename Course","Rename/Reorder Modules and Assignments","Codio instructional resources","Editing Resources","Additional resources","Flode","Jeroo","Lexikon","Pencil Code","Processing and p5","Pyret","Scratch","Tkinter","Turtle","Search and Order Courses","Share Course","View Student Usernames","Virtual Machines","Inviting students to your course","Behavior Insights","Code Commenting","Cursor Presence","Grading Free Text Questions","Grading","Auto-Grade with nbgrader","Release Grades","Learning Insights","Plagiarism Checker","Code Playback","Removing Students","Resetting student passwords","Viewing student work","Courses Set up","Teaching"],titleterms:{"1":[91,100,101,102],"2":[91,100,102],"3":[91,100,101,102],"4":102,"6":31,"case":64,"default":[],"do":[],"export":[59,119,208,209,210],"function":154,"import":[14,29,32,58,102,148,158],"long":[54,148],"new":[11,16,29,32,54,63,67,101,104,123,192,206,222,229],"public":[4,42,45,116],"switch":[65,67],A:[24,29,113],By:91,If:151,In:[29,90,91,93,95,97,101,102,237],No:243,Not:[],On:5,The:[125,144,251],To:[3,150,151,191],abbrevi:[22,34],abl:[],about:148,access:[1,4,6,7,42,43,45,56,88,101,103,105,122,125,127,138,155,169,192,204,209,251],account:[44,75,79,89,90,91,92,93,94],action:[44,166,169,182],activ:32,ad:[42,44,91,102,146,169,186,192,228,229],add:[11,13,46,47,60,101,104,105,107,123,175,176,177,178,194,211,212,222,238],addit:228,address:118,adjust:194,admin:[0,92],advanc:124,after:241,align:229,all:[127,128,204,220,238],allow:163,alreadi:220,also:178,alwai:5,an:[44,90,91,92,95,97,102,104,107,109,127,129,130,131,168,181,212,216,217,220,222],anatomi:159,announc:222,anonym:247,anoth:56,ansibl:13,api:44,app:[43,91,97,151],appear:166,applic:102,ar:134,archiv:[176,179],ask:186,assess:[107,123,125,126,127,128,129,130,131,132,134,136,138,141,145,148,159,162,209,211,212,213,214,215,216,217],asset:148,assign:[44,71,90,91,92,95,97,99,100,101,127,161,175,180,181,182,183,185,186,187,195,196,197,203,204,208,219,220,222,223,225,241,249,250],assist:177,attribut:[23,118],audio:[24,146],authent:[42,90,91,93,94],author:[1,147,148,155,206],auto:[123,127,128,138,140,248],autocomplet:[12,23],autograd:[128,140],autom:221,automat:[106,128,134,241],autostart:[11,17],avail:250,averag:203,back:[17,29,163],background:150,backpack:235,bar:[28,203],base:[10,42,138],bash:13,basic:[22,32],beautifi:25,befor:221,behavior:243,bill:122,bitbucket:70,blackboard:90,blank:133,block:[125,148,157,229],bold:157,book:135,bookstor:122,bootstrap:127,box:[4,5,6,14,15,29],branch:32,brightspac:101,bring:[90,91,92,95],browser:3,bullet:157,button:[16,144,150,163,182],c:237,calcul:34,call:[24,113],callout:[148,157],campu:[],canva:[0,88,91,97,100,102],cartridg:[86,91,92,94],catalog:206,center:229,certifi:63,challeng:[],chang:[32,73,118,141,200,228],changelog:173,chapter:169,chart:229,chat:24,check:32,checker:251,checkstyl:124,child:222,choic:[136,137],choos:206,chrome:[3,24],classroom:93,clean:236,click:42,clone:201,close:[158,163,166],code:[2,9,10,25,26,32,37,62,80,81,124,143,148,152,157,165,206,228,232,244,247,252],codeplayback:243,codio:[1,4,29,32,54,63,88,90,91,92,93,95,97,101,102,104,105,124,127,155,174,214,226,241],codiodoc:85,collabor:[29,37,107,151],collaps:[157,163],collect:186,color:27,command:[11,28,32,42,158,165],comment:[34,80,228,229,244,247],commit:[29,32,42],common:[86,91,92,94],commun:174,compat:3,complet:[144,163,189,198,219],comput:165,concept:[2,62],condit:103,configur:[14,16,33,94,100,102,119,150,203,243,248],conflict:32,connect:[3,4,29,43,45,70,72,92,100,101,218,229],consent:119,constant:99,contact:[114,202],contain:197,content:[35,43,90,138,147,148,150,154,157,158,159,160,166,168,169,175,209,228,231,241],control:[21,166],cooki:3,copi:[45,46,47,57,98,101,102,196,255,257],correct:[128,134],cours:[90,91,92,95,97,98,99,101,102,141,161,175,176,177,178,179,201,202,203,204,205,206,207,209,222,223,224,228,238,239,241,242,243,250,251,256],coursewar:206,coursework:209,cpu:149,creat:[19,32,42,45,52,54,58,63,69,92,101,102,107,112,138,175,206,228,229],creation:[89,90,91,92,93,94],credit:229,crunch:228,css:[22,23,154,157],current:[16,147,150],cursor:[30,245],custom:[10,16,100,110,124,147,150,157],d2l:[92,101],dashboard:[5,63,68,97,108,163,174,185,194],data:[119,208,209,243],deadlin:[144,194],debug:[19,21,127,228],debugg:[19,20,21,150],decrement:34,defin:166,delet:[42,46,47,55,79,81,109,129,169,207,215,228],demo:[148,236],deploi:42,deploy:42,descript:54,design:[1,155],desktop:[43,151],destin:42,detail:[69,221],detextifi:156,develop:[2,62,102],dialog:174,direct:158,directli:88,disabl:[3,106,116,187,188,189,199],disconnect:222,disk:149,displai:156,document:85,don:148,download:[50,188,255,257],drag:[169,229],driver:192,drop:169,duplic:130,durat:183,dyslexia:82,earlier:222,ecmascript:31,edit:[22,26,34,45,131,132,147,154,157,159,169,227,228,229],editor:159,email:[118,120,221],empti:42,enabl:[3,4,5,12,90,91,92,95,106,110,116,118,119,177,178,241,243,249],endpoint:100,enhanc:[127,140],entir:[168,222],entri:91,environ:71,error:35,etc:[0,88],event:150,exam:190,exampl:[13,22,44,65,124,127,128,138,140,157,158,165,248],exchang:156,exclud:[43,69,151],execut:33,exist:[42,104,217],exit:51,expand:[],expir:[],express:156,extend:[],extern:[6,92,243],featur:[2,21,26,30,62,251],feedback:[124,174],ferpa:103,few:29,field:[42,101],file:[9,32,38,42,43,44,46,48,50,54,69,81,143,147,150,151,152,158,165,166,167,228,229,236,241,248],fill:133,filter:[56,97],find:[4,32],firefox:[3,24],firewal:3,flode:229,folder:[42,43,47,69,125,148,151,153,166],follow:191,footer:[154,163],forgot:73,form:119,forward:4,framework:33,free:[128,134,136,246],freez:152,frequent:[],from:[3,5,11,32,44,63,68,69,101,138,141,158,178,196,206,211,214,222,236,249],ftp:42,full:[166,236],fulli:[],fuzzi:22,gamif:203,gdpr:103,gener:[4,103],get:[84,172,256],gh:44,gigabox:[111,184],git:[29,32,42,44],github:[29,32,44,54,72],glob:39,global:[39,163,214],go:[29,34],googl:[24,93],grade:[87,106,112,123,127,128,134,135,136,138,140,181,191,192,246,247,248,249],grader:139,group:[104,192],gui:10,guid:[1,147,148,150,155,163,164,166,171,231,241],guidelin:[54,63,148],handler:150,have:[220,241],header:[6,154,157,163],helper:29,hidden:148,hide:[24,97,113,153,163,166],highlight:[31,148,165],histori:[42,68,122,243],home:3,how:[100,170],html:[22,23,154,157,163],hub:44,hyperlink:[146,157],i:[],id:[5,7,14,32,42,44,51,63,68,127,147,174],identifi:103,ie:3,ifram:[146,157],imag:[146,157],immedi:29,implement:44,increment:34,indent:157,indic:85,individu:[44,127,194,220,222,236],inform:[14,29,44,74,78,90,91,92,95,103,148,206,222],initi:241,inlin:[34,156],input:21,insert:22,insight:[243,250],instal:[10,11,12,41],institut:122,instruct:[96,148,226,228],instructor:194,integr:[0,44,88,90,91,92,93,95,99,100,101,118],interact:241,introduct:[1,155],invit:[105,242],invoic:122,ip:119,ital:157,item:34,its:[],java:237,javascript:23,jeroo:230,join:[],jshint:124,jslint:124,json:[13,100],juicier:22,jump:150,junit:[33,124],keep:5,kei:[4,42,45,76,77,99,102],keyboard:34,knowledg:148,label:228,lamp:63,languag:[12,31,152,167],latest:65,latex:[156,157],launch:150,launcher:127,layout:[49,148,159,163,166],leaderboard:203,learn:[92,148,166,250],learner:97,left:166,legal:103,level:[92,127,250],lexikon:[83,163,228,231],librari:[107,211,212,213,214,215,217],limit:10,line:[11,34,42,165,228,229],link:[32,92,101],linux:45,list:157,listen:150,lm:[0,88,91,97,99,218],load:[148,150],local:[4,39,43],localhost:14,locat:9,login:118,lsp:12,lti1:100,lti:[90,91,92,95,97,98,99,100,101,102,210],mac:45,machin:[4,241],mai:148,make:[29,45,148],manag:[19,42,43,45,73,169,185,192],mandatori:[193,203],manual:[29,32,91,100,136,237],map:[44,90,91,95,97,100],mark:[144,163,189,219],markdown:[148,157],match:[34,39],materi:148,math:[136,156],mathjax:[156,157],md:[32,54],media:[146,148,164],member:[117,121],memori:149,mentor:97,menu:[6,35,42,147,163],merg:34,method:6,minim:65,miss:42,mistak:[],mode:[42,156,160,228],modif:[64,66],modifi:[35,64,214,220],modul:[92,175,203,225,228,250],moodl:[94,100],more:[29,74,78,138,148,206],move:[46,47,228],multi:229,multipl:[30,44,65,136,137,169],my:238,mysql:13,name:[42,158],navig:[134,192],nbgrader:248,nbgrader_config:248,network:[3,142],nodejitsu:42,note:102,noth:128,notif:222,number:[34,65,157,163,165],object:[100,166],offlin:43,onboard:171,onli:[166,168],onlin:43,open:[16,36,41,48,56,158,165,241],oper:45,option:[91,139,144,147,220,243],order:238,organ:[104,105,107,109,114,115,117,121,122,148],origin:6,output:[10,143,228],overrid:247,overview:[14,159,228,229],own:[10,13,65,206],owner:104,ownership:66,p5:233,pack:[52,53,54,55,139,230,232,235,236,237],packag:[8,11,13],package_list:13,page:[122,148,150,159,163,166,168,169],pai:122,pair:[4,34,192,241],panel:[49,148,165,166],param:100,paramet:138,parameter:138,parent:222,parson:139,part:[100,102],partial:[128,140],particip:127,pass:[],password:[42,73,200,254],past:[45,91,100,243],path:42,pattern:39,payment:[],pdf:209,penalti:[144,194,247],pencil:232,permiss:[7,24,60],person:103,picker:27,pin:195,plagiar:251,plai:160,plan:65,platform:[],playback:[81,252],playbook:13,player:[147,243],point:[22,29,34,127,128,132,140],pop:101,port:[3,6,42],postgrad:248,prefer:[74,78],preinstal:8,prerequisit:[20,196],presenc:[30,245],preview:[6,27,35,100,147,160,165,223],previou:29,previous:[],prime:197,privat:116,problem:[],process:[5,150,233,247],proctor:190,profil:79,program:[192,241],progress:[193,203],project:[2,5,10,32,40,44,56,57,58,59,60,61,62,67,69,74,148,161,192],protect:163,protocol:[12,42],provid:32,publish:[44,141,220,241],pull:[32,222],push:[29,32],put:17,puzzl:139,py:248,pycodestyl:124,pyret:234,python:[236,237],question:[186,211,212,214,246],queue:247,quick:[36,45],random:141,re:220,readm:[32,54],real:37,recommend:6,redeem:[],redo:[228,229],referenc:6,regist:101,regrad:127,relationship:222,releas:[106,249],remot:[32,42,45,77],remov:[34,60,93,104,117,175,176,178,194,247,253],renam:[157,224,225],reorder:225,replac:39,repo:[29,32],report:251,repositori:32,request:[6,11],requir:3,reset:[15,73,180,220,254],resiz:229,resolv:32,resourc:[100,102,149,156,226,227,228],restart:15,restor:[147,150],restrict:11,result:[127,186],retriev:81,revert:[29,32,222],revok:204,right:42,role:[89,92,118],rspec:124,rsync:42,rubocop:124,rule:64,run:[5,10,16,165,228,236,251],s:[4,44,56,85,127,241],safari:[3,24],sampl:[10,63,139,148],save:[29,38,45,215,228],schoologi:95,score:128,scratch:[235,236],screen:160,script:[13,110,127,128,138,140,150,163],search:[22,39,56,69,215,238],section:[44,157,163,169],secur:[125,127],see:[124,178],segment:157,select:[34,100,168,169,228,229],send:[105,127,222],sens:142,sent:222,server:[10,12,17,42,77],servic:17,session:21,set:[3,18,25,33,43,44,56,61,75,93,101,108,114,115,116,118,154,159,162,163,164,166,168,185,205,210,237,241,256],setup:[90,94],sftp:42,share:[40,206,239],shortcut:34,show:[120,166],sign:92,singl:[65,92],sleep:17,slot:184,softwar:[8,9,11,13],solut:167,sort:238,sourc:[209,228],space:[149,158],specif:[6,42,96],specifi:[42,165,191],split:160,ssh:[4,45,76,77],sso:118,stack:[32,54,63,64,65,66,67,68,69,156,175,228,236,241],stage:[32,44],standard:[6,21,143],start:[21,43,84,97,163,172,220,241,256],starter:[52,53,54,55,139,230,232,235,236,237],statu:32,step:[191,228],stop:22,structur:44,student:[11,71,97,108,119,120,122,125,127,134,144,147,148,151,174,176,177,178,180,186,192,194,200,209,219,220,240,241,242,250,253,254,255,257],stuff:103,style:148,submiss:144,submit:[144,163],sudo:204,summari:158,support:[3,12,21,31,82,152,154,167,174],suppress:163,survei:186,synchronis:141,syntax:158,system:[0,88,96,149,165,241],systemd:17,t:148,tab:[49,138,158,165,166,238],tabl:[85,169],tag:[23,34],target:[19,42],teach:[177,257],teacher:[89,92,105,108,151,166,168,178,185,223],templat:[2,62,63,112,167,181,221],term:103,termin:[5,16,18,42,45,125,150,165],tern:23,test:[3,33,124,127,143,148,176],text:[128,134,136,246],theme:[85,163],time:37,timeout:33,titl:157,tkinter:236,toggl:[34,163,249],token:105,too:148,tool:[42,82,92,100,101],topic:163,track:32,transfer:42,tree:[42,166],turtl:237,type:[42,166],unauthor:11,uncomplet:219,undo:[228,229],ungrad:145,unit:[],unittest:124,unlink:216,unpin:195,unsecur:35,up:[44,90,91,92,93,95,101,118,205,237,241,256],updat:[55,68,93,141,175,217,222,241],upload:[4,50,77],upstart:17,url:[91,97,99,100,114,118,202],us:[10,32,35,54,64,65,69,91,127,136,138,148,151,163,166,214,215,231],user:[42,56,60,78,79,88,89,104,108],usernam:240,v:[24,113],variabl:71,version:[32,65,66,68,100,222],via:4,video:[24,146,157,170,228,229],view:[3,32,68,69,121,122,134,147,194,219,240,243,250,255,257],viewer:10,vimeo:146,virtual:241,visibl:[66,198,199],visualis:165,vm:[165,241],vscode:41,web:138,weight:191,welcom:85,when:[17,219],why:[],widget:236,wildcard:39,window:[16,18,45,150,228],within:168,without:32,work:[3,29,44,124,222,255,257],workflow:44,workspac:[9,43,51,196,255,257],wrap:34,write:[150,157],writeabl:[255,257],written:143,x:10,xml:91,yml:44,you:[65,101],your:[0,4,10,13,29,32,43,44,79,88,90,91,92,95,102,104,127,148,165,166,206,218,228,229,242,243],youtub:146,zoom:229}}) \ No newline at end of file diff --git a/docs/setupcourses.html b/docs/setupcourses.html new file mode 100644 index 00000000..0c74b734 --- /dev/null +++ b/docs/setupcourses.html @@ -0,0 +1,818 @@ + + + + + + + + + Courses Set up — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Courses Set up

+
+
+

A course is a grouping of students who are taught as a logical group. One of the main tasks for instructors is to create the courses for their students, and then add content (modules and assignments), share it with others, add teachers and students to it, and other tasks. +With courses, you can instantly access student code and projects.

+

You can also integrate the course with any LTI-enabled LMS platform such as Canvas, D2L, Moodle, Blackboard and many others. Your LMS can auto-populate courses and grade data can be fed back from Codio to the LMS.

+
+ + + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/sitemap-student.xml b/docs/sitemap-student.xml new file mode 100644 index 00000000..44030f8d --- /dev/null +++ b/docs/sitemap-student.xml @@ -0,0 +1,2 @@ + +https://docs.codio.com/accessing-codio.htmlhttps://docs.codio.com/courses.htmlhttps://docs.codio.com/develop.htmlhttps://docs.codio.com/develop/develop/general.htmlhttps://docs.codio.com/develop/develop/ide/boxes/access.htmlhttps://docs.codio.com/develop/develop/ide/boxes/always-on.htmlhttps://docs.codio.com/develop/develop/ide/boxes/ext-access.htmlhttps://docs.codio.com/develop/develop/ide/boxes/ide-access-permissions.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/default-installed.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/file-locations.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/gui.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/install-software.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/langserver.htmlhttps://docs.codio.com/develop/develop/ide/boxes/installsw/parts-coding.htmlhttps://docs.codio.com/develop/develop/ide/boxes/overview.htmlhttps://docs.codio.com/develop/develop/ide/boxes/restart-reset.htmlhttps://docs.codio.com/develop/develop/ide/boxes/runmenu.htmlhttps://docs.codio.com/develop/develop/ide/boxes/startup.htmlhttps://docs.codio.com/develop/develop/ide/boxes/terminal.htmlhttps://docs.codio.com/develop/develop/ide/debugger/create-debug-target.htmlhttps://docs.codio.com/develop/develop/ide/debugger/debugger.htmlhttps://docs.codio.com/develop/develop/ide/debugger/start-debug.htmlhttps://docs.codio.com/develop/develop/ide/editing/abbreviations.htmlhttps://docs.codio.com/develop/develop/ide/editing/autocomplete.htmlhttps://docs.codio.com/develop/develop/ide/editing/av-chat.htmlhttps://docs.codio.com/develop/develop/ide/editing/code-beautifier.htmlhttps://docs.codio.com/develop/develop/ide/editing/code-editing.htmlhttps://docs.codio.com/develop/develop/ide/editing/color-picker.htmlhttps://docs.codio.com/develop/develop/ide/editing/command-bar.htmlhttps://docs.codio.com/develop/develop/ide/editing/connect-github-codio.htmlhttps://docs.codio.com/develop/develop/ide/editing/cursor.htmlhttps://docs.codio.com/develop/develop/ide/editing/force-language-highlighting.htmlhttps://docs.codio.com/develop/develop/ide/editing/git.htmlhttps://docs.codio.com/develop/develop/ide/editing/junit.htmlhttps://docs.codio.com/develop/develop/ide/editing/keyboard-shortcuts.htmlhttps://docs.codio.com/develop/develop/ide/editing/preview.htmlhttps://docs.codio.com/develop/develop/ide/editing/quick-open.htmlhttps://docs.codio.com/develop/develop/ide/editing/real-time-collaboration.htmlhttps://docs.codio.com/develop/develop/ide/editing/save-files.htmlhttps://docs.codio.com/develop/develop/ide/editing/search-replace.htmlhttps://docs.codio.com/develop/develop/ide/editing/share-project.htmlhttps://docs.codio.com/develop/develop/ide/editing/vscode.htmlhttps://docs.codio.com/develop/develop/ide/tools/deployment.htmlhttps://docs.codio.com/develop/develop/ide/tools/desktopapp.htmlhttps://docs.codio.com/develop/develop/ide/tools/ghapi.htmlhttps://docs.codio.com/develop/develop/ide/tools/ssh.htmlhttps://docs.codio.com/develop/develop/ide/workspace/add-delete-files.htmlhttps://docs.codio.com/develop/develop/ide/workspace/add-delete-folders.htmlhttps://docs.codio.com/develop/develop/ide/workspace/open-file.htmlhttps://docs.codio.com/develop/develop/ide/workspace/panels.htmlhttps://docs.codio.com/develop/develop/ide/workspace/upload-download-files.htmlhttps://docs.codio.com/develop/develop/ide/workspace/workspace.htmlhttps://docs.codio.com/develop/develop/packs/create-starter-pack.htmlhttps://docs.codio.com/develop/develop/packs/packs.htmlhttps://docs.codio.com/develop/develop/packs/starter-pack-guidelines.htmlhttps://docs.codio.com/develop/develop/packs/update-starter-pack.htmlhttps://docs.codio.com/develop/develop/projects/access-projects.htmlhttps://docs.codio.com/develop/develop/projects/copy-project.htmlhttps://docs.codio.com/develop/develop/projects/create-import-project.htmlhttps://docs.codio.com/develop/develop/projects/export-project.htmlhttps://docs.codio.com/develop/develop/projects/project-permissions.htmlhttps://docs.codio.com/develop/develop/projects/project-settings.htmlhttps://docs.codio.com/develop/develop/projects/projects.htmlhttps://docs.codio.com/develop/develop/stacks/create-stack.htmlhttps://docs.codio.com/develop/develop/stacks/modify-stack.htmlhttps://docs.codio.com/develop/develop/stacks/stack-planning.htmlhttps://docs.codio.com/develop/develop/stacks/stacks.htmlhttps://docs.codio.com/develop/develop/stacks/switch-stack.htmlhttps://docs.codio.com/develop/develop/stacks/update-stack.htmlhttps://docs.codio.com/develop/develop/stacks/using-stacks.htmlhttps://docs.codio.com/develop/settings/bitbucket.htmlhttps://docs.codio.com/develop/settings/env-variables.htmlhttps://docs.codio.com/develop/settings/github.htmlhttps://docs.codio.com/develop/settings/manage-password.htmlhttps://docs.codio.com/develop/settings/project-prefs.htmlhttps://docs.codio.com/develop/settings/settings.htmlhttps://docs.codio.com/develop/settings/ssh-key.htmlhttps://docs.codio.com/develop/settings/upload-ssh-key-remote-server.htmlhttps://docs.codio.com/develop/settings/user-prefs.htmlhttps://docs.codio.com/develop/settings/user-profile.htmlhttps://docs.codio.com/develop/tools/code-commenting.htmlhttps://docs.codio.com/develop/tools/code-playback.htmlhttps://docs.codio.com/develop/tools/dyslexia.htmlhttps://docs.codio.com/develop/tools/lexikon.htmlhttps://docs.codio.com/student.htmlhttps://docs.codio.com/students/accessing-codio/accessing-codio.htmlhttps://docs.codio.com/students/accessing-codio/faq.htmlhttps://docs.codio.com/students/accessing-codio/joining.htmlhttps://docs.codio.com/students/accessing-codio/paying.htmlhttps://docs.codio.com/students/courses/accessing.htmlhttps://docs.codio.com/students/courses/audio-video.htmlhttps://docs.codio.com/students/courses/complete-assignment.htmlhttps://docs.codio.com/students/courses/courses.htmlhttps://docs.codio.com/students/courses/exam-mode.htmlhttps://docs.codio.com/students/courses/navigate-student-dashboard.htmlhttps://docs.codio.com/students/courses/pair-programming.htmlhttps://docs.codio.com/students/courses/play-mode.htmlhttps://docs.codio.com/students/courses/restore-files.htmlhttps://docs.codio.com/students/courses/start-assignment.htmlhttps://docs.codio.com/students/courses/usingguides.htmlhttps://docs.codio.com/students/courses/view-grade.htmlhttps://docs.codio.com/tools.htmlhttps://docs.codio.com/genindex.htmlhttps://docs.codio.com/student.htmlhttps://docs.codio.com/search.html \ No newline at end of file diff --git a/docs/sitemap.xml b/docs/sitemap.xml new file mode 100644 index 00000000..dc15e52d --- /dev/null +++ b/docs/sitemap.xml @@ -0,0 +1,2 @@ + +https://docs.codio.com/admin.htmlhttps://docs.codio.com/authoring.htmlhttps://docs.codio.com/common.htmlhttps://docs.codio.com/common/develop/general.htmlhttps://docs.codio.com/common/develop/ide/boxes/access.htmlhttps://docs.codio.com/common/develop/ide/boxes/always-on.htmlhttps://docs.codio.com/common/develop/ide/boxes/ext-access.htmlhttps://docs.codio.com/common/develop/ide/boxes/ide-access-permissions.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/default-installed.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/file-locations.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/gui.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/install-software.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/langserver.htmlhttps://docs.codio.com/common/develop/ide/boxes/installsw/parts-coding.htmlhttps://docs.codio.com/common/develop/ide/boxes/overview.htmlhttps://docs.codio.com/common/develop/ide/boxes/restart-reset.htmlhttps://docs.codio.com/common/develop/ide/boxes/runmenu.htmlhttps://docs.codio.com/common/develop/ide/boxes/startup.htmlhttps://docs.codio.com/common/develop/ide/boxes/terminal.htmlhttps://docs.codio.com/common/develop/ide/debugger/create-debug-target.htmlhttps://docs.codio.com/common/develop/ide/debugger/debugger.htmlhttps://docs.codio.com/common/develop/ide/debugger/start-debug.htmlhttps://docs.codio.com/common/develop/ide/editing/abbreviations.htmlhttps://docs.codio.com/common/develop/ide/editing/autocomplete.htmlhttps://docs.codio.com/common/develop/ide/editing/av-chat.htmlhttps://docs.codio.com/common/develop/ide/editing/code-beautifier.htmlhttps://docs.codio.com/common/develop/ide/editing/code-editing.htmlhttps://docs.codio.com/common/develop/ide/editing/color-picker.htmlhttps://docs.codio.com/common/develop/ide/editing/command-bar.htmlhttps://docs.codio.com/common/develop/ide/editing/connect-github-codio.htmlhttps://docs.codio.com/common/develop/ide/editing/cursor.htmlhttps://docs.codio.com/common/develop/ide/editing/force-language-highlighting.htmlhttps://docs.codio.com/common/develop/ide/editing/git.htmlhttps://docs.codio.com/common/develop/ide/editing/junit.htmlhttps://docs.codio.com/common/develop/ide/editing/keyboard-shortcuts.htmlhttps://docs.codio.com/common/develop/ide/editing/preview.htmlhttps://docs.codio.com/common/develop/ide/editing/quick-open.htmlhttps://docs.codio.com/common/develop/ide/editing/real-time-collaboration.htmlhttps://docs.codio.com/common/develop/ide/editing/save-files.htmlhttps://docs.codio.com/common/develop/ide/editing/search-replace.htmlhttps://docs.codio.com/common/develop/ide/editing/share-project.htmlhttps://docs.codio.com/common/develop/ide/editing/vscode.htmlhttps://docs.codio.com/common/develop/ide/tools/deployment.htmlhttps://docs.codio.com/common/develop/ide/tools/desktopapp.htmlhttps://docs.codio.com/common/develop/ide/tools/ghapi.htmlhttps://docs.codio.com/common/develop/ide/tools/ssh.htmlhttps://docs.codio.com/common/develop/ide/workspace/add-delete-files.htmlhttps://docs.codio.com/common/develop/ide/workspace/add-delete-folders.htmlhttps://docs.codio.com/common/develop/ide/workspace/open-file.htmlhttps://docs.codio.com/common/develop/ide/workspace/panels.htmlhttps://docs.codio.com/common/develop/ide/workspace/upload-download-files.htmlhttps://docs.codio.com/common/develop/ide/workspace/workspace.htmlhttps://docs.codio.com/common/develop/packs/create-starter-pack.htmlhttps://docs.codio.com/common/develop/packs/packs.htmlhttps://docs.codio.com/common/develop/packs/starter-pack-guidelines.htmlhttps://docs.codio.com/common/develop/packs/update-starter-pack.htmlhttps://docs.codio.com/common/develop/projects/access-projects.htmlhttps://docs.codio.com/common/develop/projects/copy-project.htmlhttps://docs.codio.com/common/develop/projects/create-import-project.htmlhttps://docs.codio.com/common/develop/projects/export-project.htmlhttps://docs.codio.com/common/develop/projects/project-permissions.htmlhttps://docs.codio.com/common/develop/projects/project-settings.htmlhttps://docs.codio.com/common/develop/projects/projects.htmlhttps://docs.codio.com/common/develop/stacks/create-stack.htmlhttps://docs.codio.com/common/develop/stacks/modify-stack.htmlhttps://docs.codio.com/common/develop/stacks/stack-planning.htmlhttps://docs.codio.com/common/develop/stacks/stacks.htmlhttps://docs.codio.com/common/develop/stacks/switch-stack.htmlhttps://docs.codio.com/common/develop/stacks/update-stack.htmlhttps://docs.codio.com/common/develop/stacks/using-stacks.htmlhttps://docs.codio.com/common/settings/bitbucket.htmlhttps://docs.codio.com/common/settings/env-variables.htmlhttps://docs.codio.com/common/settings/github.htmlhttps://docs.codio.com/common/settings/manage-password.htmlhttps://docs.codio.com/common/settings/project-prefs.htmlhttps://docs.codio.com/common/settings/settings.htmlhttps://docs.codio.com/common/settings/ssh-key.htmlhttps://docs.codio.com/common/settings/upload-ssh-key-remote-server.htmlhttps://docs.codio.com/common/settings/user-prefs.htmlhttps://docs.codio.com/common/settings/user-profile.htmlhttps://docs.codio.com/common/tools/code-commenting.htmlhttps://docs.codio.com/common/tools/code-playback.htmlhttps://docs.codio.com/common/tools/dyslexia.htmlhttps://docs.codio.com/common/tools/lexikon.htmlhttps://docs.codio.com/getstarted.htmlhttps://docs.codio.com/index.htmlhttps://docs.codio.com/instructors/admin/integration/commoncartridge.htmlhttps://docs.codio.com/instructors/admin/integration/grading.htmlhttps://docs.codio.com/instructors/admin/integration/intro.htmlhttps://docs.codio.com/instructors/admin/integration/lms-students.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/blackboard.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/canvas.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/d2l.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/google-classroom.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/moodle.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/schoology.htmlhttps://docs.codio.com/instructors/admin/integration/lms-systems/system-specific-directions.htmlhttps://docs.codio.com/instructors/admin/integration/lti-app.htmlhttps://docs.codio.com/instructors/admin/integration/lti-course-copy.htmlhttps://docs.codio.com/instructors/admin/integration/lti-keys-and-urls-information.htmlhttps://docs.codio.com/instructors/admin/integration/lti1-3.htmlhttps://docs.codio.com/instructors/admin/integration/lti1-3BS-D2L.htmlhttps://docs.codio.com/instructors/admin/integration/lti1-3Canvas.htmlhttps://docs.codio.com/instructors/admin/legal.htmlhttps://docs.codio.com/instructors/admin/organization/add-remove-org-owners.htmlhttps://docs.codio.com/instructors/admin/organization/add-teachers.htmlhttps://docs.codio.com/instructors/admin/organization/auto-release-grades.htmlhttps://docs.codio.com/instructors/admin/organization/create-org-library.htmlhttps://docs.codio.com/instructors/admin/organization/default-student-dashboard.htmlhttps://docs.codio.com/instructors/admin/organization/delete-org.htmlhttps://docs.codio.com/instructors/admin/organization/enable-custom-script.htmlhttps://docs.codio.com/instructors/admin/organization/gigabox-usage.htmlhttps://docs.codio.com/instructors/admin/organization/grade-templates.htmlhttps://docs.codio.com/instructors/admin/organization/hide-av.htmlhttps://docs.codio.com/instructors/admin/organization/org-contact-url.htmlhttps://docs.codio.com/instructors/admin/organization/organisation.htmlhttps://docs.codio.com/instructors/admin/organization/public-private-settings.htmlhttps://docs.codio.com/instructors/admin/organization/remove-org-members.htmlhttps://docs.codio.com/instructors/admin/organization/sso.htmlhttps://docs.codio.com/instructors/admin/organization/student-consent-form.htmlhttps://docs.codio.com/instructors/admin/organization/student-email.htmlhttps://docs.codio.com/instructors/admin/organization/view-org-members.htmlhttps://docs.codio.com/instructors/admin/orgbilling.htmlhttps://docs.codio.com/instructors/authoring/assessments/add-assessment.htmlhttps://docs.codio.com/instructors/authoring/assessments/advanced-code-test.htmlhttps://docs.codio.com/instructors/authoring/assessments/assessment-security.htmlhttps://docs.codio.com/instructors/authoring/assessments/assessments.htmlhttps://docs.codio.com/instructors/authoring/assessments/auto-grade-scripts.htmlhttps://docs.codio.com/instructors/authoring/assessments/autograde-free-text.htmlhttps://docs.codio.com/instructors/authoring/assessments/delete-assessment.htmlhttps://docs.codio.com/instructors/authoring/assessments/duplicate-assessment.htmlhttps://docs.codio.com/instructors/authoring/assessments/edit-assessment.htmlhttps://docs.codio.com/instructors/authoring/assessments/edit-assessment-points.htmlhttps://docs.codio.com/instructors/authoring/assessments/fill-in-blanks.htmlhttps://docs.codio.com/instructors/authoring/assessments/free-text.htmlhttps://docs.codio.com/instructors/authoring/assessments/grade-book.htmlhttps://docs.codio.com/instructors/authoring/assessments/math-assessments.htmlhttps://docs.codio.com/instructors/authoring/assessments/multiple-choice.htmlhttps://docs.codio.com/instructors/authoring/assessments/parameterized.htmlhttps://docs.codio.com/instructors/authoring/assessments/parsons-puzzle.htmlhttps://docs.codio.com/instructors/authoring/assessments/partial-points.htmlhttps://docs.codio.com/instructors/authoring/assessments/random.htmlhttps://docs.codio.com/instructors/authoring/assessments/sense-network.htmlhttps://docs.codio.com/instructors/authoring/assessments/standard-code-test.htmlhttps://docs.codio.com/instructors/authoring/assessments/student-submission.htmlhttps://docs.codio.com/instructors/authoring/assessments/ungraded-assessments.htmlhttps://docs.codio.com/instructors/authoring/guides/add_media.htmlhttps://docs.codio.com/instructors/authoring/guides/author_student.htmlhttps://docs.codio.com/instructors/authoring/guides/authoring_guidelines.htmlhttps://docs.codio.com/instructors/authoring/guides/cpumemdisk.htmlhttps://docs.codio.com/instructors/authoring/guides/custom_button.htmlhttps://docs.codio.com/instructors/authoring/guides/excludingfiles.htmlhttps://docs.codio.com/instructors/authoring/guides/freeze_code.htmlhttps://docs.codio.com/instructors/authoring/guides/hide_folders.htmlhttps://docs.codio.com/instructors/authoring/guides/html_content.htmlhttps://docs.codio.com/instructors/authoring/guides/intro.htmlhttps://docs.codio.com/instructors/authoring/guides/latex.htmlhttps://docs.codio.com/instructors/authoring/guides/markdown_content.htmlhttps://docs.codio.com/instructors/authoring/guides/open_close_content.htmlhttps://docs.codio.com/instructors/authoring/guides/page_editing.htmlhttps://docs.codio.com/instructors/authoring/guides/previewing_content.htmlhttps://docs.codio.com/instructors/authoring/guides/project_book.htmlhttps://docs.codio.com/instructors/authoring/guides/settings/assessments.htmlhttps://docs.codio.com/instructors/authoring/guides/settings/global.htmlhttps://docs.codio.com/instructors/authoring/guides/settings/media.htmlhttps://docs.codio.com/instructors/authoring/guides/settings/opentabs.htmlhttps://docs.codio.com/instructors/authoring/guides/settings/page.htmlhttps://docs.codio.com/instructors/authoring/guides/solution_templating.htmlhttps://docs.codio.com/instructors/authoring/guides/teacher_only.htmlhttps://docs.codio.com/instructors/authoring/guides/toc.htmlhttps://docs.codio.com/instructors/getstarted/howto.htmlhttps://docs.codio.com/instructors/getstarted/onboard.htmlhttps://docs.codio.com/instructors/getstarted/startlist.htmlhttps://docs.codio.com/instructors/getstarted/support/changelog.htmlhttps://docs.codio.com/instructors/getstarted/support/support.htmlhttps://docs.codio.com/instructors/setupcourses/add-remove-assignment.htmlhttps://docs.codio.com/instructors/setupcourses/add-remove-students.htmlhttps://docs.codio.com/instructors/setupcourses/add-ta.htmlhttps://docs.codio.com/instructors/setupcourses/add-teachers.htmlhttps://docs.codio.com/instructors/setupcourses/archive-course.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/allow-student-reset.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assign-grade-template.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assignment-actions.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assignment-duration.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assignment-gigabox.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assignment-settings.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/assignment-surveys.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/disable-assignment.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/disable-download.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/disable-mark-completed.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/exam-proctoring.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/grade-weights.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/groupwork.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/mandatory.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/penalties.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/pin-assignment.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/prerequisite-assignments.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/prime-assignment-containers.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/visibility-completed.htmlhttps://docs.codio.com/instructors/setupcourses/assignment-settings/visibility-disabled.htmlhttps://docs.codio.com/instructors/setupcourses/change-student-password.htmlhttps://docs.codio.com/instructors/setupcourses/clone-course.htmlhttps://docs.codio.com/instructors/setupcourses/course-contact.htmlhttps://docs.codio.com/instructors/setupcourses/course-module-progress.htmlhttps://docs.codio.com/instructors/setupcourses/course-revoke-sudo-access.htmlhttps://docs.codio.com/instructors/setupcourses/courses.htmlhttps://docs.codio.com/instructors/setupcourses/create-course.htmlhttps://docs.codio.com/instructors/setupcourses/delete-course.htmlhttps://docs.codio.com/instructors/setupcourses/export-assignment-data.htmlhttps://docs.codio.com/instructors/setupcourses/export-course-data.htmlhttps://docs.codio.com/instructors/setupcourses/export-lti.htmlhttps://docs.codio.com/instructors/setupcourses/library/add-questions-from-library.htmlhttps://docs.codio.com/instructors/setupcourses/library/add-questions-to-library.htmlhttps://docs.codio.com/instructors/setupcourses/library/assessmentslibrary.htmlhttps://docs.codio.com/instructors/setupcourses/library/global-library.htmlhttps://docs.codio.com/instructors/setupcourses/library/search-library.htmlhttps://docs.codio.com/instructors/setupcourses/library/unlink-assessment.htmlhttps://docs.codio.com/instructors/setupcourses/library/update-assess-from-library.htmlhttps://docs.codio.com/instructors/setupcourses/lmsconnect.htmlhttps://docs.codio.com/instructors/setupcourses/mark-assignments-complete.htmlhttps://docs.codio.com/instructors/setupcourses/modify-assignments.htmlhttps://docs.codio.com/instructors/setupcourses/notification-email.htmlhttps://docs.codio.com/instructors/setupcourses/parent-child-courses.htmlhttps://docs.codio.com/instructors/setupcourses/preview-course.htmlhttps://docs.codio.com/instructors/setupcourses/rename-course.htmlhttps://docs.codio.com/instructors/setupcourses/rename-reorder-assignments.htmlhttps://docs.codio.com/instructors/setupcourses/resources/codioresources.htmlhttps://docs.codio.com/instructors/setupcourses/resources/editingresources.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/crunch.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/flode.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/jeroo.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/lexikon.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/pencilcode.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/processing-and-p5.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/pyret.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/scratch.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/tkinter.htmlhttps://docs.codio.com/instructors/setupcourses/resources/resourcetools/turtle.htmlhttps://docs.codio.com/instructors/setupcourses/search-course.htmlhttps://docs.codio.com/instructors/setupcourses/share-course.htmlhttps://docs.codio.com/instructors/setupcourses/view-student-username.htmlhttps://docs.codio.com/instructors/setupcourses/virtualmachine.htmlhttps://docs.codio.com/instructors/teaching/addstudents.htmlhttps://docs.codio.com/instructors/teaching/behaviorinsights.htmlhttps://docs.codio.com/instructors/teaching/commenting.htmlhttps://docs.codio.com/instructors/teaching/cursor.htmlhttps://docs.codio.com/instructors/teaching/grading/grade-freetext.htmlhttps://docs.codio.com/instructors/teaching/grading/grading.htmlhttps://docs.codio.com/instructors/teaching/grading/nbgrader.htmlhttps://docs.codio.com/instructors/teaching/grading/release-grades.htmlhttps://docs.codio.com/instructors/teaching/insights.htmlhttps://docs.codio.com/instructors/teaching/plagiarism.htmlhttps://docs.codio.com/instructors/teaching/playback.htmlhttps://docs.codio.com/instructors/teaching/remove.htmlhttps://docs.codio.com/instructors/teaching/resetpassword.htmlhttps://docs.codio.com/instructors/teaching/viewstudentwork.htmlhttps://docs.codio.com/setupcourses.htmlhttps://docs.codio.com/teaching.htmlhttps://docs.codio.com/genindex.htmlhttps://docs.codio.com/index.htmlhttps://docs.codio.com/search.html \ No newline at end of file diff --git a/docs/student.html b/docs/student.html new file mode 100644 index 00000000..75b06317 --- /dev/null +++ b/docs/student.html @@ -0,0 +1,241 @@ + + + + + + + + Student — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/accessing-codio/accessing-codio.html b/docs/students/accessing-codio/accessing-codio.html new file mode 100644 index 00000000..4756ee39 --- /dev/null +++ b/docs/students/accessing-codio/accessing-codio.html @@ -0,0 +1,334 @@ + + + + + + + + + Accessing Codio — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/accessing-codio/faq.html b/docs/students/accessing-codio/faq.html new file mode 100644 index 00000000..367c3175 --- /dev/null +++ b/docs/students/accessing-codio/faq.html @@ -0,0 +1,439 @@ + + + + + + + + + Frequently Asked Questions — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Frequently Asked Questions

+
+

Not able to see the work previously completed in a Course

+

Where you can’t see work you previously did or being prompted to set up a new payment plan

+

Your Codio account is associated with an email address, used when you first registered/signed up.

+

If you are accessing Codio via an LMS (Learning Management System) such as Canvas/Blackboard/Moodle and have logged into the LMS with a different email address as you then open an assignment a new Codio with a different email address will be created and will not see what you may have done previously and you may be prompted to start a new payment plan.

+

If you are unsure of what different email address you are using in your LMS, go to your Codio Account settings where you can see the email address of this account.

+

Then check/review your LMS settings to check what other email addresses you have set to use and log out and log back into the LMS with the other email address.

+

To avoid you accidentally repeating this in future, we suggest you remove all alias email addresses in your LMS account so you can only log into the LMS with the one email account in future. If unsure how contact your local LMS administrators who will be able to assist you

+
+
+

Assignment not loading fully or seeing ‘User not passed’ when accessing from an LMS

+

It can be the case that there is something in your browser which is involved.

+

We would suggest you clear browser cache/cookies, close all browser tabs and log in again. When clearing your cache/cookies select ‘All Time’ for the period of time to delete.

+

In the event there is a problem with a browser extension/add on, consider using a private/incognito session to access Codio or try a different browser.

+

If you are using an incognito session, check that Block third-party cookies is not enabled. If using Chrome, this is now the default setting and can be disabled before you log into Codio or your LMS

+
+
+Incognito session +
+
+

If you continue to experience this, please open your browser dev tools (F12) and see if you can see any error in console log that may help you to solve the issue and if you are unable to resolve it, contact us with the output of the console log

+
+
+

Problems accessing Codio when using Safari browser

+

Due to Safari’s “Intelligent” tracking, this will block the necessary authentication cookie.

+

To ensure access disable “Prevent cross-site tracking” in the browser privacy settings

+
+
+Safari Settings +
+
+
+
+

How do I reset my password?

+

You can log in with your Codio username or the registered email address.

+

If you have also forgotten your password you can request a new password using either your username or email address.

+

Resetting your password will send an email to your registered email addresss containing a link for you to click. This will then allow you to enter a new password of your choosing

+

See Managing your Password for more information.

+

If you are a student in a Course set up by your teacher, they can also reset your password for you if you can’t recall your username or email address.

+
+
+

Deleted a file by mistake

+

If you delete a file in an error, you can use the Code Playback option to find that file. Please follow the below steps to recover a deleted file:

+
    +
  • Open the assignment then go to Tools -> Code Playback*.

  • +
  • Click on the folder icon.

    +
    +
    +Code Playback open folder +
    +
    +
  • +
  • Select the file that you want to recover

  • +
  • Find the file which you have deleted.

  • +
  • Review the file and it will show how it was built

  • +
  • You can find your last saved work by clicking on the Previous change, Play/Pause, and Next change buttons (from left to right) or by dragging the timeline bar along

    +
    +
    +Code Playback timeline +
    +
    +
  • +
  • You can create a new file and copy/paste from the code playback into a new file that you created.

  • +
+
+

Note

+

If you don’t have Tools -> Code Playback, right-click on a tab or in the file tree and select Code Playback

+
+Code Playback open file +
+
+
+
+

Why do I see ‘Terminated by Timeout’ in my challenges

+

In general terms, Terminated by Timeout will be returned when the code you are checking cannot complete and when a stipulated time is reached, it will be terminated.

+

Review your code and if you need assistance, raise with your class teacher/instructor who will be able to help you as they will be able to see the code you have written

+
+
+

Accessing assignments when using an LMS platform

+

If LTI is enabled for a class, new assignments can only be started via the LMS platform. Any assignments already started can be accessed by logging into your Codio account. +Your teacher/instructor can set up a link so if you try to start an assignment you can be given a link to click that will take you to your LMS course.

+
    +
  • Assignments that have not been started will show with ‘ready to go’ in the Codio course

  • +
  • Assignments that have been started previously will show with ‘In Progress’ in the Codio course

    +
    +
    +Students View +
    +
    +
  • +
+
+

Note

+

Teachers in your organization can hide assignments that have not been started from your dashboard so you may only see those you have already started.

+
+
+
+

Not able to expand the file tree in a Unit

+

Within Guides, the author can control the Layout on each page in the guides which includes showing (or not) the File Tree.

+

If the File Tree is shown but all folders in the project are hidden then although you may see the file tree, you will not be able to expand to see any content.

+

If you are experiencing this situation, let your teacher/professor know and they can contact the author to review/update the assignment

+
+
+

Reset my assignment to its default configuration

+

If the assignment you are referring to uses Guides, check out Restore Current Files as that may do what you need but if not and your instructor has allowed you to reset the assignment yourself, you can reset your assignment either from the Education menu area

+
+
+Education>Reset Assignment +
+
+

or when you opened a completed assignment you will see the pop up to reset your assignment (check your browser isn’t blocking pop ups)

+
+
+Reset Assignment +
+
+

If your instructor hasn’t allowed students to reset assignments, discuss with your class instructor as they can reset the assignment for you and you can then start the unit again.

+

If you also let them know what you did, they may want to review the unit(s) you are working with to help mitigate this problem for you and other students in the future.

+
+
+

Accessibility Options

+

Codio provides a range of tools to support Accessibility.

+
+

See:

+
+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/accessing-codio/joining.html b/docs/students/accessing-codio/joining.html new file mode 100644 index 00000000..2b89fe78 --- /dev/null +++ b/docs/students/accessing-codio/joining.html @@ -0,0 +1,323 @@ + + + + + + + + + Join a Course — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Join a Course

+

You can join a course directly from your LMS platform (such as Canvas, Blackboard, Moodle, etc.), or use a URL or token provided by your instructor.

+

If your school is not using an LMS platform, your instructor will provide you one of the following methods to join the course:

+
    +
  • Send you an invitation URL that you can copy and paste into your browser.

  • +
  • Send you a two-word token that you can enter on the Codio website using Join Course. Enter the token and click Next.

    +Join Course +
  • +
+

To access your course, log in to your Codio account and select Courses in the navigation pane.

+

See Also:

+ +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/accessing-codio/paying.html b/docs/students/accessing-codio/paying.html new file mode 100644 index 00000000..b1fe0480 --- /dev/null +++ b/docs/students/accessing-codio/paying.html @@ -0,0 +1,384 @@ + + + + + + + + + Pay for Codio — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pay for Codio

+

If your institution isn’t providing access to Codio for you, you can make a payment that gives you access to your courses for the semester. You can pay for Codio using the Billing menu. The procedure you follow depends on whether you are paying yourself or redeeming a code for a payment that was obtained from your campus bookstore.

+

If the plan is for one or two semesters, when your class ends, only the payment for the class is charged.

+
+

Note

+

A single payment can be used for multiple courses in Codio during the specified timeframe.

+
+
+

Individual billing

+

If you are paying yourself, follow these steps:

+
    +
  1. Click your user name or gravatar in the lower portion of the navigation pane to open the My Account menu listing.

    +User Profile +
  2. +
  3. Click the Billing section and in the Purchase Access area, choose a tile for the period of time you would require access to Codio for and select the Checkout button to enter your card details.

    +Billing +
  4. +
+
+
+

Redeeming code from campus bookstore

+

Some institutions provide Codio licenses through their campus bookstore. Your course instructor or course syllabus will specify if this is available at your school.

+

A single license can be used for a specified timeframe: 1 semester (5 months), 2 semesters (10 months), or a year. Specific license options depend on your local bookstore.

+

To obtain and activate a license from your campus bookstore, follow these steps:

+
    +
  1. Request one of the following plans from your campus bookstore:

    +
      +
    • 1 Semester - Codio 1-Semester Plan - ISBN: 978-1-7331872-5-1

    • +
    • 2 Semesters - Codio 2 Semester Plan ISBN 978-1-73331872-8-2

    • +
    • Annual - Codio Annual Plan ISBN # 978-1-7331872-1-3

    • +
    +

    The bookstore will give you a code to redeem and activate your plan for the specified timeframe.

    +
  2. +
  3. Log in to Codio following the instructions provided by your instructor. This may be through your local LMS (Canvas, Blackboard, Desire2Learn, Moodle, etc.) or through Codio.com using a course token.

    +

    The first time you log in, a small banner is displayed in the upper portion of the screen requesting that you go to Billing.

    +
  4. +
  5. Click the link in the banner, or click your User name > Settings > Billing.

  6. +
  7. From the Plan drop-down, choose Redeem Code and click Upgrade.

  8. +
  9. Enter the code that was provided to you. Note that the code is case sensitive so enter it exactly as provided to you.

  10. +
+

If you have any problems contact us through your Codio account or email us at help@codio.com.

+
+
+

Problems setting up a new payment

+

Secure online credit card transactions are processed in real-time on behalf of Codio by the authorized merchant payment service provider Stripe using the highest levels of security available on the market.

+

Sometimes online credit card transactions may fail - the reasons for such failure may be an error in the card number or the card limit has been reached, ad-blockers interfering, 3rd Party Cookies not allowed etc. In other cases the reasons are less obvious and may relate to the ever increasing fraud prevention and/or other security measures implemented by credit card companies to protect the cardholder against card abuse.

+

Codio has no control over such transaction refusal. Your credit card company does not disclose to Codio the exact reason your transaction has failed.

+

This means that unfortunately Codio cannot assist in solving the issue which is strictly a matter between the card issuing credit card company (who refused to authorize the transaction) and the credit card holder (who initiated the process to have the amount of the transaction charged to his/her credit card).

+

In case of a transaction failure, Codio recommends to first try using an alternative credit card, or to give it another try with the same credit card again but at a later time. In most cases this would solve the issue.

+

Carefully check the card details before confirming the transaction for processing.

+

Should the transaction continue to fail you might want to get in touch with your credit card company. Your credit card company will be able to check the transaction log for your credit card and help fix the problem. In some cases your credit card company would need to pre-authorize the transaction for you before you can process the transaction again.

+

A list of common reasons why payments fail:

+
    +
  • Your credit card limit was reached (insufficient funds).

  • +
  • Check your credit limit. You might have reached your daily or total credit card limit on the day you tried to charge your card. If this is the case, ask your credit card company to increase your limit.

  • +
  • The charge exceeded the maximum amount allowed for a single charge.

  • +
  • Check the maximum amount your card can be charged at a single time. If the declined charge is higher than this amount, ask your credit card company to increase the limit.

  • +
  • Your card reached the maximum number of charges allowed in a period: Check how many times your card can be charged in given time period. If you reached this amount, ask your bank to increase the limit, wait until your card can be charged again, or make a payment with a different payment method.

  • +
  • Your card doesn’t accept charges from an online source: Make sure your card allows online transactions. If it doesn’t, talk to your credit card company about allowing these charges or use another card.

  • +
  • Your card doesn’t allow international transactions: If you’re making payments from abroad, make sure your card accepts international charges. If it doesn’t, ask your bank to change this or use another card.

  • +
  • Your card is not authorised for transactions of the classification type MO/TO: Contact your financial institution to allow transactions of classification type MO/TO (which stands for mail order/telephone order).

  • +
  • Wrong expiration date: Review the expiration date on your credit card. If your card expired, use another card.

  • +
  • Wrong credit card number: You should get an error message indicating the card number is not valid. If not, carefully check the card number when filling out the form.

  • +
  • Billing address: Make sure that the billing address you use for the transaction matches those that your credit card company has. Address matching is however not very likely to be the main cause of a transaction failure.

  • +
  • If you are seeing the message ‘Do not Honor’, then it is likely that your bank is unwilling to accept the transaction but they are not giving the specific reason to our processing company. You should contact your card issuing bank for more details of the exact reason.

  • +
  • If you are seeing General error in Cardinal, this error can be caused due to adblockers or cookies being blocked.

  • +
+

Also, ensure that your browser is allowing 3rd Party Cookies

+

Please try using another browser or stop your adblocker during the payment process or login to Codio either with a different browser where you don’t have adblockers running or in an incognito/private session. If using incognito session in Chrome, ensure that you are not blocking third-party cookies that is enabled by default now in Chrome.

+
+
Chrome Incognito +
+
+
+

Restarting an expired payment or extending an existing payment

+

If you had a payment that has now expired, or wish to extend the period of time available, start a new payment as above.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/accessing.html b/docs/students/courses/accessing.html new file mode 100644 index 00000000..587fb849 --- /dev/null +++ b/docs/students/courses/accessing.html @@ -0,0 +1,306 @@ + + + + + + + + + Access Your Courses — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Access Your Courses

+

You access your courses from the Courses page and drill down to view the assignments associated with a course. To view your courses and assignments, follow these steps:

+
    +
  1. Select Courses in the navigation pane to display all of the courses assigned to you in the right pane. Your current courses are displayed on the Active page and previous courses are displayed on the Archived page.

    +Student Dashboard +

    Up to 5 pinned assignments are displayed more prominently at the top of the page and includes the end date for the assignment, which was set by your instructor.

    +
  2. +
  3. Select a course to view a list of modules/assignments associated with it, the due date (if set by your instructor), and your progress.

  4. +
  5. Click the assignment to start working on it, review your assessments, grading comments and any code comments from your instructor/teacher.

  6. +
  7. If you initially accessed Codio through an LMS system, you will use the same email address for your Codio login and you will need to create a Codio account password.

    +

    To create a new password, access Codio via your LMS and go to your Account page or use the Lost Password process. See Manage Password for more information.

    +
  8. +
+

See Also +- Navigate the Student Dashboard +- Join a Course +- Pay for Codio +- Manage Password

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/audio-video.html b/docs/students/courses/audio-video.html new file mode 100644 index 00000000..e44aecae --- /dev/null +++ b/docs/students/courses/audio-video.html @@ -0,0 +1,314 @@ + + + + + + + + + Audio/Video/Chat — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Audio/Video/Chat

+

When students and teachers/instructors are both accessing the same assignment, a Call button will show allowing Audio/Video calls and or real time chat.

+Audio Video +

Also supported in projects (from My Projects area) where permissions have been granted by the project owner to other Codio users.

+
+

Permissions

+

Permission for your camera/microphone is required and your browser will prompt you to allow.Permission

+

If permission has been denied, you can re enable in your browser

+
+

Google Chrome:

+

If you are using Google Chrome you can access your settings through the padlock icon in the top left of your screen, next to the URL of the page you are currently on.

+

Click Site settings and make sure your camera and microphone both say Allow

+
+
+

Firefox:

+

If you are using Firefox as your internet browser you can access your settings by typing “about:permissions” into the location bar as if it were a website and hitting enter.

+

This will take you to your settings page, click the following link to find out more about changing your settings:

+

https://support.mozilla.org/en-US/kb/permissions-manager-give-ability-store-passwords-set-cookies-more?redirectlocale=en-US&redirectslug=how-do-i-manage-website-permissions

+
+
+

Safari:

+

If you are using Safari, you can access your browser settings by clicking Safari and then Preferences.

+

You will see a pop up box and can update your settings. Learn more about how to update the settings through the following link:

+

https://support.apple.com/en-nz/guide/safari/ibrwe2159f50/mac

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/complete-assignment.html b/docs/students/courses/complete-assignment.html new file mode 100644 index 00000000..5232216d --- /dev/null +++ b/docs/students/courses/complete-assignment.html @@ -0,0 +1,315 @@ + + + + + + + + + Complete Assignments — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Complete Assignments

+

When you have completed an assignment you can mark it as completed (if the content author has not disabled this option) using one of the following methods:

+
    +
  • In the assignment, click the Settings icon and choose Mark as Completed.

    +Complete +
  • +
  • On the IDE menu bar, click Education > Mark as Completed.

  • +
  • On the last page in the guide, click the Mark as Completed button.

  • +
  • On the Course assignment dashboard, toggle the Completed button

  • +
+
+

Note

+

If Penalties apply due to late submission you will be advised of this when completing from the course assignment dashboard

+
+

If there are any assessments in the assignment that have not been submitted, details are displayed so you can review before completing the assignment.

+

If you mistakenly mark an assignment as completed, contact your instructor. They can reset the status of the assignment so you can access it again.

+
+

Uncomplete Assignment

+

If this option is enabled by your teachers, you can change the completion status when you’re in an assignment from Education > Mark as Uncompleted from the top menu bar.

+
+
Mark as Uncompleted +
+

The another option you can use to mark your assignments as uncompleted is by toggling off the Completed switch available on the course dashboard.

+
+
Completed Button +
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/courses.html b/docs/students/courses/courses.html new file mode 100644 index 00000000..2af28b55 --- /dev/null +++ b/docs/students/courses/courses.html @@ -0,0 +1,337 @@ + + + + + + + + + Your Courses — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/exam-mode.html b/docs/students/courses/exam-mode.html new file mode 100644 index 00000000..38cfb691 --- /dev/null +++ b/docs/students/courses/exam-mode.html @@ -0,0 +1,309 @@ + + + + + + + + + Exam Mode — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Exam Mode

+

If your instructor has enabled exam mode features you may experience the following when taking an exam:

+
    +
  • Shuffle Question Order - The exam pages or questions are presented in random order to students so everyone’s exams are not identical.

  • +
  • Forward Only Navigation - You can only move forward through the pages during the exam, and cannot go back to previous pages. If this option is enabled, you will be advised of this restriction when you start the assignment.

  • +
  • Single Login - Once you start the exam and until it is marked as complete, all other account login attempts will be blocked when this option is enabled.

    +

    Before you start the assignment, you will be advised that the exam is restricted to single login. To avoid any issues during the exam, you should ensure that:

    +
    +
      +
    • You have closed all windows or browsers where Codio is opened.

    • +
    • You have a stable internet connection.

    • +
    • The device is fully charged.

    • +
    • You have allotted yourself enough time to complete the assignment.

    • +
    +
    +
  • +
+
+

If you attempt to access the assignment from a different IP address or browser, you will be restricted and advised to contact your course instructor for assistance.

+

If you attempt to log out of Codio before the assessment is fully completed, a message will be displayed indicating that you will not be able to access the exam again if you continue with logout. If you do log out before completing the exam, contact your instructor to unlock your account.

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/navigate-student-dashboard.html b/docs/students/courses/navigate-student-dashboard.html new file mode 100644 index 00000000..554d32dd --- /dev/null +++ b/docs/students/courses/navigate-student-dashboard.html @@ -0,0 +1,344 @@ + + + + + + + + + Navigate the Student Dashboard — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/pair-programming.html b/docs/students/courses/pair-programming.html new file mode 100644 index 00000000..e778c76e --- /dev/null +++ b/docs/students/courses/pair-programming.html @@ -0,0 +1,305 @@ + + + + + + + + + Pair Programming — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Pair Programming

+

The Paired Programming setting is enabled by teachers to allow groups of students to work together on assignments. Within each group a student will be a Driver who has the ability to edit and make changes in the assignment and others in the group will be Navigators who can view the work done by the Driver. Control can be passed between the driver and navigators as required.

+

When others are accessing the assignment, you will see their details in the Pair programming with: above the assignments

+Viewing other available students +
+

Driver/Navigator

+

Within a group there is a Driver who has control of the assignment and Navigators who are able to view the work being done by the driver where they can see the drivers cursor location and selections (similar to googleDocs). If the cursor cannot be seen (e.g. the driver is on another page or file in the assignment), clicking on the drivers username in the top panel will take the navigator to their location

+

To transfer control between users, the navigator can start to type and if the existing driver is not actively working, they will see the Driver toggle switch flip to show they now have control.

+

If the existing driver is still actively working, the navigator can flip the toggle switch next to “Driver” to request control.

+Driver control +

If the driver is still working they will get a notification asking for control. This will not block the driver from continuing their work if they deny the request and when they are ready to release control, they can toggle the switch to transfer control to the requestor or grant access from the notification pop up if still showing.

+

The navigator will see the Driver toggle switch flip to show they now have control.

+
+
+

Audio/Video/Chat

+

Where students are accessing the same assignment, a Call button will show allowing Audio/Video calls and or real time chat. See Audio/Video/Chat for more information

+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/play-mode.html b/docs/students/courses/play-mode.html new file mode 100644 index 00000000..9f422d44 --- /dev/null +++ b/docs/students/courses/play-mode.html @@ -0,0 +1,307 @@ + + + + + + + + + Play Mode — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Play Mode

+

To see your content running, you need to Play it. If the content does not automatically start or if you have closed it, click Tools > Guide > Play on the menu bar, or click the Start Guide icon in the file tree.

+Start Guide Icon +
+

Player Options

+Play Mode +

Use the following icons to play your content:

+
    +
  • Navigation Arrows - Allow you to navigate forward and backward through the content.

  • +
  • Settings - Allows you to change the Theme (Light Reading/Dyslexic), Mark as Complete, change the font size, reset both the theme and fonts, restore the current files and access Code Comments.

  • +
  • Show/Hide Index - Allows you show or hide the section index.

  • +
  • Collapse - Allows you to expand or collapse the panel (this icon is not displayed if the page layout is One Pane.

  • +
+

See Also:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/restore-files.html b/docs/students/courses/restore-files.html new file mode 100644 index 00000000..b3e28c41 --- /dev/null +++ b/docs/students/courses/restore-files.html @@ -0,0 +1,320 @@ + + + + + + + + + Restore Files — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Restore Files

+

You can restore the original files in an assignment or restore a file that was mistakenly deleted.

+
+

Restore current files

+

There may be times when you want to make changes to your work or discard some of it. The easiest way to accomplish this is to restore the original files in a assignment.

+
    +
  1. Open the assignment.

  2. +
  3. Navigate to the file that you want to restore.

  4. +
  5. In the upper right corner, click the Settings icon and choose Restore current files. This will only restore the file that you have open. This will not restore all the files in the assignment.

    +Restore Current Files +
  6. +
+
+

Note

+

If this does not accomplish what you intended, contact your instructor to have them reset the assignment to its default state so you can restart it.

+
+
+
+

Restore a deleted file

+

If you have mistakenly deleted a file, you can retrieve it using Code Playback and copy the code into a new file. Follow these steps to recover a deleted file:

+
    +
  1. Open the assignment and then click Tools > Code Playback.

  2. +
  3. Click the Folder icon and select the file that you want to recover.

  4. +
  5. Review the file to see how it was built.

  6. +
  7. Use the Playback icons to review your last saved work (Back, Play/Pause, and Forward), and walk through your changes. You can also drag the timeline bar to move through the code.

  8. +
  9. Create a new file, and then copy the code from the playback and paste it into the new file.

  10. +
+
+

Note

+

If you don’t see Tools > Code Playback on the menu bar, right-click on a tab or in the file tree and choose Code Playback.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/start-assignment.html b/docs/students/courses/start-assignment.html new file mode 100644 index 00000000..0de9dc90 --- /dev/null +++ b/docs/students/courses/start-assignment.html @@ -0,0 +1,307 @@ + + + + + + + + + Start an Assignment — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Start an Assignment

+

Follow these steps to begin working on an assignment:

+
    +
  1. Log in to Codio and click Courses in the left navigation pane.

  2. +
  3. Click the course to open the Assignments page and click Ready to go to begin the assignment.

  4. +
  5. If your instructor has connected your course to an LMS system (Blackboard, Canvas, D2l) you must begin your assignments in those systems.

  6. +
+
+

Note

+

Your instructor can set prerequisite rules to assignments requiring you to have either completed, started or passed with a minimum grade other assignments before you can start a specific assignment. If set and you have not met those requirements, you will see a message box explaining what is required and if you need help/clarification you can contact your instructor who can help you.

+Student Warning +
+

See Also:

+ +
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/usingguides.html b/docs/students/courses/usingguides.html new file mode 100644 index 00000000..165e8334 --- /dev/null +++ b/docs/students/courses/usingguides.html @@ -0,0 +1,320 @@ + + + + + + + + + Use Guides — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Use Guides

+
+

Play mode

+

To see your content running, you need to Play it. If the content does not automatically start or if you have closed it, go to Tools->Guide->Play menu option or click the Start Guide icon in the file tree:

+StartGuides +

At this point the panel layout is set up automatically according to the layout specified in the first section and it will be displayed.

+
+
+

Player options

+Play Mode +

Within the player various options can be controlled by the user

+
    +
  • Navigation Buttons allows the user to navigate forward/backward in the content.

  • +
  • Settings allows the user to change the Theme (light/dyslexic), Mark as Complete, change the font size, reset both the theme and fonts, restore the current files (see below) and access Code Comments. See - Dyslexia Support section

  • +
  • Show/Hide Section List Hamburger Ico allows the user to show/hide the section list.

  • +
  • Collapse button will not show if the page layout is One Pane.

  • +
+
+
+

Restore current files

+

There may be times when you want to make changes to your work or discard some of it. The easiest way to accomplish this is to restore the original files in a assignment.

+
    +
  1. Open the assignment that you want to restore.

  2. +
  3. In the upper right corner, click the Settings icon and choose Restore current files.

    +Restore Current Files +
  4. +
+
+

Note

+

If this does not accomplish what you intended, contact your instructor to have them reset the assignment to its default state so you can restart it.

+
+
+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/students/courses/view-grade.html b/docs/students/courses/view-grade.html new file mode 100644 index 00000000..9a79ec18 --- /dev/null +++ b/docs/students/courses/view-grade.html @@ -0,0 +1,306 @@ + + + + + + + + + View Grades — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

View Grades

+

When your assignment has been graded and released by your instructor, the Status column in the assignment shows graded.

+Graded +

You can view the grade details from the Feedback page or the Grade field in the dashboard.

+
    +
  • Open the project and go to Education > Feedback.

    +Feedback +
  • +
  • Click the Grade field in the dashboard.

    +Access Grades +
  • +
+

To view details about a grade, click the Assessment and view more information.

+Grade Detail +

The Partial Point icon indicates assessments that support partial points and full points that were not awarded.

+Partial Point Icon +

Note: If the assignment has been marked as completed, you can click the Completed button to access the grade feedback. If you want to view the assignment, click the assignment in the left panel. As the assignment is completed you will not be able to edit anything but can view the content.

+

If your organization uses an LMS platform, a URL to the grade detail is also passed to your LMS so you can access it from the grading area in the LMS.

+
+ + +
+ + +
+ + +
+
+ + + + +
+
+ + + +
+
+ + \ No newline at end of file diff --git a/docs/teaching.html b/docs/teaching.html new file mode 100644 index 00000000..f689379a --- /dev/null +++ b/docs/teaching.html @@ -0,0 +1,374 @@ + + + + + + + + + Teaching — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+
+
+

Teaching

+
+
+
+

Viewing student work

+

As a teacher you have access to your students’ assignments within Codio. This allows you to view and access work your students have completed at any time.

+
    +
  1. From the Courses area, click on your course to open it.

  2. +
+
+
Course +
+
    +
  1. Click on the Students tab.

  2. +
+
    +
  1. You will see all students in your course displayed on this screen. By default they will show sorted alphabetically by first name but you can also sort them by last name, number of started or number of completed assignments if preferred.

  2. +
+
    +
  1. To view/access an individual students work click on their name. On the far right of the screen, under the heading Open, click the blue arrow to open the students work.

  2. +
+
+
Open student work +
+
+
+

Writeable Copy

+

When you open a student project, changes you make will be saved in their project and they will see them when they open their projects.

+

If you would like to try something out in their code without changing their version, click on the WRITEABLE COPY button on the top right. Changes made in this copy won’t be saved.

+
+
_images/writeable.png +
+
+
+

Downloading student workspaces

+

If you wish to download student workspaces you can do so either for individual assignments, individual students or for all students in the course:

+ +
+
+ + +
+ + +
+ + +
+
+ + + + + +
+
+ + + +
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/tools.html b/docs/tools.html new file mode 100644 index 00000000..a2cd4c4c --- /dev/null +++ b/docs/tools.html @@ -0,0 +1,241 @@ + + + + + + + + + Tools — documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + + +
+ + + + + + +
+ + + + + + +
+ +
+ +
+

Tools

+
+
+
+

Dyslexia Support

+

Codio has a built in dyslexia support feature for users with dyselexia that provides the ability to set your Theme to Dyslexia view. To enable dyslexia support mode, follow these steps:

+
    +
  1. Open an assignment.

  2. +
  3. In the upper right corner, and select the Settings icon (gear) and choose Theme > Dyslexic.

  4. +
+
+Dsylexia Theme +
+

When enabled, the screen is displayed in Dyslexia View.

+Dyslexia View +
+
+ + +
+ + +
+ + +
+
+ + + + + + + \ No newline at end of file diff --git a/doctrees/accessing-codio.doctree b/doctrees/accessing-codio.doctree new file mode 100644 index 00000000..ee3747a4 Binary files /dev/null and b/doctrees/accessing-codio.doctree differ diff --git a/doctrees/admin.doctree b/doctrees/admin.doctree new file mode 100644 index 00000000..66e03048 Binary files /dev/null and b/doctrees/admin.doctree differ diff --git a/doctrees/authoring.doctree b/doctrees/authoring.doctree new file mode 100644 index 00000000..24f06601 Binary files /dev/null and b/doctrees/authoring.doctree differ diff --git a/doctrees/common.doctree b/doctrees/common.doctree new file mode 100644 index 00000000..aa34df75 Binary files /dev/null and b/doctrees/common.doctree differ diff --git a/doctrees/common/develop/general.doctree b/doctrees/common/develop/general.doctree new file mode 100644 index 00000000..5afc8f54 Binary files /dev/null and b/doctrees/common/develop/general.doctree differ diff --git a/doctrees/common/develop/ide/boxes/access.doctree b/doctrees/common/develop/ide/boxes/access.doctree new file mode 100644 index 00000000..68fe44b8 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/access.doctree differ diff --git a/doctrees/common/develop/ide/boxes/always-on.doctree b/doctrees/common/develop/ide/boxes/always-on.doctree new file mode 100644 index 00000000..acc048db Binary files /dev/null and b/doctrees/common/develop/ide/boxes/always-on.doctree differ diff --git a/doctrees/common/develop/ide/boxes/ext-access.doctree b/doctrees/common/develop/ide/boxes/ext-access.doctree new file mode 100644 index 00000000..17a7f1b5 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/ext-access.doctree differ diff --git a/doctrees/common/develop/ide/boxes/ide-access-permissions.doctree b/doctrees/common/develop/ide/boxes/ide-access-permissions.doctree new file mode 100644 index 00000000..298eb650 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/ide-access-permissions.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/default-installed.doctree b/doctrees/common/develop/ide/boxes/installsw/default-installed.doctree new file mode 100644 index 00000000..7698299d Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/default-installed.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/file-locations.doctree b/doctrees/common/develop/ide/boxes/installsw/file-locations.doctree new file mode 100644 index 00000000..af139e41 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/file-locations.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/gui.doctree b/doctrees/common/develop/ide/boxes/installsw/gui.doctree new file mode 100644 index 00000000..781bfbe0 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/gui.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/install-software.doctree b/doctrees/common/develop/ide/boxes/installsw/install-software.doctree new file mode 100644 index 00000000..4efdcded Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/install-software.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/langserver.doctree b/doctrees/common/develop/ide/boxes/installsw/langserver.doctree new file mode 100644 index 00000000..88aa76c5 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/langserver.doctree differ diff --git a/doctrees/common/develop/ide/boxes/installsw/parts-coding.doctree b/doctrees/common/develop/ide/boxes/installsw/parts-coding.doctree new file mode 100644 index 00000000..d7e9a7cf Binary files /dev/null and b/doctrees/common/develop/ide/boxes/installsw/parts-coding.doctree differ diff --git a/doctrees/common/develop/ide/boxes/overview.doctree b/doctrees/common/develop/ide/boxes/overview.doctree new file mode 100644 index 00000000..71d7d020 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/overview.doctree differ diff --git a/doctrees/common/develop/ide/boxes/restart-reset.doctree b/doctrees/common/develop/ide/boxes/restart-reset.doctree new file mode 100644 index 00000000..1507ad87 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/restart-reset.doctree differ diff --git a/doctrees/common/develop/ide/boxes/runmenu.doctree b/doctrees/common/develop/ide/boxes/runmenu.doctree new file mode 100644 index 00000000..a2fefcab Binary files /dev/null and b/doctrees/common/develop/ide/boxes/runmenu.doctree differ diff --git a/doctrees/common/develop/ide/boxes/startup.doctree b/doctrees/common/develop/ide/boxes/startup.doctree new file mode 100644 index 00000000..baf55e2c Binary files /dev/null and b/doctrees/common/develop/ide/boxes/startup.doctree differ diff --git a/doctrees/common/develop/ide/boxes/terminal.doctree b/doctrees/common/develop/ide/boxes/terminal.doctree new file mode 100644 index 00000000..59271526 Binary files /dev/null and b/doctrees/common/develop/ide/boxes/terminal.doctree differ diff --git a/doctrees/common/develop/ide/debugger/create-debug-target.doctree b/doctrees/common/develop/ide/debugger/create-debug-target.doctree new file mode 100644 index 00000000..c00f74ee Binary files /dev/null and b/doctrees/common/develop/ide/debugger/create-debug-target.doctree differ diff --git a/doctrees/common/develop/ide/debugger/debugger.doctree b/doctrees/common/develop/ide/debugger/debugger.doctree new file mode 100644 index 00000000..7b3d094a Binary files /dev/null and b/doctrees/common/develop/ide/debugger/debugger.doctree differ diff --git a/doctrees/common/develop/ide/debugger/start-debug.doctree b/doctrees/common/develop/ide/debugger/start-debug.doctree new file mode 100644 index 00000000..dd2d323a Binary files /dev/null and b/doctrees/common/develop/ide/debugger/start-debug.doctree differ diff --git a/doctrees/common/develop/ide/editing/abbreviations.doctree b/doctrees/common/develop/ide/editing/abbreviations.doctree new file mode 100644 index 00000000..efa62545 Binary files /dev/null and b/doctrees/common/develop/ide/editing/abbreviations.doctree differ diff --git a/doctrees/common/develop/ide/editing/autocomplete.doctree b/doctrees/common/develop/ide/editing/autocomplete.doctree new file mode 100644 index 00000000..a04535dd Binary files /dev/null and b/doctrees/common/develop/ide/editing/autocomplete.doctree differ diff --git a/doctrees/common/develop/ide/editing/av-chat.doctree b/doctrees/common/develop/ide/editing/av-chat.doctree new file mode 100644 index 00000000..917e7d07 Binary files /dev/null and b/doctrees/common/develop/ide/editing/av-chat.doctree differ diff --git a/doctrees/common/develop/ide/editing/code-beautifier.doctree b/doctrees/common/develop/ide/editing/code-beautifier.doctree new file mode 100644 index 00000000..3d234c83 Binary files /dev/null and b/doctrees/common/develop/ide/editing/code-beautifier.doctree differ diff --git a/doctrees/common/develop/ide/editing/code-editing.doctree b/doctrees/common/develop/ide/editing/code-editing.doctree new file mode 100644 index 00000000..37500185 Binary files /dev/null and b/doctrees/common/develop/ide/editing/code-editing.doctree differ diff --git a/doctrees/common/develop/ide/editing/color-picker.doctree b/doctrees/common/develop/ide/editing/color-picker.doctree new file mode 100644 index 00000000..a9c8f318 Binary files /dev/null and b/doctrees/common/develop/ide/editing/color-picker.doctree differ diff --git a/doctrees/common/develop/ide/editing/command-bar.doctree b/doctrees/common/develop/ide/editing/command-bar.doctree new file mode 100644 index 00000000..ad7958e3 Binary files /dev/null and b/doctrees/common/develop/ide/editing/command-bar.doctree differ diff --git a/doctrees/common/develop/ide/editing/connect-github-codio.doctree b/doctrees/common/develop/ide/editing/connect-github-codio.doctree new file mode 100644 index 00000000..6dd3207d Binary files /dev/null and b/doctrees/common/develop/ide/editing/connect-github-codio.doctree differ diff --git a/doctrees/common/develop/ide/editing/cursor.doctree b/doctrees/common/develop/ide/editing/cursor.doctree new file mode 100644 index 00000000..02a3919d Binary files /dev/null and b/doctrees/common/develop/ide/editing/cursor.doctree differ diff --git a/doctrees/common/develop/ide/editing/force-language-highlighting.doctree b/doctrees/common/develop/ide/editing/force-language-highlighting.doctree new file mode 100644 index 00000000..64abcd04 Binary files /dev/null and b/doctrees/common/develop/ide/editing/force-language-highlighting.doctree differ diff --git a/doctrees/common/develop/ide/editing/git.doctree b/doctrees/common/develop/ide/editing/git.doctree new file mode 100644 index 00000000..2ee7550b Binary files /dev/null and b/doctrees/common/develop/ide/editing/git.doctree differ diff --git a/doctrees/common/develop/ide/editing/junit.doctree b/doctrees/common/develop/ide/editing/junit.doctree new file mode 100644 index 00000000..67d01065 Binary files /dev/null and b/doctrees/common/develop/ide/editing/junit.doctree differ diff --git a/doctrees/common/develop/ide/editing/keyboard-shortcuts.doctree b/doctrees/common/develop/ide/editing/keyboard-shortcuts.doctree new file mode 100644 index 00000000..0bc3758e Binary files /dev/null and b/doctrees/common/develop/ide/editing/keyboard-shortcuts.doctree differ diff --git a/doctrees/common/develop/ide/editing/preview.doctree b/doctrees/common/develop/ide/editing/preview.doctree new file mode 100644 index 00000000..24c0a11b Binary files /dev/null and b/doctrees/common/develop/ide/editing/preview.doctree differ diff --git a/doctrees/common/develop/ide/editing/quick-open.doctree b/doctrees/common/develop/ide/editing/quick-open.doctree new file mode 100644 index 00000000..ef7b8875 Binary files /dev/null and b/doctrees/common/develop/ide/editing/quick-open.doctree differ diff --git a/doctrees/common/develop/ide/editing/real-time-collaboration.doctree b/doctrees/common/develop/ide/editing/real-time-collaboration.doctree new file mode 100644 index 00000000..5f3d6e52 Binary files /dev/null and b/doctrees/common/develop/ide/editing/real-time-collaboration.doctree differ diff --git a/doctrees/common/develop/ide/editing/save-files.doctree b/doctrees/common/develop/ide/editing/save-files.doctree new file mode 100644 index 00000000..6cd02420 Binary files /dev/null and b/doctrees/common/develop/ide/editing/save-files.doctree differ diff --git a/doctrees/common/develop/ide/editing/search-replace.doctree b/doctrees/common/develop/ide/editing/search-replace.doctree new file mode 100644 index 00000000..f624fce3 Binary files /dev/null and b/doctrees/common/develop/ide/editing/search-replace.doctree differ diff --git a/doctrees/common/develop/ide/editing/share-project.doctree b/doctrees/common/develop/ide/editing/share-project.doctree new file mode 100644 index 00000000..f4f339ba Binary files /dev/null and b/doctrees/common/develop/ide/editing/share-project.doctree differ diff --git a/doctrees/common/develop/ide/editing/vscode.doctree b/doctrees/common/develop/ide/editing/vscode.doctree new file mode 100644 index 00000000..9f42ef56 Binary files /dev/null and b/doctrees/common/develop/ide/editing/vscode.doctree differ diff --git a/doctrees/common/develop/ide/tools/deployment.doctree b/doctrees/common/develop/ide/tools/deployment.doctree new file mode 100644 index 00000000..2282556f Binary files /dev/null and b/doctrees/common/develop/ide/tools/deployment.doctree differ diff --git a/doctrees/common/develop/ide/tools/desktopapp.doctree b/doctrees/common/develop/ide/tools/desktopapp.doctree new file mode 100644 index 00000000..fde00be7 Binary files /dev/null and b/doctrees/common/develop/ide/tools/desktopapp.doctree differ diff --git a/doctrees/common/develop/ide/tools/ghapi.doctree b/doctrees/common/develop/ide/tools/ghapi.doctree new file mode 100644 index 00000000..7cbb0cfe Binary files /dev/null and b/doctrees/common/develop/ide/tools/ghapi.doctree differ diff --git a/doctrees/common/develop/ide/tools/ssh.doctree b/doctrees/common/develop/ide/tools/ssh.doctree new file mode 100644 index 00000000..4b583353 Binary files /dev/null and b/doctrees/common/develop/ide/tools/ssh.doctree differ diff --git a/doctrees/common/develop/ide/workspace/add-delete-files.doctree b/doctrees/common/develop/ide/workspace/add-delete-files.doctree new file mode 100644 index 00000000..c6db380c Binary files /dev/null and b/doctrees/common/develop/ide/workspace/add-delete-files.doctree differ diff --git a/doctrees/common/develop/ide/workspace/add-delete-folders.doctree b/doctrees/common/develop/ide/workspace/add-delete-folders.doctree new file mode 100644 index 00000000..8604919e Binary files /dev/null and b/doctrees/common/develop/ide/workspace/add-delete-folders.doctree differ diff --git a/doctrees/common/develop/ide/workspace/open-file.doctree b/doctrees/common/develop/ide/workspace/open-file.doctree new file mode 100644 index 00000000..c27e6c69 Binary files /dev/null and b/doctrees/common/develop/ide/workspace/open-file.doctree differ diff --git a/doctrees/common/develop/ide/workspace/panels.doctree b/doctrees/common/develop/ide/workspace/panels.doctree new file mode 100644 index 00000000..76de6e54 Binary files /dev/null and b/doctrees/common/develop/ide/workspace/panels.doctree differ diff --git a/doctrees/common/develop/ide/workspace/upload-download-files.doctree b/doctrees/common/develop/ide/workspace/upload-download-files.doctree new file mode 100644 index 00000000..67479c0a Binary files /dev/null and b/doctrees/common/develop/ide/workspace/upload-download-files.doctree differ diff --git a/doctrees/common/develop/ide/workspace/workspace.doctree b/doctrees/common/develop/ide/workspace/workspace.doctree new file mode 100644 index 00000000..3d222bc0 Binary files /dev/null and b/doctrees/common/develop/ide/workspace/workspace.doctree differ diff --git a/doctrees/common/develop/packs/create-starter-pack.doctree b/doctrees/common/develop/packs/create-starter-pack.doctree new file mode 100644 index 00000000..c19aceff Binary files /dev/null and b/doctrees/common/develop/packs/create-starter-pack.doctree differ diff --git a/doctrees/common/develop/packs/packs.doctree b/doctrees/common/develop/packs/packs.doctree new file mode 100644 index 00000000..4e662778 Binary files /dev/null and b/doctrees/common/develop/packs/packs.doctree differ diff --git a/doctrees/common/develop/packs/starter-pack-guidelines.doctree b/doctrees/common/develop/packs/starter-pack-guidelines.doctree new file mode 100644 index 00000000..9c417963 Binary files /dev/null and b/doctrees/common/develop/packs/starter-pack-guidelines.doctree differ diff --git a/doctrees/common/develop/packs/update-starter-pack.doctree b/doctrees/common/develop/packs/update-starter-pack.doctree new file mode 100644 index 00000000..330c3acf Binary files /dev/null and b/doctrees/common/develop/packs/update-starter-pack.doctree differ diff --git a/doctrees/common/develop/projects/access-projects.doctree b/doctrees/common/develop/projects/access-projects.doctree new file mode 100644 index 00000000..8fe50661 Binary files /dev/null and b/doctrees/common/develop/projects/access-projects.doctree differ diff --git a/doctrees/common/develop/projects/copy-project.doctree b/doctrees/common/develop/projects/copy-project.doctree new file mode 100644 index 00000000..3476ff26 Binary files /dev/null and b/doctrees/common/develop/projects/copy-project.doctree differ diff --git a/doctrees/common/develop/projects/create-import-project.doctree b/doctrees/common/develop/projects/create-import-project.doctree new file mode 100644 index 00000000..a8ca5fd6 Binary files /dev/null and b/doctrees/common/develop/projects/create-import-project.doctree differ diff --git a/doctrees/common/develop/projects/export-project.doctree b/doctrees/common/develop/projects/export-project.doctree new file mode 100644 index 00000000..299d7890 Binary files /dev/null and b/doctrees/common/develop/projects/export-project.doctree differ diff --git a/doctrees/common/develop/projects/project-permissions.doctree b/doctrees/common/develop/projects/project-permissions.doctree new file mode 100644 index 00000000..06ae69bf Binary files /dev/null and b/doctrees/common/develop/projects/project-permissions.doctree differ diff --git a/doctrees/common/develop/projects/project-settings.doctree b/doctrees/common/develop/projects/project-settings.doctree new file mode 100644 index 00000000..182221d9 Binary files /dev/null and b/doctrees/common/develop/projects/project-settings.doctree differ diff --git a/doctrees/common/develop/projects/projects.doctree b/doctrees/common/develop/projects/projects.doctree new file mode 100644 index 00000000..4147fed6 Binary files /dev/null and b/doctrees/common/develop/projects/projects.doctree differ diff --git a/doctrees/common/develop/stacks/create-stack.doctree b/doctrees/common/develop/stacks/create-stack.doctree new file mode 100644 index 00000000..5e69af36 Binary files /dev/null and b/doctrees/common/develop/stacks/create-stack.doctree differ diff --git a/doctrees/common/develop/stacks/modify-stack.doctree b/doctrees/common/develop/stacks/modify-stack.doctree new file mode 100644 index 00000000..478d02a5 Binary files /dev/null and b/doctrees/common/develop/stacks/modify-stack.doctree differ diff --git a/doctrees/common/develop/stacks/stack-planning.doctree b/doctrees/common/develop/stacks/stack-planning.doctree new file mode 100644 index 00000000..d59a31ec Binary files /dev/null and b/doctrees/common/develop/stacks/stack-planning.doctree differ diff --git a/doctrees/common/develop/stacks/stacks.doctree b/doctrees/common/develop/stacks/stacks.doctree new file mode 100644 index 00000000..fa774456 Binary files /dev/null and b/doctrees/common/develop/stacks/stacks.doctree differ diff --git a/doctrees/common/develop/stacks/switch-stack.doctree b/doctrees/common/develop/stacks/switch-stack.doctree new file mode 100644 index 00000000..5df9b049 Binary files /dev/null and b/doctrees/common/develop/stacks/switch-stack.doctree differ diff --git a/doctrees/common/develop/stacks/update-stack.doctree b/doctrees/common/develop/stacks/update-stack.doctree new file mode 100644 index 00000000..61e6497d Binary files /dev/null and b/doctrees/common/develop/stacks/update-stack.doctree differ diff --git a/doctrees/common/develop/stacks/using-stacks.doctree b/doctrees/common/develop/stacks/using-stacks.doctree new file mode 100644 index 00000000..04fc39a5 Binary files /dev/null and b/doctrees/common/develop/stacks/using-stacks.doctree differ diff --git a/doctrees/common/settings/bitbucket.doctree b/doctrees/common/settings/bitbucket.doctree new file mode 100644 index 00000000..7e42d9b6 Binary files /dev/null and b/doctrees/common/settings/bitbucket.doctree differ diff --git a/doctrees/common/settings/env-variables.doctree b/doctrees/common/settings/env-variables.doctree new file mode 100644 index 00000000..59180db7 Binary files /dev/null and b/doctrees/common/settings/env-variables.doctree differ diff --git a/doctrees/common/settings/github.doctree b/doctrees/common/settings/github.doctree new file mode 100644 index 00000000..3239d3e4 Binary files /dev/null and b/doctrees/common/settings/github.doctree differ diff --git a/doctrees/common/settings/manage-password.doctree b/doctrees/common/settings/manage-password.doctree new file mode 100644 index 00000000..e1836205 Binary files /dev/null and b/doctrees/common/settings/manage-password.doctree differ diff --git a/doctrees/common/settings/project-prefs.doctree b/doctrees/common/settings/project-prefs.doctree new file mode 100644 index 00000000..cbeff085 Binary files /dev/null and b/doctrees/common/settings/project-prefs.doctree differ diff --git a/doctrees/common/settings/settings.doctree b/doctrees/common/settings/settings.doctree new file mode 100644 index 00000000..c40e181d Binary files /dev/null and b/doctrees/common/settings/settings.doctree differ diff --git a/doctrees/common/settings/ssh-key.doctree b/doctrees/common/settings/ssh-key.doctree new file mode 100644 index 00000000..d1034620 Binary files /dev/null and b/doctrees/common/settings/ssh-key.doctree differ diff --git a/doctrees/common/settings/upload-ssh-key-remote-server.doctree b/doctrees/common/settings/upload-ssh-key-remote-server.doctree new file mode 100644 index 00000000..b8015df1 Binary files /dev/null and b/doctrees/common/settings/upload-ssh-key-remote-server.doctree differ diff --git a/doctrees/common/settings/user-prefs.doctree b/doctrees/common/settings/user-prefs.doctree new file mode 100644 index 00000000..0fa61ae7 Binary files /dev/null and b/doctrees/common/settings/user-prefs.doctree differ diff --git a/doctrees/common/settings/user-profile.doctree b/doctrees/common/settings/user-profile.doctree new file mode 100644 index 00000000..5705db28 Binary files /dev/null and b/doctrees/common/settings/user-profile.doctree differ diff --git a/doctrees/common/tools/code-commenting.doctree b/doctrees/common/tools/code-commenting.doctree new file mode 100644 index 00000000..9e406fdd Binary files /dev/null and b/doctrees/common/tools/code-commenting.doctree differ diff --git a/doctrees/common/tools/code-playback.doctree b/doctrees/common/tools/code-playback.doctree new file mode 100644 index 00000000..f2f2de51 Binary files /dev/null and b/doctrees/common/tools/code-playback.doctree differ diff --git a/doctrees/common/tools/dyslexia.doctree b/doctrees/common/tools/dyslexia.doctree new file mode 100644 index 00000000..b773520d Binary files /dev/null and b/doctrees/common/tools/dyslexia.doctree differ diff --git a/doctrees/common/tools/lexikon.doctree b/doctrees/common/tools/lexikon.doctree new file mode 100644 index 00000000..9403d656 Binary files /dev/null and b/doctrees/common/tools/lexikon.doctree differ diff --git a/doctrees/courses.doctree b/doctrees/courses.doctree new file mode 100644 index 00000000..a0a07f88 Binary files /dev/null and b/doctrees/courses.doctree differ diff --git a/doctrees/develop.doctree b/doctrees/develop.doctree new file mode 100644 index 00000000..17aaefd6 Binary files /dev/null and b/doctrees/develop.doctree differ diff --git a/doctrees/develop/develop/general.doctree b/doctrees/develop/develop/general.doctree new file mode 100644 index 00000000..3d5d6f3c Binary files /dev/null and b/doctrees/develop/develop/general.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/access.doctree b/doctrees/develop/develop/ide/boxes/access.doctree new file mode 100644 index 00000000..d8f63276 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/access.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/always-on.doctree b/doctrees/develop/develop/ide/boxes/always-on.doctree new file mode 100644 index 00000000..d4f02bf3 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/always-on.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/ext-access.doctree b/doctrees/develop/develop/ide/boxes/ext-access.doctree new file mode 100644 index 00000000..7bd776fd Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/ext-access.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/ide-access-permissions.doctree b/doctrees/develop/develop/ide/boxes/ide-access-permissions.doctree new file mode 100644 index 00000000..31c6848b Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/ide-access-permissions.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/default-installed.doctree b/doctrees/develop/develop/ide/boxes/installsw/default-installed.doctree new file mode 100644 index 00000000..0d46b9c1 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/default-installed.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/file-locations.doctree b/doctrees/develop/develop/ide/boxes/installsw/file-locations.doctree new file mode 100644 index 00000000..0a854df8 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/file-locations.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/gui.doctree b/doctrees/develop/develop/ide/boxes/installsw/gui.doctree new file mode 100644 index 00000000..4f9d5883 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/gui.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/install-software.doctree b/doctrees/develop/develop/ide/boxes/installsw/install-software.doctree new file mode 100644 index 00000000..062a152f Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/install-software.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/langserver.doctree b/doctrees/develop/develop/ide/boxes/installsw/langserver.doctree new file mode 100644 index 00000000..299004a6 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/langserver.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/installsw/parts-coding.doctree b/doctrees/develop/develop/ide/boxes/installsw/parts-coding.doctree new file mode 100644 index 00000000..3d839cf4 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/installsw/parts-coding.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/overview.doctree b/doctrees/develop/develop/ide/boxes/overview.doctree new file mode 100644 index 00000000..44080aa0 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/overview.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/restart-reset.doctree b/doctrees/develop/develop/ide/boxes/restart-reset.doctree new file mode 100644 index 00000000..1f7a3584 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/restart-reset.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/runmenu.doctree b/doctrees/develop/develop/ide/boxes/runmenu.doctree new file mode 100644 index 00000000..3090101d Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/runmenu.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/startup.doctree b/doctrees/develop/develop/ide/boxes/startup.doctree new file mode 100644 index 00000000..30a8b022 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/startup.doctree differ diff --git a/doctrees/develop/develop/ide/boxes/terminal.doctree b/doctrees/develop/develop/ide/boxes/terminal.doctree new file mode 100644 index 00000000..771faa79 Binary files /dev/null and b/doctrees/develop/develop/ide/boxes/terminal.doctree differ diff --git a/doctrees/develop/develop/ide/debugger/create-debug-target.doctree b/doctrees/develop/develop/ide/debugger/create-debug-target.doctree new file mode 100644 index 00000000..4613dd32 Binary files /dev/null and b/doctrees/develop/develop/ide/debugger/create-debug-target.doctree differ diff --git a/doctrees/develop/develop/ide/debugger/debugger.doctree b/doctrees/develop/develop/ide/debugger/debugger.doctree new file mode 100644 index 00000000..f9de9f69 Binary files /dev/null and b/doctrees/develop/develop/ide/debugger/debugger.doctree differ diff --git a/doctrees/develop/develop/ide/debugger/start-debug.doctree b/doctrees/develop/develop/ide/debugger/start-debug.doctree new file mode 100644 index 00000000..fcfde6e8 Binary files /dev/null and b/doctrees/develop/develop/ide/debugger/start-debug.doctree differ diff --git a/doctrees/develop/develop/ide/editing/abbreviations.doctree b/doctrees/develop/develop/ide/editing/abbreviations.doctree new file mode 100644 index 00000000..ee26748a Binary files /dev/null and b/doctrees/develop/develop/ide/editing/abbreviations.doctree differ diff --git a/doctrees/develop/develop/ide/editing/autocomplete.doctree b/doctrees/develop/develop/ide/editing/autocomplete.doctree new file mode 100644 index 00000000..221ce12d Binary files /dev/null and b/doctrees/develop/develop/ide/editing/autocomplete.doctree differ diff --git a/doctrees/develop/develop/ide/editing/av-chat.doctree b/doctrees/develop/develop/ide/editing/av-chat.doctree new file mode 100644 index 00000000..d0322017 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/av-chat.doctree differ diff --git a/doctrees/develop/develop/ide/editing/code-beautifier.doctree b/doctrees/develop/develop/ide/editing/code-beautifier.doctree new file mode 100644 index 00000000..17b6004b Binary files /dev/null and b/doctrees/develop/develop/ide/editing/code-beautifier.doctree differ diff --git a/doctrees/develop/develop/ide/editing/code-editing.doctree b/doctrees/develop/develop/ide/editing/code-editing.doctree new file mode 100644 index 00000000..278f2478 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/code-editing.doctree differ diff --git a/doctrees/develop/develop/ide/editing/color-picker.doctree b/doctrees/develop/develop/ide/editing/color-picker.doctree new file mode 100644 index 00000000..08bd9e70 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/color-picker.doctree differ diff --git a/doctrees/develop/develop/ide/editing/command-bar.doctree b/doctrees/develop/develop/ide/editing/command-bar.doctree new file mode 100644 index 00000000..ae364351 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/command-bar.doctree differ diff --git a/doctrees/develop/develop/ide/editing/connect-github-codio.doctree b/doctrees/develop/develop/ide/editing/connect-github-codio.doctree new file mode 100644 index 00000000..5c984810 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/connect-github-codio.doctree differ diff --git a/doctrees/develop/develop/ide/editing/cursor.doctree b/doctrees/develop/develop/ide/editing/cursor.doctree new file mode 100644 index 00000000..d601cd60 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/cursor.doctree differ diff --git a/doctrees/develop/develop/ide/editing/force-language-highlighting.doctree b/doctrees/develop/develop/ide/editing/force-language-highlighting.doctree new file mode 100644 index 00000000..11c81658 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/force-language-highlighting.doctree differ diff --git a/doctrees/develop/develop/ide/editing/git.doctree b/doctrees/develop/develop/ide/editing/git.doctree new file mode 100644 index 00000000..be407d9e Binary files /dev/null and b/doctrees/develop/develop/ide/editing/git.doctree differ diff --git a/doctrees/develop/develop/ide/editing/junit.doctree b/doctrees/develop/develop/ide/editing/junit.doctree new file mode 100644 index 00000000..949a1405 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/junit.doctree differ diff --git a/doctrees/develop/develop/ide/editing/keyboard-shortcuts.doctree b/doctrees/develop/develop/ide/editing/keyboard-shortcuts.doctree new file mode 100644 index 00000000..c7a7e2e7 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/keyboard-shortcuts.doctree differ diff --git a/doctrees/develop/develop/ide/editing/preview.doctree b/doctrees/develop/develop/ide/editing/preview.doctree new file mode 100644 index 00000000..5950417a Binary files /dev/null and b/doctrees/develop/develop/ide/editing/preview.doctree differ diff --git a/doctrees/develop/develop/ide/editing/quick-open.doctree b/doctrees/develop/develop/ide/editing/quick-open.doctree new file mode 100644 index 00000000..828a9064 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/quick-open.doctree differ diff --git a/doctrees/develop/develop/ide/editing/real-time-collaboration.doctree b/doctrees/develop/develop/ide/editing/real-time-collaboration.doctree new file mode 100644 index 00000000..66a2e455 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/real-time-collaboration.doctree differ diff --git a/doctrees/develop/develop/ide/editing/save-files.doctree b/doctrees/develop/develop/ide/editing/save-files.doctree new file mode 100644 index 00000000..46f3f54b Binary files /dev/null and b/doctrees/develop/develop/ide/editing/save-files.doctree differ diff --git a/doctrees/develop/develop/ide/editing/search-replace.doctree b/doctrees/develop/develop/ide/editing/search-replace.doctree new file mode 100644 index 00000000..e72ae20b Binary files /dev/null and b/doctrees/develop/develop/ide/editing/search-replace.doctree differ diff --git a/doctrees/develop/develop/ide/editing/share-project.doctree b/doctrees/develop/develop/ide/editing/share-project.doctree new file mode 100644 index 00000000..e9321961 Binary files /dev/null and b/doctrees/develop/develop/ide/editing/share-project.doctree differ diff --git a/doctrees/develop/develop/ide/editing/vscode.doctree b/doctrees/develop/develop/ide/editing/vscode.doctree new file mode 100644 index 00000000..dd8124fd Binary files /dev/null and b/doctrees/develop/develop/ide/editing/vscode.doctree differ diff --git a/doctrees/develop/develop/ide/tools/deployment.doctree b/doctrees/develop/develop/ide/tools/deployment.doctree new file mode 100644 index 00000000..fcb431a6 Binary files /dev/null and b/doctrees/develop/develop/ide/tools/deployment.doctree differ diff --git a/doctrees/develop/develop/ide/tools/desktopapp.doctree b/doctrees/develop/develop/ide/tools/desktopapp.doctree new file mode 100644 index 00000000..35ae1cca Binary files /dev/null and b/doctrees/develop/develop/ide/tools/desktopapp.doctree differ diff --git a/doctrees/develop/develop/ide/tools/ghapi.doctree b/doctrees/develop/develop/ide/tools/ghapi.doctree new file mode 100644 index 00000000..71f642e6 Binary files /dev/null and b/doctrees/develop/develop/ide/tools/ghapi.doctree differ diff --git a/doctrees/develop/develop/ide/tools/ssh.doctree b/doctrees/develop/develop/ide/tools/ssh.doctree new file mode 100644 index 00000000..310e8e59 Binary files /dev/null and b/doctrees/develop/develop/ide/tools/ssh.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/add-delete-files.doctree b/doctrees/develop/develop/ide/workspace/add-delete-files.doctree new file mode 100644 index 00000000..a5d4f133 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/add-delete-files.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/add-delete-folders.doctree b/doctrees/develop/develop/ide/workspace/add-delete-folders.doctree new file mode 100644 index 00000000..037752c6 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/add-delete-folders.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/open-file.doctree b/doctrees/develop/develop/ide/workspace/open-file.doctree new file mode 100644 index 00000000..6ccff4b1 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/open-file.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/panels.doctree b/doctrees/develop/develop/ide/workspace/panels.doctree new file mode 100644 index 00000000..b455c224 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/panels.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/upload-download-files.doctree b/doctrees/develop/develop/ide/workspace/upload-download-files.doctree new file mode 100644 index 00000000..be6c5dd7 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/upload-download-files.doctree differ diff --git a/doctrees/develop/develop/ide/workspace/workspace.doctree b/doctrees/develop/develop/ide/workspace/workspace.doctree new file mode 100644 index 00000000..423e73d4 Binary files /dev/null and b/doctrees/develop/develop/ide/workspace/workspace.doctree differ diff --git a/doctrees/develop/develop/packs/create-starter-pack.doctree b/doctrees/develop/develop/packs/create-starter-pack.doctree new file mode 100644 index 00000000..4b293618 Binary files /dev/null and b/doctrees/develop/develop/packs/create-starter-pack.doctree differ diff --git a/doctrees/develop/develop/packs/packs.doctree b/doctrees/develop/develop/packs/packs.doctree new file mode 100644 index 00000000..b7196d94 Binary files /dev/null and b/doctrees/develop/develop/packs/packs.doctree differ diff --git a/doctrees/develop/develop/packs/starter-pack-guidelines.doctree b/doctrees/develop/develop/packs/starter-pack-guidelines.doctree new file mode 100644 index 00000000..4d846abd Binary files /dev/null and b/doctrees/develop/develop/packs/starter-pack-guidelines.doctree differ diff --git a/doctrees/develop/develop/packs/update-starter-pack.doctree b/doctrees/develop/develop/packs/update-starter-pack.doctree new file mode 100644 index 00000000..615ee103 Binary files /dev/null and b/doctrees/develop/develop/packs/update-starter-pack.doctree differ diff --git a/doctrees/develop/develop/projects/access-projects.doctree b/doctrees/develop/develop/projects/access-projects.doctree new file mode 100644 index 00000000..f3fe9ede Binary files /dev/null and b/doctrees/develop/develop/projects/access-projects.doctree differ diff --git a/doctrees/develop/develop/projects/copy-project.doctree b/doctrees/develop/develop/projects/copy-project.doctree new file mode 100644 index 00000000..f13c337c Binary files /dev/null and b/doctrees/develop/develop/projects/copy-project.doctree differ diff --git a/doctrees/develop/develop/projects/create-import-project.doctree b/doctrees/develop/develop/projects/create-import-project.doctree new file mode 100644 index 00000000..da59755a Binary files /dev/null and b/doctrees/develop/develop/projects/create-import-project.doctree differ diff --git a/doctrees/develop/develop/projects/export-project.doctree b/doctrees/develop/develop/projects/export-project.doctree new file mode 100644 index 00000000..ede11ae5 Binary files /dev/null and b/doctrees/develop/develop/projects/export-project.doctree differ diff --git a/doctrees/develop/develop/projects/project-permissions.doctree b/doctrees/develop/develop/projects/project-permissions.doctree new file mode 100644 index 00000000..f2b50b31 Binary files /dev/null and b/doctrees/develop/develop/projects/project-permissions.doctree differ diff --git a/doctrees/develop/develop/projects/project-settings.doctree b/doctrees/develop/develop/projects/project-settings.doctree new file mode 100644 index 00000000..ba49e9eb Binary files /dev/null and b/doctrees/develop/develop/projects/project-settings.doctree differ diff --git a/doctrees/develop/develop/projects/projects.doctree b/doctrees/develop/develop/projects/projects.doctree new file mode 100644 index 00000000..7dfd1c62 Binary files /dev/null and b/doctrees/develop/develop/projects/projects.doctree differ diff --git a/doctrees/develop/develop/stacks/create-stack.doctree b/doctrees/develop/develop/stacks/create-stack.doctree new file mode 100644 index 00000000..22439c07 Binary files /dev/null and b/doctrees/develop/develop/stacks/create-stack.doctree differ diff --git a/doctrees/develop/develop/stacks/modify-stack.doctree b/doctrees/develop/develop/stacks/modify-stack.doctree new file mode 100644 index 00000000..b9ccc9e1 Binary files /dev/null and b/doctrees/develop/develop/stacks/modify-stack.doctree differ diff --git a/doctrees/develop/develop/stacks/stack-planning.doctree b/doctrees/develop/develop/stacks/stack-planning.doctree new file mode 100644 index 00000000..e7038bf8 Binary files /dev/null and b/doctrees/develop/develop/stacks/stack-planning.doctree differ diff --git a/doctrees/develop/develop/stacks/stacks.doctree b/doctrees/develop/develop/stacks/stacks.doctree new file mode 100644 index 00000000..46f5503c Binary files /dev/null and b/doctrees/develop/develop/stacks/stacks.doctree differ diff --git a/doctrees/develop/develop/stacks/switch-stack.doctree b/doctrees/develop/develop/stacks/switch-stack.doctree new file mode 100644 index 00000000..54f43378 Binary files /dev/null and b/doctrees/develop/develop/stacks/switch-stack.doctree differ diff --git a/doctrees/develop/develop/stacks/update-stack.doctree b/doctrees/develop/develop/stacks/update-stack.doctree new file mode 100644 index 00000000..63a3c919 Binary files /dev/null and b/doctrees/develop/develop/stacks/update-stack.doctree differ diff --git a/doctrees/develop/develop/stacks/using-stacks.doctree b/doctrees/develop/develop/stacks/using-stacks.doctree new file mode 100644 index 00000000..9acd0d9e Binary files /dev/null and b/doctrees/develop/develop/stacks/using-stacks.doctree differ diff --git a/doctrees/develop/settings/bitbucket.doctree b/doctrees/develop/settings/bitbucket.doctree new file mode 100644 index 00000000..2ffaf94b Binary files /dev/null and b/doctrees/develop/settings/bitbucket.doctree differ diff --git a/doctrees/develop/settings/env-variables.doctree b/doctrees/develop/settings/env-variables.doctree new file mode 100644 index 00000000..5991bbc8 Binary files /dev/null and b/doctrees/develop/settings/env-variables.doctree differ diff --git a/doctrees/develop/settings/github.doctree b/doctrees/develop/settings/github.doctree new file mode 100644 index 00000000..3f420c2b Binary files /dev/null and b/doctrees/develop/settings/github.doctree differ diff --git a/doctrees/develop/settings/manage-password.doctree b/doctrees/develop/settings/manage-password.doctree new file mode 100644 index 00000000..38387228 Binary files /dev/null and b/doctrees/develop/settings/manage-password.doctree differ diff --git a/doctrees/develop/settings/project-prefs.doctree b/doctrees/develop/settings/project-prefs.doctree new file mode 100644 index 00000000..475020f9 Binary files /dev/null and b/doctrees/develop/settings/project-prefs.doctree differ diff --git a/doctrees/develop/settings/settings.doctree b/doctrees/develop/settings/settings.doctree new file mode 100644 index 00000000..d5961b8b Binary files /dev/null and b/doctrees/develop/settings/settings.doctree differ diff --git a/doctrees/develop/settings/ssh-key.doctree b/doctrees/develop/settings/ssh-key.doctree new file mode 100644 index 00000000..0237adff Binary files /dev/null and b/doctrees/develop/settings/ssh-key.doctree differ diff --git a/doctrees/develop/settings/upload-ssh-key-remote-server.doctree b/doctrees/develop/settings/upload-ssh-key-remote-server.doctree new file mode 100644 index 00000000..cc37c211 Binary files /dev/null and b/doctrees/develop/settings/upload-ssh-key-remote-server.doctree differ diff --git a/doctrees/develop/settings/user-prefs.doctree b/doctrees/develop/settings/user-prefs.doctree new file mode 100644 index 00000000..ad3fbe1b Binary files /dev/null and b/doctrees/develop/settings/user-prefs.doctree differ diff --git a/doctrees/develop/settings/user-profile.doctree b/doctrees/develop/settings/user-profile.doctree new file mode 100644 index 00000000..03fa9e94 Binary files /dev/null and b/doctrees/develop/settings/user-profile.doctree differ diff --git a/doctrees/develop/tools/code-commenting.doctree b/doctrees/develop/tools/code-commenting.doctree new file mode 100644 index 00000000..45af6485 Binary files /dev/null and b/doctrees/develop/tools/code-commenting.doctree differ diff --git a/doctrees/develop/tools/code-playback.doctree b/doctrees/develop/tools/code-playback.doctree new file mode 100644 index 00000000..9b9f6598 Binary files /dev/null and b/doctrees/develop/tools/code-playback.doctree differ diff --git a/doctrees/develop/tools/dyslexia.doctree b/doctrees/develop/tools/dyslexia.doctree new file mode 100644 index 00000000..dd33f4f9 Binary files /dev/null and b/doctrees/develop/tools/dyslexia.doctree differ diff --git a/doctrees/develop/tools/lexikon.doctree b/doctrees/develop/tools/lexikon.doctree new file mode 100644 index 00000000..f3d472d6 Binary files /dev/null and b/doctrees/develop/tools/lexikon.doctree differ diff --git a/doctrees/environment.pickle b/doctrees/environment.pickle new file mode 100644 index 00000000..6e7335bb Binary files /dev/null and b/doctrees/environment.pickle differ diff --git a/doctrees/getstarted.doctree b/doctrees/getstarted.doctree new file mode 100644 index 00000000..5a835cad Binary files /dev/null and b/doctrees/getstarted.doctree differ diff --git a/doctrees/index.doctree b/doctrees/index.doctree new file mode 100644 index 00000000..394d0871 Binary files /dev/null and b/doctrees/index.doctree differ diff --git a/doctrees/instructors/admin/integration/commoncartridge.doctree b/doctrees/instructors/admin/integration/commoncartridge.doctree new file mode 100644 index 00000000..4dd3acc5 Binary files /dev/null and b/doctrees/instructors/admin/integration/commoncartridge.doctree differ diff --git a/doctrees/instructors/admin/integration/grading.doctree b/doctrees/instructors/admin/integration/grading.doctree new file mode 100644 index 00000000..c9769f64 Binary files /dev/null and b/doctrees/instructors/admin/integration/grading.doctree differ diff --git a/doctrees/instructors/admin/integration/intro.doctree b/doctrees/instructors/admin/integration/intro.doctree new file mode 100644 index 00000000..6616d047 Binary files /dev/null and b/doctrees/instructors/admin/integration/intro.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-students.doctree b/doctrees/instructors/admin/integration/lms-students.doctree new file mode 100644 index 00000000..8485f205 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-students.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/blackboard.doctree b/doctrees/instructors/admin/integration/lms-systems/blackboard.doctree new file mode 100644 index 00000000..994cd936 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/blackboard.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/canvas.doctree b/doctrees/instructors/admin/integration/lms-systems/canvas.doctree new file mode 100644 index 00000000..d3071236 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/canvas.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/d2l.doctree b/doctrees/instructors/admin/integration/lms-systems/d2l.doctree new file mode 100644 index 00000000..926587cf Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/d2l.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/google-classroom.doctree b/doctrees/instructors/admin/integration/lms-systems/google-classroom.doctree new file mode 100644 index 00000000..2864ac85 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/google-classroom.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/moodle.doctree b/doctrees/instructors/admin/integration/lms-systems/moodle.doctree new file mode 100644 index 00000000..297f6006 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/moodle.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/schoology.doctree b/doctrees/instructors/admin/integration/lms-systems/schoology.doctree new file mode 100644 index 00000000..c90025ee Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/schoology.doctree differ diff --git a/doctrees/instructors/admin/integration/lms-systems/system-specific-directions.doctree b/doctrees/instructors/admin/integration/lms-systems/system-specific-directions.doctree new file mode 100644 index 00000000..44620d08 Binary files /dev/null and b/doctrees/instructors/admin/integration/lms-systems/system-specific-directions.doctree differ diff --git a/doctrees/instructors/admin/integration/lti-app.doctree b/doctrees/instructors/admin/integration/lti-app.doctree new file mode 100644 index 00000000..b8eda62f Binary files /dev/null and b/doctrees/instructors/admin/integration/lti-app.doctree differ diff --git a/doctrees/instructors/admin/integration/lti-course-copy.doctree b/doctrees/instructors/admin/integration/lti-course-copy.doctree new file mode 100644 index 00000000..43bb9a59 Binary files /dev/null and b/doctrees/instructors/admin/integration/lti-course-copy.doctree differ diff --git a/doctrees/instructors/admin/integration/lti-keys-and-urls-information.doctree b/doctrees/instructors/admin/integration/lti-keys-and-urls-information.doctree new file mode 100644 index 00000000..9d4f4516 Binary files /dev/null and b/doctrees/instructors/admin/integration/lti-keys-and-urls-information.doctree differ diff --git a/doctrees/instructors/admin/integration/lti1-3.doctree b/doctrees/instructors/admin/integration/lti1-3.doctree new file mode 100644 index 00000000..be6a73d0 Binary files /dev/null and b/doctrees/instructors/admin/integration/lti1-3.doctree differ diff --git a/doctrees/instructors/admin/integration/lti1-3BS-D2L.doctree b/doctrees/instructors/admin/integration/lti1-3BS-D2L.doctree new file mode 100644 index 00000000..6cf02c10 Binary files /dev/null and b/doctrees/instructors/admin/integration/lti1-3BS-D2L.doctree differ diff --git a/doctrees/instructors/admin/integration/lti1-3Canvas.doctree b/doctrees/instructors/admin/integration/lti1-3Canvas.doctree new file mode 100644 index 00000000..ecec2ee1 Binary files /dev/null and b/doctrees/instructors/admin/integration/lti1-3Canvas.doctree differ diff --git a/doctrees/instructors/admin/legal.doctree b/doctrees/instructors/admin/legal.doctree new file mode 100644 index 00000000..1190a5fa Binary files /dev/null and b/doctrees/instructors/admin/legal.doctree differ diff --git a/doctrees/instructors/admin/organization/add-remove-org-owners.doctree b/doctrees/instructors/admin/organization/add-remove-org-owners.doctree new file mode 100644 index 00000000..79e9f4c0 Binary files /dev/null and b/doctrees/instructors/admin/organization/add-remove-org-owners.doctree differ diff --git a/doctrees/instructors/admin/organization/add-teachers.doctree b/doctrees/instructors/admin/organization/add-teachers.doctree new file mode 100644 index 00000000..35785eef Binary files /dev/null and b/doctrees/instructors/admin/organization/add-teachers.doctree differ diff --git a/doctrees/instructors/admin/organization/auto-release-grades.doctree b/doctrees/instructors/admin/organization/auto-release-grades.doctree new file mode 100644 index 00000000..a8106764 Binary files /dev/null and b/doctrees/instructors/admin/organization/auto-release-grades.doctree differ diff --git a/doctrees/instructors/admin/organization/create-org-library.doctree b/doctrees/instructors/admin/organization/create-org-library.doctree new file mode 100644 index 00000000..9871fc41 Binary files /dev/null and b/doctrees/instructors/admin/organization/create-org-library.doctree differ diff --git a/doctrees/instructors/admin/organization/default-student-dashboard.doctree b/doctrees/instructors/admin/organization/default-student-dashboard.doctree new file mode 100644 index 00000000..6865993e Binary files /dev/null and b/doctrees/instructors/admin/organization/default-student-dashboard.doctree differ diff --git a/doctrees/instructors/admin/organization/delete-org.doctree b/doctrees/instructors/admin/organization/delete-org.doctree new file mode 100644 index 00000000..ffbd9415 Binary files /dev/null and b/doctrees/instructors/admin/organization/delete-org.doctree differ diff --git a/doctrees/instructors/admin/organization/enable-custom-script.doctree b/doctrees/instructors/admin/organization/enable-custom-script.doctree new file mode 100644 index 00000000..e6e424cb Binary files /dev/null and b/doctrees/instructors/admin/organization/enable-custom-script.doctree differ diff --git a/doctrees/instructors/admin/organization/gigabox-usage.doctree b/doctrees/instructors/admin/organization/gigabox-usage.doctree new file mode 100644 index 00000000..ecf128c0 Binary files /dev/null and b/doctrees/instructors/admin/organization/gigabox-usage.doctree differ diff --git a/doctrees/instructors/admin/organization/grade-templates.doctree b/doctrees/instructors/admin/organization/grade-templates.doctree new file mode 100644 index 00000000..27e77c08 Binary files /dev/null and b/doctrees/instructors/admin/organization/grade-templates.doctree differ diff --git a/doctrees/instructors/admin/organization/hide-av.doctree b/doctrees/instructors/admin/organization/hide-av.doctree new file mode 100644 index 00000000..eba8b423 Binary files /dev/null and b/doctrees/instructors/admin/organization/hide-av.doctree differ diff --git a/doctrees/instructors/admin/organization/org-contact-url.doctree b/doctrees/instructors/admin/organization/org-contact-url.doctree new file mode 100644 index 00000000..7ba61ace Binary files /dev/null and b/doctrees/instructors/admin/organization/org-contact-url.doctree differ diff --git a/doctrees/instructors/admin/organization/organisation.doctree b/doctrees/instructors/admin/organization/organisation.doctree new file mode 100644 index 00000000..a82fdffe Binary files /dev/null and b/doctrees/instructors/admin/organization/organisation.doctree differ diff --git a/doctrees/instructors/admin/organization/public-private-settings.doctree b/doctrees/instructors/admin/organization/public-private-settings.doctree new file mode 100644 index 00000000..7d916f20 Binary files /dev/null and b/doctrees/instructors/admin/organization/public-private-settings.doctree differ diff --git a/doctrees/instructors/admin/organization/remove-org-members.doctree b/doctrees/instructors/admin/organization/remove-org-members.doctree new file mode 100644 index 00000000..588807c1 Binary files /dev/null and b/doctrees/instructors/admin/organization/remove-org-members.doctree differ diff --git a/doctrees/instructors/admin/organization/sso.doctree b/doctrees/instructors/admin/organization/sso.doctree new file mode 100644 index 00000000..9c3bd5a9 Binary files /dev/null and b/doctrees/instructors/admin/organization/sso.doctree differ diff --git a/doctrees/instructors/admin/organization/student-consent-form.doctree b/doctrees/instructors/admin/organization/student-consent-form.doctree new file mode 100644 index 00000000..f2d7aa08 Binary files /dev/null and b/doctrees/instructors/admin/organization/student-consent-form.doctree differ diff --git a/doctrees/instructors/admin/organization/student-email.doctree b/doctrees/instructors/admin/organization/student-email.doctree new file mode 100644 index 00000000..39befa33 Binary files /dev/null and b/doctrees/instructors/admin/organization/student-email.doctree differ diff --git a/doctrees/instructors/admin/organization/view-org-members.doctree b/doctrees/instructors/admin/organization/view-org-members.doctree new file mode 100644 index 00000000..3530a007 Binary files /dev/null and b/doctrees/instructors/admin/organization/view-org-members.doctree differ diff --git a/doctrees/instructors/admin/orgbilling.doctree b/doctrees/instructors/admin/orgbilling.doctree new file mode 100644 index 00000000..baec7ced Binary files /dev/null and b/doctrees/instructors/admin/orgbilling.doctree differ diff --git a/doctrees/instructors/authoring/assessments/add-assessment.doctree b/doctrees/instructors/authoring/assessments/add-assessment.doctree new file mode 100644 index 00000000..b70ccf05 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/add-assessment.doctree differ diff --git a/doctrees/instructors/authoring/assessments/advanced-code-test.doctree b/doctrees/instructors/authoring/assessments/advanced-code-test.doctree new file mode 100644 index 00000000..371b0292 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/advanced-code-test.doctree differ diff --git a/doctrees/instructors/authoring/assessments/assessment-security.doctree b/doctrees/instructors/authoring/assessments/assessment-security.doctree new file mode 100644 index 00000000..debf67a4 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/assessment-security.doctree differ diff --git a/doctrees/instructors/authoring/assessments/assessments.doctree b/doctrees/instructors/authoring/assessments/assessments.doctree new file mode 100644 index 00000000..750b070d Binary files /dev/null and b/doctrees/instructors/authoring/assessments/assessments.doctree differ diff --git a/doctrees/instructors/authoring/assessments/auto-grade-scripts.doctree b/doctrees/instructors/authoring/assessments/auto-grade-scripts.doctree new file mode 100644 index 00000000..981b3cea Binary files /dev/null and b/doctrees/instructors/authoring/assessments/auto-grade-scripts.doctree differ diff --git a/doctrees/instructors/authoring/assessments/autograde-free-text.doctree b/doctrees/instructors/authoring/assessments/autograde-free-text.doctree new file mode 100644 index 00000000..b4892aaa Binary files /dev/null and b/doctrees/instructors/authoring/assessments/autograde-free-text.doctree differ diff --git a/doctrees/instructors/authoring/assessments/delete-assessment.doctree b/doctrees/instructors/authoring/assessments/delete-assessment.doctree new file mode 100644 index 00000000..1f59cb32 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/delete-assessment.doctree differ diff --git a/doctrees/instructors/authoring/assessments/duplicate-assessment.doctree b/doctrees/instructors/authoring/assessments/duplicate-assessment.doctree new file mode 100644 index 00000000..3fee4723 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/duplicate-assessment.doctree differ diff --git a/doctrees/instructors/authoring/assessments/edit-assessment-points.doctree b/doctrees/instructors/authoring/assessments/edit-assessment-points.doctree new file mode 100644 index 00000000..dba0817a Binary files /dev/null and b/doctrees/instructors/authoring/assessments/edit-assessment-points.doctree differ diff --git a/doctrees/instructors/authoring/assessments/edit-assessment.doctree b/doctrees/instructors/authoring/assessments/edit-assessment.doctree new file mode 100644 index 00000000..57e1f4e1 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/edit-assessment.doctree differ diff --git a/doctrees/instructors/authoring/assessments/fill-in-blanks.doctree b/doctrees/instructors/authoring/assessments/fill-in-blanks.doctree new file mode 100644 index 00000000..afef1bfe Binary files /dev/null and b/doctrees/instructors/authoring/assessments/fill-in-blanks.doctree differ diff --git a/doctrees/instructors/authoring/assessments/free-text.doctree b/doctrees/instructors/authoring/assessments/free-text.doctree new file mode 100644 index 00000000..6083aab1 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/free-text.doctree differ diff --git a/doctrees/instructors/authoring/assessments/grade-book.doctree b/doctrees/instructors/authoring/assessments/grade-book.doctree new file mode 100644 index 00000000..09366e69 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/grade-book.doctree differ diff --git a/doctrees/instructors/authoring/assessments/math-assessments.doctree b/doctrees/instructors/authoring/assessments/math-assessments.doctree new file mode 100644 index 00000000..bdc65570 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/math-assessments.doctree differ diff --git a/doctrees/instructors/authoring/assessments/multiple-choice.doctree b/doctrees/instructors/authoring/assessments/multiple-choice.doctree new file mode 100644 index 00000000..17aa0164 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/multiple-choice.doctree differ diff --git a/doctrees/instructors/authoring/assessments/parameterized.doctree b/doctrees/instructors/authoring/assessments/parameterized.doctree new file mode 100644 index 00000000..c6594480 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/parameterized.doctree differ diff --git a/doctrees/instructors/authoring/assessments/parsons-puzzle.doctree b/doctrees/instructors/authoring/assessments/parsons-puzzle.doctree new file mode 100644 index 00000000..58201a81 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/parsons-puzzle.doctree differ diff --git a/doctrees/instructors/authoring/assessments/partial-points.doctree b/doctrees/instructors/authoring/assessments/partial-points.doctree new file mode 100644 index 00000000..74c57a9d Binary files /dev/null and b/doctrees/instructors/authoring/assessments/partial-points.doctree differ diff --git a/doctrees/instructors/authoring/assessments/random.doctree b/doctrees/instructors/authoring/assessments/random.doctree new file mode 100644 index 00000000..9df97b8c Binary files /dev/null and b/doctrees/instructors/authoring/assessments/random.doctree differ diff --git a/doctrees/instructors/authoring/assessments/sense-network.doctree b/doctrees/instructors/authoring/assessments/sense-network.doctree new file mode 100644 index 00000000..69366d45 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/sense-network.doctree differ diff --git a/doctrees/instructors/authoring/assessments/standard-code-test.doctree b/doctrees/instructors/authoring/assessments/standard-code-test.doctree new file mode 100644 index 00000000..5ab93411 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/standard-code-test.doctree differ diff --git a/doctrees/instructors/authoring/assessments/student-submission.doctree b/doctrees/instructors/authoring/assessments/student-submission.doctree new file mode 100644 index 00000000..1d83d184 Binary files /dev/null and b/doctrees/instructors/authoring/assessments/student-submission.doctree differ diff --git a/doctrees/instructors/authoring/assessments/ungraded-assessments.doctree b/doctrees/instructors/authoring/assessments/ungraded-assessments.doctree new file mode 100644 index 00000000..c192c55a Binary files /dev/null and b/doctrees/instructors/authoring/assessments/ungraded-assessments.doctree differ diff --git a/doctrees/instructors/authoring/guides/add_media.doctree b/doctrees/instructors/authoring/guides/add_media.doctree new file mode 100644 index 00000000..7ee3051f Binary files /dev/null and b/doctrees/instructors/authoring/guides/add_media.doctree differ diff --git a/doctrees/instructors/authoring/guides/author_student.doctree b/doctrees/instructors/authoring/guides/author_student.doctree new file mode 100644 index 00000000..18c0db1e Binary files /dev/null and b/doctrees/instructors/authoring/guides/author_student.doctree differ diff --git a/doctrees/instructors/authoring/guides/authoring_guidelines.doctree b/doctrees/instructors/authoring/guides/authoring_guidelines.doctree new file mode 100644 index 00000000..e53a5c15 Binary files /dev/null and b/doctrees/instructors/authoring/guides/authoring_guidelines.doctree differ diff --git a/doctrees/instructors/authoring/guides/cpumemdisk.doctree b/doctrees/instructors/authoring/guides/cpumemdisk.doctree new file mode 100644 index 00000000..cfa1d70b Binary files /dev/null and b/doctrees/instructors/authoring/guides/cpumemdisk.doctree differ diff --git a/doctrees/instructors/authoring/guides/custom_button.doctree b/doctrees/instructors/authoring/guides/custom_button.doctree new file mode 100644 index 00000000..1ff36b2f Binary files /dev/null and b/doctrees/instructors/authoring/guides/custom_button.doctree differ diff --git a/doctrees/instructors/authoring/guides/excludingfiles.doctree b/doctrees/instructors/authoring/guides/excludingfiles.doctree new file mode 100644 index 00000000..69a97065 Binary files /dev/null and b/doctrees/instructors/authoring/guides/excludingfiles.doctree differ diff --git a/doctrees/instructors/authoring/guides/freeze_code.doctree b/doctrees/instructors/authoring/guides/freeze_code.doctree new file mode 100644 index 00000000..2535c596 Binary files /dev/null and b/doctrees/instructors/authoring/guides/freeze_code.doctree differ diff --git a/doctrees/instructors/authoring/guides/hide_folders.doctree b/doctrees/instructors/authoring/guides/hide_folders.doctree new file mode 100644 index 00000000..a4a68f55 Binary files /dev/null and b/doctrees/instructors/authoring/guides/hide_folders.doctree differ diff --git a/doctrees/instructors/authoring/guides/html_content.doctree b/doctrees/instructors/authoring/guides/html_content.doctree new file mode 100644 index 00000000..9754d30d Binary files /dev/null and b/doctrees/instructors/authoring/guides/html_content.doctree differ diff --git a/doctrees/instructors/authoring/guides/intro.doctree b/doctrees/instructors/authoring/guides/intro.doctree new file mode 100644 index 00000000..e03d6033 Binary files /dev/null and b/doctrees/instructors/authoring/guides/intro.doctree differ diff --git a/doctrees/instructors/authoring/guides/latex.doctree b/doctrees/instructors/authoring/guides/latex.doctree new file mode 100644 index 00000000..62166890 Binary files /dev/null and b/doctrees/instructors/authoring/guides/latex.doctree differ diff --git a/doctrees/instructors/authoring/guides/markdown_content.doctree b/doctrees/instructors/authoring/guides/markdown_content.doctree new file mode 100644 index 00000000..ef34ab3b Binary files /dev/null and b/doctrees/instructors/authoring/guides/markdown_content.doctree differ diff --git a/doctrees/instructors/authoring/guides/open_close_content.doctree b/doctrees/instructors/authoring/guides/open_close_content.doctree new file mode 100644 index 00000000..d870e2d7 Binary files /dev/null and b/doctrees/instructors/authoring/guides/open_close_content.doctree differ diff --git a/doctrees/instructors/authoring/guides/page_editing.doctree b/doctrees/instructors/authoring/guides/page_editing.doctree new file mode 100644 index 00000000..202149f8 Binary files /dev/null and b/doctrees/instructors/authoring/guides/page_editing.doctree differ diff --git a/doctrees/instructors/authoring/guides/previewing_content.doctree b/doctrees/instructors/authoring/guides/previewing_content.doctree new file mode 100644 index 00000000..5bd03c0f Binary files /dev/null and b/doctrees/instructors/authoring/guides/previewing_content.doctree differ diff --git a/doctrees/instructors/authoring/guides/project_book.doctree b/doctrees/instructors/authoring/guides/project_book.doctree new file mode 100644 index 00000000..7082b671 Binary files /dev/null and b/doctrees/instructors/authoring/guides/project_book.doctree differ diff --git a/doctrees/instructors/authoring/guides/settings/assessments.doctree b/doctrees/instructors/authoring/guides/settings/assessments.doctree new file mode 100644 index 00000000..baae8fbb Binary files /dev/null and b/doctrees/instructors/authoring/guides/settings/assessments.doctree differ diff --git a/doctrees/instructors/authoring/guides/settings/global.doctree b/doctrees/instructors/authoring/guides/settings/global.doctree new file mode 100644 index 00000000..d3a4568d Binary files /dev/null and b/doctrees/instructors/authoring/guides/settings/global.doctree differ diff --git a/doctrees/instructors/authoring/guides/settings/media.doctree b/doctrees/instructors/authoring/guides/settings/media.doctree new file mode 100644 index 00000000..c4b559fd Binary files /dev/null and b/doctrees/instructors/authoring/guides/settings/media.doctree differ diff --git a/doctrees/instructors/authoring/guides/settings/opentabs.doctree b/doctrees/instructors/authoring/guides/settings/opentabs.doctree new file mode 100644 index 00000000..d933fed9 Binary files /dev/null and b/doctrees/instructors/authoring/guides/settings/opentabs.doctree differ diff --git a/doctrees/instructors/authoring/guides/settings/page.doctree b/doctrees/instructors/authoring/guides/settings/page.doctree new file mode 100644 index 00000000..f84ef954 Binary files /dev/null and b/doctrees/instructors/authoring/guides/settings/page.doctree differ diff --git a/doctrees/instructors/authoring/guides/solution_templating.doctree b/doctrees/instructors/authoring/guides/solution_templating.doctree new file mode 100644 index 00000000..1846b56d Binary files /dev/null and b/doctrees/instructors/authoring/guides/solution_templating.doctree differ diff --git a/doctrees/instructors/authoring/guides/teacher_only.doctree b/doctrees/instructors/authoring/guides/teacher_only.doctree new file mode 100644 index 00000000..45cc326e Binary files /dev/null and b/doctrees/instructors/authoring/guides/teacher_only.doctree differ diff --git a/doctrees/instructors/authoring/guides/toc.doctree b/doctrees/instructors/authoring/guides/toc.doctree new file mode 100644 index 00000000..49ecfa90 Binary files /dev/null and b/doctrees/instructors/authoring/guides/toc.doctree differ diff --git a/doctrees/instructors/getstarted/howto.doctree b/doctrees/instructors/getstarted/howto.doctree new file mode 100644 index 00000000..6b987153 Binary files /dev/null and b/doctrees/instructors/getstarted/howto.doctree differ diff --git a/doctrees/instructors/getstarted/onboard.doctree b/doctrees/instructors/getstarted/onboard.doctree new file mode 100644 index 00000000..ab617dfd Binary files /dev/null and b/doctrees/instructors/getstarted/onboard.doctree differ diff --git a/doctrees/instructors/getstarted/startlist.doctree b/doctrees/instructors/getstarted/startlist.doctree new file mode 100644 index 00000000..e273d37c Binary files /dev/null and b/doctrees/instructors/getstarted/startlist.doctree differ diff --git a/doctrees/instructors/getstarted/support/changelog.doctree b/doctrees/instructors/getstarted/support/changelog.doctree new file mode 100644 index 00000000..8b139c12 Binary files /dev/null and b/doctrees/instructors/getstarted/support/changelog.doctree differ diff --git a/doctrees/instructors/getstarted/support/support.doctree b/doctrees/instructors/getstarted/support/support.doctree new file mode 100644 index 00000000..948c3e57 Binary files /dev/null and b/doctrees/instructors/getstarted/support/support.doctree differ diff --git a/doctrees/instructors/setupcourses/add-remove-assignment.doctree b/doctrees/instructors/setupcourses/add-remove-assignment.doctree new file mode 100644 index 00000000..7c0816df Binary files /dev/null and b/doctrees/instructors/setupcourses/add-remove-assignment.doctree differ diff --git a/doctrees/instructors/setupcourses/add-remove-students.doctree b/doctrees/instructors/setupcourses/add-remove-students.doctree new file mode 100644 index 00000000..e934e923 Binary files /dev/null and b/doctrees/instructors/setupcourses/add-remove-students.doctree differ diff --git a/doctrees/instructors/setupcourses/add-ta.doctree b/doctrees/instructors/setupcourses/add-ta.doctree new file mode 100644 index 00000000..f82e5b49 Binary files /dev/null and b/doctrees/instructors/setupcourses/add-ta.doctree differ diff --git a/doctrees/instructors/setupcourses/add-teachers.doctree b/doctrees/instructors/setupcourses/add-teachers.doctree new file mode 100644 index 00000000..50932502 Binary files /dev/null and b/doctrees/instructors/setupcourses/add-teachers.doctree differ diff --git a/doctrees/instructors/setupcourses/archive-course.doctree b/doctrees/instructors/setupcourses/archive-course.doctree new file mode 100644 index 00000000..ad6d5af2 Binary files /dev/null and b/doctrees/instructors/setupcourses/archive-course.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/allow-student-reset.doctree b/doctrees/instructors/setupcourses/assignment-settings/allow-student-reset.doctree new file mode 100644 index 00000000..0f5b39f9 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/allow-student-reset.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assign-grade-template.doctree b/doctrees/instructors/setupcourses/assignment-settings/assign-grade-template.doctree new file mode 100644 index 00000000..46b62745 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assign-grade-template.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assignment-actions.doctree b/doctrees/instructors/setupcourses/assignment-settings/assignment-actions.doctree new file mode 100644 index 00000000..352f5c16 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assignment-actions.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assignment-duration.doctree b/doctrees/instructors/setupcourses/assignment-settings/assignment-duration.doctree new file mode 100644 index 00000000..c193e549 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assignment-duration.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assignment-gigabox.doctree b/doctrees/instructors/setupcourses/assignment-settings/assignment-gigabox.doctree new file mode 100644 index 00000000..3aa91fbd Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assignment-gigabox.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assignment-settings.doctree b/doctrees/instructors/setupcourses/assignment-settings/assignment-settings.doctree new file mode 100644 index 00000000..92758e61 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assignment-settings.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/assignment-surveys.doctree b/doctrees/instructors/setupcourses/assignment-settings/assignment-surveys.doctree new file mode 100644 index 00000000..d50fd088 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/assignment-surveys.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/disable-assignment.doctree b/doctrees/instructors/setupcourses/assignment-settings/disable-assignment.doctree new file mode 100644 index 00000000..e56a437b Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/disable-assignment.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/disable-download.doctree b/doctrees/instructors/setupcourses/assignment-settings/disable-download.doctree new file mode 100644 index 00000000..f6a4f5eb Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/disable-download.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/disable-mark-completed.doctree b/doctrees/instructors/setupcourses/assignment-settings/disable-mark-completed.doctree new file mode 100644 index 00000000..52a9d6df Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/disable-mark-completed.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/exam-proctoring.doctree b/doctrees/instructors/setupcourses/assignment-settings/exam-proctoring.doctree new file mode 100644 index 00000000..0bab2523 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/exam-proctoring.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/grade-weights.doctree b/doctrees/instructors/setupcourses/assignment-settings/grade-weights.doctree new file mode 100644 index 00000000..89ff1ba1 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/grade-weights.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/groupwork.doctree b/doctrees/instructors/setupcourses/assignment-settings/groupwork.doctree new file mode 100644 index 00000000..ab787a55 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/groupwork.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/mandatory.doctree b/doctrees/instructors/setupcourses/assignment-settings/mandatory.doctree new file mode 100644 index 00000000..68d5624b Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/mandatory.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/penalties.doctree b/doctrees/instructors/setupcourses/assignment-settings/penalties.doctree new file mode 100644 index 00000000..0364fb2f Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/penalties.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/pin-assignment.doctree b/doctrees/instructors/setupcourses/assignment-settings/pin-assignment.doctree new file mode 100644 index 00000000..fe3617e3 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/pin-assignment.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/prerequisite-assignments.doctree b/doctrees/instructors/setupcourses/assignment-settings/prerequisite-assignments.doctree new file mode 100644 index 00000000..3077295b Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/prerequisite-assignments.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/prime-assignment-containers.doctree b/doctrees/instructors/setupcourses/assignment-settings/prime-assignment-containers.doctree new file mode 100644 index 00000000..690180ce Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/prime-assignment-containers.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/visibility-completed.doctree b/doctrees/instructors/setupcourses/assignment-settings/visibility-completed.doctree new file mode 100644 index 00000000..e4618024 Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/visibility-completed.doctree differ diff --git a/doctrees/instructors/setupcourses/assignment-settings/visibility-disabled.doctree b/doctrees/instructors/setupcourses/assignment-settings/visibility-disabled.doctree new file mode 100644 index 00000000..4fde28ac Binary files /dev/null and b/doctrees/instructors/setupcourses/assignment-settings/visibility-disabled.doctree differ diff --git a/doctrees/instructors/setupcourses/change-student-password.doctree b/doctrees/instructors/setupcourses/change-student-password.doctree new file mode 100644 index 00000000..97f8ccaa Binary files /dev/null and b/doctrees/instructors/setupcourses/change-student-password.doctree differ diff --git a/doctrees/instructors/setupcourses/clone-course.doctree b/doctrees/instructors/setupcourses/clone-course.doctree new file mode 100644 index 00000000..449f0e76 Binary files /dev/null and b/doctrees/instructors/setupcourses/clone-course.doctree differ diff --git a/doctrees/instructors/setupcourses/course-contact.doctree b/doctrees/instructors/setupcourses/course-contact.doctree new file mode 100644 index 00000000..a20a03ac Binary files /dev/null and b/doctrees/instructors/setupcourses/course-contact.doctree differ diff --git a/doctrees/instructors/setupcourses/course-module-progress.doctree b/doctrees/instructors/setupcourses/course-module-progress.doctree new file mode 100644 index 00000000..a07c54f5 Binary files /dev/null and b/doctrees/instructors/setupcourses/course-module-progress.doctree differ diff --git a/doctrees/instructors/setupcourses/course-revoke-sudo-access.doctree b/doctrees/instructors/setupcourses/course-revoke-sudo-access.doctree new file mode 100644 index 00000000..ca253bb9 Binary files /dev/null and b/doctrees/instructors/setupcourses/course-revoke-sudo-access.doctree differ diff --git a/doctrees/instructors/setupcourses/courses.doctree b/doctrees/instructors/setupcourses/courses.doctree new file mode 100644 index 00000000..93ac851d Binary files /dev/null and b/doctrees/instructors/setupcourses/courses.doctree differ diff --git a/doctrees/instructors/setupcourses/create-course.doctree b/doctrees/instructors/setupcourses/create-course.doctree new file mode 100644 index 00000000..97d1b1d2 Binary files /dev/null and b/doctrees/instructors/setupcourses/create-course.doctree differ diff --git a/doctrees/instructors/setupcourses/delete-course.doctree b/doctrees/instructors/setupcourses/delete-course.doctree new file mode 100644 index 00000000..b7a756a3 Binary files /dev/null and b/doctrees/instructors/setupcourses/delete-course.doctree differ diff --git a/doctrees/instructors/setupcourses/export-assignment-data.doctree b/doctrees/instructors/setupcourses/export-assignment-data.doctree new file mode 100644 index 00000000..380c67d6 Binary files /dev/null and b/doctrees/instructors/setupcourses/export-assignment-data.doctree differ diff --git a/doctrees/instructors/setupcourses/export-course-data.doctree b/doctrees/instructors/setupcourses/export-course-data.doctree new file mode 100644 index 00000000..6f9461a4 Binary files /dev/null and b/doctrees/instructors/setupcourses/export-course-data.doctree differ diff --git a/doctrees/instructors/setupcourses/export-lti.doctree b/doctrees/instructors/setupcourses/export-lti.doctree new file mode 100644 index 00000000..fbc083bf Binary files /dev/null and b/doctrees/instructors/setupcourses/export-lti.doctree differ diff --git a/doctrees/instructors/setupcourses/library/add-questions-from-library.doctree b/doctrees/instructors/setupcourses/library/add-questions-from-library.doctree new file mode 100644 index 00000000..2e816520 Binary files /dev/null and b/doctrees/instructors/setupcourses/library/add-questions-from-library.doctree differ diff --git a/doctrees/instructors/setupcourses/library/add-questions-to-library.doctree b/doctrees/instructors/setupcourses/library/add-questions-to-library.doctree new file mode 100644 index 00000000..c1b06d36 Binary files /dev/null and b/doctrees/instructors/setupcourses/library/add-questions-to-library.doctree differ diff --git a/doctrees/instructors/setupcourses/library/assessmentslibrary.doctree b/doctrees/instructors/setupcourses/library/assessmentslibrary.doctree new file mode 100644 index 00000000..80a3a48a Binary files /dev/null and b/doctrees/instructors/setupcourses/library/assessmentslibrary.doctree differ diff --git a/doctrees/instructors/setupcourses/library/global-library.doctree b/doctrees/instructors/setupcourses/library/global-library.doctree new file mode 100644 index 00000000..459c4651 Binary files /dev/null and b/doctrees/instructors/setupcourses/library/global-library.doctree differ diff --git a/doctrees/instructors/setupcourses/library/search-library.doctree b/doctrees/instructors/setupcourses/library/search-library.doctree new file mode 100644 index 00000000..92677852 Binary files /dev/null and b/doctrees/instructors/setupcourses/library/search-library.doctree differ diff --git a/doctrees/instructors/setupcourses/library/unlink-assessment.doctree b/doctrees/instructors/setupcourses/library/unlink-assessment.doctree new file mode 100644 index 00000000..5c11c90f Binary files /dev/null and b/doctrees/instructors/setupcourses/library/unlink-assessment.doctree differ diff --git a/doctrees/instructors/setupcourses/library/update-assess-from-library.doctree b/doctrees/instructors/setupcourses/library/update-assess-from-library.doctree new file mode 100644 index 00000000..7a61289a Binary files /dev/null and b/doctrees/instructors/setupcourses/library/update-assess-from-library.doctree differ diff --git a/doctrees/instructors/setupcourses/lmsconnect.doctree b/doctrees/instructors/setupcourses/lmsconnect.doctree new file mode 100644 index 00000000..80fcd291 Binary files /dev/null and b/doctrees/instructors/setupcourses/lmsconnect.doctree differ diff --git a/doctrees/instructors/setupcourses/mark-assignments-complete.doctree b/doctrees/instructors/setupcourses/mark-assignments-complete.doctree new file mode 100644 index 00000000..3308c4ed Binary files /dev/null and b/doctrees/instructors/setupcourses/mark-assignments-complete.doctree differ diff --git a/doctrees/instructors/setupcourses/modify-assignments.doctree b/doctrees/instructors/setupcourses/modify-assignments.doctree new file mode 100644 index 00000000..f8e2c2fc Binary files /dev/null and b/doctrees/instructors/setupcourses/modify-assignments.doctree differ diff --git a/doctrees/instructors/setupcourses/notification-email.doctree b/doctrees/instructors/setupcourses/notification-email.doctree new file mode 100644 index 00000000..72da12bd Binary files /dev/null and b/doctrees/instructors/setupcourses/notification-email.doctree differ diff --git a/doctrees/instructors/setupcourses/parent-child-courses.doctree b/doctrees/instructors/setupcourses/parent-child-courses.doctree new file mode 100644 index 00000000..a1ef24f0 Binary files /dev/null and b/doctrees/instructors/setupcourses/parent-child-courses.doctree differ diff --git a/doctrees/instructors/setupcourses/preview-course.doctree b/doctrees/instructors/setupcourses/preview-course.doctree new file mode 100644 index 00000000..8ab1a862 Binary files /dev/null and b/doctrees/instructors/setupcourses/preview-course.doctree differ diff --git a/doctrees/instructors/setupcourses/rename-course.doctree b/doctrees/instructors/setupcourses/rename-course.doctree new file mode 100644 index 00000000..605b779e Binary files /dev/null and b/doctrees/instructors/setupcourses/rename-course.doctree differ diff --git a/doctrees/instructors/setupcourses/rename-reorder-assignments.doctree b/doctrees/instructors/setupcourses/rename-reorder-assignments.doctree new file mode 100644 index 00000000..d99b5dd4 Binary files /dev/null and b/doctrees/instructors/setupcourses/rename-reorder-assignments.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/codioresources.doctree b/doctrees/instructors/setupcourses/resources/codioresources.doctree new file mode 100644 index 00000000..fdcfb351 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/codioresources.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/editingresources.doctree b/doctrees/instructors/setupcourses/resources/editingresources.doctree new file mode 100644 index 00000000..e3594f83 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/editingresources.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/crunch.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/crunch.doctree new file mode 100644 index 00000000..e2ca2a52 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/crunch.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/flode.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/flode.doctree new file mode 100644 index 00000000..8a433242 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/flode.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/jeroo.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/jeroo.doctree new file mode 100644 index 00000000..ab8fcdea Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/jeroo.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/lexikon.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/lexikon.doctree new file mode 100644 index 00000000..63e843c8 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/lexikon.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/pencilcode.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/pencilcode.doctree new file mode 100644 index 00000000..9531958e Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/pencilcode.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/processing-and-p5.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/processing-and-p5.doctree new file mode 100644 index 00000000..6d25ea16 Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/processing-and-p5.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/pyret.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/pyret.doctree new file mode 100644 index 00000000..f336df7e Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/pyret.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/scratch.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/scratch.doctree new file mode 100644 index 00000000..341a549d Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/scratch.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/tkinter.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/tkinter.doctree new file mode 100644 index 00000000..2bc5420d Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/tkinter.doctree differ diff --git a/doctrees/instructors/setupcourses/resources/resourcetools/turtle.doctree b/doctrees/instructors/setupcourses/resources/resourcetools/turtle.doctree new file mode 100644 index 00000000..bbd763db Binary files /dev/null and b/doctrees/instructors/setupcourses/resources/resourcetools/turtle.doctree differ diff --git a/doctrees/instructors/setupcourses/search-course.doctree b/doctrees/instructors/setupcourses/search-course.doctree new file mode 100644 index 00000000..81f7e651 Binary files /dev/null and b/doctrees/instructors/setupcourses/search-course.doctree differ diff --git a/doctrees/instructors/setupcourses/share-course.doctree b/doctrees/instructors/setupcourses/share-course.doctree new file mode 100644 index 00000000..70a68382 Binary files /dev/null and b/doctrees/instructors/setupcourses/share-course.doctree differ diff --git a/doctrees/instructors/setupcourses/view-student-username.doctree b/doctrees/instructors/setupcourses/view-student-username.doctree new file mode 100644 index 00000000..2e66bef9 Binary files /dev/null and b/doctrees/instructors/setupcourses/view-student-username.doctree differ diff --git a/doctrees/instructors/setupcourses/virtualmachine.doctree b/doctrees/instructors/setupcourses/virtualmachine.doctree new file mode 100644 index 00000000..934c8fa1 Binary files /dev/null and b/doctrees/instructors/setupcourses/virtualmachine.doctree differ diff --git a/doctrees/instructors/teaching/addstudents.doctree b/doctrees/instructors/teaching/addstudents.doctree new file mode 100644 index 00000000..de654468 Binary files /dev/null and b/doctrees/instructors/teaching/addstudents.doctree differ diff --git a/doctrees/instructors/teaching/behaviorinsights.doctree b/doctrees/instructors/teaching/behaviorinsights.doctree new file mode 100644 index 00000000..a17b8bb2 Binary files /dev/null and b/doctrees/instructors/teaching/behaviorinsights.doctree differ diff --git a/doctrees/instructors/teaching/commenting.doctree b/doctrees/instructors/teaching/commenting.doctree new file mode 100644 index 00000000..6c1bb55b Binary files /dev/null and b/doctrees/instructors/teaching/commenting.doctree differ diff --git a/doctrees/instructors/teaching/cursor.doctree b/doctrees/instructors/teaching/cursor.doctree new file mode 100644 index 00000000..194c1cd6 Binary files /dev/null and b/doctrees/instructors/teaching/cursor.doctree differ diff --git a/doctrees/instructors/teaching/grading/grade-freetext.doctree b/doctrees/instructors/teaching/grading/grade-freetext.doctree new file mode 100644 index 00000000..6fe263bb Binary files /dev/null and b/doctrees/instructors/teaching/grading/grade-freetext.doctree differ diff --git a/doctrees/instructors/teaching/grading/grading.doctree b/doctrees/instructors/teaching/grading/grading.doctree new file mode 100644 index 00000000..3cf19533 Binary files /dev/null and b/doctrees/instructors/teaching/grading/grading.doctree differ diff --git a/doctrees/instructors/teaching/grading/nbgrader.doctree b/doctrees/instructors/teaching/grading/nbgrader.doctree new file mode 100644 index 00000000..c90171ed Binary files /dev/null and b/doctrees/instructors/teaching/grading/nbgrader.doctree differ diff --git a/doctrees/instructors/teaching/grading/release-grades.doctree b/doctrees/instructors/teaching/grading/release-grades.doctree new file mode 100644 index 00000000..a4406cb7 Binary files /dev/null and b/doctrees/instructors/teaching/grading/release-grades.doctree differ diff --git a/doctrees/instructors/teaching/insights.doctree b/doctrees/instructors/teaching/insights.doctree new file mode 100644 index 00000000..408a6f3d Binary files /dev/null and b/doctrees/instructors/teaching/insights.doctree differ diff --git a/doctrees/instructors/teaching/plagiarism.doctree b/doctrees/instructors/teaching/plagiarism.doctree new file mode 100644 index 00000000..2a48b256 Binary files /dev/null and b/doctrees/instructors/teaching/plagiarism.doctree differ diff --git a/doctrees/instructors/teaching/playback.doctree b/doctrees/instructors/teaching/playback.doctree new file mode 100644 index 00000000..8b4aa62f Binary files /dev/null and b/doctrees/instructors/teaching/playback.doctree differ diff --git a/doctrees/instructors/teaching/remove.doctree b/doctrees/instructors/teaching/remove.doctree new file mode 100644 index 00000000..6a60eb8f Binary files /dev/null and b/doctrees/instructors/teaching/remove.doctree differ diff --git a/doctrees/instructors/teaching/resetpassword.doctree b/doctrees/instructors/teaching/resetpassword.doctree new file mode 100644 index 00000000..54ac227c Binary files /dev/null and b/doctrees/instructors/teaching/resetpassword.doctree differ diff --git a/doctrees/instructors/teaching/viewstudentwork.doctree b/doctrees/instructors/teaching/viewstudentwork.doctree new file mode 100644 index 00000000..0cff38a4 Binary files /dev/null and b/doctrees/instructors/teaching/viewstudentwork.doctree differ diff --git a/doctrees/setupcourses.doctree b/doctrees/setupcourses.doctree new file mode 100644 index 00000000..baccc659 Binary files /dev/null and b/doctrees/setupcourses.doctree differ diff --git a/doctrees/student.doctree b/doctrees/student.doctree new file mode 100644 index 00000000..84076067 Binary files /dev/null and b/doctrees/student.doctree differ diff --git a/doctrees/students/accessing-codio/accessing-codio.doctree b/doctrees/students/accessing-codio/accessing-codio.doctree new file mode 100644 index 00000000..9006a7b0 Binary files /dev/null and b/doctrees/students/accessing-codio/accessing-codio.doctree differ diff --git a/doctrees/students/accessing-codio/faq.doctree b/doctrees/students/accessing-codio/faq.doctree new file mode 100644 index 00000000..376d97bd Binary files /dev/null and b/doctrees/students/accessing-codio/faq.doctree differ diff --git a/doctrees/students/accessing-codio/joining.doctree b/doctrees/students/accessing-codio/joining.doctree new file mode 100644 index 00000000..c5d78130 Binary files /dev/null and b/doctrees/students/accessing-codio/joining.doctree differ diff --git a/doctrees/students/accessing-codio/paying.doctree b/doctrees/students/accessing-codio/paying.doctree new file mode 100644 index 00000000..ba2de01c Binary files /dev/null and b/doctrees/students/accessing-codio/paying.doctree differ diff --git a/doctrees/students/courses/accessing.doctree b/doctrees/students/courses/accessing.doctree new file mode 100644 index 00000000..d106eb8b Binary files /dev/null and b/doctrees/students/courses/accessing.doctree differ diff --git a/doctrees/students/courses/audio-video.doctree b/doctrees/students/courses/audio-video.doctree new file mode 100644 index 00000000..ebf301ac Binary files /dev/null and b/doctrees/students/courses/audio-video.doctree differ diff --git a/doctrees/students/courses/complete-assignment.doctree b/doctrees/students/courses/complete-assignment.doctree new file mode 100644 index 00000000..36079d5c Binary files /dev/null and b/doctrees/students/courses/complete-assignment.doctree differ diff --git a/doctrees/students/courses/courses.doctree b/doctrees/students/courses/courses.doctree new file mode 100644 index 00000000..7f408a30 Binary files /dev/null and b/doctrees/students/courses/courses.doctree differ diff --git a/doctrees/students/courses/exam-mode.doctree b/doctrees/students/courses/exam-mode.doctree new file mode 100644 index 00000000..7ff8ffae Binary files /dev/null and b/doctrees/students/courses/exam-mode.doctree differ diff --git a/doctrees/students/courses/navigate-student-dashboard.doctree b/doctrees/students/courses/navigate-student-dashboard.doctree new file mode 100644 index 00000000..eb7eec6a Binary files /dev/null and b/doctrees/students/courses/navigate-student-dashboard.doctree differ diff --git a/doctrees/students/courses/pair-programming.doctree b/doctrees/students/courses/pair-programming.doctree new file mode 100644 index 00000000..9fc900ad Binary files /dev/null and b/doctrees/students/courses/pair-programming.doctree differ diff --git a/doctrees/students/courses/play-mode.doctree b/doctrees/students/courses/play-mode.doctree new file mode 100644 index 00000000..02f64938 Binary files /dev/null and b/doctrees/students/courses/play-mode.doctree differ diff --git a/doctrees/students/courses/restore-files.doctree b/doctrees/students/courses/restore-files.doctree new file mode 100644 index 00000000..a7562f1f Binary files /dev/null and b/doctrees/students/courses/restore-files.doctree differ diff --git a/doctrees/students/courses/start-assignment.doctree b/doctrees/students/courses/start-assignment.doctree new file mode 100644 index 00000000..45c9a41d Binary files /dev/null and b/doctrees/students/courses/start-assignment.doctree differ diff --git a/doctrees/students/courses/usingguides.doctree b/doctrees/students/courses/usingguides.doctree new file mode 100644 index 00000000..0f7d0094 Binary files /dev/null and b/doctrees/students/courses/usingguides.doctree differ diff --git a/doctrees/students/courses/view-grade.doctree b/doctrees/students/courses/view-grade.doctree new file mode 100644 index 00000000..80dc695b Binary files /dev/null and b/doctrees/students/courses/view-grade.doctree differ diff --git a/doctrees/teaching.doctree b/doctrees/teaching.doctree new file mode 100644 index 00000000..dbea76ea Binary files /dev/null and b/doctrees/teaching.doctree differ diff --git a/doctrees/tools.doctree b/doctrees/tools.doctree new file mode 100644 index 00000000..0d264714 Binary files /dev/null and b/doctrees/tools.doctree differ