Add UI for adding exercises to collection

This commit is contained in:
Maximilian Grundke
2018-07-13 15:42:26 +02:00
parent 7da7bd5f3a
commit 5ea30b5625
6 changed files with 48 additions and 8 deletions

View File

@ -130,6 +130,31 @@ $(function() {
var list = $("#sortable");
list.sortable();
list.disableSelection();
var addExercisesForm = $('#exercise-selection');
var addExercisesButton = $('#add-exercises');
var collectContainedExercises = function () {
return exerciseList.find('tbody > tr').toArray().map(function (item) {return $(item).data('id')});
}
addExercisesButton.on('click', function (e) {
e.preventDefault();
var collectionExercises = collectContainedExercises();
var selectedExercises = addExercisesForm.find('select')[0].selectedOptions;
for (var i = 0; i < selectedExercises.length; i++) {
var exercise = {id: selectedExercises[i].value, title: selectedExercises[i].label}
if (collectionExercises.indexOf(exercise.id) === -1) {
// only add exercises that are not already contained in the collection
var template = '<tr data-id="' + exercise.id + '">' +
'<td><span class="fa fa-bars"></span></td>' +
'<td>' + exercise.title + '</td>' +
'<td><a href="/exercises/' + exercise.id + '"><%= I18n.t('shared.show') %></td>' +
'<td><a class="remove-exercise" href="#"><%= I18n.t('shared.destroy') %></td></tr>';
exerciseList.find('tbody').append(template);
}
}
});
}
}
});

View File

@ -67,3 +67,7 @@ rect.value-bar {
padding: 14px;
text-align: center;
}
#exercise-list {
margin-bottom: 20px;
}

View File

@ -0,0 +1,8 @@
- exercises = Exercise.order(:title)
form#exercise-selection
.form-group
span.label = t('activerecord.attributes.exercise_collections.exercises')
= collection_select({}, :exercise_ids, exercises, :id, :title, {}, {class: 'form-control', multiple: true})
button.btn.btn-primary#add-exercises = t('exercise_collections.form.add_exercises')

View File

@ -1,4 +1,3 @@
- exercises = Exercise.order(:title)
- users = InternalUser.order(:name)
= form_for(@exercise_collection, multipart: true) do |f|
@ -12,9 +11,6 @@
.form-group
= f.label(t('activerecord.attributes.exercise_collections.user'))
= f.collection_select(:user_id, users, :id, :name, {}, {class: 'form-control'})
.form-group
= f.label(t('activerecord.attributes.exercise_collections.exercises'))
= f.collection_select(:exercise_ids, exercises, :id, :title, {}, {class: 'form-control', multiple: true})
.table-responsive#exercise-list
table.table
@ -22,17 +18,18 @@
tr
th
th = t('activerecord.attributes.exercise_collection_item.exercise')
th = t('activerecord.attributes.exercise.user')
th colspan=2 = t('shared.actions')
tbody#sortable
- @exercise_collection.items.order(:position).each do |item|
tr
tr data-id=item.exercise.id
td
span.fa.fa-bars
td = item.exercise.title
td = item.exercise.author
td = link_to(t('shared.show'), item.exercise)
td
a.remove-exercise href="#" = t('shared.destroy')
a.remove-exercise href='#' = t('shared.destroy')
button.btn.btn-primary type='button' data-toggle='modal' data-target='#add-exercise-modal' = t('exercise_collections.form.add_exercises')
.actions = render('shared/submit_button', f: f, object: @exercise_collection)
= render('shared/modal', id: 'add-exercise-modal', title: t('.add_exercises'), template: 'exercise_collections/_add_exercise_modal')

View File

@ -784,3 +784,6 @@ de:
files: "Dateien"
users: "Benutzer"
integrations: "Integrationen"
exercise_collections:
form:
add_exercises: "Add Exercises"

View File

@ -784,3 +784,6 @@ en:
files: "Files"
users: "Users"
integrations: "Integrations"
exercise_collections:
form:
add_exercises: "Aufgaben hinzufügen"