Mercurial > hg > chronicle
changeset 150:4a882ba147e4
Updated to allow Ajax to be used for comment submission.
author | Steve Kemp <steve@steve.org.uk> |
---|---|
date | Mon, 31 Dec 2007 00:01:51 +0000 |
parents | 88d1f5caebd7 |
children | 0dc1ede3cd09 |
files | cgi-bin/comments.cgi themes/blog.steve.org.uk/ajax.js themes/blog.steve.org.uk/comment-form.inc themes/blog.steve.org.uk/entry.template |
diffstat | 4 files changed, 84 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/cgi-bin/comments.cgi Sun Dec 30 01:37:27 2007 +0000 +++ b/cgi-bin/comments.cgi Mon Dec 31 00:01:51 2007 +0000 @@ -44,11 +44,9 @@ # # The notification addresses - leave blank to disable # -# my $TO = 'weblog@steve.org.uk'; -# my $FROM = 'weblog@steve.org.uk'; +my $TO = 'weblog@steve.org.uk'; +my $FROM = 'weblog@steve.org.uk'; # -my $TO = ''; -my $FROM = ''; @@ -63,7 +61,7 @@ my $body = $cgi->param('body') || undef; my $id = $cgi->param('id') || undef; my $cap = $cgi->param('captcha') || undef; - +my $ajax = $cgi->param( "ajax" ) || 0; # # If any are missing just redirect back to the blog homepage. @@ -73,7 +71,15 @@ !defined( $body ) || !length( $body ) || !defined( $id ) || !length( $id ) ) { - print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n"; + if ( $ajax ) + { + print "Content-type: text/html\n\n"; + print "Missing fields.\n"; + } + else + { + print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n"; + } exit; } @@ -82,7 +88,15 @@ # if ( defined( $cap ) && length( $cap ) ) { - print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n"; + if ( $ajax ) + { + print "Content-type: text/html\n\n"; + print "Missing fields.\n"; + } + else + { + print "Location: http://" . $ENV{'HTTP_HOST'} . "/\n\n"; + } exit; } @@ -134,7 +148,7 @@ # if ( length($TO) && length($FROM) ) { - open ( SENDMAIL, "|/usr/lib/sendmail -t"); + open ( SENDMAIL, "|/usr/lib/sendmail -t -f $FROM"); print SENDMAIL "To: $TO\n"; print SENDMAIL "From: $FROM\n"; print SENDMAIL "Subject: New Comment [$id]\n"; @@ -143,12 +157,21 @@ close ( SENDMAIL ); } - # # Now show the user the thanks message.. # +if ( $cgi->param( "ajax" ) ) +{ + print <<EOF; -print <<EOF; +<p>Thanks for your comment, it will be made live when the queue is moderated next.</p> + +EOF + exit; +} +else +{ + print <<EOF; <html> <head> <title>Thanks For Your Comment</title> @@ -160,4 +183,4 @@ </body> </html> EOF - +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/themes/blog.steve.org.uk/ajax.js Mon Dec 31 00:01:51 2007 +0000 @@ -0,0 +1,44 @@ + +function submitAjax() +{ + var xhr; + try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } + catch (e) + { + try { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } + catch (e2) + { + try { xhr = new XMLHttpRequest(); } + catch (e3) { xhr = false; } + } + } + + xhr.onreadystatechange = function() + { + if(xhr.readyState == 4) + { + if(xhr.status == 200) + { + var o = document.getElementById( "output" ); + o.innerHTML = xhr.responseText; + } + else + { + var o = document.getElementById( "output" ); + o.innerHTML = "Failed HTTP code " + xhr.status + " " + xhr.responseText; + } + } + }; + + data = 'ajax=1'; + data = data + '&id=' + escape(document.forms[0].id.value ); + data = data + '&captcha=' + escape( document.forms[0].captcha.value ); + data = data + '&id=' + escape(document.forms[0].id.value ); + data = data + '&captcha=' + escape( document.forms[0].captcha.value ); + data = data + '&name=' + escape( document.forms[0].name.value ); + data = data + '&mail=' + escape( document.forms[0].mail.value ); + data = data + '&body=' + escape( document.forms[0].body.value ); + xhr.open("POST", "/cgi-bin/comments.cgi", true); + xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + xhr.send(data); +}
--- a/themes/blog.steve.org.uk/comment-form.inc Sun Dec 30 01:37:27 2007 +0000 +++ b/themes/blog.steve.org.uk/comment-form.inc Mon Dec 31 00:01:51 2007 +0000 @@ -1,6 +1,7 @@ <!-- tmpl_if name='comments_enabled' --> <h3>Add A Comment</h3> <blockquote> +<div id="output"> <form action="/cgi-bin/comments.cgi" method="post"> <input type="hidden" name="id" value="<!-- tmpl_var name='link' escape='html' -->"> <input type="hidden" name="captcha" value=""> @@ -12,9 +13,10 @@ <tr><td colspan="2">Your Comment<br /> <textarea name="body" rows="10" cols="60"> </textarea></td></tr> -<tr><td></td><td align="right"><input type="submit" name="submit" value="Post Comment"></td></tr> +<tr><td></td><td align="right"><input type="submit" name="submit" value="Post Comment" onClick="submitAjax(); return false;"></td></tr> </table> </form> <p>Your submission will be ignored if any field is left blank. But your email address will not be displayed.</p> +</div> </blockquote> <!-- /tmpl_if -->
--- a/themes/blog.steve.org.uk/entry.template Sun Dec 30 01:37:27 2007 +0000 +++ b/themes/blog.steve.org.uk/entry.template Mon Dec 31 00:01:51 2007 +0000 @@ -6,6 +6,9 @@ <link rel="stylesheet" type="text/css" media="screen" href="<!-- tmpl_var name='top' -->style.css"> <link rel="stylesheet" href="<!-- tmpl_var name='top' -->bubbles.css" type="text/css" media="screen" charset="utf-8" /> <script type="text/JavaScript" src="<!-- tmpl_var name='top' -->rounded_corners.inc.js"></script> +<!-- tmpl_if name='comments_enabled' --> + <script type="text/JavaScript" src="<!-- tmpl_var name='top' -->ajax.js"></script> +<!-- /tmpl_if --> <script type="text/JavaScript"> window.onload = function() { settings = {