add muos to index
[pipapo-website/.git] / menuformat.py
1 # -*- coding: utf-8 -*-
2 # -*- python -*-
3 ##
4 ## menuformat.py  -  template and output generation for the Lumiera.org navigation menu
5 ##
6
7 #  Copyright (C)         Lumiera.org
8 #    2011,               Hermann Vosseler <Ichthyostega@web.de>
9 #
10 #  This program is free software; you can redistribute it and/or
11 #  modify it under the terms of the GNU General Public License as
12 #  published by the Free Software Foundation; either version 2 of
13 #  the License, or (at your option) any later version.
14 #####################################################################
15
16
17 import string
18 import menugen
19
20
21 #------------CONFIGURATION-----------------------------
22 ENTRY_LENGTH = 17
23 #------------CONFIGURATION-----------------------------
24
25
26 menuTemplate = '''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
27     "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
28 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
29
30 <head>
31 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
32 <meta http-equiv="expires" content="0">
33 <title>Navigation</title>
34 <link rel="stylesheet" href="/css/asciidoc.css" type="text/css" />
35 <link rel="stylesheet" href="/css/page.css" type="text/css" />
36 <link rel="stylesheet" href="/css/menu.css" type="text/css" />
37 <script type="text/javascript" src="/js/menu.js"></script>
38 </head>
39
40 <body>
41 <ul id='menu'>
42 $menuBody
43 </ul>
44
45 <script type="text/javascript">
46 // Generated Script allowing to mark menu entries as selected
47 $menuScript
48 </script>
49
50 </body>
51 </html>
52 '''
53
54
55 def generateHTML(buildingBlocks):
56     ''' instantiate the menu template,
57         thereby expanding the placeholders
58         based on the passed in variable mappings
59     '''
60     engine = string.Template(menuTemplate)
61     return engine.substitute(buildingBlocks)
62
63
64 def expandButtonHTML(id):
65     return '<span class="expand_button" onclick="menuTable.toggle(\'%s\')">+</span>' % id
66
67 def menuEntryText(node):
68     label = node.label
69     if not label or len(label) > ENTRY_LENGTH:
70         hover = 'title="%s"' % label
71         label = menugen.titleFormatted(node.id)
72         if len(label) > ENTRY_LENGTH:
73             label = label[:ENTRY_LENGTH-3]+'...'
74     else:
75         hover = ''
76     return (label, hover)
77         
78
79
80 class HtmlGenerator(menugen.Formatter):
81     
82     INDENT   ='    '
83     LEAF     ='<li id="$ID"><a href="$URL" target="_top" $HOVER >$LABEL</a></li>'
84     PRE_SUB  ='<li id="$ID" class="submenu"><a href="$URL" target="_top" $HOVER >$LABEL</a>  $EXPANDBUTTON <ul>'
85     POST_SUB ='</ul></li>'
86     
87     
88     def showNode(self, template, node):
89         nodeID = node.menuPath()
90         (visibleTxt, hover) = menuEntryText(node)
91         self.show (self.format (template,
92                                  ID=nodeID,
93                                  URL=node.getUrl(),
94                                  LABEL=visibleTxt,
95                                  HOVER=hover,
96                                  EXPANDBUTTON=expandButtonHTML(nodeID)))
97
98
99
100 class ScriptGenerator(menugen.Formatter):
101     
102     INDENT   ='    '
103     LEAF     ="menuTable.addNode ('$ID', '$URL', '$PARENT')"
104     PRE_SUB  ="menuTable.addNode ('$ID', '$URL', '$PARENT', isSubmenu=true)"
105     POST_SUB ='//(end $ID)'
106     
107     
108     def showNode(self, template, node):
109         self.show (self.format (template,
110                                  ID=node.menuPath(),
111                                  URL=node.getUrl(),
112                                  PARENT=node.getParentUrl()))
113
114