UNPKG

offices-viewer

Version:

## Current Renderable File Types

1,268 lines (1,266 loc) 57.5 kB
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 = "&nbsp;"; } } 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, "&nbsp;") + "</a></span>"; } else { return "<span class='text-block " + cssName + "'>" + text.replace(/\s/i, "&nbsp;") + "</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>";