proc ajax {} {
# Initial call: build page
set ::ajax text/html
set head {
<script src="/javascripts/prototype.js" type="text/javascript"></script>
<script src="/javascripts/scriptaculous.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="/css/scriptaculous.css" />
}
set body {
<input type="text" id="autocomplete" name="autocomplete_parameter"/><div id="autocomplete_choices" class="autocomplete"></div>
<script type="text/javascript" language="javascript" charset="utf-8">
new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/ajax/complete", {});
</script>
}
set result "<html><head>$head</head><body>$body</body></html>"
return $result
}
proc ajax/complete {autocomplete_parameter} {
set ajax/complete text/xml
set result <ul>
foreach cmd [lsort [info commands ${autocomplete_parameter}*]] {
set result [concat $result "<li>$cmd</li>\r\n"]
}
set result [concat $result "</ul>"]
return $result
}
Direct_Url /ajax ::ajaxAnd for nice markup, use the following in httpdocs/css/scriptaculous.css
div.autocomplete {
position:absolute;
width:250px;
background-color:white;
border:1px solid #888;
margin:0px;
padding:0px;
}
div.autocomplete ul {
list-style-type:none;
margin:0px;
padding:0px;
}
div.autocomplete ul li.selected { background-color: #ffb;}
div.autocomplete ul li {
list-style-type:none;
display:block;
margin:0;
padding:2px;
/* height:32px; */
cursor:pointer;
}Now we have a text field with autocompletion on the currently defined Tcl commands.fr gets server-response unknown content-type with scriptaculous-js.1.7.0 and tclhttpd3.5.1 - changing the default request-method POST of prototype.js repairs this. Just use:
new Ajax.Autocompleter("autocomplete", "autocomplete_choices", "/ajax/complete", {}).setRequestMethod("GET");
