shape.jsā¢6.89 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.Shape = void 0;
const xml_helper_1 = require("../helper/xml-helper");
const general_helper_1 = require("../helper/general-helper");
const content_type_map_1 = require("../enums/content-type-map");
class Shape {
constructor(shape, targetType) {
this.mode = shape.mode;
this.name = shape.name;
this.targetType = targetType;
this.sourceArchive = shape.sourceArchive;
this.sourceSlideNumber = shape.sourceSlideNumber;
this.sourceSlideFile = `ppt/slides/slide${this.sourceSlideNumber}.xml`;
this.sourceElement = shape.sourceElement;
this.hasCreationId = shape.hasCreationId;
this.callbacks = general_helper_1.GeneralHelper.arrayify(shape.callback);
this.contentTypeMap = content_type_map_1.ContentTypeMap;
if (shape.target) {
this.sourceNumber = shape.target.number;
this.sourceRid = shape.target.rId;
this.subtype = shape.target.subtype;
this.target = shape.target;
}
}
setTarget(targetTemplate, targetSlideNumber) {
return __awaiter(this, void 0, void 0, function* () {
const targetType = this.targetType;
this.targetTemplate = targetTemplate;
this.targetArchive = yield this.targetTemplate.archive;
this.targetSlideNumber = targetSlideNumber;
this.targetSlideFile = `ppt/${targetType}s/${targetType}${this.targetSlideNumber}.xml`;
this.targetSlideRelFile = `ppt/${targetType}s/_rels/${targetType}${this.targetSlideNumber}.xml.rels`;
});
}
setTargetElement() {
return __awaiter(this, void 0, void 0, function* () {
this.targetElement = this.sourceElement.cloneNode(true);
});
}
appendToSlideTree() {
return __awaiter(this, void 0, void 0, function* () {
const targetSlideXml = yield xml_helper_1.XmlHelper.getXmlFromArchive(this.targetArchive, this.targetSlideFile);
targetSlideXml
.getElementsByTagName('p:spTree')[0]
.appendChild(this.targetElement);
xml_helper_1.XmlHelper.writeXmlToArchive(this.targetArchive, this.targetSlideFile, targetSlideXml);
});
}
replaceIntoSlideTree() {
return __awaiter(this, void 0, void 0, function* () {
yield this.modifySlideTree(true);
});
}
removeFromSlideTree() {
return __awaiter(this, void 0, void 0, function* () {
yield this.modifySlideTree(false);
});
}
modifySlideTree(insertBefore) {
return __awaiter(this, void 0, void 0, function* () {
const archive = this.targetArchive;
const slideFile = this.targetSlideFile;
const targetSlideXml = yield xml_helper_1.XmlHelper.getXmlFromArchive(archive, slideFile);
const findMethod = this.hasCreationId ? 'findByCreationId' : 'findByName';
const sourceElementOnTargetSlide = yield xml_helper_1.XmlHelper[findMethod](targetSlideXml, this.name);
if (!(sourceElementOnTargetSlide === null || sourceElementOnTargetSlide === void 0 ? void 0 : sourceElementOnTargetSlide.parentNode)) {
console.error(`Can't modify slide tree for ${this.name}`);
return;
}
if (insertBefore === true) {
sourceElementOnTargetSlide.parentNode.insertBefore(this.targetElement, sourceElementOnTargetSlide);
}
sourceElementOnTargetSlide.parentNode.removeChild(sourceElementOnTargetSlide);
xml_helper_1.XmlHelper.writeXmlToArchive(archive, slideFile, targetSlideXml);
});
}
updateElementsRelId() {
return __awaiter(this, void 0, void 0, function* () {
const targetSlideXml = yield xml_helper_1.XmlHelper.getXmlFromArchive(this.targetArchive, this.targetSlideFile);
const targetElements = yield this.getElementsByRid(targetSlideXml, this.sourceRid);
targetElements.forEach((targetElement) => {
this.relParent(targetElement)
.getElementsByTagName(this.relRootTag)[0]
.setAttribute(this.relAttribute, this.createdRid);
});
xml_helper_1.XmlHelper.writeXmlToArchive(this.targetArchive, this.targetSlideFile, targetSlideXml);
});
}
/*
* This will find all elements with a matching rId on a
* <p:cSld>, including related images at <p:bg> and <p:spTree>.
*/
getElementsByRid(slideXml, rId) {
return __awaiter(this, void 0, void 0, function* () {
const sourceList = slideXml
.getElementsByTagName('p:cSld')[0]
.getElementsByTagName(this.relRootTag);
const sourceElements = xml_helper_1.XmlHelper.findByAttributeValue(sourceList, this.relAttribute, rId);
return sourceElements;
});
}
updateTargetElementRelId() {
return __awaiter(this, void 0, void 0, function* () {
this.targetElement
.getElementsByTagName(this.relRootTag)[0]
.setAttribute(this.relAttribute, this.createdRid);
});
}
applyCallbacks(callbacks, element, relation) {
callbacks.forEach((callback) => {
if (typeof callback === 'function') {
try {
callback(element, relation);
}
catch (e) {
console.warn(e);
}
}
});
}
applyChartCallbacks(callbacks, element, chart, workbook) {
callbacks.forEach((callback) => {
if (typeof callback === 'function') {
try {
callback(element, chart, workbook);
}
catch (e) {
console.warn(e);
}
}
});
}
appendImageExtensionToContentType(extension) {
return xml_helper_1.XmlHelper.appendImageExtensionToContentType(this.targetArchive, extension);
}
}
exports.Shape = Shape;
//# sourceMappingURL=shape.js.map