115 lines
3.2 KiB
JavaScript
115 lines
3.2 KiB
JavaScript
|
// From Friss tuto (https://github.com/FrissAnalytics/shinyJsTutorials/blob/master/tutorials/tutorial_03.Rmd)
|
||
|
export function getWidget(id) {
|
||
|
var htmlWidgetsObj = HTMLWidgets.find("#" + id);
|
||
|
var widgetObj;
|
||
|
if (typeof htmlWidgetsObj !== "undefined") {
|
||
|
widgetObj = htmlWidgetsObj.getChart();
|
||
|
}
|
||
|
return widgetObj;
|
||
|
}
|
||
|
|
||
|
export function isSingleSerie(options) {
|
||
|
var typeLabels = ["pie", "radialBar", "donut"];
|
||
|
var lab = typeLabels.indexOf(options.w.config.chart.type) > -1;
|
||
|
var single = options.w.config.series.length === 1;
|
||
|
return lab | single;
|
||
|
}
|
||
|
|
||
|
export function isDatetimeAxis(chartContext) {
|
||
|
if (
|
||
|
chartContext.hasOwnProperty("w") &&
|
||
|
chartContext.w.hasOwnProperty("config") &&
|
||
|
chartContext.w.config.hasOwnProperty("xaxis") &&
|
||
|
chartContext.w.config.xaxis.hasOwnProperty("type")
|
||
|
) {
|
||
|
return chartContext.w.config.xaxis.type == "datetime";
|
||
|
} else {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export function getSelection(chartContext, selectedDataPoints, serieIndex) {
|
||
|
var typeLabels = ["pie", "radialBar", "donut"];
|
||
|
var typeXY = ["scatter", "bubble"];
|
||
|
var selected;
|
||
|
if (typeLabels.indexOf(chartContext.opts.chart.type) > -1) {
|
||
|
var labels = chartContext.opts.labels;
|
||
|
selected = selectedDataPoints[serieIndex].map(function(index) {
|
||
|
return labels[index];
|
||
|
});
|
||
|
} else {
|
||
|
var data = chartContext.opts.series[serieIndex].data;
|
||
|
selected = selectedDataPoints[serieIndex].map(function(index) {
|
||
|
var val = data[index];
|
||
|
if (typeXY.indexOf(chartContext.opts.chart.type) < 0) {
|
||
|
if (val.hasOwnProperty("x")) {
|
||
|
val = val.x;
|
||
|
} else {
|
||
|
val = val[0];
|
||
|
}
|
||
|
}
|
||
|
return val;
|
||
|
});
|
||
|
}
|
||
|
//console.log(selected);
|
||
|
if (typeXY.indexOf(chartContext.opts.chart.type) > -1) {
|
||
|
selected = {
|
||
|
x: selected.map(function(obj) {
|
||
|
return obj.x;
|
||
|
}),
|
||
|
y: selected.map(function(obj) {
|
||
|
return obj.y;
|
||
|
})
|
||
|
};
|
||
|
}
|
||
|
if (typeof selected == "undefined") {
|
||
|
selected = null;
|
||
|
}
|
||
|
return selected;
|
||
|
}
|
||
|
|
||
|
export function getYaxis(axis) {
|
||
|
var yzoom = { min: null, max: null };
|
||
|
if (typeof axis.yaxis !== "undefined" && axis.yaxis !== null) {
|
||
|
var y_axis;
|
||
|
if (axis.yaxis.hasOwnProperty("min")) {
|
||
|
y_axis = axis.yaxis;
|
||
|
} else {
|
||
|
y_axis = axis.yaxis[0];
|
||
|
}
|
||
|
if (y_axis.hasOwnProperty("min") && typeof y_axis.min !== "undefined") {
|
||
|
yzoom.min = y_axis.min;
|
||
|
}
|
||
|
if (y_axis.hasOwnProperty("max") && typeof y_axis.max !== "undefined") {
|
||
|
yzoom.max = y_axis.max;
|
||
|
}
|
||
|
}
|
||
|
return yzoom;
|
||
|
}
|
||
|
|
||
|
export function getXaxis(axis) {
|
||
|
var xzoom = { min: null, max: null };
|
||
|
if (typeof axis.xaxis !== "undefined") {
|
||
|
var x_axis = axis.xaxis;
|
||
|
if (x_axis.hasOwnProperty("min") && typeof x_axis.min !== "undefined") {
|
||
|
xzoom.min = x_axis.min;
|
||
|
}
|
||
|
if (x_axis.hasOwnProperty("max") && typeof x_axis.max !== "undefined") {
|
||
|
xzoom.max = x_axis.max;
|
||
|
}
|
||
|
}
|
||
|
return xzoom;
|
||
|
}
|
||
|
|
||
|
export function exportChart(x, chart) {
|
||
|
if (x.hasOwnProperty("shinyEvents") & HTMLWidgets.shinyMode) {
|
||
|
if (x.shinyEvents.hasOwnProperty("export")) {
|
||
|
setTimeout(function() {
|
||
|
chart.dataURI().then(function(imgURI) {
|
||
|
Shiny.setInputValue(x.shinyEvents.export.inputId, imgURI);
|
||
|
});
|
||
|
}, 1000);
|
||
|
}
|
||
|
}
|
||
|
}
|