html/scripts/highchart/modules/exporting.src.js
function (options) {
		var chart = this,
			renderer = chart.renderer,
			btnOptions = merge(chart.options.navigation.buttonOptions, options),
			onclick = btnOptions.onclick,
			menuItems = btnOptions.menuItems,
			symbol,
			button,
			symbolAttr = {
				stroke: btnOptions.symbolStroke,
				fill: btnOptions.symbolFill
			},
			symbolSize = btnOptions.symbolSize || 12;
		if (!chart.btnCount) {
			chart.btnCount = 0;
		}

		// Keeps references to the button elements
		if (!chart.exportDivElements) {
			chart.exportDivElements = [];
			chart.exportSVGElements = [];
		}

		if (btnOptions.enabled === false) {
			return;
		}


		var attr = btnOptions.theme,
			states = attr.states,
			hover = states && states.hover,
			select = states && states.select,
			callback;

		delete attr.states;

		if (onclick) {
			callback = function () {
				onclick.apply(chart, arguments);
			};

		} else if (menuItems) {
			callback = function () {
				chart.contextMenu(
					button.menuClassName,
					menuItems,
					button.translateX,
					button.translateY,
					button.width,
					button.height,
					button
				);
				button.setState(2);
			};
		}


		if (btnOptions.text && btnOptions.symbol) {
			attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);

		} else if (!btnOptions.text) {
			extend(attr, {
				width: btnOptions.width,
				height: btnOptions.height,
				padding: 0
			});
		}

		button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)
			.attr({
				title: chart.options.lang[btnOptions._titleKey],
				'stroke-linecap': 'round'
			});
		button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++;

		if (btnOptions.symbol) {
			symbol = renderer.symbol(
					btnOptions.symbol,
					btnOptions.symbolX - (symbolSize / 2),
					btnOptions.symbolY - (symbolSize / 2),
					symbolSize,
					symbolSize
				)
				.attr(extend(symbolAttr, {
					'stroke-width': btnOptions.symbolStrokeWidth || 1,
					zIndex: 1
				})).add(button);
		}

		button.add()
			.align(extend(btnOptions, {
				width: button.width,
				x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654
			}), true, 'spacingBox');

		buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);

		chart.exportSVGElements.push(button, symbol);

	}
function (options) {
		var chart = this,
			renderer = chart.renderer,
			btnOptions = merge(chart.options.navigation.buttonOptions, options),
			onclick = btnOptions.onclick,
			menuItems = btnOptions.menuItems,
			symbol,
			button,
			symbolAttr = {
				stroke: btnOptions.symbolStroke,
				fill: btnOptions.symbolFill
			},
			symbolSize = btnOptions.symbolSize || 12;
		if (!chart.btnCount) {
			chart.btnCount = 0;
		}

		// Keeps references to the button elements
		if (!chart.exportDivElements) {
			chart.exportDivElements = [];
			chart.exportSVGElements = [];
		}

		if (btnOptions.enabled === false) {
			return;
		}


		var attr = btnOptions.theme,
			states = attr.states,
			hover = states && states.hover,
			select = states && states.select,
			callback;

		delete attr.states;

		if (onclick) {
			callback = function () {
				onclick.apply(chart, arguments);
			};

		} else if (menuItems) {
			callback = function () {
				chart.contextMenu(
					button.menuClassName,
					menuItems,
					button.translateX,
					button.translateY,
					button.width,
					button.height,
					button
				);
				button.setState(2);
			};
		}


		if (btnOptions.text && btnOptions.symbol) {
			attr.paddingLeft = Highcharts.pick(attr.paddingLeft, 25);

		} else if (!btnOptions.text) {
			extend(attr, {
				width: btnOptions.width,
				height: btnOptions.height,
				padding: 0
			});
		}

		button = renderer.button(btnOptions.text, 0, 0, callback, attr, hover, select)
			.attr({
				title: chart.options.lang[btnOptions._titleKey],
				'stroke-linecap': 'round'
			});
		button.menuClassName = options.menuClassName || PREFIX + 'menu-' + chart.btnCount++;

		if (btnOptions.symbol) {
			symbol = renderer.symbol(
					btnOptions.symbol,
					btnOptions.symbolX - (symbolSize / 2),
					btnOptions.symbolY - (symbolSize / 2),
					symbolSize,
					symbolSize
				)
				.attr(extend(symbolAttr, {
					'stroke-width': btnOptions.symbolStrokeWidth || 1,
					zIndex: 1
				})).add(button);
		}

		button.add()
			.align(extend(btnOptions, {
				width: button.width,
				x: Highcharts.pick(btnOptions.x, buttonOffset) // #1654
			}), true, 'spacingBox');

		buttonOffset += (button.width + btnOptions.buttonSpacing) * (btnOptions.align === 'right' ? -1 : 1);

		chart.exportSVGElements.push(button, symbol);

	}
function ( options ) { var chart = this , renderer = chart . renderer , btnOptions = merge ( chart . options . navigation . buttonOptions , options ) , onclick = btnOptions . onclick , menuItems = btnOptions . menuItems , symbol , button , symbolAttr = { stroke : btnOptions . symbolStroke , fill : btnOptions . symbolFill } , symbolSize = btnOptions . symbolSize || 12 ; if ( ! chart . btnCount ) { chart . btnCount = 0 ; } // Keeps references to the button elements if ( ! chart . exportDivElements ) { chart . exportDivElements = [ ] ; chart . exportSVGElements = [ ] ; } if ( btnOptions . enabled === false ) { return ; } var attr = btnOptions . theme , states = attr . states , hover = states && states . hover , select = states && states . select , callback ; delete attr . states ; if ( onclick ) { callback = function ( ) { onclick . apply ( chart , arguments ) ; } ; } else if ( menuItems ) { callback = function ( ) { chart . contextMenu ( button . menuClassName , menuItems , button . translateX , button . translateY , button . width , button . height , button ) ; button . setState ( 2 ) ; } ; } if ( btnOptions . text && btnOptions . symbol ) { attr . paddingLeft = Highcharts . pick ( attr . paddingLeft , 25 ) ; } else if ( ! btnOptions . text ) { extend ( attr , { width : btnOptions . width , height : btnOptions . height , padding : 0 } ) ; } button = renderer . button ( btnOptions . text , 0 , 0 , callback , attr , hover , select ) . attr ( { title : chart . options . lang [ btnOptions . _titleKey ] , 'stroke-linecap' : 'round' } ) ; button . menuClassName = options . menuClassName || PREFIX + 'menu-' + chart . btnCount ++ ; if ( btnOptions . symbol ) { symbol = renderer . symbol ( btnOptions . symbol , btnOptions . symbolX - ( symbolSize / 2 ) , btnOptions . symbolY - ( symbolSize / 2 ) , symbolSize , symbolSize ) . attr ( extend ( symbolAttr , { 'stroke-width' : btnOptions . symbolStrokeWidth || 1 , zIndex : 1 } ) ) . add ( button ) ; } button . add ( ) . align ( extend ( btnOptions , { width : button . width , x : Highcharts . pick ( btnOptions . x , buttonOffset ) // #1654 } ) , true , 'spacingBox' ) ; buttonOffset += ( button . width + btnOptions . buttonSpacing ) * ( btnOptions . align === 'right' ? - 1 : 1 ) ; chart . exportSVGElements . push ( button , symbol ) ; }
Add the export button to the chart
Add the export button to the chart