field_completion.html from AlphaMail at Krugle
Show field_completion.html syntax highlighted
<HTML>
<HEAD>
<STYLE>
.highlight {
color: red;
}
DIV#CompletionBox {
background: rgb(200,200,200);
}
</STYLE>
<SCRIPT TYPE="text/javascript">
function CompletionState()
{
this.visible = false; // Is the field completion visible?
this.item = 0; // Which item is highlighted?
this.words = new Array();
this.xref = new Array();
}
var state = new CompletionState();
var words = new Array("bite my shiny metal butt", "test", "tepid", "help", "would you like", "like", "hello", "world");
function findWords(state, allowed, pattern)
{
var i;
var re = new RegExp("(" + pattern + ")", "i");
var re_valid = new RegExp("^[a-z]", "i");
var n=0;
if(pattern.length < 1 || !re_valid.exec(pattern)) {
state.words = new Array();
return;
}
pattern = pattern.toLowerCase();
state.words = new Array();
state.xref = new Array();
for(i=0; i<allowed.length; i++) {
if(re.exec(allowed[i])) {
state.words[n] = allowed[i];
state.words[n] = state.words[n].replace(re, "<B>$1</B>");
state.xref[n] = i;
n++;
}
}
}
function popup(evt)
{
var f = document.getElementById("header");
var box = document.getElementById("CompletionBox");
var i;
var s = "";
var code;
var cursorpos = f.email.selectionStart;
var val = f.email.value;
var lastcomma = val.lastIndexOf(",");
var re = new RegExp("^(.*, *){0,1}([^,]*)$");
// Cursor must be in proper state: (not highlighting,
// after last comma, at end-of-string)
if(f.email.selectionStart != f.email.selectionEnd ||
lastcomma > cursorpos || cursorpos != val.length) {
window.status = "bad cursor position";
box.innerHTML = "";
state.visible = false;
return;
}
// Get the section of the text-area to complete
var toComplete = val.substring(lastcomma, val.length);
toComplete = toComplete.replace(re, "$2");
window.status = "Trying to complete: " + toComplete;
if(!evt) evt = window.event;
code = evt.keyCode;
switch(code) {
case evt.DOM_VK_UP:
if(state.item > 0) state.item--;
break;
case evt.DOM_VK_DOWN:
if(state.item < words.length-1) state.item++;
break;
case evt.DOM_VK_TAB:
case evt.DOM_VK_ENTER:
case evt.DOM_VK_RETURN:
if(state.visible) {
f.email.value = f.email.value.replace(re, "$1" + words[state.xref[state.item]]);
state.visible = false;
}
break;
default: // Something else...must reset popup
findWords(state, words, toComplete);
if(state.words.length > 0) {
state.visible = true;
state.item = 0;
} else {
state.visible = false;
}
}
if(state.visible) {
s = "";
for(i=0; i<state.words.length; i++) {
if(i == state.item)
s = s + '<SPAN CLASS="highlight">' + state.words[i] +
'</SPAN>' + "<BR>";
else
s = s + state.words[i] + "<BR>";
}
box.innerHTML = s;
} else
box.innerHTML = "";
}
function suppressKeys(event)
{
var code = event.keyCode;
if(state.visible &&
(code == event.DOM_VK_TAB ||
code == event.DOM_VK_UP ||
code == event.DOM_VK_DOWN ||
code == event.DOM_VK_RETURN ||
code == event.DOM_VK_ENTER
)) return false;
return true;
}
</SCRIPT>
</HEAD>
<BODY bgcolor="white">
<FORM ID="header">
<TEXTAREA ROWS=3 COLS=80 NAME="email" onKeyUp="return popup(event);" onKeyPress="return suppressKeys(event);" >
</TEXTAREA>
</FORM>
<DIV ID="CompletionBox" STYLE="position: absolute; width: 300px; background: rgb(200,200,200); top:100; left:100;"></DIV>
</BODY>
</HTML>
See more files for this project here