20191218-02-ajax-modal-form.diff

Toshi MARUYAMA, 2019-12-19 03:02

Download (5.13 KB)

View differences:

app/controllers/issues_controller.rb
199 199
        return
200 200
      end
201 201

  
202
      render(
203
        :partial => 'close_confirm',
204
        :layout => false,
205
        :locals => {}
206
      )
202 207
      return
203 208
    end
204 209

  
app/views/issues/_close_confirm.js.erb
1
$('#ajax-modal').html(
2
  '<%= escape_javascript(
3
         render(
4
           :partial => 'close_confirm_dialog',
5
           :locals  => {}
6
         )
7
       )
8
   %>'
9
);
10
showModal('ajax-modal', '400px');
app/views/issues/_close_confirm_dialog.html.erb
1
<h3 class="title">&nbsp;</h3>
2
<p>
3
  <%= l(:text_close_parent_issue_whose_subtasks_are_open_confirmation) %>
4
</p>
5
<p class="buttons">
6
  <%= button_tag l(:button_apply), :type => "button", :onclick => "run_submit();" %>
7
  <%= link_to_function l(:button_cancel), "hideModal(this);" %>
8
</p>
9

  
10
<%= javascript_tag do %>
11
  function run_submit() {
12
    $("#issue-form").off('submit');
13
    $("#issue-form").submit();
14
  }
15
<% end %>
app/views/issues/_edit.html.erb
85 85
<%= javascript_tag do %>
86 86
  $('#issue-form').submit(function(){
87 87
    var status_id = 0;
88
    var result = false;
89 88
    if ($("#issue_status_id").length > 0) {
90 89
      status_id = $("#issue_status_id").val();
91 90
    }
92 91
    $.ajax({
93 92
      url: $("#issue-form").attr('action'),
94 93
      type: 'patch',
95
      async: false,
96 94
      data: { 
97 95
        "check_go_to_close_confirm": "",
98 96
        "status_id": status_id
......
100 98
    })
101 99
      .then(
102 100
        function(data){
103
          result = data["result"];
101
          if (data["result"]) {
102
            $.ajax({
103
              url:   $("#issue-form").attr('action'),
104
              type: 'patch',
105
              data: {}
106
              });
107
          } else {
108
            $("#issue-form").off('submit');
109
            $("#issue-form").submit();
110
          }
104 111
        }
105 112
      );
106
    if (result) {
107
      if (!confirm(
108
          "<%= l(:text_close_parent_issue_whose_subtasks_are_open_confirmation) %>"
109
      )){
110
        return false;
111
      }
112
    }
113
    $("#issue-form").off('submit');
114
    $("#issue-form").submit();
113
    return false;
115 114
  });
116 115
<% end %>
test/system/issues_test.rb
247 247
      page.find("#issue_status_id").select("Closed")
248 248
      assert_no_difference ['Issue.count', 'child.journals.count'] do
249 249
        assert_no_difference 'parent.journals.count' do
250
          page.dismiss_confirm /Are you sure/ do
251
            page.first(:button, 'Submit').click
250
          page.first(:button, 'Submit').click
251
          within('#ajax-modal') do
252
            assert page.has_text?(/Are you sure/)
253
            page.first(:link, 'Cancel').click
252 254
          end
253 255
          assert_equal 1, parent.reload.status.id
254 256
        end
255 257
        assert_difference 'parent.journals.count' do
256
          page.accept_confirm /Are you sure/ do
257
            page.first(:button, 'Submit').click
258
          page.first(:button, 'Submit').click
259
          within('#ajax-modal') do
260
            assert page.has_text?(/Are you sure/)
261
            page.first(:button, 'Apply').click
258 262
          end
259 263
          assert page.has_css?('#flash_notice')
260 264
          assert_equal 5, parent.reload.status.id
......
266 270
      fill_in 'Subject', :with => 'test of confirm dialog'
267 271
      assert_no_difference ['Issue.count', 'child.journals.count'] do
268 272
        assert_no_difference 'parent.journals.count' do
269
          page.dismiss_confirm /Are you sure/ do
270
            page.first(:button, 'Submit').click
273
          page.first(:button, 'Submit').click
274
          within('#ajax-modal') do
275
            assert page.has_text?(/Are you sure/)
276
            page.first(:link, 'Cancel').click
271 277
          end
272 278
          assert_equal 5, parent.reload.status.id
273 279
        end
274 280
        assert_difference 'parent.journals.count' do
275
          page.accept_confirm /Are you sure/ do
276
            page.first(:button, 'Submit').click
281
        page.first(:button, 'Submit').click
282
          within('#ajax-modal') do
283
            assert page.has_text?(/Are you sure/)
284
            page.first(:button, 'Apply').click
277 285
          end
278 286
          assert page.has_css?('#flash_notice')
279 287
          assert_equal 5, parent.reload.status.id