Allow images to be disabled on a per page basis.
diff --git a/fniki/piki.py b/fniki/piki.py --- a/fniki/piki.py +++ b/fniki/piki.py @@ -538,14 +538,14 @@ class PageFormatter: All formatting commands can be parsed one line at a time, though some state is carried over between lines. """ - def __init__(self, raw): + def __init__(self, raw, allow_images): self.raw = raw + self.allow_images = allow_images self.is_em = self.is_b = 0 self.list_indents = [] self.in_pre = 0 self.in_table = 0 - def _emph_repl(self, word): if len(word) == 3: self.is_b = not self.is_b @@ -573,6 +573,9 @@ class PageFormatter: return '<a href="%s">%s</a>' % (scrub(word), word) def _img_repl(self, word): + if not self.allow_images: + return (" <br>[ILLEGAL IMAGE MACRO IN WIKITEXT: " + + " Images are not allowed on this page.]<br> ") # REDFLAG: Can't handle URIs with '|'. Do better. # [[[freenet:keyvalue|alt text|title text]]] word = word[3:-3] # grrrrr... _macro_repl is doing this too. @@ -740,7 +743,7 @@ class PageFormatter: # recursive call to pageformatter to format any code within the table data # is there a better way to do this?? - rval = rval + PageFormatter(line).return_html() + '</td>' + rval = rval + PageFormatter(line, self.allow_images).return_html() + '</td>' colspan = 1 rowspan = 1 @@ -914,15 +917,16 @@ class Page: link = get_scriptname() + '?fullsearch=' + self.wiki_name() send_title(self.split_title(), link, msg, bool(self.version())) + allow_images = not is_no_image(data_dir, self.wiki_name()) if unmodified: - PageFormatter(self.get_raw_body(unmodified)).print_html() + PageFormatter(self.get_raw_body(unmodified), allow_images).print_html() else: if removed: print "<b>Already resolved.</b>" elif resolved: print "<b>Locally marked resolved.</b>" else: - PageFormatter(self.get_raw_body(unmodified)).print_html() + PageFormatter(self.get_raw_body(unmodified), allow_images).print_html() self.send_footer(True, self._last_modified(), @@ -1015,7 +1019,8 @@ class Page: link = get_scriptname() + '?fullsearch=' + self.wiki_name() send_title(self.split_title(), link, msg, bool(self.version())) - PageFormatter(self.get_raw_body(unmodified)).print_html() + PageFormatter(self.get_raw_body(unmodified), + not is_no_image(data_dir, self.wiki_name())).print_html() self.send_footer(False, self._last_modified(), self._text_filename(), unmodified) @@ -1172,6 +1177,17 @@ def is_read_only(base_dir, page_name): finally: in_file.close() +def is_no_image(base_dir, page_name): + full_path = os.path.join(base_dir, 'noimage.txt') + if not os.path.exists(full_path): + return False + in_file = open(full_path, 'rb') + try: + return page_name in [value.strip() + for value in in_file.read().splitlines()] + finally: + in_file.close() + # REDFLAG: Revisit. # Config file is in the directory above the data_dir directory, # so I don't want to depend on that while running.