]> git.plutz.net Git - busy/blob - Wiki.page
initial commit
[busy] / Wiki.page
1 #!/bin/zsh
2
3 info="$(egrep -o '(^|&)(i=)[0-9]{10}_[0-9]{3}(&|$)' <<<"${QUERY_STRING}" |tr -d '&i=')"
4 edit="$(egrep -o '(^|&)(e=)[0-9]{10}_[0-9]{3}(&|$)' <<<"${QUERY_STRING}" |tr -d '&e=')"
5 rev="$(egrep -o '(^|&)(r=)[0-9]{10}(&|$)' <<<"${QUERY_STRING}" |tr -d '&r=')"
6 search="$(egrep -o '(^|&)(s=).+(&|$)' <<<"${QUERY_STRING}" |sed -r 's:^&?s=::;s:\+: :g;s:%:\\x:g')"
7 search="$(echo -e "${search}" |sed 's:\t: :g;s:\r::g;s:\\:\\\\:g' |head -n1)"
8
9 [ -n "$rev" ] && rev=".$rev"
10 if [ -n "$search" ]; then
11   info=''
12   edit=''
13   rev=''
14 fi
15
16 lock="Wiki/$info.lock"
17 [ -r "$lock" -o -n "$lock" ] && if [ "$(cut -d: -f2 "$lock")" -lt "$(date +%s)" ]; then
18   rm "$lock"
19   lock=''
20 else
21   lock="$(cut -d: -f1 "$lock")"
22 fi
23
24 if [ -n "$edit" -a -r "Wiki/$edit" ]; then
25   title="$(egrep -x 'title=.+' "Wiki/$edit.meta" |cut -d= -f2- || echo '(Untitled)')"
26   cat <<WikiEND
27     <form class="edit" action="write/scriptedit.cgi?i=$edit" method="post" accept-charset="UTF-8">
28       <div id="RIGHT"></div>
29       <div id="LEFT">
30         Editing <b>$title</b><br>
31         <input type="submit">
32         <input type="submit" name="cancel" value="Cancel">
33         <hr>
34       </div>
35       <div id="MAIN">
36         <div class="wiki">
37           <h1>$title</h1>
38           <textarea name="page" rows=30 cols=40>$(cat "Wiki/$edit")</textarea>
39         </div>
40       </div>
41     </form>
42 WikiEND
43
44 elif [ -n "$info" -a -r "Wiki/${info}${rev}" ]; then
45   title="$(egrep -x 'title=.+' "Wiki/$info.meta" |cut -d= -f2- || echo '(Untitled)')"
46
47   cat <<WikiEND
48     <div id="LEFT">
49       <form method="GET" action="/${SCRIPTNAME}" accept-charset="utf-8">
50         <input type="hidden" name="p" value="Wiki">
51         <input type="text" name="s" placeholder="Search"><br>
52         <input type="submit" value="Search Wiki">
53       </form>
54       <hr>
55
56       <b>Revisions:</b>
57       $(rno=1; for each in Wiki/$info.<0000000000-9999999999>; do
58         revi=$(cut -d. -f2 <<<"$each")
59         echo "<a class='rev' href='?p=Wiki&amp;i=$info&amp;r=$revi'>$rno</a>"
60         rno=$(($rno+1))
61         done) <a class='rev' href='?p=Wiki&amp;i=$info'>Latest</a><br>
62       <hr>
63       $($LOGIN && [ -z "$rev" ] && if [ -z "$lock" ]; then
64           echo "<a class='function' href='write/lock.cgi?p=Wiki&amp;e=$info'>edit this page</a>"
65         else
66           echo "<b>This page is currently being edited by $lock</b><a class='function' href='write/lock.cgi?p=Wiki&amp;e=$info'>edit anyway</a>"
67         fi
68         $LOGIN && echo '<hr>')
69       <h1>Table of Content</h1>
70       <div class="toc">
71         $(cat Wiki/"${info}${rev}" |while read line; do
72         if (egrep -q '^ *!!!' <<<"$line"); then
73           echo "<a class='i2' href='#$(sed 's,^ *!!! *,,;s,[^a-zA-Z0-9],.,g' <<<"$line")'>$(sed 's,^ *!!!,,' <<<"$line")</a><br>"
74         elif (egrep -q '^ *!!' <<<"$line"); then
75           echo "<a class='i1' href='#$(sed 's,^ *!! *,,;s,[^a-zA-Z0-9],.,g' <<<"$line")'>$(sed 's,^ *!!,,' <<<"$line")</a><br>"
76         elif (egrep -q '^ *!' <<<"$line"); then
77           echo "<a class='i0' href='#$(sed 's,^ *! *,,;s,[^a-zA-Z0-9],.,g' <<<"$line")'>$(sed 's,^ *!,,' <<<"$line")</a><br>"
78           fi
79         done)
80       </div>
81       <hr>
82     </div>
83     <div id="MAIN">
84       <div class="wiki">
85         <h1>$title</h1>
86         $(_wiki Wiki/"${info}${rev}")
87       </div>
88     </div>
89 WikiEND
90
91   echo '<div id="RIGHT">'
92 $LOGIN && cat <<WikiEND
93       <a id='comment_button' class='function' href='#' onclick='javascript:show_screen("comment");hide_screen("comment_button");'>Comment / Ask</a>
94       <div id="comment" style="display: none;">
95         <form action="/write/wikimeta.cgi?i=$info" method="post" accept-charset="UTF-8">
96           <b>Comment:</b><br>
97           <textarea name="comm" rows="6" style="width:99%;"></textarea><br>
98           <input type="submit">
99           <a class="function" href="#" onclick="javascript:hide_screen('comment');show_screen('comment_button');">Cancel</a>
100         </form>
101       </div>
102 WikiEND
103   stat -c '' Wiki/${info}.comment.<0000000000-9999999999>_<000-999> && for each in $(ls -c Wiki/${info}.comment.<0000000000-9999999999>_<000-999>); do
104     author=$(grep -m1 '^author=' "$each" |cut -d= -f2-)
105     echo "<div class="comment"><h1>$author wrote:</h1>"
106     tail -n-1 $each
107     echo '</div>'
108   done
109   echo '</div>'
110   
111 elif [ -z "$info" ]; then
112   cat <<WikiEND
113     <div id="LEFT">
114       <form method="GET" action="/${SCRIPTNAME}" accept-charset="utf-8">
115         <input type="hidden" name="p" value="Wiki">
116         <input type="text" name="s" placeholder="Search"><br>
117         <input type="submit" value="Search Wiki">
118       </form>
119       <hr>
120 WikiEND
121   if [ -n "$search" ]; then
122     echo "<h1>Search results for: $search</h1>"
123     for each in $(grep -ile "$search" Wiki/<0000000000-9999999999>_<000-999>); do
124       echo "<div class='search'><a href='?p=Wiki&amp;i=${each:t}'><h2>$(grep '^title=' "$each.meta" |cut -d= -f2-)</h2></a>"
125       grep -C1 -ie "$search" "$each" |sed "s:$search:<b>&</b>:g;s:$:<br>:g"
126       echo '</div>'
127     done
128     echo '<hr>'
129   fi
130   echo '</div><div id="RIGHT">'
131   $LOGIN && cat <<WikiEND
132     <a id='addp_button' class='function' href='#' onclick='javascript:show_screen("add_page");hide_screen("addp_button");'>Add a new Page</a>
133     <div id="add_page" style="display: none;">
134       <form action="/write/wikimeta.cgi" method="post" accept-charset="UTF-8">
135         <br><b>Title:</b><br>
136         <input type="text" name="title" placeholder="Fill in a title"><br>
137         <b>Description:</b><br>
138         <textarea name="desc" rows="6" ></textarea><br>
139         <input type="submit">
140         <a class="function" href="#" onclick="javascript:hide_screen('add_page');show_screen('addp_button');">Cancel</a>
141       </form>
142     </div>
143 WikiEND
144   echo '</div><div id="MAIN">'
145
146   stat -c '' Wiki/<0000000000-9999999999>_<000-999> && for each in Wiki/<0000000000-9999999999>_<000-999>; do
147     info=$(sed 's,Wiki/,,' <<<"$each")
148     title="$(egrep -x 'title=.+' "$each.meta" |cut -d= -f2- || echo '(Untitled)')"
149     description="$(egrep -x 'description=.+' "$each.meta" |cut -d= -f2-)"
150     owner="$(egrep -x 'owner=.+' "$each.meta" |cut -d= -f2-)"
151
152     cat <<WikiEND
153     <div class="article">
154       <div id="display_$info">
155         <a name="$info" href="/?p=Wiki&amp;i=$info"><h1>$title</h1></a>
156         $description<br><br>
157         <a class="function" href="/?p=Wiki&amp;i=$info">View</a> 
158         $($LOGIN && echo "<a class='function' href='#' onclick=\"javascript:show_screen('change_$info');hide_screen('display_$info');\">Change Title</a>")
159       </div>
160 WikiEND
161     $LOGIN && cat <<WikiEND
162       <div id="change_$info" style="display: none;">
163         <form action="/write/wikimeta.cgi?i=$info" method="post" accept-charset="UTF-8">
164           <b>Title:</b> <input type="text" name="title" value="$title"><br>
165           <b>Description:</b><br>
166           <textarea name="desc" rows="6" style="width:100%;">$description</textarea><br>
167           <input type="submit">
168           <a class="function" href="#" onclick="javascript:hide_screen('change_$info');show_screen('display_$info');">Cancel</a>
169         </form>
170       </div>
171 WikiEND
172     echo '</div>'
173   done
174   echo '</div>'
175 fi