diff --git a/client/components/Reader/TextPage/DrawHelper.js b/client/components/Reader/TextPage/DrawHelper.js index f7a36343..acc14c42 100644 --- a/client/components/Reader/TextPage/DrawHelper.js +++ b/client/components/Reader/TextPage/DrawHelper.js @@ -47,16 +47,46 @@ export default class DrawHelper { text: String, } }*/ + let sel = new Set(); + if (i == 0 && this.searching) { + let pureText = ''; + for (const part of line.parts) { + pureText += part.text; + } + + pureText = pureText.toLowerCase(); + let j = 0; + while (1) {// eslint-disable-line no-constant-condition + j = pureText.indexOf(this.needle, j); + if (j >= 0) { + for (let k = 0; k < this.needle.length; k++) { + sel.add(j + k); + } + } else + break; + j++; + } + } let lineText = ''; let center = false; + let j = 0; for (const part of line.parts) { let tOpen = (part.style.bold ? '' : ''); tOpen += (part.style.italic ? '' : ''); let tClose = (part.style.italic ? '' : ''); tClose += (part.style.bold ? '' : ''); - lineText += `${tOpen}${part.text}${tClose}`; + let text = ''; + if (i == 0 && this.searching) { + for (let k = 0; k < part.text.length; k++) { + text += (sel.has(j) ? `${part.text[k]}` : part.text[k]); + j++; + } + } else + text = part.text; + + lineText += `${tOpen}${text}${tClose}`; center = center || part.style.center; } diff --git a/client/components/Reader/TextPage/TextPage.vue b/client/components/Reader/TextPage/TextPage.vue index 52f0f458..ffbb440c 100644 --- a/client/components/Reader/TextPage/TextPage.vue +++ b/client/components/Reader/TextPage/TextPage.vue @@ -436,15 +436,7 @@ class TextPage extends Vue { } startSearch(needle) { - this.drawHelper.needle = ''; - const words = needle.split(' '); - for (const word of words) { - if (word != '') { - this.drawHelper.needle = word; - break; - } - } - + this.drawHelper.needle = needle; this.drawHelper.searching = true; this.draw(); }