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
  - initial_files = current_submission.files.to_a

  - 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.reject!(&:blank?)
  - file_types.reject!(&:blank?)

  .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 id='play-button'
      span.fa-solid.fa-play
    #submissions-slider.flex-item
      input type='range' orient='horizontal' list='datapoints' min=0 max=all_files.length-1 value=0 style="width: 100%"
      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, index|
            - highlight = (index > 0 and @deltas.present? and @deltas[index] == 0 and this.created_at.to_s != @all_events[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.includes(:file).order("files.name").each do |run|
                    - if run.passed
                      .unit-test-result.positive-result title=[run.file&.filepath, run.log].join.strip
                    - else
                      .unit-test-result.unknown-result title=[run.file&.filepath, run.log].join.strip
                td = @working_times_until[index] if index > 0 if 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[index] if index > 0 if 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);
      div#progress_chart.col-lg-12
        .graph-functions-2

- else
  p = t('.no_data_available')
