]>
git.ipfire.org Git - ipfire.org.git/blob - www/ipfire.py
2 # -*- coding: utf-8 -*-
8 sys
.path
.append(os
.environ
['DOCUMENT_ROOT'])
10 import xml
.dom
.minidom
12 class Error404(Exception):
15 class Error500(Exception):
19 def __init__(self
, xml
, page
, lang
):
27 self
.data
+= s
#.encode("utf-8")
34 def __init__(self
, file, page
, lang
):
35 SItem
.__init
__(self
, Xml(file, lang
), page
, lang
)
38 self
.items
= XItem(self
.xml
.dom
).childs("Item")
41 self
.write("""<div id="menu"><ul>""")
42 for item
in self
.items
:
43 uri
= item
.attr("uri")
46 active
= "class=\"active\""
48 if not uri
.startswith("http://"):
49 uri
= "/%s/%s" % (uri
, self
.lang
)
51 for name
in item
.childs("Name"):
52 if name
.attr("lang") in (self
.lang
, ""):
53 self
.write("<li><a %s href=\"%s\">%s</a></li>" % \
54 (active
, uri
, name
.text()))
55 self
.write("</ul></div>")
60 def __init__(self
, xml
, page
, lang
):
61 SItem
.__init
__(self
, xml
, page
, lang
)
63 self
.paragraphs
= XItem(self
.xml
.dom
, "Paragraphs").childs("Paragraph")
65 self
.news
= News("news", self
.page
, self
.lang
)
68 self
.write("""<div id="primaryContent_2columns">
69 <div id="columnA_2columns">""")
70 for paragraph
in self
.paragraphs
:
71 for heading
in paragraph
.childs("Heading"):
72 if heading
.attr("lang") in (self
.lang
, ""):
73 self
.write("<h3>" + heading
.text() + "</h3>")
74 for content
in paragraph
.childs("Content"):
75 if content
.attr("lang") in (self
.lang
, ""):
76 if content
.attr("raw"):
77 self
.write(content
.text())
79 self
.write("<p>" + content
.text() + "</p>\n")
80 self
.write("""<br class="clear" />\n""")
82 if self
.page
in ("index", "news",):
83 self
.write(self
.news(3))
84 self
.write("""</div></div>""")
89 def __init__(self
, file, page
, lang
):
90 SItem
.__init
__(self
, Xml(file, lang
), page
, lang
)
93 self
.posts
= XItem(self
.xml
.dom
).childs("Posts")
95 def __call__(self
, limit
=None):
97 for post
in self
.posts
:
98 self
.write("""<div class="post">""")
99 for id in post
.childs("Id"):
100 self
.write("""<a name="%s"></a>""" % id.text())
101 for heading
in post
.childs("Heading"):
102 if heading
.attr("lang") in (self
.lang
, ""):
103 self
.write("""<h3>%s - %s</h3>""" % (post
.childs("Date")[0].text(), heading
.text()))
104 for subtitle
in post
.childs("Subtitle"):
105 if subtitle
.attr("lang") in (self
.lang
, ""):
106 self
.write("""<ul class="post_info">
107 <li class="date">%s</li></ul>""" % \
109 for content
in post
.childs("Content"):
110 if content
.attr("lang") in (self
.lang
, ""):
111 if content
.attr("raw"):
112 self
.write(content
.text())
114 self
.write("<p>" + content
.text() + "</p>\n")
115 self
.write("""</div>""")
117 if limit
and a
> limit
:
122 class Sidebar(SItem
):
123 def __init__(self
, xml
, page
, lang
):
124 SItem
.__init
__(self
, xml
, page
, lang
)
126 self
.paragraphs
= XItem(self
.xml
.dom
, "Sidebar").childs("Paragraph")
129 self
.write("""<div id="secondaryContent_2columns">
130 <div id="columnC_2columns">""")
131 for post
in self
.paragraphs
:
132 for heading
in post
.childs("Heading"):
133 if heading
.attr("lang") in (self
.lang
, ""):
134 self
.write("<h4>" + heading
.text() + "</h4>")
135 for content
in post
.childs("Content"):
136 if content
.attr("lang") in (self
.lang
, ""):
137 if content
.attr("raw"):
138 self
.write(content
.text())
140 self
.write("<p>" + content
.text() + "</p>\n")
141 self
.write("""</div></div>""")
146 def __init__(self
, dom
, node
=None):
147 self
.dom
= self
.node
= dom
149 self
.node
= self
.dom
.getElementsByTagName(node
)[0]
152 def attr(self
, name
):
153 return self
.node
.getAttribute(name
).strip()
157 for i
in self
.node
.childNodes
:
161 def element(self
, name
):
162 return XItem(self
.node
, name
)
164 def childs(self
, name
):
166 for i
in self
.node
.getElementsByTagName(name
):
172 def __init__(self
, page
, lang
):
185 os
.path
.join(os
.path
.dirname(os
.environ
['SCRIPT_FILENAME']), "data/%s.xml" % self
.page
)
191 xml
.dom
.minidom
.parseString(self
.data
).getElementsByTagName("Site")[0]
202 elements
= ("Title", "Columns",)
203 for element
in elements
:
204 self
._config
[element
.lower()] = ""
206 config
= XItem(self
.dom
, "Config")
207 for element
in elements
:
208 for lang
in config
.childs(element
):
209 if lang
.attr("lang") == self
.lang
:
210 self
._config
[element
.lower()] = lang
.text()
215 def __init__(self
, page
, lang
="en"):
216 self
.code
= "200 - OK"
217 self
.mime
= "text/html"
221 self
.xml
= Xml(page
=page
, lang
=lang
)
225 self
.menu
= Menu("../menu", self
.page
, self
.lang
)
227 self
.config
= { "document_name" : page
,
229 "menu" : self
.menu() }
234 self
.code
= "404 - Not found"
236 # self.code = "500 - Internal Server Error"
239 self
.data
+= s
#.encode("utf-8")
241 def include(self
, file):
245 self
.write(data
% self
.config
)
248 for key
, val
in self
.xml
.config().items():
249 self
.config
[key
] = val
251 self
.config
["title"] = "%s - %s" % \
252 (os
.environ
["SERVER_NAME"], self
.config
["title"],)
254 self
.body
= Body(self
.xml
, self
.page
, self
.lang
)
255 self
.sidebar
= Sidebar(self
.xml
, self
.page
, self
.lang
)
258 # First, return the http header
259 print "Status: %s" % self
.code
260 print "Content-Type: %s" % self
.mime
263 # Include the site's header
264 self
.include("header.inc")
266 # Import body and side elements
267 self
.write(self
.body())
268 self
.write(self
.sidebar())
270 # Include the site's footer
271 self
.include("footer.inc")
273 return self
.data
.encode("utf-8")
276 page
= cgi
.FieldStorage().getfirst("page")
277 lang
= cgi
.FieldStorage().getfirst("lang")
282 site
= Site(page
=page
, lang
=lang
)