Skip to content

Commit 3b0e5b0

Browse files
committed
Fix the layoit support
Now both the 2nd and 3rd office standard layout are working.
1 parent be7a7ef commit 3b0e5b0

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

lib/genpptx.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1603,13 +1603,21 @@ function makePptx ( genobj, new_type, options, gen_private, type_info ) {
16031603
var pageNumber = gen_private.pages.length;
16041604
var slideObj = { show: true }; // The slide object that the user will use.
16051605

1606+
if ( !slideOptions || typeof slideOptions !== 'object' ) {
1607+
slideOptions = {};
1608+
} // Endif.
1609+
1610+
if ( !slideOptions.basedLayout ) {
1611+
slideOptions.basedLayout = 1;
1612+
} // Endif.
1613+
16061614
gen_private.pages[pageNumber] = {};
16071615
gen_private.pages[pageNumber].slide = slideObj;
16081616
gen_private.pages[pageNumber].data = [];
16091617
gen_private.pages[pageNumber].rels = [
16101618
{
16111619
type: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout',
1612-
target: '../slideLayouts/slideLayout1.xml',
1620+
target: '../slideLayouts/slideLayout' + slideOptions.basedLayout + '.xml',
16131621
clear: 'data'
16141622
}
16151623
];
@@ -1631,6 +1639,7 @@ function makePptx ( genobj, new_type, options, gen_private, type_info ) {
16311639
);
16321640

16331641
slideObj.getPageNumber = function () { return pageNumber; };
1642+
slideObj.getRelFile = function () { return gen_private.pages[pageNumber].rels; };
16341643

16351644
slideObj.name = 'Slide ' + (pageNumber + 1);
16361645

lib/pptxplg-layouts.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,13 +175,16 @@ MakeLayoutPlugin.prototype.extendPptxSlideApi = function ( docData ) {
175175
// Support for the standard office layout1:
176176
if ( slideOptions.useLayout === 'title' || slideOptions.useLayout === 'obj' || slideOptions.useLayout === 'secHead' ) {
177177
var resCb = this.pluginsman.genobj.cbMakePptxLayout1;
178+
var layoutFileNum = 1;
178179
if ( slideOptions.useLayout === 'obj' ) {
180+
layoutFileNum = 2;
179181
resCb = function ( data ) {
180182
return funcThis.cbMakePptxLayout2 ( data );
181183
};
182184
} // Endif.
183185

184186
if ( slideOptions.useLayout === 'secHead' ) {
187+
layoutFileNum = 3;
185188
resCb = function ( data ) {
186189
return funcThis.cbMakePptxLayout3 ( data );
187190
};
@@ -197,9 +200,13 @@ MakeLayoutPlugin.prototype.extendPptxSlideApi = function ( docData ) {
197200
isRealSlide: true,
198201
isFooter: false,
199202
isSlideNum: true,
200-
isDate: true
203+
isDate: true,
204+
layoutFileNum: layoutFileNum
201205
};
202206

207+
// Set the real layout for this slide:
208+
newSlide.getRelFile ()[0].target = '../slideLayouts/slideLayout' + layoutFileNum + '.xml';
209+
203210
newSlide.setTitle = function ( titleStr ) {
204211
if ( typeof titleStr === 'string' ) {
205212
newSlide.useLayout.ph1 = [
@@ -291,7 +298,7 @@ MakeLayoutPlugin.prototype.beforeGen = function ( docObj ) {
291298
slideLayouts.push (
292299
{
293300
execCb: function ( data ) { return funcThis['cbMakePptxLayout' + curId] ( data ); },
294-
cbData: {}
301+
cbData: { layoutRealOfficeId: curId }
295302
}
296303
);
297304
}
@@ -315,6 +322,7 @@ MakeLayoutPlugin.prototype.beforeGen = function ( docObj ) {
315322
});
316323

317324
// Add this slide layout resource + the rels resource of it:
325+
slideLayouts[item].cbData.layoutNum = curId + 2;
318326
funcThis.ogPluginsApi.intAddAnyResourceToParse ( funcThis.mainPath + '\\slideLayouts\\slideLayout' + (curId + 2) + '.xml', 'buffer', slideLayouts[item].cbData, slideLayouts[item].execCb, false );
319327
funcThis.ogPluginsApi.intAddAnyResourceToParse ( funcThis.mainPath + '\\slideLayouts\\_rels\\slideLayout' + (curId + 2) + '.xml.rels', 'buffer', [
320328
{
@@ -387,7 +395,13 @@ MakeLayoutPlugin.prototype.cbMakePptxLayout2 = function ( data ) {
387395
curElNum++;
388396
} // Endif.
389397

390-
return this.msPluginsApi.cbMakeMsOfficeBasicXml ( data ) + '<p:sld' + (data.isRealSlide ? '' : 'Layout') + ' xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"' + (data.isRealSlide ? '' : ' type="secHead" preserve="1"') + '><p:cSld name="Section Header"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="4406900"/><a:ext cx="7772400" cy="1362075"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="t"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="4000" b="1" cap="all"/></a:lvl1pPr></a:lstStyle>' + ph1 + '</p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="2906713"/><a:ext cx="7772400" cy="1500187"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2000"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1800"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1600"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle>' + ph2 + '</p:txBody></p:sp>' + footFull + '</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld' + (data.isRealSlide ? '' : 'Layout') + '>';
398+
return this.msPluginsApi.cbMakeMsOfficeBasicXml ( data ) + '<p:sld' + (data.isRealSlide ? '' : 'Layout') + ' xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"' + (data.isRealSlide ? '' : ' type="obj" preserve="1"') + '><p:cSld name="Title and Content"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/>' + ph1 + '</p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Content Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph idx="1"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/>'+ ph2 + '</p:txBody></p:sp>' + footFull + '</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld' + (data.isRealSlide ? '' : 'Layout') + '>';
399+
// <p:sp><p:nvSpPr><p:cNvPr id="4" name="Date Placeholder 3"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="dt" sz="half" idx="10"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{1D8BD707-D9CF-40AE-B4C6-C98DA3205C09}" type="datetimeFigureOut"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>9/18/2006</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp>
400+
// <p:sp><p:nvSpPr><p:cNvPr id="5" name="Footer Placeholder 4"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="ftr" sz="quarter" idx="11"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="6" name="Slide Number Placeholder 5"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="sldNum" sz="quarter" idx="12"/></p:nvPr></p:nvSpPr><p:spPr/><p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:fld id="{B6F15528-21DE-4FAA-801E-634DDDAF4B2B}" type="slidenum"><a:rPr lang="en-US" smtClean="0"/><a:pPr/><a:t>‹#›</a:t></a:fld><a:endParaRPr lang="en-US"/></a:p></p:txBody></p:sp>
401+
402+
// return this.msPluginsApi.cbMakeMsOfficeBasicXml ( data ) + '<p:sld' + (data.isRealSlide ? '' : 'Layout') + ' xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"' + (data.isRealSlide ? '' : ' type="secHead" preserve="1"') + '><p:cSld name="Section Header"><p:spTree><p:nvGrpSpPr><p:cNvPr id="1" name=""/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/><a:chOff x="0" y="0"/><a:chExt cx="0" cy="0"/></a:xfrm></p:grpSpPr><p:sp><p:nvSpPr><p:cNvPr id="2" name="Title 1"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="title"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="4406900"/><a:ext cx="7772400" cy="1362075"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="t"/><a:lstStyle><a:lvl1pPr algn="l"><a:defRPr sz="4000" b="1" cap="all"/></a:lvl1pPr></a:lstStyle>' + ph1 +
403+
// '</p:txBody></p:sp><p:sp><p:nvSpPr><p:cNvPr id="3" name="Text Placeholder 2"/><p:cNvSpPr><a:spLocks noGrp="1"/></p:cNvSpPr><p:nvPr><p:ph type="body" idx="1"/></p:nvPr></p:nvSpPr><p:spPr><a:xfrm><a:off x="722313" y="2906713"/><a:ext cx="7772400" cy="1500187"/></a:xfrm></p:spPr><p:txBody><a:bodyPr anchor="b"/><a:lstStyle><a:lvl1pPr marL="0" indent="0"><a:buNone/><a:defRPr sz="2000"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl1pPr><a:lvl2pPr marL="457200" indent="0"><a:buNone/><a:defRPr sz="1800"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl2pPr><a:lvl3pPr marL="914400" indent="0"><a:buNone/><a:defRPr sz="1600"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl3pPr><a:lvl4pPr marL="1371600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl4pPr><a:lvl5pPr marL="1828800" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl5pPr><a:lvl6pPr marL="2286000" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl6pPr><a:lvl7pPr marL="2743200" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl7pPr><a:lvl8pPr marL="3200400" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl8pPr><a:lvl9pPr marL="3657600" indent="0"><a:buNone/><a:defRPr sz="1400"><a:solidFill><a:schemeClr val="tx1"><a:tint val="75000"/></a:schemeClr></a:solidFill></a:defRPr></a:lvl9pPr></a:lstStyle>'
404+
// + ph2 + '</p:txBody></p:sp>' + footFull + '</p:spTree></p:cSld><p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr></p:sld' + (data.isRealSlide ? '' : 'Layout') + '>';
391405
};
392406

393407
/**

test/test-pptx-layouts.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,9 @@ describe("PPTX Layouts plugin", function () {
5757
slide.setTitle ( 'The title' );
5858
slide.setSubTitle ( 'Another text' );
5959

60+
// Add a speaker note:
61+
slide.setSpeakerNote ( 'This is a speaker note! Using the new setSpeakerNote feature of the slide API.' );
62+
6063
//
6164
// Slide #3:
6265
//

0 commit comments

Comments
 (0)