Files
geiger2/public/js/customEvents.min.js

27 lines
7.8 KiB
JavaScript
Executable File

(function(factory){if(typeof module==='object'&&module.exports){module.exports=factory;}else{factory(Highcharts);}}(function(HC){'use strict';var UNDEFINED,DBLCLICK='dblclick',TOUCHSTART='touchstart',CLICK='click',each=HC.each,pick=HC.pick,wrap=HC.wrap,merge=HC.merge,addEvent=HC.addEvent,isTouchDevice=HC.isTouchDevice,isObject=HC.isObject,isNumber=HC.isNumber,defaultOptions=HC.getOptions().plotOptions,axisProto=HC.Axis&&HC.Axis.prototype,plotLineOrBandProto=HC.PlotLineOrBand&&HC.PlotLineOrBand.prototype,seriesTypes=HC.seriesTypes,seriesProto=HC.Series&&HC.Series.prototype,customEvents,proto,methods;function isArray(obj){return Object.prototype.toString.call(obj)==='[object Array]';}
if(plotLineOrBandProto){wrap(plotLineOrBandProto,'render',function(proceed){var defaultEvents=this.options&&this.options.events;if(defaultEvents){defaultEvents=false;}
return proceed.apply(this,Array.prototype.slice.call(arguments,1));});}
if(seriesProto){wrap(seriesProto,'init',function(proceed,chart,options){var chartOptions=chart.options,plotOptions=chartOptions.plotOptions,seriesOptions=chartOptions.plotOptions.series,userOptions=merge(seriesOptions,plotOptions[this.type],options),userOptionsEvents=userOptions&&userOptions.events,userOptionsPointEvents=userOptions&&userOptions.point&&userOptions.point.events;options.events={};options.point={events:{}};if(userOptionsEvents){options.events={legendItemClick:userOptionsEvents&&userOptionsEvents.legendItemClick};}
if(userOptionsPointEvents){options.point.events={legendItemClick:userOptionsPointEvents&&userOptionsPointEvents.legendItemClick};}
options.customEvents={series:userOptionsEvents,point:userOptionsPointEvents};proceed.apply(this,Array.prototype.slice.call(arguments,1));});}
HC.Chart.prototype.customEvent={getEventsProtoMethods:function(){return[[HC.Tick,['addLabel']],[HC.Axis,['render']],[HC.Axis,['drawCrosshair']],[HC.Chart,['setTitle']],[HC.Legend,['renderItem']],[HC.PlotLineOrBand,['render']],[HC.Series,['drawPoints','drawDataLabels']],[seriesTypes.column,['drawPoints','drawDataLabels']],[seriesTypes.bar,['drawPoints','drawDataLabels']],[seriesTypes.pie,['drawPoints','drawDataLabels']],[seriesTypes.bubble,['drawPoints','drawDataLabels']],[seriesTypes.columnrange,['drawPoints','drawDataLabels']],[seriesTypes.arearange,['drawPoints','drawDataLabels']],[seriesTypes.areasplinerange,['drawPoints','drawDataLabels']],[seriesTypes.errorbar,['drawPoints','drawDataLabels']],[seriesTypes.boxplot,['drawPoints','drawDataLabels']],[seriesTypes.flags,['drawPoints','drawDataLabels']],[seriesTypes.heatmap,['drawPoints','drawDataLabels']]];},init:function(){var eventsProtoMethods=this.getEventsProtoMethods();each(eventsProtoMethods,function(protoMethod){proto=protoMethod[0]&&protoMethod[0].prototype;methods=protoMethod[1];if(proto){each(methods,function(method){customEvents.attach(proto,method);});}});},attach:function(proto,hcMethod){wrap(proto,hcMethod,function(proceed){var eventElement={events:UNDEFINED,element:UNDEFINED},proceedObject,len,j;proceedObject=proceed.apply(this,Array.prototype.slice.call(arguments,1));eventElement=customEvents.eventElement[hcMethod].call(this);if(!eventElement.events&&!eventElement.eventsPoint){return proceedObject;}
if(eventElement.eventsPoint){len=eventElement.elementPoint.length;for(j=0;j<len;j++){if(eventElement.elementPoint[j]){var elemPoint=pick(eventElement.elementPoint[j].graphic,eventElement.elementPoint[j]);if(elemPoint&&elemPoint!==UNDEFINED){customEvents.add(elemPoint,eventElement.eventsPoint,eventElement.elementPoint[j],eventElement,true);}}}}
if(eventElement.eventsSubtitle){customEvents.add(eventElement.elementSubtitle,eventElement.eventsSubtitle,eventElement,this);}
if(eventElement.eventsStackLabel){customEvents.add(eventElement.elementStackLabel,eventElement.eventsStackLabel,eventElement,this);}
customEvents.add(eventElement.element,eventElement.events,eventElement,this);return proceedObject;});},add:function(SVGelem,events,elemObj,eventElement,isPoint){var eventObject=eventElement.eventObject||elemObj.eventObject,isSeries=elemObj.isSeries||eventElement.isSeries;if(!SVGelem||!SVGelem.element){return false;}
for(var action in events){(function(event){if(events.hasOwnProperty(event)&&!SVGelem[event]){if(isTouchDevice&&event===DBLCLICK){var tapped=false;addEvent(SVGelem.element,TOUCHSTART,function(e){e.stopPropagation();e.preventDefault();if(isSeries&&!eventObject.directTouch){var chart=eventObject.chart,normalizedEvent=chart.pointer.normalize(e);elemObj=eventObject.searchPoint(normalizedEvent,eventObject.kdDimensions===1)||elemObj;e.point=elemObj;}
if((eventObject&&!isPoint)||(isNumber(eventObject.value))){eventObject.value=elemObj.textStr;elemObj=eventObject;}
if(elemObj&&elemObj.textStr){elemObj.value=elemObj.textStr;}
if(!tapped){tapped=setTimeout(function(){tapped=null;events[CLICK].call(elemObj,e);},300);}else{clearTimeout(tapped);tapped=null;events[event].call(elemObj,e);}
return false;});}else{addEvent(SVGelem.element,event,function(e){e.stopPropagation();e.preventDefault();if(isSeries&&!eventObject.directTouch){var chart=eventObject.chart,normalizedEvent=chart.pointer.normalize(e);elemObj=eventObject.searchPoint(normalizedEvent,eventObject.kdDimensions===1)||elemObj;e.point=elemObj;}
if((eventObject&&!isPoint)||(eventObject&&isNumber(eventObject.value))){eventObject.value=elemObj.textStr||eventObject.value;elemObj=eventObject;}
if(elemObj&&elemObj.textStr){elemObj.value=elemObj.textStr;}
events[event].call(elemObj,e);return false;});}
SVGelem[event]=function(){return true;};}})(action);}},eventElement:{addLabel:function(){var parent=this.parent,axis=this.axis,axisOptions=axis.options,eventsPoint=axisOptions.labels&&axisOptions.labels.events,elementPoint=[this.label],len,i;if(parent){var step=this;while(step){if(isArray(step)){len=step.length;for(i=0;i<len;i++){elementPoint.push(step[i].label);}}else{elementPoint.push(step.label);}
step=step.parent;}}
return{eventsPoint:eventsPoint,elementPoint:elementPoint,eventObject:{axis:axis,isFirst:this.isFirst,isLast:this.isLast,chart:axis.chart,dateTimeLabelFormat:axisOptions.dateTimeLabelFormats,value:this.pos}};},setTitle:function(){var events=this.options.title&&this.options.title.events,element=this.title,eventsSubtitle=this.options.subtitle&&this.options.subtitle.events,elementSubtitle=this.subtitle;return{events:events,element:element,eventsSubtitle:eventsSubtitle,elementSubtitle:elementSubtitle};},drawDataLabels:function(){var dataLabelsGroup=this.dataLabelsGroup;return{events:dataLabelsGroup?this.options.dataLabels.events:UNDEFINED,element:dataLabelsGroup?this.dataLabelsGroup:UNDEFINED};},render:function(){var stackLabels=this.options.stackLabels,events,element,eventsPoint,elementPoint,eventsStackLabel,elementStackLabel;if(this.axisTitle){events=this.options.title.events;element=this.axisTitle;}
if(stackLabels&&stackLabels.enabled){eventsPoint=stackLabels.events;elementPoint=this.stacks;eventsStackLabel=stackLabels.events;elementStackLabel=this.stackTotalGroup;}
return{events:events,element:element,eventsPoint:eventsPoint,elementPoint:elementPoint,eventsStackLabel:eventsStackLabel,elementStackLabel:elementStackLabel};},drawPoints:function(){var op=this.options,type=this.type,events=op.customEvents?op.customEvents.series:op.events,element=this.group,eventsPoint=op.customEvents?op.customEvents.point:op.point.events,elementPoint;if(defaultOptions[type]&&defaultOptions[type].marker&&!this.bubblePadding){elementPoint=[this.markerGroup];}else{elementPoint=this.points;}
if(!this.kdTree&&!this.buildingKdTree){this.buildKDTree();}
return{events:events,element:element,eventsPoint:eventsPoint,elementPoint:elementPoint,eventObject:this,isSeries:true};},renderItem:function(){return{events:this.options.itemEvents,element:this.group};},drawCrosshair:function(){var crosshair=this.options.crosshair;return{events:crosshair&&crosshair.events,element:this.cross};}}};customEvents=HC.Chart.prototype.customEvent;customEvents.init();}));