MediaWiki:Common.js: Difference between revisions

From John's wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(22 intermediate revisions by the same user not shown)
Line 7: Line 7:
   var spec = document.jj5_totals[ i ];
   var spec = document.jj5_totals[ i ];


   sum_column( spec.id, spec.col );
   var id = spec.id;
  var col = spec.col;
 
  //console.log( [ id, col ] );
  var total = 0;
  var ordered_total = 0;
  var mytable = document.getElementById( id );
  if ( ! mytable ) {
    throw new Error( 'Missing table: ' + id );
  }
  for ( var row = 1; row < mytable.rows.length - 1; row++ ) {
    var val = read_float( read_cell( mytable, row, col ) );
    var ordered = read_cell( mytable, row, col + 2 );
    if ( isNaN( val ) ) { continue; }
    if ( ordered ) { ordered_total += val; continue; }
    total += val;
  }
  //console.log( total );
  var total_str = total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  var ordered_str = ordered_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  document.getElementById( id + '_sum' ).innerHTML = total ? total_str : ordered_str;


}
}


function sum_column( id, col ) {
for ( var i in document.jj5_options ) {
   console.log( [ id, col ] );
 
   var total = 0;
   var spec = document.jj5_options[ i ];
   var mytable = document.getElementById( id );
 
   for ( var v=1; v < mytable.rows.length - 1; v++ ) {
   var parts_total = 0;
     var val = mytable.rows[v].cells[col].innerHTML;
 
     console.log( val );
   for ( var j in spec.parts ) {
    val = val.replace( '$', '' );
 
    val = parseFloat( val );
    var part = spec.parts[ j ];
    if ( ! isNaN( val ) ) { total += val; }
    var sum_id = part + '_sum';
    var sum = read_float( document.getElementById( sum_id ).innerHTML );
    if ( isNaN( sum ) ) { continue; }
    parts_total += sum;
 
  }
 
  var options_total = parts_total;
 
   for ( var j in spec.options ) {
 
     var option = spec.options[ j ];
    var sum_id = option + '_sum';
    var sum = read_float( document.getElementById( sum_id ).innerHTML );
     if ( isNaN( sum ) ) { continue; }
    options_total += sum;
 
  }
 
  var ul = document.getElementById( 'jj5_options' );
 
  var parts_label = parts_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  var options_label = options_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
 
  var line = spec.label + ': $' + parts_label;
 
  if ( spec.options.length ) { line += ' (with options: $' + options_label + ')'; }
 
  var li = document.createElement('li');
  li.appendChild(document.createTextNode(line));
  ul.appendChild(li);
 
}
 
function read_cell( table, row, col ) {
  try {
    return table.rows[row].cells[col].innerHTML.trim();
  }
  catch ( ex ) {
    //throw new Error( 'Could not read row: ' + row + '; col: ' + col );
    return null;
   }
   }
  console.log( total );
}
   total = total.toLocaleString('en-AU');
 
   document.getElementById( id + '_sum' ).innerHTML = total;
function read_float( input ) {
   // if ( ! input ) { throw new Error( 'Null input.' ); }
   return input ? parseFloat( input.replace( '$', '' ).replace( ',', '' ) ) : 0;
}
}

Latest revision as of 02:16, 13 March 2023

/* Any JavaScript here will be loaded for all users on every page load. */

//console.log( 'Hi from Common.js' );

for ( var i in document.jj5_totals ) {

  var spec = document.jj5_totals[ i ];

  var id = spec.id;
  var col = spec.col;

  //console.log( [ id, col ] );
  var total = 0;
  var ordered_total = 0;
  var mytable = document.getElementById( id );
  if ( ! mytable ) {
    throw new Error( 'Missing table: ' + id );
  }
  for ( var row = 1; row < mytable.rows.length - 1; row++ ) {
    var val = read_float( read_cell( mytable, row, col ) );
    var ordered = read_cell( mytable, row, col + 2 );
    if ( isNaN( val ) ) { continue; }
    if ( ordered ) { ordered_total += val; continue; }
    total += val;
  }
  //console.log( total );
  var total_str = total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  var ordered_str = ordered_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  document.getElementById( id + '_sum' ).innerHTML = total ? total_str : ordered_str;

}

for ( var i in document.jj5_options ) {

  var spec = document.jj5_options[ i ];

  var parts_total = 0;

  for ( var j in spec.parts ) {

    var part = spec.parts[ j ];
    var sum_id = part + '_sum';
    var sum = read_float( document.getElementById( sum_id ).innerHTML );
    if ( isNaN( sum ) ) { continue; }
    parts_total += sum;

  }

  var options_total = parts_total;

  for ( var j in spec.options ) {

    var option = spec.options[ j ];
    var sum_id = option + '_sum';
    var sum = read_float( document.getElementById( sum_id ).innerHTML );
    if ( isNaN( sum ) ) { continue; }
    options_total += sum;

  }

  var ul = document.getElementById( 'jj5_options' );

  var parts_label = parts_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});
  var options_label = options_total.toLocaleString('en-AU',{currency:'AUD',minimumFractionDigits:2});

  var line = spec.label + ': $' + parts_label;

  if ( spec.options.length ) { line += ' (with options: $' + options_label + ')'; }

  var li = document.createElement('li');
  li.appendChild(document.createTextNode(line));
  ul.appendChild(li);

}

function read_cell( table, row, col ) {
  try {
    return table.rows[row].cells[col].innerHTML.trim();
  }
  catch ( ex ) {
    //throw new Error( 'Could not read row: ' + row + '; col: ' + col );
    return null;
  }
}

function read_float( input ) {
  // if ( ! input ) { throw new Error( 'Null input.' ); }
  return input ? parseFloat( input.replace( '$', '' ).replace( ',', '' ) ) : 0;
}