112 lines
5.0 KiB
Plaintext
112 lines
5.0 KiB
Plaintext
h1
|
|
=> @exercise
|
|
' (external user
|
|
= link_to_if(policy(@external_user).show?, @external_user.displayname, @external_user)
|
|
' )
|
|
- submissions = @all_events.filter {|event| event.is_a? Submission }
|
|
- current_submission = submissions.first
|
|
- if current_submission
|
|
- all_files = []
|
|
- file_types = Set.new
|
|
- submissions.each do |submission|
|
|
- submission.files.each do |file|
|
|
- file_types.add(ActiveSupport::JSON.encode(file.file_type))
|
|
- all_files.push(submission.files)
|
|
- all_files.compact_blank!
|
|
- file_types.reject!(&:blank?) # rubocop:disable Rails/CompactBlank because it's a set
|
|
|
|
.d-none#data data-submissions=ActiveSupport::JSON.encode(submissions) data-files=ActiveSupport::JSON.encode(all_files) data-file-types=ActiveSupport::JSON.encode(file_types)
|
|
|
|
#stats-editor.row
|
|
- index = 0
|
|
- all_files.each do |files|
|
|
.files class=(@exercise.hide_file_tree ? 'd-none col-sm-3' : 'col-sm-3') data-index=index data-entries=FileTree.new(files).to_js_tree_in_json
|
|
- index += 1
|
|
div class=(@exercise.hide_file_tree ? 'col-sm-12' : 'col-sm-9')
|
|
#current-file.editor
|
|
|
|
.flex-container
|
|
button.btn.btn-secondary#play-button
|
|
span.fa-solid.fa-play
|
|
#submissions-slider.flex-item
|
|
input.w-100 type='range' orient='horizontal' list='datapoints' value=0 min=0 max=all_files.length - 1
|
|
datalist#datapoints
|
|
- index = 0
|
|
- submissions.each do |submission|
|
|
- next if submission.files.blank?
|
|
option data-submission=submission
|
|
= index
|
|
- index += 1
|
|
- if policy(@exercise).detailed_statistics?
|
|
.bg-body-secondary.w-100.p-2.mb-4.align-items-center.d-flex.justify-content-between
|
|
- if @show_autosaves
|
|
span.ps-1.pb-1
|
|
i.fa-solid.fa-circle-info.align-middle
|
|
small.me-5.ms-1 = t('.toggle_status_on')
|
|
= link_to t('.toggle_autosave_off'), statistics_external_user_exercise_path(show_autosaves: false), class: 'btn btn-outline-contrast float-end btn-sm'
|
|
- else
|
|
span.ps-1.pb-1
|
|
i.fa-solid.fa-circle-info.align-middle
|
|
small.me-5.ms-1 = t('.toggle_status_off')
|
|
= link_to t('.toggle_autosave_on'), statistics_external_user_exercise_path(show_autosaves: true), class: 'btn btn-outline-contrast float-end btn-sm'
|
|
#timeline
|
|
.table-responsive
|
|
table.table
|
|
thead
|
|
tr
|
|
th.header = t('.time')
|
|
th.header = t('.cause')
|
|
th.header = t('.score')
|
|
th.header = t('.tests')
|
|
th.header = t('.time_difference') if policy(@exercise).detailed_statistics?
|
|
tbody
|
|
- @all_events.each_with_index do |this, event_index|
|
|
- highlight = event_index.positive? && @deltas.present? && @deltas[event_index].zero? && this.created_at.to_s != @all_events[event_index - 1].created_at.to_s
|
|
- row_classes = ''
|
|
- row_classes += ' highlight' if highlight
|
|
- row_classes += ' before_deadline' if this.is_a?(Submission) && this.before_deadline?
|
|
- row_classes += ' within_grace_period' if this.is_a?(Submission) && this.within_grace_period?
|
|
- row_classes += ' after_late_deadline' if this.is_a?(Submission) && this.after_late_deadline?
|
|
tr data-id=this.id class=row_classes
|
|
- if this.is_a?(Submission)
|
|
td class=(this.files.present? ? 'clickable' : '')
|
|
= this.created_at.strftime('%F %T')
|
|
td = this.cause
|
|
td = this.score
|
|
td.align-middle
|
|
-this.testruns.sort_by {|t| [t.file&.name ? 0 : 1, t.file&.name] }.each do |run|
|
|
- if run.passed
|
|
.unit-test-result.positive-result title=[run.file&.filepath, run.log].join("\n").strip
|
|
- else
|
|
.unit-test-result.unknown-result title=[run.file&.filepath, run.log].join("\n").strip
|
|
td = @working_times_until[event_index] if event_index.positive? && policy(@exercise).detailed_statistics?
|
|
- elsif this.is_a? UserExerciseIntervention
|
|
td = this.created_at.strftime('%F %T')
|
|
td = this.intervention.name
|
|
td
|
|
td
|
|
td = @working_times_until[event_index] if event_index.positive? && policy(@exercise).detailed_statistics?
|
|
small
|
|
b
|
|
= t('.legend')
|
|
.container.px-0.border
|
|
.row.w-100.mx-0
|
|
.col-sm-3.py-2
|
|
= t('.no_deadline')
|
|
.col-sm-3.before_deadline.py-2
|
|
= t('.before_deadline')
|
|
.col-sm-3.within_grace_period.py-2
|
|
= t('.within_grace_period')
|
|
.col-sm-3.after_late_deadline.py-2
|
|
= t('.after_late_deadline')
|
|
- unless current_user.try(:admin?)
|
|
p.mt-2 = t('.filter')
|
|
- if current_user.try(:admin?)
|
|
p = t('.addendum', delta: StatisticsHelper::WORKING_TIME_DELTA_IN_SECONDS / 60)
|
|
.d-none#wtimes data-working_times=ActiveSupport::JSON.encode(@working_times_until)
|
|
#progress_chart.col-lg-12
|
|
.graph-functions-2
|
|
|
|
- else
|
|
p = t('.no_data_available')
|