Primer Commit

This commit is contained in:
LuisAngelSalinasl
2025-08-04 18:51:41 -06:00
commit 8fcbb98114
8990 changed files with 1407288 additions and 0 deletions

167
dist/js/pages/chartist/chartist-init.css vendored Normal file
View File

@@ -0,0 +1,167 @@
.ct-sm-line-chart,
.ct-area-ln-chart,
#ct-polar-chart,
.ct-svg-chartct-bar-chart,
.total-revenue,
.chartist-chart {
position: relative;
}
.ct-sm-line-chart .ct-series-a .ct-line,
.ct-bar-chart .ct-series-a .ct-bar,
.ct-sm-line-chart .ct-series-a .ct-point,
.ct-donute-chart .ct-series-a .ct-slice-donut,
.ct-gauge-chart .ct-series-a .ct-slice-donut,
.ct-area-ln-chart .ct-series-a .ct-line,
.ct-area-ln-chart .ct-series-a .ct-point,
.ct-animation-chart .ct-series-a .ct-line,
.ct-animation-chart .ct-series-a .ct-point,
.ct-svg-chart .ct-series-a .ct-line,
.user-analytics .ct-series-a .ct-line,
.user-analytics .ct-series-a .ct-point {
stroke: #2962FF;
}
.ct-sm-line-chart .ct-series-b .ct-line,
.ct-bar-chart .ct-series-b .ct-bar,
.ct-sm-line-chart .ct-series-b .ct-point,
.ct-donute-chart .ct-series-b .ct-slice-donut,
.ct-gauge-chart .ct-series-b .ct-slice-donut,
.ct-animation-chart .ct-series-b .ct-line,
.ct-animation-chart .ct-series-b .ct-point,
.ct-svg-chart .ct-series-b .ct-line {
stroke: #f62d51;
}
.ct-sm-line-chart .ct-series-c .ct-line,
.ct-sm-line-chart .ct-series-c .ct-point,
.ct-donute-chart .ct-series-c .ct-slice-donut,
.ct-gauge-chart .ct-series-c .ct-slice-donut,
.ct-animation-chart .ct-series-c .ct-line,
.ct-animation-chart .ct-series-c .ct-point,
.ct-svg-chart .ct-series-c .ct-line {
stroke: #26c6da;
}
.ct-gauge-chart .ct-series-d .ct-slice-donut,
.ct-donute-chart .ct-series-d .ct-slice-donut {
stroke: #ffbc34;
}
.ct-donute-chart .ct-series-e .ct-slice-donut {
stroke: #4c5667;
}
.ct-donute-chart .ct-series-f .ct-slice-donut {
stroke: #02bec9;
}
.revenue .ct-series-a .ct-line {
stroke: #36bea6;
stroke-width: 1px;
}
.revenue .ct-series-a .ct-point {
stroke: #36bea6;
stroke-width: 5px;
}
.revenue .ct-series-a .ct-area {
fill: #36bea6;
}
.revenue .ct-series-b .ct-line {
stroke: #009efb;
stroke-width: 1px;
}
.revenue .ct-series-b .ct-point {
stroke: #009efb;
stroke-width: 5px;
}
.revenue .ct-series-b .ct-area {
fill: #009efb;
}
.ct-area-ln-chart .ct-series-a .ct-area,
.ct-svg-chart .ct-series-a .ct-area {
fill: #2962FF;
}
.user-analytics .ct-series-a .ct-area {
fill: none;
}
/*Android vs ios chart*/
.andvios .ct-series-a .ct-line,
.andvios .ct-series-b .ct-line {
stroke: transparent;
}
.andvios .ct-series-a .ct-point,
.andvios .ct-series-b .ct-point {
stroke-width: 3px;
stroke: #26c6da;
}
.andvios .ct-series-a .ct-area {
fill: #1eacbe;
fill-opacity: 0.3;
}
.andvios .ct-series-b .ct-area {
fill: #26c6da;
fill-opacity: 0.7;
}
/*Bandwidth data usege*/
.usage .ct-series-a .ct-line {
stroke: #fff;
}
.usage .ct-series-a .ct-point {
stroke-width: 0px;
}
.usage .ct-series-a .ct-area {
fill-opacity: 0;
}
/*Download stats */
.download-state .ct-series-b .ct-bar,
.download-state .ct-series-a .ct-bar {
stroke-width: 3px;
}
.download-state .ct-series-b .ct-bar {
stroke: #26c6da;
}
.download-state .ct-series-a .ct-bar {
stroke: #7460ee;
}

327
dist/js/pages/chartist/chartist-init.js vendored Normal file
View File

