print ' Software Failure. Press left mouse button to continue.\n'
print msg_text
if msg_type == 'error':
- print ' Guru Meditation #DEADBEEF.ABADC0DE'
+ print '\n Guru Meditation #DEADBEEF.ABADC0DE'
print '</pre>'
# FIXME: This little JS snippet is harder to pass than ACID 3.0
print """
if not name:
print ' <meta name="robots" content="noindex,nofollow" />'
+ for meta in meta_urls:
+ http_equiv, content = meta
+ print ' <meta http-equiv="%s" content="%s" />' % (http_equiv, relative_url(content))
+
for link in link_urls:
rel, href = link
print ' <link rel="%s" href="%s" />' % (rel, relative_url(href))
print '<hr /></div>'
+def send_httperror(status="403 Not Found", query=""):
+ print "Status: %s" % status
+ send_title(None, msg_text=("%s: on query '%s'" % (status, query)))
+ send_footer(None)
+
def link_tag(params, text=None, ss_class=None, privileged=False):
if text is None:
text = params # default
print "<p>%d hits out of %d pages searched.</p>" % (hits, searched)
def handle_raw(pagename):
+ if not file_re.match(pagename):
+ send_httperror("403 Forbidden", pagename)
+ return
+
Page(pagename).send_raw()
def handle_edit(pagename):
+ if not file_re.match(pagename):
+ send_httperror("403 Forbidden", pagename)
+ return
+
pg = Page(pagename)
if 'save' in form:
if form['file'].value:
- pg.save(form['file'].file.read())
+ pg.save(form['file'].file.read(), form['changelog'].value)
else:
- pg.save(form['savetext'].value.replace('\r\n', '\n'))
+ pg.save(form['savetext'].value.replace('\r\n', '\n'), form['changelog'].value)
pg.format()
elif 'cancel' in form:
pg.msg_text = 'Editing canceled'
return '<p><center>'+ ' | '.join(links) + '</center></p>'
def page_list(dir = None, re = word_re):
- return filter(re.match, os.listdir(dir or data_dir))
+ return sorted(filter(re.match, os.listdir(dir or data_dir)))
def send_footer(name, mod_string=None):
if globals().get('debug_cgi', False):
cgi.print_arguments()
cgi.print_form(form)
cgi.print_environ()
- print '<div id="footer"><hr />'
- print ('<p class="copyright"><span class="benchmark">generated in %0.3fs</span>' +
- ' by <a href="http://www.codewiz.org/wiki/GeekiGeeki">GeekiGeeki</a>' +
- ' version %s</p>') % (clock() - start_time, __version__)
+ print '''
+<div id="footer"><hr />
+<p class="copyright">
+<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img class="license" alt="Creative Commons License" src="http://i.creativecommons.org/l/by-sa/3.0/80x15.png" /></a>
+<span class="benchmark">generated in %0.3fs</span> by <a href="http://www.codewiz.org/wiki/GeekiGeeki">GeekiGeeki</a> version %s
+</p>
+''' % (clock() - start_time, __version__)
if mod_string:
print '<p class="modified">last modified %s</p>' % mod_string
print '</div></body></html>'
macro = globals().get('_macro_' + name)
if not macro:
- execfile("macros/" + name + ".py", globals())
+ try:
+ execfile("macros/" + name + ".py", globals())
+ except IOError, er:
+ if er.errno == errno.ENOENT:
+ pass
macro = globals().get('_macro_' + name)
if macro:
return macro(argv)
def _hurl_repl(self, word):
m = link_re.match(word)
name = m.group(1)
- if m.group(2) is None:
+ descr = m.group(2)
+ if descr is None:
descr = name
elif img_re.match(m.group(2)):
descr = '<img border="0" src="' + descr + '" />'
- else:
- descr = m.group(2)
return link_tag(name, descr, 'wikilink')
+ r"|(?P<hurl>\[\[([^\s\|]+)(?:\s*\|\s*([^\]]+)|)\]\])"
# Inline HTML
- + r"|(?P<html><(/|)(br|hr|div|form|iframe|input|span))"
+ + r"|(?P<html><(/|)(br|hr|div|span|form|iframe|input|textarea|a|img|h[1-5])[^>]*>)"
+ r"|(?P<ent>[<>&])"
# Auto links (LEGACY)
print '</p><p>'
else:
indent = indent_re.match(self.line)
- print self._indent_to(len(indent.group(0)))
+ print self._indent_to(len(indent.group(0))) ,
print re.sub(scan_re, self.replace, self.line)
if self.in_pre: print '</pre>'
self.attrs[m.group(1)] = m.group(2).strip()
#print "bernie: attrs[" + m.group(1) + "] = " + m.group(2) + "<br>\n"
except IOError, er:
- if er.errno != errno.ENOENT:
+ if er.errno != errno.ENOENT and er.errno != errno.EISDIR:
raise er
return self.attrs
+ ' for ' + cgi.escape(remote_user())
+ ' from ' + cgi.escape(get_hostname(remote_host()))
+ '</b></p>')
- print '<div class="editor"><form method="post" enctype="multipart/form-data" action="%s">' % relative_url(self.page_name)
+ print '<div class="editor"><form name="editform" method="post" enctype="multipart/form-data" action="%s">' % relative_url(self.page_name)
print '<input type="hidden" name="edit" value="%s">' % (self.page_name)
- print '<textarea wrap="off" spellcheck="true" id="editor" name="savetext" rows="17" cols="100">%s</textarea>' % (preview or self.get_raw_body())
- print 'Or upload a file: <input type="file" name="file" value="%s" />' % file
+ print '<input type="input" id="editor" name="changelog" value="Edit page %s" accesskey="c" /><br />' % (self.page_name)
+ print '<textarea wrap="off" spellcheck="true" id="editor" name="savetext" rows="17" cols="100" accesskey="e">%s</textarea>' % cgi.escape(preview or self.get_raw_body())
+ print '<label for="file" accesskey="u">Or Upload a file:</label> <input type="file" name="file" value="%s" />' % file
print """
<br />
- <input type="submit" name="save" value="Save" />
- <input type="submit" name="preview" value="Preview" />
+ <input type="submit" name="save" value="Save" accesskey="s">
+ <input type="submit" name="preview" value="Preview" accesskey="p" />
<input type="reset" value="Reset" />
<input type="submit" name="cancel" value="Cancel" />
<br />
- </form></div>"""
+ </form></div>
+ <script language="javascript">
+ <!--
+ document.editform.savetext.focus()
+ //-->
+ </script>
+ """
print "<p>" + Page('EditingTips').link_to() + "</p>"
if preview:
print "<div class='preview'>"
if er.errno != errno.ENOENT: raise er
os.rename(tmp_filename, name)
- def save(self, newdata):
+ def save(self, newdata, changelog):
if not self.can_write():
self.msg_text = 'Write access denied by ACLs'
self.msg_type = 'error'
cmd = ( post_edit_hook
+ " '" + data_dir + '/' + self.page_name
+ "' '" + remote_user()
- + "' '" + remote_host() + "'"
+ + "' '" + remote_host()
+ + "' '" + changelog + "'"
)
out = os.popen(cmd)
output = out.read()
else:
Page(query).format()
else:
- print "Status: 404 Not Found"
- send_title(None, msg_text='Can\'t work out query: ' + query)
- send_footer(None)
+ send_httperror("403 Forbidden", query)
except Exception:
import traceback
msg_text = traceback.format_exc()