got assignment edit page working again

This commit is contained in:
2024-01-05 08:24:51 -07:00
parent 31e06489ae
commit e6cc3c2a3c
9 changed files with 148 additions and 129 deletions

View File

@@ -34,6 +34,9 @@
private string name { get; set; } = String.Empty;
private bool addingAssignmentToCanvas = false;
private bool deletingAssignmentFromCanvas = false;
private bool showHelp = false;
private void toggleHelp() => showHelp = !showHelp;
private void submitHandler()
{
@@ -157,9 +160,6 @@
deletingAssignmentFromCanvas = false;
StateHasChanged();
}
private bool showHelp { get; set; } = false;
}
<div class="d-flex flex-column p-2 h-100 w-100" style="height: 100%;" >
@@ -170,7 +170,7 @@
<section class="flex-grow-1 p-1 border rounded-4 bg-dark-subtle" style="min-height: 0;">
@if (assignmentContext.Assignment != null)
{
@* <AssignmentMarkdownEditor ShowHelp="@showhelp" /> *@
<AssignmentMarkdownEditor ShowHelp=@showHelp />
}
</section>
@@ -182,7 +182,7 @@
</div>
}
<button class="btn btn-outline-secondary mx-3" @onclick="() => showHelp = !showHelp">
<button class="btn btn-outline-secondary mx-3" @onclick=toggleHelp>
Toggle Help
</button>
<ConfirmationModal Label="Delete" Class="btn btn-danger" OnConfirmAsync="HandleDelete" />

View File

@@ -64,7 +64,7 @@
private MarkupString preview { get => (MarkupString)Markdown.ToHtml(assignmentContext?.Assignment?.Description ?? ""); }
private string HelpText()
{
var groupNames = string.Join(", " , planner.LocalCourse?.Settings.AssignmentGroups.Select(g => g.Name));
var groupNames = string.Join(", " , planner.LocalCourse?.Settings.AssignmentGroups.Select(g => g.Name) ?? []);
return $@"
SubmissionTypes:
- {AssignmentSubmissionType.ONLINE_TEXT_ENTRY}

View File

@@ -98,12 +98,17 @@
</div>
</div>
@if(existsInCanvas && NeedsToBeUpdatedInCanvas)
@if(
planner.LocalCourse != null
&& existsInCanvas
&& NeedsToBeUpdatedInCanvas
&& assignmentInCanvas != null
)
{
<div class="mx-3 text-body-tertiary">
@Assignment.GetUpdateReason(
(CanvasAssignment)assignmentInCanvas,
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups))
(CanvasAssignment)assignmentInCanvas,
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups))
</div>
}
@if(!existsInCanvas)

View File

@@ -2,7 +2,7 @@
"DetailedErrors": true,
"Logging": {
"LogLevel": {
"Default": "Information",
"Default": "Error",
"Microsoft.AspNetCore": "Warning"
}
}

View File

@@ -1,7 +1,7 @@
{
"Logging": {
"LogLevel": {
"Default": "Trace",
"Default": "Error",
"Microsoft.AspNetCore": "Warning"
}
},

View File

@@ -0,0 +1,10 @@
namespace LocalModels;
public class RubricMarkdownParseException : Exception
{
public RubricMarkdownParseException(string message) : base(message) { }
}
public class AssignmentMarkdownParseException : Exception
{
public AssignmentMarkdownParseException(string message) : base(message) { }
}

View File

@@ -57,89 +57,6 @@ public record LocalAssignment
return yaml;
}
public static LocalAssignment ParseMarkdown(string input)
{
var settingsString = input.Split("---")[0];
var (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt) = parseSettings(settingsString);
var description = input.Split("---\n")[1].Split("## Rubric")[0];
var rubricString = input.Split("## Rubric\n")[1];
var rubric = ParseRubricMarkdown(rubricString);
return new LocalAssignment()
{
Name = name.Trim(),
LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
SubmissionTypes = submissionTypes,
DueAt = dueAt,
LockAt = lockAt,
Rubric = rubric,
Description = description.Trim()
};
}
private static (string name, string assignmentGroupName, List<string> submissionTypes, DateTime dueAt, DateTime? lockAt) parseSettings(string input)
{
var name = extractLabelValue(input, "Name");
var rawLockAt = extractLabelValue(input, "LockAt");
var rawDueAt = extractLabelValue(input, "DueAt");
var localAssignmentGroupName = extractLabelValue(input, "AssignmentGroupName");
var submissionTypes = parseSubmissionTypes(input);
DateTime? lockAt = DateTime.TryParse(rawLockAt, out DateTime parsedLockAt)
? parsedLockAt
: null;
var dueAt = DateTime.TryParse(rawDueAt, out DateTime parsedDueAt)
? parsedDueAt
: throw new QuizMarkdownParseException($"Error with DueAt: {rawDueAt}");
return (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt);
}
private static List<string> parseSubmissionTypes(string input)
{
input = input.Replace("\r\n", "\n");
List<string> submissionTypes = new List<string>();
// Define a regular expression pattern to match the bulleted list items
string startOfTypePattern = @"- (.+)";
Regex regex = new Regex(startOfTypePattern);
var words = input.Split("SubmissionTypes:");
var inputAfterSubmissionTypes = words[1];
string[] lines = inputAfterSubmissionTypes.Split("\n", StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
string trimmedLine = line.Trim();
Match match = regex.Match(trimmedLine);
if (!match.Success)
break;
string type = match.Groups[1].Value.Trim();
submissionTypes.Add(type);
}
return submissionTypes;
}
static string extractLabelValue(string input, string label)
{
string pattern = $@"{label}: (.*?)\n";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}
public string ToMarkdown()
{
var settingsMarkdown = settingsToMarkdown();
@@ -180,39 +97,5 @@ public record LocalAssignment
return builder.ToString();
}
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
{
if (rawMarkdown.Trim() == string.Empty)
return [];
var lines = rawMarkdown.Trim().Split("\n");
var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();
return items;
}
private static RubricItem parseIndividualRubricItemMarkdown(string rawMarkdown)
{
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
var match = Regex.Match(rawMarkdown, pointsPattern);
if (!match.Success)
throw new RubricMarkdownParseException($"points not found: {rawMarkdown}");
var points = int.Parse(match.Groups[1].Value);
var label = string.Join(": ", rawMarkdown.Split(": ").Skip(1));
return new RubricItem()
{
Points = points,
Label = label
};
}
public static LocalAssignment ParseMarkdown(string input) => LocalAssignmentMarkdownParser.ParseMarkdown(input);
}
public class RubricMarkdownParseException : Exception
{
public RubricMarkdownParseException(string message) : base(message) { }
}
public class AssignmentMarkdownParseException : Exception
{
public AssignmentMarkdownParseException(string message) : base(message) { }
}

