javascript - Extending Highchart's show() and hide() functions -


what best approach extend show() , hide() functions in highcharts?

i want add boolean-like show(effectlinkedseries) , hide(effectlinkedseries), can control when linkedseries gets removed or added along "parent". here demo of linkedseries functionality. property called "linkedto" sets functionality:

series: [{             name: 'temperature',             data: averages,             zindex: 1,             marker: {                 fillcolor: 'white',                 linewidth: 2,                 linecolor: highcharts.getoptions().colors[0]             }         }, {             name: 'range',             data: ranges,             type: 'arearange',             linewidth: 0,             linkedto: ':previous',             color: highcharts.getoptions().colors[0],             fillopacity: 0.3,             zindex: 0         }] 

i modify source directly i'd rather try extend library, instead of hacking it.

figured out can make use of highcharts.series.prototype accomplish this

highcharts.series.prototype.setvisible = function (vis, redraw, effectlinkedseries) {         var series = this,             chart = series.chart,             legenditem = series.legenditem,             showorhide,             ignorehiddenseries = chart.options.chart.ignorehiddenseries,             oldvisibility = series.visible;          // if called without argument, toggle visibility         series.visible = vis = series.useroptions.visible = vis === highcharts.undefined ? !oldvisibility : vis;         showorhide = vis ? 'show' : 'hide';          // show or hide elements         highcharts.each(['group', 'datalabelsgroup', 'markergroup', 'tracker'], function (key) {             if (series[key]) {                 series[key][showorhide]();             }         });           // hide tooltip (#1361)         if (chart.hoverseries === series || (chart.hoverpoint && chart.hoverpoint.series) === series) {             series.onmouseout();         }           if (legenditem) {             chart.legend.colorizeitem(series, vis);         }           // rescale or adapt resized chart         series.isdirty = true;         // in stack, other series affected         if (series.options.stacking) {             highcharts.each(chart.series, function (otherseries) {                 if (otherseries.options.stacking && otherseries.visible) {                     otherseries.isdirty = true;                 }             });         }          // show or hide linked series         highcharts.each(series.linkedseries, function (otherseries) {             if (effectlinkedseries === true) {               otherseries.setvisible(vis, false);             }         });          if (ignorehiddenseries) {             chart.isdirtybox = true;         }         if (redraw !== false) {             chart.redraw();         }          highcharts.fireevent(series, showorhide); }; // end highcharts.series.prototype.setvisible  highcharts.series.prototype.show = function (effectlinkedseries) {         this.setvisible(true,undefined,effectlinkedseries); };  highcharts.series.prototype.hide = function (effectlinkedseries) {         this.setvisible(false,undefined,effectlinkedseries); }; 

Comments