diff options
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/query-parser-generator.js | 91 | ||||
-rw-r--r-- | ext/bg/js/query-parser.js | 79 |
2 files changed, 74 insertions, 96 deletions
diff --git a/ext/bg/js/query-parser-generator.js b/ext/bg/js/query-parser-generator.js deleted file mode 100644 index 34923c1d..00000000 --- a/ext/bg/js/query-parser-generator.js +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2020 Yomichan Authors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - -class QueryParserGenerator { - createParseResult(terms, preview) { - const type = preview ? 'preview' : 'normal'; - const fragment = document.createDocumentFragment(); - for (const term of terms) { - const termNode = document.createElement('span'); - termNode.className = 'query-parser-term'; - termNode.dataset.type = type; - for (const segment of term) { - if (segment.reading.trim().length === 0) { - this._addSegmentText(segment.text, termNode); - } else { - termNode.appendChild(this._createSegment(segment)); - } - } - fragment.appendChild(termNode); - } - return fragment; - } - - createParserSelect(parseResults, selectedParser) { - const select = document.createElement('select'); - select.className = 'query-parser-select form-control'; - for (const parseResult of parseResults) { - const option = document.createElement('option'); - option.className = 'query-parser-select-option'; - option.value = parseResult.id; - switch (parseResult.source) { - case 'scanning-parser': - option.textContent = 'Scanning parser'; - break; - case 'mecab': - option.textContent = `MeCab: ${parseResult.dictionary}`; - break; - default: - option.textContent = 'Unrecognized dictionary'; - break; - } - option.defaultSelected = selectedParser === parseResult.id; - select.appendChild(option); - } - return select; - } - - // Private - - _createSegment(segment) { - const segmentNode = document.createElement('ruby'); - segmentNode.className = 'query-parser-segment'; - - const textNode = document.createElement('span'); - textNode.className = 'query-parser-segment-text'; - - const readingNode = document.createElement('rt'); - readingNode.className = 'query-parser-segment-reading'; - - segmentNode.appendChild(textNode); - segmentNode.appendChild(readingNode); - - this._addSegmentText(segment.text, textNode); - readingNode.textContent = segment.reading; - - return segmentNode; - } - - _addSegmentText(text, container) { - for (const character of text) { - const node = document.createElement('span'); - node.className = 'query-parser-char'; - node.textContent = character; - container.appendChild(node); - } - } -} diff --git a/ext/bg/js/query-parser.js b/ext/bg/js/query-parser.js index 8f17a5c1..698a5cfe 100644 --- a/ext/bg/js/query-parser.js +++ b/ext/bg/js/query-parser.js @@ -16,7 +16,6 @@ */ /* global - * QueryParserGenerator * TextScanner * api */ @@ -31,7 +30,6 @@ class QueryParser extends EventDispatcher { this._parseResults = []; this._queryParser = document.querySelector('#query-parser-content'); this._queryParserSelect = document.querySelector('#query-parser-select-container'); - this._queryParserGenerator = new QueryParserGenerator(); this._textScanner = new TextScanner({ node: this._queryParser, ignoreElements: () => [], @@ -126,14 +124,14 @@ class QueryParser extends EventDispatcher { _setPreview(text) { const terms = [[{text, reading: ''}]]; this._queryParser.textContent = ''; - this._queryParser.appendChild(this._queryParserGenerator.createParseResult(terms, true)); + this._queryParser.appendChild(this._createParseResult(terms, true)); } _renderParserSelect() { this._queryParserSelect.textContent = ''; if (this._parseResults.length > 1) { const selectedParser = this._selectedParser; - const select = this._queryParserGenerator.createParserSelect(this._parseResults, selectedParser); + const select = this._createParserSelect(this._parseResults, selectedParser); select.addEventListener('change', this._onParserChange.bind(this)); this._queryParserSelect.appendChild(select); } @@ -143,6 +141,77 @@ class QueryParser extends EventDispatcher { const parseResult = this._getParseResult(); this._queryParser.textContent = ''; if (!parseResult) { return; } - this._queryParser.appendChild(this._queryParserGenerator.createParseResult(parseResult.content, false)); + this._queryParser.appendChild(this._createParseResult(parseResult.content, false)); + } + + _createParserSelect(parseResults, selectedParser) { + const select = document.createElement('select'); + select.className = 'query-parser-select form-control'; + for (const parseResult of parseResults) { + const option = document.createElement('option'); + option.className = 'query-parser-select-option'; + option.value = parseResult.id; + switch (parseResult.source) { + case 'scanning-parser': + option.textContent = 'Scanning parser'; + break; + case 'mecab': + option.textContent = `MeCab: ${parseResult.dictionary}`; + break; + default: + option.textContent = 'Unrecognized dictionary'; + break; + } + option.defaultSelected = selectedParser === parseResult.id; + select.appendChild(option); + } + return select; + } + + _createParseResult(terms, preview) { + const type = preview ? 'preview' : 'normal'; + const fragment = document.createDocumentFragment(); + for (const term of terms) { + const termNode = document.createElement('span'); + termNode.className = 'query-parser-term'; + termNode.dataset.type = type; + for (const segment of term) { + if (segment.reading.trim().length === 0) { + this._addSegmentText(segment.text, termNode); + } else { + termNode.appendChild(this._createSegment(segment)); + } + } + fragment.appendChild(termNode); + } + return fragment; + } + + _createSegment(segment) { + const segmentNode = document.createElement('ruby'); + segmentNode.className = 'query-parser-segment'; + + const textNode = document.createElement('span'); + textNode.className = 'query-parser-segment-text'; + + const readingNode = document.createElement('rt'); + readingNode.className = 'query-parser-segment-reading'; + + segmentNode.appendChild(textNode); + segmentNode.appendChild(readingNode); + + this._addSegmentText(segment.text, textNode); + readingNode.textContent = segment.reading; + + return segmentNode; + } + + _addSegmentText(text, container) { + for (const character of text) { + const node = document.createElement('span'); + node.className = 'query-parser-char'; + node.textContent = character; + container.appendChild(node); + } } } |