@ueu/ueu-canvas 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Account.d.ts +22 -0
- package/dist/Account.d.ts.map +1 -0
- package/dist/NotImplementedException.d.ts +4 -0
- package/dist/NotImplementedException.d.ts.map +1 -0
- package/dist/__mocks__/Account.d.ts +17 -0
- package/dist/__mocks__/Account.d.ts.map +1 -0
- package/dist/__mocks__/index.d.ts +9 -0
- package/dist/__mocks__/index.d.ts.map +1 -0
- package/dist/__mocks__/mockAccountData.d.ts +6 -0
- package/dist/__mocks__/mockAccountData.d.ts.map +1 -0
- package/dist/__mocks__/mockEnrollment.d.ts +3 -0
- package/dist/__mocks__/mockEnrollment.d.ts.map +1 -0
- package/dist/__mocks__/mockRubricData.d.ts +20 -0
- package/dist/__mocks__/mockRubricData.d.ts.map +1 -0
- package/dist/__mocks__/mockTabData.d.ts +4 -0
- package/dist/__mocks__/mockTabData.d.ts.map +1 -0
- package/dist/__mocks__/mockTermData.d.ts +3 -0
- package/dist/__mocks__/mockTermData.d.ts.map +1 -0
- package/dist/__mocks__/mockUserData.d.ts +3 -0
- package/dist/__mocks__/mockUserData.d.ts.map +1 -0
- package/dist/__mocks__/utils.d.ts +3 -0
- package/dist/__mocks__/utils.d.ts.map +1 -0
- package/dist/__tests__/canvasUtils.test.d.ts +2 -0
- package/dist/__tests__/canvasUtils.test.d.ts.map +1 -0
- package/dist/__tests__/fetch.test.d.ts +2 -0
- package/dist/__tests__/fetch.test.d.ts.map +1 -0
- package/dist/__tests__/profile.test.d.ts +2 -0
- package/dist/__tests__/profile.test.d.ts.map +1 -0
- package/dist/__tests__/rubrics.test.d.ts +2 -0
- package/dist/__tests__/rubrics.test.d.ts.map +1 -0
- package/dist/baseCanvasObject.d.ts +41 -0
- package/dist/baseCanvasObject.d.ts.map +1 -0
- package/dist/canvasDataDefs.d.ts +97 -0
- package/dist/canvasDataDefs.d.ts.map +1 -0
- package/dist/canvasUtils.d.ts +65 -0
- package/dist/canvasUtils.d.ts.map +1 -0
- package/dist/consts.d.ts +3 -0
- package/dist/consts.d.ts.map +1 -0
- package/dist/content/BaseContentItem.d.ts +32 -0
- package/dist/content/BaseContentItem.d.ts.map +1 -0
- package/dist/content/ContentKind.d.ts +28 -0
- package/dist/content/ContentKind.d.ts.map +1 -0
- package/dist/content/__mocks__/determineContent.d.ts +65 -0
- package/dist/content/__mocks__/determineContent.d.ts.map +1 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts +4 -0
- package/dist/content/__mocks__/mockAssignmentSubmission.d.ts.map +1 -0
- package/dist/content/__mocks__/mockContentData.d.ts +8 -0
- package/dist/content/__mocks__/mockContentData.d.ts.map +1 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts +3 -0
- package/dist/content/__mocks__/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/__testingUtils__/utils.d.ts +6 -0
- package/dist/content/__testingUtils__/utils.d.ts.map +1 -0
- package/dist/content/__tests__/determineContent.test.d.ts +2 -0
- package/dist/content/__tests__/determineContent.test.d.ts.map +1 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts +2 -0
- package/dist/content/__tests__/getContentFuncs.test.d.ts.map +1 -0
- package/dist/content/assignments/Assignment.d.ts +15 -0
- package/dist/content/assignments/Assignment.d.ts.map +1 -0
- package/dist/content/assignments/AssignmentKind.d.ts +14 -0
- package/dist/content/assignments/AssignmentKind.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/AssignmentKind.test.d.ts.map +1 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts +2 -0
- package/dist/content/assignments/__tests__/assignments.test.d.ts.map +1 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts +3 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts.map +1 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts +5 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts.map +1 -0
- package/dist/content/assignments/index.d.ts +11 -0
- package/dist/content/assignments/index.d.ts.map +1 -0
- package/dist/content/assignments/legacy.d.ts +4 -0
- package/dist/content/assignments/legacy.d.ts.map +1 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts +7 -0
- package/dist/content/assignments/updateAssignmentDueDates.d.ts.map +1 -0
- package/dist/content/determineContent.d.ts +19 -0
- package/dist/content/determineContent.d.ts.map +1 -0
- package/dist/content/discussions/Discussion.d.ts +13 -0
- package/dist/content/discussions/Discussion.d.ts.map +1 -0
- package/dist/content/discussions/DiscussionKind.d.ts +14 -0
- package/dist/content/discussions/DiscussionKind.d.ts.map +1 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts +2 -0
- package/dist/content/discussions/__tests__/DiscussionKind.test.d.ts.map +1 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts +32 -0
- package/dist/content/discussions/genEquivalentDiscussionData.d.ts.map +1 -0
- package/{src/content/discussions/index.ts → dist/content/discussions/index.d.ts} +1 -0
- package/dist/content/discussions/index.d.ts.map +1 -0
- package/dist/content/getContentFuncs.d.ts +3 -0
- package/dist/content/getContentFuncs.d.ts.map +1 -0
- package/{src/content/index.ts → dist/content/index.d.ts} +3 -3
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/openThisContentInTarget.d.ts +4 -0
- package/dist/content/openThisContentInTarget.d.ts.map +1 -0
- package/dist/content/pages/Page.d.ts +15 -0
- package/dist/content/pages/Page.d.ts.map +1 -0
- package/dist/content/pages/PageKind.d.ts +15 -0
- package/dist/content/pages/PageKind.d.ts.map +1 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts +2 -0
- package/dist/content/pages/__tests__/PageKind.test.d.ts.map +1 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts +2 -0
- package/dist/content/pages/__tests__/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/index.d.ts +14 -0
- package/dist/content/pages/index.d.ts.map +1 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts +7 -0
- package/dist/content/pages/learningMaterialsForModule.d.ts.map +1 -0
- package/dist/content/pages/types.d.ts +11 -0
- package/dist/content/pages/types.d.ts.map +1 -0
- package/dist/content/quizzes/Quiz.d.ts +9 -0
- package/dist/content/quizzes/Quiz.d.ts.map +1 -0
- package/dist/content/quizzes/QuizKind.d.ts +13 -0
- package/dist/content/quizzes/QuizKind.d.ts.map +1 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts +2 -0
- package/dist/content/quizzes/__tests__/QuizKind.test.d.ts.map +1 -0
- package/dist/content/quizzes/index.d.ts +2 -0
- package/dist/content/quizzes/index.d.ts.map +1 -0
- package/dist/content/quizzes/types.d.ts +45 -0
- package/dist/content/quizzes/types.d.ts.map +1 -0
- package/dist/content/types.d.ts +229 -0
- package/dist/content/types.d.ts.map +1 -0
- package/dist/course/Course.d.ts +87 -0
- package/dist/course/Course.d.ts.map +1 -0
- package/dist/course/IBlueprintCourse.d.ts +7 -0
- package/dist/course/IBlueprintCourse.d.ts.map +1 -0
- package/dist/course/__mocks__/blueprint.d.ts +14 -0
- package/dist/course/__mocks__/blueprint.d.ts.map +1 -0
- package/dist/course/__mocks__/mockCourseData.d.ts +3 -0
- package/dist/course/__mocks__/mockCourseData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts +4 -0
- package/dist/course/__mocks__/mockLatePolicy.d.ts.map +1 -0
- package/dist/course/__mocks__/mockModuleData.d.ts +7 -0
- package/dist/course/__mocks__/mockModuleData.d.ts.map +1 -0
- package/dist/course/__mocks__/mockProgressData.d.ts +3 -0
- package/dist/course/__mocks__/mockProgressData.d.ts.map +1 -0
- package/dist/course/__tests__/Course.test.d.ts +2 -0
- package/dist/course/__tests__/Course.test.d.ts.map +1 -0
- package/dist/course/__tests__/blueprint.test.d.ts +2 -0
- package/dist/course/__tests__/blueprint.test.d.ts.map +1 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts +2 -0
- package/dist/course/__tests__/changeStartDate.test.d.ts.map +1 -0
- package/dist/course/__tests__/index.test.d.ts +2 -0
- package/dist/course/__tests__/index.test.d.ts.map +1 -0
- package/dist/course/blueprint.d.ts +21 -0
- package/dist/course/blueprint.d.ts.map +1 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts +4 -0
- package/dist/course/cachedGetAssociatedCoursesFunc.d.ts.map +1 -0
- package/dist/course/changeStartDate.d.ts +25 -0
- package/dist/course/changeStartDate.d.ts.map +1 -0
- package/dist/course/code.d.ts +9 -0
- package/dist/course/code.d.ts.map +1 -0
- package/dist/course/courseTypes.d.ts +102 -0
- package/dist/course/courseTypes.d.ts.map +1 -0
- package/dist/course/getCourseIdFromUrl.d.ts +3 -0
- package/dist/course/getCourseIdFromUrl.d.ts.map +1 -0
- package/dist/course/getSections.d.ts +5 -0
- package/dist/course/getSections.d.ts.map +1 -0
- package/dist/course/getTermNameFromSections.d.ts +3 -0
- package/dist/course/getTermNameFromSections.d.ts.map +1 -0
- package/dist/course/index.d.ts +12 -0
- package/dist/course/index.d.ts.map +1 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts +6 -0
- package/dist/course/migration/__mocks__/mockMigrationData.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migration.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migration.test.d.ts.map +1 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts +2 -0
- package/dist/course/migration/__tests__/migrationCache.test.d.ts.map +1 -0
- package/dist/course/migration/index.d.ts +47 -0
- package/dist/course/migration/index.d.ts.map +1 -0
- package/dist/course/migration/migrationCache.d.ts +12 -0
- package/dist/course/migration/migrationCache.d.ts.map +1 -0
- package/dist/course/modules.d.ts +35 -0
- package/dist/course/modules.d.ts.map +1 -0
- package/dist/course/notABlueprintError.d.ts +4 -0
- package/dist/course/notABlueprintError.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.d.ts +4 -0
- package/dist/course/references/getReferencesForText.d.ts.map +1 -0
- package/dist/course/references/getReferencesForText.test.d.ts +2 -0
- package/dist/course/references/getReferencesForText.test.d.ts.map +1 -0
- package/dist/course/references/getReferencesTemplate.d.ts +13 -0
- package/dist/course/references/getReferencesTemplate.d.ts.map +1 -0
- package/dist/course/references/mockCiteAsResponse.d.ts +127 -0
- package/dist/course/references/mockCiteAsResponse.d.ts.map +1 -0
- package/dist/course/retireBlueprint.d.ts +4 -0
- package/dist/course/retireBlueprint.d.ts.map +1 -0
- package/dist/course/toolbox.d.ts +18 -0
- package/dist/course/toolbox.d.ts.map +1 -0
- package/dist/date.d.ts +18 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/enrollments/EnrollmentTypes.d.ts +60 -0
- package/dist/enrollments/EnrollmentTypes.d.ts.map +1 -0
- package/dist/enrollments/enrollmentRole.d.ts +5 -0
- package/dist/enrollments/enrollmentRole.d.ts.map +1 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts +40 -0
- package/dist/enrollments/getEnrollmentGenerator.d.ts.map +1 -0
- package/dist/enrollments/index.d.ts +4 -0
- package/dist/enrollments/index.d.ts.map +1 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts +4 -0
- package/dist/fetch/__mocks__/fetchJson.d.ts.map +1 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts +4 -0
- package/dist/fetch/__mocks__/getPagedDataGenerator.d.ts.map +1 -0
- package/dist/fetch/__mocks__/index.d.ts +4 -0
- package/dist/fetch/__mocks__/index.d.ts.map +1 -0
- package/dist/fetch/apiGetConfig.d.ts +4 -0
- package/dist/fetch/apiGetConfig.d.ts.map +1 -0
- package/dist/fetch/apiWriteConfig.d.ts +4 -0
- package/dist/fetch/apiWriteConfig.d.ts.map +1 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts +6 -0
- package/dist/fetch/canvasDataFetchGenFunc.d.ts.map +1 -0
- package/dist/fetch/fetchJson.d.ts +3 -0
- package/dist/fetch/fetchJson.d.ts.map +1 -0
- package/dist/fetch/getPagedDataGenerator.d.ts +63 -0
- package/dist/fetch/getPagedDataGenerator.d.ts.map +1 -0
- package/{src/fetch/index.ts → dist/fetch/index.d.ts} +1 -0
- package/dist/fetch/index.d.ts.map +1 -0
- package/dist/fetch/utils.d.ts +4 -0
- package/dist/fetch/utils.d.ts.map +1 -0
- package/dist/files.d.ts +29 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/fixes/annotations.d.ts +15 -0
- package/dist/fixes/annotations.d.ts.map +1 -0
- package/dist/fixes/index.d.ts +36 -0
- package/dist/fixes/index.d.ts.map +1 -0
- package/{src/index.ts → dist/index.d.ts} +5 -10
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8966 -0
- package/dist/profile.d.ts +24 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/rubricTypes.d.ts +71 -0
- package/dist/rubricTypes.d.ts.map +1 -0
- package/dist/rubrics.d.ts +9 -0
- package/dist/rubrics.d.ts.map +1 -0
- package/dist/term/Term.d.ts +21 -0
- package/dist/term/Term.d.ts.map +1 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts +2 -0
- package/dist/term/__tests__/dateFromTermName.test.d.ts.map +1 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts +2 -0
- package/dist/term/__tests__/getTermsGenerator.test.d.ts.map +1 -0
- package/dist/term/dateFromTermName.d.ts +4 -0
- package/dist/term/dateFromTermName.d.ts.map +1 -0
- package/dist/term/getTermsGenerator.d.ts +7 -0
- package/dist/term/getTermsGenerator.d.ts.map +1 -0
- package/dist/term/index.d.ts +4 -0
- package/dist/term/index.d.ts.map +1 -0
- package/dist/toolbox.d.ts +5 -0
- package/dist/toolbox.d.ts.map +1 -0
- package/dist/types.d.ts +120 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/users/getUserGenerator.d.ts +19 -0
- package/dist/users/getUserGenerator.d.ts.map +1 -0
- package/dist/users/index.d.ts +2 -0
- package/dist/users/index.d.ts.map +1 -0
- package/package.json +51 -45
- package/LICENSE +0 -21
- package/html-loader.js +0 -7
- package/jest.config.js +0 -20
- package/src/Account.ts +0 -69
- package/src/NotImplementedException.ts +0 -3
- package/src/__mocks__/Account.ts +0 -55
- package/src/__mocks__/index.ts +0 -8
- package/src/__mocks__/mockAccountData.ts +0 -43
- package/src/__mocks__/mockEnrollment.ts +0 -22
- package/src/__mocks__/mockRubricData.ts +0 -71
- package/src/__mocks__/mockTabData.ts +0 -13
- package/src/__mocks__/mockTermData.ts +0 -7
- package/src/__mocks__/mockUserData.ts +0 -14
- package/src/__mocks__/utils.ts +0 -9
- package/src/__tests__/canvasUtils.test.ts +0 -527
- package/src/__tests__/fetch.test.ts +0 -310
- package/src/__tests__/profile.test.ts +0 -19
- package/src/__tests__/rubrics.test.ts +0 -131
- package/src/baseCanvasObject.ts +0 -139
- package/src/canvasDataDefs.ts +0 -124
- package/src/canvasUtils.ts +0 -420
- package/src/consts.ts +0 -2
- package/src/content/BaseContentItem.ts +0 -219
- package/src/content/ContentKind.ts +0 -85
- package/src/content/__mocks__/determineContent.ts +0 -27
- package/src/content/__mocks__/mockAssignmentSubmission.ts +0 -37
- package/src/content/__mocks__/mockContentData.ts +0 -98
- package/src/content/__mocks__/openThisContentInTarget.ts +0 -2
- package/src/content/__testingUtils__/utils.ts +0 -47
- package/src/content/__tests__/determineContent.test.ts +0 -101
- package/src/content/__tests__/getContentFuncs.test.ts +0 -78
- package/src/content/assignments/Assignment.ts +0 -69
- package/src/content/assignments/AssignmentKind.ts +0 -29
- package/src/content/assignments/__tests__/AssignmentKind.test.ts +0 -31
- package/src/content/assignments/__tests__/assignments.test.ts +0 -72
- package/src/content/assignments/deleteAssignmentGroup.ts +0 -15
- package/src/content/assignments/genAssignmentGroups.ts +0 -15
- package/src/content/assignments/index.ts +0 -31
- package/src/content/assignments/legacy.ts +0 -11
- package/src/content/assignments/updateAssignmentDueDates.ts +0 -25
- package/src/content/determineContent.ts +0 -72
- package/src/content/discussions/Discussion.ts +0 -32
- package/src/content/discussions/DiscussionKind.ts +0 -30
- package/src/content/discussions/__tests__/DiscussionKind.test.ts +0 -31
- package/src/content/discussions/genEquivalentDiscussionData.ts +0 -97
- package/src/content/getContentFuncs.ts +0 -30
- package/src/content/openThisContentInTarget.ts +0 -38
- package/src/content/pages/Page.ts +0 -35
- package/src/content/pages/PageKind.ts +0 -39
- package/src/content/pages/__tests__/PageKind.test.ts +0 -86
- package/src/content/pages/__tests__/learningMaterialsForModule.ts +0 -57
- package/src/content/pages/index.ts +0 -12
- package/src/content/pages/learningMaterialsForModule.ts +0 -16
- package/src/content/pages/types.ts +0 -11
- package/src/content/quizzes/Quiz.ts +0 -25
- package/src/content/quizzes/QuizKind.ts +0 -23
- package/src/content/quizzes/__tests__/QuizKind.test.ts +0 -30
- package/src/content/quizzes/index.ts +0 -3
- package/src/content/quizzes/types.ts +0 -101
- package/src/content/types.ts +0 -302
- package/src/course/Course.ts +0 -538
- package/src/course/IBlueprintCourse.ts +0 -8
- package/src/course/__mocks__/blueprint.ts +0 -31
- package/src/course/__mocks__/mockCourseData.ts +0 -49
- package/src/course/__mocks__/mockLatePolicy.ts +0 -14
- package/src/course/__mocks__/mockModuleData.ts +0 -60
- package/src/course/__mocks__/mockProgressData.ts +0 -28
- package/src/course/__mocks__/syllabus.gallant.html +0 -302
- package/src/course/__mocks__/syllabus.goofus.html +0 -288
- package/src/course/__mocks__/syllabus.grad.html +0 -282
- package/src/course/__tests__/Course.test.ts +0 -91
- package/src/course/__tests__/blueprint.test.ts +0 -292
- package/src/course/__tests__/changeStartDate.test.ts +0 -180
- package/src/course/__tests__/index.test.ts +0 -104
- package/src/course/blueprint.ts +0 -116
- package/src/course/cachedGetAssociatedCoursesFunc.ts +0 -13
- package/src/course/changeStartDate.ts +0 -139
- package/src/course/code.ts +0 -32
- package/src/course/courseTypes.ts +0 -161
- package/src/course/getCourseIdFromUrl.ts +0 -7
- package/src/course/getSections.ts +0 -9
- package/src/course/getTermNameFromSections.ts +0 -9
- package/src/course/index.ts +0 -12
- package/src/course/migration/__mocks__/mockMigrationData.ts +0 -39
- package/src/course/migration/__tests__/migration.test.ts +0 -173
- package/src/course/migration/__tests__/migrationCache.test.ts +0 -45
- package/src/course/migration/index.ts +0 -134
- package/src/course/migration/migrationCache.ts +0 -56
- package/src/course/modules.ts +0 -113
- package/src/course/notABlueprintError.ts +0 -3
- package/src/course/references/getReferencesForText.test.ts +0 -18
- package/src/course/references/getReferencesForText.ts +0 -12
- package/src/course/references/getReferencesTemplate.ts +0 -28
- package/src/course/references/mockCiteAsResponse.ts +0 -320
- package/src/course/retireBlueprint.ts +0 -21
- package/src/course/toolbox.ts +0 -107
- package/src/date.ts +0 -119
- package/src/enrollments/EnrollmentTypes.ts +0 -76
- package/src/enrollments/enrollmentRole.ts +0 -6
- package/src/enrollments/getEnrollmentGenerator.ts +0 -79
- package/src/enrollments/index.ts +0 -3
- package/src/fetch/__mocks__/fetchJson.ts +0 -1
- package/src/fetch/__mocks__/getPagedDataGenerator.ts +0 -8
- package/src/fetch/__mocks__/index.ts +0 -6
- package/src/fetch/apiGetConfig.ts +0 -10
- package/src/fetch/apiWriteConfig.ts +0 -13
- package/src/fetch/canvasDataFetchGenFunc.ts +0 -20
- package/src/fetch/fetchJson.ts +0 -22
- package/src/fetch/getPagedDataGenerator.ts +0 -157
- package/src/fetch/utils.ts +0 -16
- package/src/files.ts +0 -60
- package/src/fixes/annotations.ts +0 -105
- package/src/fixes/index.ts +0 -81
- package/src/profile.ts +0 -253
- package/src/rubricTypes.ts +0 -82
- package/src/rubrics.ts +0 -48
- package/src/term/Term.ts +0 -77
- package/src/term/__tests__/dateFromTermName.test.ts +0 -22
- package/src/term/__tests__/getTermsGenerator.test.ts +0 -24
- package/src/term/dateFromTermName.ts +0 -17
- package/src/term/getTermsGenerator.ts +0 -21
- package/src/term/index.ts +0 -3
- package/src/toolbox.ts +0 -19
- package/src/types.ts +0 -134
- package/src/users/getUserGenerator.ts +0 -39
- package/src/users/index.ts +0 -1
- package/tsconfig.json +0 -46
- package/webpack.config.js +0 -122
package/src/course/Course.ts
DELETED
|
@@ -1,538 +0,0 @@
|
|
|
1
|
-
import {BaseCanvasObject} from "../baseCanvasObject";
|
|
2
|
-
import {
|
|
3
|
-
ILatePolicyData,
|
|
4
|
-
IModuleData,
|
|
5
|
-
IModuleItemData,
|
|
6
|
-
IUserData,
|
|
7
|
-
ModuleItemType
|
|
8
|
-
} from "../canvasDataDefs";
|
|
9
|
-
import {
|
|
10
|
-
GetCourseOptions,
|
|
11
|
-
IContentHaver,
|
|
12
|
-
ICourseCodeHaver,
|
|
13
|
-
ICourseDataHaver,
|
|
14
|
-
ICourseSettingsHaver,
|
|
15
|
-
IGradingStandardData,
|
|
16
|
-
IGradingStandardsHaver,
|
|
17
|
-
ILatePolicyHaver,
|
|
18
|
-
IModulesHaver
|
|
19
|
-
} from "./courseTypes";
|
|
20
|
-
import {isBlueprint} from "./blueprint";
|
|
21
|
-
import {filterUniqueFunc, formDataify, ICanvasCallConfig, renderAsyncGen} from "../canvasUtils";
|
|
22
|
-
import {getModuleUnlockStartDate} from "./changeStartDate";
|
|
23
|
-
import {getModuleOverview, getModulesByWeekNumber, getModuleWeekNumber, moduleGenerator} from "./modules";
|
|
24
|
-
import {uploadFile} from "../files";
|
|
25
|
-
import {getCurioPageFrontPageProfile, getPotentialFacultyProfiles} from "../profile";
|
|
26
|
-
import {getCourseById, getCourseData, getGradingStandards, getSingleCourse} from "./toolbox";
|
|
27
|
-
import {assignmentDataGen} from "@/content/assignments";
|
|
28
|
-
import {baseCourseCode, parseCourseCode} from "@/course/code";
|
|
29
|
-
import {Term} from "@/term/Term";
|
|
30
|
-
|
|
31
|
-
import {ICourseData, ICourseSettings, IProfile, IProfileWithUser, ITabData} from "@/types";
|
|
32
|
-
import {getPagedData} from "@/fetch/getPagedDataGenerator";
|
|
33
|
-
import {fetchGetConfig, overrideConfig} from "@/fetch/utils";
|
|
34
|
-
import {fetchJson} from "@/fetch/fetchJson";
|
|
35
|
-
import {BaseContentItem, getBannerImage} from "@/content/BaseContentItem";
|
|
36
|
-
import getCourseIdFromUrl from "@/course/getCourseIdFromUrl";
|
|
37
|
-
import {Quiz} from "@/content/quizzes/Quiz";
|
|
38
|
-
import {Page} from "@/content/pages/Page";
|
|
39
|
-
import {Discussion} from "@/content/discussions/Discussion";
|
|
40
|
-
import {Assignment} from "@/content/assignments/Assignment";
|
|
41
|
-
import {IPageData} from "@/content/pages/types";
|
|
42
|
-
import ApiWriteConfig from "@/fetch/apiGetConfig";
|
|
43
|
-
import {IAssignmentGroup} from "@canvas/content/types";
|
|
44
|
-
import {IBlueprintCourse} from "@canvas/course/IBlueprintCourse";
|
|
45
|
-
import {cachedGetAssociatedCoursesFunc} from "@canvas/course/cachedGetAssociatedCoursesFunc";
|
|
46
|
-
import assert from "assert";
|
|
47
|
-
|
|
48
|
-
const HOMETILE_WIDTH = 500;
|
|
49
|
-
|
|
50
|
-
export const COURSE_CODE_REGEX = /^(.+[^_])?_?(\w{4}\d{3})/i;
|
|
51
|
-
|
|
52
|
-
export class Course extends BaseCanvasObject<ICourseData> implements IContentHaver,
|
|
53
|
-
ICourseDataHaver,
|
|
54
|
-
ICourseSettingsHaver,
|
|
55
|
-
IGradingStandardsHaver,
|
|
56
|
-
ILatePolicyHaver,
|
|
57
|
-
IBlueprintCourse,
|
|
58
|
-
ICourseCodeHaver,
|
|
59
|
-
IModulesHaver {
|
|
60
|
-
static nameProperty = 'name';
|
|
61
|
-
private _modules: IModuleData[] | undefined = undefined;
|
|
62
|
-
private modulesByWeekNumber: Record<string | number, IModuleData> | undefined = undefined;
|
|
63
|
-
private static contentClasses: (typeof BaseContentItem)[] = [Assignment, Discussion, Quiz, Page];
|
|
64
|
-
|
|
65
|
-
isBlueprint: () => boolean;
|
|
66
|
-
getAssociatedCourses: (redownload?: boolean) => Promise<Course[]>;
|
|
67
|
-
|
|
68
|
-
constructor(data: ICourseData) {
|
|
69
|
-
console.warn("Course is being deprecated");
|
|
70
|
-
super(data);
|
|
71
|
-
this.isBlueprint = (() => isBlueprint(data));
|
|
72
|
-
this.getAssociatedCourses = cachedGetAssociatedCoursesFunc(this)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
static async getFromUrl(url: string | null = null) {
|
|
76
|
-
if (url === null) {
|
|
77
|
-
url = document.documentURI;
|
|
78
|
-
}
|
|
79
|
-
const match = /courses\/(\d+)/.exec(url);
|
|
80
|
-
if (match) {
|
|
81
|
-
|
|
82
|
-
const id = getCourseIdFromUrl(url);
|
|
83
|
-
if (!id) return null;
|
|
84
|
-
return getCourseById(id);
|
|
85
|
-
}
|
|
86
|
-
return null;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
static async getCourseById(courseId: number, config: ICanvasCallConfig<GetCourseOptions> | undefined = undefined) {
|
|
91
|
-
const data = await getCourseData(courseId, config);
|
|
92
|
-
return new Course(data);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
static async publishAll(courses: number[] | Course[], accountId: number) {
|
|
96
|
-
|
|
97
|
-
if (courses.length == 0) return false;
|
|
98
|
-
const courseIds = courses.map((course) => {
|
|
99
|
-
if (course instanceof Course) {
|
|
100
|
-
return course.id;
|
|
101
|
-
}
|
|
102
|
-
return course;
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
const url = `/api/v1/accounts/${accountId}/courses`;
|
|
106
|
-
const data = {
|
|
107
|
-
'event': 'offer',
|
|
108
|
-
'course_ids': courseIds,
|
|
109
|
-
}
|
|
110
|
-
return await fetchJson(url, {
|
|
111
|
-
fetchInit: {
|
|
112
|
-
method: 'PUT',
|
|
113
|
-
body: formDataify(data),
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
get contentUrlPath() {
|
|
121
|
-
return `/api/v1/courses/${this.id}`;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
get courseUrl() {
|
|
125
|
-
return this.htmlContentUrl;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
get htmlContentUrl() {
|
|
129
|
-
return `/courses/${this.id}`
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
get parsedCourseCode(): null | string {
|
|
133
|
-
return parseCourseCode(this.canvasData.course_code);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
get courseCode(): null | string {
|
|
137
|
-
return this.canvasData.course_code
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
get baseCode() {
|
|
141
|
-
return baseCourseCode(this.canvasData.course_code);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
get termId(): number | null {
|
|
145
|
-
const id = (this.canvasData as ICourseData).enrollment_term_id;
|
|
146
|
-
if (typeof id === 'number') return id;
|
|
147
|
-
else return id[0];
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
async getTerm(): Promise<Term | null> {
|
|
151
|
-
assert(typeof this.termId === 'number')
|
|
152
|
-
|
|
153
|
-
if (this.termId) return Term.getTermById(this.termId)
|
|
154
|
-
else return null;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
get fileUploadUrl() {
|
|
158
|
-
|
|
159
|
-
return `/api/v1/courses/${this.id}/files`;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
get codePrefix() {
|
|
163
|
-
const match = COURSE_CODE_REGEX.exec(this.rawData.course_code);
|
|
164
|
-
return match ? match[1] : '';
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
get workflowState() {
|
|
168
|
-
return this.canvasData.workflow_state
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
get isDev() {
|
|
172
|
-
return !!this.name.match(/^DEV/);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
get rootAccountId() {
|
|
177
|
-
return this.canvasData.root_account_id;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
get accountId() {
|
|
181
|
-
return this.canvasData.account_id;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
async getModules(config?: ICanvasCallConfig): Promise<IModuleData[]> {
|
|
186
|
-
if (this._modules) {
|
|
187
|
-
return this._modules;
|
|
188
|
-
}
|
|
189
|
-
const modules = await renderAsyncGen(moduleGenerator(this.id, {
|
|
190
|
-
queryParams: {
|
|
191
|
-
include: ['items', 'content_details']
|
|
192
|
-
}
|
|
193
|
-
}));
|
|
194
|
-
this._modules = modules;
|
|
195
|
-
return modules;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
async getStartDateFromModules() {
|
|
199
|
-
return getModuleUnlockStartDate(await this.getModules());
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
async getInstructors(): Promise<IUserData[] | null> {
|
|
203
|
-
return await fetchJson(`/api/v1/courses/${this.id}/users?enrollment_type=teacher`) as IUserData[];
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
async getLatePolicy(this: { id: number }, config?: ICanvasCallConfig) {
|
|
207
|
-
const latePolicyResult = await fetchJson(`/api/v1/courses/${this.id}/late_policy`, config);
|
|
208
|
-
if ('late_policy' in latePolicyResult) return latePolicyResult.late_policy as ILatePolicyData;
|
|
209
|
-
return undefined;
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
async getAvailableGradingStandards(config?: ICanvasCallConfig | undefined): Promise<IGradingStandardData[]> {
|
|
214
|
-
let out: IGradingStandardData[] = [];
|
|
215
|
-
console.log(this.name)
|
|
216
|
-
const {id, account_id, root_account_id} = this.canvasData;
|
|
217
|
-
|
|
218
|
-
try {
|
|
219
|
-
if (id) {
|
|
220
|
-
const courseGradingStandards = await getGradingStandards(id, "course", config);
|
|
221
|
-
out = [...out, ...courseGradingStandards];
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
if (account_id) {
|
|
225
|
-
const accountGradingStandards = await getGradingStandards(account_id, 'account', config);
|
|
226
|
-
out = [...out, ...accountGradingStandards];
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (root_account_id) {
|
|
230
|
-
const rootAccountGradingStandards = await getGradingStandards(root_account_id, 'account', config);
|
|
231
|
-
out = [...out, ...rootAccountGradingStandards];
|
|
232
|
-
|
|
233
|
-
}
|
|
234
|
-
} catch (e) {
|
|
235
|
-
console.warn(e);
|
|
236
|
-
}
|
|
237
|
-
return out.filter(filterUniqueFunc);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
async getCurrentGradingStandard(config?: ICanvasCallConfig | undefined): Promise<IGradingStandardData | null> {
|
|
241
|
-
const {grading_standard_id, account_id, root_account_id} = this.canvasData;
|
|
242
|
-
|
|
243
|
-
const urls = [];
|
|
244
|
-
|
|
245
|
-
if (grading_standard_id) {
|
|
246
|
-
urls.push(`/api/v1/courses/${this.id}/grading_standards/${grading_standard_id}`)
|
|
247
|
-
if (root_account_id) urls.push(`/api/v1/accounts/${root_account_id}/grading_standards/${grading_standard_id}`);
|
|
248
|
-
if (account_id) urls.push(`/api/v1/accounts/${account_id}/grading_standards/${grading_standard_id}`);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
const standards = (await this.getAvailableGradingStandards(config)).filter(standard => standard.id === grading_standard_id)
|
|
252
|
-
if (standards.length == 0) return null;
|
|
253
|
-
return standards[0];
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
async getModulesByWeekNumber(config?: ICanvasCallConfig) {
|
|
257
|
-
if (this.modulesByWeekNumber) return this.modulesByWeekNumber;
|
|
258
|
-
const modules = await this.getModules(config);
|
|
259
|
-
this.modulesByWeekNumber = await getModulesByWeekNumber(modules);
|
|
260
|
-
return (this.modulesByWeekNumber);
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
/**
|
|
264
|
-
* Returns a list of links to items in a given module
|
|
265
|
-
*
|
|
266
|
-
* @param moduleOrWeekNumber
|
|
267
|
-
* @param target An object specifying an item or items to look for
|
|
268
|
-
* type - specifies the type,
|
|
269
|
-
* search - a string to search for in titles. optional.
|
|
270
|
-
* index - return the indexth one of these in the week (minus the intro in week 1, which should be index 0)
|
|
271
|
-
* if none is specified, return all matches
|
|
272
|
-
*/
|
|
273
|
-
async getModuleItemLinks(moduleOrWeekNumber: number | Record<string, any>, target: IModuleItemData | {
|
|
274
|
-
type: ModuleItemType,
|
|
275
|
-
search?: string | null,
|
|
276
|
-
index?: number | null,
|
|
277
|
-
}): Promise<string[]> {
|
|
278
|
-
assert(target.hasOwnProperty('type'));
|
|
279
|
-
const targetType: ModuleItemType = target.type;
|
|
280
|
-
const contentSearchString = target.hasOwnProperty('search') ? target.search : null;
|
|
281
|
-
let targetIndex = isNaN(target.index) ? null : target.index;
|
|
282
|
-
let targetModuleWeekNumber;
|
|
283
|
-
let targetModule;
|
|
284
|
-
if (typeof moduleOrWeekNumber === 'number') {
|
|
285
|
-
const modules = await this.getModulesByWeekNumber();
|
|
286
|
-
assert(modules.hasOwnProperty(moduleOrWeekNumber));
|
|
287
|
-
targetModuleWeekNumber = moduleOrWeekNumber;
|
|
288
|
-
targetModule = modules[targetModuleWeekNumber];
|
|
289
|
-
} else {
|
|
290
|
-
targetModule = moduleOrWeekNumber;
|
|
291
|
-
targetModuleWeekNumber = getModuleWeekNumber(targetModule);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
const urls = [];
|
|
295
|
-
if (targetModule && typeof targetType !== 'undefined') {
|
|
296
|
-
//If it's a page, just search for the parameter string
|
|
297
|
-
if (targetType === 'Page' && contentSearchString) {
|
|
298
|
-
const pages = await this.getPages({
|
|
299
|
-
queryParams: {search_term: contentSearchString}
|
|
300
|
-
})
|
|
301
|
-
pages.forEach((page) => urls.push(page.htmlContentUrl));
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
//If it's anything else, get only those items in the module and set url to the targetIndexth one.
|
|
305
|
-
} else if (targetType) {
|
|
306
|
-
//bump index for week 1 to account for intro discussion / checking for rubric would require pulling too much data
|
|
307
|
-
//and too much performance overhead
|
|
308
|
-
if (targetIndex && targetType === 'Discussion' && targetModuleWeekNumber === 1) targetIndex++;
|
|
309
|
-
const matchingTypeItems = targetModule.items.filter((item: IModuleItemData) => item.type === targetType);
|
|
310
|
-
if (targetIndex && matchingTypeItems.length >= targetIndex) {
|
|
311
|
-
//We refer to and number the assignments indexed at 1, but the array is indexed at 0
|
|
312
|
-
const targetItem = matchingTypeItems[targetIndex - 1];
|
|
313
|
-
urls.push(targetItem.html_url);
|
|
314
|
-
} else if (!targetIndex) {
|
|
315
|
-
for (const item of matchingTypeItems) urls.push(item.html_url)
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
return urls;
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
async getSyllabus(config: ICanvasCallConfig<GetCourseOptions> = {queryParams: {}}): Promise<string> {
|
|
323
|
-
if(this.canvasData.syllabus_body) return this.canvasData.syllabus_body;
|
|
324
|
-
const data = await getCourseData(this.id, fetchGetConfig({include: ['syllabus_body']}, config));
|
|
325
|
-
assert(data.syllabus_body)
|
|
326
|
-
this.canvasData.syllabus_body = data.syllabus_body;
|
|
327
|
-
return this.canvasData.syllabus_body;
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
// /**
|
|
331
|
-
// * gets all assignments in a course
|
|
332
|
-
// * @returns {Promise<Assignment[]>}
|
|
333
|
-
// * @param config
|
|
334
|
-
// */
|
|
335
|
-
async getAssignments(config?: ICanvasCallConfig): Promise<Assignment[]> {
|
|
336
|
-
console.warn('deprecated, use assignmentDataGen instead');
|
|
337
|
-
config = overrideConfig(config, {queryParams: {include: ['due_at']}})
|
|
338
|
-
const assignmentDatas = await renderAsyncGen(assignmentDataGen(this.id, config));
|
|
339
|
-
return (assignmentDatas.map(data => new Assignment(data, this.id)));
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
cachedContent: BaseContentItem[] = []
|
|
344
|
-
|
|
345
|
-
async getContent(config?: ICanvasCallConfig, refresh = false) {
|
|
346
|
-
if (refresh || this.cachedContent.length == 0) {
|
|
347
|
-
const discussions = await this.getDiscussions(config);
|
|
348
|
-
const assignments = await renderAsyncGen(assignmentDataGen(this.id, config))
|
|
349
|
-
const quizzes = await this.getQuizzes(config);
|
|
350
|
-
const pages = await this.getPages(config);
|
|
351
|
-
this.cachedContent = [
|
|
352
|
-
...discussions,
|
|
353
|
-
...assignments.map(a => new Assignment(a, this.id)),
|
|
354
|
-
...quizzes,
|
|
355
|
-
...pages
|
|
356
|
-
|
|
357
|
-
]
|
|
358
|
-
|
|
359
|
-
}
|
|
360
|
-
return this.cachedContent;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
async getDiscussions(config?: ICanvasCallConfig): Promise<Discussion[]> {
|
|
364
|
-
return await Discussion.getAllInCourse(this.id, config) as Discussion[];
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
async getAssignmentGroups(config?: ICanvasCallConfig) {
|
|
368
|
-
return await getPagedData<IAssignmentGroup>(`/api/v1/courses/${this.id}/assignment_groups`, config)
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
async getQuizzes(config?: ICanvasCallConfig) {
|
|
372
|
-
return await Quiz.getAllInCourse(this.id, config) as Quiz[];
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
async getSubsections() {
|
|
376
|
-
const url = `/api/v1/courses/${this.id}/sections`;
|
|
377
|
-
return await fetchJson(url);
|
|
378
|
-
|
|
379
|
-
}
|
|
380
|
-
|
|
381
|
-
async getTabs(config?: ICanvasCallConfig) {
|
|
382
|
-
return await fetchJson(`/api/v1/courses/${this.id}/tabs`, config) as ITabData[];
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
async getFrontPage() {
|
|
386
|
-
try {
|
|
387
|
-
const data = await fetchJson(`${this.contentUrlPath}/front_page`) as IPageData;
|
|
388
|
-
return new Page(data, this.id);
|
|
389
|
-
} catch (error) {
|
|
390
|
-
return null;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
getTab(label: string) {
|
|
395
|
-
return this.canvasData.tabs.find((tab: Record<string, any>) => tab.label === label) || null;
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
async reload() {
|
|
400
|
-
const id = this.id;
|
|
401
|
-
const reloaded = await Course.getCourseById(id);
|
|
402
|
-
this.canvasData = reloaded.rawData;
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
async changeSyllabus(newHtml: string) {
|
|
406
|
-
this.canvasData['syllabus_body'] = newHtml;
|
|
407
|
-
return await fetchJson(`/api/v1/courses/${this.id}`, {
|
|
408
|
-
fetchInit: {
|
|
409
|
-
method: 'PUT',
|
|
410
|
-
body: formDataify({
|
|
411
|
-
course: {
|
|
412
|
-
syllabus_body: newHtml
|
|
413
|
-
}
|
|
414
|
-
})
|
|
415
|
-
}
|
|
416
|
-
});
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
async publish() {
|
|
421
|
-
const url = `/api/v1/courses/${this.id}`;
|
|
422
|
-
const courseData = await fetchJson<ICourseData>(url, {
|
|
423
|
-
fetchInit: {
|
|
424
|
-
method: 'PUT',
|
|
425
|
-
body: formDataify({'offer': true})
|
|
426
|
-
}
|
|
427
|
-
});
|
|
428
|
-
console.log(courseData);
|
|
429
|
-
this.canvasData = courseData;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
get devCode() {
|
|
433
|
-
return 'DEV_' + this.baseCode;
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
async getParentCourse(return_dev_search = false) {
|
|
437
|
-
const migrations = await getPagedData(`/api/v1/courses/${this.id}/content_migrations`);
|
|
438
|
-
const parentCode = this.devCode;
|
|
439
|
-
|
|
440
|
-
if (migrations.length < 1) {
|
|
441
|
-
console.log('no migrations found');
|
|
442
|
-
if (return_dev_search) {
|
|
443
|
-
return getSingleCourse(parentCode, this.getAccountIds())
|
|
444
|
-
} else return;
|
|
445
|
-
}
|
|
446
|
-
migrations.sort((a, b) => b.id - a.id);
|
|
447
|
-
|
|
448
|
-
try {
|
|
449
|
-
for (const migration of migrations) {
|
|
450
|
-
const course = await Course.getCourseById(migration['settings']['source_course_id'])
|
|
451
|
-
if (course && course.codePrefix.includes("DEV")) return course;
|
|
452
|
-
}
|
|
453
|
-
} catch (e) {
|
|
454
|
-
return await getSingleCourse(parentCode, this.getAccountIds());
|
|
455
|
-
}
|
|
456
|
-
return await getSingleCourse(parentCode, this.getAccountIds());
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
getAccountIds() {
|
|
460
|
-
return [this.accountId, this.rootAccountId].filter(a => typeof a !== 'undefined' && a !== null);
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
// async regenerateHomeTiles() {
|
|
464
|
-
// const modules = await this.getModules();
|
|
465
|
-
// const urls = await Promise.all(modules.map(async (module) => {
|
|
466
|
-
// try {
|
|
467
|
-
// const dataUrl = await this.generateHomeTile(module)
|
|
468
|
-
//
|
|
469
|
-
// } catch (e) {
|
|
470
|
-
// console.log(e);
|
|
471
|
-
// }
|
|
472
|
-
// }));
|
|
473
|
-
// console.log('done');
|
|
474
|
-
//
|
|
475
|
-
// }
|
|
476
|
-
|
|
477
|
-
// async generateHomeTile(module: IModuleData) {
|
|
478
|
-
// const overviewPage = await getModuleOverview(module, this.id);
|
|
479
|
-
// if (!overviewPage) throw new Error("Module does not have an overview");
|
|
480
|
-
// const bannerImg = getBannerImage(overviewPage);
|
|
481
|
-
// if (!bannerImg) throw new Error("No banner image on page");
|
|
482
|
-
// const resizedImageBlob = await getResizedBlob(bannerImg.src, HOMETILE_WIDTH);
|
|
483
|
-
// const fileName = `hometile${module.position}.png`;
|
|
484
|
-
// assert(resizedImageBlob);
|
|
485
|
-
// const file = new File([resizedImageBlob], fileName)
|
|
486
|
-
// return await uploadFile(file, 'Images/hometile', this.fileUploadUrl);
|
|
487
|
-
// }
|
|
488
|
-
|
|
489
|
-
public getPages(config: ICanvasCallConfig | null = null) {
|
|
490
|
-
return Page.getAllInCourse(this.id, config) as Promise<Page[]>;
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
public async getFrontPageProfile() {
|
|
494
|
-
const frontPage = await this.getFrontPage();
|
|
495
|
-
try {
|
|
496
|
-
assert(frontPage && frontPage.body, "Course front page not found");
|
|
497
|
-
const frontPageProfile = getCurioPageFrontPageProfile(frontPage?.body);
|
|
498
|
-
frontPageProfile.sourcePage = frontPage;
|
|
499
|
-
return frontPageProfile;
|
|
500
|
-
|
|
501
|
-
} catch (e) {
|
|
502
|
-
return {
|
|
503
|
-
|
|
504
|
-
bio: 'NOT FOUND',
|
|
505
|
-
sourcePage: frontPage,
|
|
506
|
-
} as IProfile;
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
|
|
510
|
-
public async getPotentialInstructorProfiles() {
|
|
511
|
-
try {
|
|
512
|
-
|
|
513
|
-
const instructors = await this.getInstructors();
|
|
514
|
-
let profiles: IProfileWithUser[] = [];
|
|
515
|
-
if (!instructors) return profiles;
|
|
516
|
-
for (const instructor of instructors) {
|
|
517
|
-
profiles = profiles.concat(await getPotentialFacultyProfiles(instructor))
|
|
518
|
-
}
|
|
519
|
-
return profiles;
|
|
520
|
-
} catch (e) {
|
|
521
|
-
return [] as IProfileWithUser[];
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
}
|
|
525
|
-
|
|
526
|
-
public async getSettings(config?: ICanvasCallConfig) {
|
|
527
|
-
return await fetchJson(`/api/v1/courses/${this.id}/settings`, config) as ICourseSettings;
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
public async updateSettings(newSettings: Partial<ICourseSettings>, config? : ICanvasCallConfig) {
|
|
531
|
-
const configToUse = ApiWriteConfig(newSettings, config);
|
|
532
|
-
return await fetchJson(`/api/v1/courses/${this.id}/settings`, configToUse) as ICourseSettings;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import {ICourseCodeHaver, IIdHaver} from "@canvas/course/courseTypes";
|
|
2
|
-
import {Course} from "@canvas/course/Course";
|
|
3
|
-
|
|
4
|
-
export interface IBlueprintCourse extends ICourseCodeHaver, IIdHaver {
|
|
5
|
-
isBlueprint(): boolean,
|
|
6
|
-
|
|
7
|
-
getAssociatedCourses(redownload?: boolean): Promise<Course[]>
|
|
8
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import {mockAsyncGen, returnMockAsyncGen} from "@/__mocks__/utils";
|
|
2
|
-
import {ICourseData} from "@/types";
|
|
3
|
-
import {mockCourseData} from "@/course/__mocks__/mockCourseData";
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const isBlueprint = jest.fn();
|
|
7
|
-
const genBlueprintDataForCode = jest.fn();
|
|
8
|
-
const getSections = jest.fn();
|
|
9
|
-
const getTermNameFromSections = jest.fn();
|
|
10
|
-
const cachedGetAssociatedCoursesFunc = jest.fn();
|
|
11
|
-
const retireBlueprint = jest.fn();
|
|
12
|
-
const getBlueprintsFromCode = jest.fn();
|
|
13
|
-
const lockBlueprint = jest.fn();
|
|
14
|
-
const setAsBlueprint = jest.fn();
|
|
15
|
-
const unSetAsBlueprint = jest.fn();
|
|
16
|
-
|
|
17
|
-
const sectionDataGenerator = jest.fn( () => mockAsyncGen<ICourseData>([mockCourseData]));
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
isBlueprint,
|
|
21
|
-
genBlueprintDataForCode,
|
|
22
|
-
getSections,
|
|
23
|
-
getTermNameFromSections,
|
|
24
|
-
cachedGetAssociatedCoursesFunc,
|
|
25
|
-
retireBlueprint,
|
|
26
|
-
getBlueprintsFromCode,
|
|
27
|
-
lockBlueprint,
|
|
28
|
-
setAsBlueprint,
|
|
29
|
-
unSetAsBlueprint,
|
|
30
|
-
sectionDataGenerator,
|
|
31
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import {ICourseData} from "@/types";
|
|
2
|
-
import {mockTermData} from "@/__mocks__/mockTermData";
|
|
3
|
-
|
|
4
|
-
export const mockCourseData: ICourseData = {
|
|
5
|
-
account_id: 0,
|
|
6
|
-
allow_student_assignment_edits: false,
|
|
7
|
-
allow_student_forum_attachments: false,
|
|
8
|
-
allow_wiki_comments: false,
|
|
9
|
-
apply_assignment_group_weights: false,
|
|
10
|
-
blueprint: false,
|
|
11
|
-
blueprint_restrictions: {
|
|
12
|
-
content: false,
|
|
13
|
-
points: false,
|
|
14
|
-
due_dates: false,
|
|
15
|
-
availability_dates: false
|
|
16
|
-
},
|
|
17
|
-
blueprint_restrictions_by_object_type: {},
|
|
18
|
-
calendar: {},
|
|
19
|
-
course_code: "BP_TEST000",
|
|
20
|
-
course_format: "",
|
|
21
|
-
course_progress: {},
|
|
22
|
-
created_at: "",
|
|
23
|
-
default_view: "wiki",
|
|
24
|
-
end_at: "",
|
|
25
|
-
enrollment_term_id: 0,
|
|
26
|
-
enrollments: 0,
|
|
27
|
-
grading_standard_id: 0,
|
|
28
|
-
hide_final_grades: false,
|
|
29
|
-
id: 0,
|
|
30
|
-
license: "",
|
|
31
|
-
locale: "",
|
|
32
|
-
name: "BP_TEST000",
|
|
33
|
-
open_enrollment: false,
|
|
34
|
-
original_name: "",
|
|
35
|
-
permissions: {},
|
|
36
|
-
public_description: "",
|
|
37
|
-
restrict_enrollments_to_course_dates: false,
|
|
38
|
-
root_account_id: 0,
|
|
39
|
-
self_enrollment: false,
|
|
40
|
-
start_at: "",
|
|
41
|
-
storage_quota_mb: 0,
|
|
42
|
-
storage_quota_used_mb: 0,
|
|
43
|
-
template: false,
|
|
44
|
-
term: mockTermData,
|
|
45
|
-
time_zone: "",
|
|
46
|
-
uuid: "",
|
|
47
|
-
workflow_state: 'available'
|
|
48
|
-
|
|
49
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import {ILatePolicyData} from "../../canvasDataDefs";
|
|
2
|
-
|
|
3
|
-
const latePolicyDummyData: ILatePolicyData = {
|
|
4
|
-
id: 1,
|
|
5
|
-
missing_submission_deduction: 20.0,
|
|
6
|
-
late_submission_minimum_percent_enabled: true,
|
|
7
|
-
missing_submission_deduction_enabled: true,
|
|
8
|
-
late_submission_deduction: 1.0,
|
|
9
|
-
late_submission_deduction_enabled: false,
|
|
10
|
-
late_submission_interval: 'days',
|
|
11
|
-
late_submission_minimum_percent: 0.0,
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export default latePolicyDummyData
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import {IModuleData, IModuleItemData, ModuleItemType} from "../../canvasDataDefs";
|
|
2
|
-
|
|
3
|
-
export const mockModuleData: IModuleData = {
|
|
4
|
-
id: 0,
|
|
5
|
-
items: [],
|
|
6
|
-
items_count: 0,
|
|
7
|
-
items_url: "",
|
|
8
|
-
name: "",
|
|
9
|
-
position: 0,
|
|
10
|
-
prerequisite_module_ids: [],
|
|
11
|
-
published: false,
|
|
12
|
-
require_sequential_progress: false,
|
|
13
|
-
state: "",
|
|
14
|
-
unlock_at: ""
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const mockModuleItemData: IModuleItemData = {
|
|
19
|
-
id: 1,
|
|
20
|
-
module_id: 0,
|
|
21
|
-
position: 0,
|
|
22
|
-
title: "string",
|
|
23
|
-
indent: 0,
|
|
24
|
-
type: 'Assignment',
|
|
25
|
-
content_id: 0,
|
|
26
|
-
url: 'http://localhost:8080',
|
|
27
|
-
html_url: '',
|
|
28
|
-
page_url: "https://this.page",
|
|
29
|
-
new_tab: false,
|
|
30
|
-
completion_requirement: {
|
|
31
|
-
type: "must_submit",
|
|
32
|
-
min_score: 0
|
|
33
|
-
},
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export const mockUgModules:IModuleData[] = [];
|
|
37
|
-
export const mockGradModules:IModuleData[] = [];
|
|
38
|
-
for (let i = 1; i <= 8; i++) {
|
|
39
|
-
const module = {
|
|
40
|
-
...mockModuleData,
|
|
41
|
-
name: `Week ${i}`,
|
|
42
|
-
}
|
|
43
|
-
const moduleItem = {...mockModuleItemData,
|
|
44
|
-
position: i - 1,
|
|
45
|
-
title: `Week ${i} Overview`
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const gradModule = {...module};
|
|
49
|
-
gradModule.items = [{...moduleItem}];
|
|
50
|
-
mockGradModules.push(gradModule)
|
|
51
|
-
|
|
52
|
-
if(i <= 5) {
|
|
53
|
-
const ugModule = {...module}
|
|
54
|
-
ugModule.items = [{...moduleItem}]
|
|
55
|
-
mockUgModules.push(ugModule);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
export default mockModuleData;
|