183 lines
8.8 KiB
Plaintext
183 lines
8.8 KiB
Plaintext
$newline never
|
|
|
|
$# SPDX-FileCopyrightText: 2022 Gregor Kleen <gregor.kleen@ifi.lmu.de>,Steffen Jost <jost@tcs.ifi.lmu.de>,Winnie Ros <winnie.ros@campus.lmu.de>
|
|
$#
|
|
$# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
<section>
|
|
<h2>_{MsgCorrectionSheets}
|
|
|
|
<p>
|
|
_{MsgCourseParticipants nrParticipants}
|
|
|
|
<div .scrolltable .scrolltable--bordered .corrections-overview__section>
|
|
<table .table .table--striped .table--hover>
|
|
<tr .table__row .table__row--head>
|
|
<th .table__th rowspan=2>_{MsgTableSheet}
|
|
$if groupsPossible
|
|
<th .table__th rowspan=2>_{MsgNrSubmittorsTotal}
|
|
<th .table__th rowspan=2>_{MsgNrSubmissionsTotal}
|
|
<th .table__th colspan=2>_{MsgNrSubmissionsNotAssigned}
|
|
<th .table__th rowspan=2>_{MsgNrSubmissionsNotCorrected}
|
|
<th .table__th colspan=3>_{MsgCorrectionTime}
|
|
<tr .table__row .table__row--head>
|
|
<th .table__th>
|
|
<th .table__th>_{MsgGenericNumChange}
|
|
<th .table__th>_{MsgGenericMin}
|
|
<th .table__th>_{MsgGenericAvg}
|
|
<th .table__th>_{MsgGenericMax}
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall sheetName <- reverse orderedSheetNames
|
|
$maybe CorrectionInfo{ciSubmittors, ciSubmissions, ciAssigned, ciCorrected, ciMin, ciTot, ciMax} <- Map.lookup sheetName sheetMap
|
|
<tr .table__row>
|
|
<td .table__td>^{simpleLink (toWidget sheetName) (CSheetR tid ssh csh sheetName SSubsR)}
|
|
$if groupsPossible
|
|
<td .table__td>#{ciSubmittors}
|
|
<td .table__td>#{ciSubmissions}
|
|
$maybe ((splus,sfailed),_,_) <- Map.lookup sheetName assignment
|
|
$if 0 < Set.size sfailed
|
|
<td .table__td>#{ciSubmissions - ciAssigned}
|
|
<td .table__td .alert-danger>(-#{show (Set.size splus)}, failed: #{show (Set.size sfailed)})
|
|
$elseif 0 < Set.size splus
|
|
<td .table__td>#{ciSubmissions - ciAssigned}
|
|
<td .table__td .alert-info>(-#{show (Set.size splus)})
|
|
$else
|
|
<td .table__td>#{ciSubmissions - ciAssigned}
|
|
<td .table__td>
|
|
$nothing
|
|
<td .table__td>#{ciSubmissions - ciAssigned}
|
|
<td .table__td>
|
|
<td .table__td>#{ciSubmissions - ciCorrected}
|
|
<td .table__td>#{showDiffDays ciMin}
|
|
<td .table__td>#{showAvgsDays ciTot ciCorrected}
|
|
<td .table__td>#{showDiffDays ciMax}
|
|
|
|
<section>
|
|
<h2>_{MsgCorrectionCorrectors}
|
|
|
|
<div .scrolltable .scrolltable--bordered>
|
|
<table .table .table--striped .table--hover>
|
|
<tr .table__row .table__row--head>
|
|
<th .table__th rowspan=2>_{MsgTableCorrector}
|
|
<th .table__th colspan=2>_{MsgGenericAll}
|
|
<th .table__th rowspan=2>_{MsgCorDeficitProportion}
|
|
<th .table__th colspan=3>_{MsgCorrectionTime}
|
|
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall shn <- orderedSheetNames
|
|
<th .table__th colspan=5>
|
|
^{simpleLink (toWidget shn) (CSheetR tid ssh csh shn SShowR)}
|
|
<tr .table__row .table__row--head>
|
|
<th .table__th>_{MsgNrSubmissionsTotal}
|
|
<th .table__th>_{MsgNrSubmissionsNotCorrected}
|
|
<th .table__th>_{MsgGenericMin}
|
|
<th .table__th>_{MsgGenericAvg}
|
|
<th .table__th>_{MsgGenericMax}
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall _shn <- orderedSheetNames
|
|
<th .table__th>_{MsgTableCorProportion}
|
|
<th .table__th>_{MsgNrSubmissionsTotalShort}
|
|
<th .table__th>_{MsgGenericNumChange}
|
|
<th .table__th>_{MsgNrSubmissionsNotCorrectedShort}
|
|
<th .table__th>_{MsgGenericAvg}
|
|
$forall (CorrectionInfo{ciCorrector, ciSubmissions=ciSubmissionsNr, ciCorrected, ciMin, ciTot, ciMax}) <- corrInfos
|
|
$with (nameW,loadM, name) <- getCorrector ciCorrector
|
|
$# TODO: User proper Tooltips instead of title attribute here, once Tooltips work with tables
|
|
<tr .table__row title="#{name}">
|
|
<td .table__td>^{nameW}
|
|
<td .table__td>#{ciSubmissionsNr}
|
|
$with total <- ciSubmissions corrMapSum
|
|
$if total > 0
|
|
\ (#{textPercent' True 0 ciSubmissionsNr total})
|
|
<td .table__td .heated style="--hotness: #{heat ciSubmissionsNr ciCorrected}">#{ciSubmissionsNr - ciCorrected}
|
|
<td .table__td>
|
|
$maybe deficit <- getCorrDeficit ciCorrector
|
|
#{rationalToFixed3 deficit}
|
|
<td .table__td>#{showDiffDays ciMin}
|
|
<td .table__td>#{showAvgsDays ciTot ciCorrected}
|
|
<td .table__td>#{showDiffDays ciMax}
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall shn <- orderedSheetNames
|
|
$maybe CorrectionInfo{ciSubmissions=sheetSubmissionsNr} <- Map.lookup shn sheetMap
|
|
<td .table__td>
|
|
$maybe SheetCorrector{sheetCorrectorLoad, sheetCorrectorState} <- Map.lookup shn loadM
|
|
#{showCompactCorrectorLoad sheetCorrectorLoad sheetCorrectorState}
|
|
$if sheetCorrectorState == CorrectorNormal
|
|
$maybe Load{byProportion=total} <- Map.lookup shn sheetLoad
|
|
$if total > 0
|
|
\ (#{textPercent' True 0 (byProportion sheetCorrectorLoad) total})
|
|
$maybe CorrectionInfo{ciSubmissions,ciCorrected,ciTot} <- getCorrSheetStatus ciCorrector shn
|
|
<td .table__td>#{ciSubmissions}
|
|
$if sheetSubmissionsNr > 0
|
|
\ (#{textPercent' True 0 ciSubmissions sheetSubmissionsNr})
|
|
$maybe nrNew <- getCorrNewAssignment ciCorrector shn
|
|
$# <td .table__td>#{ciAssigned} `ciSubmissions` is here always identical to `ciAssigned` and also works for `ciCorrector == Nothing`. ciAssigned only useful in aggregate maps like `sheetMap`
|
|
<td .table__td .alert-info>(+#{nrNew})
|
|
$nothing
|
|
<td .table__td>
|
|
<td .table__td .heated style="--hotness: #{heat ciSubmissions ciCorrected}">#{ciSubmissions - ciCorrected}
|
|
<td .table__td>#{showAvgsDays ciTot ciCorrected}
|
|
$nothing
|
|
<td .table__td>
|
|
<td .table__td>
|
|
<td .table__td>
|
|
<td .table__td>
|
|
$if not (null orderedSheetNames)
|
|
<tr .table__row>
|
|
<td .table__th>Σ
|
|
$with ciSubmissionsNr <- ciSubmissions corrMapSum
|
|
$with ciCorrectedNr <- ciCorrected corrMapSum
|
|
<td .table__th>#{ciSubmissionsNr}
|
|
<td .table__td .heated style="--hotness: #{heat ciSubmissionsNr ciCorrectedNr}">#{ciSubmissionsNr - ciCorrectedNr}
|
|
<td .table__th>#{ciCorrected corrMapSum}
|
|
<td .table__th>#{showDiffDays (ciMin corrMapSum)}
|
|
<td .table__th>#{showAvgsDays (ciTot corrMapSum) (ciCorrected corrMapSum)}
|
|
<td .table__th>#{showDiffDays (ciMax corrMapSum)}
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall shn <- orderedSheetNames
|
|
$maybe CorrectionInfo{ciSubmissions} <- Map.lookup shn sheetMap
|
|
<td .table__th>#{getLoadSum shn}
|
|
<td .table__th>#{ciSubmissions}
|
|
<td .table__td colspan=3>^{simpleLinkI (SomeMessage MsgCorrectorsChange) (CSheetR tid ssh csh shn SEditR)}
|
|
|
|
$if not (null assignment)
|
|
<tr .table__row>
|
|
<td>
|
|
<td colspan=2>
|
|
<td>
|
|
<td colspan=3>
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall shn <- orderedSheetNames
|
|
<td .table__td colspan=5>
|
|
$maybe btnView <- sheetBtnViews !? shn
|
|
$if has (ix shn) assignment
|
|
^{fvWidget btnView}
|
|
|
|
<tr .table__row .table__row--head>
|
|
<td>
|
|
<td colspan=2>
|
|
<td>
|
|
<td colspan=3>
|
|
$# Always iterate over orderedSheetNames for consistent sorting! Newest first, except in this table
|
|
$forall shn <- orderedSheetNames
|
|
<td .table__th colspan=5>
|
|
^{simpleLink (toWidget shn) (CSheetR tid ssh csh shn SShowR)}
|
|
|
|
<p .explanation>
|
|
_{MsgAssignSubmissionsRandomWarning}
|
|
|
|
$if not (null assignment)
|
|
$maybe btnView <- btnViews !? Nothing
|
|
<section>
|
|
<p>
|
|
_{MsgAssignSubmissionsAssignableSheets}
|
|
<div .corrections-overview__section>
|
|
<ul>
|
|
$forall shn <- assignSheetNames'
|
|
<li>
|
|
<a href=@{CSheetR tid ssh csh shn SShowR}>
|
|
#{shn}
|
|
<p>
|
|
^{fvWidget btnView}
|
|
|