Changes for page Export To Markdown

Last modified by Tobias Wintrich on 2026/03/27 13:39

From version 7.1
edited by Tobias Wintrich
on 2026/03/27 13:39
Change comment: There is no comment for this version
To version 3.1
edited by René Vögeli
on 2026/03/25 10:32
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.twintrich
1 +XWiki.rvoegeli
Content
... ... @@ -1,66 +1,20 @@
1 1  {{groovy}}
2 -import org.xwiki.model.reference.EntityReferenceSerializer
3 -import java.io.File
2 +import org.xwiki.environment.*
3 +import org.xwiki.model.reference.*
4 4  
5 -if (request.get('confirm') == '1') {
6 -
7 - // Zielverzeichnis
8 - def exportDir = new File("/usr/local/xwiki/data/md-export")
9 - exportDir.mkdirs()
10 -
11 - // Serializer für Ordnerstruktur
12 - def pathSerializer = services.component.getInstance(
13 - EntityReferenceSerializer.TYPE_STRING, "fspath"
14 - )
15 -
16 - // Query (einzeilig!)
17 - def query = "select doc.fullName from Document doc " +
18 - "where (doc.space like 'HowTos' or doc.space like 'HowTos.%') " +
19 - "and doc.hidden = false"
20 -
21 - def results = services.query.xwql(query).execute()
22 -
23 - for (fullName in results) {
24 -
25 - println("* Exporting " + fullName)
26 -
27 - def doc = xwiki.getDocument(fullName)
28 -
29 - if (doc.isHidden()) {
30 - continue
31 - }
32 -
33 - // Markdown erzeugen
34 - def markdown = services.rendering.render(doc.getXDOM(), "markdown/1.2")
35 -
36 - // Fix für XWiki Image Syntax ![[file|text]]
37 - markdown = markdown.replaceAll(
38 - /!\[\[([^|\]]+)\|([^\]]+)\]\]/,
39 - '![\$2](\$1)'
40 - )
41 -
42 - // Dateipfad erzeugen
43 - def relativePath = pathSerializer.serialize(doc.documentReference)
44 - def outputFile = new File(exportDir, relativePath + ".md")
45 -
5 +if (request.confirm == '1') {
6 + services.query.xwql("select distinct doc.fullName from Document doc where doc.space like 'HowTos' or doc.space like 'HowTos.%'").execute().each() {
7 + print "* Converting ${it} to MD..."
8 + def itemDoc = xwiki.getDocument(it)
9 + def newContent = services.rendering.render(itemDoc.getXDOM(), 'markdown/1.2')
10 + def tmpDir = new File(services.component.getInstance(Environment.class).temporaryDirectory, 'md-export')
11 + def pathSerializer = services.component.getInstance(EntityReferenceSerializer.TYPE_STRING, 'fspath')
12 + def outputFile = new File(tmpDir, pathSerializer.serialize(itemDoc.documentReference))
46 46   outputFile.parentFile.mkdirs()
47 - outputFile.write(markdown, "UTF-8")
48 -
49 - println(" -> Saved page to " + outputFile)
50 -
51 - // Anhänge exportieren
52 - for (attachment in doc.getAttachmentList()) {
53 -
54 - def attachmentFile = new File(outputFile.parentFile, attachment.getFilename())
55 -
56 - attachmentFile.withOutputStream { os ->
57 - os << attachment.getContentInputStream()
58 - }
59 -
60 - println(" -> Exported attachment " + attachment.getFilename())
61 - }
14 + outputFile << newContent
15 + println "Saved in ${outputFile.toString()}"
62 62   }
63 63  }
64 64  
65 -println("[[Export starten>>||queryString='confirm=1']]")
19 +println "[[Export>>||queryString='confirm=1']]"
66 66  {{/groovy}}