workign on test folders

This commit is contained in:
2024-08-24 15:31:43 -06:00
parent 9d83fd4a56
commit 446889206f
17 changed files with 899 additions and 75 deletions

View File

@@ -1,5 +1,7 @@
import { AssignmentSubmissionType } from "./assignmentSubmissionType";
import { RubricItem } from "./rubricItem";
import { assignmentMarkdownParser } from "./utils/assignmentMarkdownParser";
import { assignmentMarkdownSerializer } from "./utils/assignmentMarkdownSerializer";
export interface LocalAssignment {
name: string;
@@ -11,3 +13,8 @@ export interface LocalAssignment {
allowedFileUploadExtensions: string[];
rubric: RubricItem[];
}
export const localAssignmentMarkdown = {
parseMarkdown: assignmentMarkdownParser.parseMarkdown,
toMarkdown: assignmentMarkdownSerializer.toMarkdown,
};

View File

@@ -1,5 +1,6 @@
import { LocalAssignmentGroup } from "./assignmnet/localAssignmentGroup";
import { LocalModule } from "./localModules";
import { parse, stringify } from "yaml";
export interface LocalCourse {
modules: LocalModule[];
@@ -30,14 +31,11 @@ export enum DayOfWeek {
Friday = "Friday",
Saturday = "Saturday",
}
// export const LocalCourseSettingsUtils = {
// toYaml(settings: LocalCourseSettings): string {
// return dump(settings, { noRefs: true });
// },
// parseYaml(rawText: string): LocalCourseSettings {
// const settings = load(rawText) as LocalCourseSettings;
// return createLocalCourseSettings(settings);
// },
// };
export const localCourseYamlUtils = {
parseSettingYaml: (settingsString: string): LocalCourseSettings => {
return parse(settingsString);
},
settingsToYaml: (settings: LocalCourseSettings) => {
return stringify(settings);
},
};

View File

@@ -1,3 +1,4 @@
import { extractLabelValue } from "../assignmnet/utils/markdownUtils";
import { IModuleItem } from "../IModuleItem";
export interface LocalCoursePage extends IModuleItem {
@@ -5,3 +6,33 @@ export interface LocalCoursePage extends IModuleItem {
text: string;
dueAt: string;
}
export const localPageMarkdownUtils = {
toMarkdown: (page: LocalCoursePage) => {
const printableDueDate = new Date(page.dueAt)
.toISOString()
.replace("\u202F", " ");
const settingsMarkdown = `Name: ${page.name}\nDueDateForOrdering: ${printableDueDate}\n---\n`;
return settingsMarkdown + page.text;
},
parseMarkdown: (pageMarkdown: string) => {
const rawSettings = pageMarkdown.split("---")[0];
const name = extractLabelValue(rawSettings, "Name");
const rawDate = extractLabelValue(rawSettings, "DueDateForOrdering");
const parsedDate = new Date(rawDate);
if (isNaN(parsedDate.getTime())) {
throw new Error(`could not parse due date: ${rawDate}`);
}
const text = pageMarkdown.split("---\n")[1];
const page: LocalCoursePage = {
name,
dueAt: parsedDate.toISOString(),
text,
};
return page;
},
};

View File

@@ -1,32 +0,0 @@
import { extractLabelValue } from "../assignmnet/utils/markdownUtils";
import { LocalCoursePage } from "./localCoursePage";
export const pageMarkdownUtils = {
toMarkdown: (page: LocalCoursePage) => {
const printableDueDate = new Date(page.dueAt)
.toISOString()
.replace("\u202F", " ");
const settingsMarkdown = `Name: ${page.name}\nDueDateForOrdering: ${printableDueDate}\n---\n`;
return settingsMarkdown + page.text;
},
parseMarkdown: (pageMarkdown: string) => {
const rawSettings = pageMarkdown.split("---")[0];
const name = extractLabelValue(rawSettings, "Name");
const rawDate = extractLabelValue(rawSettings, "DueDateForOrdering");
const parsedDate = new Date(rawDate);
if (isNaN(parsedDate.getTime())) {
throw new Error(`could not parse due date: ${rawDate}`);
}
const text = pageMarkdown.split("---\n")[1];
const page: LocalCoursePage = {
name,
dueAt: parsedDate.toISOString(),
text,
};
return page;
},
};

View File

@@ -1,4 +1,5 @@
import { LocalQuizQuestion } from "./localQuizQuestion";
import { quizMarkdownUtils } from "./utils/quizMarkdownUtils";
export interface LocalQuiz {
name: string;
@@ -13,3 +14,8 @@ export interface LocalQuiz {
allowedAttempts: number;
questions: LocalQuizQuestion[];
}
export const localQuizMarkdownUtils = {
parseMarkdown: quizMarkdownUtils.parseMarkdown,
toMarkdown: quizMarkdownUtils.toMarkdown,
};

View File

@@ -3,7 +3,7 @@
export const getDateFromString = (value: string) => {
// may need to check for other formats
const validDateRegex =
/([1-9][1-9]|[0-2])\/(0[1-9]|[1-2][0-9]|3[01])\/\d{4} (0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])/;
/\d{2}\/\d{2}\/\d{4} [0-2][0-9]|[0-5][0-9]|[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/;
if (!validDateRegex.test(value)) {
return undefined;
}