diff options
author | Alex Yatskov <alex@foosoft.net> | 2017-03-04 11:45:55 -0800 |
---|---|---|
committer | Alex Yatskov <alex@foosoft.net> | 2017-03-04 11:45:55 -0800 |
commit | b1950cf47eea6e1e4713285fc883ad6c9ac043c6 (patch) | |
tree | 0b4eec95b4519770dfb91ad70f9faaf577b763ab /ext | |
parent | ca6d12dd626ba8da9103525462d59f3d63927a93 (diff) |
prelim search support
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bg/js/search.js | 59 | ||||
-rw-r--r-- | ext/bg/js/yomichan.js | 45 | ||||
-rw-r--r-- | ext/bg/search.html | 13 | ||||
-rw-r--r-- | ext/fg/js/driver.js | 3 | ||||
-rw-r--r-- | ext/fg/js/frame.js | 6 | ||||
-rw-r--r-- | ext/fg/js/util.js | 6 |
6 files changed, 96 insertions, 36 deletions
diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js index 348e7680..9368a3cd 100644 --- a/ext/bg/js/search.js +++ b/ext/bg/js/search.js @@ -17,3 +17,62 @@ */ +function onSearch(e) { + e.preventDefault(); + + instYomi().termsFind($('#query').val()).then(({length, definitions}) => { + const options = instYomi().options; + const params = { + definitions, + grouped: options.general.groupResults, + addable: options.anki.enabled, + playback: options.general.audioPlayback + }; + + return instYomi().textRender('terms.html', params); + }).then(content => { + $('#content').html(content); + }); + + // const sequence = ++this.sequence; + // const params = { + // definitions, + // grouped: options.general.groupResults, + // addable: options.ankiMethod !== 'disabled', + // playback: options.general.audioPlayback + // }; + + // definitions.forEach(definition => { + // definition.sentence = context.sentence; + // definition.url = context.url; + // }); + + // this.definitions = definitions; + // this.showSpinner(false); + // window.scrollTo(0, 0); + + // bgTextRender(params, 'terms.html').then(content => { + // $('#content').html(content); + // $('.action-add-note').click(this.onAddNote.bind(this)); + + // $('.kanji-link').click(e => { + // e.preventDefault(); + // const character = $(e.target).text(); + // bgKanjiFind(character).then(definitions => this.api_showKanjiDefs({definitions, options, context})); + // }); + + // $('.action-play-audio').click(e => { + // e.preventDefault(); + // const index = $(e.currentTarget).data('index'); + // this.playAudio(this.definitions[index]); + // }); + + // this.updateAddNoteButtons(['term_kanji', 'term_kana'], sequence); + // }).catch(error => { + // this.handleError(error); + // }); +} + +$(document).ready(() => { + $('#search').click(onSearch); +}); diff --git a/ext/bg/js/yomichan.js b/ext/bg/js/yomichan.js index 63e3e959..898f2eea 100644 --- a/ext/bg/js/yomichan.js +++ b/ext/bg/js/yomichan.js @@ -126,39 +126,40 @@ class Yomichan { return note; } + termsFind(text) { + const searcher = this.options.general.groupResults ? + this.translator.findTermsGrouped.bind(this.translator) : + this.translator.findTerms.bind(this.translator); + + return searcher(text, dictEnabled(this.options), this.options.general.softKatakana).then(({definitions, length}) => { + return {length, definitions: definitions.slice(0, this.options.general.maxResults)}; + }); + } + + kanjiFind(text) { + return this.translator.findKanji(text, dictEnabled(this.options)).then(definitions => { + return definitions.slice(0, this.options.general.maxResults); + }); + } + + textRender(template, data) { + return Handlebars.templates[template](data); + } + api_optionsGet({callback}) { promiseCallback(optionsLoad(), callback); } api_kanjiFind({text, callback}) { - promiseCallback( - this.translator.findKanji(text, dictEnabled(this.options)).then(definitions => { - return definitions.slice(0, this.options.general.maxResults); - }), - callback - ); + promiseCallback(this.kanjiFind(text), callback); } api_termsFind({text, callback}) { - promiseCallback( - this.translator.findTerms(text, dictEnabled(this.options), this.options.general.softKatakana).then(({definitions, length}) => { - return {length, definitions: definitions.slice(0, this.options.general.maxResults)}; - }), - callback - ); - } - - api_termsFindGrouped({text, callback}) { - promiseCallback( - this.translator.findTermsGrouped(text, dictEnabled(this.options), this.options.general.softKatakana).then(({definitions, length}) => { - return {length, definitions: definitions.slice(0, this.options.general.maxResults)}; - }), - callback - ); + promiseCallback(this.termsFind(text), callback); } api_textRender({template, data, callback}) { - callback({result: Handlebars.templates[template](data)}); + callback({result: this.textRender(template, data)}); } api_definitionAdd({definition, mode, callback}) { diff --git a/ext/bg/search.html b/ext/bg/search.html index 0fbe8699..68bc6e03 100644 --- a/ext/bg/search.html +++ b/ext/bg/search.html @@ -5,19 +5,24 @@ <title>Yomichan Search</title> <link rel="stylesheet" type="text/css" href="../lib/bootstrap-3.3.7-dist/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="../lib/bootstrap-3.3.7-dist/css/bootstrap-theme.min.css"> + <link rel="stylesheet" type="text/css" href="../fg/css/frame.css"> </head> <body> <div class="container-fluid"> <p> - <div class="input-group"> - <input type="text" class="form-control" placeholder="Search for..."> + <form class="input-group"> + <input type="text" class="form-control" placeholder="Search for..." id="query"> <span class="input-group-btn"> - <button class="btn btn-default form-control" type="button">Search</button> + <input type="submit" class="btn btn-default form-control" id="search" value="Search"> </span> - </div> + </form> </p> + + <div id="content"></div> </div> + <script src="../lib/jquery-3.1.1.min.js"></script> <script src="js/gecko.js"></script> + <script src="js/util.js"></script> <script src="js/search.js"></script> </body> </html> diff --git a/ext/fg/js/driver.js b/ext/fg/js/driver.js index c953481e..87cce875 100644 --- a/ext/fg/js/driver.js +++ b/ext/fg/js/driver.js @@ -139,8 +139,7 @@ class Driver { searchTerms(textSource) { textSource.setEndOffset(this.options.scanning.length); - const findFunc = this.options.general.groupResults ? bgTermsFindGrouped : bgTermsFind; - return findFunc(textSource.text()).then(({definitions, length}) => { + return bgTermsFind(textSource.text()).then(({definitions, length}) => { if (definitions.length === 0) { return false; } else { diff --git a/ext/fg/js/frame.js b/ext/fg/js/frame.js index b5077531..32e227d0 100644 --- a/ext/fg/js/frame.js +++ b/ext/fg/js/frame.js @@ -36,7 +36,7 @@ class Frame { const params = { definitions, grouped: options.general.groupResults, - addable: options.ankiMethod !== 'disabled', + addable: options.anki.enabled, playback: options.general.audioPlayback }; @@ -49,7 +49,7 @@ class Frame { this.showSpinner(false); window.scrollTo(0, 0); - bgTextRender(params, 'terms.html').then(content => { + bgTextRender('terms.html', params).then(content => { $('#content').html(content); $('.action-add-note').click(this.onAddNote.bind(this)); @@ -87,7 +87,7 @@ class Frame { this.showSpinner(false); window.scrollTo(0, 0); - bgTextRender(params, 'kanji.html').then(content => { + bgTextRender('kanji.html', params).then(content => { $('#content').html(content); $('.action-add-note').click(this.onAddNote.bind(this)); diff --git a/ext/fg/js/util.js b/ext/fg/js/util.js index 85552a31..c38112f5 100644 --- a/ext/fg/js/util.js +++ b/ext/fg/js/util.js @@ -46,15 +46,11 @@ function bgTermsFind(text) { return bgInvoke('termsFind', {text}); } -function bgTermsFindGrouped(text) { - return bgInvoke('termsFindGrouped', {text}); -} - function bgKanjiFind(text) { return bgInvoke('kanjiFind', {text}); } -function bgTextRender(data, template) { +function bgTextRender(template, data) { return bgInvoke('textRender', {data, template}); } |