wordWindow.js
上传用户:dbstep
上传日期:2022-08-06
资源大小:2803k
文件大小:7k
- ////////////////////////////////////////////////////
- // wordWindow object
- ////////////////////////////////////////////////////
- function wordWindow() {
- // private properties
- this._forms = [];
- // private methods
- this._getWordObject = _getWordObject;
- //this._getSpellerObject = _getSpellerObject;
- this._wordInputStr = _wordInputStr;
- this._adjustIndexes = _adjustIndexes;
- this._isWordChar = _isWordChar;
- this._lastPos = _lastPos;
- // public properties
- this.wordChar = /[a-zA-Z]/;
- this.windowType = "wordWindow";
- this.originalSpellings = new Array();
- this.suggestions = new Array();
- this.checkWordBgColor = "pink";
- this.normWordBgColor = "white";
- this.text = "";
- this.textInputs = new Array();
- this.indexes = new Array();
- //this.speller = this._getSpellerObject();
- // public methods
- this.resetForm = resetForm;
- this.totalMisspellings = totalMisspellings;
- this.totalWords = totalWords;
- this.totalPreviousWords = totalPreviousWords;
- //this.getTextObjectArray = getTextObjectArray;
- this.getTextVal = getTextVal;
- this.setFocus = setFocus;
- this.removeFocus = removeFocus;
- this.setText = setText;
- //this.getTotalWords = getTotalWords;
- this.writeBody = writeBody;
- this.printForHtml = printForHtml;
- }
- function resetForm() {
- if( this._forms ) {
- for( var i = 0; i < this._forms.length; i++ ) {
- this._forms[i].reset();
- }
- }
- return true;
- }
- function totalMisspellings() {
- var total_words = 0;
- for( var i = 0; i < this.textInputs.length; i++ ) {
- total_words += this.totalWords( i );
- }
- return total_words;
- }
- function totalWords( textIndex ) {
- return this.originalSpellings[textIndex].length;
- }
- function totalPreviousWords( textIndex, wordIndex ) {
- var total_words = 0;
- for( var i = 0; i <= textIndex; i++ ) {
- for( var j = 0; j < this.totalWords( i ); j++ ) {
- if( i == textIndex && j == wordIndex ) {
- break;
- } else {
- total_words++;
- }
- }
- }
- return total_words;
- }
- //function getTextObjectArray() {
- // return this._form.elements;
- //}
- function getTextVal( textIndex, wordIndex ) {
- var word = this._getWordObject( textIndex, wordIndex );
- if( word ) {
- return word.value;
- }
- }
- function setFocus( textIndex, wordIndex ) {
- var word = this._getWordObject( textIndex, wordIndex );
- if( word ) {
- if( word.type == "text" ) {
- word.focus();
- word.style.backgroundColor = this.checkWordBgColor;
- }
- }
- }
- function removeFocus( textIndex, wordIndex ) {
- var word = this._getWordObject( textIndex, wordIndex );
- if( word ) {
- if( word.type == "text" ) {
- word.blur();
- word.style.backgroundColor = this.normWordBgColor;
- }
- }
- }
- function setText( textIndex, wordIndex, newText ) {
- var word = this._getWordObject( textIndex, wordIndex );
- var beginStr;
- var endStr;
- if( word ) {
- var pos = this.indexes[textIndex][wordIndex];
- var oldText = word.value;
- // update the text given the index of the string
- beginStr = this.textInputs[textIndex].substring( 0, pos );
- endStr = this.textInputs[textIndex].substring(
- pos + oldText.length,
- this.textInputs[textIndex].length
- );
- this.textInputs[textIndex] = beginStr + newText + endStr;
- // adjust the indexes on the stack given the differences in
- // length between the new word and old word.
- var lengthDiff = newText.length - oldText.length;
- this._adjustIndexes( textIndex, wordIndex, lengthDiff );
- word.size = newText.length;
- word.value = newText;
- this.removeFocus( textIndex, wordIndex );
- }
- }
- function writeBody() {
- var d = window.document;
- var is_html = false;
- d.open();
- // iterate through each text input.
- for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
- var end_idx = 0;
- var begin_idx = 0;
- d.writeln( '<form name="textInput'+txtid+'">' );
- var wordtxt = this.textInputs[txtid];
- this.indexes[txtid] = [];
- if( wordtxt ) {
- var orig = this.originalSpellings[txtid];
- if( !orig ) break;
- //!!! plain text, or HTML mode?
- d.writeln( '<div class="plainText">' );
- // iterate through each occurrence of a misspelled word.
- for( var i = 0; i < orig.length; i++ ) {
- // find the position of the current misspelled word,
- // starting at the last misspelled word.
- // and keep looking if it's a substring of another word
- do {
- begin_idx = wordtxt.indexOf( orig[i], end_idx );
- end_idx = begin_idx + orig[i].length;
- // word not found? messed up!
- if( begin_idx == -1 ) break;
- // look at the characters immediately before and after
- // the word. If they are word characters we'll keep looking.
- var before_char = wordtxt.charAt( begin_idx - 1 );
- var after_char = wordtxt.charAt( end_idx );
- } while (
- this._isWordChar( before_char )
- || this._isWordChar( after_char )
- );
- // keep track of its position in the original text.
- this.indexes[txtid][i] = begin_idx;
- // write out the characters before the current misspelled word
- for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
- // !!! html mode? make it html compatible
- d.write( this.printForHtml( wordtxt.charAt( j )));
- }
- // write out the misspelled word.
- d.write( this._wordInputStr( orig[i] ));
- // if it's the last word, write out the rest of the text
- if( i == orig.length-1 ){
- d.write( printForHtml( wordtxt.substr( end_idx )));
- }
- }
- d.writeln( '</div>' );
- }
- d.writeln( '</form>' );
- }
- //for ( var j = 0; j < d.forms.length; j++ ) {
- // alert( d.forms[j].name );
- // for( var k = 0; k < d.forms[j].elements.length; k++ ) {
- // alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
- // }
- //}
- // set the _forms property
- this._forms = d.forms;
- d.close();
- }
- // return the character index in the full text after the last word we evaluated
- function _lastPos( txtid, idx ) {
- if( idx > 0 )
- return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
- else
- return 0;
- }
- function printForHtml( n ) {
- return n ; // by FredCK
- /*
- var htmlstr = n;
- if( htmlstr.length == 1 ) {
- // do simple case statement if it's just one character
- switch ( n ) {
- case "n":
- htmlstr = '<br/>';
- break;
- case "<":
- htmlstr = '<';
- break;
- case ">":
- htmlstr = '>';
- break;
- }
- return htmlstr;
- } else {
- htmlstr = htmlstr.replace( /</g, '<' );
- htmlstr = htmlstr.replace( />/g, '>' );
- htmlstr = htmlstr.replace( /n/g, '<br/>' );
- return htmlstr;
- }
- */
- }
- function _isWordChar( letter ) {
- if( letter.search( this.wordChar ) == -1 ) {
- return false;
- } else {
- return true;
- }
- }
- function _getWordObject( textIndex, wordIndex ) {
- if( this._forms[textIndex] ) {
- if( this._forms[textIndex].elements[wordIndex] ) {
- return this._forms[textIndex].elements[wordIndex];
- }
- }
- return null;
- }
- function _wordInputStr( word ) {
- var str = '<input readonly ';
- str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
- return str;
- }
- function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
- for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
- this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
- }
- }