removed unnecessary libraries d3, and3, nvd3 and c3 from Admin UI
parent
d049269d58
commit
1ccb6bdfef
|
@ -15,7 +15,6 @@
|
|||
//'ngDragDrop',
|
||||
'hjc.directives.dragdrop',
|
||||
'angular-loading-bar',
|
||||
'nvd3',
|
||||
'thatisuday.dropzone'
|
||||
])
|
||||
})();
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
.c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:gray;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;-webkit-box-shadow:7px 7px 12px -9px #777;-moz-box-shadow:7px 7px 12px -9px #777;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #CCC}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#FFF}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:none}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max,.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}
|
|
@ -26,7 +26,6 @@
|
|||
<!-- Main Inspinia CSS files -->
|
||||
<link href="css/animate.css" rel="stylesheet">
|
||||
<link href="js/plugins/angular-loading-bar/loading-bar.css" rel="stylesheet">
|
||||
<link href="js/nvd3/nv.d3.css" rel="stylesheet">
|
||||
<link href="js/dropzone/basic.css" rel="stylesheet">
|
||||
<link href="js/dropzone/dropzone.css" rel="stylesheet">
|
||||
<link id="loadBefore" href="css/style.css" rel="stylesheet">
|
||||
|
@ -65,8 +64,6 @@
|
|||
<script src="js/angular-highcharts/sankey.js" ></script>
|
||||
<script src="js/angular-highcharts/solid-gauge.src.js" ></script>
|
||||
<script src="js/angular-highcharts/heatmap.src.js" ></script>
|
||||
<script src="js/d3/d3.js" ></script>
|
||||
<script src="js/nvd3/nv.d3.js" ></script>
|
||||
<!-- SlimScroll -->
|
||||
<script src="js/plugins/slimscroll/jquery.slimscroll.min.js"></script>
|
||||
|
||||
|
@ -78,7 +75,6 @@
|
|||
<script src="js/angular/angular-sanitize.js"></script>
|
||||
<!-- <script src="js/angular/angular-dragdrop.min.js"></script> -->
|
||||
<script src="js/angular-highcharts/highcharts-ng.js"></script>
|
||||
<script src="js/and3/and3.js"></script>
|
||||
<script src="js/dropzone/ng-dropzone.js"></script>
|
||||
<script src="js/plugins/oclazyload/dist/ocLazyLoad.min.js"></script>
|
||||
<script src="js/angular-translate/angular-translate.min.js"></script>
|
||||
|
|
|
@ -1,652 +0,0 @@
|
|||
/**************************************************************************
|
||||
* and3, v1.0.9; MIT
|
||||
**************************************************************************/
|
||||
(function(window){
|
||||
|
||||
'use strict';
|
||||
var nv = window.nv;
|
||||
|
||||
// Node.js or CommonJS
|
||||
if (typeof(exports) !== 'undefined') {
|
||||
/* jshint -W020 */
|
||||
nv = require('nvd3');
|
||||
/* jshint +W020 */
|
||||
}
|
||||
|
||||
angular.module('nvd3', [])
|
||||
|
||||
.directive('nvd3', ['nvd3Utils', function(nvd3Utils){
|
||||
return {
|
||||
restrict: 'AE',
|
||||
scope: {
|
||||
data: '=', //chart data, [required]
|
||||
options: '=', //chart options, according to nvd3 core api, [required]
|
||||
api: '=?', //directive global api, [optional]
|
||||
events: '=?', //global events that directive would subscribe to, [optional]
|
||||
config: '=?', //global directive configuration, [optional]
|
||||
onReady: '&?' //callback function that is called with internal scope when directive is created [optional]
|
||||
},
|
||||
link: function(scope, element, attrs){
|
||||
var defaultConfig = {
|
||||
extended: false,
|
||||
visible: true,
|
||||
disabled: false,
|
||||
refreshDataOnly: true,
|
||||
deepWatchOptions: true,
|
||||
deepWatchData: true,
|
||||
deepWatchDataDepth: 2, // 0 - by reference (cheap), 1 - by collection item (the middle), 2 - by value (expensive)
|
||||
debounce: 10, // default 10ms, time silence to prevent refresh while multiple options changes at a time
|
||||
debounceImmediate: true // immediate flag for debounce function
|
||||
};
|
||||
|
||||
//flag indicates if directive and chart is ready
|
||||
scope.isReady = false;
|
||||
|
||||
//basic directive configuration
|
||||
scope._config = angular.extend(defaultConfig, scope.config);
|
||||
|
||||
//directive global api
|
||||
scope.api = {
|
||||
// Fully refresh directive
|
||||
refresh: function(){
|
||||
scope.api.updateWithOptions();
|
||||
scope.isReady = true;
|
||||
},
|
||||
|
||||
// Fully refresh directive with specified timeout
|
||||
refreshWithTimeout: function(t){
|
||||
setTimeout(function(){
|
||||
scope.api.refresh();
|
||||
}, t);
|
||||
},
|
||||
|
||||
// Update chart layout (for example if container is resized)
|
||||
update: function() {
|
||||
if (scope.chart && scope.svg) {
|
||||
if (scope.options.chart.type === 'sunburstChart') {
|
||||
scope.svg.datum(angular.copy(scope.data)).call(scope.chart);
|
||||
} else {
|
||||
scope.svg.datum(scope.data).call(scope.chart);
|
||||
}
|
||||
} else {
|
||||
scope.api.refresh();
|
||||
}
|
||||
},
|
||||
|
||||
// Update chart layout with specified timeout
|
||||
updateWithTimeout: function(t){
|
||||
setTimeout(function(){
|
||||
scope.api.update();
|
||||
}, t);
|
||||
},
|
||||
|
||||
// Update chart with new options
|
||||
updateWithOptions: function(options){
|
||||
// set options
|
||||
if (!arguments.length) {
|
||||
options = scope.options;
|
||||
} else {
|
||||
scope.options = options;
|
||||
|
||||
// return if options $watch is enabled
|
||||
if (scope._config.deepWatchOptions && !scope._config.disabled) return;
|
||||
}
|
||||
|
||||
// Clearing
|
||||
scope.api.clearElement();
|
||||
|
||||
// Exit if options are not yet bound
|
||||
if (angular.isDefined(options) === false) return;
|
||||
|
||||
// Exit if chart is hidden
|
||||
if (!scope._config.visible) return;
|
||||
|
||||
// Initialize chart with specific type
|
||||
scope.chart = nv.models[options.chart.type]();
|
||||
|
||||
// Generate random chart ID
|
||||
scope.chart.id = Math.random().toString(36).substr(2, 15);
|
||||
|
||||
angular.forEach(scope.chart, function(value, key){
|
||||
if (key[0] === '_');
|
||||
else if ([
|
||||
'clearHighlights',
|
||||
'highlightPoint',
|
||||
'id',
|
||||
'options',
|
||||
'resizeHandler',
|
||||
'state',
|
||||
'open',
|
||||
'close',
|
||||
'tooltipContent'
|
||||
].indexOf(key) >= 0);
|
||||
|
||||
else if (key === 'dispatch') {
|
||||
if (options.chart[key] === undefined || options.chart[key] === null) {
|
||||
if (scope._config.extended) options.chart[key] = {};
|
||||
}
|
||||
configureEvents(scope.chart[key], options.chart[key]);
|
||||
}
|
||||
|
||||
else if ([
|
||||
'bars',
|
||||
'bars1',
|
||||
'bars2',
|
||||
'boxplot',
|
||||
'bullet',
|
||||
'controls',
|
||||
'discretebar',
|
||||
'distX',
|
||||
'distY',
|
||||
'focus',
|
||||
'interactiveLayer',
|
||||
'legend',
|
||||
'lines',
|
||||
'lines1',
|
||||
'lines2',
|
||||
'multibar',
|
||||
'pie',
|
||||
'scatter',
|
||||
'scatters1',
|
||||
'scatters2',
|
||||
'sparkline',
|
||||
'stack1',
|
||||
'stack2',
|
||||
'sunburst',
|
||||
'tooltip',
|
||||
'x2Axis',
|
||||
'xAxis',
|
||||
'y1Axis',
|
||||
'y2Axis',
|
||||
'y3Axis',
|
||||
'y4Axis',
|
||||
'yAxis',
|
||||
'yAxis1',
|
||||
'yAxis2'
|
||||
].indexOf(key) >= 0 ||
|
||||
// stacked is a component for stackedAreaChart, but a boolean for multiBarChart and multiBarHorizontalChart
|
||||
(key === 'stacked' && options.chart.type === 'stackedAreaChart')) {
|
||||
if (options.chart[key] === undefined || options.chart[key] === null) {
|
||||
if (scope._config.extended) options.chart[key] = {};
|
||||
}
|
||||
configure(scope.chart[key], options.chart[key], options.chart.type);
|
||||
}
|
||||
|
||||
//TODO: need to fix bug in nvd3
|
||||
else if ((key === 'focusHeight') && options.chart.type === 'lineChart');
|
||||
else if ((key === 'focusHeight') && options.chart.type === 'lineWithFocusChart');
|
||||
else if ((key === 'xTickFormat' || key === 'yTickFormat') && options.chart.type === 'lineWithFocusChart');
|
||||
else if ((key === 'tooltips') && options.chart.type === 'boxPlotChart');
|
||||
else if ((key === 'tooltipXContent' || key === 'tooltipYContent') && options.chart.type === 'scatterChart');
|
||||
else if ((key === 'x' || key === 'y') && options.chart.type === 'forceDirectedGraph');
|
||||
|
||||
else if (options.chart[key] === undefined || options.chart[key] === null){
|
||||
if (scope._config.extended) {
|
||||
if (key==='barColor')
|
||||
options.chart[key] = value()();
|
||||
else
|
||||
options.chart[key] = value();
|
||||
}
|
||||
}
|
||||
|
||||
else scope.chart[key](options.chart[key]);
|
||||
});
|
||||
|
||||
// Update with data
|
||||
scope.api.updateWithData();
|
||||
|
||||
// Configure wrappers
|
||||
if (options['title'] || scope._config.extended) configureWrapper('title');
|
||||
if (options['subtitle'] || scope._config.extended) configureWrapper('subtitle');
|
||||
if (options['caption'] || scope._config.extended) configureWrapper('caption');
|
||||
|
||||
|
||||
// Configure styles
|
||||
if (options['styles'] || scope._config.extended) configureStyles();
|
||||
|
||||
nv.addGraph(function() {
|
||||
if (!scope.chart) return;
|
||||
|
||||
// Remove resize handler. Due to async execution should be placed here, not in the clearElement
|
||||
if (scope.chart.resizeHandler) scope.chart.resizeHandler.clear();
|
||||
|
||||
// Update the chart when window resizes
|
||||
scope.chart.resizeHandler = nv.utils.windowResize(function() {
|
||||
scope.chart && scope.chart.update && scope.chart.update();
|
||||
});
|
||||
|
||||
/// Zoom feature
|
||||
if (options.chart.zoom !== undefined && [
|
||||
'scatterChart',
|
||||
'lineChart',
|
||||
'candlestickBarChart',
|
||||
'cumulativeLineChart',
|
||||
'historicalBarChart',
|
||||
'ohlcBarChart',
|
||||
'stackedAreaChart'
|
||||
].indexOf(options.chart.type) > -1) {
|
||||
nvd3Utils.zoom(scope, options);
|
||||
}
|
||||
|
||||
return scope.chart;
|
||||
}, options.chart['callback']);
|
||||
},
|
||||
|
||||
// Update chart with new data
|
||||
updateWithData: function (data){
|
||||
// set data
|
||||
if (!arguments.length) {
|
||||
if (scope.options.chart.type === 'sunburstChart') {
|
||||
data = angular.copy(scope.data);
|
||||
} else {
|
||||
data = scope.data;
|
||||
}
|
||||
} else {
|
||||
scope.data = data;
|
||||
|
||||
// return if data $watch is enabled
|
||||
if (scope._config.deepWatchData && !scope._config.disabled) return;
|
||||
}
|
||||
|
||||
if (data) {
|
||||
// remove whole svg element with old data
|
||||
d3.select(element[0]).select('svg').remove();
|
||||
|
||||
var h, w;
|
||||
|
||||
// Select the current element to add <svg> element and to render the chart in
|
||||
scope.svg = d3.select(element[0]).insert('svg', '.caption');
|
||||
if (h = scope.options.chart.height) {
|
||||
if (!isNaN(+h)) h += 'px'; //check if height is number
|
||||
scope.svg.attr('height', h).style({height: h});
|
||||
}
|
||||
if (w = scope.options.chart.width) {
|
||||
if (!isNaN(+w)) w += 'px'; //check if width is number
|
||||
scope.svg.attr('width', w).style({width: w});
|
||||
} else {
|
||||
scope.svg.attr('width', '100%').style({width: '100%'});
|
||||
}
|
||||
|
||||
scope.svg.datum(data).call(scope.chart);
|
||||
|
||||
// update zooming if exists
|
||||
if (scope.chart && scope.chart.zoomRender) scope.chart.zoomRender();
|
||||
}
|
||||
},
|
||||
|
||||
// Fully clear directive element
|
||||
clearElement: function (){
|
||||
element.find('.title').remove();
|
||||
element.find('.subtitle').remove();
|
||||
element.find('.caption').remove();
|
||||
element.empty();
|
||||
|
||||
// remove tooltip if exists
|
||||
if (scope.chart && scope.chart.tooltip && scope.chart.tooltip.id) {
|
||||
d3.select('#' + scope.chart.tooltip.id()).remove();
|
||||
}
|
||||
|
||||
// To be compatible with old nvd3 (v1.7.1)
|
||||
if (nv.graphs && scope.chart) {
|
||||
for (var i = nv.graphs.length - 1; i >= 0; i--) {
|
||||
if (nv.graphs[i] && (nv.graphs[i].id === scope.chart.id)) {
|
||||
nv.graphs.splice(i, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nv.tooltip && nv.tooltip.cleanup) {
|
||||
nv.tooltip.cleanup();
|
||||
}
|
||||
if (scope.chart && scope.chart.resizeHandler) scope.chart.resizeHandler.clear();
|
||||
scope.chart = null;
|
||||
},
|
||||
|
||||
// Get full directive scope
|
||||
getScope: function(){ return scope; },
|
||||
|
||||
// Get directive element
|
||||
getElement: function(){ return element; }
|
||||
};
|
||||
|
||||
// Configure the chart model with the passed options
|
||||
function configure(chart, options, chartType){
|
||||
if (chart && options){
|
||||
angular.forEach(chart, function(value, key){
|
||||
if (key[0] === '_');
|
||||
else if (key === 'dispatch') {
|
||||
if (options[key] === undefined || options[key] === null) {
|
||||
if (scope._config.extended) options[key] = {};
|
||||
}
|
||||
configureEvents(value, options[key]);
|
||||
}
|
||||
else if (key === 'tooltip') {
|
||||
if (options[key] === undefined || options[key] === null) {
|
||||
if (scope._config.extended) options[key] = {};
|
||||
}
|
||||
configure(chart[key], options[key], chartType);
|
||||
}
|
||||
else if (key === 'contentGenerator') {
|
||||
if (options[key]) chart[key](options[key]);
|
||||
}
|
||||
else if ([
|
||||
'axis',
|
||||
'clearHighlights',
|
||||
'defined',
|
||||
'highlightPoint',
|
||||
'nvPointerEventsClass',
|
||||
'options',
|
||||
'rangeBand',
|
||||
'rangeBands',
|
||||
'scatter',
|
||||
'open',
|
||||
'close',
|
||||
'node'
|
||||
].indexOf(key) === -1) {
|
||||
if (options[key] === undefined || options[key] === null){
|
||||
if (scope._config.extended) options[key] = value();
|
||||
}
|
||||
else chart[key](options[key]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Subscribe to the chart events (contained in 'dispatch')
|
||||
// and pass eventHandler functions in the 'options' parameter
|
||||
function configureEvents(dispatch, options){
|
||||
if (dispatch && options){
|
||||
angular.forEach(dispatch, function(value, key){
|
||||
if (options[key] === undefined || options[key] === null){
|
||||
if (scope._config.extended) options[key] = value.on;
|
||||
}
|
||||
else dispatch.on(key + '._', options[key]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Configure 'title', 'subtitle', 'caption'.
|
||||
// nvd3 has no sufficient models for it yet.
|
||||
function configureWrapper(name){
|
||||
var _ = nvd3Utils.deepExtend(defaultWrapper(name), scope.options[name] || {});
|
||||
|
||||
if (scope._config.extended) scope.options[name] = _;
|
||||
|
||||
var wrapElement = angular.element('<div></div>').html(_['html'] || '')
|
||||
.addClass(name).addClass(_.className)
|
||||
.removeAttr('style')
|
||||
.css(_.css);
|
||||
|
||||
if (!_['html']) wrapElement.text(_.text);
|
||||
|
||||
if (_.enable) {
|
||||
if (name === 'title') element.prepend(wrapElement);
|
||||
else if (name === 'subtitle') angular.element(element[0].querySelector('.title')).after(wrapElement);
|
||||
else if (name === 'caption') element.append(wrapElement);
|
||||
}
|
||||
}
|
||||
|
||||
// Add some styles to the whole directive element
|
||||
function configureStyles(){
|
||||
var _ = nvd3Utils.deepExtend(defaultStyles(), scope.options['styles'] || {});
|
||||
|
||||
if (scope._config.extended) scope.options['styles'] = _;
|
||||
|
||||
angular.forEach(_.classes, function(value, key){
|
||||
value ? element.addClass(key) : element.removeClass(key);
|
||||
});
|
||||
|
||||
element.removeAttr('style').css(_.css);
|
||||
}
|
||||
|
||||
// Default values for 'title', 'subtitle', 'caption'
|
||||
function defaultWrapper(_){
|
||||
switch (_){
|
||||
case 'title': return {
|
||||
enable: false,
|
||||
text: 'Write Your Title',
|
||||
className: 'h4',
|
||||
css: {
|
||||
width: scope.options.chart.width + 'px',
|
||||
textAlign: 'center'
|
||||
}
|
||||
};
|
||||
case 'subtitle': return {
|
||||
enable: false,
|
||||
text: 'Write Your Subtitle',
|
||||
css: {
|
||||
width: scope.options.chart.width + 'px',
|
||||
textAlign: 'center'
|
||||
}
|
||||
};
|
||||
case 'caption': return {
|
||||
enable: false,
|
||||
text: 'Figure 1. Write Your Caption text.',
|
||||
css: {
|
||||
width: scope.options.chart.width + 'px',
|
||||
textAlign: 'center'
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// Default values for styles
|
||||
function defaultStyles(){
|
||||
return {
|
||||
classes: {
|
||||
'with-3d-shadow': true,
|
||||
'with-transitions': true,
|
||||
'gallery': false
|
||||
},
|
||||
css: {}
|
||||
};
|
||||
}
|
||||
|
||||
/* Event Handling */
|
||||
// Watching on options changing
|
||||
if (scope._config.deepWatchOptions) {
|
||||
scope.$watch('options', nvd3Utils.debounce(function(newOptions){
|
||||
if (!scope._config.disabled) scope.api.refresh();
|
||||
}, scope._config.debounce, scope._config.debounceImmediate), true);
|
||||
}
|
||||
|
||||
// Watching on data changing
|
||||
function dataWatchFn(newData, oldData) {
|
||||
if (newData !== oldData){
|
||||
if (!scope._config.disabled) {
|
||||
scope._config.refreshDataOnly ? scope.api.update() : scope.api.refresh(); // if wanted to refresh data only, use update method, otherwise use full refresh.
|
||||
}
|
||||
}
|
||||
}
|
||||
if (scope._config.deepWatchData) {
|
||||
if (scope._config.deepWatchDataDepth === 1) {
|
||||
scope.$watchCollection('data', dataWatchFn);
|
||||
} else {
|
||||
scope.$watch('data', dataWatchFn, scope._config.deepWatchDataDepth === 2);
|
||||
}
|
||||
}
|
||||
|
||||
// Watching on config changing
|
||||
scope.$watch('config', function(newConfig, oldConfig){
|
||||
if (newConfig !== oldConfig){
|
||||
scope._config = angular.extend(defaultConfig, newConfig);
|
||||
scope.api.refresh();
|
||||
}
|
||||
}, true);
|
||||
|
||||
// Refresh chart first time if deepWatchOptions and deepWatchData are false
|
||||
if (!scope._config.deepWatchOptions && !scope._config.deepWatchData) {
|
||||
scope.api.refresh();
|
||||
}
|
||||
|
||||
//subscribe on global events
|
||||
angular.forEach(scope.events, function(eventHandler, event){
|
||||
scope.$on(event, function(e, args){
|
||||
return eventHandler(e, scope, args);
|
||||
});
|
||||
});
|
||||
|
||||
// remove completely when directive is destroyed
|
||||
element.on('$destroy', function () {
|
||||
scope.api.clearElement();
|
||||
});
|
||||
|
||||
// trigger onReady callback if directive is ready
|
||||
scope.$watch('isReady', function(isReady){
|
||||
if (isReady) {
|
||||
if (scope.onReady && typeof scope.onReady() === 'function') scope.onReady()(scope, element);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}])
|
||||
|
||||
.factory('nvd3Utils', function(){
|
||||
return {
|
||||
debounce: function(func, wait, immediate) {
|
||||
var timeout;
|
||||
return function() {
|
||||
var context = this, args = arguments;
|
||||
var later = function() {
|
||||
timeout = null;
|
||||
if (!immediate) func.apply(context, args);
|
||||
};
|
||||
var callNow = immediate && !timeout;
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(later, wait);
|
||||
if (callNow) func.apply(context, args);
|
||||
};
|
||||
},
|
||||
deepExtend: function(dst){
|
||||
var me = this;
|
||||
angular.forEach(arguments, function(obj) {
|
||||
if (obj !== dst) {
|
||||
angular.forEach(obj, function(value, key) {
|
||||
if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
|
||||
me.deepExtend(dst[key], value);
|
||||
} else {
|
||||
dst[key] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
return dst;
|
||||
},
|
||||
zoom: function(scope, options) {
|
||||
var zoom = options.chart.zoom;
|
||||
|
||||
// check if zoom enabled
|
||||
var enabled = (typeof zoom.enabled === 'undefined' || zoom.enabled === null) ? true : zoom.enabled;
|
||||
if (!enabled) return;
|
||||
|
||||
var xScale = scope.chart.xAxis.scale()
|
||||
, yScale = scope.chart.yAxis.scale()
|
||||
, xDomain = scope.chart.xDomain || xScale.domain
|
||||
, yDomain = scope.chart.yDomain || yScale.domain
|
||||
, x_boundary = xScale.domain().slice()
|
||||
, y_boundary = yScale.domain().slice()
|
||||
|
||||
// initialize zoom options
|
||||
, scale = zoom.scale || 1
|
||||
, translate = zoom.translate || [0, 0]
|
||||
, scaleExtent = zoom.scaleExtent || [1, 10]
|
||||
, useFixedDomain = zoom.useFixedDomain || false
|
||||
, useNiceScale = zoom.useNiceScale || false
|
||||
, horizontalOff = zoom.horizontalOff || false
|
||||
, verticalOff = zoom.verticalOff || false
|
||||
, unzoomEventType = zoom.unzoomEventType || 'dblclick.zoom'
|
||||
|
||||
// auxiliary functions
|
||||
, fixDomain
|
||||
, d3zoom
|
||||
, zoomed
|
||||
, unzoomed
|
||||
, zoomend
|
||||
;
|
||||
|
||||
// ensure nice axis
|
||||
if (useNiceScale) {
|
||||
xScale.nice();
|
||||
yScale.nice();
|
||||
}
|
||||
|
||||
// fix domain
|
||||
fixDomain = function (domain, boundary) {
|
||||
domain[0] = Math.min(Math.max(domain[0], boundary[0]), boundary[1] - boundary[1] / scaleExtent[1]);
|
||||
domain[1] = Math.max(boundary[0] + boundary[1] / scaleExtent[1], Math.min(domain[1], boundary[1]));
|
||||
return domain;
|
||||
};
|
||||
|
||||
// zoom event handler
|
||||
zoomed = function () {
|
||||
if (zoom.zoomed !== undefined) {
|
||||
var domains = zoom.zoomed(xScale.domain(), yScale.domain());
|
||||
if (!horizontalOff) xDomain([domains.x1, domains.x2]);
|
||||
if (!verticalOff) yDomain([domains.y1, domains.y2]);
|
||||
} else {
|
||||
if (!horizontalOff) xDomain(useFixedDomain ? fixDomain(xScale.domain(), x_boundary) : xScale.domain());
|
||||
if (!verticalOff) yDomain(useFixedDomain ? fixDomain(yScale.domain(), y_boundary) : yScale.domain());
|
||||
}
|
||||
if (scope.chart) scope.chart.update();
|
||||
};
|
||||
|
||||
// unzoomed event handler
|
||||
unzoomed = function () {
|
||||
if (zoom.unzoomed !== undefined) {
|
||||
var domains = zoom.unzoomed(xScale.domain(), yScale.domain());
|
||||
if (!horizontalOff) xDomain([domains.x1, domains.x2]);
|
||||
if (!verticalOff) yDomain([domains.y1, domains.y2]);
|
||||
} else {
|
||||
if (!horizontalOff) xDomain(x_boundary);
|
||||
if (!verticalOff) yDomain(y_boundary);
|
||||
}
|
||||
d3zoom.scale(scale).translate(translate);
|
||||
if (scope.chart) scope.chart.update();
|
||||
};
|
||||
|
||||
// zoomend event handler
|
||||
zoomend = function () {
|
||||
if (zoom.zoomend !== undefined) {
|
||||
zoom.zoomend();
|
||||
}
|
||||
};
|
||||
|
||||
// create d3 zoom handler
|
||||
d3zoom = d3.behavior.zoom()
|
||||
.x(xScale)
|
||||
.y(yScale)
|
||||
.scaleExtent(scaleExtent)
|
||||
.on('zoom', zoomed)
|
||||
.on('zoomend', zoomend);
|
||||
|
||||
if (scope.svg) {
|
||||
scope.svg.call(d3zoom);
|
||||
|
||||
d3zoom.scale(scale).translate(translate).event(scope.svg);
|
||||
|
||||
if (unzoomEventType !== 'none') scope.svg.on(unzoomEventType, unzoomed);
|
||||
}
|
||||
|
||||
if (scope.chart)
|
||||
scope.chart.zoomRender = function(){
|
||||
// reset zoom scale and translate
|
||||
d3zoom.scale(scale).translate(translate);
|
||||
|
||||
// update scale
|
||||
xScale = scope.chart.xAxis.scale();
|
||||
yScale = scope.chart.yAxis.scale();
|
||||
xDomain = scope.chart.xDomain || xScale.domain;
|
||||
yDomain = scope.chart.yDomain || yScale.domain;
|
||||
x_boundary = xScale.domain().slice();
|
||||
y_boundary = yScale.domain().slice();
|
||||
|
||||
// update zoom scale
|
||||
d3zoom.x(xScale).y(yScale);
|
||||
|
||||
scope.svg.call(d3zoom);
|
||||
|
||||
if (unzoomEventType !== 'none') scope.svg.on(unzoomEventType, unzoomed);
|
||||
};
|
||||
}
|
||||
};
|
||||
});
|
||||
})(window);
|
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
|
@ -1,669 +0,0 @@
|
|||
/* nvd3 version 1.8.3 (https://github.com/novus/nvd3) 2016-04-26 */
|
||||
.nvd3 .nv-axis {
|
||||
pointer-events:none;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis path {
|
||||
fill: none;
|
||||
stroke: #000;
|
||||
stroke-opacity: .75;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis path.domain {
|
||||
stroke-opacity: .75;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis.nv-x path.domain {
|
||||
stroke-opacity: 0;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis line {
|
||||
fill: none;
|
||||
stroke: #e5e5e5;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis .zero line,
|
||||
/*this selector may not be necessary*/ .nvd3 .nv-axis line.zero {
|
||||
stroke-opacity: .75;
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis .nv-axisMaxMin text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nvd3 .x .nv-axis .nv-axisMaxMin text,
|
||||
.nvd3 .x2 .nv-axis .nv-axisMaxMin text,
|
||||
.nvd3 .x3 .nv-axis .nv-axisMaxMin text {
|
||||
text-anchor: middle
|
||||
}
|
||||
|
||||
.nvd3 .nv-axis.nv-disabled {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.nvd3 .nv-bars rect {
|
||||
fill-opacity: .75;
|
||||
|
||||
transition: fill-opacity 250ms linear;
|
||||
-moz-transition: fill-opacity 250ms linear;
|
||||
-webkit-transition: fill-opacity 250ms linear;
|
||||
}
|
||||
|
||||
.nvd3 .nv-bars rect.hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3 .nv-bars .hover rect {
|
||||
fill: lightblue;
|
||||
}
|
||||
|
||||
.nvd3 .nv-bars text {
|
||||
fill: rgba(0,0,0,0);
|
||||
}
|
||||
|
||||
.nvd3 .nv-bars .hover text {
|
||||
fill: rgba(0,0,0,1);
|
||||
}
|
||||
|
||||
.nvd3 .nv-multibar .nv-groups rect,
|
||||
.nvd3 .nv-multibarHorizontal .nv-groups rect,
|
||||
.nvd3 .nv-discretebar .nv-groups rect {
|
||||
stroke-opacity: 0;
|
||||
|
||||
transition: fill-opacity 250ms linear;
|
||||
-moz-transition: fill-opacity 250ms linear;
|
||||
-webkit-transition: fill-opacity 250ms linear;
|
||||
}
|
||||
|
||||
.nvd3 .nv-multibar .nv-groups rect:hover,
|
||||
.nvd3 .nv-multibarHorizontal .nv-groups rect:hover,
|
||||
.nvd3 .nv-candlestickBar .nv-ticks rect:hover,
|
||||
.nvd3 .nv-discretebar .nv-groups rect:hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3 .nv-discretebar .nv-groups text,
|
||||
.nvd3 .nv-multibarHorizontal .nv-groups text {
|
||||
font-weight: bold;
|
||||
fill: rgba(0,0,0,1);
|
||||
stroke: rgba(0,0,0,0);
|
||||
}
|
||||
|
||||
/* boxplot CSS */
|
||||
.nvd3 .nv-boxplot circle {
|
||||
fill-opacity: 0.5;
|
||||
}
|
||||
|
||||
.nvd3 .nv-boxplot circle:hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3 .nv-boxplot rect:hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3 line.nv-boxplot-median {
|
||||
stroke: black;
|
||||
}
|
||||
|
||||
.nv-boxplot-tick:hover {
|
||||
stroke-width: 2.5px;
|
||||
}
|
||||
/* bullet */
|
||||
.nvd3.nv-bullet { font: 10px sans-serif; }
|
||||
.nvd3.nv-bullet .nv-measure { fill-opacity: .8; }
|
||||
.nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; }
|
||||
.nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; }
|
||||
.nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
|
||||
.nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; }
|
||||
.nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; }
|
||||
.nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; }
|
||||
.nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; }
|
||||
.nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; }
|
||||
.nvd3.nv-bullet .nv-subtitle { fill: #999; }
|
||||
|
||||
|
||||
.nvd3.nv-bullet .nv-range {
|
||||
fill: #bababa;
|
||||
fill-opacity: .4;
|
||||
}
|
||||
.nvd3.nv-bullet .nv-range:hover {
|
||||
fill-opacity: .7;
|
||||
}
|
||||
|
||||
.nvd3.nv-candlestickBar .nv-ticks .nv-tick {
|
||||
stroke-width: 1px;
|
||||
}
|
||||
|
||||
.nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover {
|
||||
stroke-width: 2px;
|
||||
}
|
||||
|
||||
.nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect {
|
||||
stroke: #2ca02c;
|
||||
fill: #2ca02c;
|
||||
}
|
||||
|
||||
.nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect {
|
||||
stroke: #d62728;
|
||||
fill: #d62728;
|
||||
}
|
||||
|
||||
.with-transitions .nv-candlestickBar .nv-ticks .nv-tick {
|
||||
transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
|
||||
}
|
||||
|
||||
.nvd3.nv-candlestickBar .nv-ticks line {
|
||||
stroke: #333;
|
||||
}
|
||||
|
||||
|
||||
.nv-force-node {
|
||||
stroke: #fff;
|
||||
stroke-width: 1.5px;
|
||||
}
|
||||
.nv-force-link {
|
||||
stroke: #999;
|
||||
stroke-opacity: .6;
|
||||
}
|
||||
.nv-force-node text {
|
||||
stroke-width: 0px
|
||||
}
|
||||
|
||||
.nvd3 .nv-legend .nv-disabled rect {
|
||||
/*fill-opacity: 0;*/
|
||||
}
|
||||
|
||||
.nvd3 .nv-check-box .nv-box {
|
||||
fill-opacity:0;
|
||||
stroke-width:2;
|
||||
}
|
||||
|
||||
.nvd3 .nv-check-box .nv-check {
|
||||
fill-opacity:0;
|
||||
stroke-width:4;
|
||||
}
|
||||
|
||||
.nvd3 .nv-series.nv-disabled .nv-check-box .nv-check {
|
||||
fill-opacity:0;
|
||||
stroke-opacity:0;
|
||||
}
|
||||
|
||||
.nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/* line plus bar */
|
||||
.nvd3.nv-linePlusBar .nv-bar rect {
|
||||
fill-opacity: .75;
|
||||
}
|
||||
|
||||
.nvd3.nv-linePlusBar .nv-bar rect:hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
.nvd3 .nv-groups path.nv-line {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.nvd3 .nv-groups path.nv-area {
|
||||
stroke: none;
|
||||
}
|
||||
|
||||
.nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
|
||||
fill-opacity: 0;
|
||||
stroke-opacity: 0;
|
||||
}
|
||||
|
||||
.nvd3.nv-scatter.nv-single-point .nv-groups .nv-point {
|
||||
fill-opacity: .5 !important;
|
||||
stroke-opacity: .5 !important;
|
||||
}
|
||||
|
||||
|
||||
.with-transitions .nvd3 .nv-groups .nv-point {
|
||||
transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
|
||||
}
|
||||
|
||||
.nvd3.nv-scatter .nv-groups .nv-point.hover,
|
||||
.nvd3 .nv-groups .nv-point.hover {
|
||||
stroke-width: 7px;
|
||||
fill-opacity: .95 !important;
|
||||
stroke-opacity: .95 !important;
|
||||
}
|
||||
|
||||
|
||||
.nvd3 .nv-point-paths path {
|
||||
stroke: #aaa;
|
||||
stroke-opacity: 0;
|
||||
fill: #eee;
|
||||
fill-opacity: 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.nvd3 .nv-indexLine {
|
||||
cursor: ew-resize;
|
||||
}
|
||||
|
||||
/********************
|
||||
* SVG CSS
|
||||
*/
|
||||
|
||||
/********************
|
||||
Default CSS for an svg element nvd3 used
|
||||
*/
|
||||
svg.nvd3-svg {
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-ms-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
display: block;
|
||||
width:100%;
|
||||
height:100%;
|
||||
}
|
||||
|
||||
/********************
|
||||
Box shadow and border radius styling
|
||||
*/
|
||||
.nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip {
|
||||
-moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
-webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
box-shadow: 0 5px 10px rgba(0,0,0,.2);
|
||||
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
|
||||
.nvd3 text {
|
||||
font: normal 12px Arial;
|
||||
}
|
||||
|
||||
.nvd3 .title {
|
||||
font: bold 14px Arial;
|
||||
}
|
||||
|
||||
.nvd3 .nv-background {
|
||||
fill: white;
|
||||
fill-opacity: 0;
|
||||
}
|
||||
|
||||
.nvd3.nv-noData {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
/**********
|
||||
* Brush
|
||||
*/
|
||||
|
||||
.nv-brush .extent {
|
||||
fill-opacity: .125;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
.nv-brush .resize path {
|
||||
fill: #eee;
|
||||
stroke: #666;
|
||||
}
|
||||
|
||||
|
||||
/**********
|
||||
* Legend
|
||||
*/
|
||||
|
||||
.nvd3 .nv-legend .nv-series {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.nvd3 .nv-legend .nv-disabled circle {
|
||||
fill-opacity: 0;
|
||||
}
|
||||
|
||||
/* focus */
|
||||
.nvd3 .nv-brush .extent {
|
||||
fill-opacity: 0 !important;
|
||||
}
|
||||
|
||||
.nvd3 .nv-brushBackground rect {
|
||||
stroke: #000;
|
||||
stroke-width: .4;
|
||||
fill: #fff;
|
||||
fill-opacity: .7;
|
||||
}
|
||||
|
||||
/**********
|
||||
* Print
|
||||
*/
|
||||
|
||||
@media print {
|
||||
.nvd3 text {
|
||||
stroke-width: 0;
|
||||
fill-opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.nvd3.nv-ohlcBar .nv-ticks .nv-tick {
|
||||
stroke-width: 1px;
|
||||
}
|
||||
|
||||
.nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover {
|
||||
stroke-width: 2px;
|
||||
}
|
||||
|
||||
.nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive {
|
||||
stroke: #2ca02c;
|
||||
}
|
||||
|
||||
.nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative {
|
||||
stroke: #d62728;
|
||||
}
|
||||
|
||||
|
||||
.nvd3 .background path {
|
||||
fill: none;
|
||||
stroke: #EEE;
|
||||
stroke-opacity: .4;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
.nvd3 .foreground path {
|
||||
fill: none;
|
||||
stroke-opacity: .7;
|
||||
}
|
||||
|
||||
.nvd3 .nv-parallelCoordinates-brush .extent
|
||||
{
|
||||
fill: #fff;
|
||||
fill-opacity: .6;
|
||||
stroke: gray;
|
||||
shape-rendering: crispEdges;
|
||||
}
|
||||
|
||||
.nvd3 .nv-parallelCoordinates .hover {
|
||||
fill-opacity: 1;
|
||||
stroke-width: 3px;
|
||||
}
|
||||
|
||||
|
||||
.nvd3 .missingValuesline line {
|
||||
fill: none;
|
||||
stroke: black;
|
||||
stroke-width: 1;
|
||||
stroke-opacity: 1;
|
||||
stroke-dasharray: 5, 5;
|
||||
}
|
||||
.nvd3.nv-pie path {
|
||||
stroke-opacity: 0;
|
||||
transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
-webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
|
||||
|
||||
}
|
||||
|
||||
.nvd3.nv-pie .nv-pie-title {
|
||||
font-size: 24px;
|
||||
fill: rgba(19, 196, 249, 0.59);
|
||||
}
|
||||
|
||||
.nvd3.nv-pie .nv-slice text {
|
||||
stroke: #000;
|
||||
stroke-width: 0;
|
||||
}
|
||||
|
||||
.nvd3.nv-pie path {
|
||||
stroke: #fff;
|
||||
stroke-width: 1px;
|
||||
stroke-opacity: 1;
|
||||
}
|
||||
|
||||
.nvd3.nv-pie path {
|
||||
fill-opacity: .7;
|
||||
}
|
||||
.nvd3.nv-pie .hover path {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
.nvd3.nv-pie .nv-label {
|
||||
pointer-events: none;
|
||||
}
|
||||
.nvd3.nv-pie .nv-label rect {
|
||||
fill-opacity: 0;
|
||||
stroke-opacity: 0;
|
||||
}
|
||||
|
||||
/* scatter */
|
||||
.nvd3 .nv-groups .nv-point.hover {
|
||||
stroke-width: 20px;
|
||||
stroke-opacity: .5;
|
||||
}
|
||||
|
||||
.nvd3 .nv-scatter .nv-point.hover {
|
||||
fill-opacity: 1;
|
||||
}
|
||||
.nv-noninteractive {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.nv-distx, .nv-disty {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* sparkline */
|
||||
.nvd3.nv-sparkline path {
|
||||
fill: none;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus g.nv-hoverValue {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-hoverValue line {
|
||||
stroke: #333;
|
||||
stroke-width: 1.5px;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus,
|
||||
.nvd3.nv-sparklineplus g {
|
||||
pointer-events: all;
|
||||
}
|
||||
|
||||
.nvd3 .nv-hoverArea {
|
||||
fill-opacity: 0;
|
||||
stroke-opacity: 0;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-xValue,
|
||||
.nvd3.nv-sparklineplus .nv-yValue {
|
||||
stroke-width: 0;
|
||||
font-size: .9em;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-yValue {
|
||||
stroke: #f66;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-maxValue {
|
||||
stroke: #2ca02c;
|
||||
fill: #2ca02c;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-minValue {
|
||||
stroke: #d62728;
|
||||
fill: #d62728;
|
||||
}
|
||||
|
||||
.nvd3.nv-sparklineplus .nv-currentValue {
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
/* stacked area */
|
||||
.nvd3.nv-stackedarea path.nv-area {
|
||||
fill-opacity: .7;
|
||||
stroke-opacity: 0;
|
||||
transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
|
||||
-moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
|
||||
-webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
|
||||
}
|
||||
|
||||
.nvd3.nv-stackedarea path.nv-area.hover {
|
||||
fill-opacity: .9;
|
||||
}
|
||||
|
||||
|
||||
.nvd3.nv-stackedarea .nv-groups .nv-point {
|
||||
stroke-opacity: 0;
|
||||
fill-opacity: 0;
|
||||
}
|
||||
|
||||
|
||||
.nvtooltip {
|
||||
position: absolute;
|
||||
background-color: rgba(255,255,255,1.0);
|
||||
color: rgba(0,0,0,1.0);
|
||||
padding: 1px;
|
||||
border: 1px solid rgba(0,0,0,.2);
|
||||
z-index: 10000;
|
||||
display: block;
|
||||
|
||||
font-family: Arial;
|
||||
font-size: 13px;
|
||||
text-align: left;
|
||||
pointer-events: none;
|
||||
|
||||
white-space: nowrap;
|
||||
|
||||
-webkit-touch-callout: none;
|
||||
-webkit-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.nvtooltip {
|
||||
background: rgba(255,255,255, 0.8);
|
||||
border: 1px solid rgba(0,0,0,0.5);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/*Give tooltips that old fade in transition by
|
||||
putting a "with-transitions" class on the container div.
|
||||
*/
|
||||
.nvtooltip.with-transitions, .with-transitions .nvtooltip {
|
||||
transition: opacity 50ms linear;
|
||||
-moz-transition: opacity 50ms linear;
|
||||
-webkit-transition: opacity 50ms linear;
|
||||
|
||||
transition-delay: 200ms;
|
||||
-moz-transition-delay: 200ms;
|
||||
-webkit-transition-delay: 200ms;
|
||||
}
|
||||
|
||||
.nvtooltip.x-nvtooltip,
|
||||
.nvtooltip.y-nvtooltip {
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
.nvtooltip h3 {
|
||||
margin: 0;
|
||||
padding: 4px 14px;
|
||||
line-height: 18px;
|
||||
font-weight: normal;
|
||||
background-color: rgba(247,247,247,0.75);
|
||||
color: rgba(0,0,0,1.0);
|
||||
text-align: center;
|
||||
|
||||
border-bottom: 1px solid #ebebeb;
|
||||
|
||||
-webkit-border-radius: 5px 5px 0 0;
|
||||
-moz-border-radius: 5px 5px 0 0;
|
||||
border-radius: 5px 5px 0 0;
|
||||
}
|
||||
|
||||
.nvtooltip p {
|
||||
margin: 0;
|
||||
padding: 5px 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nvtooltip span {
|
||||
display: inline-block;
|
||||
margin: 2px 0;
|
||||
}
|
||||
|
||||
.nvtooltip table {
|
||||
margin: 6px;
|
||||
border-spacing:0;
|
||||
}
|
||||
|
||||
|
||||
.nvtooltip table td {
|
||||
padding: 2px 9px 2px 0;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.nvtooltip table td.key {
|
||||
font-weight: normal;
|
||||
}
|
||||
.nvtooltip table td.key.total {
|
||||
font-weight: bold;
|
||||
}
|
||||
.nvtooltip table td.value {
|
||||
text-align: right;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nvtooltip table tr.highlight td {
|
||||
padding: 1px 9px 1px 0;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
border-top-style: solid;
|
||||
border-top-width: 1px;
|
||||
}
|
||||
|
||||
.nvtooltip table td.legend-color-guide div {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.nvtooltip table td.legend-color-guide div {
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
.nvtooltip .footer {
|
||||
padding: 3px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nvtooltip-pending-removal {
|
||||
pointer-events: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
/****
|
||||
Interactive Layer
|
||||
*/
|
||||
.nvd3 .nv-interactiveGuideLine {
|
||||
pointer-events:none;
|
||||
}
|
||||
.nvd3 line.nv-guideline {
|
||||
stroke: #ccc;
|
||||
}
|
14711
admin/js/nvd3/nv.d3.js
14711
admin/js/nvd3/nv.d3.js
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 one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue