|
|
@@ -388,7 +388,7 @@ export default {
|
|
|
this.menuPosition.select_node,
|
|
|
this.menuPosition.x,
|
|
|
this.menuPosition.y,
|
|
|
- this.componentId
|
|
|
+ this.componentId,
|
|
|
);
|
|
|
},
|
|
|
handleMouseDown(event) {
|
|
|
@@ -443,7 +443,7 @@ export default {
|
|
|
|
|
|
const selectedText = selection.toString().trim();
|
|
|
const range = selection.getRangeAt(0);
|
|
|
- console.info(selectedText,range)
|
|
|
+ console.info(selectedText, range);
|
|
|
this.showToolbar = true;
|
|
|
const container = document.querySelector('.courserware');
|
|
|
const boxRect = container.getBoundingClientRect();
|
|
|
@@ -485,72 +485,7 @@ export default {
|
|
|
handLocation(item) {
|
|
|
this.scrollToDataId(item.blockId);
|
|
|
},
|
|
|
- getSelectionInfo1() {
|
|
|
- // if (!this.selectedInfo) return;
|
|
|
- // const range = this.selectedInfo.range;
|
|
|
- // let selectedText = this.selectedInfo.text;
|
|
|
-
|
|
|
- const selection = window.getSelection();
|
|
|
- const selectedText = selection.toString().trim();
|
|
|
- const range = selection.getRangeAt(0);
|
|
|
- let commonAncestor = range.commonAncestorContainer;
|
|
|
- if (commonAncestor.nodeType === Node.TEXT_NODE) {
|
|
|
- commonAncestor = commonAncestor.parentNode;
|
|
|
- }
|
|
|
-
|
|
|
- const blockElement = commonAncestor.closest('[data-id]');
|
|
|
- if (!blockElement) return null;
|
|
|
-
|
|
|
- const blockId = blockElement.dataset.id;
|
|
|
-
|
|
|
- // 检查选中的是否是汉字区域
|
|
|
- const startContainer = range.startContainer;
|
|
|
- // eslint-disable-next-line init-declarations
|
|
|
- let startCharElement;
|
|
|
- if (startContainer.nodeType === Node.TEXT_NODE) {
|
|
|
- startCharElement = startContainer.parentElement.closest('.py-char,.rich-text,.NNPE-chs');
|
|
|
- } else {
|
|
|
- // eslint-disable-next-line no-unused-vars
|
|
|
- startCharElement = startContainer.closest('.py-char');
|
|
|
- }
|
|
|
-
|
|
|
- // 获取整个段落的所有汉字文本
|
|
|
- // 获取汉字文本(排除拼音)
|
|
|
- const charElements = blockElement.querySelectorAll('.py-char,.rich-text,.NNPE-chs');
|
|
|
- const fullText = Array.from(charElements)
|
|
|
- .map((el) => {
|
|
|
- if (el.classList.contains('rich-text')) {
|
|
|
- // 获取rich-text里面所有p标签的文字
|
|
|
- const pElements = Array.from(el.querySelectorAll('p'));
|
|
|
- return pElements.map((p) => p.textContent.trim()).join('');
|
|
|
- } else if (el.classList.contains('NNPE-chs')) {
|
|
|
- const pElements = Array.from(el.querySelectorAll('span'));
|
|
|
- pElements.push(el);
|
|
|
- return pElements.map((p) => p.textContent.trim()).join('');
|
|
|
- }
|
|
|
- return el.textContent.trim();
|
|
|
- })
|
|
|
- .filter((text) => text && text !== '\n' && !/^[a-zāáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜü]+$/i.test(text))
|
|
|
- .join('');
|
|
|
-
|
|
|
- // 清理选中文本,只保留汉字
|
|
|
- selectedText = selectedText.replace(/\n/g, '').trim();
|
|
|
- // 进一步过滤,如果选中包含拼音,只取汉字部分
|
|
|
- selectedText = selectedText.replace(/[a-zāáǎàōóǒòēéěèīíǐìūúǔùǖǘǚǜü]/gi, '').trim();
|
|
|
-
|
|
|
- const startIndex = fullText.indexOf(selectedText);
|
|
|
- if (startIndex === -1) return null;
|
|
|
-
|
|
|
- return {
|
|
|
- blockId,
|
|
|
- text: selectedText,
|
|
|
- startIndex,
|
|
|
- endIndex: startIndex + selectedText.length,
|
|
|
- fullText,
|
|
|
- };
|
|
|
- },
|
|
|
getSelectionInfo() {
|
|
|
- debugger
|
|
|
if (!this.selectedInfo) return;
|
|
|
const range = this.selectedInfo.range;
|
|
|
let selectedText = this.selectedInfo.text;
|
|
|
@@ -697,7 +632,7 @@ export default {
|
|
|
const searchStart = Math.max(0, cumulativeLength - selectedText.length * 3);
|
|
|
const searchEnd = Math.min(
|
|
|
fullText.length,
|
|
|
- cumulativeLength + closestFragment.text.length + selectedText.length * 3
|
|
|
+ cumulativeLength + closestFragment.text.length + selectedText.length * 3,
|
|
|
);
|
|
|
|
|
|
const searchArea = fullText.substring(searchStart, searchEnd);
|