From d34b2520b51b06df77942b47ba23c3854aacf98d Mon Sep 17 00:00:00 2001 From: zmagod Date: Fri, 12 May 2017 15:59:58 +0200 Subject: [PATCH] refactor results javascript, fixes bug with results archive [fixes SCI-1262] prevents duplicate request [fixes SCI-1248] --- .../javascripts/my_modules/results.js.erb | 29 +++- .../javascripts/results/result_assets.js | 41 +++--- .../javascripts/results/result_tables.js.erb | 43 +++--- .../javascripts/results/result_texts.js | 130 ++++++++++-------- app/views/my_modules/_result.html.erb | 7 +- 5 files changed, 155 insertions(+), 95 deletions(-) diff --git a/app/assets/javascripts/my_modules/results.js.erb b/app/assets/javascripts/my_modules/results.js.erb index 3f8d801c0..ad3608600 100644 --- a/app/assets/javascripts/my_modules/results.js.erb +++ b/app/assets/javascripts/my_modules/results.js.erb @@ -88,7 +88,7 @@ // Toggle editing buttons function toggleResultEditButtons(show) { - if (show) { + if(show) { $('#results-toolbar').show(); $('.edit-result-button').show(); } else { @@ -194,6 +194,29 @@ } } + // init cancel button + function initCancelFormButton(form, callback) { + $(form).find('.cancel-new').click(function(event) { + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + $(form).remove(); + toggleResultEditButtons(true); + callback(); + }); + } + + function archive(e, element) { + e.preventDefault(); + e.stopPropagation(); + e.stopImmediatePropagation(); + var el = $(element); + if(confirm(el.data('confirm-text'))) { + animateSpinner(); + $('#' + el.data('form-id')).submit(); + } + } + var publicAPI = Object.freeze({ init: init, initHandsOnTables: initHandsOnTables, @@ -201,7 +224,9 @@ toggleResultEditButtons: toggleResultEditButtons, expandResult: expandResult, processResult: processResult, - ResultTypeEnum: ResultTypeEnum + ResultTypeEnum: ResultTypeEnum, + initCancelFormButton: initCancelFormButton, + archive: archive }); return publicAPI; diff --git a/app/assets/javascripts/results/result_assets.js b/app/assets/javascripts/results/result_assets.js index f99113396..cf9f0e456 100644 --- a/app/assets/javascripts/results/result_assets.js +++ b/app/assets/javascripts/results/result_assets.js @@ -4,24 +4,32 @@ var ResutlAssets = (function() { // New result asset behaviour function initNewResultAsset() { - $('#new-result-asset').on('ajax:success', function(e, data) { - debugger; - var $form = $(data.html); - $('#results').prepend($form); + $('#new-result-asset').on('click', function(event) { + event.preventDefault(); + event.stopImmediatePropagation(); + event.stopPropagation(); + var $btn = $(this); + $btn.off(); + animateSpinner(null, true); - _formAjaxResultAsset($form); - - // Cancel button - $form.find('.cancel-new').click(function () { - $form.remove(); - Results.toggleResultEditButtons(true); + // get new result form + $.ajax({ + url: $btn.data('href'), + method: 'GET', + success: function(data) { + var $form = $(data.html); + animateSpinner(null, false); + $('#results').prepend($form); + _formAjaxResultAsset($form); + Results.initCancelFormButton($form, initNewResultAsset); + Results.toggleResultEditButtons(false); + $('#result_name').focus(); + }, + error: function() { + animateSpinner(null, false); + initNewResultAsset(); + } }); - - Results.toggleResultEditButtons(false); - - $('#result_name').focus(); - }).on('ajax:error', function(e, xhr, status, error) { - animateSpinner(null, false); }); } @@ -65,6 +73,7 @@ Results.expandResult($newResult); initPreviewModal(); Comments.initialize(); + initNewResultAsset(); }).on('ajax:error', function(e, data) { // This check is here only because of remotipart bug, which returns // HTML instead of JSON, go figure diff --git a/app/assets/javascripts/results/result_tables.js.erb b/app/assets/javascripts/results/result_tables.js.erb index c2c6a2c59..c14ae013f 100644 --- a/app/assets/javascripts/results/result_tables.js.erb +++ b/app/assets/javascripts/results/result_tables.js.erb @@ -52,6 +52,7 @@ Results.toggleResultEditButtons(true); Results.expandResult($result); Comments.initialize(); + initNewResultTable(); }); $form.on('ajax:error', function(e, xhr, status, error) { var data = xhr.responseJSON; @@ -88,23 +89,33 @@ // New result text behaviour function initNewResultTable() { - $('#new-result-table').on('ajax:success', function(e, data) { - var $form = $(data.html); - $('#results').prepend($form); - - _formAjaxResultTable($form); - _initEditableHandsOnTable($form); - _onSubmitExtractTable($form); - - // Cancel button - $form.find('.cancel-new').click(function () { - $form.remove(); - Results.toggleResultEditButtons(true); + $('#new-result-table').on('click', function(event) { + event.preventDefault(); + event.stopImmediatePropagation(); + event.stopPropagation(); + var $btn = $(this); + $btn.off(); + animateSpinner(null, true); + // get new result form + $.ajax({ + url: $btn.data('href'), + method: 'GET', + success: function(data) { + var $form = $(data.html); + animateSpinner(null, false); + $('#results').prepend($form); + _formAjaxResultTable($form); + _initEditableHandsOnTable($form); + _onSubmitExtractTable($form); + Results.initCancelFormButton($form, initNewResultTable); + Results.toggleResultEditButtons(false); + $('#result_name').focus(); + }, + error: function() { + animateSpinner(null, false); + initNewResultTable(); + } }); - - Results.toggleResultEditButtons(false); - - $('#result_name').focus(); }); } diff --git a/app/assets/javascripts/results/result_texts.js b/app/assets/javascripts/results/result_texts.js index 0c7bb9403..8a8a83516 100644 --- a/app/assets/javascripts/results/result_texts.js +++ b/app/assets/javascripts/results/result_texts.js @@ -4,80 +4,91 @@ var ResultText = (function() { // New result text behaviour function initNewReslutText() { - $('#new-result-text').on('ajax:success', function(e, data) { - var $form = $(data.html); - $('#results').prepend($form); + $('#new-result-text').on('click', function(event) { + event.preventDefault(); + event.stopImmediatePropagation(); + event.stopPropagation(); + var $btn = $(this); + $btn.off(); + animateSpinner(null, true); - _formAjaxResultText($form); - - // Cancel button - $form.find('.cancel-new').click(function() { - $form.remove(); - Results.toggleResultEditButtons(true); - }); - Results.toggleResultEditButtons(false); - TinyMCE.refresh(); - TinyMCE.highlight(); - $('#result_name').focus(); - }).on('ajax:error', function() { - TinyMCE.refresh(); + // get new result form + $.ajax({ + url: $btn.data('href'), + method: 'GET', + success: function(data) { + var $form = $(data.html); + animateSpinner(null, false); + $('#results').prepend($form); + _formAjaxResultText($form); + Results.initCancelFormButton($form, initNewReslutText); + Results.toggleResultEditButtons(false); + TinyMCE.refresh(); + TinyMCE.highlight(); + $('#result_name').focus(); + }, + error: function() { + animateSpinner(null, false); + initNewReslutText(); + } + }) }); } - // Edit result text button behaviour function applyEditResultTextCallback() { - $('.edit-result-text').on('ajax:success', function(e, data) { - var $result = $(this).closest('.result'); - var $form = $(data.html); - var $prevResult = $result; - $result.after($form); - $result.remove(); + $('.edit-result-text').on('ajax:success', function(e, data) { + var $result = $(this).closest('.result'); + var $form = $(data.html); + var $prevResult = $result; + $result.after($form); + $result.remove(); - _formAjaxResultText($form); + _formAjaxResultText($form); - // Cancel button - $form.find('.cancel-edit').click(function () { - $form.after($prevResult); - $form.remove(); - applyEditResultTextCallback(); - Results.toggleResultEditButtons(true); - }); - Results.toggleResultEditButtons(false); - TinyMCE.refresh(); - $('#result_name').focus(); + // Cancel button + $form.find('.cancel-edit').click(function() { + $form.after($prevResult); + $form.remove(); + applyEditResultTextCallback(); + Results.toggleResultEditButtons(true); }); + Results.toggleResultEditButtons(false); + TinyMCE.refresh(); + $('#result_name').focus(); + }); } // Apply ajax callback to form function _formAjaxResultText($form) { - $form.on('ajax:success', function(e, data) { - $form.after(data.html); - var newResult = $form.next(); - initFormSubmitLinks(newResult); - $(this).remove(); + $form.on('ajax:success', function(e, data) { + $form.after(data.html); + var newResult = $form.next(); + initFormSubmitLinks(newResult); + $(this).remove(); - applyEditResultTextCallback(); - Results.applyCollapseLinkCallBack(); - Results.toggleResultEditButtons(true); - Results.expandResult(newResult); - TinyMCE.destroyAll(); - Comments.initialize(); - }); - $form.on('ajax:error', function(e, xhr, status, error) { - var data = xhr.responseJSON; - $form.renderFormErrors('result', data); - TinyMCE.highlight(); - if (data['result_text.text']) { - var $el = $form.find( - 'textarea[name=result\\[result_text_attributes\\]\\[text\\]]' - ); + applyEditResultTextCallback(); + Results.applyCollapseLinkCallBack(); + Results.toggleResultEditButtons(true); + Results.expandResult(newResult); + TinyMCE.destroyAll(); + Comments.initialize(); + initNewReslutText(); + }); + $form.on('ajax:error', function(e, xhr, status, error) { + var data = xhr.responseJSON; + $form.renderFormErrors('result', data); + TinyMCE.highlight(); + if (data['result_text.text']) { + var $el = $form.find( + 'textarea[name=result\\[result_text_attributes\\]\\[text\\]]' + ); - $el.closest('.form-group').addClass('has-error'); - $el.parent().append('' + - data['result_text.text'] + ''); - } - }); + $el.closest('.form-group').addClass('has-error'); + $el.parent().append('' + + data['result_text.text'] + ''); + } + }); } var publicAPI = Object.freeze({ @@ -92,5 +103,4 @@ ResultText.initNewReslutText(); ResultText.applyEditResultTextCallback(); }); - })(); diff --git a/app/views/my_modules/_result.html.erb b/app/views/my_modules/_result.html.erb index 07fcc5956..5c11d0553 100644 --- a/app/views/my_modules/_result.html.erb +++ b/app/views/my_modules/_result.html.erb @@ -19,7 +19,12 @@ <% end %> <% if can_archive_result(result) && !result.archived && result_unlocked?(result) %> - + <%= form_for :result, url: result_path_of_type(result), method: :patch, html: {id: 'result-archive-form-' + result.id.to_s } do |f| %>