@@ -55,6 +55,8 @@ $(function() {
|
|||||||
var submissions = $('#data').data('submissions');
|
var submissions = $('#data').data('submissions');
|
||||||
var files = $('#data').data('files');
|
var files = $('#data').data('files');
|
||||||
var filetypes = $('#data').data('file-types');
|
var filetypes = $('#data').data('file-types');
|
||||||
|
var playButton = $('#play-button');
|
||||||
|
var playInterval = undefined;
|
||||||
|
|
||||||
editor = ace.edit('current-file');
|
editor = ace.edit('current-file');
|
||||||
editor.setShowPrintMargin(false);
|
editor.setShowPrintMargin(false);
|
||||||
@@ -88,6 +90,23 @@ $(function() {
|
|||||||
showActiveFile();
|
showActiveFile();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
playButton.on('click', function(event) {
|
||||||
|
if (playInterval == undefined) {
|
||||||
|
playInterval = setInterval(function() {
|
||||||
|
if ($.isController('exercises') && $('#timeline').isPresent() && slider.val() < submissions.length - 1) {
|
||||||
|
slider.val(parseInt(slider.val()) + 1);
|
||||||
|
slider.change()
|
||||||
|
} else {
|
||||||
|
clearInterval(playInterval);
|
||||||
|
}
|
||||||
|
}, 5000);
|
||||||
|
playButton.find('span.fa').removeClass('fa-play').addClass('fa-pause')
|
||||||
|
} else {
|
||||||
|
clearInterval(playInterval);
|
||||||
|
playButton.find('span.fa').removeClass('fa-pause').addClass('fa-play')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
active_file = files[0][0]
|
active_file = files[0][0]
|
||||||
initializeFileTree();
|
initializeFileTree();
|
||||||
showActiveFile();
|
showActiveFile();
|
||||||
|
@@ -10,3 +10,19 @@
|
|||||||
.clickable {
|
.clickable {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-container {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-item {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#play-button {
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
margin-right: 15px;
|
||||||
|
margin-top: auto;
|
||||||
|
margin-bottom: auto;
|
||||||
|
}
|
||||||
|
@@ -53,7 +53,7 @@ class Exercise < ActiveRecord::Base
|
|||||||
(SELECT user_id,
|
(SELECT user_id,
|
||||||
id,
|
id,
|
||||||
(created_at - lag(created_at) over (PARTITION BY user_id
|
(created_at - lag(created_at) over (PARTITION BY user_id
|
||||||
ORDER BY id)) AS working_time
|
ORDER BY created_at)) AS working_time
|
||||||
FROM submissions
|
FROM submissions
|
||||||
WHERE exercise_id=#{id}) AS foo) AS bar
|
WHERE exercise_id=#{id}) AS foo) AS bar
|
||||||
GROUP BY user_id
|
GROUP BY user_id
|
||||||
|
@@ -21,14 +21,17 @@ h1 = "#{@exercise} (external user #{@external_user})"
|
|||||||
div class=(@exercise.hide_file_tree ? 'col-sm-12' : 'col-sm-9')
|
div class=(@exercise.hide_file_tree ? 'col-sm-12' : 'col-sm-9')
|
||||||
#current-file.editor
|
#current-file.editor
|
||||||
|
|
||||||
#submissions-slider
|
.flex-container
|
||||||
input type='range' orient='horizontal' list='datapoints' min=0 max=submissions.length-1 value=0
|
button.btn.btn-default id='play-button'
|
||||||
datalist#datapoints
|
span.fa.fa-play
|
||||||
- index=0
|
#submissions-slider.flex-item
|
||||||
- submissions.each do |submission|
|
input type='range' orient='horizontal' list='datapoints' min=0 max=submissions.length-1 value=0
|
||||||
option data-submission=submission
|
datalist#datapoints
|
||||||
=index
|
- index=0
|
||||||
- index += 1
|
- submissions.each do |submission|
|
||||||
|
option data-submission=submission
|
||||||
|
=index
|
||||||
|
- index += 1
|
||||||
|
|
||||||
#timeline
|
#timeline
|
||||||
.table-responsive
|
.table-responsive
|
||||||
|
@@ -1,2 +1,18 @@
|
|||||||
h1 = @user
|
h1 = t('.title')
|
||||||
H2 = 'Hallo'
|
|
||||||
|
- exercises = Exercise.where(:id => @user.submissions.group(:exercise_id).select(:exercise_id).distinct())
|
||||||
|
|
||||||
|
.table-responsive
|
||||||
|
table.table
|
||||||
|
thead
|
||||||
|
tr
|
||||||
|
- ['.exercise', '.score', '.runs', '.worktime'].each do |title|
|
||||||
|
th.header = t(title)
|
||||||
|
tbody
|
||||||
|
- exercises.each do |exercise|
|
||||||
|
- submissions = @user.submissions.where(:exercise_id => exercise.id, :cause => ['submit', 'run'])
|
||||||
|
tr
|
||||||
|
td = link_to exercise, controller: "exercises", action: "statistics", external_user_id: @user.id, id: exercise.id
|
||||||
|
td = submissions.maximum(:score) or 0
|
||||||
|
td = submissions.count
|
||||||
|
td = exercise.average_working_time_for(@user.id) or 0
|
||||||
|
@@ -259,6 +259,13 @@ de:
|
|||||||
time: Zeit
|
time: Zeit
|
||||||
cause: Grund
|
cause: Grund
|
||||||
score: Punktzahl
|
score: Punktzahl
|
||||||
|
external_users:
|
||||||
|
statistics:
|
||||||
|
title: Statistiken für Externe Benutzer
|
||||||
|
exercise: Übung
|
||||||
|
score: Bewertung
|
||||||
|
runs: Versuche
|
||||||
|
worktime: Arbeitszeit
|
||||||
files:
|
files:
|
||||||
roles:
|
roles:
|
||||||
main_file: Hauptdatei
|
main_file: Hauptdatei
|
||||||
|
@@ -259,6 +259,13 @@ en:
|
|||||||
time: Time
|
time: Time
|
||||||
cause: Cause
|
cause: Cause
|
||||||
score: Score
|
score: Score
|
||||||
|
external_users:
|
||||||
|
statistics:
|
||||||
|
title: External User Statistics
|
||||||
|
exercise: Exercise
|
||||||
|
score: Score
|
||||||
|
runs: Runs
|
||||||
|
worktime: Working Time
|
||||||
files:
|
files:
|
||||||
roles:
|
roles:
|
||||||
main_file: Main File
|
main_file: Main File
|
||||||
|
Reference in New Issue
Block a user