| Server IP : 182.53.201.61 / Your IP : 216.73.217.175 Web Server : Apache/2.2.15 (Fedora) System : Linux km10.dyndns.org 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 User : apache ( 48) PHP Version : 5.3.3 Disable Function : NONE MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/html/KPI monitor/Jcode/modules/ |
Upload File : |
/**
* Highcharts JS v12.5.0 (2026-01-12)
* @module highcharts/modules/exporting
* @requires highcharts
*
* Exporting module
*
* (c) 2010-2026 Highsoft AS
* Author: Torstein Honsi
*
* A commercial license may be required depending on use.
* See www.highcharts.com/license
*/
import * as e from "../highcharts.js";
var t,
n,
i = {};
((i.n = (e) => {
var t = e && e.__esModule ? () => e.default : () => e;
return (i.d(t, { a: t }), t);
}),
(i.d = (e, t) => {
for (var n in t)
i.o(t, n) &&
!i.o(e, n) &&
Object.defineProperty(e, n, { enumerable: !0, get: t[n] });
}),
(i.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)));
let o = e.default;
var r = i.n(o);
let a = e.default.AST;
var s = i.n(a);
let l = e.default.Chart;
var c = i.n(l),
h = t || (t = {});
h.compose = function (e) {
return (e.navigation || (e.navigation = new p(e)), e);
};
class p {
constructor(e) {
((this.updates = []), (this.chart = e));
}
addUpdate(e) {
this.chart.navigation.updates.push(e);
}
update(e, t) {
this.updates.forEach((n) => {
n.call(this.chart, e, t);
});
}
}
h.Additions = p;
let d = t,
{
isSafari: u,
win: g,
win: { document: f },
} = r(),
{ error: m } = r(),
y = g.URL || g.webkitURL || g;
function x(e, t) {
let n = g.navigator,
i = f.createElement("a");
if ("string" != typeof e && !(e instanceof String) && n.msSaveOrOpenBlob)
return void n.msSaveOrOpenBlob(e, t);
if (((e = "" + e), n.userAgent.length > 1e3)) throw Error("Input too long");
let o = /Edge\/\d+/.test(n.userAgent);
if (
((u && "string" == typeof e && 0 === e.indexOf("data:application/pdf")) ||
o ||
e.length > 2e6) &&
!(e =
(function (e) {
let t = e
.replace(/filename=.*;/, "")
.match(/data:([^;]*)(;base64)?,([A-Z+\d\/]+)/i);
if (
t &&
t.length > 3 &&
g.atob &&
g.ArrayBuffer &&
g.Uint8Array &&
g.Blob &&
y.createObjectURL
) {
let e = g.atob(t[3]),
n = new g.ArrayBuffer(e.length),
i = new g.Uint8Array(n);
for (let t = 0; t < i.length; ++t) i[t] = e.charCodeAt(t);
return y.createObjectURL(new g.Blob([i], { type: t[1] }));
}
})(e) || "")
)
throw Error("Failed to convert to blob");
if (void 0 !== i.download)
((i.href = e),
(i.download = t),
f.body.appendChild(i),
i.click(),
f.body.removeChild(i));
else
try {
if (!g.open(e, "chart")) throw Error("Failed to open window");
} catch {
g.location.href = e;
}
}
let { isTouchDevice: w } = r(),
b = {
exporting: {
allowTableSorting: !0,
libURL: "https://code.highcharts.com/12.5.0/lib/",
local: !0,
type: "image/png",
url: `https://export-svg.highcharts.com?v=${r().version}`,
pdfFont: {
normal: void 0,
bold: void 0,
bolditalic: void 0,
italic: void 0,
},
printMaxWidth: 780,
scale: 2,
buttons: {
contextButton: {
className: "highcharts-contextbutton",
menuClassName: "highcharts-contextmenu",
symbol: "menu",
titleKey: "contextButtonTitle",
menuItems: [
"viewFullscreen",
"printChart",
"separator",
"downloadPNG",
"downloadJPEG",
"downloadSVG",
],
},
},
menuItemDefinitions: {
viewFullscreen: {
textKey: "viewFullscreen",
onclick: function () {
this.fullscreen?.toggle();
},
},
printChart: {
textKey: "printChart",
onclick: function () {
this.exporting?.print();
},
},
separator: { separator: !0 },
downloadPNG: {
textKey: "downloadPNG",
onclick: async function () {
await this.exporting?.exportChart();
},
},
downloadJPEG: {
textKey: "downloadJPEG",
onclick: async function () {
await this.exporting?.exportChart({ type: "image/jpeg" });
},
},
downloadPDF: {
textKey: "downloadPDF",
onclick: async function () {
await this.exporting?.exportChart({ type: "application/pdf" });
},
},
downloadSVG: {
textKey: "downloadSVG",
onclick: async function () {
await this.exporting?.exportChart({ type: "image/svg+xml" });
},
},
},
},
lang: {
viewFullscreen: "View in full screen",
exitFullscreen: "Exit from full screen",
printChart: "Print chart",
downloadPNG: "Download PNG image",
downloadJPEG: "Download JPEG image",
downloadPDF: "Download PDF document",
downloadSVG: "Download SVG vector image",
contextButtonTitle: "Chart context menu",
},
navigation: {
buttonOptions: {
symbolSize: 14,
symbolX: 14.5,
symbolY: 13.5,
align: "right",
buttonSpacing: 5,
height: 28,
y: -5,
verticalAlign: "top",
width: 28,
symbolFill: "#666666",
symbolStroke: "#666666",
symbolStrokeWidth: 3,
theme: {
fill: "#ffffff",
padding: 5,
stroke: "none",
"stroke-linecap": "round",
},
},
menuStyle: {
border: "none",
borderRadius: "3px",
background: "#ffffff",
padding: "0.5em",
},
menuItemStyle: {
background: "none",
borderRadius: "3px",
color: "#333333",
padding: "0.5em",
fontSize: w ? "0.9em" : "0.8em",
transition: "background 250ms, color 250ms",
},
menuItemHoverStyle: { background: "#f2f2f2" },
},
};
!(function (e) {
let t = [];
function n(e, t, n, i) {
return [
["M", e, t + 2.5],
["L", e + n, t + 2.5],
["M", e, t + i / 2 + 0.5],
["L", e + n, t + i / 2 + 0.5],
["M", e, t + i - 1.5],
["L", e + n, t + i - 1.5],
];
}
function i(e, t, n, i) {
let o = i / 3 - 2,
r = [];
return r.concat(
this.circle(n - o, t, o, o),
this.circle(n - o, t + o + 4, o, o),
this.circle(n - o, t + 2 * (o + 4), o, o),
);
}
e.compose = function (e) {
if (-1 === t.indexOf(e)) {
t.push(e);
let o = e.prototype.symbols;
((o.menu = n), (o.menuball = i.bind(o)));
}
};
})(n || (n = {}));
let v = n,
{ composed: S } = r(),
{ addEvent: C, fireEvent: E, pushUnique: O } = r();
function T() {
this.fullscreen = new k(this);
}
class k {
static compose(e) {
O(S, "Fullscreen") && C(e, "beforeRender", T);
}
constructor(e) {
((this.chart = e), (this.isOpen = !1));
let t = e.renderTo;
!this.browserProps &&
("function" == typeof t.requestFullscreen
? (this.browserProps = {
fullscreenChange: "fullscreenchange",
requestFullscreen: "requestFullscreen",
exitFullscreen: "exitFullscreen",
})
: t.mozRequestFullScreen
? (this.browserProps = {
fullscreenChange: "mozfullscreenchange",
requestFullscreen: "mozRequestFullScreen",
exitFullscreen: "mozCancelFullScreen",
})
: t.webkitRequestFullScreen
? (this.browserProps = {
fullscreenChange: "webkitfullscreenchange",
requestFullscreen: "webkitRequestFullScreen",
exitFullscreen: "webkitExitFullscreen",
})
: t.msRequestFullscreen &&
(this.browserProps = {
fullscreenChange: "MSFullscreenChange",
requestFullscreen: "msRequestFullscreen",
exitFullscreen: "msExitFullscreen",
}));
}
close() {
let e = this,
t = e.chart,
n = t.options.chart;
E(t, "fullscreenClose", void 0, function () {
(e.isOpen &&
e.browserProps &&
t.container.ownerDocument instanceof Document &&
t.container.ownerDocument[e.browserProps.exitFullscreen](),
e.unbindFullscreenEvent &&
(e.unbindFullscreenEvent = e.unbindFullscreenEvent()),
t.setSize(e.origWidth, e.origHeight, !1),
(e.origWidth = void 0),
(e.origHeight = void 0),
(n.width = e.origWidthOption),
(n.height = e.origHeightOption),
(e.origWidthOption = void 0),
(e.origHeightOption = void 0),
(e.isOpen = !1),
e.setButtonText());
});
}
open() {
let e = this,
t = e.chart,
n = t.options.chart;
E(t, "fullscreenOpen", void 0, function () {
if (
(n && ((e.origWidthOption = n.width), (e.origHeightOption = n.height)),
(e.origWidth = t.chartWidth),
(e.origHeight = t.chartHeight),
e.browserProps)
) {
let n = C(
t.container.ownerDocument,
e.browserProps.fullscreenChange,
function () {
e.isOpen
? ((e.isOpen = !1), e.close())
: (t.setSize(null, null, !1),
(e.isOpen = !0),
e.setButtonText());
},
),
i = C(t, "destroy", n);
e.unbindFullscreenEvent = () => {
(n(), i());
};
let o = t.renderTo[e.browserProps.requestFullscreen]();
o &&
o.catch(function () {
alert("Full screen is not supported inside a frame.");
});
}
});
}
setButtonText() {
let e = this.chart,
t = e.exporting?.divElements,
n = e.options.exporting,
i = n && n.buttons && n.buttons.contextButton.menuItems,
o = e.options.lang;
if (
n?.menuItemDefinitions &&
o?.exitFullscreen &&
o.viewFullscreen &&
i &&
t
) {
let e = t[i.indexOf("viewFullscreen")];
e &&
s().setElementHTML(
e,
this.isOpen
? o.exitFullscreen
: n.menuItemDefinitions.viewFullscreen?.textKey || o.viewFullscreen,
);
}
}
toggle() {
this.isOpen ? this.close() : this.open();
}
}
let { win: F } = r(),
{ discardElement: R, objectEach: N } = r(),
P = {
ajax: function (e) {
let t = {
json: "application/json",
xml: "application/xml",
text: "text/plain",
octet: "application/octet-stream",
},
n = new XMLHttpRequest();
function i(t, n) {
e.error && e.error(t, n);
}
if (!e.url) return !1;
(n.open((e.type || "get").toUpperCase(), e.url, !0),
e.headers?.["Content-Type"] ||
n.setRequestHeader("Content-Type", t[e.dataType || "json"] || t.text),
N(e.headers, function (e, t) {
n.setRequestHeader(t, e);
}),
e.responseType && (n.responseType = e.responseType),
(n.onreadystatechange = function () {
let t;
if (4 === n.readyState) {
if (200 === n.status) {
if (
"blob" !== e.responseType &&
((t = n.responseText), "json" === e.dataType)
)
try {
t = JSON.parse(t);
} catch (e) {
if (e instanceof Error) return i(n, e);
}
return e.success?.(t, n);
}
i(n, n.responseText);
}
}),
e.data &&
"string" != typeof e.data &&
(e.data = JSON.stringify(e.data)),
n.send(e.data));
},
getJSON: function (e, t) {
P.ajax({
url: e,
success: t,
dataType: "json",
headers: { "Content-Type": "text/plain" },
});
},
};
P.post = async function (e, t, n) {
let i = new F.FormData();
(N(t, function (e, t) {
i.append(t, e);
}),
i.append("b64", "true"));
let o = await F.fetch(e, { method: "POST", body: i, ...n });
if (o.ok) {
let e = await o.text(),
n = document.createElement("a");
((n.href = `data:${t.type};base64,${e}`),
(n.download = t.filename),
n.click(),
R(n));
}
};
let { defaultOptions: L, setOptions: M } = r(),
{
composed: D,
doc: A,
isFirefox: H,
isMS: I,
isSafari: U,
SVG_NS: j,
win: B,
} = r(),
{
addEvent: G,
clearTimeout: $,
createElement: V,
css: W,
discardElement: q,
error: z,
extend: K,
find: J,
fireEvent: _,
isObject: X,
merge: Y,
objectEach: Z,
pick: Q,
pushUnique: ee,
removeEvent: et,
splat: en,
uniqueKey: ei,
} = r();
(s().allowedAttributes.push(
"data-z-index",
"fill-opacity",
"filter",
"preserveAspectRatio",
"rx",
"ry",
"stroke-dasharray",
"stroke-linejoin",
"stroke-opacity",
"text-anchor",
"transform",
"transform-origin",
"version",
"viewBox",
"visibility",
"xmlns",
"xmlns:xlink",
),
s().allowedTags.push(
"desc",
"clippath",
"fedropshadow",
"femorphology",
"g",
"image",
));
let eo = B.URL || B.webkitURL || B;
class er {
constructor(e, t) {
((this.options = {}),
(this.chart = e),
(this.options = t),
(this.btnCount = 0),
(this.buttonOffset = 0),
(this.divElements = []),
(this.svgElements = []));
}
static hyphenate(e) {
return e.replace(/[A-Z]/g, function (e) {
return "-" + e.toLowerCase();
});
}
static async imageToDataURL(e, t, n) {
let i = await er.loadImage(e),
o = A.createElement("canvas"),
r = o?.getContext("2d");
if (r)
return (
(o.height = i.height * t),
(o.width = i.width * t),
r.drawImage(i, 0, 0, o.width, o.height),
o.toDataURL(n)
);
throw Error("No canvas found!");
}
static async fetchCSS(e) {
let t = await fetch(e).then((e) => e.text()),
n = new CSSStyleSheet();
return (n.replaceSync(t), n);
}
static async handleStyleSheet(e, t) {
try {
for (let n of Array.from(e.cssRules)) {
if (n instanceof CSSImportRule) {
let e = await er.fetchCSS(n.href);
await er.handleStyleSheet(e, t);
}
if (n instanceof CSSFontFaceRule) {
let i = n.cssText;
if (e.href) {
let t = e.href,
n = /url\(\s*(['"]?)(?![a-z]+:|\/\/)([^'")]+?)\1\s*\)/gi;
i = i.replace(n, (e, n, i) => {
let o = new URL(i, t).href;
return `url(${n}${o}${n})`;
});
}
t.push(i);
}
}
} catch {
if (e.href) {
let n = await er.fetchCSS(e.href);
await er.handleStyleSheet(n, t);
}
}
}
static async fetchStyleSheets() {
let e = [];
for (let t of Array.from(A.styleSheets)) await er.handleStyleSheet(t, e);
return e;
}
static async inlineFonts(e) {
let t = await er.fetchStyleSheets(),
n = /url\(([^)]+)\)/g,
i = [],
o = t.join("\n"),
r;
for (; (r = n.exec(o)); ) {
let e = r[1].replace(/['"]/g, "");
i.includes(e) || i.push(e);
}
let a = (e) => {
let t = "",
n = new Uint8Array(e);
for (let e = 0; e < n.byteLength; e++) t += String.fromCharCode(n[e]);
return btoa(t);
},
s = {};
for (let e of i)
try {
let t = await fetch(e),
n = t.headers.get("Content-Type") || "",
i = a(await t.arrayBuffer());
s[e] = `data:${n};base64,${i}`;
} catch {}
o = o.replace(n, (e, t) => {
let n = t.replace(/['"]/g, "");
return `url(${s[n] || n})`;
});
let l = document.createElementNS("http://www.w3.org/2000/svg", "style");
return ((l.textContent = o), e.append(l), e);
}
static loadImage(e) {
return new Promise((t, n) => {
let i = new B.Image();
((i.crossOrigin = "Anonymous"),
(i.onload = () => {
setTimeout(() => {
t(i);
}, er.loadEventDeferDelay);
}),
(i.onerror = (e) => {
n(e);
}),
(i.src = e));
});
}
static prepareImageOptions(e) {
let t = e?.type || "image/png",
n = e?.libURL || L.exporting?.libURL;
return {
type: t,
filename:
(e?.filename || "chart") +
"." +
("image/svg+xml" === t ? "svg" : t.split("/")[1]),
scale: e?.scale || 1,
libURL: n?.slice(-1) !== "/" ? n + "/" : n,
};
}
static sanitizeSVG(e, t) {
let n = e.indexOf("</svg>") + 6,
i = e.indexOf("<foreignObject") > -1,
o = e.substr(n);
return (
(e = e.substr(0, n)),
i
? (e = e.replace(/(<(?:img|br).*?(?=\>))>/g, "$1 />"))
: o &&
t?.exporting?.allowHTML &&
((o =
'<foreignObject x="0" y="0" width="' +
t.chart.width +
'" height="' +
t.chart.height +
'"><body xmlns="http://www.w3.org/1999/xhtml">' +
o.replace(/(<(?:img|br).*?(?=\>))>/g, "$1 />") +
"</body></foreignObject>"),
(e = e.replace("</svg>", o + "</svg>"))),
(e = e
.replace(/zIndex="[^"]+"/g, "")
.replace(/symbolName="[^"]+"/g, "")
.replace(/jQuery\d+="[^"]+"/g, "")
.replace(/url\(("|")(.*?)("|")\;?\)/g, "url($2)")
.replace(/url\([^#]+#/g, "url(#")
.replace(/<svg /, '<svg xmlns:xlink="http://www.w3.org/1999/xlink" ')
.replace(/ (NS\d+\:)?href=/g, " xlink:href=")
.replace(/\n+/g, " ")
.replace(/ /g, "\xa0")
.replace(/­/g, "\xad"))
);
}
static svgToDataURL(e) {
let t = B.navigator.userAgent,
n = t.indexOf("WebKit") > -1 && 0 > t.indexOf("Chrome");
try {
if (!n && -1 === e.indexOf("<foreignObject"))
return eo.createObjectURL(
new B.Blob([e], { type: "image/svg+xml;charset-utf-16" }),
);
} catch {}
return "data:image/svg+xml;charset=UTF-8," + encodeURIComponent(e);
}
addButton(e) {
let t,
n = this,
i = n.chart,
o = i.renderer,
r = Y(i.options.navigation?.buttonOptions, e),
a = r.onclick,
s = r.menuItems,
l = r.symbolSize || 12;
if (!1 === r.enabled || !r.theme) return;
let c = i.styledMode ? {} : r.theme,
h = () => {};
(a
? (h = function (e) {
(e && e.stopPropagation(), a.call(i, e));
})
: s &&
(h = function (e) {
(e && e.stopPropagation(),
n.contextMenu(
p.menuClassName,
s,
p.translateX || 0,
p.translateY || 0,
p.width || 0,
p.height || 0,
p,
),
p.setState(2));
}),
r.text && r.symbol
? (c.paddingLeft = Q(c.paddingLeft, 30))
: r.text || K(c, { width: r.width, height: r.height, padding: 0 }));
let p = o
.button(
r.text || "",
0,
0,
h,
c,
void 0,
void 0,
void 0,
void 0,
r.useHTML,
)
.addClass(e.className || "")
.attr({ title: Q(i.options.lang[r._titleKey || r.titleKey], "") });
((p.menuClassName = e.menuClassName || "highcharts-menu-" + n.btnCount++),
r.symbol &&
((t = o
.symbol(
r.symbol,
Math.round((r.symbolX || 0) - l / 2),
Math.round((r.symbolY || 0) - l / 2),
l,
l,
{ width: l, height: l },
)
.addClass("highcharts-button-symbol")
.attr({ zIndex: 1 })
.add(p)),
i.styledMode ||
t.attr({
stroke: r.symbolStroke,
fill: r.symbolFill,
"stroke-width": r.symbolStrokeWidth || 1,
})),
p
.add(n.group)
.align(
K(r, { width: p.width, x: Q(r.x, n.buttonOffset) }),
!0,
"spacingBox",
),
(n.buttonOffset +=
((p.width || 0) + (r.buttonSpacing || 0)) *
("right" === r.align ? -1 : 1)),
n.svgElements.push(p, t));
}
afterPrint() {
let e = this.chart;
if (!this.printReverseInfo) return;
let {
childNodes: t,
origDisplay: n,
resetParams: i,
} = this.printReverseInfo;
(this.moveContainers(e.renderTo),
[].forEach.call(t, function (e, t) {
1 === e.nodeType && (e.style.display = n[t] || "");
}),
(this.isPrinting = !1),
i && e.setSize.apply(e, i),
delete this.printReverseInfo,
(er.printingChart = void 0),
_(e, "afterPrint"));
}
beforePrint() {
let e = this.chart,
t = A.body,
n = this.options.printMaxWidth,
i = { childNodes: t.childNodes, origDisplay: [], resetParams: void 0 };
((this.isPrinting = !0),
e.pointer?.reset(void 0, 0),
_(e, "beforePrint"),
n &&
e.chartWidth > n &&
((i.resetParams = [e.options.chart.width, void 0, !1]),
e.setSize(n, void 0, !1)),
[].forEach.call(i.childNodes, function (e, t) {
1 === e.nodeType &&
((i.origDisplay[t] = e.style.display), (e.style.display = "none"));
}),
this.moveContainers(t),
(this.printReverseInfo = i));
}
contextMenu(e, t, n, i, o, r, a) {
let l = this,
c = l.chart,
h = c.options.navigation,
p = c.chartWidth,
d = c.chartHeight,
u = "cache-" + e,
g = Math.max(o, r),
f,
m = c[u];
m ||
((l.contextMenuEl =
c[u] =
m =
V(
"div",
{ className: e },
{
position: "absolute",
zIndex: 1e3,
padding: g + "px",
pointerEvents: "auto",
...c.renderer.style,
},
c.scrollablePlotArea?.fixedDiv || c.container,
)),
(f = V(
"ul",
{ className: "highcharts-menu" },
c.styledMode ? {} : { listStyle: "none", margin: 0, padding: 0 },
m,
)),
c.styledMode ||
W(
f,
K(
{
MozBoxShadow: "3px 3px 10px #0008",
WebkitBoxShadow: "3px 3px 10px #0008",
boxShadow: "3px 3px 10px #0008",
},
h?.menuStyle || {},
),
),
(m.hideMenu = function () {
(W(m, { display: "none" }),
a && a.setState(0),
c.exporting && (c.exporting.openMenu = !1),
W(c.renderTo, { overflow: "hidden" }),
W(c.container, { overflow: "hidden" }),
$(m.hideTimer),
_(c, "exportMenuHidden"));
}),
l.events?.push(
G(m, "mouseleave", function () {
m.hideTimer = B.setTimeout(m.hideMenu, 500);
}),
G(m, "mouseenter", function () {
$(m.hideTimer);
}),
G(A, "mouseup", function (t) {
c.pointer?.inClass(t.target, e) || m.hideMenu();
}),
G(m, "click", function () {
c.exporting?.openMenu && m.hideMenu();
}),
),
t.forEach(function (e) {
if (
("string" == typeof e &&
l.options.menuItemDefinitions?.[e] &&
(e = l.options.menuItemDefinitions[e]),
X(e, !0))
) {
let t;
(e.separator
? (t = V("hr", void 0, void 0, f))
: ("viewData" === e.textKey &&
l.isDataTableVisible &&
(e.textKey = "hideData"),
(t = V(
"li",
{
className: "highcharts-menu-item",
onclick: function (t) {
(t && t.stopPropagation(),
m.hideMenu(),
"string" != typeof e &&
e.onclick &&
e.onclick.apply(c, arguments));
},
},
void 0,
f,
)),
s().setElementHTML(t, e.text || c.options.lang[e.textKey]),
c.styledMode ||
((t.onmouseover = function () {
W(this, h?.menuItemHoverStyle || {});
}),
(t.onmouseout = function () {
W(this, h?.menuItemStyle || {});
}),
W(t, K({ cursor: "pointer" }, h?.menuItemStyle || {})))),
l.divElements.push(t));
}
}),
l.divElements.push(f, m),
(l.menuHeight = m.offsetHeight),
(l.menuWidth = m.offsetWidth));
let y = { display: "block" };
(n + (l.menuWidth || 0) > p
? (y.right = p - n - o - g + "px")
: (y.left = n - g + "px"),
i + r + (l.menuHeight || 0) > d && a.alignOptions?.verticalAlign !== "top"
? (y.bottom = d - i - g + "px")
: (y.top = i + r - g + "px"),
W(m, y),
W(c.renderTo, { overflow: "" }),
W(c.container, { overflow: "" }),
c.exporting && (c.exporting.openMenu = !0),
_(c, "exportMenuShown"));
}
destroy(e) {
let t,
n = e ? e.target : this.chart,
{ divElements: i, events: o, svgElements: r } = this;
(r.forEach((e, i) => {
e &&
((e.onclick = e.ontouchstart = null),
n[(t = "cache-" + e.menuClassName)] && delete n[t],
(r[i] = e.destroy()));
}),
(r.length = 0),
this.group && (this.group.destroy(), delete this.group),
i.forEach(function (e, t) {
e &&
($(e.hideTimer),
et(e, "mouseleave"),
(i[t] =
e.onmouseout =
e.onmouseover =
e.ontouchstart =
e.onclick =
null),
q(e));
}),
(i.length = 0),
o &&
(o.forEach(function (e) {
e();
}),
(o.length = 0)));
}
async downloadSVG(e, t) {
let n,
i = { svg: e, exportingOptions: t, exporting: this };
if ((_(er.prototype, "downloadSVG", i), i.defaultPrevented)) return;
let {
type: o,
filename: r,
scale: a,
libURL: s,
} = er.prepareImageOptions(t);
if ("application/pdf" === o)
throw Error("Offline exporting logic for PDF type is not found.");
if ("image/svg+xml" === o) {
if (void 0 !== B.MSBlobBuilder) {
let t = new B.MSBlobBuilder();
(t.append(e), (n = t.getBlob("image/svg+xml")));
} else n = er.svgToDataURL(e);
x(n, r);
} else {
n = er.svgToDataURL(e);
try {
er.objectURLRevoke = !0;
let e = await er.imageToDataURL(n, a, o);
x(e, r);
} catch (h) {
if ("No canvas found!" === h.message) throw h;
if (e.length > 1e8) throw Error("Input too long");
let t = A.createElement("canvas"),
n = t.getContext("2d"),
i = e.match(
/^<svg[^>]*\s{,1000}width\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/,
),
c = e.match(
/^<svg[^>]*\s{0,1000}height\s{,1000}=\s{,1000}\"?(\d+)\"?[^>]*>/,
);
if (n && i && c) {
let h = i[1] * a,
p = c[1] * a;
if (((t.width = h), (t.height = p), !B.canvg)) {
var l;
((er.objectURLRevoke = !0),
await ((l = s + "canvg.js"),
new Promise((e, t) => {
let n = f.getElementsByTagName("head")[0],
i = f.createElement("script");
((i.type = "text/javascript"),
(i.src = l),
(i.onload = () => {
e();
}),
(i.onerror = () => {
let e = `Error loading script ${l}`;
(m(e), t(Error(e)));
}),
n.appendChild(i));
})));
}
(B.canvg.Canvg.fromString(n, e).start(),
x(B.navigator.msSaveOrOpenBlob ? t.msToBlob() : t.toDataURL(o), r));
}
} finally {
if (er.objectURLRevoke)
try {
eo.revokeObjectURL(n);
} catch {}
}
}
}
async exportChart(e, t) {
if ((e = Y(this.options, e)).local) await this.localExport(e, t || {});
else {
let n = this.getSVGForExport(e, t);
e.url &&
(await P.post(
e.url,
{
filename: e.filename
? e.filename.replace(/\//g, "-")
: this.getFilename(),
type: e.type,
width: e.width,
scale: e.scale,
svg: n,
},
e.fetchOptions,
));
}
}
async fallbackToServer(e, t) {
!1 === e.fallbackToExportServer
? e.error
? e.error(e, t)
: z(28, !0)
: "application/pdf" === e.type &&
((e.local = !1), await this.exportChart(e));
}
getChartHTML(e) {
let t = this.chart;
return (
e && this.inlineStyles(),
this.resolveCSSVariables(),
t.container.innerHTML
);
}
getFilename() {
let e = this.chart.userOptions.title?.text,
t = this.options.filename;
return t
? t.replace(/\//g, "-")
: ("string" == typeof e &&
(t = e
.toLowerCase()
.replace(/<\/?[^>]+(>|$)/g, "")
.replace(/[\s_]+/g, "-")
.replace(/[^a-z\d\-]/g, "")
.replace(/^[\-]+/g, "")
.replace(/[\-]+/g, "-")
.substr(0, 24)
.replace(/[\-]+$/g, "")),
(!t || t.length < 5) && (t = "chart"),
t);
}
getSVG(e) {
let t = this.chart,
n,
i,
o = Y(t.options, e);
((o.plotOptions = Y(t.userOptions.plotOptions, e?.plotOptions)),
(o.time = Y(t.userOptions.time, e?.time)));
let r = V(
"div",
void 0,
{
position: "absolute",
top: "-9999em",
width: t.chartWidth + "px",
height: t.chartHeight + "px",
},
A.body,
),
a = t.renderTo.style.width,
s = t.renderTo.style.height,
l =
o.exporting?.sourceWidth ||
o.chart.width ||
(/px$/.test(a) && parseInt(a, 10)) ||
(o.isGantt ? 800 : 600),
c =
o.exporting?.sourceHeight ||
o.chart.height ||
(/px$/.test(s) && parseInt(s, 10)) ||
400;
(K(o.chart, {
animation: !1,
renderTo: r,
forExport: !0,
renderer: "SVGRenderer",
width: l,
height: c,
}),
o.exporting && (o.exporting.enabled = !1),
delete o.data,
(o.series = []),
t.series.forEach(function (e) {
(i = Y(e.userOptions, {
animation: !1,
enableMouseTracking: !1,
showCheckbox: !1,
visible: e.visible,
})).isInternal || o?.series?.push(i);
}));
let h = {};
(t.axes.forEach(function (e) {
(e.userOptions.internalKey || (e.userOptions.internalKey = ei()),
o &&
!e.options.isInternal &&
(h[e.coll] || ((h[e.coll] = !0), (o[e.coll] = [])),
o[e.coll].push(
Y(e.userOptions, {
visible: e.visible,
type: e.type,
uniqueNames: e.uniqueNames,
}),
)));
}),
(o.colorAxis = t.userOptions.colorAxis));
let p = new t.constructor(o, t.callback);
return (
e &&
["xAxis", "yAxis", "series"].forEach(function (t) {
e[t] && p.update({ [t]: e[t] });
}),
t.axes.forEach(function (t) {
let n = J(
p.axes,
(e) => e.options.internalKey === t.userOptions.internalKey,
);
if (n) {
let i = t.getExtremes(),
o = en(e?.[t.coll] || {})[0],
r = "min" in o ? o.min : i.userMin,
a = "max" in o ? o.max : i.userMax;
((void 0 !== r && r !== n.min) || (void 0 !== a && a !== n.max)) &&
n.setExtremes(r ?? void 0, a ?? void 0, !0, !1);
}
}),
(n =
p.exporting?.getChartHTML(
t.styledMode || o.exporting?.applyStyleSheets,
) || ""),
_(t, "getSVG", { chartCopy: p }),
(n = er.sanitizeSVG(n, o)),
(o = void 0),
p.destroy(),
q(r),
n
);
}
getSVGForExport(e, t) {
let n = this.options;
return this.getSVG(
Y({ chart: { borderRadius: 0 } }, n.chartOptions, t, {
exporting: {
sourceWidth: e?.sourceWidth || n.sourceWidth,
sourceHeight: e?.sourceHeight || n.sourceHeight,
},
}),
);
}
inlineStyles() {
let e,
t = er.inlineDenylist,
n = er.inlineAllowlist,
i = {},
o = V(
"iframe",
void 0,
{ width: "1px", height: "1px", visibility: "hidden" },
A.body,
),
r = o.contentWindow?.document;
(r && r.body.appendChild(r.createElementNS(j, "svg")),
!(function o(a) {
let s,
l,
c,
h,
p,
d,
u = {};
if (
r &&
1 === a.nodeType &&
-1 === er.unstyledElements.indexOf(a.nodeName)
) {
if (
((s = B.getComputedStyle(a, null)),
(l =
"svg" === a.nodeName
? {}
: B.getComputedStyle(a.parentNode, null)),
!i[a.nodeName])
) {
((e = r.getElementsByTagName("svg")[0]),
(c = r.createElementNS(a.namespaceURI, a.nodeName)),
e.appendChild(c));
let t = B.getComputedStyle(c, null),
n = {};
for (let e in t)
e.length < 1e3 &&
"string" == typeof t[e] &&
!/^\d+$/.test(e) &&
(n[e] = t[e]);
((i[a.nodeName] = n),
"text" === a.nodeName && delete i.text.fill,
e.removeChild(c));
}
for (let e in s)
(H || I || U || Object.hasOwnProperty.call(s, e)) &&
(function (e, o) {
if (((h = p = !1), n.length)) {
for (d = n.length; d-- && !p; ) p = n[d].test(o);
h = !p;
}
for (
"transform" === o && "none" === e && (h = !0), d = t.length;
d-- && !h;
) {
if (o.length > 1e3) throw Error("Input too long");
h = t[d].test(o) || "function" == typeof e;
}
!h &&
(l[o] !== e || "svg" === a.nodeName) &&
i[a.nodeName][o] !== e &&
(er.inlineToAttributes &&
-1 === er.inlineToAttributes.indexOf(o)
? (u[o] = e)
: e && a.setAttribute(er.hyphenate(o), e));
})(s[e], e);
if (
(W(a, u),
"svg" === a.nodeName && a.setAttribute("stroke-width", "1px"),
"text" === a.nodeName)
)
return;
[].forEach.call(a.children || a.childNodes, o);
}
})(this.chart.container.querySelector("svg")),
e.parentNode.removeChild(e),
o.parentNode.removeChild(o));
}
async localExport(e, t) {
let n = this.chart,
i,
o,
r = null,
a;
if (
(I &&
n.styledMode &&
!er.inlineAllowlist.length &&
er.inlineAllowlist.push(
/^blockSize/,
/^border/,
/^caretColor/,
/^color/,
/^columnRule/,
/^columnRuleColor/,
/^cssFloat/,
/^cursor/,
/^fill$/,
/^fillOpacity/,
/^font/,
/^inlineSize/,
/^length/,
/^lineHeight/,
/^opacity/,
/^outline/,
/^parentRule/,
/^rx$/,
/^ry$/,
/^stroke/,
/^textAlign/,
/^textAnchor/,
/^textDecoration/,
/^transform/,
/^vectorEffect/,
/^visibility/,
/^x$/,
/^y$/,
),
(I &&
("application/pdf" === e.type ||
(n.container.getElementsByTagName("image").length &&
"image/svg+xml" !== e.type))) ||
("application/pdf" === e.type &&
[].some.call(n.container.getElementsByTagName("image"), function (e) {
let t = e.getAttribute("href");
return "" !== t && "string" == typeof t && 0 !== t.indexOf("data:");
})))
)
return void (await this.fallbackToServer(
e,
Error("Image type not supported for this chart/browser."),
));
let s = G(n, "getSVG", (e) => {
((o = e.chartCopy.options),
(a =
((i = e.chartCopy.container.cloneNode(!0)) &&
i.getElementsByTagName("image")) ||
[]));
});
try {
let n;
for (let n of (this.getSVGForExport(e, t), a ? Array.from(a) : []))
if ((r = n.getAttributeNS("http://www.w3.org/1999/xlink", "href"))) {
er.objectURLRevoke = !1;
let t = await er.imageToDataURL(
r,
e?.scale || 1,
e?.type || "image/png",
);
n.setAttributeNS("http://www.w3.org/1999/xlink", "href", t);
} else n.parentNode.removeChild(n);
let s = i?.querySelector("svg");
s &&
!e.chartOptions?.chart?.style?.fontFamily &&
(await er.inlineFonts(s));
let l = ((n = i?.innerHTML), er.sanitizeSVG(n || "", o));
if (
l.indexOf("<foreignObject") > -1 &&
"image/svg+xml" !== e.type &&
(I || "application/pdf" === e.type)
)
throw Error("Image type not supported for charts with embedded HTML");
return (
await this.downloadSVG(l, K({ filename: this.getFilename() }, e)),
l
);
} catch (t) {
await this.fallbackToServer(e, t);
} finally {
s();
}
}
moveContainers(e) {
let t = this.chart,
{ scrollablePlotArea: n } = t;
(n ? [n.fixedDiv, n.scrollingContainer] : [t.container]).forEach(
function (t) {
e.appendChild(t);
},
);
}
print() {
let e = this.chart;
this.isPrinting ||
((er.printingChart = e),
U || this.beforePrint(),
setTimeout(() => {
(B.focus(),
B.print(),
U ||
setTimeout(() => {
e.exporting?.afterPrint();
}, 1e3));
}, 1));
}
render() {
let e = this,
{ chart: t, options: n } = e,
i = e?.isDirty || !e?.svgElements.length;
((e.buttonOffset = 0),
e.isDirty && e.destroy(),
i &&
!1 !== n.enabled &&
((e.events = []),
e.group ||
(e.group = t.renderer.g("exporting-group").attr({ zIndex: 3 }).add()),
Z(n?.buttons, function (t) {
e.addButton(t);
}),
(e.isDirty = !1)));
}
resolveCSSVariables() {
Array.from(this.chart.container.querySelectorAll("*")).forEach((e) => {
["color", "fill", "stop-color", "stroke"].forEach((t) => {
let n = e.getAttribute(t);
n?.includes("var(") &&
e.setAttribute(t, getComputedStyle(e).getPropertyValue(t));
let i = e.style?.[t];
i?.includes("var(") &&
(e.style[t] = getComputedStyle(e).getPropertyValue(t));
});
});
}
update(e, t) {
((this.isDirty = !0),
Y(!0, this.options, e),
Q(t, !0) && this.chart.redraw());
}
}
((er.inlineAllowlist = []),
(er.inlineDenylist = [
/-/,
/^(clipPath|cssText|d|height|width)$/,
/^font$/,
/[lL]ogical(Width|Height)$/,
/^parentRule$/,
/^(cssRules|ownerRules)$/,
/perspective/,
/TapHighlightColor/,
/^transition/,
/^length$/,
/^\d+$/,
]),
(er.inlineToAttributes = [
"fill",
"stroke",
"strokeLinecap",
"strokeLinejoin",
"strokeWidth",
"textAnchor",
"x",
"y",
]),
(er.loadEventDeferDelay = 150 * !!I),
(er.unstyledElements = ["clipPath", "defs", "desc"]),
(function (e) {
function t(e) {
let t = e.exporting;
t &&
(t.render(),
G(e, "redraw", function () {
this.exporting?.render();
}),
G(e, "destroy", function () {
this.exporting?.destroy();
}));
}
function n() {
let t = this;
t.options.exporting &&
((t.exporting = new e(t, t.options.exporting)),
d.compose(t).navigation.addUpdate((e, n) => {
t.exporting &&
((t.exporting.isDirty = !0),
Y(!0, t.options.navigation, e),
Q(n, !0) && t.redraw());
}));
}
function i({ alignTo: e, key: t, textPxLength: n }) {
let i = this.options.exporting,
{
align: o,
buttonSpacing: r = 0,
verticalAlign: a,
width: s = 0,
} = Y(
this.options.navigation?.buttonOptions,
i?.buttons?.contextButton,
),
l = e.width - n,
c = s + r;
(i?.enabled ?? !0) &&
"title" === t &&
"right" === o &&
"top" === a &&
l < 2 * c &&
(l < c
? (e.width -= c)
: this.title?.alignValue !== "left" && (e.x -= c - l / 2));
}
e.compose = function (o, r) {
(v.compose(r),
k.compose(o),
ee(D, "Exporting") &&
(K(c().prototype, {
exportChart: async function (e, t) {
await this.exporting?.exportChart(e, t);
},
getChartHTML: function (e) {
return this.exporting?.getChartHTML(e);
},
getFilename: function () {
return this.exporting?.getFilename();
},
getSVG: function (e) {
return this.exporting?.getSVG(e);
},
print: function () {
return this.exporting?.print();
},
}),
o.prototype.callbacks.push(t),
G(o, "afterInit", n),
G(o, "layOutTitle", i),
U &&
B.matchMedia("print").addListener(function (t) {
e.printingChart &&
(t.matches
? e.printingChart.exporting?.beforePrint()
: e.printingChart.exporting?.afterPrint());
}),
M(b)));
};
})(er || (er = {})));
let ea = er,
es = r();
((es.Exporting = ea),
(es.HttpUtilities = es.HttpUtilities || P),
(es.ajax = es.HttpUtilities.ajax),
(es.getJSON = es.HttpUtilities.getJSON),
(es.post = es.HttpUtilities.post),
ea.compose(es.Chart, es.Renderer));
let el = r();
export { el as default };