diff --git a/assets/packages/questions/arraynumeric/scripts/array-totalsum.js b/assets/packages/questions/arraynumeric/scripts/array-totalsum.js index eaa98f53ac2..a6f62763662 100644 --- a/assets/packages/questions/arraynumeric/scripts/array-totalsum.js +++ b/assets/packages/questions/arraynumeric/scripts/array-totalsum.js @@ -7,23 +7,35 @@ $(document).on('ready pjax:scriptcomplete',function () { $('div.array-multi-flexi-text table.show-totals input:enabled').keyup(updatetotals); $('div.array-multi-flexi-text table.show-totals input:enabled').each(updatetotals); + $('div.array-multi-flexi-text table.show-totals tr.subquestion-list').on('relevance:on relevance:off', function(){ + sumTable(this); + }); + $('div.array-multi-flexi-text table.show-totals').closest('div.array-multi-flexi-text').on('relevance:on', function(){ + var firstRow = $(this).find('table.show-totals input:enabled:visible').first(); + if (firstRow.length) { + sumTable(firstRow[0]); + } + }); }); function updatetotals(e) { console.ls.log(e); var inputValue = $(this).val(); - var sRadix = LSvar.sLEMradix; - var sTableID = $(this).closest('table').attr('id'); - var sTable = $(this).closest('table'); - var iGrandTotal = new Decimal(0); if (!normalizeValue(inputValue)) { $(this).val(inputValue.substring(0, (inputValue.length - 1))); return; } + sumTable(this); +} + +function sumTable(element) { + var table = $(element).closest('table'); + var iGrandTotal = new Decimal(0); + // Sum all rows - sTable.find('tr').each(function () { + table.find('tr').each(function () { //the value of sum needs to be reset for each row, so it has to be set inside the row loop var sum = new Decimal(0); //find the elements in the current row and sum it @@ -36,11 +48,13 @@ function updatetotals(e) { $(this).find('input:disabled').val(formatValue(sum)).trigger('change').trigger('keyup').trigger('keydown'); iGrandTotal = iGrandTotal.plus(sum); }); + // Sum all columns // First get number of columns (only visible and enabled inputs) - var iColumnNum = $('#' + sTableID + ' tbody tr:first-child input:enabled:visible').length; + var visibleRows = table.find('tbody tr:visible'); + var iColumnNum = visibleRows.first().find('input:enabled:visible').length; //Get An array of jQuery Objects - var $iRow = sTable.find('tr'); + var $iRow = table.find('tr'); //Iterate through the columns for (var i = 1; i <= iColumnNum; i++) { var sum = new Decimal(0); @@ -53,9 +67,8 @@ function updatetotals(e) { $($iRow.last().find('td').get((i - 1))).find('input:disabled').val(formatValue(sum)).trigger('change').trigger('keyup').trigger('keydown'); } - //$('#'+sTableID+' tr:last-child td.total:nth-of-type('+iColumns+') input:disabled').val(formatValue(iGrandTotal)); - $iRow.last().find('td.grand.total').find('input:disabled').val(formatValue(iGrandTotal)).trigger('change').trigger('keyup').trigger('keydown'); // Grand total + $iRow.last().find('td.grand.total').find('input:disabled').val(formatValue(iGrandTotal)).trigger('change').trigger('keyup').trigger('keydown'); } function formatValue(sValue) { diff --git a/assets/packages/questions/arraynumeric/scripts/array-totalsum.min.js b/assets/packages/questions/arraynumeric/scripts/array-totalsum.min.js index e21bb8199b0..49b6f9b8db2 100644 --- a/assets/packages/questions/arraynumeric/scripts/array-totalsum.min.js +++ b/assets/packages/questions/arraynumeric/scripts/array-totalsum.min.js @@ -1 +1 @@ -function updatetotals(e){console.ls.log(e);var inputValue=$(this).val(),sTableID=(LSvar.sLEMradix,$(this).closest("table").attr("id")),sTable=$(this).closest("table"),iGrandTotal=new Decimal(0);if(normalizeValue(inputValue)){sTable.find("tr").each(function(){var sum=new Decimal(0);$(this).find("input:enabled:visible").each(function(){var value=normalizeValue($(this).val());sum=sum.plus(value)}),$(this).find("input:disabled").val(formatValue(sum)).trigger("change").trigger("keyup").trigger("keydown"),iGrandTotal=iGrandTotal.plus(sum)});for(var iColumnNum=$("#"+sTableID+" tbody tr:first-child input:enabled:visible").length,$iRow=sTable.find("tr"),i=1;i<=iColumnNum;i++){var sum=new Decimal(0);$iRow.each(function(){var item=$($(this).find("td").get(i-1)).find("input:enabled:visible"),val=normalizeValue($(item).val());sum=sum.plus(val)}),$($iRow.last().find("td").get(i-1)).find("input:disabled").val(formatValue(sum)).trigger("change").trigger("keyup").trigger("keydown")}$iRow.last().find("td.grand.total").find("input:disabled").val(formatValue(iGrandTotal)).trigger("change").trigger("keyup").trigger("keydown")}else $(this).val(inputValue.substring(0,inputValue.length-1))}function formatValue(sValue){sValue=Number(sValue).toString();var sRadix=LSvar.sLEMradix;return sValue=sValue.replace(".",sRadix)}function normalizeValue(aValue){if(!new RegExp(/^-?([0-9]*)((,|\.){1}([0-9]*)){0,1}$/).test(aValue)&&bFixNumAuto)return 0;aValue=aValue||0;var outNumber=!1;try{outNumber=new Decimal(aValue)}catch(e){}if(0==outNumber){var numReplaced=aValue.toString().replace(/,/g,".");try{outNumber=new Decimal(numReplaced)}catch(e){}return outNumber}return outNumber}$(document).on("ready pjax:scriptcomplete",function(){$("div.array-multi-flexi-text table.show-totals input:enabled").keyup(updatetotals),$("div.array-multi-flexi-text table.show-totals input:enabled").each(updatetotals)}); +function updatetotals(e){console.ls.log(e);var inputValue=$(this).val();normalizeValue(inputValue)?sumTable(this):$(this).val(inputValue.substring(0,inputValue.length-1))}function sumTable(element){var table=$(element).closest("table"),iGrandTotal=new Decimal(0);table.find("tr").each(function(){var sum=new Decimal(0);$(this).find("input:enabled:visible").each(function(){var value=normalizeValue($(this).val());sum=sum.plus(value)}),$(this).find("input:disabled").val(formatValue(sum)).trigger("change").trigger("keyup").trigger("keydown"),iGrandTotal=iGrandTotal.plus(sum)});for(var iColumnNum=table.find("tbody tr:visible").first().find("input:enabled:visible").length,$iRow=table.find("tr"),i=1;i<=iColumnNum;i++){var sum=new Decimal(0);$iRow.each(function(){var item=$($(this).find("td").get(i-1)).find("input:enabled:visible"),val=normalizeValue($(item).val());sum=sum.plus(val)}),$($iRow.last().find("td").get(i-1)).find("input:disabled").val(formatValue(sum)).trigger("change").trigger("keyup").trigger("keydown")}$iRow.last().find("td.grand.total").find("input:disabled").val(formatValue(iGrandTotal)).trigger("change").trigger("keyup").trigger("keydown")}function formatValue(sValue){sValue=Number(sValue).toString();var sRadix=LSvar.sLEMradix;return sValue=sValue.replace(".",sRadix)}function normalizeValue(aValue){if(!new RegExp(/^-?([0-9]*)((,|\.){1}([0-9]*)){0,1}$/).test(aValue)&&bFixNumAuto)return 0;aValue=aValue||0;var outNumber=!1;try{outNumber=new Decimal(aValue)}catch(e){}if(0==outNumber){var numReplaced=aValue.toString().replace(/,/g,".");try{outNumber=new Decimal(numReplaced)}catch(e){}return outNumber}return outNumber}$(document).on("ready pjax:scriptcomplete",function(){$("div.array-multi-flexi-text table.show-totals input:enabled").keyup(updatetotals),$("div.array-multi-flexi-text table.show-totals input:enabled").each(updatetotals),$("div.array-multi-flexi-text table.show-totals tr.subquestion-list").on("relevance:on relevance:off",function(){sumTable(this)}),$("div.array-multi-flexi-text table.show-totals").closest("div.array-multi-flexi-text").on("relevance:on",function(){var firstRow=$(this).find("table.show-totals input:enabled:visible").first();firstRow.length&&sumTable(firstRow[0])})});