%h1 Manage problems %p= link_to '[Back to problem list]', problems_path = form_with url: do_manage_problems_path, class: 'align-items-center' do |f| .card.border-primary.mb-2 .card-header.text-bg-primary.border-primary Action .card-body What do you want to do to the selected problem? %br/ (You can shift-click to select a range of problems) .row .col-md-6 .row.my-3.align-items-center .col-md-auto .form-check = f.label :change_date_added, 'Change "Date added" to' = f.check_box :change_date_added, class: 'form-check-input' .col-md-auto = f.text_field :date_added, class: 'form-control' .row.mb-3.align-items-center .col-md-auto .form-check = f.label :change_enable, 'Set "Available" to' = f.check_box :change_enable, class: 'form-check-input' .col-md-auto = f.radio_button :enable, "yes", class: 'form-check-input' = f.label :enable_yes, "yes" .col-md-auto = f.radio_button :enable, "no", class: 'form-check-input' = f.label :enable_no, "no" .row.mb-3.align-items-center .col-md-auto .form-check = f.label :add_group, 'Add selected problems to user group' = f.check_box :add_group, class: 'form-check-input' .col-md-auto = f.select "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), {}, class: 'select2 form-control' .col-md-6 .row.mb-3.align-items-center .col-md-auto .form-check = f.label :add_tags, 'Add the following tags to the selected problems' = f.check_box :add_tags, class: 'form-check-input' .col-md-auto = f.select "tag_ids", options_from_collection_for_select( Tag.all, 'id','name'), {},class: 'select2', multiple: true, data: {placeholder: 'Select tags by clicking', width: "400px"} - if GraderConfiguration.multicontests? .row.mb-3.align-items-center .col-md-auto .form-check = f.label :add_contest, 'Add selected problems to contest' = f.check_box :add_contest, class: 'form-check-input' .col-md-auto = f.select "contest_id", options_from_collection_for_select( Contest.all, :id,:title), {}, class: 'select2 form-control' .row.mb-3 .col-auto = f.submit :go, class: 'btn btn-primary' -# %ul.form-inline %li Change "Date added" to .input-group.date = text_field_tag :date_added, class: 'form-control' %span.input-group-addon %span.glyphicon.glyphicon-calendar -# = select_date Date.current, :prefix => 'date_added'     = submit_tag 'Change', :name => 'change_date_added', class: 'btn btn-primary btn-sm' %li Set "Available" to = submit_tag 'True', :name => 'enable_problem', class: 'btn btn-primary btn-sm' = submit_tag 'False', :name => 'disable_problem', class: 'btn btn-primary btn-sm' - if GraderConfiguration.multicontests? %li Add selected problems to contest = select("contest","id",Contest.all.collect {|c| [c.title, c.id]}) = submit_tag 'Add', :name => 'add_to_contest', class: 'btn btn-primary btn-sm' %li Add selected problems to user group = select_tag "group_id", options_from_collection_for_select( Group.all, 'id','name',params[:group_name]), id: 'group_name',class: 'select2' = submit_tag 'Add', name: 'add_group', class: 'btn btn-primary' %li Add the following tags to the selected problems = select_tag "tag_ids", options_from_collection_for_select( Tag.all, 'id','name'), id: 'tags_name',class: 'select2', multiple: true, data: {placeholder: 'Select tags by clicking', width: "200px"} = submit_tag 'Add', name: 'add_tags', class: 'btn btn-primary' %table.table.table-hover.datatable %thead %tr{style: "text-align: left;"} %th= check_box_tag 'select_all' %th Name %th Full name %th Tags %th Available %th Date added - if GraderConfiguration.multicontests? %th Contests %tbody - num = 0 - for problem in @problems - num += 1 %tr{:id => "row-prob-#{problem.id}", :name=> "prob-#{problem.id}"} %td= check_box_tag "prob-#{problem.id}-#{num}" %td= problem.name %td= problem.full_name %td - problem.tags.each do |t| %span.label.label-default= t.name %td= problem.available %td= problem.date_added - if GraderConfiguration.multicontests? %td - problem.contests.each do |contest| = "(#{contest.name} [#{link_to 'x', :action => 'remove_contest', :id => problem.id, :contest_id => contest.id }])" :javascript $(document).on('import-map-loaded', function() { function shiftclick(start,stop,value) { $('tr input').each( function(id,input) { var $input=$(input); var iid=parseInt($input.attr('id').split('-')[2]); if(iid>=start&&iid<=stop){ $input.prop('checked',value) } }); } $('tr input').click( function(e) { if (e.shiftKey) { stop = parseInt($(this).attr('id').split('-')[2]); var orig_stop = stop if (typeof start !== 'undefined') { if (start > stop) { var tmp = start; start = stop; stop = tmp; } shiftclick(start,stop,$(this).is(':checked') ) } start = orig_stop } else { start = parseInt($(this).attr('id').split('-')[2]); } }); $('.input-group.date').datetimepicker({ format: 'DD/MMM/YYYY', showTodayButton: true, locale: 'en', widgetPositioning: {horizontal: 'auto', vertical: 'bottom'}, }); $('.datatable').DataTable({ paging: false }); $('.select2').select2(); new TempusDominus(document.getElementById('date_added'), { display: { icons: { time: 'mi mi-td-time', date: 'mi mi-td-date', up: 'mi mi-td-up', down: 'mi mi-td-down', previous: 'bi bi-chevron-left', next: 'bi bi-chevron-right', today: 'bi bi-calendar-check', clear: 'bi bi-trash', close: 'bi bi-x', }, } }); });