Forms-ShoutBox
The design for this ShoutBox is blatant theft from Shoutbox that KMcC did for Fox. Basically it gives a quick chat capability in the sidebar. "Imitation is the sincerest form of flattery..." :-)
This WikiSh version of shoutbox adds the capability of cleaning the comments that occurred more than an hour ago by clicking the "Clean" button. You can also over-ride your nickname...
DEPENDENCY: Toggle - make sure you install this first...
To see it in action go to http://pmwiki.qdk.org and look in the sidebar on the left.
Features:
- Only the last 2 hours of comments are displayed (configurable via argument (# of seconds) to the ListShout MX)
- Resizable comment box using arguments (1st=height, 2nd=width -- include "em" or "px") of the
(:shoutbox ...:)
markup - Capability of cleaning the page of older comments, but option normally hidden
- Option (show/hide-able) to over-ride your nickname (defaults to your author name if you are logged in, defaults to showing the option if you don't have one set)
- Allows you to specify how many lines of history to list (over-rides time limit)
- Scrolling list of comments allows view of history (javascript must be enabled on your browser to scroll to the bottom)
Put the following in WikiSh.WikiShRC:
set -s ShoutPage = "Site.ShoutBox" function ProcShout { # If the user set the nickname on the form, use it if test -n ${shoutname} then set -s --session shoutname = ${shoutname} fi if test -z ${~shoutname} then set -s --session shoutname = {$Author} fi set -s shoutname = ${~shoutname} set -s --form shoutname = ${shoutname} if test -n ${shoutname} then set -s shoutid = "${shoutname}: " else set -s shoutid = "" fi if test -n ${shoutsave} && test -n ${shouttext} then echo "${NOW}: ${shoutid}${shouttext}" >>${ShoutPage} fi } function ListShout { if test -n ${shoutlines} then set lines = ${shoutlines} set deadline = 0 else if test -n ${1} then set lines = ${1} else set lines = 100 fi if test -n "${2}" then set deadline = ${NOW} - ${2} else set deadline = ${NOW} - 7200 fi fi tail -n ${lines} ${ShoutPage} | while read -IFS:": " timestamp rest do if test ${timestamp} >= ${deadline} then echo "${rest}" fi done if test -n ${shoutname} then set -s ShoutShowHide = 'hide' set -s ShoutNameLabel = 'Name:' else set -s ShoutShowHide = 'show' set -s ShoutNameLabel = "'''Name:'''" fi } function CleanShout { if test -z ${shoutclean} then return fi set boundary = ${NOW} - 3600 if test -f Tmp.Shout then rm Tmp.Shout fi cat ${ShoutPage} | while read --IFS:": " time line do if test ${time} -ge ${boundary} then echo "${time}: ${line}" >>Tmp.Shout fi done cat Tmp.Shout >${ShoutPage} }
Put the following in the desired location in the Site.SideBar (or whatever page your skin uses for the sidebar):
(:linebreaks:) (:shoutbox:) {(wikish_form process)}{(wikish ProcShout; CleanShout; ListShout 25 10800)} (:shoutboxend:) (:nolinebreaks:) {(wikish_form QUICKFORM name=shoutbox method=GET)} (:input text shouttext value="" size=30:) (:input submit shoutsave "Shout!":) (:toggle ${ShoutShowHide} box1 button=1 show="More>>" hide="Hide Options" :) >>id=box1 border="1px solid #999" padding=5px bgcolor=#fed<< ${ShoutNameLabel} (:input text shoutname size=18:)\\ Lines to Show: (:input text shoutlines size=3:) (:input submit shoutclean "Clean Old Entries":) >><< (:input end:)
Now put the following markups (for a prettily styled shoutbox, the javascript to scroll to the bottom of the list, etc.) in your config.php:
Markup('shoutbox', '<{$var}', '/\(:shoutbox(?:\s+(\S+)(?:\s+(\S+))?)?:\)/ie', "Keep('<div id=\"shoutbox\" name=\"shoutbox\" style=\"background-color: #ffffa1; width:'.('$1'?'$1':'210px').'; font-size: smaller; height:'.('$2'?'$2':'20em').'; overflow:auto;\" ><span style=\"padding: 0px 4px; background-color: #ffe53e;\">Shout Box</span>')"); Markup('shoutboxend', '>shoutbox', '/\(:shoutboxend:\)/ie', "Keep('</div><script type=\"text/javascript\">o=document.getElementById(\"shoutbox\");o.scrollTop = o.scrollHeight;</script>')");