testmycode/tmc-server

View on GitHub
app/views/courses/manage_unlocks.html.erb

Summary

Maintainability
Test Coverage
<script type="text/javascript">
  var remove_condition = function(e) {
    if ($(e).parent("div").children("input").size() > 1) {
      $(e).prev().remove();
      $(e).next().remove();
      $(e).remove(); // Remove input, br and self
    } else {
      $(e).prev().val(""); // Clear input
    }
  };

  var unlock_condition_counts = {};
  var add_unlock_condition = function (selector, group_param) {
    var current_unlock_condition_count = unlock_condition_counts[group_param];
    var input_name = group_param + "[" + current_unlock_condition_count + "]";
    var input_id = input_name.replace("][", "_").replace("[", "_").replace("]", "");

    $(selector).append(
      "<input type='text'" +
      "name='" + input_name + "'" +
      "id='" + input_id + "' /> " +
      "<a href='javascript:void(0);'" +
      "onclick='remove_condition(this)'" +
      "class='btn btn-sm btn-link remove-condition-button'>remove</a><br/>"
    );

    unlock_condition_counts[group_param]++;
  };
</script>

<h1>Edit unlock conditions</h1>
<%= form_tag save_unlocks_organization_course_path, method: :post do %>
  <table class="exercise-list table table-hover">
    <thead>
    <tr>
      <th>Exercise group</th>
      <th>Exercise</th>
      <th>Unlock conditions</th>
    </tr>
    </thead>
    <tbody>
    <% @course.exercise_groups.each do |group| %>
      <tr>
        <td>
          <%= group.name %><br/>
        </td>
        <td>
          <%= render partial: 'exercises/list_single',
            collection: group.exercises(false),
            as: :exercise,
            layout: 'exercises/simple_list_layout',
            locals: {
              unlocks: @unlocks
            }
          %>
        </td>
        <td>
          <%
             if group.name.empty?
               param_array = 'empty_group'
             else
               param_array = "group[#{group.name}]"
             end

             group_unlock_conditions = group.group_unlock_conditions
             group_unlock_conditions = [''] if group_unlock_conditions.empty? # Always have at least one input field
          %>
          <script type="text/javascript">
            unlock_condition_counts["<%= param_array %>"] = <%= group_unlock_conditions.length %>
          </script>
          <div id="unlock-conditions-<%= group.name %>">
            <% group_unlock_conditions.each_with_index do |condition, i| %>
              <%= text_field_tag "#{param_array}[#{i}]", condition %>
              <a href='javascript:void(0);' onclick='remove_condition(this)'
                 class='btn btn-sm btn-link remove-condition-button'>remove</a><br/>
            <% end %>
          </div>
          <a id="add-condition-<%= group.name %>"
             href="javascript:void(0);"
             onclick="add_unlock_condition('#unlock-conditions-<%= group.name %>', '<%= param_array %>')"
             class="add-condition-button btn btn-sm btn-link">Add a condition</a>
        </td>
      </tr>
    <% end %>
    </tbody>
  </table>
  <%= submit_tag 'Save changes', class: "btn btn-info" %>
<% end %>