JSFiddle - React, Tailwind, and code Playground

by Rajan Paneru

HTML

<script src="https://application-staging.ranenetwork.com/wp-includes/js/jquery/jquery.js?ver=1.12.4"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css?ver=4.9.8">
<script src="https://rawgit.com/kimmobrunfeldt/progressbar.js/1.0.0/dist/progressbar.js"></script>
<div class="row score-and-rank-indicator">
  <div class="col-sm-6 rank-indicator">
    <div class="row">
      <div class="col-sm-12 score-rank-bar">
        <div class="row text-center">
          <div class="col-sm-7">
            <div class="score">
              <small><strong>RANE</strong> Score<strong> 30</strong></small>
            </div>
            <i class="arrow-blue"></i>
          </div>
          <div class="col-sm-5 text-center rank rank-bg-low">
            <small><strong>Rank: 30 </strong> out of <strong>180</strong></small>
          </div>
        </div>
      </div>
      <div class="col-sm-12">
        <div class="progressbar-div">
          <div class="progressbar"></div>
        </div>
      </div>
      <div class="col-sm-12 country-name">Canada</div>
      <div class="col-sm-12 custom-rank">
        <small><strong>Custom Rank: 24 </strong> out of <strong>180</strong></small>
      </div>
    </div>
  </div>
</div>

CSS

body {
  padding: 30px;
  background-color: #ddd;
}

.score-and-rank-indicator .score-rank-bar .score {
  background: #1f3776;
  color: #fff;
  font-size: 12px;
  margin-right: 10px;
}

.score-and-rank-indicator .score-rank-bar .rank {
  color: #343a40 !important;
  font-size: 12px;
}

.score-and-rank-indicator .score-rank-bar .row [class*='col-'] {
  padding-right: 0;
  padding-left: 0;
}

.score-and-rank-indicator .score-rank-bar .arrow-rane-blue {
  position: absolute;
  right: -6.5%;
  z-index: 9;
  color: #1f3776;
  font-size: 3.7em !important;
  top: -10px;
}

.score-and-rank-indicator .score-rank-bar .arrow-blue {
  display: inline-block;
  width: 0;
  height: 0;
  vertical-align: middle;
  border-left: 10px dashed #1f3776;
  border-left: 10px solid\9 #1f3776;
  border-top: 10px solid transparent;
  border-bottom: 10px solid transparent;
  position: absolute;
  right: 0px;
  top: 0px;
}

.score-and-rank-indicator .rank-bg-low {
  background: -moz-linear-gradient(left, rgba(254, 255, 232, 0.5) 0%, rgba(105, 182, 0, 0.79) 100%);
  background: -webkit-linear-gradient(left, rgba(254, 255, 232, 0.5) 0%, rgba(105, 182, 0, 0.79) 100%);
  background: linear-gradient(to right, rgba(254, 255, 232, 0.5) 0%, rgba(105, 182, 0, 0.79) 100%);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#80feffe8', endColorstr='#c969b600', GradientType=1);
}

.score-and-rank-indicator .rank-bg-high {
  background: -moz-linear-gradient(left, rgba(225, 0, 0, 0) 0%, rgba(225, 0, 0, 0.6) 100%);
  background: -webkit-linear-gradient(left, rgba(225, 0, 0, 0) 0%, rgba(225, 0, 0, 0.6) 100%);
  background: linear-gradient(to right, rgba(225, 0, 0, 0) 0%, rgba(225, 0, 0, 0.6) 100%);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00e10000', endColorstr='#99e10000', GradientType=1);
}

.score-and-rank-indicator .progressbar-div {
  border: 0;
  border-bottom: 1px solid rgba(0, 0, 0, .1);
  margin-top: 16px;
}

.score-and-rank-indicator .progressbar {
 ...

JavaScript

scoreRankIndicator('N/A', '.progressbar', '#69b600');

  function scoreRankIndicator(score, selector, color) {
    var bar = new ProgressBar.SemiCircle(selector, {
      strokeWidth: 6,
      trailColor: '#eee',
      trailWidth: 6,
      easing: 'easeInOut',
      duration: 1800,
      svgStyle: null,
      text: {
        value: '',
        alignToBottom: false
      },
      from: {
        color: '#CCC'
      },
      to: {
        color: color
      },
      // Set default step function for all animate calls
      step: (state, bar) => {
        bar.path.setAttribute('stroke', color);
        var value = Math.round(bar.value() * 100);
        if (isNaN(value)) {
          debugger;
          bar.setText('N/A');
          bar.text.style.color = '#eee';
          bar.path.setAttribute('stroke', '#eee');
        } else {
          bar.setText(value);
          bar.text.style.color = state.color;
        }
      }
    });
    bar.text.style.color = '#ddd';

    bar.animate(score / 100);
  };