bootstrap-italia
Version:
Bootstrap Italia è un tema Bootstrap 5 per la creazione di applicazioni web nel pieno rispetto delle linee guida di design per i siti internet e i servizi digitali della PA
117 lines (96 loc) • 2.81 kB
JavaScript
import Circle from 'progressbar.js/src/circle.js';
import BaseComponent from './base-component.js';
import SelectorEngine from './dom/selector-engine.js';
import Manipulator from './dom/manipulator.js';
/**
* --------------------------------------------------------------------------
* Bootstrap Italia (https://italia.github.io/bootstrap-italia/)
* Authors: https://github.com/italia/bootstrap-italia/blob/main/AUTHORS
* Licensed under BSD-3-Clause license (https://github.com/italia/bootstrap-italia/blob/main/LICENSE)
* --------------------------------------------------------------------------
*/
const NAME = 'progressdonut';
const SELECTOR_DONUT = '[data-bs-progress-donut]';
const Default = {
color: '#5C6F82',
trailColor: '#D9DADB',
// This has to be the same size as the maximum width to
// prevent clipping
strokeWidth: 24,
trailWidth: 12,
easing: 'easeInOut',
duration: 1400,
text: {
autoStyleContainer: false,
},
animate: true,
value: 0,
//from: { color: '#aaa', width: 1 },
//to: { color: '#333', width: 4 },
};
class ProgressDonut extends BaseComponent {
constructor(element, config) {
super(element);
this._config = this._getConfig(config);
this._bar = null;
this._init();
}
// Getters
static get NAME() {
return NAME
}
// Public
set(progess) {
if (this._config.animate) {
this._bar.animate(progess);
} else {
this._bar.set(progess);
}
}
dispose() {
this._bar.destroy();
super.dispose();
}
// Private
_getConfig(config) {
config = {
...Default,
...{ step: this._getStepCallback() },
...Manipulator.getDataAttributes(this._element),
...(typeof config === 'object' ? config : {}),
};
//config.value = parseFloat(config.value)
return config
}
_getStepCallback() {
return (state, circle) => {
//circle.path.setAttribute('stroke', state.color)
//circle.path.setAttribute('stroke-width', state.width)
const value = Math.round(circle.value() * 100);
circle.setText(value + '%');
/*if (value === 0) {
circle.setText('')
} else {
circle.setText(value)
}*/
}
}
_init() {
this._bar = new Circle(this._element, this._config);
if (this._config.value > 0) {
this.set(this._config.value);
}
}
}
/**
* ------------------------------------------------------------------------
* Data Api implementation
* ------------------------------------------------------------------------
*/
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
SelectorEngine.find(SELECTOR_DONUT).forEach((donut) => {
ProgressDonut.getOrCreateInstance(donut);
});
}
export { ProgressDonut as default };
//# sourceMappingURL=progress-donut.js.map