@@ -0,0 +1,327 @@
$(function () {
"use strict";
//Simple line chart
new Chartist.Line('.ct-sm-line-chart', {
labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],
series: [
[12, 9, 7, 8, 5],
[2, 1, 3.5, 7, 3],
[1, 3, 4, 5, 6]
]
}, {
fullWidth: true,
plugins: [
Chartist.plugins.tooltip()
],
chartPadding: {
right: 40
}
});
// line chart with area
new Chartist.Line('.ct-area-ln-chart', {
labels: [1, 2, 3, 4, 5, 6, 7, 8],
series: [
[5, 9, 7, 8, 5, 3, 5, 4]
]
}, {
low: 0,
plugins: [
Chartist.plugins.tooltip()
],
showArea: true
});
// ct-polar-chart
new Chartist.Line('#ct-polar-chart', {
labels: [1, 2, 3, 4, 5, 6, 7, 8],
series: [
[1, 2, 3, 1, -2, 0, 1, 0],
[-2, -1, -2, -1, -2.5, -1, -2, -1],
[0, 0, 0, 1, 2, 2.5, 2, 1],
[2.5, 2, 1, 0.5, 1, 0.5, -1, -2.5]
]
}, {
high: 3,
low: -3,
chartPadding: {
left: -20,
top:10,
},
showArea: true,
showLine: false,
showPoint: true,
fullWidth: true,
plugins: [
Chartist.plugins.tooltip()
],
axisX: {
showLabel: true,
showGrid: true
},
axisY: {
showLabel: false,
showGrid: true
}
});
// ct-animation-chart
var chart = new Chartist.Line('.ct-animation-chart', {
labels: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
series: [
[12, 9, 7, 8, 5, 4, 6, 2, 3, 3, 4, 6],
[4, 5, 3, 7, 3, 5, 5, 3, 4, 4, 5, 5],
[5, 3, 4, 5, 6, 3, 3, 4, 5, 6, 3, 4]
]
}, {
low: 0
});
// Let's put a sequence number aside so we can use it in the event callbacks
var seq = 0,
delays = 80,
durations = 500;
// Once the chart is fully created we reset the sequence
chart.on('created', function() {
seq = 0;
});
// On each drawn element by Chartist we use the Chartist.Svg API to trigger SMIL animations
chart.on('draw', function(data) {
seq++;
if(data.type === 'line') {
// If the drawn element is a line we do a simple opacity fade in. This could also be achieved using CSS3 animations.
data.element.animate({
opacity: {
// The delay when we like to start the animation
begin: seq * delays + 1000,
// Duration of the animation
dur: durations,
// The value where the animation should start
from: 0,
// The value where it should end
to: 1
}
});
} else if(data.type === 'label' && data.axis === 'x') {
data.element.animate({
y: {
begin: seq * delays,
dur: durations,
from: data.y + 100,
to: data.y,
// We can specify an easing function from Chartist.Svg.Easing
easing: 'easeOutQuart'
}
});
} else if(data.type === 'label' && data.axis === 'y') {
data.element.animate({
x: {
begin: seq * delays,
dur: durations,
from: data.x - 100,
to: data.x,
easing: 'easeOutQuart'
}
});
} else if(data.type === 'point') {
data.element.animate({
x1: {
begin: seq * delays,
dur: durations,
from: data.x - 10,
to: data.x,
easing: 'easeOutQuart'
},
x2: {
begin: seq * delays,
dur: durations,
from: data.x - 10,
to: data.x,
easing: 'easeOutQuart'
},
opacity: {
begin: seq * delays,
dur: durations,
from: 0,
to: 1,
easing: 'easeOutQuart'
}
});
} else if(data.type === 'grid') {
// Using data.axis we get x or y which we can use to construct our animation definition objects
var pos1Animation = {
begin: seq * delays,
dur: durations,
from: data[data.axis.units.pos + '1'] - 30,
to: data[data.axis.units.pos + '1'],
easing: 'easeOutQuart'
};
var pos2Animation = {
begin: seq * delays,
dur: durations,
from: data[data.axis.units.pos + '2'] - 100,
to: data[data.axis.units.pos + '2'],
easing: 'easeOutQuart'
};
var animations = {};
animations[data.axis.units.pos + '1'] = pos1Animation;
animations[data.axis.units.pos + '2'] = pos2Animation;
animations['opacity'] = {
begin: seq * delays,
dur: durations,
from: 0,
to: 1,
easing: 'easeOutQuart'
};
data.element.animate(animations);
}
});
// For the sake of the example we update the chart every time it's created with a delay of 10 seconds
chart.on('created', function() {
if(window.__exampleAnimateTimeout) {
clearTimeout(window.__exampleAnimateTimeout);
window.__exampleAnimateTimeout = null;
}
window.__exampleAnimateTimeout = setTimeout(chart.update.bind(chart), 12000);
});
// SVG Path animation graph
var chart = new Chartist.Line('.ct-svg-chart', {
labels: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
series: [
[1, 5, 2, 5, 4, 3],
[2, 3, 4, 8, 1, 2],
[5, 4, 3, 2, 1, 0.5]
]
}, {
low: 0,
showArea: true,
showPoint: false,
fullWidth: true
});
chart.on('draw', function(data) {
if(data.type === 'line' || data.type === 'area') {
data.element.animate({
d: {
begin: 2000 * data.index,
dur: 2000,
from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),
to: data.path.clone().stringify(),
easing: Chartist.Svg.Easing.easeOutQuint
}
});
}
});
// Bar chart
var data = {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
series: [
[5, 4, 3, 7, 5, 10, 3, 4, 8, 10, 6, 8],
[3, 2, 9, 5, 4, 6, 4, 6, 7, 8, 7, 4]
]
};
var options = {
seriesBarDistance: 10
};
var responsiveOptions = [
['screen and (max-width: 640px)', {
seriesBarDistance: 5,
axisX: {
labelInterpolationFnc: function (value) {
return value[0];
}
}
}]
];
new Chartist.Bar('.ct-bar-chart', data, options, responsiveOptions);
// ct-gauge-chart
new Chartist.Pie('.ct-gauge-chart', {
series: [20, 10, 30, 40]
}, {
donut: true,
donutWidth: 60,
startAngle: 270,
total: 200,
low:0,
showLabel: false
});
// Animated Donute chart
var chart = new Chartist.Pie('.ct-donute-chart', {
series: [10, 20, 50, 20, 5, 50, 15],
labels: [1, 2, 3, 4, 5, 6, 7]
}, {
donut: true,
showLabel: false
});
chart.on('draw', function(data) {
if(data.type === 'slice') {
// Get the total path length in order to use for dash array animation
var pathLength = data.element._node.getTotalLength();
// Set a dasharray that matches the path length as prerequisite to animate dashoffset
data.element.attr({
'stroke-dasharray': pathLength + 'px ' + pathLength + 'px'
});
// Create animation definition while also assigning an ID to the animation for later sync usage
var animationDefinition = {
'stroke-dashoffset': {
id: 'anim' + data.index,
dur: 1000,
from: -pathLength + 'px',
to: '0px',
easing: Chartist.Svg.Easing.easeOutQuint,
// We need to use `fill: 'freeze'` otherwise our animation will fall back to initial (not visible)
fill: 'freeze'
}
};
// If this was not the first slice, we need to time the animation so that it uses the end sync event of the previous animation
if(data.index !== 0) {
animationDefinition['stroke-dashoffset'].begin = 'anim' + (data.index - 1) + '.end';
}
// We need to set an initial value before the animation starts as we are not in guided mode which would do that for us
data.element.attr({
'stroke-dashoffset': -pathLength + 'px'
});
// We can't use guided mode as the animations need to rely on setting begin manually
// See http://gionkunz.github.io/chartist-js/api-documentation.html#chartistsvg-function-animate
data.element.animate(animationDefinition, false);
}
});
// For the sake of the example we update the chart every time it's created with a delay of 8 seconds
chart.on('created', function() {
if(window.__anim21278907124) {
clearTimeout(window.__anim21278907124);
window.__anim21278907124 = null;
}
window.__anim21278907124 = setTimeout(chart.update.bind(chart), 10000);
});
});

