@ueu/ueu-canvas 0.0.2 → 0.0.3
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 +2 -0
- package/dist/content/assignments/deleteAssignmentGroup.d.ts.map +1 -0
- package/dist/content/assignments/genAssignmentGroups.d.ts +4 -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 +3 -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 +10 -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 +2 -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 +3 -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 +8929 -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 +49 -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/profile.ts
DELETED
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import assert from "assert";
|
|
2
|
-
import {IUserData} from "./canvasDataDefs";
|
|
3
|
-
import {parentElement} from "./canvasUtils";
|
|
4
|
-
|
|
5
|
-
import {Course} from "./course/Course";
|
|
6
|
-
import {Account} from "@/Account";
|
|
7
|
-
import {getSingleCourse} from "@/course/toolbox";
|
|
8
|
-
import {Page} from "@/content/pages/Page";
|
|
9
|
-
|
|
10
|
-
import {IProfile, IProfileWithUser} from "@/types";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
let facultyCourseCached: Course;
|
|
14
|
-
|
|
15
|
-
async function getFacultyCourse() {
|
|
16
|
-
const facultyCourse = facultyCourseCached ?? await getSingleCourse('Faculty Bios', (await Account.getAll()).map(a => a.id));
|
|
17
|
-
facultyCourseCached = facultyCourse;
|
|
18
|
-
assert(facultyCourse);
|
|
19
|
-
return facultyCourse;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export async function getFacultyPages(searchTerm: string) {
|
|
23
|
-
const facultyCourse = await getFacultyCourse();
|
|
24
|
-
return await facultyCourse.getPages({
|
|
25
|
-
queryParams: {
|
|
26
|
-
include: ['body'],
|
|
27
|
-
search_term: searchTerm
|
|
28
|
-
}
|
|
29
|
-
})
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function getPotentialFacultyProfiles(user:IUserData) {
|
|
33
|
-
let pages: Page[] = [];
|
|
34
|
-
const [lastName, firstName] = user.name.split(' ')
|
|
35
|
-
for(const query of [
|
|
36
|
-
user.name,
|
|
37
|
-
lastName,
|
|
38
|
-
firstName,
|
|
39
|
-
]) {
|
|
40
|
-
console.log(query);
|
|
41
|
-
pages = await getFacultyPages(query);
|
|
42
|
-
if(pages.length > 0) break;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const profiles = pages.map((page) => getProfileFromPage(page, user), true)
|
|
46
|
-
|
|
47
|
-
if(profiles.length > 0) {
|
|
48
|
-
for(const profile of profiles) {
|
|
49
|
-
profile.displayName ??= user.name;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return profiles;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export function getProfileFromPage(page:Page, user:IUserData) {
|
|
56
|
-
const profile = getProfileFromPageHtml(page.body, user);
|
|
57
|
-
profile.sourcePage = page;
|
|
58
|
-
return profile;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
function getProfileFromPageHtml(html:string, user: IUserData) {
|
|
62
|
-
const el = document.createElement('div')
|
|
63
|
-
el.innerHTML = html;
|
|
64
|
-
|
|
65
|
-
const displayName = getDisplayName(el);
|
|
66
|
-
const body = getProfileBody(el);
|
|
67
|
-
const image = getImageLink(el);
|
|
68
|
-
|
|
69
|
-
return {
|
|
70
|
-
user,
|
|
71
|
-
bio: body,
|
|
72
|
-
displayName,
|
|
73
|
-
image,
|
|
74
|
-
imageLink: image?.src,
|
|
75
|
-
} as IProfileWithUser
|
|
76
|
-
}
|
|
77
|
-
function getProfileBody(el:Element) {
|
|
78
|
-
const h4s = el.querySelectorAll('h4');
|
|
79
|
-
const instructorHeaders = Array.from(h4s).filter((el) => {
|
|
80
|
-
return el.innerHTML.search(/instructor/i)
|
|
81
|
-
})
|
|
82
|
-
let potentials:string[] = [];
|
|
83
|
-
for(const header of instructorHeaders) {
|
|
84
|
-
const potentialParent = header.parentElement;
|
|
85
|
-
if(potentialParent) {
|
|
86
|
-
header.remove();
|
|
87
|
-
potentials.push(potentialParent.innerHTML);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
potentials = winnow(potentials, [
|
|
92
|
-
(potential) => potential.length > 0,
|
|
93
|
-
]);
|
|
94
|
-
|
|
95
|
-
/* just guess if we can't find anything */
|
|
96
|
-
if (potentials.length > 0) {
|
|
97
|
-
return potentials[0];
|
|
98
|
-
}
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function getDisplayName(el:Element) {
|
|
103
|
-
let titles = Array.from(el.querySelectorAll('strong em'));
|
|
104
|
-
|
|
105
|
-
if (titles.length === 0) {
|
|
106
|
-
const enclosedImages = Array.from(el.querySelectorAll('p img'));
|
|
107
|
-
|
|
108
|
-
titles = enclosedImages.map((el) => parentElement(el, 'p')?.nextElementSibling)
|
|
109
|
-
.filter((el) => el instanceof Element) as Element[];
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
if (titles.length === 0) {
|
|
113
|
-
const headings = Array.from(el.querySelectorAll('p strong'));
|
|
114
|
-
const instructorHeaders = headings.filter(el => el.innerHTML.search(/Instructor/));
|
|
115
|
-
titles = instructorHeaders.map((el) => el.previousElementSibling)
|
|
116
|
-
.filter((el) => el instanceof Element) as Element[]
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
titles = titles.filter((title) => title.textContent && title.textContent.length > 0)
|
|
120
|
-
if (titles.length > 0) return titles[0].textContent;
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* Finds all the image links in the content and returns the biggest.
|
|
126
|
-
* @param el
|
|
127
|
-
*/
|
|
128
|
-
function getImageLink(el:Element) {
|
|
129
|
-
const imgs = el.querySelectorAll('img');
|
|
130
|
-
if(imgs.length === 0) return null;
|
|
131
|
-
return Array.from(imgs)[1];
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
type WinnowFunc<T> = ((value:T, number?: number, array?: T[])=>boolean);
|
|
135
|
-
/**
|
|
136
|
-
* Takes in a list of parameters and a set of filter functions. Runs filter functions until there are one or fewer elements,
|
|
137
|
-
* or it runs out of filter functions. Returns post-filtered list.
|
|
138
|
-
* @param originalList The list of items to run
|
|
139
|
-
* @param winnowFuncs A list of filter functions, run in order
|
|
140
|
-
* @param returnLastNonEmpty If true, will return the last non-empty array found if elements are winnowed to 0
|
|
141
|
-
*/
|
|
142
|
-
function winnow<T=string>(originalList: T[], winnowFuncs: WinnowFunc<T>[], returnLastNonEmpty=false) {
|
|
143
|
-
let copyList = [...originalList];
|
|
144
|
-
if(copyList.length === 1) return copyList; //already at 1 element
|
|
145
|
-
let lastSet = [...copyList];
|
|
146
|
-
for(const winnowFunc of winnowFuncs) {
|
|
147
|
-
lastSet = [...copyList];
|
|
148
|
-
copyList = copyList.filter(winnowFunc);
|
|
149
|
-
if(copyList.length === 1) break;
|
|
150
|
-
}
|
|
151
|
-
if(copyList.length === 0 && returnLastNonEmpty) return lastSet;
|
|
152
|
-
return copyList;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
function getCurioPageFrontPageProfile(html:string, user?: IUserData):IProfile {
|
|
156
|
-
const el = document.createElement('div');
|
|
157
|
-
el.innerHTML = html;
|
|
158
|
-
try {
|
|
159
|
-
const header = getCurioHeader(el);
|
|
160
|
-
const match = header.innerHTML.match(/Meet your instructor, ?(.*)!/i);
|
|
161
|
-
const displayName = match ? match[1] : null;
|
|
162
|
-
const bio = getCurioBio(el);
|
|
163
|
-
const image = getCurioProfileImage(el);
|
|
164
|
-
return {
|
|
165
|
-
user,
|
|
166
|
-
displayName,
|
|
167
|
-
image,
|
|
168
|
-
imageLink: image ? image.src : null,
|
|
169
|
-
bio: bio?.innerHTML
|
|
170
|
-
}
|
|
171
|
-
} catch(e) {
|
|
172
|
-
return {
|
|
173
|
-
user,
|
|
174
|
-
displayName: "CANNOT LOCATE PROFILE",
|
|
175
|
-
bio: (e as Error).toString(),
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
export function frontPageBio(profile:IProfile & {user:IUserData}) {
|
|
181
|
-
return profile.bio + `<p>${profile.displayName} should be contacted during the term using Canvas Inbox,
|
|
182
|
-
but can be reached after and before the term via their email address: ${profile.user.email}</p>`
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
export function renderProfileIntoCurioFrontPage(html: string, profile: IProfile & {user:IUserData}) {
|
|
187
|
-
const el = document.createElement('div');
|
|
188
|
-
el.innerHTML = html;
|
|
189
|
-
if(profile.displayName) {
|
|
190
|
-
const header = getCurioHeader(el);
|
|
191
|
-
header.innerHTML = `Meet your instructor, ${profile.displayName}!`
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
if(profile.bio) {
|
|
195
|
-
const bio = getCurioBio(el);
|
|
196
|
-
if(bio) {
|
|
197
|
-
const classes = bio.classList;
|
|
198
|
-
if(!classes.contains('cbt-instructor-bio')) classes.add('cbt-instructor-bio')
|
|
199
|
-
bio.innerHTML = frontPageBio(profile);
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
if(profile.image) {
|
|
204
|
-
const image = getCurioProfileImage(el);
|
|
205
|
-
if(image) {
|
|
206
|
-
image.src = profile.image.src;
|
|
207
|
-
image.alt = profile.image.alt;
|
|
208
|
-
}
|
|
209
|
-
} else if (profile.imageLink) {
|
|
210
|
-
const image = getCurioProfileImage(el);
|
|
211
|
-
if(image) {
|
|
212
|
-
image.src = profile.imageLink;
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
return el.innerHTML;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function getCurioHeader(el:Element) {
|
|
219
|
-
let h2s = Array.from(el.querySelectorAll('h2'));
|
|
220
|
-
h2s = h2s.filter((h2) => h2.innerHTML.match(/Meet your instructor/i));
|
|
221
|
-
if(h2s.length <= 0) throw new Error(`Can't find bio section of front page.\n${h2s.map(a => a.innerHTML)}\n${el.innerHTML}`);
|
|
222
|
-
return h2s[0];
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
function getCurioProfileDiv(el:Element) {
|
|
226
|
-
const header = getCurioHeader(el);
|
|
227
|
-
const sectionEl = header.nextElementSibling;
|
|
228
|
-
assert(sectionEl, "Body element of bio not found on page.")
|
|
229
|
-
return sectionEl;
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function getCurioBio(el:Element) {
|
|
234
|
-
const profileDiv = getCurioProfileDiv(el);
|
|
235
|
-
const bio = profileDiv.querySelector('.cbt-instructor-bio');
|
|
236
|
-
if(bio && bio.innerHTML) return bio;
|
|
237
|
-
const div = getCurioProfileDiv(el);
|
|
238
|
-
const p = div.querySelector('p');
|
|
239
|
-
return p?.parentElement;
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
function getCurioProfileImage(el:Element) {
|
|
245
|
-
return getCurioProfileDiv(el).querySelector('img');
|
|
246
|
-
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
export {
|
|
250
|
-
getPotentialFacultyProfiles,
|
|
251
|
-
getCurioPageFrontPageProfile,
|
|
252
|
-
winnow
|
|
253
|
-
}
|
package/src/rubricTypes.ts
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
export interface IRubricCriterionData {
|
|
2
|
-
id: string,
|
|
3
|
-
description?: string | null,
|
|
4
|
-
long_description?: string | null,
|
|
5
|
-
points: number,
|
|
6
|
-
criterion_use_range?: boolean,
|
|
7
|
-
ratings: IRubricRatingData[]
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface IRubricRatingData {
|
|
11
|
-
id: string,
|
|
12
|
-
description?: string | null,
|
|
13
|
-
long_description?: string | null,
|
|
14
|
-
points: number,
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface IRubricAssessmentData {
|
|
18
|
-
id: number,
|
|
19
|
-
rubric_id: number,
|
|
20
|
-
rubric_association_id: number,
|
|
21
|
-
score: number,
|
|
22
|
-
artifact_type: string,
|
|
23
|
-
artifact_id: number,
|
|
24
|
-
artifact_attempt: number,
|
|
25
|
-
assessment_type: 'grading' | 'peer_review' | 'provisional_grade',
|
|
26
|
-
assessor_id: number,
|
|
27
|
-
data?: any,
|
|
28
|
-
comments?: string,
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type RubricAssessment = Record<string, {
|
|
32
|
-
points: number,
|
|
33
|
-
rating_id: string,
|
|
34
|
-
comments?: string,
|
|
35
|
-
}>
|
|
36
|
-
|
|
37
|
-
export interface IRubricAssociationData {
|
|
38
|
-
id: number,
|
|
39
|
-
rubric_id: number,
|
|
40
|
-
association_id: number,
|
|
41
|
-
association_type: "Assignment" | "Course" | "Account",
|
|
42
|
-
use_for_grading: boolean,
|
|
43
|
-
summary_data?: string,
|
|
44
|
-
purpose: 'grading' | 'bookmark',
|
|
45
|
-
hide_score_total: boolean,
|
|
46
|
-
hide_points: boolean,
|
|
47
|
-
hide_outcome_results: boolean,
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
export interface RubricTypes {
|
|
51
|
-
id: number,
|
|
52
|
-
title: string,
|
|
53
|
-
context_id: number,
|
|
54
|
-
context_type: string,
|
|
55
|
-
points_possible: number,
|
|
56
|
-
reusable: boolean,
|
|
57
|
-
read_only: boolean,
|
|
58
|
-
free_form_criterion_comments: boolean,
|
|
59
|
-
hide_score_total: boolean,
|
|
60
|
-
data: null,
|
|
61
|
-
assessments?: IRubricAssessmentData[],
|
|
62
|
-
associations?: IRubricAssociationData[],
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
type RubricCallIncludeTypes = 'assessments' | 'graded_assessments' | 'peer_assessments' |
|
|
66
|
-
'associations' | 'assignment_associations' | 'course_associations' | 'account_associations'
|
|
67
|
-
export type GetRubricsForCourseOptions = {
|
|
68
|
-
include?: RubricCallIncludeTypes[]
|
|
69
|
-
}
|
|
70
|
-
export type RubricAssociationUpdateOptions = {
|
|
71
|
-
id: number,
|
|
72
|
-
rubric_association: Partial<Pick<IRubricAssociationData,
|
|
73
|
-
'rubric_id' |
|
|
74
|
-
'association_id' |
|
|
75
|
-
'association_type' |
|
|
76
|
-
'use_for_grading' |
|
|
77
|
-
'hide_score_total' |
|
|
78
|
-
'purpose'>> & {
|
|
79
|
-
title?: string
|
|
80
|
-
bookmarked?: boolean
|
|
81
|
-
}
|
|
82
|
-
}
|
package/src/rubrics.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import {deepObjectMerge, formDataify, ICanvasCallConfig} from "./canvasUtils";
|
|
2
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
3
|
-
|
|
4
|
-
import {fetchJson} from "@/fetch/fetchJson";
|
|
5
|
-
|
|
6
|
-
import {GetRubricsForCourseOptions, RubricTypes, RubricAssociationUpdateOptions} from "@canvas/rubricTypes";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
export function getRubricsFetchUrl(courseId:number) { return `/api/v1/courses/${courseId}/rubrics`}
|
|
10
|
-
export function rubricApiUrl(courseId:number, rubricId:number) { return `/api/v1/courses/${courseId}/rubrics/${rubricId}` }
|
|
11
|
-
|
|
12
|
-
export function rubricsForCourseGen(courseId: number, options?: GetRubricsForCourseOptions, config?: ICanvasCallConfig) {
|
|
13
|
-
const url = getRubricsFetchUrl(courseId);
|
|
14
|
-
const dataGenerator = getPagedDataGenerator<RubricTypes>(url, config);
|
|
15
|
-
if (options?.include) {
|
|
16
|
-
return async function* () {
|
|
17
|
-
for await(const rubric of dataGenerator) {
|
|
18
|
-
|
|
19
|
-
yield await getRubric(rubric.context_id, rubric.id, options, config)
|
|
20
|
-
}
|
|
21
|
-
}();
|
|
22
|
-
}
|
|
23
|
-
return dataGenerator;
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export async function getRubric(courseId: number, rubricId: number, options?: GetRubricsForCourseOptions, config?: ICanvasCallConfig) {
|
|
28
|
-
const url = rubricApiUrl(courseId, rubricId);
|
|
29
|
-
if (options?.include) {
|
|
30
|
-
config ??= {};
|
|
31
|
-
config.queryParams = deepObjectMerge(config?.queryParams, {include: options.include})
|
|
32
|
-
}
|
|
33
|
-
return await fetchJson(url, config) as RubricTypes
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export function rubricAssociationUrl(courseId:number, rubricAssociationId:number) {
|
|
37
|
-
return `/api/v1/courses/${courseId}/rubric_associations/${rubricAssociationId}`;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export async function updateRubricAssociation(courseId: number, rubricAssociationId: number, data: RubricAssociationUpdateOptions, config?:ICanvasCallConfig) {
|
|
41
|
-
const url = rubricAssociationUrl(courseId, rubricAssociationId);
|
|
42
|
-
return await fetchJson(url, deepObjectMerge(config, {
|
|
43
|
-
fetchInit: {
|
|
44
|
-
method: 'PUT',
|
|
45
|
-
body: formDataify(data)
|
|
46
|
-
},
|
|
47
|
-
}, true));
|
|
48
|
-
}
|
package/src/term/Term.ts
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import {BaseCanvasObject} from "@/baseCanvasObject";
|
|
2
|
-
import {ICanvasCallConfig} from "@/canvasUtils";
|
|
3
|
-
import {Account, RootAccountNotFoundError} from "@/Account";
|
|
4
|
-
import assert from "assert";
|
|
5
|
-
import {CanvasData} from "@/canvasDataDefs";
|
|
6
|
-
import {getPagedData} from "@/fetch/getPagedDataGenerator";
|
|
7
|
-
import {fetchJson} from "@/fetch/fetchJson";
|
|
8
|
-
|
|
9
|
-
export type TermWorkflowState = 'all' | 'active' | 'deleted'
|
|
10
|
-
|
|
11
|
-
export interface ITermData extends CanvasData {
|
|
12
|
-
id: number,
|
|
13
|
-
start_at: string,
|
|
14
|
-
end_at: string,
|
|
15
|
-
name: string,
|
|
16
|
-
workflow_state: TermWorkflowState,
|
|
17
|
-
overrides?: Record<string, any>,
|
|
18
|
-
course_count: number
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export class Term extends BaseCanvasObject<ITermData> {
|
|
22
|
-
static nameProperty = "name";
|
|
23
|
-
|
|
24
|
-
static async getTerm(code: string, workflowState: 'all' | 'active' | 'deleted' = 'all', config: ICanvasCallConfig | undefined = undefined) {
|
|
25
|
-
const terms = await this.searchTerms(code, workflowState, config);
|
|
26
|
-
if (!Array.isArray(terms) || terms.length <= 0) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
return terms[0];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static async getTermById(termId: number, config: ICanvasCallConfig | null = null) {
|
|
33
|
-
const account = await Account.getRootAccount();
|
|
34
|
-
if(!account) throw new RootAccountNotFoundError();
|
|
35
|
-
const url = `/api/v1/accounts/${account.id}/terms/${termId}`;
|
|
36
|
-
const termData = await fetchJson(url, config) as ITermData | null;
|
|
37
|
-
if (termData) return new Term(termData);
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
static async getAllActiveTerms(config: ICanvasCallConfig | null = null) {
|
|
42
|
-
return await this.searchTerms(null, 'active', config);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
static async searchTerms(
|
|
46
|
-
code: string | null = null,
|
|
47
|
-
workflowState: 'all' | 'active' | 'deleted' = 'all',
|
|
48
|
-
config: ICanvasCallConfig | null = null) {
|
|
49
|
-
|
|
50
|
-
config = config || {};
|
|
51
|
-
config.queryParams = config.queryParams || {};
|
|
52
|
-
|
|
53
|
-
const queryParams = config.queryParams;
|
|
54
|
-
if (workflowState) queryParams['workflow_state'] = workflowState;
|
|
55
|
-
if (code) queryParams['term_name'] = code;
|
|
56
|
-
const rootAccount = await Account.getRootAccount();
|
|
57
|
-
assert(rootAccount);
|
|
58
|
-
const url = `/api/v1/accounts/${rootAccount.id}/terms`;
|
|
59
|
-
const data = await getPagedData<ITermData>(url, config);
|
|
60
|
-
const terms: ITermData[] = [];
|
|
61
|
-
for (const datum of data) {
|
|
62
|
-
if (datum.hasOwnProperty('enrollment_terms')) {
|
|
63
|
-
for (const termData of datum['enrollment_terms']) {
|
|
64
|
-
terms.push(termData);
|
|
65
|
-
}
|
|
66
|
-
} else {
|
|
67
|
-
terms.push(datum);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (!terms || terms.length === 0) {
|
|
72
|
-
return null;
|
|
73
|
-
}
|
|
74
|
-
return terms.map(term => new Term(term));
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import dateFromTermName from "@/term/dateFromTermName";
|
|
2
|
-
import { Temporal } from "temporal-polyfill";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const month = 7;
|
|
6
|
-
const day = 12;
|
|
7
|
-
const year = 2024;
|
|
8
|
-
const date = Temporal.PlainDate.from ({ month, day, year})
|
|
9
|
-
describe('dateFromTermName', () => {
|
|
10
|
-
it('works for undergrad', () => {
|
|
11
|
-
expect(dateFromTermName('DE5W07.12.24')).toEqual(date)
|
|
12
|
-
})
|
|
13
|
-
it('works for grad', () => {
|
|
14
|
-
expect(dateFromTermName('DE8W07.12.24')).toEqual(date);
|
|
15
|
-
})
|
|
16
|
-
it('works when part of a course name', () => {
|
|
17
|
-
expect(dateFromTermName('DE8W07.12.24_TEST000-1: Test')).toEqual(date);
|
|
18
|
-
})
|
|
19
|
-
it('is undefined if it doesnt see a term name', () => {
|
|
20
|
-
expect(dateFromTermName('ABCD1223.234.1')).toBeUndefined();
|
|
21
|
-
})
|
|
22
|
-
})
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {getTermsGenerator} from "@/term/getTermsGenerator";
|
|
2
|
-
|
|
3
|
-
jest.mock("@/fetch/getPagedDataGenerator")
|
|
4
|
-
|
|
5
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
6
|
-
import {mockAsyncGen} from "@/__mocks__/utils";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
describe("getTermsGenerator", function () {
|
|
10
|
-
|
|
11
|
-
const rootAccountId = 10;
|
|
12
|
-
const mockTerms = [
|
|
13
|
-
{id: 1},
|
|
14
|
-
{id: 2},
|
|
15
|
-
];
|
|
16
|
-
|
|
17
|
-
it("returns terms", async function () {
|
|
18
|
-
const termGenerator = getTermsGenerator(rootAccountId);
|
|
19
|
-
(getPagedDataGenerator as jest.Mock).mockReturnValueOnce(mockAsyncGen(mockTerms));
|
|
20
|
-
expect(getPagedDataGenerator).toHaveBeenCalledWith(`/api/v1/accounts/${rootAccountId}/terms`, expect.anything())
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
})
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {Temporal} from "temporal-polyfill";
|
|
2
|
-
|
|
3
|
-
export function dateFromTermName(termName:string) {
|
|
4
|
-
const [newCode, month, day, year] = /DE\dW(\d+)\.(\d+)\.(\d+)/i.exec(termName) ?? [];
|
|
5
|
-
if(newCode) {
|
|
6
|
-
const yearInt = parseInt(year);
|
|
7
|
-
return Temporal.PlainDate.from({
|
|
8
|
-
month: parseInt(month),
|
|
9
|
-
day: parseInt(day),
|
|
10
|
-
year: yearInt < 100? 2000 + yearInt : yearInt
|
|
11
|
-
})
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export default dateFromTermName;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import {getPagedDataGenerator} from "@/fetch/getPagedDataGenerator";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type TermQueryParams = {
|
|
5
|
-
workflow_state?: 'active' | 'deleted' | 'all',
|
|
6
|
-
include?: ('overrides' | 'course_count')[],
|
|
7
|
-
term_name?: string,
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
const defaultTermQueryParams = {
|
|
11
|
-
workflow_state: 'active',
|
|
12
|
-
}
|
|
13
|
-
export const getTermsGenerator = (rootAccountId:number, queryParams?: TermQueryParams) => {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const generator = getPagedDataGenerator(`/api/v1/accounts/${rootAccountId}/terms`, {
|
|
17
|
-
queryParams: {...defaultTermQueryParams, ...queryParams ?? {}},
|
|
18
|
-
});
|
|
19
|
-
return generator;
|
|
20
|
-
|
|
21
|
-
}
|
package/src/term/index.ts
DELETED
package/src/toolbox.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export function sleep(milliseconds: number): Promise<void> {
|
|
2
|
-
return new Promise((resolve, reject) => {
|
|
3
|
-
setTimeout(resolve, milliseconds)
|
|
4
|
-
})
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
export function isNotNullOrUndefined(value: any) {
|
|
8
|
-
if (value === null) return false;
|
|
9
|
-
if (typeof value === 'undefined') return false;
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export function aMinusBSortFn<T>(func: (value: T) => number) {
|
|
14
|
-
return (a: T, b: T) => func(a) - func(b);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function bMinusASortFn<T>(func: (value: T) => number) {
|
|
18
|
-
return (a: T, b: T) => func(b) - func(a);
|
|
19
|
-
}
|