sclass HBubblesProgressBar extends HTMLBase {
S mainClass = "bubble-progress-bar";
S id = aGlobalID();
S preprocessCSS(S css) { ret replace(css, ".mc", "." + mainClass); }
*() {
css([[
@keyframes grow {
from {
width: 0%
}
to {
width: 100%;
}
}
.mc {
position: relative;
width: 50vw;
top: 50%;
left: 50%;
transform: translate3d(-50%, -50%, 0);
}
.mc input {
display: none;
}
.mc label {
position: relative;
display: block;
width: 100%;
height: 40px;
background: transparent;
border-radius: 0.4rem;
border: 2px solid white;
overflow: hidden;
box-shadow: -2px 0 8px 0 rgba(white, 0.6);
div {
position: absolute;
top: 0;
left: 0;
background: linear-gradient(to bottom, #A3E2EF 35%, #4F9CC0);
height: 100%;
width: 0%;
animation: grow 2s forwards;
box-shadow: 0 0 8px 1px white inset;
&:before {
content: '';
display: block;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
background: url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/172299/bubbles-mask.gif);
mix-blend-mode: overlay;
opacity: 0.5;
}
}
}
.mc span {
display: inline-block;
color: #4F9CC0;
font-size: 0.7rem;
text-transform: uppercase;
letter-spacing: 1.5px;
margin-top: 0.7rem;
&:last-child {
float: right;
}
}
]]);
}
public S html() {
ret div(linesLL(
hemptytag input(type := "checkbox", id := id + "-cb"),
hlabelFor(id + "-cb", emptydiv(id := "fill")),
span("Progress"),
span("0%", id := id + "-progress"),
),
+id, class := mainClass);
}
S demo() {
ret hcombine(
hcss([[ html, body { margin: 0; height: 100%; width: 100%; } ]]),
complete(),
hjs([[
window.onload = function(){
var elm = document.querySelector('#' + $id + '-progress');
setInterval(function(){
if(!elm.innerHTML.match(/100%/gi)){
elm.innerHTML = (parseInt(elm.innerHTML) + 1) + '%';
} else {
clearInterval();
}
}, 100);
]], +id));
}
}