/*
Highcharts JS v4.1.4 (2015-03-10)
Exporting module
(c) 2010-2014 Torstein Honsi
License: www.highcharts.com/license
*/
(function(f) {
var z = f.Chart,
s = f.addEvent,
A = f.removeEvent,
B = HighchartsAdapter.fireEvent,
j = f.createElement,
p = f.discardElement,
u = f.css,
l = f.merge,
m = f.each,
q = f.extend,
E = f.splat,
F = Math.max,
k = document,
C = window,
G = f.isTouchDevice,
H = f.Renderer.prototype.symbols,
r = f.getOptions(),
x;
q(r.lang, {
printChart:"打印图表",
//printChart: "Print chart",
downloadPNG: "下载PNG 图片",
//downloadPNG: "Download PNG image",
downloadJPEG: "下载JPEG 图片",
//downloadJPEG: "Download JPEG image",
downloadPDF: "下载PDF文档",
//downloadPDF: "Download PDF document",
downloadSVG: "下载SVG 矢量图",
//downloadSVG: "Download SVG vector image",
contextButtonTitle: "图表菜单"
});
r.navigation = {
menuStyle: {
border: "1px solid #A0A0A0",
background: "#FFFFFF",
padding: "5px 0"
},
menuItemStyle: {
padding: "0 10px",
background: "none",
color: "#303030",
fontSize: G ? "14px": "11px"
},
menuItemHoverStyle: {
background: "#4572A5",
color: "#FFFFFF"
},
buttonOptions: {
symbolFill: "#E0E0E0",
symbolSize: 14,
symbolStroke: "#666",
symbolStrokeWidth: 3,
symbolX: 12.5,
symbolY: 10.5,
align: "right",
buttonSpacing: 3,
height: 22,
theme: {
fill: "white",
stroke: "none"
},
verticalAlign: "top",
width: 24
}
};
r.exporting = {
type: "image/png",
url: "http://export.highcharts.com/",
buttons: {
contextButton: {
menuClassName: "highcharts-contextmenu",
symbol: "menu",
_titleKey: "contextButtonTitle",
menuItems: [{
textKey: "printChart",
onclick: function() {
this.print()
}
},
{
separator: !0
},
{
textKey: "downloadPNG",
onclick: function() {
this.exportChart()
}
},
{
textKey: "downloadJPEG",
onclick: function() {
this.exportChart({
type: "image/jpeg"
})
}
},
{
textKey: "downloadPDF",
onclick: function() {
this.exportChart({
type: "application/pdf"
})
}
},
{
textKey: "downloadSVG",
onclick: function() {
this.exportChart({
type: "image/svg+xml"
})
}
}]
}
}
};
f.post = function(b, a, e) {
var c, b = j("form", l({
method: "post",
action: b,
enctype: "multipart/form-data"
},
e), {
display: "none"
},
k.body);
for (c in a) j("input", {
type: "hidden",
name: c,
value: a[c]
},
null, b);
b.submit();
p(b)
};
q(z.prototype, {
sanitizeSVG: function(b) {
return b.replace(/zIndex="[^"]+"/g, "").replace(/isShadow="[^"]+"/g, "").replace(/symbolName="[^"]+"/g, "").replace(/jQuery[0-9]+="[^"]+"/g, "").replace(/url\([^#]+#/g, "url(#").replace(/").replace(/(fill|stroke)="rgba\(([ 0-9]+,[ 0-9]+,[ 0-9]+),([ 0-9\.]+)\)"/g, '$1="rgb($2)" $1-opacity="$3"').replace(/ /g, " ").replace(//g, "").replace(/
/g, 'xlink:href="$1"/>').replace(/id=([^" >]+)/g, 'id="$1"').replace(/class=([^" >]+)/g, 'class="$1"').replace(/ transform /g, " ").replace(/:(path|rect)/g, "$1").replace(/style="([^"]+)"/g,
function(a) {
return a.toLowerCase()
})
},
getSVG: function(b) {
var a = this,
e, c, g, y, h, d = l(a.options, b);
if (!k.createElementNS) k.createElementNS = function(a, b) {
return k.createElement(b)
};
c = j("div", null, {
position: "absolute",
top: "-9999em",
width: a.chartWidth + "px",
height: a.chartHeight + "px"
},
k.body);
g = a.renderTo.style.width;
h = a.renderTo.style.height;
g = d.exporting.sourceWidth || d.chart.width || /px$/.test(g) && parseInt(g, 10) || 600;
h = d.exporting.sourceHeight || d.chart.height || /px$/.test(h) && parseInt(h, 10) || 400;
q(d.chart, {
animation: !1,
renderTo: c,
forExport: !0,
width: g,
height: h
});
d.exporting.enabled = !1;
delete d.data;
d.series = [];
m(a.series,
function(a) {
y = l(a.options, {
animation: !1,
enableMouseTracking: !1,
showCheckbox: !1,
visible: a.visible
});
y.isInternal || d.series.push(y)
});
b && m(["xAxis", "yAxis"],
function(a) {
m(E(b[a]),
function(b, c) {
d[a][c] = l(d[a][c], b)
})
});
e = new f.Chart(d, a.callback);
m(["xAxis", "yAxis"],
function(b) {
m(a[b],
function(a, d) {
var c = e[b][d],
g = a.getExtremes(),
h = g.userMin,
g = g.userMax;
c && (h !== void 0 || g !== void 0) && c.setExtremes(h, g, !0, !1)
})
});
g = e.container.innerHTML;
d = null;
e.destroy();
p(c);
g = this.sanitizeSVG(g);
return g = g.replace(/(url\(#highcharts-[0-9]+)"/g, "$1").replace(/"/g, "'")
},
getSVGForExport: function(b, a) {
var e = this.options.exporting;
return this.getSVG(l({
chart: {
borderRadius: 0
}
},
e.chartOptions, a, {
exporting: {
sourceWidth: b && b.sourceWidth || e.sourceWidth,
sourceHeight: b && b.sourceHeight || e.sourceHeight
}
}))
},
exportChart: function(b, a) {
var e = this.getSVGForExport(b, a),
b = l(this.options.exporting, b);
f.post(b.url, {
filename: b.filename || "chart",
type: b.type,
width: b.width || 0,
scale: b.scale || 2,
svg: e
},
b.formAttributes)
},
print: function() {
var b = this,
a = b.container,
e = [],
c = a.parentNode,
g = k.body,
f = g.childNodes;
if (!b.isPrinting) b.isPrinting = !0,
B(b, "beforePrint"),
m(f,
function(a, b) {
if (a.nodeType === 1) e[b] = a.style.display,
a.style.display = "none"
}),
g.appendChild(a),
C.focus(),
C.print(),
setTimeout(function() {
c.appendChild(a);
m(f,
function(a, b) {
if (a.nodeType === 1) a.style.display = e[b]
});
b.isPrinting = !1;
B(b, "afterPrint")
},
1E3)
},
contextMenu: function(b, a, e, c, g, f, h) {
var d = this,
l = d.options.navigation,
D = l.menuItemStyle,
n = d.chartWidth,
o = d.chartHeight,
k = "cache-" + b,
i = d[k],
t = F(g, f),
v,
w,
p,
r = function(a) {
d.pointer.inClass(a.target, b) || w()
};
if (!i) d[k] = i = j("div", {
className: b
},
{
position: "absolute",
zIndex: 1E3,
padding: t + "px"
},
d.container),
v = j("div", null, q({
MozBoxShadow: "3px 3px 10px #888",
WebkitBoxShadow: "3px 3px 10px #888",
boxShadow: "3px 3px 10px #888"
},
l.menuStyle), i),
w = function() {
u(i, {
display: "none"
});
h && h.setState(0);
d.openMenu = !1
},
s(i, "mouseleave",
function() {
p = setTimeout(w, 500)
}),
s(i, "mouseenter",
function() {
clearTimeout(p)
}),
s(document, "mouseup", r),
s(d, "destroy",
function() {
A(document, "mouseup", r)
}),
m(a,
function(a) {
if (a) {
var b = a.separator ? j("hr", null, null, v) : j("div", {
onmouseover: function() {
u(this, l.menuItemHoverStyle)
},
onmouseout: function() {
u(this, D)
},
onclick: function() {
w();
a.onclick && a.onclick.apply(d, arguments)
},
innerHTML: a.text || d.options.lang[a.textKey]
},
q({
cursor: "pointer"
},
D), v);
d.exportDivElements.push(b)
}
}),
d.exportDivElements.push(v, i),
d.exportMenuWidth = i.offsetWidth,
d.exportMenuHeight = i.offsetHeight;
a = {
display: "block"
};
e + d.exportMenuWidth > n ? a.right = n - e - g - t + "px": a.left = e - t + "px";
c + f + d.exportMenuHeight > o && h.alignOptions.verticalAlign !== "top" ? a.bottom = o - c - t + "px": a.top = c + f - t + "px";
u(i, a);
d.openMenu = !0
},
addButton: function(b) {
var a = this,
e = a.renderer,
c = l(a.options.navigation.buttonOptions, b),
g = c.onclick,
k = c.menuItems,
h,
d,
m = {
stroke: c.symbolStroke,
fill: c.symbolFill
},
j = c.symbolSize || 12;
if (!a.btnCount) a.btnCount = 0;
if (!a.exportDivElements) a.exportDivElements = [],
a.exportSVGElements = [];
if (c.enabled !== !1) {
var n = c.theme,
o = n.states,
p = o && o.hover,
o = o && o.select,
i;
delete n.states;
g ? i = function() {
g.apply(a, arguments)
}: k && (i = function() {
a.contextMenu(d.menuClassName, k, d.translateX, d.translateY, d.width, d.height, d);
d.setState(2)
});
c.text && c.symbol ? n.paddingLeft = f.pick(n.paddingLeft, 25) : c.text || q(n, {
width: c.width,
height: c.height,
padding: 0
});
d = e.button(c.text, 0, 0, i, n, p, o).attr({
title: a.options.lang[c._titleKey],
"stroke-linecap": "round"
});
d.menuClassName = b.menuClassName || "highcharts-menu-" + a.btnCount++;
c.symbol && (h = e.symbol(c.symbol, c.symbolX - j / 2, c.symbolY - j / 2, j, j).attr(q(m, {
"stroke-width": c.symbolStrokeWidth || 1,
zIndex: 1
})).add(d));
d.add().align(q(c, {
width: d.width,
x: f.pick(c.x, x)
}), !0, "spacingBox");
x += (d.width + c.buttonSpacing) * (c.align === "right" ? -1 : 1);
a.exportSVGElements.push(d, h)
}
},
destroyExport: function(b) {
var b = b.target,
a, e;
for (a = 0; a < b.exportSVGElements.length; a++) if (e = b.exportSVGElements[a]) e.onclick = e.ontouchstart = null,
b.exportSVGElements[a] = e.destroy();
for (a = 0; a < b.exportDivElements.length; a++) e = b.exportDivElements[a],
A(e, "mouseleave"),
b.exportDivElements[a] = e.onmouseout = e.onmouseover = e.ontouchstart = e.onclick = null,
p(e)
}
});
H.menu = function(b, a, e, c) {
return ["M", b, a + 2.5, "L", b + e, a + 2.5, "M", b, a + c / 2 + 0.5, "L", b + e, a + c / 2 + 0.5, "M", b, a + c - 1.5, "L", b + e, a + c - 1.5]
};
z.prototype.callbacks.push(function(b) {
var a, e = b.options.exporting,
c = e.buttons;
x = 0;
if (e.enabled !== !1) {
for (a in c) b.addButton(c[a]);
s(b, "destroy", b.destroyExport)
}
})
})(Highcharts);