pptx-automizer
Version:
A template based pptx generator
166 lines • 8.98 kB
JavaScript
"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