h1 => @exercise ' (external user = link_to_if(policy(@external_user).show?, @external_user.displayname, @external_user) ' ) - 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) .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 - 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.fa-play #submissions-slider.flex-item input type='range' orient='horizontal' list='datapoints' min=0 max=@submissions.length-1 value=0 style="width: 100%" datalist#datapoints - index=0 - @submissions.each do |submission| option data-submission=submission =index - index += 1 #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 td.clickable = this.created_at.strftime("%F %T") - if this.is_a?(Submission) 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&.name_with_extension, run.output].join("\n").strip - else .unit-test-result.unknown-result title=[run.file&.name_with_extension, run.output].join("\n").strip td = @working_times_until[index] if index > 0 if policy(@exercise).detailed_statistics? - elsif this.is_a? UserExerciseIntervention 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')