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
;