projects
/
geekigeeki.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix maxwidth handling
[geekigeeki.git]
/
geekigeeki.py
diff --git
a/geekigeeki.py
b/geekigeeki.py
index eb51489cddb74e6bf2185f6a0e05ac62ebfb6685..4b95368aaa6759eb60c0009bfa6fd913308883e2 100755
(executable)
--- a/
geekigeeki.py
+++ b/
geekigeeki.py
@@
-36,6
+36,9
@@
url_re = re.compile(r"[a-z]{3,8}://[^\s'\"]+\S")
ext_re = re.compile(r"\.([^\./]+)$")
# CGI stuff ---------------------------------------------------------
ext_re = re.compile(r"\.([^\./]+)$")
# CGI stuff ---------------------------------------------------------
+def config_get(key, default=None):
+ return globals().get(key, default)
+
def script_name():
return os.environ.get('SCRIPT_NAME', '')
def script_name():
return os.environ.get('SCRIPT_NAME', '')
@@
-47,7
+50,7
@@
def query_string():
return os.environ.get('QUERY_STRING', '') or 'FrontPage'
def privileged_path():
return os.environ.get('QUERY_STRING', '') or 'FrontPage'
def privileged_path():
- return
privileged_url
or script_name()
+ return
config_get('privileged_url')
or script_name()
def remote_user():
user = os.environ.get('REMOTE_USER', '')
def remote_user():
user = os.environ.get('REMOTE_USER', '')
@@
-129,31
+132,32
@@
def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
print(' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">')
print('<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">')
print(' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">')
print('<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">')
- print("<head><title>%s: %s</title>" % (
site_name
, text))
+ print("<head><title>%s: %s</title>" % (
config_get('site_name', "Unconfigured Wiki")
, text))
print(' <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />')
if not name:
print(' <meta name="robots" content="noindex,nofollow" />')
print(' <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />')
if not name:
print(' <meta name="robots" content="noindex,nofollow" />')
- for meta in meta_urls:
- http_equiv, content = meta
+ for http_equiv, content in config_get('meta_urls', {}):
print(' <meta http-equiv="%s" content="%s" />' % (http_equiv, relative_url(content)))
print(' <meta http-equiv="%s" content="%s" />' % (http_equiv, relative_url(content)))
- for link in
link_urls
:
+ for link in
config_get('link_urls', {})
:
rel, href = link
print(' <link rel="%s" href="%s" />' % (rel, relative_url(href)))
rel, href = link
print(' <link rel="%s" href="%s" />' % (rel, relative_url(href)))
- if name and writable and privileged_url is not None:
+ editable = name and writable and config_get('privileged_url') is not None
+ if editable:
print(' <link rel="alternate" type="application/x-wiki" title="Edit this page" href="%s" />' \
% (privileged_path() + '?a=edit&q=' + name))
print(' <link rel="alternate" type="application/x-wiki" title="Edit this page" href="%s" />' \
% (privileged_path() + '?a=edit&q=' + name))
- if history_url is not None:
+ history = config_get('history_url')
+ if history is not None:
print(' <link rel="alternate" type="application/rss+xml" title="RSS" href="%s" />' \
print(' <link rel="alternate" type="application/rss+xml" title="RSS" href="%s" />' \
- % relative_url(history
_url
+ '?a=rss'))
+ % relative_url(history + '?a=rss'))
print('</head>')
# Body
print('</head>')
# Body
- if
name and writable and privileged_url is not Non
e:
+ if
editabl
e:
print('<body ondblclick="location.href=\'' + privileged_path() + '?a=edit&q=' + name + '\'">')
else:
print('<body>')
print('<body ondblclick="location.href=\'' + privileged_path() + '?a=edit&q=' + name + '\'">')
else:
print('<body>')
@@
-163,20
+167,20
@@
def send_title(name, text="Limbo", msg_text=None, msg_type='error', writable=Fal
# Navbar
print('<div class="nav">')
# Navbar
print('<div class="nav">')
- print link_tag('FrontPage',
site_icon or 'Home'
, cssclass='navlink')
+ print link_tag('FrontPage',
config_get('site_icon', 'Home')
, cssclass='navlink')
if name:
print(' <b>' + link_tag('?fullsearch=' + name, text, cssclass='navlink') + '</b> ')
else:
print(' <b>' + text + '</b> ')
print(' | ' + link_tag('FindPage', 'Find Page', cssclass='navlink'))
if name:
print(' <b>' + link_tag('?fullsearch=' + name, text, cssclass='navlink') + '</b> ')
else:
print(' <b>' + text + '</b> ')
print(' | ' + link_tag('FindPage', 'Find Page', cssclass='navlink'))
- if
'history_url' in globals()
:
- print(' | <a href="' + relative_url(history
_url
) + '" class="navlink">Recent Changes</a>')
+ if
history
:
+ print(' | <a href="' + relative_url(history) + '" class="navlink">Recent Changes</a>')
if name:
if name:
- print(' | <a href="' + relative_url(history
_url
+ '?a=history;f=' + name) + '" class="navlink">Page History</a>')
+ print(' | <a href="' + relative_url(history + '?a=history;f=' + name) + '" class="navlink">Page History</a>')
if name:
print(' | ' + link_tag(name + '?a=raw', 'Raw Text', cssclass='navlink'))
if name:
print(' | ' + link_tag(name + '?a=raw', 'Raw Text', cssclass='navlink'))
- if
privileged_url
is not None:
+ if
config_get('privileged_url')
is not None:
if writable:
print(' | ' + link_tag('?a=edit&q=' + name, 'Edit', cssclass='navlink', privileged=True))
else:
if writable:
print(' | ' + link_tag('?a=edit&q=' + name, 'Edit', cssclass='navlink', privileged=True))
else:
@@
-209,7
+213,7
@@
def link_tag(dest, text=None, privileged=False, **kvargs):
elif file_re.match(dest) and Page(dest).exists():
link_class = 'wikilink'
else:
elif file_re.match(dest) and Page(dest).exists():
link_class = 'wikilink'
else:
- text =
nonexist_pfx
+ text
+ text =
config_get('nonexist_pfx', '')
+ text
link_class = 'nonexistent'
# Prevent crawlers from following links potentially added by spammers or to generated pages
link_class = 'nonexistent'
# Prevent crawlers from following links potentially added by spammers or to generated pages
@@
-326,14
+330,14
@@
def make_index_key():
links = ['<a href="#%s">%s</a>' % (ch, ch) for ch in 'abcdefghijklmnopqrstuvwxyz']
return '<p style="text-align: center">' + ' | '.join(links) + '</p>'
links = ['<a href="#%s">%s</a>' % (ch, ch) for ch in 'abcdefghijklmnopqrstuvwxyz']
return '<p style="text-align: center">' + ' | '.join(links) + '</p>'
-def page_list(dirname=None, re=None):
- if re is None:
+def page_list(dirname=None,
search_
re=None):
+ if
search_
re is None:
# FIXME: WikiWord is too restrictive now!
# FIXME: WikiWord is too restrictive now!
- re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$")
- return sorted(filter(
re.match, os.listdir(dirname or data_dir
)))
+
search_
re = re.compile(r"^\b((([A-Z][a-z0-9]+){2,}/)*([A-Z][a-z0-9]+){2,})\b$")
+ return sorted(filter(
search_re.match, os.listdir(dirname or config_get('data_dir', 'data')
)))
def send_footer(mod_string=None):
def send_footer(mod_string=None):
- if
globals().
get('debug_cgi', False):
+ if
config_
get('debug_cgi', False):
cgi.print_arguments()
cgi.print_form(form)
cgi.print_environ()
cgi.print_arguments()
cgi.print_form(form)
cgi.print_environ()
@@
-533,7
+537,7
@@
class WikiFormatter:
if hit:
return getattr(self, '_' + rule + '_repl')(hit)
else:
if hit:
return getattr(self, '_' + rule + '_repl')(hit)
else:
- raise
"Can't handle match " + repr(match
)
+ raise
Exception("Can't handle match " + repr(match)
)
def print_html(self):
print('<div class="wiki"><p>')
def print_html(self):
print('<div class="wiki"><p>')
@@
-622,10
+626,10
@@
class Page:
return re.sub('([a-z])([A-Z])', r'\1 \2', self.page_name)
def _filename(self):
return re.sub('([a-z])([A-Z])', r'\1 \2', self.page_name)
def _filename(self):
- return os.path.join(
data_dir
, self.page_name)
+ return os.path.join(
config_get('data_dir', 'data')
, self.page_name)
def _tmp_filename(self):
def _tmp_filename(self):
- return os.path.join(
data_dir
, ('#' + self.page_name.replace('/','_') + '.' + str(os.getpid()) + '#'))
+ return os.path.join(
config_get('data_dir', 'data')
, ('#' + self.page_name.replace('/','_') + '.' + str(os.getpid()) + '#'))
def exists(self):
try:
def exists(self):
try:
@@
-658,9
+662,10
@@
class Page:
for filename in page_list(self._filename(), file_re):
if image_re.match(filename):
for filename in page_list(self._filename(), file_re):
if image_re.match(filename):
- if image_maxwidth:
- maxwidth_arg = ' | maxwidth=' + str(image_maxwidth)
- out += '{{' + self.page_name + '/' + filename + ' | ' + humanlink(filename) + maxwidth_arg + ' | class=thumbleft}}\n'
+ maxwidth = config_get(image_maxwidth, '')
+ if maxwidth:
+ maxwidth = ' | maxwidth=' + str(maxwidth)
+ out += '{{' + self.page_name + '/' + filename + ' | ' + humanlink(filename) + maxwidth + ' | class=thumbleft}}\n'
else:
out += ' * [[' + self.page_name + '/' + filename + ']]\n'
return out
else:
out += ' * [[' + self.page_name + '/' + filename + ']]\n'
return out
@@
-732,7
+737,7
@@
class Page:
if err.errno != errno.ENOENT:
raise err
return None
if err.errno != errno.ENOENT:
raise err
return None
- return strftime(
datetime_fmt
, modtime)
+ return strftime(
config_get(datetime_fmt, '%a %d %b %Y %I:%M %p')
, modtime)
def send_editor(self, preview=None):
send_title(None, 'Edit ' + self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type)
def send_editor(self, preview=None):
send_title(None, 'Edit ' + self.split_title(), msg_text=self.msg_text, msg_type=self.msg_type)
@@
-814,9
+819,12
@@
class Page:
self._write_file(newdata)
rc = 0
self._write_file(newdata)
rc = 0
- if
post_edit_hook
:
+ if
config_get('post_edit_hook')
:
import subprocess
import subprocess
- cmd = [ post_edit_hook, data_dir + '/' + self.page_name, remote_user(), remote_host(), changelog]
+ cmd = [
+ config_get('post_edit_hook'),
+ os.path.join(config_get('data_dir', 'data'), self.page_name), remote_user(),
+ remote_host(), changelog ]
child = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
output = child.stdout.read()
rc = child.wait()
child = subprocess.Popen(cmd, stdout=subprocess.PIPE, close_fds=True)
output = child.stdout.read()
rc = child.wait()