diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 30f4f14a21b..6698f093aa0 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1380,16 +1380,10 @@ def replace_gtl_main_div(_options = {}) if layout_uses_listnav? page.replace(:listnav_div, :partial => "layouts/listnav") # Replace accordion, if list_nav_div is there end - if @grid_hash - page.replace_html("list_grid", :partial => "layouts/list_grid", :locals => {:options => grid_options, :js_options => js_options}) - # Reset the center buttons - page << "miqGridOnCheck();" - else - # No grid, replace the gtl div - # Replace the main div area contents - page.replace_html("main_div", :partial => "layouts/gtl") - page << "$('#adv_div').slideUp(0.3);" if params[:entry] - end + # No grid, replace the gtl div + # Replace the main div area contents + page.replace_html("main_div", :partial => "layouts/gtl") + page << "$('#adv_div').slideUp(0.3);" if params[:entry] end end diff --git a/app/controllers/infra_networking_controller.rb b/app/controllers/infra_networking_controller.rb index 95285eced76..cf79029ffe8 100644 --- a/app/controllers/infra_networking_controller.rb +++ b/app/controllers/infra_networking_controller.rb @@ -330,7 +330,6 @@ def replace_right_cell(options = {}) partial_locals = {:controller =>'infra_networking'} if partial == 'layouts/x_gtl' partial_locals[:action_url] = @lastaction - presenter[:parent_id] = @record.id # Set parent rec id for JS function miqGridSort to build URL presenter[:parent_class] = params[:controller] # Set parent class for URL also end presenter.update(:main_div, r[:partial => partial, :locals => partial_locals]) diff --git a/app/controllers/vm_common.rb b/app/controllers/vm_common.rb index 1fa5c734741..a99c2e68e19 100644 --- a/app/controllers/vm_common.rb +++ b/app/controllers/vm_common.rb @@ -1001,10 +1001,6 @@ def replace_right_cell(options = {}) partial_locals = { :controller => 'vm' } if partial == 'layouts/x_gtl' partial_locals[:action_url] = @lastaction - - # Set parent record id & class for JS function miqGridSort to build URL - presenter[:parent_id] = @record.id - presenter[:parent_class] = params[:controller] end presenter.update(:main_div, r[:partial => partial, :locals => partial_locals]) diff --git a/app/javascript/.eslintrc.json b/app/javascript/.eslintrc.json index 184883eca69..64a4fdfa96e 100644 --- a/app/javascript/.eslintrc.json +++ b/app/javascript/.eslintrc.json @@ -16,7 +16,6 @@ "miqSparkleOn": true, "miqToggleUserOptions": true, "miqTreeActivateNode": true, - "miqOrderService": true, "miqQueueReport": true }, "extends": ["airbnb", "plugin:jest/recommended"], diff --git a/app/javascript/oldjs/application.js b/app/javascript/oldjs/application.js index 6f9e01d025b..63cdd6f5098 100644 --- a/app/javascript/oldjs/application.js +++ b/app/javascript/oldjs/application.js @@ -25,7 +25,6 @@ require('./miq_c3_config.js'); require('./miq_ujs_bindings.js'); require('./miq_tree.js'); require('./miq_formatters.js'); -require('./miq_grid.js'); require('./miq_list_grid.js'); require('./miq_toolbar.js'); require('./miq_c3.js'); diff --git a/app/javascript/oldjs/miq_application.js b/app/javascript/oldjs/miq_application.js index a3bdfa3c8eb..70bcb98d046 100644 --- a/app/javascript/oldjs/miq_application.js +++ b/app/javascript/oldjs/miq_application.js @@ -1,4 +1,4 @@ -/* global add_flash getChartColumnDataValues getChartFormatedValue miqBrowserDetect miqExpressionPrefill miqFlashLater miqFlashSaved miqGridCheckAll miqGridGetCheckedRows miqMenu miqTreeObject miqValueStylePrefill recalculateChartYAxisLabels */ +/* global add_flash getChartColumnDataValues getChartFormatedValue miqBrowserDetect miqExpressionPrefill miqFlashLater miqFlashSaved miqMenu miqTreeObject miqValueStylePrefill recalculateChartYAxisLabels */ // MIQ specific JS functions @@ -351,40 +351,6 @@ window.miqValidateButtons = function(h_or_s, prefix) { } }; -// update all checkboxes on a form when the masterToggle checkbox is changed -// parms: button_div= -window.miqUpdateAllCheckboxes = function(button_div) { - if (!miqDomElementExists('masterToggle')) { - return; - } - - const state = $('#masterToggle').prop('checked'); - - if (ManageIQ.grids.gtl_list_grid) { - miqGridCheckAll(state); - const crows = miqGridGetCheckedRows(); - - ManageIQ.gridChecks = crows; - miqSetButtons(crows.length, button_div); - } else if ($('input.listcheckbox').length) { - // No list_grid on the screen - const cbs = $('input.listcheckbox') - .prop('checked', state) - .trigger('change'); - - miqUpdateButtons(cbs[0], button_div); - } else if ($("input[id^='storage_cb']").length) { - // to handle check/uncheck all for C&U collection - $("input[id^='storage_cb']") - .prop('checked', state) - .trigger('change'); - miqJqueryRequest(miqPassFields( - '/configuration/form_field_changed', - { storage_cb_all: state } - )); - } -}; - // Update buttons based on number of checkboxes that are checked // parms: obj=, button_div= window.miqUpdateButtons = function(obj, button_div) { @@ -439,22 +405,22 @@ window.DoNav = function(theUrl) { }; // Routines to get the size of the window -window.miqResetSizeTimer = function() { - const height = window.innerHeight; - const offset = 427; - let h = height - offset; - - if (h < 200) { - h = 200; - } - - // Adjust certain elements, if present - if (miqDomElementExists('list_grid')) { - $('#list_grid').css({ height: `${h}px` }); - } else if (miqDomElementExists('logview')) { - $('#logview').css({ height: `${h}px` }); - } -}; +// window.miqResetSizeTimer = function() { +// const height = window.innerHeight; +// const offset = 427; +// let h = height - offset; + +// if (h < 200) { +// h = 200; +// } + +// // Adjust certain elements, if present +// if (miqDomElementExists('list_grid')) { +// $('#list_grid').css({ height: `${h}px` }); +// } else if (miqDomElementExists('logview')) { +// $('#logview').css({ height: `${h}px` }); +// } +// }; // Pass fields to server given a URL and fields in name/value pairs window.miqPassFields = function(url, args) { @@ -1460,7 +1426,7 @@ $(() => { $(window).on('resize', miqInitAccordions); $(window).on('resize', miqInitMainContent); - $(window).on('resize', _.debounce(miqResetSizeTimer, 1000)); + // $(window).on('resize', _.debounce(miqResetSizeTimer, 1000)); check_for_ellipsis(); }); diff --git a/app/javascript/oldjs/miq_global.js b/app/javascript/oldjs/miq_global.js index 840d268a2b2..97a32deea56 100644 --- a/app/javascript/oldjs/miq_global.js +++ b/app/javascript/oldjs/miq_global.js @@ -1,20 +1,19 @@ // global variables if (!window.ManageIQ) { window.ManageIQ = { - actionUrl: null, // action URL used in JS function miqGridSort afterOnload: null, // JS code to be evaluated after onload angular: { app: null, // angular application eventNotificationsData: null, // used by the notification drawer - rxSubject: null, // an observable - scope: null, // a scope which will have .angularForm after loading, for miqCheckForChanges + rxSubject: null, // an observable + scope: null, // a scope which will have .angularForm after loading, for miqCheckForChanges }, asynchronous_notifications: false, // disabled by default, server overrides it in application.html.haml browser: null, // browser name calendar: { // TODO about to be removed calDateFrom: null, // to limit calendar starting calDateTo: null, // to limit calendar ending - calSkipDays: null, // to disable specific days of week + calSkipDays: null, // to disable specific days of week }, changes: null, // indicate if there are unsaved changes charts: { @@ -49,13 +48,13 @@ if (!window.ManageIQ) { i18n: { mark_translated_strings: false, }, - logoutInProgress: false, // prevent redirectLogin *during* logout and group change + logoutInProgress: false, // prevent redirectLogin *during* logout and group change menu: [], mouse: { x: null, // mouse X coordinate for popup menu y: null, // mouse Y coordinate for popup menu }, - move: { //methods to move elements between Arrays or in an Array + move: { // methods to move elements between Arrays or in an Array }, noCollapseEvent: false, // enable/disable events fired after collapsing an accordion observe: { // keeping track of data-miq_observe requests diff --git a/app/javascript/oldjs/miq_grid.js b/app/javascript/oldjs/miq_grid.js deleted file mode 100644 index 974ac37856f..00000000000 --- a/app/javascript/oldjs/miq_grid.js +++ /dev/null @@ -1,47 +0,0 @@ -/* global miqJqueryRequest miqSetButtons miqSparkleOn */ - -(function($) { - $.fn.miqGrid = function() { - var table = $(this); - var checkall = table.find('thead > tr > th > input.checkall'); - var checkboxes = table.find("tbody > tr > td > input[type='checkbox']"); - - // table-selectable - if (table.hasClass('table-clickable')) { - var url = table.find('tbody').data('click-url'); - table.find('tbody > tr > td:not(.noclick)').click(function(_e) { - miqSparkleOn(); - var cid = $(this).parent().data('click-id'); - miqJqueryRequest(url + '?id=' + cid); - }); - } - - // table-checkable - if (table.hasClass('table-checkable')) { - checkboxes.on('change', function(e) { - var checked = $.map(checkboxes.filter(':checked'), function(cb) { - return cb.value; - }); - - sendDataWithRx({rowSelect: e.delegateTarget}); - ManageIQ.gridChecks = checked; - miqSetButtons(checked.length, 'center_tb'); - - // if all the checkboxes were checked, make checkall checked too, - // if some aren't, make it unchecked => no trigger here - $('input.checkall') - .prop('checked', checked.length === checkboxes.length); - }); - - // Handle the click on the "Check all" checkbox - checkall.on('change', function(_e) { - var unchecked = checkboxes.filter(':not(:checked)'); - if (unchecked.length > 0) { - unchecked.trigger('click'); - } else { - checkboxes.trigger('click'); - } - }); - } - }; -})(jQuery); diff --git a/app/javascript/oldjs/miq_list_grid.js b/app/javascript/oldjs/miq_list_grid.js index 8bdf128cab1..f81b58049ca 100644 --- a/app/javascript/oldjs/miq_list_grid.js +++ b/app/javascript/oldjs/miq_list_grid.js @@ -1,62 +1,4 @@ -/* global DoNav miqDomElementExists miqJqueryRequest miqSetButtons miqUpdateButtons */ - -// Handle row click (ajax or normal html trans) -window.miqRowClick = function(row_id, row_url, row_url_ajax) { - if (!row_url) { - return; - } - - if (row_url_ajax) { - miqJqueryRequest(row_url + row_id, { beforeSend: true, complete: true }); - } else { - DoNav(row_url + row_id); - } -}; - -window.checkboxItemId = function($elem) { - const val = $elem.val(); - const name = $elem.attr('name'); - - if (_.startsWith(name, 'check_')) { - return name.substr(6); - } - - return val; -}; - -// returns a list of checked row ids -window.miqGridGetCheckedRows = function(grid) { - grid = grid || 'list_grid'; - const crows = []; - - $(`#${grid} .list-grid-checkbox`).each((_idx, elem) => { - if (!$(elem).prop('checked')) { - return; - } - - const item_id = checkboxItemId($(elem)); - crows.push(item_id); - }); - - return crows; -}; - -// checks/unchecks all grid rows -window.miqGridCheckAll = function(state, grid) { - grid = grid || 'list_grid'; - state = !!state; - - $(`#${grid} .list-grid-checkbox`) - .prop('checked', state) - .trigger('change'); -}; - -// Order a service from the catalog list view -window.miqOrderService = function(id) { - const url = `/${ManageIQ.controller}/x_button/${id}?pressed=svc_catalog_provision`; - miqJqueryRequest(url, { beforeSend: true, complete: true }); -}; - +// Needed for optimization page queue report button window.miqQueueReport = function(id) { const url = `/optimization/queue_report/${id}`; window.miqSparkleOn(); @@ -68,45 +10,3 @@ window.miqQueueReport = function(id) { }) .catch(() => window.miqSparkleOff()); }; - -// Handle checkbox -window.miqGridOnCheck = function(elem, button_div, grid) { - if (elem) { - miqUpdateButtons(elem, button_div); - } - - const crows = miqGridGetCheckedRows(grid); - ManageIQ.gridChecks = crows; - - miqSetButtons(crows.length, 'center_tb'); -}; - -// Handle sort -window.miqGetSortUrl = function(col_id) { - let controller = null; - const action = ManageIQ.actionUrl; - let id = null; - - if (action === 'sort_ds_grid') { - controller = 'miq_request'; - } else if (ManageIQ.record.parentId !== null) { - controller = ManageIQ.record.parentClass; - id = ManageIQ.record.parentId; - } - - let url = action; - if (controller) { - url = `/${controller}/${url}`; - } - if (id && (url.indexOf(id) < 0)) { - url = `${url}/${id}`; - } - - url = `${url}?sortby=${col_id}&${window.location.search.substring(1)}`; - return url; -}; - -window.miqGridSort = function(col_id) { - const url = miqGetSortUrl(col_id); - miqJqueryRequest(url, { beforeSend: true, complete: true }); -}; diff --git a/app/javascript/spec/old_js/miq_list_grid.spec.js b/app/javascript/spec/old_js/miq_list_grid.spec.js deleted file mode 100644 index f9d9e737ad8..00000000000 --- a/app/javascript/spec/old_js/miq_list_grid.spec.js +++ /dev/null @@ -1,52 +0,0 @@ -require('../helpers/set_fixtures_helper.js'); -require('../helpers/old_js_file_require_helper.js'); - -describe('miq_list_grid.js', () => { - describe('#miqGridSort', () => { - it('returns url with no double id', () => { - ManageIQ.actionUrl = 'show/1000000000015'; - ManageIQ.record.parentClass = 'ems_infra'; - ManageIQ.record.parentId = '1000000000015'; - expect(miqGetSortUrl(1)).toMatch(/^\/ems_infra\/show\/1000000000015\?sortby=1&/); - }); - }); - - describe('#checkboxItemId', () => { - // helper to create a fake jquery object - var kvToElem = function(name, value) { - return { - attr: _.constant(name), - val: _.constant(value), - }; - }; - - it('correctly parses name=check_#{id} checkboxes', () => { - expect(checkboxItemId(kvToElem('check_1r2345', '1'))).toEqual('1r2345'); - expect(checkboxItemId(kvToElem('check_12345', '12345'))).toEqual('12345'); - expect(checkboxItemId(kvToElem('check_1', '0'))).toEqual('1'); - }); - - it('correctly parses value=#{id} checkboxes', () => { - expect(checkboxItemId(kvToElem('whatever', '1r2345'))).toEqual('1r2345'); - expect(checkboxItemId(kvToElem('whatever', '12345'))).toEqual('12345'); - expect(checkboxItemId(kvToElem('whatever', '0'))).toEqual('0'); - }); - }); - - describe('#miqGridGetCheckedRows', () => { - beforeEach(() => { - var html = ""; - html += '
'; - html += ' '; - html += ' '; - html += ' '; - html += ' '; - html += '
'; - setFixtures(html); - }); - - it("picks checked checkboxes from the chosen grid", () => { - expect(miqGridGetCheckedRows('test_grid_1')).toEqual(['1r2345', '12345', '1']); - }); - }); -}); diff --git a/app/views/layouts/_list_grid.html.haml b/app/views/layouts/_list_grid.html.haml deleted file mode 100644 index fc8ea25b9fe..00000000000 --- a/app/views/layouts/_list_grid.html.haml +++ /dev/null @@ -1,85 +0,0 @@ -:javascript - ManageIQ.gridChecks = []; - -- grid_name = options[:grid_name] -- grid_id = options[:grid_id] -- grid_hash = options[:grid_hash] -- button_div = options[:button_div] - -- unless @parent.nil? - - layout = @layout - :javascript - ManageIQ.record.parentId = "#{@parent.id}"; - ManageIQ.record.parentClass = "#{j @parent.class.base_class.to_s.underscore}"; - - if (ManageIQ.record.parentClass == "policy_set") { - ManageIQ.record.parentClass = "policy"; - } else if (ManageIQ.record.parentClass == "ext_management_system") { - ManageIQ.record.parentClass = "#{j layout}"; - } - -- if options[:action_url] - - action_url = options[:action_url] - :javascript - ManageIQ.actionUrl = "#{j action_url}"; - -:javascript - ManageIQ.grids["#{j grid_name}"] = { - g_id: "#{j grid_id}", - opts: #{raw js_options.to_json}, - hash: #{raw grid_hash.to_json}, - }; - --# ensure row_url ends with a trailing / or = (or is nil) -- row_url = js_options[:row_url] -- if row_url.ends_with? '_none_' - - row_url = nil -- if row_url && (! row_url.ends_with? '/') && (! row_url.ends_with? '=') - - row_url += '/' - --# pre-escape -- row_url = row_url.nil? ? 'null' : "'#{j row_url}'" -- row_url_ajax = !! js_options[:row_url_ajax] # force bool to prevent JS syntax errors - -%table.table.table-striped.table-bordered.table-hover.table-selectable - %thead - %tr - - grid_hash[:head].each do |h| - %th{:class => h[:is_narrow] ? 'table-view-pf-select' : ''} - - text = translate_header_text(h[:text]) - - if h[:sort] - %a{:href => '#', - :onclick => "miqGridSort(#{h[:col_idx] + 1})"} - = text - - else - = text - - - if @sortcol && @sortcol == h[:col_idx] - .pull-right - - sorticon = (@sortdir.nil? || @sortdir == 'ASC') ? 'fa fa-sort-asc' : 'fa fa-sort-desc' - %i{:class => sorticon} - %tbody - - grid_hash[:rows].each do |row| - %tr{:onclick => "miqRowClick('#{j row[:id]}', #{row_url}, #{j row_url_ajax.to_s}); return false;"} - - row[:cells].each do |cell| - - click = cell[:is_checkbox] || cell[:is_button] - - narrow = click || cell[:icon] - %td{:class => narrow ? 'table-view-pf-select' : '', :onclick => click ? "event.stopPropagation()" : false} - - if cell[:is_checkbox] - = check_box_tag("check_#{row[:id]}", row[:id], false, - :onchange => "miqGridOnCheck(this, '#{button_div}')", - :class => "list-grid-checkbox") - - elsif cell[:is_button] - %button.btn.btn-primary{:onclick => cell[:onclick] + "; return false;", - :title => cell[:title], - :alt => cell[:title]} - = cell[:text] - - elsif cell[:span] - %span{:class => "#{cell[:span]}"} - = cell[:text] - - else - - if cell[:icon] - %i{:class => cell[:icon], :title => cell[:title]} - - elsif cell[:image] - = image_tag(image_path(cell[:image]), :alt => cell[:title], :title => cell[:title]) - = cell[:text] diff --git a/app/views/shared/_master_toggle.html.haml b/app/views/shared/_master_toggle.html.haml deleted file mode 100644 index 93d79bc8d6e..00000000000 --- a/app/views/shared/_master_toggle.html.haml +++ /dev/null @@ -1,4 +0,0 @@ -%input#masterToggle{:name => "masterToggle", - :type => "checkbox", - :onchange => "miqUpdateAllCheckboxes('#{button_div}');"} -= label diff --git a/spec/javascripts/miq_grid_spec.js b/spec/javascripts/miq_grid_spec.js deleted file mode 100644 index 488dfe2ee25..00000000000 --- a/spec/javascripts/miq_grid_spec.js +++ /dev/null @@ -1,54 +0,0 @@ -describe('miq_grid.js', function () { - beforeEach(function () { - window.miqSetButtons = function() {}; // mock toolbar - var html = "
Title
Item 1
Item 2
Item 3
"; - setFixtures(html); - $('table').miqGrid(); - }); - - describe('.checkall', function () { - it('checks itself if all checkboxes were checked', function () { - $('.checkall').trigger('click'); - expect($('.checkall').prop('checked')).toEqual(true); - }) - - it('unchecks itself if at least one checkbox was unchecked', function () { - $('.checkall').trigger('click'); - $(".noclick > input[type='checkbox']").first().trigger('click'); - expect($('.checkall').prop('checked')).toEqual(false); - }); - - it('checks all the checkboxes when none is checked', function () { - $('.checkall').trigger('click'); - expect($(".noclick > input[type='checkbox']:checked").length).toEqual(3); - }); - - it('unchecks all the checkboxes when each is checked', function () { - $('.checkall').trigger('click'); - expect($(".noclick > input[type='checkbox']:checked").length).toEqual(3); - $('.checkall').trigger('click'); - expect($(".noclick > input[type='checkbox']:not(:checked)").length).toEqual(3); - }); - - it('checks the remaining checkboxes when not all are checked', function () { - $(".noclick > input[type='checkbox']").first().trigger('click'); - expect($(".noclick > input[type='checkbox']:checked").length).toEqual(1); - $('.checkall').trigger('click'); - expect($(".noclick > input[type='checkbox']:checked").length).toEqual(3); - }); - }) - - it('appends checked elements to the list of selected items', function () { - $(".noclick > input[type='checkbox']").first().trigger('click'); - expect(ManageIQ.gridChecks.join(',')).toEqual('check_1'); - $(".noclick > input[type='checkbox']").last().trigger('click'); - expect(ManageIQ.gridChecks.join(',')).toEqual('check_1,check_3'); - }); - - it('sends an ajax POST request when clicking on a table row', function () { - spyOn(window, 'miqJqueryRequest'); - $("tbody > tr > td:not(.noclick)").last().trigger('click'); - expect(miqJqueryRequest).toHaveBeenCalledWith('/test/?id=check_3'); - }) - -}); diff --git a/spec/views/catalog/_svccat_tree_show.html.haml_spec.rb b/spec/views/catalog/_svccat_tree_show.html.haml_spec.rb index 60cd7bbacbf..0b5bdda849a 100644 --- a/spec/views/catalog/_svccat_tree_show.html.haml_spec.rb +++ b/spec/views/catalog/_svccat_tree_show.html.haml_spec.rb @@ -10,13 +10,4 @@ render :partial => 'catalog/svccat_tree_show' expect(response.body).to include("\"action\":{\"remote\":true,\"url\":\"/catalog/x_button/#{service.id}?pressed=svc_catalog_provision\"}") end - - context 'invalid Catalog items or Bundles' do - before { allow(service).to receive(:template_valid?).and_return(false) } - - it 'disables Order button' do - render :partial => 'catalog/svccat_tree_show' - expect(response).not_to include("miqOrderService(#{service.id});") - end - end end diff --git a/spec/views/layouts/list_grid.html.haml_spec.rb b/spec/views/layouts/list_grid.html.haml_spec.rb deleted file mode 100644 index 3bb0071d04d..00000000000 --- a/spec/views/layouts/list_grid.html.haml_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -describe "layouts/_list_grid.html.haml" do - context "when showtype is 'performance'" do - it "renders" do - allow(view).to receive(:options).and_return(:grid_hash => {:head => [], :rows => []}) - allow(view).to receive(:js_options).and_return(:row_url => '_none_') - record = FactoryBot.create(:ems_infra) - assign(:parent, record) - render :template => "layouts/_list_grid" - end - end - - it "has valid links for row clicks" do - options = {:grid_id => 'list_grid', :grid_name => 'gtl_list_grid', - - :grid_hash => {:head => [{:is_narrow => true}, {:is_narrow => true}, - {:text => 'Name', :sort => 'str', :col_idx => 0, :align => 'left'}, - {:text => 'Description', :sort => 'str', :col_idx => 0, :align => 'left'}, - {:text => 'Type', :sort => 'str', :col_idx => 0, :align => 'left'}, - {:text => 'Display in Catalog', :sort => 'str', :col_idx => 0, :align => 'left'}, - {:text => 'Catalog', :sort => 'str', :col_idx => 0, :align => 'left'}, - {:text => 'Created On', :sort => 'str', :col_idx => 0, :align => 'left'}], - :rows => [{:id => '10r96', - :cells => [{:is_checkbox => true}, - {:tile => 'View this item', :image => '/pictures/10r33.png'}, - {:text => 'abcd'}, {:text => 'abcd'}, {:text => 'Item'}, - {:text => 'Yes'}, {:text => ''}, - {:text => '01/10/16 22:30:00 UTC'}]}, - {:id => '10r28', - :cells => [{:is_checkbox => true}, - {:tile => 'View this item', :image => '/pictures/10r33.png'}, - {:text => 'efgh'}, {:text => 'efgh'}, {:text => 'Item'}, - {:text => 'Yes'}, {:text => ''}, - {:text => '01/08/16 20:30:00 UTC'}]}]}, - :button_div => 'center_tb', :action_url => 'explorer'} - js_options = {:sortcol => 0, :sortdir => 'ASC', :row_url => '/catalog/x_show/', :row_url_ajax => true} - render :partial => "layouts/list_grid", :locals => {:options => options, :js_options => js_options} - expect(response).to include("") - end -end