ManageIQ/manageiq-ui-classic

View on GitHub
app/views/layouts/_user_input_filter.html.haml

Summary

Maintainability
Test Coverage
- url = url_for_only_path(:action => 'quick_search')
#user_input_filter
  - if @edit
    .modal-dialog.modal-lg
      .modal-content
        .modal-header
          %button.close{"data-dismiss" => "modal"}
            %span{"aria-hidden" => "true"}
              ×
            %span.sr-only
              Close
          %h4.modal-title#qs_label
            = @edit.fetch_path(@expkey, :selected, :description)
        .modal-body
          - if @qs_exp_table
            - @qs_exp_table.each do |part|
              - if !%w(AND OR NOT ( )).include?([part].flatten.first)
                - if part.kind_of?(Array) && part.first == :user_input
                  - token = part.last
                  - if @edit[:qs_tokens][token].key?(:field)
                    - if @edit[:qs_tokens][token][:value_type] == :boolean && @edit[:qs_tokens][token][:value].present?
                      = select_tag("value_#{token}",
                                   options_for_select([_("<Choose>")] + MiqExpression.get_entry_details(@edit[:qs_tokens][token][:tag]).sort_by { |desc, _name| desc.downcase },
                                                       nil),
                                   :multiple              => false,
                                   :class                 => "selectpicker",
                                   "data-miq_sparkle_on"  => true,
                                   "data-miq_sparkle_off" => true,
                                   "data-miq_observe"     => {:url => url}.to_json)
                      :javascript
                        miqInitSelectPicker();
                        miqSelectPickerEvent("value_#{token}", "#{url}")
                    - else
                      - if @edit[:qs_tokens][token][:value_type] == :boolean
                        = select_tag("value_#{token}",
                                     options_for_select([[_("<Choose>"), nil],[_('False'), false], [_('True'), true]], nil),
                                     :multiple              => false,
                                     :class                 => "selectpicker",
                                     "data-miq_sparkle_on"  => true,
                                     "data-miq_sparkle_off" => true,
                                     "data-miq_observe"     => {:url => url}.to_json)
                        :javascript
                          miqInitSelectPicker();
                          miqSelectPickerEvent("value_#{token}", "#{url}")
                      - else
                        = text_field_tag("value_#{token}", nil,
                                         :maxlength         => 500,
                                         :onkeyup           => "miqQsEnterEscape(event);",
                                         "data-miq_observe" => {:interval => '.5',
                                                                :url      => url}.to_json,
                                         :placeholder => ("true/false" if @edit[:qs_tokens][token][:value_type] == :boolean))
                      - if @edit[:qs_tokens][token][:value_type] == :percent
                        = "%"
                      - elsif @edit[:qs_tokens][token][:value_type] == :megabytes
                        = "MB"
                      - elsif MiqExpression::FORMAT_SUB_TYPES[@edit[:qs_tokens][token][:value_type]][:units]
                        = select_tag("suffix_#{token}",
                                     options_for_select(MiqExpression::FORMAT_SUB_TYPES[@edit[:qs_tokens][token][:value_type]][:units],
                                                        nil),
                                     :multiple              => false,
                                     :class                 => "selectpicker",
                                     "data-miq_sparkle_on"  => true,
                                     "data-miq_sparkle_off" => true,
                                     "data-miq_observe"     => {:url => url}.to_json)
                        :javascript
                          miqInitSelectPicker();
                          miqSelectPickerEvent("suffix_#{token}", "#{url}")

                  - elsif @edit[:qs_tokens][token].key?(:tag)
                    = select_tag("value_#{token}",
                                 options_for_select([_("<Choose>")] + MiqExpression.get_entry_details(@edit[:qs_tokens][token][:tag]).sort { |a, b| a.first.downcase <=> b.first.downcase },
                                                     nil),
                                 :multiple              => false,
                                 :class                 => "selectpicker",
                                 "data-miq_sparkle_on"  => true,
                                 "data-miq_sparkle_off" => true,
                                 "data-miq_observe"     => {:url => url}.to_json)
                    :javascript
                      miqInitSelectPicker();
                      miqSelectPickerEvent("value_#{token}", "#{url}")
                  - elsif @edit[:qs_tokens][token].key?(:count)
                    = text_field_tag("value_#{token}", nil,
                                     :maxlength         => 500,
                                     :onkeyup           => "miqQsEnterEscape(event);",
                                     "data-miq_observe" => {:interval => '.5',
                                                            :url      => url}.to_json)
                - else
                  = h([part].flatten.first)
              - else
                %font{:color => "red"}
                  %b= h([part].flatten.first)

        .modal-footer
          %div
            %span#quick_search_buttons_off
              = button_tag(_("Apply"),
                           :class => "btn btn-primary disabled",
                           :alt   => t = _("No input to apply"),
                           :title => t)
            %span#quick_search_buttons_on{:style => "display:none;"}
              = link_to(_("Apply"),
                        {:action => "quick_search",
                         :button => "apply"},
                        :class                 => "btn btn-primary",
                        :alt                   => t = _("Apply the current filter (Enter)"),
                        "data-dismiss"         => "modal",
                        "data-miq_sparkle_on"  => true,
                        "data-miq_sparkle_off" => true,
                        :remote                => true,
                        "data-method"          => :post,
                        :id                    => "apply_button",
                        :title                 => t)
            = link_to(_('Cancel'),
                      {:action => "quick_search",
                       :button => "cancel"},
                      :class        => "btn btn-default",
                      :alt          => t = _('Cancel (Esc)'),
                      :remote       => true,
                      "data-method" => :post,
                      :id           => "cancel_button",
                      :title        => t)
:javascript
  $(function(){
    $('#quicksearchbox').on('shown.bs.modal', function() {
      // autofocus, but not a select as focusing hidden select breaks pf-select
      $('#value_1').not('select').focus();
    });
    $('#quicksearchbox').off("click");
    $('#quicksearchbox').on('click', '[data-dismiss="modal"]', function(event) {
      if (event && event.target && event.target.id == 'apply_button') {
        // don't cancel on Apply, but still close the modal
        return true;
      }

      miqJqueryRequest("quick_search?button=cancel", {beforeSend: true});
      return true;
    });
  });