UNPKG

pptx-automizer

Version:

A template based pptx generator

166 lines 8.98 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Diagram = void 0; const file_helper_1 = require("../helper/file-helper"); const xml_helper_1 = require("../helper/xml-helper"); const shape_1 = require("../classes/shape"); const constants_1 = require("../constants/constants"); class Diagram extends shape_1.Shape { constructor(shape, targetType) { super(shape, targetType); this.createdRids = {}; this.relRootTag = constants_1.TargetByRelIdMap.diagram.relRootTag; this.relAttribute = constants_1.TargetByRelIdMap.diagram.relAttribute; this.relParent = (element) => element.parentNode.parentNode.parentNode; this.relTypeData = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramData'; this.relTypeColors = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramColors'; this.relTypeLayout = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramLayout'; this.relTypeQuickStyle = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/diagramQuickStyle'; this.relTypeDrawing = 'http://schemas.microsoft.com/office/2007/relationships/diagramDrawing'; } modify(targetTemplate, targetSlideNumber) { return __awaiter(this, void 0, void 0, function* () { yield this.prepare(targetTemplate, targetSlideNumber); yield this.clone(); yield this.replaceIntoSlideTree(); yield this.updateRelIds(); return this; }); } append(targetTemplate, targetSlideNumber) { return __awaiter(this, void 0, void 0, function* () { yield this.prepare(targetTemplate, targetSlideNumber); yield this.clone(); yield this.appendToSlideTree(); yield this.updateRelIds(); return this; }); } remove(targetTemplate, targetSlideNumber) { return __awaiter(this, void 0, void 0, function* () { yield this.prepare(targetTemplate, targetSlideNumber); yield this.removeFromSlideTree(); return this; }); } modifyOnAddedSlide(targetTemplate, targetSlideNumber) { return __awaiter(this, void 0, void 0, function* () { yield this.prepare(targetTemplate, targetSlideNumber); yield this.updateRelIds(); return this; }); } prepare(targetTemplate, targetSlideNumber) { return __awaiter(this, void 0, void 0, function* () { yield this.setTarget(targetTemplate, targetSlideNumber); this.targetNumber = this.targetTemplate.incrementCounter('diagrams'); yield this.copyFiles(); yield this.appendTypes(); yield this.appendToSlideRels(this.relTypeData, `../diagrams/data${this.targetNumber}.xml`); yield this.appendToSlideRels(this.relTypeColors, `../diagrams/colors${this.targetNumber}.xml`); yield this.appendToSlideRels(this.relTypeLayout, `../diagrams/layout${this.targetNumber}.xml`); yield this.appendToSlideRels(this.relTypeQuickStyle, `../diagrams/quickStyle${this.targetNumber}.xml`); // drawing xml will be copied, but it has no explicit relation attribute in slide.xml yield this.appendToSlideRels(this.relTypeDrawing, `../diagrams/drawing${this.targetNumber}.xml`); }); } clone() { return __awaiter(this, void 0, void 0, function* () { yield this.setTargetElement(); this.applyCallbacks(this.callbacks, this.targetElement); }); } updateRelIds() { return __awaiter(this, void 0, void 0, function* () { yield this.updateElementsRelId((targetElement) => { targetElement.setAttribute('r:dm', this.createdRids[this.relTypeData]); targetElement.setAttribute('r:lo', this.createdRids[this.relTypeLayout]); targetElement.setAttribute('r:qs', this.createdRids[this.relTypeQuickStyle]); targetElement.setAttribute('r:cs', this.createdRids[this.relTypeColors]); }); }); } copyFiles() { return __awaiter(this, void 0, void 0, function* () { yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/diagrams/data${this.sourceNumber}.xml`, this.targetArchive, `ppt/diagrams/data${this.targetNumber}.xml`); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/diagrams/colors${this.sourceNumber}.xml`, this.targetArchive, `ppt/diagrams/colors${this.targetNumber}.xml`); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/diagrams/drawing${this.sourceNumber}.xml`, this.targetArchive, `ppt/diagrams/drawing${this.targetNumber}.xml`); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/diagrams/layout${this.sourceNumber}.xml`, this.targetArchive, `ppt/diagrams/layout${this.targetNumber}.xml`); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/diagrams/quickStyle${this.sourceNumber}.xml`, this.targetArchive, `ppt/diagrams/quickStyle${this.targetNumber}.xml`); }); } appendTypes() { return __awaiter(this, void 0, void 0, function* () { yield this.appendDataContentType(); yield this.appendColorsToContentType(); yield this.appendLyoutToContentType(); yield this.appendQuickStyleToContentType(); yield this.appendDrawingToContentType(); }); } appendToSlideRels(type, target) { return __awaiter(this, void 0, void 0, function* () { this.createdRid = yield xml_helper_1.XmlHelper.getNextRelId(this.targetArchive, this.targetSlideRelFile); this.createdRids[type] = this.createdRid; const attributes = { Id: this.createdRid, Type: type, Target: target, }; return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createRelationshipChild(this.targetArchive, this.targetSlideRelFile, attributes)); }); } appendDataContentType() { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(this.targetArchive, { PartName: `/ppt/diagrams/data${this.targetNumber}.xml`, ContentType: 'application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml', })); } appendColorsToContentType() { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(this.targetArchive, { PartName: `/ppt/diagrams/colors${this.targetNumber}.xml`, ContentType: `application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml`, })); } appendLyoutToContentType() { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(this.targetArchive, { PartName: `/ppt/diagrams/layout${this.targetNumber}.xml`, ContentType: `application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml`, })); } appendQuickStyleToContentType() { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(this.targetArchive, { PartName: `/ppt/diagrams/quickStyle${this.targetNumber}.xml`, ContentType: `application/vnd.openxmlformats-officedocument.drawingml.diagramQuickStyle+xml`, })); } appendDrawingToContentType() { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(this.targetArchive, { PartName: `/ppt/diagrams/drawing${this.targetNumber}.xml`, ContentType: `application/vnd.openxmlformats-officedocument.drawingml.diagramDrawing+xml`, })); } static getAllOnSlide(archive, relsPath) { return __awaiter(this, void 0, void 0, function* () { return yield xml_helper_1.XmlHelper.getRelationshipTargetsByPrefix(archive, relsPath, [ '../diagrams/data', ]); }); } } exports.Diagram = Diagram; //# sourceMappingURL=diagram.js.map