source: freemind/trunk/fuentes/freemind/accessories/toxhtml.xsl @ 68

Last change on this file since 68 was 68, checked in by jrpelegrina, 4 years ago

First release to Xenial

File size: 14.7 KB
Line 
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3
4Distributed under the terms of the MIT License.
5See "LICENCE.MIT" or http://www.opensource.org/licenses/mit-license.php for details.
6 
7 Software distributed under the License is distributed on an "AS IS" basis,
8 WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
9 for the specific language governing rights and limitations under the
10 License.
11
12mmTree - alternate XHTML+Javascript export style sheet for FreeMind.
13
14 Miika Nurminen (minurmin@cc.jyu.fi) 12.12.2003.
15
16Transforms Freemind (0.6.7 - 0.8.0) mm file to XHTML 1.1 with JavaScript-based keyboard navigation (MarkTree).
17Output is valid (possibly apart HTML entered by user in Freemind).
18
19Update (MN / 14.12.2004):
20 - Support for mm 0.7.1 - 0.8.0 constructs (clouds, internal links. opens internal link also if collapsed).
21 - Support for icons. Some code adapted from Markus Brueckner's freemind2html.xsl style sheet.
22 - newlines &#xa;&#xa; behaviour (find and convert to <br/>)
23       
24Bug fix (FC/ 25.04.2006):
25 - Export of local hyperlinks corrected.
26
27Update (EWL / 2006-06-02):
28 - add export of notes & attributes
29 - re-format/re-arrange/modularize the file to align with freemind2html.xsl
30
31Todo:
32 - Can CSS fonts be used with Freemind fonts?
33 - Change licence to MIT -style.
34 - integrate JS file to stylesheet
35 - parameters: use_icons (true/false)
36-->
37<xsl:stylesheet version="1.0"
38                xmlns="http://www.w3.org/1999/xhtml" 
39                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
40                >
41<!-- mozilla doesn't parse method xhtml (in xslt 2.0) -->
42<!--            xmlns:HtmlTools="xalan://plugins.map.FreeMindMapController"
43                exclude-result-prefixes="HtmlTools"  -->
44<xsl:output method="xml"
45            version="1.0"
46            encoding="UTF-8"
47            doctype-public="-//W3C//DTD XHTML 1.1//EN" 
48            doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
49            omit-xml-declaration="no"
50            />
51
52<!-- fc, 17.10.2004: The following parameter is set by freemind. -->
53<xsl:param name="destination_dir">./</xsl:param>
54
55<!-- if true, external links urls are shown, default is false. -->
56<xsl:param name="show_link_url">false</xsl:param>
57
58<!-- if false, does not show standard freemind icons
59(assumed to be in ./icons directory), default is true -->
60<xsl:param name="show_icons">true</xsl:param>
61
62<xsl:strip-space elements="*" />
63<!-- note! nonempty links are required for opera! (tested with opera 7).
64     #160 is non-breaking space.  / mn, 11.12.2003 -->
65
66<!-- ### THE ROOT TEMPLATE ### -->
67
68<xsl:template match="/">
69
70<xsl:processing-instruction name="xml-stylesheet">href="treestyles.css" type="text/css"</xsl:processing-instruction>
71<html xmlns="http://www.w3.org/1999/xhtml">
72  <xsl:comment>This file has been created with toxhtml.xsl</xsl:comment>
73<!-- Thanks to gulpman, wolfgangradke: -->
74<head>
75<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
76
77
78        <title><xsl:call-template name="output-title" /></title>
79        <xsl:element name="link">
80                <xsl:attribute name="rel">stylesheet</xsl:attribute>
81                <xsl:attribute name="href">
82                        <xsl:value-of select="$destination_dir"/>treestyles.css</xsl:attribute>
83                <xsl:attribute name="type">text/css</xsl:attribute>
84        </xsl:element>
85        <xsl:element name="script">
86                <xsl:attribute name="type">text/javascript</xsl:attribute>
87                <xsl:attribute name="src">
88                        <xsl:value-of select="$destination_dir"/>marktree.js</xsl:attribute>&#160;
89        </xsl:element>
90</head>
91
92<body>
93
94<div class="basetop">
95<a href="#" onclick="expandAll(document.getElementById('base'))">Expand</a> -
96<a href="#" onclick="collapseAll(document.getElementById('base'))">Collapse</a>
97</div>
98
99<div id="base" class="basetext">
100<ul>
101
102<xsl:apply-templates />
103
104</ul>
105</div>
106
107</body>
108</html>
109</xsl:template>
110
111<!-- ### THE MATCHED TEMPLATES ### -->
112
113<xsl:template match="node">
114        <xsl:if test="count(child::node)=0"> 
115                <xsl:call-template name="listnode">
116                        <xsl:with-param name="lifold">basic</xsl:with-param>
117                </xsl:call-template>
118        </xsl:if>
119        <xsl:if test="count(child::node)>0" > 
120                <xsl:choose>
121                <xsl:when test="@FOLDED='true'">
122                        <xsl:call-template name="listnode">
123                        <xsl:with-param name="lifold">exp</xsl:with-param>
124                        <xsl:with-param name="ulfold">sub</xsl:with-param>
125                        </xsl:call-template>
126                </xsl:when>
127                <xsl:otherwise>
128                        <xsl:call-template name="listnode">
129                        <xsl:with-param name="lifold">col</xsl:with-param>
130                        <xsl:with-param name="ulfold">subexp</xsl:with-param>
131                        </xsl:call-template>
132                </xsl:otherwise>
133                </xsl:choose>
134        </xsl:if>
135</xsl:template> <!-- xsl:template match="node" -->
136
137<xsl:template name="listnode">
138<xsl:param name="lifold" /> <xsl:param name="ulfold" />
139        <xsl:text>
140        </xsl:text> <!-- adds a line-break in the html code -->
141        <li class="{$lifold}">
142        <xsl:if test="cloud/@COLOR">
143                <xsl:attribute name="style">background-color:<xsl:value-of select="cloud/@COLOR" />;</xsl:attribute>
144        </xsl:if>
145        <!-- check if this node has an ID (for the document internal links) -->
146        <xsl:if test="@ID">
147        <!-- note: as FreeMind sometimes prepends the IDs with an underscore
148        which is not valid as the first character in an HTML id,
149        we surround the ID with FM<ID>FM -->
150                <xsl:attribute name="id">FM<xsl:value-of select="@ID"/>FM</xsl:attribute>
151        </xsl:if>
152        <xsl:call-template name="output-icons" />
153        <xsl:choose>
154        <xsl:when test="richcontent[@TYPE='NOTE'] or attribute">
155                <div class="boxed">
156                        <xsl:call-template name="output-node" />
157                        <div class="note-and-attributes">
158                                <xsl:call-template name="output-note" />
159                                <xsl:call-template name="output-attributes" />
160                        </div>
161                </div>
162        </xsl:when>
163        <xsl:otherwise>
164                <xsl:call-template name="output-node" />
165        </xsl:otherwise>
166        </xsl:choose>
167        <xsl:if test="child::node"> 
168                <xsl:text>
169                </xsl:text> <!-- adds a line-break in the html code -->
170                <ul class="{$ulfold}"> 
171                        <xsl:apply-templates select="node[@POSITION='left']"/>
172                        <xsl:apply-templates select="node[@POSITION='right']"/>
173                        <xsl:apply-templates select="node[not(@POSITION)]"/>
174                </ul>
175        </xsl:if>
176        <!-- if there are arrowlinks inside this node (i.e. this node is
177        connected to another node in FreeMind using an arrow), then create a
178        document internal link -->
179        <xsl:if test="child::arrowlink">
180                <xsl:call-template name="output-arrowlinks" />
181        </xsl:if>
182        </li>
183</xsl:template> <!-- xsl:template name="listnode" -->
184
185<!-- ### XHTML LIBRARY ### -->
186<!-- (this part could be extracted and 'import'ed from toxhtml.xsl and
187     freemindtohtml.xsl if there wouldn't be issues with the path -->
188
189<xsl:template match="font">
190        <xsl:if test="string-length(@SIZE) > 0">font-size:<xsl:value-of select="round((number(@SIZE) div 12)*100)" />%;</xsl:if><xsl:if test="@BOLD='true'">font-weight:bold;</xsl:if><xsl:if test="@ITALIC='true'">font-style:italic;</xsl:if>
191</xsl:template>
192
193<xsl:template name="output-node">
194        <xsl:element name="div">
195                <xsl:attribute name="class">nodecontent</xsl:attribute>
196                <xsl:if test="@COLOR or @BACKGROUND_COLOR or font">
197                        <xsl:attribute name="style">
198                                <xsl:if test="@COLOR">color:<xsl:value-of select="@COLOR" />;</xsl:if>
199                                <xsl:if test="@BACKGROUND_COLOR">background-color:<xsl:value-of select="@BACKGROUND_COLOR" />;</xsl:if>
200                                <xsl:apply-templates select="font" />
201                        </xsl:attribute>
202                </xsl:if>
203                <xsl:choose>
204                <xsl:when test="@LINK">
205                        <xsl:call-template name="output-node-with-link" />
206                </xsl:when>
207                <xsl:otherwise>
208                        <xsl:call-template name="output-nodecontent" />
209                </xsl:otherwise>
210                </xsl:choose>
211                <xsl:if test='hook/@NAME="plugins/map/MapNodePositionHolder.properties"'>
212                        <xsl:element name="a">
213                                <xsl:attribute name="href"><!--
214                                -->http://www.openstreetmap.org/?lat=<!--
215                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_MAP_LAT"></xsl:value-of><!--
216                                -->&amp;lon=<!--
217                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_MAP_LON"></xsl:value-of><!--
218                                -->&amp;mlat=<!--
219                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_POS_LAT"></xsl:value-of><!--
220                                -->&amp;mlon=<!--
221                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_POS_LON"></xsl:value-of><!--
222                                -->&amp;zoom=<!--
223                                --><xsl:value-of select="hook/Parameters/@XML_STORAGE_ZOOM"></xsl:value-of><!--
224                                -->&amp;layers=<!--
225                                --><xsl:choose><!-- 
226                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource$Mapnik'">M</xsl:when><!--
227                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='plugins.map.FreeMindMapController$TransportMap'">T</xsl:when><!--
228                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource$CycleMap'">C</xsl:when><!--
229                                --><xsl:when test="hook/Parameters/@XML_STORAGE_TILE_SOURCE='plugins.map.FreeMindMapController$MapQuestOpenMap'">Q</xsl:when><!--
230                                --><xsl:otherwise>M</xsl:otherwise></xsl:choose></xsl:attribute>
231                                <xsl:element name="img">
232                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>map_location.png</xsl:attribute>
233                                        <xsl:attribute name="alt">MAP</xsl:attribute>
234                                        <xsl:attribute name="style">border-width:0</xsl:attribute>
235                                </xsl:element>
236                        </xsl:element>
237                </xsl:if>
238        </xsl:element>
239</xsl:template> <!-- xsl:template name="output-node" -->
240
241<xsl:template name="output-node-with-link">
242        <xsl:choose>
243        <xsl:when test="not($show_link_url='true')">
244                <xsl:variable name="link">
245                        <xsl:choose>
246                        <!-- test for local hyperlinks. -->
247                        <xsl:when test="starts-with(@LINK, '#')">#FM<xsl:value-of select="substring(@LINK,2)" />FM</xsl:when>
248                        <xsl:otherwise><xsl:value-of select="@LINK" /></xsl:otherwise>
249                        </xsl:choose>
250                </xsl:variable>
251                <xsl:element name="a">
252                        <xsl:attribute name="href">
253                                <xsl:value-of select="$link" />
254                        </xsl:attribute>
255                        <xsl:call-template name="output-nodecontent" />
256                </xsl:element>
257                <xsl:if test="not($show_icons='false')">
258                        <xsl:text> </xsl:text>
259                        <xsl:element name="a">
260                                <xsl:attribute name="href">
261                                        <xsl:value-of select="$link"/>
262                                </xsl:attribute>
263                                <xsl:element name="img">
264                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
265                                        <xsl:attribute name="alt">User Link</xsl:attribute>
266                                        <xsl:attribute name="style">border-width:0</xsl:attribute>
267                                </xsl:element>
268                        </xsl:element>
269                </xsl:if>
270        </xsl:when>
271        <xsl:otherwise>
272                <xsl:call-template name="output-nodecontent" />
273        </xsl:otherwise>
274        </xsl:choose>
275        <xsl:if test="$show_link_url='true'">
276                - [ <a><xsl:attribute name="href"><xsl:value-of select="@LINK" /> 
277                </xsl:attribute><xsl:value-of select="@LINK"/></a> ]   
278        </xsl:if>
279</xsl:template> <!-- xsl:template name="output-node-with-link" -->
280
281<xsl:template name="output-nodecontent">
282                <xsl:choose>
283                <xsl:when test="richcontent[@TYPE='NODE']">
284                        <xsl:apply-templates select="richcontent[@TYPE='NODE']/html/body" mode="richcontent" />
285                </xsl:when>
286                <xsl:otherwise>
287                        <xsl:call-template name="textnode" />
288                </xsl:otherwise>
289                </xsl:choose>
290</xsl:template> <!-- xsl:template name="output-nodecontent" -->
291
292<xsl:template match="body" mode="richcontent">
293        <xsl:copy-of select="*|text()"/>
294</xsl:template> <!-- xsl:template name="htmlnode" -->
295
296<xsl:template name="textnode">
297        <xsl:call-template name="format_text">
298                <xsl:with-param name="nodetext">
299                        <xsl:value-of select="@TEXT" />
300                </xsl:with-param>
301        </xsl:call-template>
302</xsl:template> <!-- xsl:template name="textnode" -->
303
304<xsl:template name="output-title">
305        <!-- look if there is any node inside the map (there should never be
306                none, but who knows?) and take its text as the title -->
307        <xsl:choose>
308        <xsl:when test="/map/node/@TEXT">
309                <xsl:value-of select="/map/node/@TEXT" />
310        </xsl:when>
311        <xsl:when test="/map/node/richcontent[@TYPE='NODE']">
312                <xsl:apply-templates select="/map/node/richcontent[@TYPE='NODE']/html/body" mode="strip-tags" />
313        </xsl:when>
314        <xsl:otherwise>
315                <xsl:text>FreeMind2HTML Mindmap</xsl:text>
316        </xsl:otherwise>
317        </xsl:choose>
318</xsl:template>
319
320       
321        <xsl:template match="text()|@*"  mode="strip-tags">
322                  <xsl:value-of select="string(.)"/>
323        </xsl:template>
324
325
326<!-- replace ASCII line breaks through HTML line breaks (br) -->
327<xsl:template name="format_text">
328        <xsl:param name="nodetext" />
329        <xsl:if test="string-length(substring-after($nodetext,'&#xa;')) = 0">
330                <xsl:value-of select="$nodetext" />
331        </xsl:if>
332        <xsl:if test="string-length(substring-after($nodetext,'&#xa;')) > 0">
333                <xsl:value-of select="substring-before($nodetext,'&#xa;')" />
334                <br />
335                <xsl:call-template name="format_text">
336                        <xsl:with-param name="nodetext">
337                                <xsl:value-of select="substring-after($nodetext,'&#xa;')" />
338                        </xsl:with-param>
339                </xsl:call-template>
340        </xsl:if>
341</xsl:template> <!-- xsl:template name="format_text" -->
342
343<xsl:template name="output-note">
344        <xsl:if test="richcontent[@TYPE='NOTE']">
345                <span class="note">
346                        <xsl:apply-templates select="richcontent[@TYPE='NOTE']/html/body" mode="richcontent" />
347                </span>
348        </xsl:if>
349</xsl:template> <!-- xsl:template name="output-note" -->
350
351<xsl:template name="output-attributes">
352        <xsl:if test="attribute">
353                <table class="attributes" summary="Attributes Names and Values">
354                        <caption>Attributes</caption>
355                        <tr><th>Name</th><th>Value</th></tr>
356                        <xsl:for-each select="attribute">
357                                <tr>
358                                <td><xsl:value-of select="@NAME" /></td>
359                                <td><xsl:value-of select="@VALUE" /></td>
360                                </tr>
361                        </xsl:for-each>
362                </table>
363        </xsl:if>
364</xsl:template> <!-- xsl:template name="output-attributes" -->
365
366<!-- function is defined in such a way that an undefined show_icons variable
367        leads to output of the icons (important for reuse) -->
368<xsl:template name="output-arrowlinks">
369        <xsl:if test="$show_icons='false'"> - [ </xsl:if>
370        <xsl:for-each select="arrowlink">
371                <xsl:text> </xsl:text>
372                <a>
373                        <xsl:attribute name="onclick">getVisibleParents('FM<xsl:value-of select="@DESTINATION" />FM')</xsl:attribute>
374                        <xsl:attribute name="href">#FM<xsl:value-of select="@DESTINATION" />FM</xsl:attribute>
375                        <xsl:choose>
376                        <xsl:when test="$show_icons='false'">
377                                <xsl:value-of
378                                        select="concat('&amp;','rArr',';')"
379                                        disable-output-escaping="yes" />
380                        </xsl:when>
381                        <xsl:otherwise>
382                                <xsl:element name="img">
383                                        <xsl:attribute name="src"><xsl:value-of select="$destination_dir"/>ilink.png</xsl:attribute>
384                                        <xsl:attribute name="class">ilink</xsl:attribute>
385                                        <xsl:attribute name="alt">Arrow Link</xsl:attribute>
386                                </xsl:element>
387                        </xsl:otherwise>
388                        </xsl:choose>
389                </a>
390        </xsl:for-each>
391        <xsl:if test="$show_icons='false'"> ] </xsl:if>
392</xsl:template> <!-- xsl:template name="output-arrowlinks" -->
393
394<xsl:template name="output-icons">
395        <xsl:if test="not($show_icons='false')">
396                <xsl:for-each select="icon">
397                        <xsl:element name="img">
398                                <xsl:attribute name="src">
399                                        <xsl:value-of select="$destination_dir"/>icons/<xsl:value-of select="@BUILTIN" />.png</xsl:attribute>
400                                <xsl:attribute name="alt">
401                                        <xsl:value-of select="@BUILTIN" />
402                                </xsl:attribute>
403                        </xsl:element>
404                        <xsl:text> </xsl:text>
405                </xsl:for-each>
406        </xsl:if>
407</xsl:template> <!-- xsl:template name="output-icons" -->
408
409</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.