View File

@@ -0,0 +1,206 @@
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(["chartist"], function (Chartist) {
return (root.returnExportsGlobal = factory(Chartist));
});
} else if (typeof exports === 'object') {
// Node. Does not work with strict CommonJS, but
// only CommonJS-like enviroments that support module.exports,
// like Node.
module.exports = factory(require("chartist"));
} else {
root['Chartist.plugins.tooltips'] = factory(Chartist);
}
}(this, function (Chartist) {
/**
* Chartist.js plugin to display a data label on top of the points in a line chart.
*
*/
/* global Chartist */
(function (window, document, Chartist) {
'use strict';
var defaultOptions = {
currency: undefined,
currencyFormatCallback: undefined,
tooltipOffset: {
x: 0,
y: -20
},
anchorToPoint: false,
appendToBody: false,
class: undefined,
pointClass: 'ct-point'
};
Chartist.plugins = Chartist.plugins || {};
Chartist.plugins.tooltip = function (options) {
options = Chartist.extend({}, defaultOptions, options);
return function tooltip(chart) {
var tooltipSelector = options.pointClass;
if (chart instanceof Chartist.Bar) {
tooltipSelector = 'ct-bar';
} else if (chart instanceof Chartist.Pie) {
// Added support for donut graph
if (chart.options.donut) {
tooltipSelector = 'ct-slice-donut';
} else {
tooltipSelector = 'ct-slice-pie';
}
}
var $chart = chart.container;
var $toolTip = $chart.querySelector('.chartist-tooltip');
if (!$toolTip) {
$toolTip = document.createElement('div');
$toolTip.className = (!options.class) ? 'chartist-tooltip' : 'chartist-tooltip ' + options.class;
if (!options.appendToBody) {
$chart.appendChild($toolTip);
} else {
document.body.appendChild($toolTip);
}
}
var height = $toolTip.offsetHeight;
var width = $toolTip.offsetWidth;
hide($toolTip);
function on(event, selector, callback) {
$chart.addEventListener(event, function (e) {
if (!selector || hasClass(e.target, selector))
callback(e);
});
}
on('mouseover', tooltipSelector, function (event) {
var $point = event.target;
var tooltipText = '';
var isPieChart = (chart instanceof Chartist.Pie) ? $point : $point.parentNode;
var seriesName = (isPieChart) ? $point.parentNode.getAttribute('ct:meta') || $point.parentNode.getAttribute('ct:series-name') : '';
var meta = $point.getAttribute('ct:meta') || seriesName || '';
var hasMeta = !!meta;
var value = $point.getAttribute('ct:value');
if (options.transformTooltipTextFnc && typeof options.transformTooltipTextFnc === 'function') {
value = options.transformTooltipTextFnc(value);
}
if (options.tooltipFnc && typeof options.tooltipFnc === 'function') {
tooltipText = options.tooltipFnc(meta, value);
} else {
if (options.metaIsHTML) {
var txt = document.createElement('textarea');
txt.innerHTML = meta;
meta = txt.value;
}
meta = '<span class="chartist-tooltip-meta">' + meta + '</span>';
if (hasMeta) {
tooltipText += meta + '<br>';
} else {
// For Pie Charts also take the labels into account
// Could add support for more charts here as well!
if (chart instanceof Chartist.Pie) {
var label = next($point, 'ct-label');
if (label) {
tooltipText += text(label) + '<br>';
}
}
}
if (value) {
if (options.currency) {
if (options.currencyFormatCallback != undefined) {
value = options.currencyFormatCallback(value, options);
} else {
value = options.currency + value.replace(/(\d)(?=(\d{3})+(?:\.\d+)?$)/g, '$1,');
}
}
value = '<span class="chartist-tooltip-value">' + value + '</span>';
tooltipText += value;
}
}
if(tooltipText) {
$toolTip.innerHTML = tooltipText;
setPosition(event);
show($toolTip);
// Remember height and width to avoid wrong position in IE
height = $toolTip.offsetHeight;
width = $toolTip.offsetWidth;
}
});
on('mouseout', tooltipSelector, function () {
hide($toolTip);
});
on('mousemove', null, function (event) {
if (false === options.anchorToPoint)
setPosition(event);
});
function setPosition(event) {
height = height || $toolTip.offsetHeight;
width = width || $toolTip.offsetWidth;
var offsetX = - width / 2 + options.tooltipOffset.x
var offsetY = - height + options.tooltipOffset.y;
var anchorX, anchorY;
if (!options.appendToBody) {
var box = $chart.getBoundingClientRect();
var left = event.pageX - box.left - window.pageXOffset ;
var top = event.pageY - box.top - window.pageYOffset ;
if (true === options.anchorToPoint && event.target.x2 && event.target.y2) {
anchorX = parseInt(event.target.x2.baseVal.value);
anchorY = parseInt(event.target.y2.baseVal.value);
}
$toolTip.style.top = (anchorY || top) + offsetY + 'px';
$toolTip.style.left = (anchorX || left) + offsetX + 'px';
} else {
$toolTip.style.top = event.pageY + offsetY + 'px';
$toolTip.style.left = event.pageX + offsetX + 'px';
}
}
}
};
function show(element) {
if(!hasClass(element, 'tooltip-show')) {
element.className = element.className + ' tooltip-show';
}
}
function hide(element) {
var regex = new RegExp('tooltip-show' + '\\s*', 'gi');
element.className = element.className.replace(regex, '').trim();
}
function hasClass(element, className) {
return (' ' + element.getAttribute('class') + ' ').indexOf(' ' + className + ' ') > -1;
}
function next(element, className) {
do {
element = element.nextSibling;
} while (element && !hasClass(element, className));
return element;
}
function text(element) {
return element.innerText || element.textContent;
}
} (window, document, Chartist));
return Chartist.plugins.tooltips;
}));