HTMLWidgets.widget({ name: 'highchart', type: 'output', initialize: function(el, width, height) { return { // TODO: add instance fields as required } }, renderValue: function(el, x, instance) { if(x.debug) { window.xclone = JSON.parse(JSON.stringify(x)); console.log(el); console.log("hc_opts", x.hc_opts); console.log("theme", x.theme); console.log("conf_opts", x.conf_opts); } if(x.fonts !== undefined) { x.fonts = ((typeof(x.fonts) == "string") ? [x.fonts] : x.fonts); x.fonts.forEach(function(s){ var urlfont = 'https://fonts.googleapis.com/css?family=' + s; /* http://stackoverflow.com/questions/4724606 */ if (!$("link[href='" + urlfont + "']").length) { $('').appendTo("head"); } }); } ResetHighchartsOptions(); if(x.theme !== null) { Highcharts.setOptions(x.theme); if(x.theme.chart.divBackgroundImage !== null){ Highcharts.wrap(Highcharts.Chart.prototype, 'getContainer', function (proceed) { proceed.call(this); $("#" + el.id).css('background-image', 'url(' + x.theme.chart.divBackgroundImage + ')'); }); } } Highcharts.setOptions(x.conf_opts); if(x.type == "chart") { if(x.debug) console.log("charting CHART"); $("#" + el.id).highcharts(x.hc_opts); } else if (x.type == "stock") { if(x.debug) console.log("charting STOCK"); $("#" + el.id).highcharts('StockChart', x.hc_opts); } else if (x.type == "map"){ if(x.debug) console.log("charting MAP"); /* x.hc_opts.series = _.each(x.hc_opts.series, function(e){ if(!(e.type === undefined)) { e.data = Highcharts.geojson(e.data, e.type); } return e; }); */ x.hc_opts.series = x.hc_opts.series.map(function(e){ if(!(e.type === undefined)) { e.data = Highcharts.geojson(e.data, e.type); } return e; }); $("#" + el.id).highcharts('Map', x.hc_opts); if(x.hc_opts.mapNavigation != undefined && x.hc_opts.mapNavigation.enabled === true){ /* if have navigation option and enabled true */ /* http://stackoverflow.com/questions/7600454 */ $("#" + el.id).bind( 'mousewheel DOMMouseScroll', function ( e ) { var e0 = e.originalEvent, delta = e0.wheelDelta || -e0.detail; this.scrollTop += ( delta < 0 ? 1 : -1 ) * 30; e.preventDefault(); }); } } }, resize: function(el, width, height, instance) { /* http://stackoverflow.com/questions/18445784/ */ var chart = $("#" +el.id).highcharts(); var height = chart.renderTo.clientHeight; var width = chart.renderTo.clientWidth; chart.setSize(width, height); } });