View File

@@ -0,0 +1,120 @@
using System.Text.RegularExpressions;
namespace LocalModels;
public static class LocalAssignmentMarkdownParser
{
public static LocalAssignment ParseMarkdown(string input)
{
var settingsString = input.Split("---")[0];
var (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt) = parseSettings(settingsString);
var description = input.Split("---\n")[1].Split("## Rubric")[0];
var rubricString = input.Split("## Rubric\n")[1];
var rubric = ParseRubricMarkdown(rubricString);
return new LocalAssignment()
{
Name = name.Trim(),
LocalAssignmentGroupName = localAssignmentGroupName.Trim(),
SubmissionTypes = submissionTypes,
DueAt = dueAt,
LockAt = lockAt,
Rubric = rubric,
Description = description.Trim()
};
}
private static (string name, string assignmentGroupName, List<string> submissionTypes, DateTime dueAt, DateTime? lockAt) parseSettings(string input)
{
var name = extractLabelValue(input, "Name");
var rawLockAt = extractLabelValue(input, "LockAt");
var rawDueAt = extractLabelValue(input, "DueAt");
var localAssignmentGroupName = extractLabelValue(input, "AssignmentGroupName");
var submissionTypes = parseSubmissionTypes(input);
DateTime? lockAt = DateTime.TryParse(rawLockAt, out DateTime parsedLockAt)
? parsedLockAt
: null;
var dueAt = DateTime.TryParse(rawDueAt, out DateTime parsedDueAt)
? parsedDueAt
: throw new QuizMarkdownParseException($"Error with DueAt: {rawDueAt}");
return (name, localAssignmentGroupName, submissionTypes, dueAt, lockAt);
}
private static List<string> parseSubmissionTypes(string input)
{
input = input.Replace("\r\n", "\n");
List<string> submissionTypes = new List<string>();
// Define a regular expression pattern to match the bulleted list items
string startOfTypePattern = @"- (.+)";
Regex regex = new Regex(startOfTypePattern);
var words = input.Split("SubmissionTypes:");
var inputAfterSubmissionTypes = words[1];
string[] lines = inputAfterSubmissionTypes.Split("\n", StringSplitOptions.RemoveEmptyEntries);
foreach (string line in lines)
{
string trimmedLine = line.Trim();
Match match = regex.Match(trimmedLine);
if (!match.Success)
break;
string type = match.Groups[1].Value.Trim();
submissionTypes.Add(type);
}
return submissionTypes;
}
private static string extractLabelValue(string input, string label)
{
string pattern = $@"{label}: (.*?)\n";
Match match = Regex.Match(input, pattern);
if (match.Success)
{
return match.Groups[1].Value;
}
return string.Empty;
}
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
{
if (rawMarkdown.Trim() == string.Empty)
return [];
var lines = rawMarkdown.Trim().Split("\n");
var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();
return items;
}
private static RubricItem parseIndividualRubricItemMarkdown(string rawMarkdown)
{
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
var match = Regex.Match(rawMarkdown, pointsPattern);
if (!match.Success)
throw new RubricMarkdownParseException($"points not found: {rawMarkdown}");
var points = int.Parse(match.Groups[1].Value);
var label = string.Join(": ", rawMarkdown.Split(": ").Skip(1));
return new RubricItem()
{
Points = points,
Label = label
};
}
}

View File

@@ -16,6 +16,7 @@ services:
- ~/projects/faculty/1400/2024_spring_alex/modules:/app/storage/1400
- ~/projects/faculty/1405/2024_spring_alex/modules:/app/storage/1405
- ~/projects/faculty/4620_Distributed/2024Spring/modules:/app/storage/distributed
- ~/projects/faculty/3840_Telemetry/2024Spring_alex/modules:/app/storage/telemetry_and_operations
collector:
image: otel/opentelemetry-collector-contrib