From 2ba96d3f2bbfd4e66c9679bff2d79a26db09a467 Mon Sep 17 00:00:00 2001 From: Ryan Cramer Date: Mon, 10 Jun 2019 09:03:18 -0400 Subject: [PATCH] A couple of adjustments to ProcessPageLister module to correct issue of neverending spinner when ajax result was missing an expected row, plus improve the ajax spinner output, especially for AdminThemUikit which previously was not showing a spinner. --- wire/core/Modules.php | 1 + .../ProcessPageLister.info.json | 2 +- .../ProcessPageLister/ProcessPageLister.js | 46 ++++++++++++++++--- .../ProcessPageLister.min.js | 2 +- 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/wire/core/Modules.php b/wire/core/Modules.php index 5a202254..ad76b330 100644 --- a/wire/core/Modules.php +++ b/wire/core/Modules.php @@ -3030,6 +3030,7 @@ class Modules extends WireArray { * @param string $property Name of property to get * @param array $options Additional options (see getModuleInfo method for options) * @return mixed|null Returns value of property or null if not found + * @since 3.0.107 * */ public function getModuleInfoProperty($class, $property, array $options = array()) { diff --git a/wire/modules/Process/ProcessPageLister/ProcessPageLister.info.json b/wire/modules/Process/ProcessPageLister/ProcessPageLister.info.json index 71a12857..bf3503f9 100644 --- a/wire/modules/Process/ProcessPageLister/ProcessPageLister.info.json +++ b/wire/modules/Process/ProcessPageLister/ProcessPageLister.info.json @@ -1,7 +1,7 @@ { "title": "Lister", "summary": "Admin tool for finding and listing pages by any property.", - "version": 24, + "version": 25, "author": "Ryan Cramer", "icon": "search", "singular": false, diff --git a/wire/modules/Process/ProcessPageLister/ProcessPageLister.js b/wire/modules/Process/ProcessPageLister/ProcessPageLister.js index d08018db..f830973b 100644 --- a/wire/modules/Process/ProcessPageLister/ProcessPageLister.js +++ b/wire/modules/Process/ProcessPageLister/ProcessPageLister.js @@ -25,14 +25,11 @@ var ProcessLister = { if(ProcessLister.initialized) return; ProcessLister.initialized = true; if($("#ProcessLister").length == 0) return; - - ProcessLister.spinner = $("
  • "); - $("#breadcrumbs ul.nav").append(ProcessLister.spinner); + ProcessLister.initSpinners(); ProcessLister.filters = $("#ProcessListerFilters"); ProcessLister.results = $("#ProcessListerResults"); ProcessLister.lister = $("#ProcessLister"); - ProcessLister.filters.change(function() { ProcessLister.submit(); }); ProcessLister.results.on('click', '.ProcessListerTable > thead th', ProcessLister.columnSort) @@ -63,7 +60,7 @@ var ProcessLister = { if(ProcessLister.lister.size() > 0) ProcessLister.lister.WireTabs({ items: $(".WireTab") }); - $("#_ProcessListerRefreshTab").html("") + $("#_ProcessListerRefreshTab").html("") .unbind('click') .click(function() { ProcessLister.resetTotal = true; @@ -71,7 +68,7 @@ var ProcessLister = { return false; }); - $("#_ProcessListerResetTab").html("") + $("#_ProcessListerResetTab").html("") .unbind('click') .click(function() { window.location.href = './?reset=1'; @@ -83,6 +80,34 @@ var ProcessLister = { if(ProcessLister.numSubmits == 0) ProcessLister.submit(); else ProcessLister.spinner.fadeOut(); }, + + /** + * Initialize spinners + * + */ + initSpinners: function() { + var $parent = $("#breadcrumbs ul.nav"); + if($parent.length) { + // legacy spinner (AdminThemeDefault, AdminThemeReno) + ProcessLister.spinner = $("
  • "); + $parent.append(ProcessLister.spinner); + } else { + // in AdminThemeUikit or others, this spinner is not used + ProcessLister.spinner = $(''); + } + + $(document).ajaxStart(function() { + var $spinner = $('#_ProcessListerRefreshTab').find('i'); + if($spinner.length) $spinner.removeClass('fa-refresh').addClass('fa-spin fa-spinner'); + }); + + $(document).ajaxStop(function() { + var $spinner = $('#_ProcessListerRefreshTab').find('i'); + if($spinner.length) $spinner.fadeOut('fast', function() { + $spinner.removeClass('fa-spin fa-spinner').addClass('fa-refresh').fadeIn('fast'); + }); + }); + }, /** * Implementation for table header (th) click event @@ -132,12 +157,13 @@ var ProcessLister = { if(!confirm(msg)) return false; } } + ProcessLister.results.find('.lister_headline').append(""); } else { refreshAll = false; } ProcessLister.numSubmits++; - if(typeof url == "undefined") var url = "./"; + if(typeof url == "undefined") url = "./"; ProcessLister.spinner.fadeIn('fast'); @@ -182,8 +208,10 @@ var ProcessLister = { * */ _submitSuccess: function(data) { + var refreshAll = true; if(ProcessLister.refreshRowPageIDs.length) { + refreshAll = false; for(var n in ProcessLister.refreshRowPageIDs) { var pageID = ProcessLister.refreshRowPageIDs[n]; @@ -206,12 +234,15 @@ var ProcessLister = { }, 1000); } if($newRow.find(".Inputfield").length) InputfieldsInit($newRow); + } else if($oldRow.length && !$newRow.length) { + $oldRow.remove(); // row no longer appears in results } } ProcessLister.refreshRowPageIDs = []; } else { // update entire table + ProcessLister.results.fadeTo(0, 0); var sort = $("#lister_sort").val(); ProcessLister.results.html(data).find("table.ProcessListerTable > thead th").each(function () { var $b = $(this).find('b'); @@ -258,6 +289,7 @@ var ProcessLister = { $("a.actions_toggle.open").click().removeClass('open'); // auto open items corresponding to "open" get var if(typeof AdminDataTable != "undefined") AdminDataTable.init(); $("a.lister-lightbox", ProcessLister.results).magnificPopup({ type: 'image', closeOnContentClick: true, closeBtnInside: true }); + if(refreshAll) ProcessLister.results.fadeTo(0, 1.0); }, 250); var pos = data.indexOf('ProcessListerScript'); diff --git a/wire/modules/Process/ProcessPageLister/ProcessPageLister.min.js b/wire/modules/Process/ProcessPageLister/ProcessPageLister.min.js index 5a08e47d..39741240 100644 --- a/wire/modules/Process/ProcessPageLister/ProcessPageLister.min.js +++ b/wire/modules/Process/ProcessPageLister/ProcessPageLister.min.js @@ -1 +1 @@ -var ProcessLister={inInit:true,inTimeout:false,spinner:null,numSubmits:0,results:null,filters:null,lister:null,initialized:false,resetTotal:false,clickAfterRefresh:"",refreshRowPageIDs:[],extraSubmitData:{},init:function(){if(ProcessLister.initialized)return;ProcessLister.initialized=true;if($("#ProcessLister").length==0)return;ProcessLister.spinner=$("
  • ");$("#breadcrumbs ul.nav").append(ProcessLister.spinner);ProcessLister.filters=$("#ProcessListerFilters");ProcessLister.results=$("#ProcessListerResults");ProcessLister.lister=$("#ProcessLister");ProcessLister.filters.change(function(){ProcessLister.submit()});ProcessLister.results.on("click",".ProcessListerTable > thead th",ProcessLister.columnSort);$(document).on("click","a.actions_toggle",ProcessLister.pageClick);$(document).on("click",".actions a.ajax",ProcessLister.actionClickAjax);$("#actions_items_open").attr("disabled","disabled").parent("label").addClass("ui-state-disabled");$(document).on("click",".MarkupPagerNav a",function(){var url=$(this).attr("href");ProcessLister.submit(url);return false});$("#submit_refresh").click(function(){ProcessLister.resetTotal=true;ProcessLister.submit();$(this).fadeOut("normal",function(){$("#submit_refresh").removeClass("ui-state-active").fadeIn()});return false});$("#lister_columns").change(function(){ProcessLister.submit()});$("#ProcessListerActionsForm").find("script").remove();if(ProcessLister.lister.size()>0)ProcessLister.lister.WireTabs({items:$(".WireTab")});$("#_ProcessListerRefreshTab").html("").unbind("click").click(function(){ProcessLister.resetTotal=true;ProcessLister.submit();return false});$("#_ProcessListerResetTab").html("").unbind("click").click(function(){window.location.href="./?reset=1";return false});ProcessLister.inInit=false;if(ProcessLister.numSubmits==0)ProcessLister.submit();else ProcessLister.spinner.fadeOut()},columnSort:function(){$(this).find("span").remove();var name=$(this).find("b").text();var val=$("#lister_sort").val();if(val==name)name="-"+name;if(name.length<1)name=val;$("#lister_sort").val(name);ProcessLister.submit()},submit:function(url){if(ProcessLister.inTimeout)clearTimeout(ProcessLister.inTimeout);ProcessLister.inTimeout=setTimeout(function(){ProcessLister._submit(url)},250)},_submit:function(url){var refreshAll=true;if(ProcessLister.refreshRowPageIDs.length==0){var $form=ProcessLister.results.find(".InputfieldFormConfirm");if($form.length){var msg=InputfieldFormBeforeUnloadEvent(true);if(typeof msg!="undefined"&&msg.length){if(!confirm(msg))return false}}}else{refreshAll=false}ProcessLister.numSubmits++;if(typeof url=="undefined")var url="./";ProcessLister.spinner.fadeIn("fast");var submitData={filters:refreshAll?ProcessLister.filters.val():"",columns:$("#lister_columns").val(),sort:$("#lister_sort").val()};for(var key in ProcessLister.extraSubmitData){var val=ProcessLister.extraSubmitData[key];submitData[key]=val}ProcessLister.extraSubmitData={};if(ProcessLister.resetTotal){submitData["reset_total"]=1;ProcessLister.resetTotal=false}if(ProcessLister.refreshRowPageIDs.length>0){submitData["row_page_id"]=ProcessLister.refreshRowPageIDs.join(",");ProcessLister.resetTotal=false}$.ajax({url:url,type:"POST",data:submitData,success:ProcessLister._submitSuccess,error:function(error){ProcessLister.results.html("

    Error retrieving results: "+error+"

    ")}})},_submitSuccess:function(data){if(ProcessLister.refreshRowPageIDs.length){for(var n in ProcessLister.refreshRowPageIDs){var pageID=ProcessLister.refreshRowPageIDs[n];var idAttr="#page"+pageID;var $oldRow=$(idAttr).closest("tr");var $newRow=$(data).find(idAttr).closest("tr");var message=$oldRow.find(".actions_toggle").attr("data-message");if($oldRow.length&&$newRow.length){$oldRow.replaceWith($newRow);$newRow.addClass("row_refreshed_"+pageID);$newRow.effect("highlight","normal");if(message){var $message=$(""+message+"");$newRow.find(".actions_toggle").addClass("row_message_on").closest(".col_preview, td").append($message);setTimeout(function(){$message.fadeOut("normal",function(){$newRow.find(".actions_toggle").removeClass("row_message_on").click()})},1e3)}if($newRow.find(".Inputfield").length)InputfieldsInit($newRow)}}ProcessLister.refreshRowPageIDs=[]}else{var sort=$("#lister_sort").val();ProcessLister.results.html(data).find("table.ProcessListerTable > thead th").each(function(){var $b=$(this).find("b");var txt=$b.text();$b.remove();$(this).find("span").remove();var $icon=$(this).find("i");if($icon.length)$icon.remove();var label=$(this).html();if(txt==sort){$(this).html(""+label+" ↓"+txt+"")}else if(sort=="-"+txt){$(this).html(""+label+" ↑"+txt+"")}else{$(this).html(label+""+txt+"")}if($icon.length>0)$(this).prepend($icon)}).end().effect("highlight","fast");if(ProcessLister.results.find(".Inputfield").length){InputfieldsInit(ProcessLister.results)}}if(ProcessLister.clickAfterRefresh.length>0){if(ProcessLister.clickAfterRefresh.indexOf("#")<0&&ProcessLister.clickAfterRefresh.indexOf(".")<0){ProcessLister.clickAfterRefresh="#"+ProcessLister.clickAfterRefresh}$(ProcessLister.clickAfterRefresh).each(function(){var $a=$(this);$a.click();var $tr=$a.closest("tr");$tr.fadeTo(100,.1);setTimeout(function(){$tr.fadeTo(250,1)},250)});ProcessLister.clickAfterRefresh=""}ProcessLister.spinner.fadeOut();setTimeout(function(){ProcessLister.results.trigger("loaded");ProcessLister.results.find(".Inputfield:not(.reloaded)").addClass("reloaded").trigger("reloaded",["ProcessPageLister"]);$("a.actions_toggle.open").click().removeClass("open");if(typeof AdminDataTable!="undefined")AdminDataTable.init();$("a.lister-lightbox",ProcessLister.results).magnificPopup({type:"image",closeOnContentClick:true,closeBtnInside:true})},250);var pos=data.indexOf("ProcessListerScript");if(pos){var js=data.substring(pos+21);if(js!=""){pos=js.indexOf("");js=js.substring(0,pos);$("body").append("