| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- import { round, typeset } from './utilities';
- export function createProgressBar(options) {
- // dimensions
- let width, height;
- let x, y;
- // common options
- let colours;
- let lang; // needed for number formatting
- let controller;
- let max;
- // svg element
- let progressGroup;
- function progressBar(selection) {
- progressGroup = selection.append('g')
- .attr('class', 'progress');
- progressGroup.append('rect')
- .attr('class', 'pbbg')
- .attr('fill', colours.background);
- progressGroup.append('rect')
- .attr('class', 'pbindirect')
- .attr('opacity', 0.8)
- .attr('fill', colours.text);
- let indi = progressGroup.append('g')
- .attr('class', 'indicator');
- indi.append('path')
- .attr('stroke', colours.text);
- indi.append('text')
- .attr('x', (-width * 0.125))
- .attr('fill', colours.text)
- .attr('text-anchor', 'end');
- progressGroup.attr('transform', 'translate(' + x + ',' + y + ')');
- progressGroup.select('rect.pbbg')
- .attr('height', height)
- .attr('width', width);
- progressGroup.select('rect.pbindirect')
- .attr('width', width);
- progressGroup.select('.indicator path')
- .attr('d', 'M ' + (-width * 0.125) + ' 0 L 0 0'); // line progress indicator
- }
- progressBar.draw = function(cProgress) {
- let indi = progressGroup.select('.indicator');
- indi.attr('transform', 'translate(0,' + height * cProgress + ')');
- progressGroup.select('.pbindirect')
- .attr('height', height * cProgress);
- indi.select('text')
- .text(typeset(round(max * cProgress), lang));
- };
- progressBar.lang = function(val) {
- if(!arguments.length) {
- return lang;
- }
- lang = val;
- return progressBar;
- };
- progressBar.max = function(val) {
- if(!arguments.length) {
- return max;
- }
- max = val;
- return progressBar;
- };
- progressBar.controller = function(val) {
- if(!arguments.length) {
- return controller;
- }
- controller = val;
- return progressBar;
- };
- progressBar.width = function(val) {
- if(!arguments.length) {
- return width;
- }
- width = val;
- return progressBar;
- };
- progressBar.height = function(val) {
- if(!arguments.length) {
- return height;
- }
- height = val;
- return progressBar;
- };
- progressBar.x = function(val) {
- if(!arguments.length) {
- return x;
- }
- x = val;
- return progressBar;
- };
- progressBar.y = function(val) {
- if(!arguments.length) {
- return y;
- }
- y = val;
- return progressBar;
- };
- progressBar.colours = function(val) {
- if(!arguments.length) {
- return colours;
- }
- colours = val;
- return progressBar;
- };
- progressBar.controller(options.common.controller);
- progressBar.lang(options.common.lang);
- progressBar.width(options.width);
- progressBar.height(options.height);
- progressBar.x(options.x);
- progressBar.y(options.y);
- progressBar.colours(options.common.colours);
- progressBar.max(options.max);
- return progressBar;
- }
|