Skip to main content
Glama
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

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/guangxiangdebizi/PPT-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server