git.iko.soy/typeable/pandoc
on master help sign in
PowerPoint writer: Always open up in slide view

When editing a template/reference-doc, the user might be in Master view, but when producing a slide show, it is assumed that slide view will be desired. This removes the "lastView" attr from the viewProps.xml slide so that the presentation will always open up in slide view. Note this requires creating a new "ppt/viewProps.xml" instead of just moving over the old one from the viewProps file. Since this produces a slightly different order of xml files in the content manifest, the golden files will have to be rebuilt.

commit891ea3112b04409532ac7b7741bb63d0a7ce77d4 authorJesse Rosenthal <jrosenthal@jhu.edu> dateThu 4 Apr 2019, 10:36 (8 years ago) parent312b4b6
1 file changed+26−8
src/Text/Pandoc/Writers/Powerpoint/Output.hs+26−8
src/Text/Pandoc/Writers/Powerpoint/Output.hs+26−8
@@ -166,7 +166,6 @@ alwaysInheritedPatterns =
166166 , "ppt/theme/theme1.xml"
167167 , "ppt/theme/_rels/theme1.xml.rels"
168168 , "ppt/presProps.xml"
169− , "ppt/viewProps.xml"
170169 , "ppt/tableStyles.xml"
171170 , "ppt/media/image*"
172171 ]
@@ -213,7 +212,6 @@ requiredFiles = [ "docProps/app.xml"
213212 , "ppt/slideMasters/slideMaster1.xml"
214213 , "ppt/slideMasters/_rels/slideMaster1.xml.rels"
215214 , "ppt/theme/theme1.xml"
216− , "ppt/viewProps.xml"
217215 , "ppt/tableStyles.xml"
218216 ]
219217
@@ -231,6 +229,8 @@ presentationToArchiveP p@(Presentation docProps slides) = do
231229 )
232230
233231 newArch' <- foldM copyFileToArchive emptyArchive filePaths
232+ -- we make a modified ppt/viewProps.xml out of the presentation viewProps
233+ viewPropsEntry <- makeViewPropsEntry
234234 -- we make a docProps/core.xml entry out of the presentation docprops
235235 docPropsEntry <- docPropsToEntry docProps
236236 -- we make a docProps/custom.xml entry out of the custom properties
@@ -258,7 +258,7 @@ presentationToArchiveP p@(Presentation docProps slides) = do
258258 spkNotesRelEntries ++
259259 mediaEntries ++
260260 [contentTypesEntry, docPropsEntry, docCustomPropsEntry, relsEntry,
261− presEntry, presRelsEntry]
261+ presEntry, presRelsEntry, viewPropsEntry]
262262
263263makeSlideIdMap :: Presentation -> M.Map SlideId Int
264264makeSlideIdMap (Presentation _ slides) =
@@ -1701,6 +1701,23 @@ docCustomPropsToEntry :: PandocMonad m => DocProps -> P m Entry
17011701docCustomPropsToEntry docProps = docCustomPropsElement docProps >>=
17021702 elemToEntry "docProps/custom.xml"
17031703
1704+-- We read from the template, but we remove the lastView, so it always
1705+-- opens on slide view. Templates will sometimes be open in master
1706+-- view for editing.
1707+viewPropsElement :: PandocMonad m => P m Element
1708+viewPropsElement = do
1709+ refArchive <- asks envRefArchive
1710+ distArchive <- asks envDistArchive
1711+ viewPrElement <- parseXml refArchive distArchive "ppt/viewProps.xml"
1712+ -- remove "lastView" if it exists:
1713+ let notLastView :: Text.XML.Light.Attr -> Bool
1714+ notLastView attr = (qName $ attrKey attr) /= "lastView"
1715+ return $
1716+ viewPrElement {elAttribs = filter notLastView (elAttribs viewPrElement)}
1717+
1718+makeViewPropsEntry :: PandocMonad m => P m Entry
1719+makeViewPropsEntry = viewPropsElement >>= elemToEntry "ppt/viewProps.xml"
1720+
17041721defaultContentTypeToElem :: DefaultContentType -> Element
17051722defaultContentTypeToElem dct =
17061723 mknode "Default"
@@ -1787,9 +1804,11 @@ presentationToContentTypes p@(Presentation _ slides) = do
17871804 (mapMaybe mediaFileContentType $ mediaFps)
17881805
17891806 inheritedOverrides = mapMaybe pathToOverride filePaths
1790− docPropsOverride = mapMaybe pathToOverride ["docProps/core.xml"]
1791− docCustomPropsOverride = mapMaybe pathToOverride ["docProps/custom.xml"]
1792− presOverride = mapMaybe pathToOverride ["ppt/presentation.xml"]
1807+ createdOverrides = mapMaybe pathToOverride [ "docProps/core.xml"
1808+ , "docProps/custom.xml"
1809+ , "ppt/presentation.xml"
1810+ , "ppt/viewProps.xml"
1811+ ]
17931812 relativePaths <- mapM slideToFilePath slides
17941813 let slideOverrides = mapMaybe
17951814 (\fp -> pathToOverride $ "ppt/slides/" ++ fp)
@@ -1797,8 +1816,7 @@ presentationToContentTypes p@(Presentation _ slides) = do
17971816 speakerNotesOverrides <- (mapMaybe pathToOverride) <$> getSpeakerNotesFilePaths
17981817 return $ ContentTypes
17991818 (defaults ++ mediaDefaults)
1800− (inheritedOverrides ++ docPropsOverride ++ docCustomPropsOverride ++
1801− presOverride ++ slideOverrides ++ speakerNotesOverrides)
1819+ (inheritedOverrides ++ createdOverrides ++ slideOverrides ++ speakerNotesOverrides)
18021820
18031821presML :: String
18041822presML = "application/vnd.openxmlformats-officedocument.presentationml"