205 lines
7.0 KiB
JavaScript
205 lines
7.0 KiB
JavaScript
|
|
var avsdev = {
|
|
pivot: {
|
|
dataFile: null,
|
|
rowKey: 25,
|
|
colKey: 400,
|
|
active: false
|
|
},
|
|
geoView: {
|
|
active: false,
|
|
firstRun: true
|
|
},
|
|
cc: {
|
|
"DZA":"DZA - Algeria","AGO":"AGO - Angola","BEN":"BEN - Benin","BWA":"BWA - Botswana","BFA":"BFA - Burkina Faso","BDI":"BDI - Burundi","CMR":"CMR - Cameroon","CPV":"CPV - Cape Verde","CAF":"CAF - Central African Republic","TCD":"TCD - Chad","COM":"COM - Comoros","COD":"COD - Democratic Republic of the Congo","DJI":"DJI - Djibouti","EGY":"EGY - Egypt","GNQ":"GNQ - Equatorial Guinea","ERI":"ERI - Eritrea","ETH":"ETH - Ethiopia","GAB":"GAB - Gabon","GMB":"GMB - Gambia","GHA":"GHA - Ghana","GIN":"GIN - Guinea","GNB":"GNB - Guinea-Bissau","CIV":"CIV - Côte d'Ivoire","KEN":"KEN - Kenya","LSO":"LSO - Lesotho","LBR":"LBR - Liberia","LBY":"LBY - Libya","MDG":"MDG - Madagascar","MWI":"MWI - Malawi","MLI":"MLI - Mali","MRT":"MRT - Mauritania","MUS":"MUS - Mauritius","MAR":"MAR - Morocco","MOZ":"MOZ - Mozambique","NAM":"NAM - Namibia","NER":"NER - Niger","NGA":"NGA - Nigeria","COG":"COG - Republic of the Congo","RWA":"RWA - Rwanda","SHN":"SHN - Saint Helena","STP":"STP - Sao Tome and Principe","SEN":"SEN - Senegal","SYC":"SYC - Seychelles","SLE":"SLE - Sierra Leone","SOM":"SOM - Somalia","ZAF":"ZAF - South Africa","SSD":"SSD - South Sudan","SDN":"SDN - Sudan","SWZ":"SWZ - Swaziland","TZA":"TZA - Tanzania","TGO":"TGO - Togo","TUN":"TUN - Tunisia","UGA":"UGA - Uganda","ESH":"ESH - Western Sahara","ZMB":"ZMB - Zambia","ZWE":"ZWE - Zimbabwe"
|
|
}
|
|
};
|
|
|
|
function debounce(func, wait, immediate) {
|
|
var timeout;
|
|
return function() {
|
|
var context = this, args = arguments;
|
|
clearTimeout(timeout);
|
|
timeout = setTimeout(function() {
|
|
timeout = null;
|
|
if (!immediate) func.apply(context, args);
|
|
}, wait);
|
|
if (immediate && !timeout) func.apply(context, args);
|
|
};
|
|
}
|
|
|
|
|
|
$(document).on('shiny:inputchanged', function(event){
|
|
|
|
if (event.name == 'selectView') {
|
|
avsdev.pivot.active = false;
|
|
avsdev.geoView.active = false;
|
|
|
|
if (event.value == "Geo Image") {
|
|
avsdev.geoView.active = true;
|
|
if (avsdev.geoView.firstRun) {
|
|
zoomGeoView();
|
|
avsdev.geoView.firstRun = false;
|
|
}
|
|
}
|
|
if (event.value == "Pivot Table") {
|
|
avsdev.pivot.active = true;
|
|
drawPivot();
|
|
}
|
|
}
|
|
|
|
if (event.name == '.clientdata_output_geoView-mapImage_hidden') {
|
|
avsdev.geoView.active = !event.value;
|
|
if (avsdev.geoView.firstRun) {
|
|
zoomGeoView();
|
|
avsdev.geoView.firstRun = false;
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
// GEO
|
|
|
|
|
|
_zoomGeoView = function(){
|
|
if (avsdev.geoView.active === false) {
|
|
return;
|
|
}
|
|
|
|
var img = $($("#geoView-mapImage").children("img")[0]);
|
|
|
|
if (img.hasClass("zoomed")) {
|
|
|
|
if (document.querySelector('#geoView-mapImage img')) {
|
|
document.querySelector('#geoView-mapImage img').dispatchEvent(new CustomEvent('wheelzoom.destroy'));
|
|
img.removeClass("zoomed");
|
|
}
|
|
}
|
|
|
|
if (!img.hasClass("zoomed")) {
|
|
wheelzoom(img);
|
|
img.addClass("zoomed");
|
|
}
|
|
};
|
|
zoomGeoView = debounce(function(){ _zoomGeoView() }, 500);
|
|
|
|
/*
|
|
$(document).on('shiny:sessioninitialized', function(event){
|
|
console.log("shiny:sessioninitialized")
|
|
zoomGeoView()
|
|
});
|
|
*/
|
|
|
|
$(document).on('shiny:value', function(event){
|
|
if (event.name == 'geoView-mapImage') {
|
|
zoomGeoView();
|
|
}
|
|
});
|
|
|
|
|
|
// PIVOT
|
|
|
|
_drawPivot = function() {
|
|
if (avsdev.pivot.active === false) {
|
|
return;
|
|
}
|
|
|
|
$.getJSON(avsdev.pivot.dataFile, function(data) {
|
|
data = $(data).each(function(id, v){
|
|
v.Country = avsdev.cc[v.Country];
|
|
});
|
|
data = $.makeArray(data);
|
|
|
|
var renderers = $.extend($.pivotUtilities.renderers, $.pivotUtilities.plotly_renderers);
|
|
renderers = $.extend(renderers, $.pivotUtilities.avsdev_renderers);
|
|
|
|
$("#pivot-pivotRender").pivotUI(data, {
|
|
rows: ["Grid Dist."],
|
|
cols: ["Pop Density"],
|
|
aggregatorName: "Sum",
|
|
vals: ["Population"],
|
|
renderers: renderers,
|
|
rendererName: "Coloured Pivot Table",
|
|
hiddenFromDragDrop: ["Population"],
|
|
hiddenFromAggregators: ["Grid Dist.", "Country", "Pop Density"],
|
|
onRefresh: function(config) {
|
|
var config_copy = JSON.parse(JSON.stringify(config));
|
|
//delete some values which are functions
|
|
delete config_copy.aggregators;
|
|
delete config_copy.renderers;
|
|
//delete some bulky default values
|
|
delete config_copy.rendererOptions;
|
|
delete config_copy.localeStrings;
|
|
//console.log(JSON.stringify(config_copy, undefined, 2));
|
|
|
|
var grid = $("td[data-rowkey]").filter(function() {
|
|
return $(this).data("rowkey") <= avsdev.pivot.rowKey;
|
|
});
|
|
var solar = $("td[data-rowkey]").filter(function() {
|
|
return $(this).data("rowkey") > avsdev.pivot.rowKey;
|
|
}).filter(function() {
|
|
return $(this).data("colkey") <= avsdev.pivot.colKey;
|
|
});
|
|
var target = $("td[data-rowkey]").filter(function() {
|
|
return $(this).data("rowkey") > avsdev.pivot.rowKey;
|
|
}).filter(function() {
|
|
return $(this).data("colkey") > avsdev.pivot.colKey;
|
|
});
|
|
|
|
grid.addClass("power-grid");
|
|
solar.addClass("power-solar");
|
|
target.addClass("power-target");
|
|
|
|
var gridVal = grid.map(function() {
|
|
return $(this).data("value");
|
|
}).get().reduce(function(a, b) { return a + b; }, 0);
|
|
|
|
var solarVal = solar.map(function() {
|
|
return $(this).data("value");
|
|
}).get().reduce(function(a, b) { return a + b; }, 0);
|
|
|
|
var miniVal = target.map(function() {
|
|
return $(this).data("value");
|
|
}).get().reduce(function(a, b) { return a + b; }, 0);
|
|
|
|
var totalVal = gridVal + solarVal + miniVal;
|
|
var offGrid = parseInt($($("#summary-summaryTable table td")[6]).text())
|
|
|
|
$($("#summary-summaryTable table td")[1]).text(Math.round(totalVal - offGrid).toLocaleString('en'));
|
|
$($("#summary-summaryTable table td")[2]).text(Math.round(offGrid - solarVal - miniVal).toLocaleString('en'));
|
|
$($("#summary-summaryTable table td")[3]).text(Math.round(solarVal).toLocaleString('en'));
|
|
$($("#summary-summaryTable table td")[4]).text(Math.round(miniVal).toLocaleString('en'));
|
|
$($("#summary-summaryTable table td")[5]).text(Math.round(totalVal).toLocaleString('en'));
|
|
}
|
|
});
|
|
});
|
|
|
|
//console.log($("td").find(`[data-colKey > 500]`))
|
|
//$("#loading-pivot img").toggleClass("collapse");
|
|
//$("#pivot").toggleClass("collapse");
|
|
};
|
|
drawPivot = debounce(function(){ _drawPivot() }, 750);
|
|
|
|
Shiny.addCustomMessageHandler("render-pivot",
|
|
function(message) {
|
|
avsdev.pivot.dataFile = message.countryTotPath[0] + ".json";
|
|
drawPivot();
|
|
}
|
|
);
|
|
|
|
|
|
$(document).on('shiny:inputchanged', function(event){
|
|
if (event.name == 'control-selectCountry') {
|
|
drawPivot();
|
|
} else if (event.name == 'control-selectGrid') {
|
|
avsdev.pivot.rowKey = event.value;
|
|
drawPivot();
|
|
} else if (event.name == 'control-selectPopDensity') {
|
|
avsdev.pivot.colKey = event.value;
|
|
drawPivot();
|
|
} else if (event.name == 'control-selectData') {
|
|
drawPivot();
|
|
}
|
|
});
|