Add admin UI to assign tips to exercises

This commit is contained in:
Sebastian Serth
2020-10-14 12:25:52 +02:00
parent 44ab28d6fe
commit 2678d9ecdf
14 changed files with 232 additions and 33 deletions

View File

@@ -0,0 +1,9 @@
- tips = Tip.order(:title)
form#tip-selection
.form-group
span.badge = t('activerecord.attributes.exercise_tip.tip')
.mb-2
= collection_select({}, :tip_ids, tips, :id, :to_s, {}, {id: 'add-tip-list', class: 'form-control', multiple: true})
button.btn.btn-primary#add-tips = t('exercises.form.add_tips')

View File

@@ -1,3 +1,9 @@
- content_for :head do
// Force a full page reload, see https://github.com/turbolinks/turbolinks/issues/326.
Otherwise, code might not be highlighted correctly (race condition)
meta name='turbolinks-visit-control' content='reload'
= javascript_pack_tag('sortable', 'data-turbolinks-track': true)
- execution_environments = ExecutionEnvironment.where('file_type_id IS NOT NULL').select(:file_type_id, :id)
- file_types = FileType.where('file_extension IS NOT NULL').select(:file_extension, :id)
@@ -71,6 +77,19 @@
td = b.object.tag.name
td = number_field "tag_factors[#{b.object.tag.id}]", :factor, :value => b.object.factor, in: 1..10, step: 1, class: 'form-control-sm'
h2 = t('.tips')
ul.list-unstyled.card-group
li.card
.card-header role="tab" id="tip-heading"
a.file-heading data-toggle="collapse" href="#tip-collapse"
div.clearfix role="button"
span = t('exercises.form.click_to_collapse')
.card-collapse.collapse.mx-2 id="tip-collapse" role="tabpanel"
= f.hidden_field(:tips, id: "tips-json", value: "")
.list-group.nested-sortable-list.mt-2#tip-list
= render(partial: 'tips/sortable_tip', collection: @tips, as: :exercise_tip)
button.btn.btn-outline-primary.my-2.w-100 type='button' data-toggle='modal' data-target='#add-tips-modal' = t('.add_tips')
h2 = t('activerecord.attributes.exercise.files')
ul#files.list-unstyled
= f.fields_for :files do |files_form|
@@ -81,3 +100,5 @@
= render('file_form', f: files_form)
.actions = render('shared/submit_button', f: f, object: @exercise)
= render('shared/modal', id: 'add-tips-modal', title: t('.add_tips'), template: 'exercises/_add_tip_modal')

View File

@@ -38,6 +38,9 @@ h1
= row(label: 'exercise.embedding_parameters', class: 'mb-4') do
= content_tag(:input, nil, class: 'form-control mb-4', readonly: true, value: @exercise.unpublished? ? t('exercises.show.is_unpublished') : embedding_parameters(@exercise))
- unless @tips.blank?
= render(partial: 'tips_content')
h2.mt-4 = t('activerecord.attributes.exercise.files')
ul.list-unstyled#files

View File

@@ -1,5 +1,5 @@
- tip = exercise_tip.tip
.card class="#{exercise_tip.parent_exercise_tip_id? ? 'mt-2' : ''}"
.card class="#{exercise_tip.parent_exercise_tip_id? || exercise_tip.rank != 1 ? 'mt-2' : ''}"
.card-header.p-2 id="tip-heading-#{exercise_tip.id}" role="tab"
.card-title.mb-0
a.collapsed aria-controls="tip-collapse-#{exercise_tip.id}" aria-expanded="false" data-parent="#tips" data-toggle="collapse" href="#tip-collapse-#{exercise_tip.id}"
@@ -11,9 +11,10 @@
= ": #{tip.title}" if tip.title?
.card.card-collapse.collapse id="tip-collapse-#{exercise_tip.id}" aria-labelledby="tip-heading-#{exercise_tip.id}" role="tabpanel" data-exercise-tip-id=exercise_tip.id
.card-body.p-3
h5
= t('exercises.implement.tips.description')
= render_markdown(tip.description)
- if tip.description?
h5
= t('exercises.implement.tips.description')
= render_markdown(tip.description)
- if tip.example?
h5
= t('exercises.implement.tips.example')

View File

@@ -0,0 +1,8 @@
- tip = exercise_tip.tip
.list-group-item.d-block data-tip-id=tip.id data-id=exercise_tip.id
span.fa.fa-bars.mr-3
= tip.to_s
a.fa.fa-eye.ml-2 href=tip_path(tip) target='_blank'
a.fa.fa-times.ml-2.remove-tip href='#'
.list-group.nested-sortable-list class="#{exercise_tip.children.present? ? 'mt-3' : ''}"
= render(partial: 'tips/sortable_tip', collection: exercise_tip.children, as: :exercise_tip)