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);
};