function redraw()

in src/countrySelector.js [18:161]


  function redraw() {
  
    getDims();  

    d3.select('#selector_div').selectAll(".country_btn_enabled")
    .data(all_data, function(d) {
      return d.code;
    })
    .enter()
    .append('input')
    .attr('type','button')
    .attr('class', 'country_btn_enabled')
    .attr('id',function(d){
      return d.code + '_bttn';
    })
    .attr('value',function(d){
      return d.code;
    })
    .attr('title',function(d){
      return d.code;
    })
    .style('background',function(d){
      var scale_reg = chart_instance.scale_reg();
      var color_param = chart_instance.params().color;
      var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(scale_reg(d[color_param]));
      var rgb_result = result ? {
        r: parseInt(result[1], 16),
        g: parseInt(result[2], 16),
        b: parseInt(result[3], 16)
      } : null;
      return 'rgba(' + rgb_result.r + ',' + rgb_result.g + ',' + rgb_result.b + ',0.5)';
    })
    .style('height', function(){
      if (height < width) {
        return ((height / 8) - 4) + 'px';
      }
      else {
        var num_rows = all_data.length / 8;
        var menubar_height = (width / 7);
        var remaining_height = height - svg_dim - menubar_height - 10; 
        return (remaining_height / num_rows - 4) + 'px';
      }
    })
    .style('width', function(){
      if (height < width) {
        var num_cols = all_data.length / 8;
        var menubar_width = (height / 7);
        var remaining_width = width - svg_dim - menubar_width; 
        return (remaining_width / num_cols - 4) + 'px';
      }
      else {        
        return ((width / 8) - 4) + 'px';
      } 
    })
    .style('margin', '2px')
    .on('touchstart', function(d){
      d3.event.preventDefault(); 
      if (d3.select(this).style('border') == '5px solid gold') {
        globals.num_selected--;
        var unselected = globals.trial_response.indexOf(!introduction_complete ? d.code : d.name);
        globals.trial_response.splice(unselected,1);
        d3.select(this).style('border', '1px solid #ccc');

        if (introduction_complete && (globals.trial_index != -1 && globals.num_selected == globals.trials[globals.trial_index].num_responses && (chart_instance.loop_count() > 0 || chart_instance.lines() == 'on'))) {
          d3.select('#progress_indicator').style('display','none');
          d3.select('#done_btn').attr('class','img_btn_enabled')
          .style('display',null)
          .attr('disabled',null)
          .attr('src', 'assets/done.svg');

        }
        else {
          d3.select('#progress_indicator').style('display',null);
          d3.select('#outer_progress_indicator')
            .attr('display', globals.condition == 'multiples' ? 'none' : null);
          d3.select('#done_btn').attr('class','img_btn_disabled')
          .style('display','none')
          .attr('disabled',true)
          .attr('src', 'assets/na.svg');
        }

        if (!non_interactive) {
          // chart_instance.outside_points().push(d.code);              
  
          var bubble_ind = chart_instance.bubbleset_points().indexOf(d.code);
          chart_instance.bubbleset_points().splice(bubble_ind,1);
  
          chart_g.call(chart_instance);
        }
      }
      else {
        if ((!introduction_complete && globals.num_selected < 3) || (introduction_complete && globals.num_selected != globals.trials[globals.trial_index].num_responses)) {
          globals.num_selected++;
          globals.trial_response.push(!introduction_complete ? d.code : d.name);
          d3.select(this).style('border', '5px solid gold');    
          
          if (introduction_complete && (globals.trial_index != -1 && globals.num_selected == globals.trials[globals.trial_index].num_responses && (chart_instance.loop_count() > 0 || chart_instance.lines() == 'on'))) {
            d3.select('#progress_indicator').style('display','none');
            d3.select('#done_btn').attr('class','img_btn_enabled')
            .style('display',null)
            .attr('disabled',null)
            .attr('src', 'assets/done.svg');

          }
          else {
            d3.select('#progress_indicator').style('display',null);
            d3.select('#outer_progress_indicator')
            .attr('display', globals.condition == 'multiples' ? 'none' : null);
            d3.select('#done_btn').attr('class','img_btn_disabled')
            .style('display','none')
            .attr('disabled',true)
            .attr('src', 'assets/na.svg');
          }          
        }
        if (!non_interactive) {
          d3.select(this).style('border', '5px solid gold');             
  
          // var outside_ind = chart_instance.outside_points().indexOf(d.code);
          // chart_instance.outside_points().splice(outside_ind,1);
          chart_instance.bubbleset_points().push(d.code);
          chart_g.call(chart_instance);                    
          
        }
      }
      if (globals.outer_progress_circle != undefined) {
        if (!introduction_complete) {
          d3.select('#inner_progress_value').attr('d', globals.inner_progress_circle.endAngle((Math.PI * 2) * (globals.num_selected / 3)));
        }
        else {
          d3.select('#inner_progress_value').attr('d', globals.inner_progress_circle.endAngle((Math.PI * 2) * (globals.num_selected / globals.trials[globals.trial_index].num_responses)));
        }
      }
      if (!introduction_complete && globals.num_selected == 3) {        
        if (globals.condition == 'multiples' || chart_instance.loop_count() >= 1) {
          d3.select('#progress_indicator').style('display','none');
          d3.select('#done_btn').attr('class','img_btn_enabled')
          .style('display',null)
          .attr('disabled',null)
          .attr('src', 'assets/done.svg');
        } 
      }
    });    
    
  }