initial commit

This commit is contained in:
2017-12-14 10:17:13 +01:00
commit db72cb61d3
6942 changed files with 1773088 additions and 0 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1,215 @@
/*!
* chartjs-plugin-deferred
* http://chartjs.org/
* Version: 0.2.0
*
* Copyright 2016 Simon Brunel
* Released under the MIT license
* https://github.com/chartjs/chartjs-plugin-deferred/blob/master/LICENSE.md
*/
/* global window: false */
'use strict';
(function() {
var Chart = window.Chart;
var helpers = Chart.helpers;
var STUB_KEY = '_chartjs_deferred';
var MODEL_KEY = '_deferred_model';
/**
* Plugin based on discussion from Chart.js issue #2745.
* @see https://github.com/chartjs/Chart.js/issues/2745
*/
Chart.Deferred = Chart.Deferred || {};
Chart.Deferred.defaults = {
enabled: true,
xOffset: 0,
yOffset: 0,
delay: 0
};
// DOM implementation
// @TODO move it in Chart.js: src/core/core.platform.js
Chart.platform = helpers.extend(Chart.platform || {}, {
defer: function(fn, delay, scope) {
var callback = function() {
fn.call(scope);
};
if (!delay) {
helpers.requestAnimFrame.call(window, callback);
} else {
window.setTimeout(callback, delay);
}
}
});
function computeOffset(value, base) {
var number = parseInt(value, 10);
if (isNaN(number)) {
return 0;
} else if (typeof value === 'string' && value.indexOf('%') !== -1) {
return number / 100 * base;
}
return number;
}
function chartInViewport(instance) {
var model = instance[MODEL_KEY];
var canvas = instance.chart.canvas;
// http://stackoverflow.com/a/21696585
if (canvas.offsetParent === null) {
return false;
}
var rect = canvas.getBoundingClientRect();
var dy = computeOffset(model.yOffset || 0, rect.height);
var dx = computeOffset(model.xOffset || 0, rect.width);
return rect.right - dx >= 0
&& rect.bottom - dy >= 0
&& rect.left + dx <= window.innerWidth
&& rect.top + dy <= window.innerHeight;
}
function buildDeferredModel(instance) {
var defaults = Chart.Deferred.defaults;
var options = instance.options.deferred;
var getValue = helpers.getValueOrDefault;
if (options === undefined) {
options = {};
} else if (typeof options === 'boolean') {
// accepting { options: { deferred: true } }
options = {enabled: options};
}
return {
enabled: getValue(options.enabled, defaults.enabled),
xOffset: getValue(options.xOffset, defaults.xOffset),
yOffset: getValue(options.yOffset, defaults.yOffset),
delay: getValue(options.delay, defaults.delay),
appeared: false,
delayed: false,
loaded: false,
elements: []
};
}
function onScroll(event) {
var node = event.target;
var stub = node[STUB_KEY];
if (stub.ticking) {
return;
}
stub.ticking = true;
Chart.platform.defer(function() {
var instances = stub.instances.slice();
var ilen = instances.length;
var instance, i;
for (i=0; i<ilen; ++i) {
instance = instances[i];
if (chartInViewport(instance)) {
unwatch(instance); // eslint-disable-line
instance[MODEL_KEY].appeared = true;
instance.update();
}
}
stub.ticking = false;
});
}
function isScrollable(node) {
var type = node.nodeType;
if (type === Node.ELEMENT_NODE) {
var overflowX = helpers.getStyle(node, 'overflow-x');
var overflowY = helpers.getStyle(node, 'overflow-y');
return overflowX === 'auto' || overflowX === 'scroll'
|| overflowY === 'auto' || overflowY === 'scroll';
}
return node.nodeType === Node.DOCUMENT_NODE;
}
function watch(instance) {
var canvas = instance.chart.canvas;
var parent = canvas.parentElement;
var stub, instances;
while (parent) {
if (isScrollable(parent)) {
stub = parent[STUB_KEY] || (parent[STUB_KEY] = {});
instances = stub.instances || (stub.instances = []);
if (instances.length === 0) {
parent.addEventListener('scroll', onScroll, {passive: true});
}
instances.push(instance);
instance[MODEL_KEY].elements.push(parent);
}
parent = parent.parentElement || parent.ownerDocument;
}
}
function unwatch(instance) {
instance[MODEL_KEY].elements.forEach(function(element) {
var instances = element[STUB_KEY].instances;
instances.splice(instances.indexOf(instance), 1);
if (!instances.length) {
helpers.removeEvent(element, 'scroll', onScroll);
delete element[STUB_KEY];
}
});
instance[MODEL_KEY].elements = [];
}
Chart.plugins.register({
beforeInit: function(instance) {
var model = instance[MODEL_KEY] = buildDeferredModel(instance);
if (model.enabled) {
watch(instance);
}
},
beforeDatasetsUpdate: function(instance) {
var model = instance[MODEL_KEY];
if (!model.enabled) {
return true;
}
if (!model.loaded) {
if (!model.appeared && !chartInViewport(instance)) {
// cancel the datasets update
return false;
}
model.appeared = true;
model.loaded = true;
unwatch(instance);
if (model.delay > 0) {
model.delayed = true;
Chart.platform.defer(function() {
model.delayed = false;
instance.update();
}, model.delay);
return false;
}
}
if (model.delayed) {
// in case of delayed update, ensure to block external requests, such
// as interacting with the legend label, or direct calls to update()
return false;
}
}
});
}());
@@ -0,0 +1,10 @@
/*!
* chartjs-plugin-deferred
* http://chartjs.org/
* Version: 0.2.0
*
* Copyright 2016 Simon Brunel
* Released under the MIT license
* https://github.com/chartjs/chartjs-plugin-deferred/blob/master/LICENSE.md
*/
"use strict";!function(){function e(e,t){var n=parseInt(e,10);return isNaN(n)?0:"string"==typeof e&&e.indexOf("%")!==-1?n/100*t:n}function t(t){var n=t[s],r=t.chart.canvas;if(null===r.offsetParent)return!1;var a=r.getBoundingClientRect(),f=e(n.yOffset||0,a.height),d=e(n.xOffset||0,a.width);return a.right-d>=0&&a.bottom-f>=0&&a.left+d<=window.innerWidth&&a.top+f<=window.innerHeight}function n(e){var t=l.Deferred.defaults,n=e.options.deferred,r=o.getValueOrDefault;return void 0===n?n={}:"boolean"==typeof n&&(n={enabled:n}),{enabled:r(n.enabled,t.enabled),xOffset:r(n.xOffset,t.xOffset),yOffset:r(n.yOffset,t.yOffset),delay:r(n.delay,t.delay),appeared:!1,delayed:!1,loaded:!1,elements:[]}}function r(e){var n=e.target,r=n[i];r.ticking||(r.ticking=!0,l.platform.defer(function(){var e,n,a=r.instances.slice(),f=a.length;for(n=0;n<f;++n)e=a[n],t(e)&&(d(e),e[s].appeared=!0,e.update());r.ticking=!1}))}function a(e){var t=e.nodeType;if(t===Node.ELEMENT_NODE){var n=o.getStyle(e,"overflow-x"),r=o.getStyle(e,"overflow-y");return"auto"===n||"scroll"===n||"auto"===r||"scroll"===r}return e.nodeType===Node.DOCUMENT_NODE}function f(e){for(var t,n,f=e.chart.canvas,d=f.parentElement;d;)a(d)&&(t=d[i]||(d[i]={}),n=t.instances||(t.instances=[]),0===n.length&&d.addEventListener("scroll",r,{passive:!0}),n.push(e),e[s].elements.push(d)),d=d.parentElement||d.ownerDocument}function d(e){e[s].elements.forEach(function(t){var n=t[i].instances;n.splice(n.indexOf(e),1),n.length||(o.removeEvent(t,"scroll",r),delete t[i])}),e[s].elements=[]}var l=window.Chart,o=l.helpers,i="_chartjs_deferred",s="_deferred_model";l.Deferred=l.Deferred||{},l.Deferred.defaults={enabled:!0,xOffset:0,yOffset:0,delay:0},l.platform=o.extend(l.platform||{},{defer:function(e,t,n){var r=function(){e.call(n)};t?window.setTimeout(r,t):o.requestAnimFrame.call(window,r)}}),l.plugins.register({beforeInit:function(e){var t=e[s]=n(e);t.enabled&&f(e)},beforeDatasetsUpdate:function(e){var n=e[s];if(!n.enabled)return!0;if(!n.loaded){if(!n.appeared&&!t(e))return!1;if(n.appeared=!0,n.loaded=!0,d(e),n.delay>0)return n.delayed=!0,l.platform.defer(function(){n.delayed=!1,e.update()},n.delay),!1}return!n.delayed&&void 0}})}();
@@ -0,0 +1,6 @@
.chartjs-wrapper canvas {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}