MiraitSystems/enju_trunk

View on GitHub
app/views/page/_form_classification_field.html.erb

Summary

Maintainability
Test Coverage
<script>
  /**
   * 分類フィールド
   * 
   */
  var ItemFieldClassificationSelect2 = {
    // Classification select2 options
    classificationSlect2options: {
      multiple: false,
      minimumInputLength: 1,
      width: "250px",
      placeholder: <%= raw t("classification.search_placeholder").to_json %>,
      formatNoMatches: function(term) {
        return "'" + term + "' " + <%= raw t("classification.search_nomatch").to_json %>;
      },
      formatSearching: function() {
        return <%= raw t("classification.search_searching").to_json %>;
      },
      formatInputTooShort: function(term, minLength){
        return <%= raw t("classification.search_placeholder").to_json %>;
      },
      ajax: {
        url: "/classifications/search_name.json",
        dataType: 'json',
        data: function (term, page) {
          var currentNumber = $(this).attr('id').match(/\d+/);
          var classificationTypeId = $('#classifications_' + currentNumber + '_classification_type_id').val();
          return {
            classification_type_id: classificationTypeId,
            search_phrase: term,
          };
        },
        results: function (data, page) {
            return {results: data};
        },
      },
      initSelection: function(element, callback) {
        var id = $(element).val();
        if (id != "") {
          $.ajax("/classifications/search_name.json?classification_id=" + id, {
              dataType: "json"
         }).done(function(data) { callback(data); });
        }
      },
    },
    // ClassificationType select2 options
    classificationTypeSlect2options: {
      width: "400px",
      matcher: function(term, text, opt) {
        return text.toUpperCase().indexOf(term.toUpperCase())==0
            || opt.attr("alt").toUpperCase().indexOf(term.toUpperCase())==0;
      },
    },
  };
  
  $(document).ready(function() {
    $("select[id $= 'classification_type_id']").select2(ItemFieldClassificationSelect2.classificationTypeSlect2options);
    $("input[id $= 'classification_id']").select2(ItemFieldClassificationSelect2.classificationSlect2options);
  });

  /**
   * ClassificationType deselect
   * 
   */
  $(document).on("select2-selecting", "select[id $= 'classification_type_id']", function(e){
    var targetId = e.target.id
    var targetNumber = targetId.match(/_(\d+)_/);
    $("#classifications_" + targetNumber[1] + "_classification_id").select2('val', '');
  });

</script>

  <td>
    <nobr><label><%= t('activerecord.models.classification') -%>:</label></nobr>
  </td>
  <td>
  <table id="bless">
    <% classification = {}; classification[:classification_id] = 2 -%>
    <% @classifications.each_with_index do |classification, index| -%>
      <tr id="CLASSIFICATION<%= index %>" >
        <% if SystemConfiguration.get("manifestation.search.use_classification_type") %>
          <td>
            <%= select2_tag("classifications_#{index}_classification_type_id", 
                             "classifications[][classification_type_id]", 
                             @classification_types,
                             classification[:classification_type_id].to_i,
                             select_attribute: :name,
                             display_attribute: :display_name, 
                             width: '200'
                            ) %>
          </td>
        <% end %>
        <td>
          <%# TODO 分類型を使用しない場合のSELECT2フォーム %>
          <% if SystemConfiguration.get("manifestation.search.use_classification_type") &&
                SystemConfiguration.get("manifestation.search.use_select2_for_classification") %>
            <%= text_field_tag "classifications[][classification_id]", classification[:classification_id], :id => "classifications_#{index}_classification_id", :class => "classification_id", :value => classification[:classification_id] %>
          <% else %>
            <%= text_field_tag "classifications[][classification_identifier]", classification[:classification_identifier], :id => "classifications_#{index}_classification_identifier", :class => "classification_identifier", :value => classification[:classification_identifier] %>
          <% end %>
        </td>
        <td>
          <%= link_to t('activerecord.attributes.search.classification_search'), classifications_search_category_path %>
        </td>
      </tr>
    <% end %>
  </table>
  </td>