wordWindow.js
上传用户:zghglow
上传日期:2022-08-09
资源大小:27227k
文件大小:7k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

JavaScript

  1. ////////////////////////////////////////////////////
  2. // wordWindow object
  3. ////////////////////////////////////////////////////
  4. function wordWindow() {
  5. // private properties
  6. this._forms = [];
  7. // private methods
  8. this._getWordObject = _getWordObject;
  9. //this._getSpellerObject = _getSpellerObject;
  10. this._wordInputStr = _wordInputStr;
  11. this._adjustIndexes = _adjustIndexes;
  12. this._isWordChar = _isWordChar;
  13. this._lastPos = _lastPos;
  14. // public properties
  15. this.wordChar = /[a-zA-Z]/;
  16. this.windowType = "wordWindow";
  17. this.originalSpellings = new Array();
  18. this.suggestions = new Array();
  19. this.checkWordBgColor = "pink";
  20. this.normWordBgColor = "white";
  21. this.text = "";
  22. this.textInputs = new Array();
  23. this.indexes = new Array();
  24. //this.speller = this._getSpellerObject();
  25. // public methods
  26. this.resetForm = resetForm;
  27. this.totalMisspellings = totalMisspellings;
  28. this.totalWords = totalWords;
  29. this.totalPreviousWords = totalPreviousWords;
  30. //this.getTextObjectArray = getTextObjectArray;
  31. this.getTextVal = getTextVal;
  32. this.setFocus = setFocus;
  33. this.removeFocus = removeFocus;
  34. this.setText = setText;
  35. //this.getTotalWords = getTotalWords;
  36. this.writeBody = writeBody;
  37. this.printForHtml = printForHtml;
  38. }
  39. function resetForm() {
  40. if( this._forms ) {
  41. for( var i = 0; i < this._forms.length; i++ ) {
  42. this._forms[i].reset();
  43. }
  44. }
  45. return true;
  46. }
  47. function totalMisspellings() {
  48. var total_words = 0;
  49. for( var i = 0; i < this.textInputs.length; i++ ) {
  50. total_words += this.totalWords( i );
  51. }
  52. return total_words;
  53. }
  54. function totalWords( textIndex ) {
  55. return this.originalSpellings[textIndex].length;
  56. }
  57. function totalPreviousWords( textIndex, wordIndex ) {
  58. var total_words = 0;
  59. for( var i = 0; i <= textIndex; i++ ) {
  60. for( var j = 0; j < this.totalWords( i ); j++ ) {
  61. if( i == textIndex && j == wordIndex ) {
  62. break;
  63. } else {
  64. total_words++;
  65. }
  66. }
  67. }
  68. return total_words;
  69. }
  70. //function getTextObjectArray() {
  71. // return this._form.elements;
  72. //}
  73. function getTextVal( textIndex, wordIndex ) {
  74. var word = this._getWordObject( textIndex, wordIndex );
  75. if( word ) {
  76. return word.value;
  77. }
  78. }
  79. function setFocus( textIndex, wordIndex ) {
  80. var word = this._getWordObject( textIndex, wordIndex );
  81. if( word ) {
  82. if( word.type == "text" ) {
  83. word.focus();
  84. word.style.backgroundColor = this.checkWordBgColor;
  85. }
  86. }
  87. }
  88. function removeFocus( textIndex, wordIndex ) {
  89. var word = this._getWordObject( textIndex, wordIndex );
  90. if( word ) {
  91. if( word.type == "text" ) {
  92. word.blur();
  93. word.style.backgroundColor = this.normWordBgColor;
  94. }
  95. }
  96. }
  97. function setText( textIndex, wordIndex, newText ) {
  98. var word = this._getWordObject( textIndex, wordIndex );
  99. var beginStr;
  100. var endStr;
  101. if( word ) {
  102. var pos = this.indexes[textIndex][wordIndex];
  103. var oldText = word.value;
  104. // update the text given the index of the string
  105. beginStr = this.textInputs[textIndex].substring( 0, pos );
  106. endStr = this.textInputs[textIndex].substring( 
  107. pos + oldText.length, 
  108. this.textInputs[textIndex].length 
  109. );
  110. this.textInputs[textIndex] = beginStr + newText + endStr;
  111. // adjust the indexes on the stack given the differences in 
  112. // length between the new word and old word. 
  113. var lengthDiff = newText.length - oldText.length;
  114. this._adjustIndexes( textIndex, wordIndex, lengthDiff );
  115. word.size = newText.length;
  116. word.value = newText;
  117. this.removeFocus( textIndex, wordIndex );
  118. }
  119. }
  120. function writeBody() {
  121. var d = window.document;
  122. var is_html = false;
  123. d.open();
  124. // iterate through each text input.
  125. for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) {
  126. var end_idx = 0;
  127. var begin_idx = 0;
  128. d.writeln( '<form name="textInput'+txtid+'">' );
  129. var wordtxt = this.textInputs[txtid];
  130. this.indexes[txtid] = [];
  131. if( wordtxt ) {
  132. var orig = this.originalSpellings[txtid];
  133. if( !orig ) break;
  134. //!!! plain text, or HTML mode?
  135. d.writeln( '<div class="plainText">' );
  136. // iterate through each occurrence of a misspelled word. 
  137. for( var i = 0; i < orig.length; i++ ) {
  138. // find the position of the current misspelled word,
  139. // starting at the last misspelled word. 
  140. // and keep looking if it's a substring of another word
  141. do {
  142. begin_idx = wordtxt.indexOf( orig[i], end_idx );
  143. end_idx = begin_idx + orig[i].length;
  144. // word not found? messed up!
  145. if( begin_idx == -1 ) break; 
  146. // look at the characters immediately before and after 
  147. // the word. If they are word characters we'll keep looking.
  148. var before_char = wordtxt.charAt( begin_idx - 1 );
  149. var after_char = wordtxt.charAt( end_idx );
  150. } while ( 
  151. this._isWordChar( before_char ) 
  152. || this._isWordChar( after_char )
  153. );
  154. // keep track of its position in the original text. 
  155. this.indexes[txtid][i] = begin_idx;
  156. // write out the characters before the current misspelled word
  157. for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) {
  158. // !!! html mode? make it html compatible
  159. d.write( this.printForHtml( wordtxt.charAt( j )));
  160. }
  161. // write out the misspelled word. 
  162. d.write( this._wordInputStr( orig[i] ));
  163. // if it's the last word, write out the rest of the text
  164. if( i == orig.length-1 ){
  165. d.write( printForHtml( wordtxt.substr( end_idx )));
  166. }
  167. }
  168. d.writeln( '</div>' );
  169. }
  170. d.writeln( '</form>' );
  171. }
  172. //for ( var j = 0; j < d.forms.length; j++ ) {
  173. // alert( d.forms[j].name );
  174. // for( var k = 0; k < d.forms[j].elements.length; k++ ) {
  175. // alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value );
  176. // }
  177. //}
  178. // set the _forms property
  179. this._forms = d.forms;
  180. d.close();
  181. }
  182. // return the character index in the full text after the last word we evaluated
  183. function _lastPos( txtid, idx ) {
  184. if( idx > 0 )
  185. return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length;
  186. else
  187. return 0;
  188. }
  189. function printForHtml( n ) {
  190. return n ; // by FredCK
  191. var htmlstr = n;
  192. if( htmlstr.length == 1 ) {
  193. // do simple case statement if it's just one character
  194. switch ( n ) {
  195. case "n":
  196. htmlstr = '<br/>';
  197. break;
  198. case "<":
  199. htmlstr = '&lt;';
  200. break;
  201. case ">":
  202. htmlstr = '&gt;';
  203. break;
  204. }
  205. return htmlstr;
  206. } else {
  207. htmlstr = htmlstr.replace( /</g, '&lt' );
  208. htmlstr = htmlstr.replace( />/g, '&gt' );
  209. htmlstr = htmlstr.replace( /n/g, '<br/>' );
  210. return htmlstr;
  211. }
  212. }
  213. function _isWordChar( letter ) {
  214. if( letter.search( this.wordChar ) == -1 ) {
  215. return false;
  216. } else {
  217. return true;
  218. }
  219. }
  220. function _getWordObject( textIndex, wordIndex ) {
  221. if( this._forms[textIndex] ) {
  222. if( this._forms[textIndex].elements[wordIndex] ) {
  223. return this._forms[textIndex].elements[wordIndex];
  224. }
  225. }
  226. return null;
  227. }
  228. function _wordInputStr( word ) {
  229. var str = '<input readonly ';
  230. str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">';
  231. return str;
  232. }
  233. function _adjustIndexes( textIndex, wordIndex, lengthDiff ) {
  234. for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) {
  235. this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff;
  236. }
  237. }