offices-viewer
Version:
## Current Renderable File Types
1,268 lines (1,266 loc) • 57.5 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/utils/pptx.ts
var pptx_exports = {};
__export(pptx_exports, {
base64ArrayBuffer: () => base64ArrayBuffer,
genGlobalCSS: () => genGlobalCSS,
getContentTypes: () => getContentTypes,
getSlideSize: () => getSlideSize,
loadTheme: () => loadTheme,
processMsgQueue: () => processMsgQueue,
processSingleSlide: () => processSingleSlide,
setThemeContent: () => setThemeContent
});
module.exports = __toCommonJS(pptx_exports);
var colz = __toESM(require("colz/dist/colz.cjs"));
var _order = 1;
var themeContent = null;
var styleTable = {};
var chartID = 0;
var MsgQueue = new Array();
function setThemeContent(data) {
themeContent = data;
}
function tXml(S) {
"use strict";
var openBracket = "<";
var openBracketCC = "<".charCodeAt(0);
var closeBracket = ">";
var closeBracketCC = ">".charCodeAt(0);
var minus = "-";
var minusCC = "-".charCodeAt(0);
var slash = "/";
var slashCC = "/".charCodeAt(0);
var exclamation = "!";
var exclamationCC = "!".charCodeAt(0);
var singleQuote = "'";
var singleQuoteCC = "'".charCodeAt(0);
var doubleQuote = '"';
var doubleQuoteCC = '"'.charCodeAt(0);
var questionMark = "?";
var questionMarkCC = "?".charCodeAt(0);
var nameSpacer = "\r\n >/= ";
var pos = 0;
function parseChildren() {
var children = [];
while (S[pos]) {
if (S.charCodeAt(pos) == openBracketCC) {
if (S.charCodeAt(pos + 1) === slashCC) {
pos = S.indexOf(closeBracket, pos);
return children;
} else if (S.charCodeAt(pos + 1) === exclamationCC) {
if (S.charCodeAt(pos + 2) == minusCC) {
while (!(S.charCodeAt(pos) === closeBracketCC && S.charCodeAt(pos - 1) == minusCC && S.charCodeAt(pos - 2) == minusCC && pos != -1)) {
pos = S.indexOf(closeBracket, pos + 1);
}
if (pos === -1) {
pos = S.length;
}
} else {
pos += 2;
for (; S.charCodeAt(pos) !== closeBracketCC; pos++) {
}
}
pos++;
continue;
} else if (S.charCodeAt(pos + 1) === questionMarkCC) {
pos = S.indexOf(closeBracket, pos);
pos++;
continue;
}
pos++;
var startNamePos = pos;
for (; nameSpacer.indexOf(S[pos]) === -1; pos++) {
}
var node_tagName = S.slice(startNamePos, pos);
var attrFound = false;
var node_attributes = {};
for (; S.charCodeAt(pos) !== closeBracketCC; pos++) {
var c = S.charCodeAt(pos);
if (c > 64 && c < 91 || c > 96 && c < 123) {
startNamePos = pos;
for (; nameSpacer.indexOf(S[pos]) === -1; pos++) {
}
var name = S.slice(startNamePos, pos);
var code = S.charCodeAt(pos);
while (code !== singleQuoteCC && code !== doubleQuoteCC) {
pos++;
code = S.charCodeAt(pos);
}
var startChar = S[pos];
var startStringPos = ++pos;
pos = S.indexOf(startChar, startStringPos);
var value = S.slice(startStringPos, pos);
if (!attrFound) {
node_attributes = {};
attrFound = true;
}
node_attributes[name] = value;
}
}
if (S.charCodeAt(pos - 1) !== slashCC) {
pos++;
var node_children = parseChildren();
}
children.push({
children: node_children,
tagName: node_tagName,
attrs: node_attributes
});
} else {
var startTextPos = pos;
pos = S.indexOf(openBracket, pos) - 1;
if (pos === -2) {
pos = S.length;
}
var text = S.slice(startTextPos, pos + 1);
if (text.trim().length > 0) {
children.push(text);
}
}
pos++;
}
return children;
}
_order = 1;
return simplefy(parseChildren());
}
function simplefy(children) {
var node = {};
if (children === void 0) {
return {};
}
if (children.length === 1 && typeof children[0] == "string") {
return children[0];
}
children.forEach(function(child) {
if (!node[child.tagName]) {
node[child.tagName] = [];
}
if (typeof child === "object") {
var kids = simplefy(child.children);
if (typeof kids === "object") {
if (child.attrs) {
kids.attrs = child.attrs;
}
if (kids["attrs"] === void 0) {
kids["attrs"] = { order: _order };
} else {
kids["attrs"]["order"] = _order;
}
}
_order++;
node[child.tagName].push(kids);
}
});
for (var i in node) {
if (node[i].length == 1) {
node[i] = node[i][0];
}
}
return node;
}
function indexNodes(content) {
var keys = Object.keys(content);
var spTreeNode = content[keys[0]]["p:cSld"]["p:spTree"];
var idTable = {};
var idxTable = {};
var typeTable = {};
for (var key in spTreeNode) {
if (key == "p:nvGrpSpPr" || key == "p:grpSpPr") {
continue;
}
var targetNode = spTreeNode[key];
if (targetNode.constructor === Array) {
for (var i = 0; i < targetNode.length; i++) {
var nvSpPrNode = targetNode[i]["p:nvSpPr"];
var id = getTextByPathList(nvSpPrNode, ["p:cNvPr", "attrs", "id"]);
var idx = getTextByPathList(nvSpPrNode, ["p:nvPr", "p:ph", "attrs", "idx"]);
var type = getTextByPathList(nvSpPrNode, ["p:nvPr", "p:ph", "attrs", "type"]);
if (id !== void 0) {
idTable[id] = targetNode[i];
}
if (idx !== void 0) {
idxTable[idx] = targetNode[i];
}
if (type !== void 0) {
typeTable[type] = targetNode[i];
}
}
} else {
var nvSpPrNode = targetNode["p:nvSpPr"];
var id = getTextByPathList(nvSpPrNode, ["p:cNvPr", "attrs", "id"]);
var idx = getTextByPathList(nvSpPrNode, ["p:nvPr", "p:ph", "attrs", "idx"]);
var type = getTextByPathList(nvSpPrNode, ["p:nvPr", "p:ph", "attrs", "type"]);
if (id !== void 0) {
idTable[id] = targetNode;
}
if (idx !== void 0) {
idxTable[idx] = targetNode;
}
if (type !== void 0) {
typeTable[type] = targetNode;
}
}
}
return { "idTable": idTable, "idxTable": idxTable, "typeTable": typeTable };
}
function base64ArrayBuffer(arrayBuffer) {
var base64 = "";
var encodings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var bytes = new Uint8Array(arrayBuffer);
var byteLength = bytes.byteLength;
var byteRemainder = byteLength % 3;
var mainLength = byteLength - byteRemainder;
var a, b, c, d;
var chunk;
for (var i = 0; i < mainLength; i = i + 3) {
chunk = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
a = (chunk & 16515072) >> 18;
b = (chunk & 258048) >> 12;
c = (chunk & 4032) >> 6;
d = chunk & 63;
base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
}
if (byteRemainder == 1) {
chunk = bytes[mainLength];
a = (chunk & 252) >> 2;
b = (chunk & 3) << 4;
base64 += encodings[a] + encodings[b] + "==";
} else if (byteRemainder == 2) {
chunk = bytes[mainLength] << 8 | bytes[mainLength + 1];
a = (chunk & 64512) >> 10;
b = (chunk & 1008) >> 4;
c = (chunk & 15) << 2;
base64 += encodings[a] + encodings[b] + encodings[c] + "=";
}
return base64;
}
function readXmlFile(zip, filename) {
return tXml(zip.file(filename).asText());
}
function getContentTypes(zip) {
var ContentTypesJson = readXmlFile(zip, "[Content_Types].xml");
var subObj = ContentTypesJson["Types"]["Override"];
var slidesLocArray = [];
var slideLayoutsLocArray = [];
for (var i = 0; i < subObj.length; i++) {
switch (subObj[i]["attrs"]["ContentType"]) {
case "application/vnd.openxmlformats-officedocument.presentationml.slide+xml":
slidesLocArray.push(subObj[i]["attrs"]["PartName"].substr(1));
break;
case "application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml":
slideLayoutsLocArray.push(subObj[i]["attrs"]["PartName"].substr(1));
break;
default:
}
}
return {
slides: slidesLocArray,
slideLayouts: slideLayoutsLocArray
};
}
function getSlideSize(zip) {
if (!zip.files["ppt/presentation.xml"]) {
return {
width: 960,
height: 720
};
}
var content = readXmlFile(zip, "ppt/presentation.xml");
var sldSzAttrs = content["p:presentation"]["p:sldSz"]["attrs"];
return {
width: parseInt(sldSzAttrs["cx"]) * 96 / 914400,
height: parseInt(sldSzAttrs["cy"]) * 96 / 914400
};
}
function loadTheme(zip) {
var preResContent = readXmlFile(zip, "ppt/_rels/presentation.xml.rels");
var relationshipArray = preResContent["Relationships"]["Relationship"];
var themeURI = void 0;
if (relationshipArray.constructor === Array) {
for (var i = 0; i < relationshipArray.length; i++) {
if (relationshipArray[i]["attrs"]["Type"] === "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme") {
themeURI = relationshipArray[i]["attrs"]["Target"];
break;
}
}
} else if (relationshipArray["attrs"]["Type"] === "http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme") {
themeURI = relationshipArray["attrs"]["Target"];
}
if (themeURI === void 0) {
throw Error("Can't open theme file.");
}
return readXmlFile(zip, "ppt/" + themeURI);
}
function processSingleSlide(zip, sldFileName, index, slideSize) {
var resName = sldFileName.replace("slides/slide", "slides/_rels/slide") + ".rels";
var resContent = readXmlFile(zip, resName);
var RelationshipArray = resContent["Relationships"]["Relationship"];
var layoutFilename = "";
var slideResObj = {};
if (RelationshipArray.constructor === Array) {
for (var i = 0; i < RelationshipArray.length; i++) {
switch (RelationshipArray[i]["attrs"]["Type"]) {
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout":
layoutFilename = RelationshipArray[i]["attrs"]["Target"].replace("../", "ppt/");
break;
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide":
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image":
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart":
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink":
default:
slideResObj[RelationshipArray[i]["attrs"]["Id"]] = {
"type": RelationshipArray[i]["attrs"]["Type"].replace("http://schemas.openxmlformats.org/officeDocument/2006/relationships/", ""),
"target": RelationshipArray[i]["attrs"]["Target"].replace("../", "ppt/")
};
}
}
} else {
layoutFilename = RelationshipArray["attrs"]["Target"].replace("../", "ppt/");
}
var slideLayoutContent = readXmlFile(zip, layoutFilename);
var slideLayoutTables = indexNodes(slideLayoutContent);
var slideLayoutResFilename = layoutFilename.replace("slideLayouts/slideLayout", "slideLayouts/_rels/slideLayout") + ".rels";
var slideLayoutResContent = readXmlFile(zip, slideLayoutResFilename);
RelationshipArray = slideLayoutResContent["Relationships"]["Relationship"];
var masterFilename = "";
if (RelationshipArray.constructor === Array) {
for (var i = 0; i < RelationshipArray.length; i++) {
switch (RelationshipArray[i]["attrs"]["Type"]) {
case "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster":
masterFilename = RelationshipArray[i]["attrs"]["Target"].replace("../", "ppt/");
break;
default:
}
}
} else {
masterFilename = RelationshipArray["attrs"]["Target"].replace("../", "ppt/");
}
var slideMasterContent = readXmlFile(zip, masterFilename);
var slideMasterTextStyles = getTextByPathList(slideMasterContent, ["p:sldMaster", "p:txStyles"]);
var slideMasterTables = indexNodes(slideMasterContent);
var slideContent = readXmlFile(zip, sldFileName);
var nodes = slideContent["p:sld"]["p:cSld"]["p:spTree"];
var warpObj = {
"zip": zip,
"slideLayoutTables": slideLayoutTables,
"slideMasterTables": slideMasterTables,
"slideResObj": slideResObj,
"slideMasterTextStyles": slideMasterTextStyles
};
var bgColor = getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent);
var result = "<section style='width:" + slideSize.width + "px; height:" + slideSize.height + "px; background-color: #" + bgColor + "'>";
for (var nodeKey in nodes) {
if (nodes[nodeKey].constructor === Array) {
for (var i = 0; i < nodes[nodeKey].length; i++) {
result += processNodesInSlide(nodeKey, nodes[nodeKey][i], warpObj);
}
} else {
result += processNodesInSlide(nodeKey, nodes[nodeKey], warpObj);
}
}
return result + "</section>";
}
function getTextByPathList(node, path) {
if (path.constructor !== Array) {
throw Error("Error of path type! path is not array.");
}
if (node === void 0) {
return void 0;
}
var l = path.length;
for (var i = 0; i < l; i++) {
node = node[path[i]];
if (node === void 0) {
return void 0;
}
}
return node;
}
function getSolidFill(solidFill) {
if (solidFill === void 0) {
return void 0;
}
var color = "FFF";
if (solidFill["a:srgbClr"] !== void 0) {
color = getTextByPathList(solidFill["a:srgbClr"], ["attrs", "val"]);
} else if (solidFill["a:schemeClr"] !== void 0) {
var schemeClr = "a:" + getTextByPathList(solidFill["a:schemeClr"], ["attrs", "val"]);
color = getSchemeColorFromTheme(schemeClr);
}
return color;
}
function processNodesInSlide(nodeKey, nodeValue, warpObj) {
var result = "";
switch (nodeKey) {
case "p:sp":
result = processSpNode(nodeValue, warpObj);
break;
case "p:cxnSp":
result = processCxnSpNode(nodeValue, warpObj);
break;
case "p:pic":
result = processPicNode(nodeValue, warpObj);
break;
case "p:graphicFrame":
result = processGraphicFrameNode(nodeValue, warpObj);
break;
case "p:grpSp":
result = processGroupSpNode(nodeValue, warpObj);
break;
default:
}
return result;
}
function processSpNode(node, warpObj) {
var id = node["p:nvSpPr"]["p:cNvPr"]["attrs"]["id"];
var name = node["p:nvSpPr"]["p:cNvPr"]["attrs"]["name"];
var idx = node["p:nvSpPr"]["p:nvPr"]["p:ph"] === void 0 ? void 0 : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["idx"];
var type = node["p:nvSpPr"]["p:nvPr"]["p:ph"] === void 0 ? void 0 : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["type"];
var order = node["attrs"]["order"];
var slideLayoutSpNode = void 0;
var slideMasterSpNode = void 0;
if (type !== void 0) {
if (idx !== void 0) {
slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type];
slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type];
} else {
slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type];
slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type];
}
} else {
if (idx !== void 0) {
slideLayoutSpNode = warpObj["slideLayoutTables"]["idxTable"][idx];
slideMasterSpNode = warpObj["slideMasterTables"]["idxTable"][idx];
} else {
}
}
if (type === void 0) {
type = getTextByPathList(slideLayoutSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
if (type === void 0) {
type = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]);
}
}
return genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj);
}
function processCxnSpNode(node, warpObj) {
var id = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["id"];
var name = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["name"];
var order = node["attrs"]["order"];
return genShape(node, void 0, void 0, id, name, void 0, void 0, order, warpObj);
}
function genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj) {
var xfrmList = ["p:spPr", "a:xfrm"];
var slideXfrmNode = getTextByPathList(node, xfrmList);
var slideLayoutXfrmNode = getTextByPathList(slideLayoutSpNode, xfrmList);
var slideMasterXfrmNode = getTextByPathList(slideMasterSpNode, xfrmList);
var result = "";
var shapType = getTextByPathList(node, ["p:spPr", "a:prstGeom", "attrs", "prst"]);
var isFlipV = false;
if (getTextByPathList(slideXfrmNode, ["attrs", "flipV"]) === "1" || getTextByPathList(slideXfrmNode, ["attrs", "flipH"]) === "1") {
isFlipV = true;
}
if (shapType !== void 0) {
var off = getTextByPathList(slideXfrmNode, ["a:off", "attrs"]);
var x = parseInt(off["x"]) * 96 / 914400;
var y = parseInt(off["y"]) * 96 / 914400;
var ext = getTextByPathList(slideXfrmNode, ["a:ext", "attrs"]);
var w = parseInt(ext["cx"]) * 96 / 914400;
var h = parseInt(ext["cy"]) * 96 / 914400;
result += "<svg class='drawing' _id='" + id + "' _idx='" + idx + "' _type='" + type + "' _name='" + name + "' style='" + getPosition(slideXfrmNode, void 0, void 0) + getSize(slideXfrmNode, void 0, void 0) + " z-index: " + order + ";'>";
var fillColor = getShapeFill(node, true);
var border = getBorder(node, true);
var headEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:headEnd", "attrs"]);
var tailEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:tailEnd", "attrs"]);
if (headEndNodeAttrs !== void 0 && (headEndNodeAttrs["type"] === "triangle" || headEndNodeAttrs["type"] === "arrow") || tailEndNodeAttrs !== void 0 && (tailEndNodeAttrs["type"] === "triangle" || tailEndNodeAttrs["type"] === "arrow")) {
var triangleMarker = '<defs><marker id="markerTriangle" viewBox="0 0 10 10" refX="1" refY="5" markerWidth="5" markerHeight="5" orient="auto-start-reverse" markerUnits="strokeWidth"><path d="M 0 0 L 10 5 L 0 10 z" /></marker></defs>';
result += triangleMarker;
}
switch (shapType) {
case "accentBorderCallout1":
case "accentBorderCallout2":
case "accentBorderCallout3":
case "accentCallout1":
case "accentCallout2":
case "accentCallout3":
case "actionButtonBackPrevious":
case "actionButtonBeginning":
case "actionButtonBlank":
case "actionButtonDocument":
case "actionButtonEnd":
case "actionButtonForwardNext":
case "actionButtonHelp":
case "actionButtonHome":
case "actionButtonInformation":
case "actionButtonMovie":
case "actionButtonReturn":
case "actionButtonSound":
case "arc":
case "bevel":
case "blockArc":
case "borderCallout1":
case "borderCallout2":
case "borderCallout3":
case "bracePair":
case "bracketPair":
case "callout1":
case "callout2":
case "callout3":
case "can":
case "chartPlus":
case "chartStar":
case "chartX":
case "chevron":
case "chord":
case "cloud":
case "cloudCallout":
case "corner":
case "cornerTabs":
case "cube":
case "decagon":
case "diagStripe":
case "diamond":
case "dodecagon":
case "donut":
case "doubleWave":
case "downArrowCallout":
case "ellipseRibbon":
case "ellipseRibbon2":
case "flowChartAlternateProcess":
case "flowChartCollate":
case "flowChartConnector":
case "flowChartDecision":
case "flowChartDelay":
case "flowChartDisplay":
case "flowChartDocument":
case "flowChartExtract":
case "flowChartInputOutput":
case "flowChartInternalStorage":
case "flowChartMagneticDisk":
case "flowChartMagneticDrum":
case "flowChartMagneticTape":
case "flowChartManualInput":
case "flowChartManualOperation":
case "flowChartMerge":
case "flowChartMultidocument":
case "flowChartOfflineStorage":
case "flowChartOffpageConnector":
case "flowChartOnlineStorage":
case "flowChartOr":
case "flowChartPredefinedProcess":
case "flowChartPreparation":
case "flowChartProcess":
case "flowChartPunchedCard":
case "flowChartPunchedTape":
case "flowChartSort":
case "flowChartSummingJunction":
case "flowChartTerminator":
case "folderCorner":
case "frame":
case "funnel":
case "gear6":
case "gear9":
case "halfFrame":
case "heart":
case "heptagon":
case "hexagon":
case "homePlate":
case "horizontalScroll":
case "irregularSeal1":
case "irregularSeal2":
case "leftArrow":
case "leftArrowCallout":
case "leftBrace":
case "leftBracket":
case "leftRightArrowCallout":
case "leftRightRibbon":
case "irregularSeal1":
case "lightningBolt":
case "lineInv":
case "mathDivide":
case "mathEqual":
case "mathMinus":
case "mathMultiply":
case "mathNotEqual":
case "mathPlus":
case "moon":
case "nonIsoscelesTrapezoid":
case "noSmoking":
case "octagon":
case "parallelogram":
case "pentagon":
case "pie":
case "pieWedge":
case "plaque":
case "plaqueTabs":
case "plus":
case "quadArrowCallout":
case "rect":
case "ribbon":
case "ribbon2":
case "rightArrowCallout":
case "rightBrace":
case "rightBracket":
case "round1Rect":
case "round2DiagRect":
case "round2SameRect":
case "rtTriangle":
case "smileyFace":
case "snip1Rect":
case "snip2DiagRect":
case "snip2SameRect":
case "snipRoundRect":
case "squareTabs":
case "star10":
case "star12":
case "star16":
case "star24":
case "star32":
case "star4":
case "star5":
case "star6":
case "star7":
case "star8":
case "sun":
case "teardrop":
case "trapezoid":
case "upArrowCallout":
case "upDownArrowCallout":
case "verticalScroll":
case "wave":
case "wedgeEllipseCallout":
case "wedgeRectCallout":
case "wedgeRoundRectCallout":
case "rect":
result += "<rect x='0' y='0' width='" + w + "' height='" + h + "' fill='" + fillColor + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' />";
break;
case "ellipse":
result += "<ellipse cx='" + w / 2 + "' cy='" + h / 2 + "' rx='" + w / 2 + "' ry='" + h / 2 + "' fill='" + fillColor + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' />";
break;
case "roundRect":
result += "<rect x='0' y='0' width='" + w + "' height='" + h + "' rx='7' ry='7' fill='" + fillColor + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' />";
break;
case "bentConnector2":
var d = "";
if (isFlipV) {
d = "M 0 " + w + " L " + h + " " + w + " L " + h + " 0";
} else {
d = "M " + w + " 0 L " + w + " " + h + " L 0 " + h;
}
result += "<path d='" + d + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' fill='none' ";
if (headEndNodeAttrs !== void 0 && (headEndNodeAttrs["type"] === "triangle" || headEndNodeAttrs["type"] === "arrow")) {
result += "marker-start='url(#markerTriangle)' ";
}
if (tailEndNodeAttrs !== void 0 && (tailEndNodeAttrs["type"] === "triangle" || tailEndNodeAttrs["type"] === "arrow")) {
result += "marker-end='url(#markerTriangle)' ";
}
result += "/>";
break;
case "line":
case "straightConnector1":
case "bentConnector3":
case "bentConnector4":
case "bentConnector5":
case "curvedConnector2":
case "curvedConnector3":
case "curvedConnector4":
case "curvedConnector5":
if (isFlipV) {
result += "<line x1='" + w + "' y1='0' x2='0' y2='" + h + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' ";
} else {
result += "<line x1='0' y1='0' x2='" + w + "' y2='" + h + "' stroke='" + border.color + "' stroke-width='" + border.width + "' stroke-dasharray='" + border.strokeDasharray + "' ";
}
if (headEndNodeAttrs !== void 0 && (headEndNodeAttrs["type"] === "triangle" || headEndNodeAttrs["type"] === "arrow")) {
result += "marker-start='url(#markerTriangle)' ";
}
if (tailEndNodeAttrs !== void 0 && (tailEndNodeAttrs["type"] === "triangle" || tailEndNodeAttrs["type"] === "arrow")) {
result += "marker-end='url(#markerTriangle)' ";
}
result += "/>";
break;
case "rightArrow":
result += '<defs><marker id="markerTriangle" viewBox="0 0 10 10" refX="1" refY="5" markerWidth="2.5" markerHeight="2.5" orient="auto-start-reverse" markerUnits="strokeWidth"><path d="M 0 0 L 10 5 L 0 10 z" /></marker></defs>';
result += "<line x1='0' y1='" + h / 2 + "' x2='" + (w - 15) + "' y2='" + h / 2 + "' stroke='" + border.color + "' stroke-width='" + h / 2 + "' stroke-dasharray='" + border.strokeDasharray + "' ";
result += "marker-end='url(#markerTriangle)' />";
break;
case "downArrow":
result += '<defs><marker id="markerTriangle" viewBox="0 0 10 10" refX="1" refY="5" markerWidth="2.5" markerHeight="2.5" orient="auto-start-reverse" markerUnits="strokeWidth"><path d="M 0 0 L 10 5 L 0 10 z" /></marker></defs>';
result += "<line x1='" + w / 2 + "' y1='0' x2='" + w / 2 + "' y2='" + (h - 15) + "' stroke='" + border.color + "' stroke-width='" + w / 2 + "' stroke-dasharray='" + border.strokeDasharray + "' ";
result += "marker-end='url(#markerTriangle)' />";
break;
case "bentArrow":
case "bentUpArrow":
case "stripedRightArrow":
case "quadArrow":
case "circularArrow":
case "swooshArrow":
case "leftRightArrow":
case "leftRightUpArrow":
case "leftUpArrow":
case "leftCircularArrow":
case "notchedRightArrow":
case "curvedDownArrow":
case "curvedLeftArrow":
case "curvedRightArrow":
case "curvedUpArrow":
case "upDownArrow":
case "upArrow":
case "uturnArrow":
case "leftRightCircularArrow":
break;
case "triangle":
break;
case void 0:
default:
console.warn("Undefine shape type.");
}
result += "</svg>";
result += "<div class='block content " + getVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode, type) + "' _id='" + id + "' _idx='" + idx + "' _type='" + type + "' _name='" + name + "' style='" + getPosition(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode) + getSize(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode) + " z-index: " + order + ";'>";
if (node["p:txBody"] !== void 0) {
result += genTextBody(node["p:txBody"], slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
result += "</div>";
} else {
result += "<div class='block content " + getVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode, type) + "' _id='" + id + "' _idx='" + idx + "' _type='" + type + "' _name='" + name + "' style='" + getPosition(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode) + getSize(slideXfrmNode, slideLayoutXfrmNode, slideMasterXfrmNode) + getBorder(node, false) + getShapeFill(node, false) + " z-index: " + order + ";'>";
if (node["p:txBody"] !== void 0) {
result += genTextBody(node["p:txBody"], slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
result += "</div>";
}
return result;
}
function getPosition(slideSpNode, slideLayoutSpNode, slideMasterSpNode) {
var off = void 0;
var x = -1, y = -1;
if (slideSpNode !== void 0) {
off = slideSpNode["a:off"]["attrs"];
} else if (slideLayoutSpNode !== void 0) {
off = slideLayoutSpNode["a:off"]["attrs"];
} else if (slideMasterSpNode !== void 0) {
off = slideMasterSpNode["a:off"]["attrs"];
}
if (off === void 0) {
return "";
} else {
x = parseInt(off["x"]) * 96 / 914400;
y = parseInt(off["y"]) * 96 / 914400;
return isNaN(x) || isNaN(y) ? "" : "top:" + y + "px; left:" + x + "px;";
}
}
function getSize(slideSpNode, slideLayoutSpNode, slideMasterSpNode) {
var ext = void 0;
var w = -1, h = -1;
if (slideSpNode !== void 0) {
ext = slideSpNode["a:ext"]["attrs"];
} else if (slideLayoutSpNode !== void 0) {
ext = slideLayoutSpNode["a:ext"]["attrs"];
} else if (slideMasterSpNode !== void 0) {
ext = slideMasterSpNode["a:ext"]["attrs"];
}
if (ext === void 0) {
return "";
} else {
w = parseInt(ext["cx"]) * 96 / 914400;
h = parseInt(ext["cy"]) * 96 / 914400;
return isNaN(w) || isNaN(h) ? "" : "width:" + w + "px; height:" + h + "px;";
}
}
function getHorizontalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) {
var algn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]);
if (algn === void 0) {
algn = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]);
if (algn === void 0) {
algn = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]);
if (algn === void 0) {
switch (type) {
case "title":
case "subTitle":
case "ctrTitle":
algn = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "attrs", "alng"]);
break;
default:
algn = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "attrs", "alng"]);
}
}
}
}
if (algn === void 0) {
if (type == "title" || type == "subTitle" || type == "ctrTitle") {
return "h-mid";
} else if (type == "sldNum") {
return "h-right";
}
}
return algn === "ctr" ? "h-mid" : algn === "r" ? "h-right" : "h-left";
}
function getVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) {
var anchor = getTextByPathList(node, ["p:txBody", "a:bodyPr", "attrs", "anchor"]);
if (anchor === void 0) {
anchor = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]);
if (anchor === void 0) {
anchor = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]);
}
}
return anchor === "ctr" ? "v-mid" : anchor === "b" ? "v-down" : "v-up";
}
function getFontType(node, type, slideMasterTextStyles) {
var typeface = getTextByPathList(node, ["a:rPr", "a:latin", "attrs", "typeface"]);
if (typeface === void 0) {
var fontSchemeNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:fontScheme"]);
if (type == "title" || type == "subTitle" || type == "ctrTitle") {
typeface = getTextByPathList(fontSchemeNode, ["a:majorFont", "a:latin", "attrs", "typeface"]);
} else if (type == "body") {
typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]);
} else {
typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]);
}
}
return typeface === void 0 ? "inherit" : typeface;
}
function getFontColor(node, type, slideMasterTextStyles) {
var color = getTextByPathStr(node, "a:rPr a:solidFill a:srgbClr attrs val");
return color === void 0 ? "#000" : "#" + color;
}
function getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) {
var fontSize = void 0;
if (node["a:rPr"] !== void 0) {
fontSize = parseInt(node["a:rPr"]["attrs"]["sz"]) / 100;
}
if (isNaN(fontSize) || fontSize === void 0) {
var sz = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:lstStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]);
fontSize = parseInt(sz) / 100;
}
if (isNaN(fontSize) || fontSize === void 0) {
if (type == "title" || type == "subTitle" || type == "ctrTitle") {
var sz = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]);
} else if (type == "body") {
var sz = getTextByPathList(slideMasterTextStyles, ["p:bodyStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]);
} else if (type == "dt" || type == "sldNum") {
var sz = "1200";
} else if (type === void 0) {
var sz = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]);
}
fontSize = parseInt(sz) / 100;
}
var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]);
if (baseline !== void 0 && !isNaN(fontSize)) {
fontSize -= 10;
}
return isNaN(fontSize) ? "inherit" : fontSize + "pt";
}
function getFontBold(node, type, slideMasterTextStyles) {
return node["a:rPr"] !== void 0 && node["a:rPr"]["attrs"]["b"] === "1" ? "bold" : "initial";
}
function getFontItalic(node, type, slideMasterTextStyles) {
return node["a:rPr"] !== void 0 && node["a:rPr"]["attrs"]["i"] === "1" ? "italic" : "normal";
}
function getFontDecoration(node, type, slideMasterTextStyles) {
return node["a:rPr"] !== void 0 && node["a:rPr"]["attrs"]["u"] === "sng" ? "underline" : "initial";
}
function getTextVerticalAlign(node, type, slideMasterTextStyles) {
var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]);
return baseline === void 0 ? "baseline" : parseInt(baseline) / 1e3 + "%";
}
function getBorder(node, isSvgMode) {
var cssText = "border: ";
var lineNode = node["p:spPr"]["a:ln"];
var borderWidth = parseInt(getTextByPathList(lineNode, ["attrs", "w"])) / 12700;
if (isNaN(borderWidth) || borderWidth < 1) {
cssText += "1pt ";
} else {
cssText += borderWidth + "pt ";
}
var borderColor = getTextByPathList(lineNode, ["a:solidFill", "a:srgbClr", "attrs", "val"]);
if (borderColor === void 0) {
var schemeClrNode = getTextByPathList(lineNode, ["a:solidFill", "a:schemeClr"]);
var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]);
var borderColor = getSchemeColorFromTheme(schemeClr);
}
if (borderColor === void 0) {
var schemeClrNode = getTextByPathList(node, ["p:style", "a:lnRef", "a:schemeClr"]);
var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]);
var borderColor = getSchemeColorFromTheme(schemeClr);
if (borderColor !== void 0) {
var shade = getTextByPathList(schemeClrNode, ["a:shade", "attrs", "val"]);
if (shade !== void 0) {
shade = parseInt(shade) / 1e5;
var color = new colz.Color("#" + borderColor);
color.setLum(color.hsl.l * shade);
borderColor = color.hex.replace("#", "");
}
}
}
if (borderColor === void 0) {
if (isSvgMode) {
borderColor = "none";
} else {
borderColor = "#000";
}
} else {
borderColor = "#" + borderColor;
}
cssText += " " + borderColor + " ";
var borderType = getTextByPathList(lineNode, ["a:prstDash", "attrs", "val"]);
var strokeDasharray = "0";
switch (borderType) {
case "solid":
cssText += "solid";
strokeDasharray = "0";
break;
case "dash":
cssText += "dashed";
strokeDasharray = "5";
break;
case "dashDot":
cssText += "dashed";
strokeDasharray = "5, 5, 1, 5";
break;
case "dot":
cssText += "dotted";
strokeDasharray = "1, 5";
break;
case "lgDash":
cssText += "dashed";
strokeDasharray = "10, 5";
break;
case "lgDashDotDot":
cssText += "dashed";
strokeDasharray = "10, 5, 1, 5, 1, 5";
break;
case "sysDash":
cssText += "dashed";
strokeDasharray = "5, 2";
break;
case "sysDashDot":
cssText += "dashed";
strokeDasharray = "5, 2, 1, 5";
break;
case "sysDashDotDot":
cssText += "dashed";
strokeDasharray = "5, 2, 1, 5, 1, 5";
break;
case "sysDot":
cssText += "dotted";
strokeDasharray = "2, 5";
break;
case void 0:
default:
}
if (isSvgMode) {
return { "color": borderColor, "width": borderWidth, "type": borderType, "strokeDasharray": strokeDasharray };
} else {
return cssText + ";";
}
}
function getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent) {
var bgColor = getSolidFill(getTextByPathList(slideContent, ["p:sld", "p:cSld", "p:bg", "p:bgPr", "a:solidFill"]));
if (bgColor === void 0) {
bgColor = getSolidFill(getTextByPathList(slideLayoutContent, ["p:sldLayout", "p:cSld", "p:bg", "p:bgPr", "a:solidFill"]));
if (bgColor === void 0) {
bgColor = getSolidFill(getTextByPathList(slideMasterContent, ["p:sldMaster", "p:cSld", "p:bg", "p:bgPr", "a:solidFill"]));
if (bgColor === void 0) {
bgColor = "FFF";
}
}
}
return bgColor;
}
function getSchemeColorFromTheme(schemeClr) {
switch (schemeClr) {
case "a:tx1":
schemeClr = "a:dk1";
break;
case "a:tx2":
schemeClr = "a:dk2";
break;
case "a:bg1":
schemeClr = "a:lt1";
break;
case "a:bg2":
schemeClr = "a:lt2";
break;
}
var refNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:clrScheme", schemeClr]);
var color = getTextByPathList(refNode, ["a:srgbClr", "attrs", "val"]);
if (color === void 0) {
color = getTextByPathList(refNode, ["a:sysClr", "attrs", "lastClr"]);
}
return color;
}
function getShapeFill(node, isSvgMode) {
if (getTextByPathList(node, ["p:spPr", "a:noFill"]) !== void 0) {
return isSvgMode ? "none" : "background-color: initial;";
}
var fillColor = void 0;
if (fillColor === void 0) {
fillColor = getTextByPathList(node, ["p:spPr", "a:solidFill", "a:srgbClr", "attrs", "val"]);
}
if (fillColor === void 0) {
var schemeClr = "a:" + getTextByPathList(node, ["p:spPr", "a:solidFill", "a:schemeClr", "attrs", "val"]);
fillColor = getSchemeColorFromTheme(schemeClr);
}
if (fillColor === void 0) {
var schemeClr = "a:" + getTextByPathList(node, ["p:style", "a:fillRef", "a:schemeClr", "attrs", "val"]);
fillColor = getSchemeColorFromTheme(schemeClr);
}
if (fillColor !== void 0) {
fillColor = "#" + fillColor;
var lumMod = parseInt(getTextByPathList(node, ["p:spPr", "a:solidFill", "a:schemeClr", "a:lumMod", "attrs", "val"])) / 1e5;
var lumOff = parseInt(getTextByPathList(node, ["p:spPr", "a:solidFill", "a:schemeClr", "a:lumOff", "attrs", "val"])) / 1e5;
if (isNaN(lumMod)) {
lumMod = 1;
}
if (isNaN(lumOff)) {
lumOff = 0;
}
fillColor = applyLumModify(fillColor, lumMod, lumOff);
if (isSvgMode) {
return fillColor;
} else {
return "background-color: " + fillColor + ";";
}
} else {
if (isSvgMode) {
return "none";
} else {
return "background-color: " + fillColor + ";";
}
}
}
function genTextBody(textBodyNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj) {
var text = "";
var slideMasterTextStyles = warpObj["slideMasterTextStyles"];
if (textBodyNode === void 0) {
return text;
}
if (textBodyNode["a:p"].constructor === Array) {
for (var i = 0; i < textBodyNode["a:p"].length; i++) {
var pNode = textBodyNode["a:p"][i];
var rNode = pNode["a:r"];
text += "<div class='" + getHorizontalAlign(pNode, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) + "'>";
text += genBuChar(pNode);
if (rNode === void 0) {
text += genSpanElement(pNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj);
} else if (rNode.constructor === Array) {
for (var j = 0; j < rNode.length; j++) {
text += genSpanElement(rNode[j], slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
} else {
text += genSpanElement(rNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
text += "</div>";
}
} else {
var pNode = textBodyNode["a:p"];
var rNode = pNode["a:r"];
text += "<div class='" + getHorizontalAlign(pNode, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) + "'>";
text += genBuChar(pNode);
if (rNode === void 0) {
text += genSpanElement(pNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj);
} else if (rNode.constructor === Array) {
for (var j = 0; j < rNode.length; j++) {
text += genSpanElement(rNode[j], slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
} else {
text += genSpanElement(rNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj);
}
text += "</div>";
}
return text;
}
function genBuChar(node) {
var pPrNode = node["a:pPr"];
var lvl = parseInt(getTextByPathList(pPrNode, ["attrs", "lvl"]));
if (isNaN(lvl)) {
lvl = 0;
}
var buChar = getTextByPathList(pPrNode, ["a:buChar", "attrs", "char"]);
if (buChar !== void 0) {
var buFontAttrs = getTextByPathList(pPrNode, ["a:buFont", "attrs"]);
if (buFontAttrs !== void 0) {
var marginLeft = parseInt(getTextByPathList(pPrNode, ["attrs", "marL"])) * 96 / 914400;
var marginRight = parseInt(buFontAttrs["pitchFamily"]);
if (isNaN(marginLeft)) {
marginLeft = 328600 * 96 / 914400;
}
if (isNaN(marginRight)) {
marginRight = 0;
}
var typeface = buFontAttrs["typeface"];
return "<span style='font-family: " + typeface + "; margin-left: " + marginLeft * lvl + "px; margin-right: " + marginRight + "px; font-size: 20pt'>" + buChar + "</span>";
} else {
marginLeft = 328600 * 96 / 914400 * lvl;
return "<span style='margin-left: " + marginLeft + "px;'>" + buChar + "</span>";
}
} else {
return "<span style='margin-left: " + 328600 * 96 / 914400 * lvl + "px; margin-right: 0px;'></span>";
}
return "";
}
function genSpanElement(node, slideLayoutSpNode, slideMasterSpNode, type, warpObj) {
var slideMasterTextStyles = warpObj["slideMasterTextStyles"];
var text = node["a:t"];
if (typeof text !== "string") {
text = getTextByPathList(node, ["a:fld", "a:t"]);
if (typeof text !== "string") {
text = " ";
}
}
var styleText = "color:" + getFontColor(node, type, slideMasterTextStyles) + ";font-size:" + getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) + ";font-family:" + getFontType(node, type, slideMasterTextStyles) + ";font-weight:" + getFontBold(node, type, slideMasterTextStyles) + ";font-style:" + getFontItalic(node, type, slideMasterTextStyles) + ";text-decoration:" + getFontDecoration(node, type, slideMasterTextStyles) + ";vertical-align:" + getTextVerticalAlign(node, type, slideMasterTextStyles) + ";";
var cssName = "";
if (styleText in styleTable) {
cssName = styleTable[styleText]["name"];
} else {
cssName = "_css_" + (Object.keys(styleTable).length + 1);
styleTable[styleText] = {
"name": cssName,
"text": styleText
};
}
var linkID = getTextByPathList(node, ["a:rPr", "a:hlinkClick", "attrs", "r:id"]);
if (linkID !== void 0) {
var linkURL = warpObj["slideResObj"][linkID]["target"];
return "<span class='text-block " + cssName + "'><a href='" + linkURL + "' target='_blank'>" + text.replace(/\s/i, " ") + "</a></span>";
} else {
return "<span class='text-block " + cssName + "'>" + text.replace(/\s/i, " ") + "</span>";
}
}
function getTextByPathStr(node, pathStr) {
return getTextByPathList(node, pathStr.trim().split(/\s+/));
}
function processPicNode(node, warpObj) {
var order = node["attrs"]["order"];
var rid = node["p:blipFill"]["a:blip"]["attrs"]["r:embed"];
var imgName = warpObj["slideResObj"][rid]["target"];
var imgFileExt = extractFileExtension(imgName).toLowerCase();
var zip = warpObj["zip"];
var imgArrayBuffer = zip.file(imgName).asArrayBuffer();
var mimeType = "";
var xfrmNode = node["p:spPr"]["a:xfrm"];
switch (imgFileExt) {
case "jpg":
case "jpeg":
mimeType = "image/jpeg";
break;
case "png":
mimeType = "image/png";
break;
case "gif":
mimeType = "image/gif";
break;
case "emf":
mimeType = "image/x-emf";
break;
case "wmf":
mimeType = "image/x-wmf";
break;
default:
mimeType = "image/*";
}
return "<div class='block content' style='" + getPosition(xfrmNode, void 0, void 0) + getSize(xfrmNode, void 0, void 0) + " z-index: " + order + `;'><img src="data:` + mimeType + ";base64," + base64ArrayBuffer(imgArrayBuffer) + `" style='width: 100%; height: 100%'/></div>`;
}
function extractFileExtension(filename) {
return filename.substr((~-filename.lastIndexOf(".") >>> 0) + 2);
}
function applyLumModify(rgbStr, factor, offset) {
var color = new colz.Color(rgbStr);
color.setLum(color.hsl.l * (1 + offset));
return color.rgb.toString();
}
function processGroupSpNode(node, warpObj) {
var factor = 96 / 914400;
var xfrmNode = node["p:grpSpPr"]["a:xfrm"];
var x = parseInt(xfrmNode["a:off"]["attrs"]["x"]) * factor;
var y = parseInt(xfrmNode["a:off"]["attrs"]["y"]) * factor;
var chx = parseInt(xfrmNode["a:chOff"]["attrs"]["x"]) * factor;
var chy = parseInt(xfrmNode["a:chOff"]["attrs"]["y"]) * factor;
var cx = parseInt(xfrmNode["a:ext"]["attrs"]["cx"]) * factor;
var cy = parseInt(xfrmNode["a:ext"]["attrs"]["cy"]) * factor;
var chcx = parseInt(xfrmNode["a:chExt"]["attrs"]["cx"]) * factor;
var chcy = parseInt(xfrmNode["a:chExt"]["attrs"]["cy"]) * factor;
var order = node["attrs"]["order"];
var result = "<div class='block group' style='z-index: " + order + "; top: " + (y - chy) + "px; left: " + (x - chx) + "px; width: " + (cx - chcx) + "px; height: " + (cy - chcy) + "px;'>";
for (var nodeKey in node) {
if (node[nodeKey].constructor === Array) {
for (var i = 0; i < node[nodeKey].length; i++) {
result += processNodesInSlide(nodeKey, node[nodeKey][i], warpObj);
}
} else {
result += processNodesInSlide(nodeKey, node[nodeKey], warpObj);
}
}
result += "</div>";
return result;
}
function processGraphicFrameNode(node, warpObj) {
var result = "";
var graphicTypeUri = getTextByPathList(node, ["a:graphic", "a:graphicData", "attrs", "uri"]);
switch (graphicTypeUri) {
case "http://schemas.openxmlformats.org/drawingml/2006/table":
result = genTable(node, warpObj);
break;
case "http://schemas.openxmlformats.org/drawingml/2006/chart":
result = genChart(node, warpObj);
break;
case "http://schemas.openxmlformats.org/drawingml/2006/diagram":
result = genDiagram(node, warpObj);
break;
default:
}
return result;
}
function genTable(node, warpObj) {
var order = node["attrs"]["order"];
var tableNode = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl"]);
var xfrmNode = getTextByPathList(node, ["p:xfrm"]);
var tableHtml = "<table style='" + getPosition(xfrmNode, void 0, void 0) + getSize(xfrmNode, void 0, void 0) + " z-index: " + order + ";'>";
var trNodes = tableNode["a:tr"];
if (trNodes.constructor === Array) {
for (var i = 0; i < trNodes.length; i++) {
tableHtml += "<tr>";
var tcNodes = trNodes[i]["a:tc"];
if (tcNodes.constructor === Array) {
for (var j = 0; j < tcNodes.length; j++) {
var text = genTextBody(tcNodes[j]["a:txBody"], void 0, void 0, void 0, warpObj);
var rowSpan = getTextByPathList(tcNodes[j], ["attrs", "rowSpan"]);
var colSpan = getTextByPathList(tcNodes[j], ["attrs", "gridSpan"]);
var vMerge = getTextByPathList(tcNodes[j], ["attrs", "vMerge"]);
var hMerge = getTextByPathList(tcNodes[j], ["attrs", "hMerge"]);
if (rowSpan !== void 0) {
tableHtml += "<td rowspan='" + parseInt(rowSpan) + "'>" + text + "</td>";
} else if (colSpan !== void 0) {
tableHtml += "<td colspan='" + parseInt(colSpan) + "'>" + text + "</td>";
} else if (vMerge === void 0 && hMerge === void 0) {
tableHtml += "<td>" + text + "</td>";
}
}
} else {
var text = genTextBody(tcNodes["a:txBody"]);
tableHtml += "<td>" + text + "</td>";