1 (edited by 2008-08-11 15:28:48)

Topic: [HACK] Characters left in comments form

Name:  Characters left in comments form
Author: NyNe
CuteNews Compatibility: 1.3.6 - * (no incompatibility reported yet)
Description: Under system configurations you can limit the length of the comments. With this hack you can let users know how many characters they have left.
*UPDATE, YET AGAIN*
the javascript now alerts the user that they had input too much and their text has been shortened
the script no longer displays negetive numbers (because it shortened the length anyways)
Instructions:

Add the following javascript to all pages that have a CN include and are supposed to show a comments form.
<div class='codetop'>CODE</div><div class='codemain' style='height:200px;white-space:pre;overflow:auto'><script type="text/javascript">
var ns6=document.getElementById&&!document.all

function restrictinput(maxlength,e,placeholder){
if (window.event&&event.srcElement.value.length>=maxlength)
return false
else if (e.target&&e.target==eval(placeholder)&&e.target.value.length>=maxlength){
var pressedkey=/[a-zA-Z0-9\.\,\/]/ //detect alphanumeric keys
if (pressedkey.test(String.fromCharCode(e.which)))
e.stopPropagation()
}
}

function countlimit(maxlength,e,placeholder){
var theform=eval(placeholder)
var lengthleft=maxlength-theform.value.length
var placeholderobj=document.all? document.all[placeholder] : document.getElementById(placeholder)
if (window.event||e.target&&e.target==eval(placeholder)){
if (lengthleft<0) {
theform.value=theform.value.substring(0,maxlength)
alert('Your message has been shortened because you entered too much!')
lengthleft=0
}
placeholderobj.innerHTML=lengthleft
}
}


function displaylimit(theform,thelimit){
var limit_text='<span id="'+theform.toString()+'">'+thelimit+'</span> characters remaining'
if (document.all||ns6)
document.write(limit_text)
if (document.all){
eval(theform).onkeypress=function(){ return restrictinput(thelimit,event,theform)}
eval(theform).onkeyup=function(){ countlimit(thelimit,event,theform)}
}
else if (ns6){
document.body.addEventListener('keypress', function(event) { restrictinput(thelimit,event,theform) }, true);
document.body.addEventListener('keyup', function(event) { countlimit(thelimit,event,theform) }, true);
}
}
</script>
</div>

in shows.inc.php find:

$template_form = str_replace("{config_http_script_dir}", "$config_http_script_dir", $template_form);


add below:

$template_form = str_replace("{config_comment_max_long}", "$config_comment_max_long", $template_form);

find in your add comment template:

<textarea cols="40" rows="6" name="comments" tabindex="3"></textarea>


add after:

<script>displaylimit('document.comment.comments',{config_comment_max_long})</script>


you can edit the comment length under System Configuration