summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2017-03-04 11:45:55 -0800
committerAlex Yatskov <alex@foosoft.net>2017-03-04 11:45:55 -0800
commitb1950cf47eea6e1e4713285fc883ad6c9ac043c6 (patch)
tree0b4eec95b4519770dfb91ad70f9faaf577b763ab
parentca6d12dd626ba8da9103525462d59f3d63927a93 (diff)
prelim search support
-rw-r--r--ext/bg/js/search.js59
-rw-r--r--ext/bg/js/yomichan.js45
-rw-r--r--ext/bg/search.html13
-rw-r--r--ext/fg/js/driver.js3
-rw-r--r--ext/fg/js/frame.js6
-rw-r--r--ext/fg/js/util.js6
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});
}