1 ////////////////////////////////////////////////////
3 ////////////////////////////////////////////////////
4 function wordWindow() {
9 this._getWordObject = _getWordObject;
10 //this._getSpellerObject = _getSpellerObject;
11 this._wordInputStr = _wordInputStr;
12 this._adjustIndexes = _adjustIndexes;
13 this._isWordChar = _isWordChar;
14 this._lastPos = _lastPos;
17 this.wordChar = /[a-zA-Z]/;
18 this.windowType = "wordWindow";
19 this.originalSpellings = new Array();
20 this.suggestions = new Array();
21 this.checkWordBgColor = "pink";
22 this.normWordBgColor = "white";
24 this.textInputs = new Array();
25 this.indexes = new Array();
26 //this.speller = this._getSpellerObject();
29 this.resetForm = resetForm;
30 this.totalMisspellings = totalMisspellings;
31 this.totalWords = totalWords;
32 this.totalPreviousWords = totalPreviousWords;
33 //this.getTextObjectArray = getTextObjectArray;
34 this.getTextVal = getTextVal;
35 this.setFocus = setFocus;
36 this.removeFocus = removeFocus;
37 this.setText = setText;
38 //this.getTotalWords = getTotalWords;
39 this.writeBody = writeBody;
40 this.printForHtml = printForHtml;
43 function resetForm() {
45 for( var i = 0; i < this._forms.length; i++ ) {
46 this._forms[i].reset();
52 function totalMisspellings() {
54 for( var i = 0; i < this.textInputs.length; i++ ) {
55 total_words += this.totalWords( i );
60 function totalWords( textIndex ) {
61 return this.originalSpellings[textIndex].length;
64 function totalPreviousWords( textIndex, wordIndex ) {
66 for( var i = 0; i <= textIndex; i++ ) {
67 for( var j = 0; j < this.totalWords( i ); j++ ) {
68 if( i == textIndex && j == wordIndex ) {
78 //function getTextObjectArray() {
79 // return this._form.elements;
82 function getTextVal( textIndex, wordIndex ) {
83 var word = this._getWordObject( textIndex, wordIndex );
89 function setFocus( textIndex, wordIndex ) {
90 var word = this._getWordObject( textIndex, wordIndex );
92 if( word.type == "text" ) {
94 word.style.backgroundColor = this.checkWordBgColor;
99 function removeFocus( textIndex, wordIndex ) {
100 var word = this._getWordObject( textIndex, wordIndex );
102 if( word.type == "text" ) {
104 word.style.backgroundColor = this.normWordBgColor;
109 function setText( textIndex, wordIndex, newText ) {
110 var word = this._getWordObject( textIndex, wordIndex );
114 var pos = this.indexes[textIndex][wordIndex];
115 var oldText = word.value;
116 // update the text given the index of the string
117 beginStr = this.textInputs[textIndex].substring( 0, pos );
118 endStr = this.textInputs[textIndex].substring(
119 pos + oldText.length,
120 this.textInputs[textIndex].length
122 this.textInputs[textIndex] = beginStr + newText + endStr;
124 // adjust the indexes on the stack given the differences in
125 // length between the new word and old word.
126 var lengthDiff = newText.length - oldText.length;
127 this._adjustIndexes( textIndex, wordIndex, lengthDiff );
129 word.size = newText.length;
130 word.value = newText;
131 this.removeFocus( textIndex, wordIndex );
136 function writeBody() {
137 var d = window.document;
142 // iterate through each text input.
143 for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
146 d.writeln( '<form name="textInput'+txtid+'">' );
147 var wordtxt = this.textInputs[txtid];
148 this.indexes[txtid] = [];
151 var orig = this.originalSpellings[txtid];
154 //!!! plain text, or HTML mode?
155 d.writeln( '<div class="plainText">' );
156 // iterate through each occurrence of a misspelled word.
157 for( var i = 0; i < orig.length; i++ ) {
158 // find the position of the current misspelled word,
159 // starting at the last misspelled word.
160 // and keep looking if it's a substring of another word
162 begin_idx = wordtxt.indexOf( orig[i], end_idx );
163 end_idx = begin_idx + orig[i].length;
164 // word not found? messed up!
165 if( begin_idx == -1 ) break;
166 // look at the characters immediately before and after
167 // the word. If they are word characters we'll keep looking.
168 var before_char = wordtxt.charAt( begin_idx - 1 );
169 var after_char = wordtxt.charAt( end_idx );
171 this._isWordChar( before_char )
172 || this._isWordChar( after_char )
175 // keep track of its position in the original text.
176 this.indexes[txtid][i] = begin_idx;
178 // write out the characters before the current misspelled word
179 for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
180 // !!! html mode? make it html compatible
181 d.write( this.printForHtml( wordtxt.charAt( j )));
184 // write out the misspelled word.
185 d.write( this._wordInputStr( orig[i] ));
187 // if it's the last word, write out the rest of the text
188 if( i == orig.length-1 ){
189 d.write( printForHtml( wordtxt.substr( end_idx )));
193 d.writeln( '</div>' );
196 d.writeln( '</form>' );
198 //for ( var j = 0; j < d.forms.length; j++ ) {
199 // alert( d.forms[j].name );
200 // for( var k = 0; k < d.forms[j].elements.length; k++ ) {
201 // alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
205 // set the _forms property
206 this._forms = d.forms;
210 // return the character index in the full text after the last word we evaluated
211 function _lastPos( txtid, idx ) {
213 return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
218 function printForHtml( n ) {
220 if( htmlstr.length == 1 ) {
221 // do simple case statement if it's just one character
235 htmlstr = htmlstr.replace( /</g, '<' );
236 htmlstr = htmlstr.replace( />/g, '>' );
237 htmlstr = htmlstr.replace( /\n/g, '<br/>' );
242 function _isWordChar( letter ) {
243 if( letter.search( this.wordChar ) == -1 ) {
250 function _getWordObject( textIndex, wordIndex ) {
251 if( this._forms[textIndex] ) {
252 if( this._forms[textIndex].elements[wordIndex] ) {
253 return this._forms[textIndex].elements[wordIndex];
259 function _wordInputStr( word ) {
260 var str = '<input readonly ';
261 str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '" />';
265 function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
266 for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
267 this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;