Вход Регистрация
Файл: fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js
Строк: 264
<?php

////////////////////////////////////////////////////
// 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 = '&lt;';
                break;
            case ">":
                htmlstr = '&gt;';
                break;
        }
        return htmlstr;
    } else {
        htmlstr = htmlstr.replace( /</g, '&lt' );
        htmlstr = htmlstr.replace( />/g, '&gt' );
        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;
    }
}
?>
Онлайн: 2
Реклама