UNPKG

zettapi_client

Version:

Client side CRUD operations in angular to use with zettapi_server rest api to get started quickly in any CMS project

111 lines (89 loc) 3.44 kB
'use strict'; module.exports = function() { // Occupy the global variable of Chart, and create a simple base class var Chart = function(context, config) { var me = this; var helpers = Chart.helpers; me.config = config || { data: { datasets: [] } }; // Support a jQuery'd canvas element if (context.length && context[0].getContext) { context = context[0]; } // Support a canvas domnode if (context.getContext) { context = context.getContext('2d'); } me.ctx = context; me.canvas = context.canvas; context.canvas.style.display = context.canvas.style.display || 'block'; // Figure out what the size of the chart will be. // If the canvas has a specified width and height, we use those else // we look to see if the canvas node has a CSS width and height. // If there is still no height, fill the parent container me.width = context.canvas.width || parseInt(helpers.getStyle(context.canvas, 'width'), 10) || helpers.getMaximumWidth(context.canvas); me.height = context.canvas.height || parseInt(helpers.getStyle(context.canvas, 'height'), 10) || helpers.getMaximumHeight(context.canvas); me.aspectRatio = me.width / me.height; if (isNaN(me.aspectRatio) || isFinite(me.aspectRatio) === false) { // If the canvas has no size, try and figure out what the aspect ratio will be. // Some charts prefer square canvases (pie, radar, etc). If that is specified, use that // else use the canvas default ratio of 2 me.aspectRatio = config.aspectRatio !== undefined ? config.aspectRatio : 2; } // Store the original style of the element so we can set it back me.originalCanvasStyleWidth = context.canvas.style.width; me.originalCanvasStyleHeight = context.canvas.style.height; // High pixel density displays - multiply the size of the canvas height/width by the device pixel ratio, then scale. helpers.retinaScale(me); me.controller = new Chart.Controller(me); // Always bind this so that if the responsive state changes we still work helpers.addResizeListener(context.canvas.parentNode, function() { if (me.controller && me.controller.config.options.responsive) { me.controller.resize(); } }); return me.controller ? me.controller : me; }; // Globally expose the defaults to allow for user updating/changing Chart.defaults = { global: { responsive: true, responsiveAnimationDuration: 0, maintainAspectRatio: true, events: ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'], hover: { onHover: null, mode: 'single', animationDuration: 400 }, onClick: null, defaultColor: 'rgba(0,0,0,0.1)', defaultFontColor: '#666', defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", defaultFontSize: 12, defaultFontStyle: 'normal', showLines: true, // Element defaults defined in element extensions elements: {}, // Legend callback string legendCallback: function(chart) { var text = []; text.push('<ul class="' + chart.id + '-legend">'); for (var i = 0; i < chart.data.datasets.length; i++) { text.push('<li><span style="background-color:' + chart.data.datasets[i].backgroundColor + '"></span>'); if (chart.data.datasets[i].label) { text.push(chart.data.datasets[i].label); } text.push('</li>'); } text.push('</ul>'); return text.join(''); } } }; Chart.Chart = Chart; return Chart; };