refactor partial function and code writing specifications
							parent
							
								
									b22c654f0f
								
							
						
					
					
						commit
						682247bff1
					
				|  | @ -30,6 +30,7 @@ function onChooseClick() { | |||
|     isChoose = !isChoose; | ||||
| } | ||||
| 
 | ||||
| if (performance.navigation.type == 1) {        //如果网页刷新,停止播放声音
 | ||||
| // 如果网页刷新,停止播放声音
 | ||||
| if (performance.getEntriesByType("navigation")[0].type == "reload") { | ||||
|     Reader.stopRead(); | ||||
| } | ||||
|  | @ -22,48 +22,38 @@ function getWord() { | |||
| 
 | ||||
| function highLight() { | ||||
|     if (!isHighlight) return; | ||||
|     let articleContent = document.getElementById("article").innerText; | ||||
|     let articleContent = document.getElementById("article").innerHTML; // innerHTML保留HTML标签来保持部分格式,且适配不同的浏览器
 | ||||
|     let pickedWords = document.getElementById("selected-words");  // words picked to the text area
 | ||||
|     let dictionaryWords = document.getElementById("selected-words2"); // words appearing in the user's new words list
 | ||||
|     let allWords = dictionaryWords === null ? pickedWords.value + " " : pickedWords.value + " " + dictionaryWords.value; | ||||
|     const list = allWords.split(" "); // 将所有的生词放入一个list中,用于后续处理
 | ||||
|     const list = allWords.split(" "); // 将所有的生词放入一个list中
 | ||||
|     let totalSet = new Set(); | ||||
|     for (let i = 0; i < list.length; ++i) { | ||||
|         list[i] = list[i].replace(/(^\W*)|(\W*$)/g, ""); // 消除单词两边的非单词字符
 | ||||
|         if (list[i] != "" && "<mark>".indexOf(list[i]) === -1 && "</mark>".indexOf(list[i]) === -1) { | ||||
|         if (list[i] != "" && !totalSet.has(list[i])) { | ||||
|             // 返回所有匹配单词的集合, 正则表达式RegExp()中, "\b"匹配一个单词的边界, g 表示全局匹配, i 表示对大小写不敏感。
 | ||||
|             let matches = new Set(articleContent.match(new RegExp("\\b" + list[i] + "\\b", "gi"))); | ||||
|             for (let word of matches) { | ||||
|                 // 将文章中所有出现该单词word的地方改为:"<mark>" + word + "<mark>"。 
 | ||||
|                 articleContent = articleContent.replace(new RegExp("\\b" + word + "\\b", "g"), "<mark>" + word + "</mark>"); | ||||
|             if (matches.has("mark")) { | ||||
|                 // 优先处理单词为 "mark" 的情况
 | ||||
|                 totalSet = new Set(["mark", ...totalSet]); | ||||
|             } | ||||
|             totalSet = new Set([...totalSet, ...matches]); | ||||
|         } | ||||
|     }  | ||||
|     // 删除所有的mark标签,防止标签发生嵌套
 | ||||
|     articleContent = articleContent.replace(/<(mark)[^>]*>/gi, ""); | ||||
|     articleContent = articleContent.replace(/<(\/mark)[^>]*>/gi, ""); | ||||
|     // 将文章中所有出现该单词word的地方改为:"<mark>" + word + "<mark>"。
 | ||||
|     for (let word of totalSet) { | ||||
|         articleContent = articleContent.replace(new RegExp("\\b" + word + "\\b", "g"), "<mark>" + word + "</mark>"); | ||||
|     } | ||||
|     document.getElementById("article").innerHTML = articleContent; | ||||
| } | ||||
| 
 | ||||
| function cancelHighlighting() { | ||||
|     let articleContent = document.getElementById("article").innerText;//将原来的.innerText改为.innerHtml,原因同上
 | ||||
|     let pickedWords = document.getElementById("selected-words"); | ||||
|     const dictionaryWords = document.getElementById("selected-words2");     | ||||
|     const list = pickedWords.value.split(" ");     | ||||
|     if (pickedWords != null) { | ||||
|         for (let i = 0; i < list.length; ++i) { | ||||
|             list[i] = list[i].replace(/(^\s*)|(\s*$)/g, ""); | ||||
|             if (list[i] !== "") { //原来判断的代码中,替换的内容为“list[i]”这个字符串,这明显是错误的,我们需要替换的是list[i]里的内容
 | ||||
|                 articleContent = articleContent.replace(new RegExp("<mark>"+list[i]+"</mark>", "g"), list[i]); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     if (dictionaryWords != null) { | ||||
|         let list2 = pickedWords.value.split(" "); | ||||
|         for (let i = 0; i < list2.length; ++i) { | ||||
|             list2 = dictionaryWords.value.split(" "); | ||||
|             list2[i] = list2[i].replace(/(^\s*)|(\s*$)/g, ""); | ||||
|             if (list2[i] !== "") { //原来代码中,替换的内容为“list[i]”这个字符串,这明显是错误的,我们需要替换的是list[i]里的内容
 | ||||
|                 articleContent = articleContent.replace(new RegExp("<mark>"+list2[i]+"</mark>", "g"), list2[i]); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     let articleContent = document.getElementById("article").innerHTML; | ||||
|     articleContent = articleContent.replace(/<(mark)[^>]*>/gi, ""); | ||||
|     articleContent = articleContent.replace(/<(\/mark)[^>]*>/gi, ""); | ||||
|     document.getElementById("article").innerHTML = articleContent; | ||||
| } | ||||
| 
 | ||||
|  | @ -85,4 +75,4 @@ function toggleHighlighting() { | |||
|     } | ||||
| } | ||||
| 
 | ||||
| showBtnHandler(); | ||||
| showBtnHandler(); | ||||
|  | @ -9,7 +9,7 @@ var Reader = (function() { | |||
|         msg.rate = rate; | ||||
|         msg.lang = "en-US"; | ||||
|         msg.onboundary = ev => { | ||||
|             if (ev.name == "word") { | ||||
|             if (ev.name === "word") { | ||||
|                 current_position = ev.charIndex; | ||||
|             } | ||||
|         } | ||||
|  | @ -32,4 +32,4 @@ var Reader = (function() { | |||
|         read: read, | ||||
|         stopRead: stopRead | ||||
|     }; | ||||
| })(); | ||||
| }) (); | ||||
|  |  | |||
|  | @ -5,15 +5,14 @@ function familiar(theWord) { | |||
|     $.ajax({ | ||||
|         type:"GET", | ||||
|         url:"/" + username + "/" + word + "/familiar", | ||||
|         success:function(response){ | ||||
|         success:function(response) { | ||||
|             let new_freq = freq - 1; | ||||
|             const allow_move = document.getElementById("move_dynamiclly").checked; | ||||
|             if (allow_move) { | ||||
| 
 | ||||
|                 if (new_freq <= 0) { | ||||
|                     removeWord(theWord); | ||||
|                 } else { | ||||
|                     renderWord({ word: theWord, freq: new_freq }); | ||||
|                     renderWord({word: theWord, freq: new_freq}); | ||||
|                 } | ||||
|             } else { | ||||
|                 if(new_freq <1) { | ||||
|  | @ -33,11 +32,11 @@ function unfamiliar(theWord) { | |||
|     $.ajax({ | ||||
|         type:"GET", | ||||
|         url:"/" + username + "/" + word + "/unfamiliar", | ||||
|         success:function(response){ | ||||
|         success:function(response) { | ||||
|             let new_freq = parseInt(freq) + 1; | ||||
|             const allow_move = document.getElementById("move_dynamiclly").checked; | ||||
|             if (allow_move) { | ||||
|                 renderWord({ word: theWord, freq: new_freq }); | ||||
|                 renderWord({word: theWord, freq: new_freq}); | ||||
|             } else { | ||||
|                 $("#freq_" + theWord).text(new_freq); | ||||
|             } | ||||
|  | @ -51,7 +50,7 @@ function delete_word(theWord) { | |||
|     $.ajax({ | ||||
|         type:"GET", | ||||
|         url:"/" + username + "/" + word + "/del", | ||||
|         success:function(response){ | ||||
|         success:function(response) { | ||||
|             const allow_move = document.getElementById("move_dynamiclly").checked; | ||||
|             if (allow_move) { | ||||
|                 removeWord(theWord); | ||||
|  | @ -114,7 +113,7 @@ function removeWord(word) { | |||
|     // 根据词频信息删除元素
 | ||||
|     word = word.replace('&', '&'); | ||||
|     const element_to_remove = document.getElementById(`p_${word}`); | ||||
|     if (element_to_remove != null) { | ||||
|     if (element_to_remove !== null) { | ||||
|         element_to_remove.remove(); | ||||
|     } | ||||
| } | ||||
|  | @ -129,7 +128,7 @@ function renderWord(word) { | |||
|     for (const current of container.children) { | ||||
|         const cur_word = parseWord(current); | ||||
|         // 找到第一个词频比它小的元素,插入到这个元素前面
 | ||||
|         if (compareWord(cur_word, word) == -1) { | ||||
|         if (compareWord(cur_word, word) === -1) { | ||||
|             container.insertBefore(new_element, current); | ||||
|             inserted = true; | ||||
|             break; | ||||
|  | @ -165,17 +164,11 @@ function elementFromString(string) { | |||
|  *  当first大于second时返回1 | ||||
|  */ | ||||
| function compareWord(first, second) { | ||||
|     if (first.freq < second.freq) { | ||||
|         return -1; | ||||
|     if (first.freq !== second.freq) { | ||||
|         return first.freq < second.freq ? -1 : 1; | ||||
|     } | ||||
|     if (first.freq > second.freq) { | ||||
|         return 1; | ||||
|     } | ||||
|     if (first.word < second.word) { | ||||
|         return -1; | ||||
|     } | ||||
|     if (first.word > second.word) { | ||||
|         return 1; | ||||
|     if (first.word !== second.word) { | ||||
|         return first.word < second.word ? -1 : 1; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue