Skip to main content
Glama
master.js•6.44 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Master = void 0; const file_helper_1 = require("../helper/file-helper"); const xml_helper_1 = require("../helper/xml-helper"); const xml_relationship_helper_1 = require("../helper/xml-relationship-helper"); const has_shapes_1 = __importDefault(require("./has-shapes")); const layout_1 = require("./layout"); class Master extends has_shapes_1.default { constructor(params) { super(params); this.targetType = 'slideMaster'; // ToDo analogue for slideMasters // this.sourceNumber = this.getSlideNumber( // params.template, // params.sourceIdentifier, // ); this.sourceNumber = Number(params.sourceIdentifier); this.key = Master.getKey(this.sourceNumber, params.template.name); this.sourcePath = `ppt/slideMasters/slideMaster${this.sourceNumber}.xml`; this.relsPath = `ppt/slideMasters/_rels/slideMaster${this.sourceNumber}.xml.rels`; } static getKey(slideLayoutNumber, templateName) { return slideLayoutNumber + '@' + templateName; } /** * Appends slide * @internal * @param targetTemplate * @returns append */ append(targetTemplate) { return __awaiter(this, void 0, void 0, function* () { this.targetTemplate = targetTemplate; this.targetArchive = yield targetTemplate.archive; this.targetNumber = targetTemplate.incrementCounter('masters'); this.targetPath = `ppt/slideMasters/slideMaster${this.targetNumber}.xml`; this.targetRelsPath = `ppt/slideMasters/_rels/slideMaster${this.targetNumber}.xml.rels`; this.sourceArchive = yield this.sourceTemplate.archive; console.log('Importing slideMaster ' + this.targetNumber); yield this.copySlideMasterFiles(); yield this.copyRelatedLayouts(); yield this.copyRelatedContent(); yield this.addToPresentation(); yield this.copyThemeFiles(); if (this.importElements.length) { yield this.importedSelectedElements(); } yield this.applyModifications(); yield this.applyRelModifications(); const info = this.targetTemplate.automizer.params.showIntegrityInfo; const assert = this.targetTemplate.automizer.params.showIntegrityInfo; yield this.checkIntegrity(info, assert); yield this.cleanSlide(this.targetPath); }); } copyRelatedLayouts() { return __awaiter(this, void 0, void 0, function* () { const targets = (yield new xml_relationship_helper_1.XmlRelationshipHelper().initialize(this.targetArchive, `slideMaster${this.targetNumber}.xml.rels`, `ppt/slideMasters/_rels`, '../slideLayouts/slideLayout')); for (const target of targets) { const layout = new layout_1.Layout({ presentation: this.targetTemplate.automizer, template: this.sourceTemplate, sourceIdentifier: target.number, targetMaster: this.targetNumber, }); yield this.targetTemplate.appendLayout(layout); const layoutName = yield layout.getName(); this.targetTemplate.mapContents('slideLayout', this.sourceTemplate.name, target.number, layout.targetNumber, layoutName); target.updateTargetIndex(layout.targetNumber); } return targets; }); } copyThemeFiles() { return __awaiter(this, void 0, void 0, function* () { const targets = yield xml_helper_1.XmlHelper.getRelationshipTargetsByPrefix(this.targetArchive, `ppt/slideMasters/_rels/slideMaster${this.targetNumber}.xml.rels`, '../theme/theme'); if (!targets.length) { return; } const themeTarget = targets[0]; const themeSourceId = themeTarget.number; const themeTargetId = this.targetTemplate.incrementCounter('themes'); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/theme/theme${themeSourceId}.xml`, this.targetArchive, `ppt/theme/theme${themeTargetId}.xml`); yield this.appendThemeToContentType(this.targetArchive, themeTargetId); yield xml_helper_1.XmlHelper.replaceAttribute(this.targetArchive, `ppt/slideMasters/_rels/slideMaster${this.targetNumber}.xml.rels`, 'Relationship', 'Id', themeTarget.rId, `../theme/theme${themeTargetId}.xml`, 'Target'); }); } /** * Copy slide master files * @internal */ copySlideMasterFiles() { return __awaiter(this, void 0, void 0, function* () { yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/slideMasters/slideMaster${this.sourceNumber}.xml`, this.targetArchive, `ppt/slideMasters/slideMaster${this.targetNumber}.xml`); yield file_helper_1.FileHelper.zipCopy(this.sourceArchive, `ppt/slideMasters/_rels/slideMaster${this.sourceNumber}.xml.rels`, this.targetArchive, `ppt/slideMasters/_rels/slideMaster${this.targetNumber}.xml.rels`); }); } appendThemeToContentType(rootArchive, themeCount) { return xml_helper_1.XmlHelper.append(xml_helper_1.XmlHelper.createContentTypeChild(rootArchive, { PartName: `/ppt/theme/theme${themeCount}.xml`, ContentType: `application/vnd.openxmlformats-officedocument.theme+xml`, })); } } exports.Master = Master; //# sourceMappingURL=master.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