ref: 99583acd744c7d4d30a222019f8538e54e58942b
parent: 2c8139eb9e6efd5712116299ad0f5ccd0bb4b153
author: uriel <[email protected]>
date: Thu Feb 26 06:50:18 EST 2009
Big overhaul of dirdir rewriting most code to be much simpler, reliable and efficient. Now we have a wiki engine in ~20 lines of code!
--- a/apps/dirdir/app.rc
+++ b/apps/dirdir/app.rc
@@ -1,31 +1,31 @@
fn conf_enable_wiki {
enable_wiki=yes
- wiki_editors_group=$*
+ wiki_editors_groups=$*
conf_enable_app dirdir
}
-
fn dirdir_init {
- if(! ~ $#enable_wiki 0 && check_user $wiki_editors_group) {
- if(test -f $local_path.md)
- ll_add handlers_bar_left dirdir_controls
+ if(! ~ $#enable_wiki 0 && check_user $wiki_editors_groups && test -f $local_path.md) {
+ dirdir_file=$local_path.md
+ dirdir_dir=$dirdir_file^'_werc/dirdir/'
+
+ if(~ $#post_arg_dirdir_save 1 && ! ~ $"post_arg_edit_text '') {
- if(~ $req_path */dirdir_edit && ~ $REQUEST_METHOD POST) {
- get_post_args edit_wiki_page edit_text edit_preview edit_save
- # XXX SECURITY! should sanitize input and ensure we only edit files
- # we are allowed. This is a start, but should be way more careful
- edit_file = `{echo $sitedir/$edit_wiki_page|sed -e 's/\.\.*/./g' -e 's,/$,/index,' | sed 's/$/.md/'}
- tpl=`{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl}
- handler_body_main=(tpl_handler $tpl)
+ dirdir_verdir=$dirdir_dir/^`{date -n}^/
+ mkdir -p $dirdir_verdir
+
+ # XXX Use a tmp file and mv(1) to ensure updates are atomic?
+ echo $logged_user > $dirdir_verdir/author
+ echo $post_arg_edit_text > $dirdir_verdir/data
+ echo $post_arg_edit_text > $dirdir_file
+
+ post_redirect $base_url^$req_path
+ #notify_notes='Saved <a href="'$"req_path'">'$"req_path'</a>!'
}
+ if not if(~ $#post_arg_dirdir_edit 1 || ~ $#post_arg_dirdir_preview 1)
+ handler_body_main=(tpl_handler `{get_lib_file dirdir/edit.tpl apps/dirdir/edit.tpl} )
+ if not if(! ~ $REQUEST_METHOD POST)
+ ll_add handlers_bar_left tpl_handler apps/dirdir/sidebar_controls.tpl
}
-}
-
-fn dirdir_controls {
- # Display 'Edit', 'History', etc, links
- echo '<form action="dirdir_edit" method="POST">'
- echo '<input type="hidden" name="edit_wiki_page" value="'^$req_path^'" />'
- echo '<input type="submit" name="" value="Edit page" />'
- echo '</form>'
}
--- a/apps/dirdir/edit.tpl
+++ b/apps/dirdir/edit.tpl
@@ -1,46 +1,25 @@
-% if(~ $"edit_save '') {
<div>
- <h1>Editing %($edit_wiki_page%)</h1>
+ <h1>Editing: <a href="%($req_path%)">%($req_path%)</a></h1>
<br />
- <form action="dirdir_edit" method="post">
- <input type="hidden" name="edit_wiki_page" value="%($edit_wiki_page%)">
+ <form action="" method="post">
<textarea name="edit_text" id="edit_text" cols="80" rows="43">%{
# FIXME Extra trailing new lines get added to the content somehow, should avoid it.
- if(~ $#edit_text 0 && test -f $edit_file)
- cat $edit_file | escape_html
+ if(~ $#post_arg_edit_text 0 && test -f $dirdir_file)
+ cat $dirdir_file | escape_html
if not
- echo -n $edit_text | escape_html
+ echo -n $post_arg_edit_text | escape_html
%}</textarea>
<br />
- <input type="submit" name="edit_save" value="Save"/>
- <input type="submit" name="edit_preview" value="Preview" />
+ <input type="submit" name="dirdir_save" value="Save"/>
+ <input type="submit" name="dirdir_preview" value="Preview" />
<small>DirDir documents are written using <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a>.</small>
</form>
</div>
-% }
-% if(! ~ $"edit_preview '') {
+% if(! ~ $"post_arg_dirdir_preview '') {
<H2>Preview:</H2>
<div id="preview">
-% echo $edit_text | $formatter
+% echo $post_arg_edit_text | $formatter
</div>
- <hr /><hr />
% }
-% if not if(! ~ $"edit_save '') {
-%{
- dirdir_dir = $edit_file^'_werc/dirdir/'
-
- if(! test -d $dirdir_dir)
- mkdir -p $dirdir_dir
-
- dirdir_verdir = $dirdir_dir/`{date -n}^/
- mkdir $dirdir_verdir
-
- echo $logged_user > $dirdir_verdir/author
- echo $edit_text > $dirdir_verdir/data
- echo $edit_text > $edit_file
-%}
-<h1>Saved <a href="%($edit_wiki_page%)">%($edit_wiki_page%)</a>!</h1>
-% }
-
--- /dev/null
+++ b/apps/dirdir/sidebar_controls.tpl
@@ -1,0 +1,3 @@
+<form action="" method="POST">
+<input type="submit" name="dirdir_edit" value="Edit page" />
+</form>