anchor.diff:    });
   
     function showVisualisations(selector, metric) {
  +    selector.find('.default').prop('checked', true)
       selector.find('.input-group label').addClass('hidden')
       $.each(metric.data('visualisations').split(','), function( index, value ) {
         selector.find('.' + value).removeClass('hidden')
  
positive.code:             selector = "td:nth-last-child(-n+"+ col_count +")";
              row.find(selector).remove();
            }
  
            row.find('.metric').attr('name', 'dashboard[metric]['+ i +'][]')
            row.find('.boxcolour').attr('name', 'dashboard[boxcolour]['+ i +'][]')
            row.find('.textcolour').attr('name', 'dashboard[textcolour]['+ i +'][]')
          }
  
          // Append new rows
          if (i <= row_num) {
            for (i; i < row_num; i++) {
              row_template.clone().appendTo(table)
  
              row.find('.metric').attr('name', 'dashboard[metric]['+ i +'][]')
              row.find('.boxcolour').attr('name', 'dashboard[boxcolour]['+ i +'][]')
              row.find('.textcolour').attr('name', 'dashboard[textcolour]['+ i +'][]')
            };
          }
        } else {
          // Remove rows
  
negative.code: 
      if (current_rows == 0) {
        // If there are no rows, this is easy
        for (var i=0; i<row_num; i++) {
          row = row_template.clone()
  
          row.appendTo(table);
        };
      } else {
        // Otherwise, we need to append / remove columns and rows
        rows = table.find('tr');
  