enable and disable via toggle switch
This commit is contained in:
parent
b9c849a020
commit
5ecca4627e
@ -20,15 +20,10 @@
|
|||||||
// General
|
// General
|
||||||
//
|
//
|
||||||
|
|
||||||
function yomichan() {
|
|
||||||
return chrome.extension.getBackgroundPage().yomichan;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getFormData() {
|
function getFormData() {
|
||||||
return optionsLoad().then(optionsOld => {
|
return optionsLoad().then(optionsOld => {
|
||||||
const optionsNew = $.extend(true, {}, optionsOld);
|
const optionsNew = $.extend(true, {}, optionsOld);
|
||||||
|
|
||||||
optionsNew.general.enable = $('#enable-search').prop('checked');
|
|
||||||
optionsNew.general.audioPlayback = $('#audio-playback-buttons').prop('checked');
|
optionsNew.general.audioPlayback = $('#audio-playback-buttons').prop('checked');
|
||||||
optionsNew.general.groupResults = $('#group-terms-results').prop('checked');
|
optionsNew.general.groupResults = $('#group-terms-results').prop('checked');
|
||||||
optionsNew.general.softKatakana = $('#soft-katakana-search').prop('checked');
|
optionsNew.general.softKatakana = $('#soft-katakana-search').prop('checked');
|
||||||
@ -87,7 +82,6 @@ $(document).ready(() => {
|
|||||||
Handlebars.partials = Handlebars.templates;
|
Handlebars.partials = Handlebars.templates;
|
||||||
|
|
||||||
optionsLoad().then(options => {
|
optionsLoad().then(options => {
|
||||||
$('#enable-search').prop('checked', options.general.enable);
|
|
||||||
$('#audio-playback-buttons').prop('checked', options.general.audioPlayback);
|
$('#audio-playback-buttons').prop('checked', options.general.audioPlayback);
|
||||||
$('#group-terms-results').prop('checked', options.general.groupResults);
|
$('#group-terms-results').prop('checked', options.general.groupResults);
|
||||||
$('#soft-katakana-search').prop('checked', options.general.softKatakana);
|
$('#soft-katakana-search').prop('checked', options.general.softKatakana);
|
||||||
@ -123,10 +117,6 @@ $(document).ready(() => {
|
|||||||
// Dictionary
|
// Dictionary
|
||||||
//
|
//
|
||||||
|
|
||||||
function database() {
|
|
||||||
return yomichan().translator.database;
|
|
||||||
}
|
|
||||||
|
|
||||||
function showDictionaryError(error) {
|
function showDictionaryError(error) {
|
||||||
const dialog = $('#dict-error');
|
const dialog = $('#dict-error');
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -153,7 +143,7 @@ function populateDictionaries(options) {
|
|||||||
const dictWarning = $('#dict-warning').hide();
|
const dictWarning = $('#dict-warning').hide();
|
||||||
|
|
||||||
let dictCount = 0;
|
let dictCount = 0;
|
||||||
return database().getDictionaries().then(rows => {
|
return getDatabase().getDictionaries().then(rows => {
|
||||||
rows.forEach(row => {
|
rows.forEach(row => {
|
||||||
const dictOptions = options.dictionaries[row.title] || {enableTerms: false, enableKanji: false, priority: 0};
|
const dictOptions = options.dictionaries[row.title] || {enableTerms: false, enableKanji: false, priority: 0};
|
||||||
const html = Handlebars.templates['dictionary.html']({
|
const html = Handlebars.templates['dictionary.html']({
|
||||||
@ -188,7 +178,7 @@ function onDictionaryPurge(e) {
|
|||||||
const dictControls = $('#dict-importer, #dict-groups').hide();
|
const dictControls = $('#dict-importer, #dict-groups').hide();
|
||||||
const dictProgress = $('#dict-purge-progress').show();
|
const dictProgress = $('#dict-purge-progress').show();
|
||||||
|
|
||||||
return database().purge().catch(showDictionaryError).then(() => {
|
return getDatabase().purge().catch(showDictionaryError).then(() => {
|
||||||
showDictionarySpinner(false);
|
showDictionarySpinner(false);
|
||||||
dictControls.show();
|
dictControls.show();
|
||||||
dictProgress.hide();
|
dictProgress.hide();
|
||||||
@ -197,7 +187,7 @@ function onDictionaryPurge(e) {
|
|||||||
options.dictionaries = {};
|
options.dictionaries = {};
|
||||||
return optionsSave(options).then(() => {
|
return optionsSave(options).then(() => {
|
||||||
populateDictionaries(options);
|
populateDictionaries(options);
|
||||||
yomichan().setOptions(options);
|
getYomichan().setOptions(options);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -214,9 +204,9 @@ function onDictionaryImport() {
|
|||||||
setProgress(0.0);
|
setProgress(0.0);
|
||||||
|
|
||||||
optionsLoad().then(options => {
|
optionsLoad().then(options => {
|
||||||
database().importDictionary(dictUrl.val(), (total, current) => setProgress(current / total * 100.0)).then(summary => {
|
getDatabase().importDictionary(dictUrl.val(), (total, current) => setProgress(current / total * 100.0)).then(summary => {
|
||||||
options.dictionaries[summary.title] = {enabled: true, priority: 0};
|
options.dictionaries[summary.title] = {enabled: true, priority: 0};
|
||||||
return optionsSave(options).then(() => yomichan().setOptions(options));
|
return optionsSave(options).then(() => getYomichan().setOptions(options));
|
||||||
}).then(() => populateDictionaries(options)).catch(showDictionaryError).then(() => {
|
}).then(() => populateDictionaries(options)).catch(showDictionaryError).then(() => {
|
||||||
showDictionarySpinner(false);
|
showDictionarySpinner(false);
|
||||||
dictProgress.hide();
|
dictProgress.hide();
|
||||||
@ -249,10 +239,6 @@ function onDictionaryUpdateUrl() {
|
|||||||
// Anki
|
// Anki
|
||||||
//
|
//
|
||||||
|
|
||||||
function anki() {
|
|
||||||
return yomichan().anki;
|
|
||||||
}
|
|
||||||
|
|
||||||
function showAnkiSpinner(show) {
|
function showAnkiSpinner(show) {
|
||||||
const spinner = $('#anki-spinner');
|
const spinner = $('#anki-spinner');
|
||||||
if (show) {
|
if (show) {
|
||||||
@ -286,7 +272,7 @@ function populateAnkiDeckAndModel(options) {
|
|||||||
showAnkiSpinner(true);
|
showAnkiSpinner(true);
|
||||||
|
|
||||||
const ankiFormat = $('#anki-format').hide();
|
const ankiFormat = $('#anki-format').hide();
|
||||||
return Promise.all([anki().getDeckNames(), anki().getModelNames()]).then(([deckNames, modelNames]) => {
|
return Promise.all([getAnki().getDeckNames(), getAnki().getModelNames()]).then(([deckNames, modelNames]) => {
|
||||||
const ankiDeck = $('.anki-deck');
|
const ankiDeck = $('.anki-deck');
|
||||||
ankiDeck.find('option').remove();
|
ankiDeck.find('option').remove();
|
||||||
deckNames.sort().forEach(name => ankiDeck.append($('<option/>', {value: name, text: name})));
|
deckNames.sort().forEach(name => ankiDeck.append($('<option/>', {value: name, text: name})));
|
||||||
@ -320,7 +306,7 @@ function populateAnkiFields(element, options) {
|
|||||||
'kanji': ['character', 'dictionary', 'glossary', 'kunyomi', 'onyomi', 'sentence', 'tags', 'url']
|
'kanji': ['character', 'dictionary', 'glossary', 'kunyomi', 'onyomi', 'sentence', 'tags', 'url']
|
||||||
}[tabId] || {};
|
}[tabId] || {};
|
||||||
|
|
||||||
return anki().getModelFieldNames(modelName).then(names => {
|
return getAnki().getModelFieldNames(modelName).then(names => {
|
||||||
names.forEach(name => {
|
names.forEach(name => {
|
||||||
const value = options.anki[tabId].fields[name] || '';
|
const value = options.anki[tabId].fields[name] || '';
|
||||||
const html = Handlebars.templates['model.html']({name, markers, value});
|
const html = Handlebars.templates['model.html']({name, markers, value});
|
||||||
@ -351,7 +337,7 @@ function onAnkiModelChanged(e) {
|
|||||||
|
|
||||||
optionsNew.anki[tabId].fields = {};
|
optionsNew.anki[tabId].fields = {};
|
||||||
populateAnkiFields(element, optionsNew).then(() => {
|
populateAnkiFields(element, optionsNew).then(() => {
|
||||||
optionsSave(optionsNew).then(() => yomichan().setOptions(optionsNew));
|
optionsSave(optionsNew).then(() => getYomichan().setOptions(optionsNew));
|
||||||
}).catch(showAnkiError).then(() => showAnkiSpinner(false));
|
}).catch(showAnkiError).then(() => showAnkiSpinner(false));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -363,7 +349,7 @@ function onOptionsChanged(e) {
|
|||||||
|
|
||||||
getFormData().then(({optionsNew, optionsOld}) => {
|
getFormData().then(({optionsNew, optionsOld}) => {
|
||||||
return optionsSave(optionsNew).then(() => {
|
return optionsSave(optionsNew).then(() => {
|
||||||
yomichan().setOptions(optionsNew);
|
getYomichan().setOptions(optionsNew);
|
||||||
updateVisibility(optionsNew);
|
updateVisibility(optionsNew);
|
||||||
|
|
||||||
const ankiUpdated =
|
const ankiUpdated =
|
||||||
|
@ -145,3 +145,15 @@ function optionsSave(options) {
|
|||||||
chrome.storage.sync.set(options, resolve);
|
chrome.storage.sync.set(options, resolve);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function optionsEnabledDicts(options) {
|
||||||
|
const dictionaries = {};
|
||||||
|
for (const title in options.dictionaries) {
|
||||||
|
const dictionary = options.dictionaries[title];
|
||||||
|
if (dictionary.enabled) {
|
||||||
|
dictionaries[title] = dictionary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return dictionaries;
|
||||||
|
}
|
||||||
|
@ -20,5 +20,14 @@ $(document).ready(() => {
|
|||||||
$('#open-search').click(() => window.open(chrome.extension.getURL('bg/search.html')));
|
$('#open-search').click(() => window.open(chrome.extension.getURL('bg/search.html')));
|
||||||
$('#open-options').click(() => chrome.runtime.openOptionsPage());
|
$('#open-options').click(() => chrome.runtime.openOptionsPage());
|
||||||
$('#open-help').click(() => window.open('http://foosoft.net/projects/yomichan'));
|
$('#open-help').click(() => window.open('http://foosoft.net/projects/yomichan'));
|
||||||
});
|
|
||||||
|
|
||||||
|
optionsLoad().then(options => {
|
||||||
|
const toggle = $('#enable-search');
|
||||||
|
toggle.prop('checked', options.general.enable).change();
|
||||||
|
toggle.bootstrapToggle();
|
||||||
|
toggle.change(() => {
|
||||||
|
options.general.enable = toggle.prop('checked');
|
||||||
|
optionsSave(options).then(() => getYomichan().setOptions(options));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
@ -17,7 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
function kanjiLinks(options) {
|
function helperKanjiLinks(options) {
|
||||||
|
const isKanji = c => {
|
||||||
|
const code = c.charCodeAt(0);
|
||||||
|
return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0;
|
||||||
|
};
|
||||||
|
|
||||||
let result = '';
|
let result = '';
|
||||||
for (const c of options.fn(this)) {
|
for (const c of options.fn(this)) {
|
||||||
if (isKanji(c)) {
|
if (isKanji(c)) {
|
||||||
@ -30,27 +35,10 @@ function kanjiLinks(options) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function multiLine(options) {
|
function helperMultiLine(options) {
|
||||||
return options.fn(this).split('\n').join('<br>');
|
return options.fn(this).split('\n').join('<br>');
|
||||||
}
|
}
|
||||||
|
|
||||||
function isKanji(c) {
|
|
||||||
const code = c.charCodeAt(0);
|
|
||||||
return code >= 0x4e00 && code < 0x9fb0 || code >= 0x3400 && code < 0x4dc0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function enabledDicts(options) {
|
|
||||||
const dictionaries = {};
|
|
||||||
for (const title in options.dictionaries) {
|
|
||||||
const dictionary = options.dictionaries[title];
|
|
||||||
if (dictionary.enabled) {
|
|
||||||
dictionaries[title] = dictionary;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dictionaries;
|
|
||||||
}
|
|
||||||
|
|
||||||
function promiseCallback(promise, callback) {
|
function promiseCallback(promise, callback) {
|
||||||
return promise.then(result => {
|
return promise.then(result => {
|
||||||
callback({result});
|
callback({result});
|
||||||
@ -62,6 +50,18 @@ function promiseCallback(promise, callback) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getYomichan() {
|
||||||
|
return chrome.extension.getBackgroundPage().yomichan;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDatabase() {
|
||||||
|
return getYomichan().translator.database;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAnki() {
|
||||||
|
return getYomichan().anki;
|
||||||
|
}
|
||||||
|
|
||||||
function sortTermDefs(definitions, dictionaries=null) {
|
function sortTermDefs(definitions, dictionaries=null) {
|
||||||
return definitions.sort((v1, v2) => {
|
return definitions.sort((v1, v2) => {
|
||||||
const sl1 = v1.source.length;
|
const sl1 = v1.source.length;
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
class Yomichan {
|
class Yomichan {
|
||||||
constructor() {
|
constructor() {
|
||||||
Handlebars.partials = Handlebars.templates;
|
Handlebars.partials = Handlebars.templates;
|
||||||
Handlebars.registerHelper('kanjiLinks', kanjiLinks);
|
Handlebars.registerHelper('kanjiLinks', helperKanjiLinks);
|
||||||
Handlebars.registerHelper('multiLine', multiLine);
|
Handlebars.registerHelper('multiLine', helperMultiLine);
|
||||||
|
|
||||||
this.translator = new Translator();
|
this.translator = new Translator();
|
||||||
this.anki = new AnkiNull();
|
this.anki = new AnkiNull();
|
||||||
@ -132,7 +132,7 @@ class Yomichan {
|
|||||||
|
|
||||||
api_findKanji({text, callback}) {
|
api_findKanji({text, callback}) {
|
||||||
promiseCallback(
|
promiseCallback(
|
||||||
this.translator.findKanji(text, enabledDicts(this.options)).then(definitions => {
|
this.translator.findKanji(text, optionsEnabledDicts(this.options)).then(definitions => {
|
||||||
return definitions.slice(0, this.options.general.maxResults);
|
return definitions.slice(0, this.options.general.maxResults);
|
||||||
}),
|
}),
|
||||||
callback
|
callback
|
||||||
@ -141,7 +141,7 @@ class Yomichan {
|
|||||||
|
|
||||||
api_findTerms({text, callback}) {
|
api_findTerms({text, callback}) {
|
||||||
promiseCallback(
|
promiseCallback(
|
||||||
this.translator.findTerms(text, enabledDicts(this.options), this.options.general.softKatakana).then(({definitions, length}) => {
|
this.translator.findTerms(text, optionsEnabledDicts(this.options), this.options.general.softKatakana).then(({definitions, length}) => {
|
||||||
return {length, definitions: definitions.slice(0, this.options.general.maxResults)};
|
return {length, definitions: definitions.slice(0, this.options.general.maxResults)};
|
||||||
}),
|
}),
|
||||||
callback
|
callback
|
||||||
@ -150,7 +150,7 @@ class Yomichan {
|
|||||||
|
|
||||||
api_findTermsGrouped({text, callback}) {
|
api_findTermsGrouped({text, callback}) {
|
||||||
promiseCallback(
|
promiseCallback(
|
||||||
this.translator.findTermsGrouped(text, enabledDicts(this.options), this.options.general.softKatakana).then(({definitions, length}) => {
|
this.translator.findTermsGrouped(text, optionsEnabledDicts(this.options), this.options.general.softKatakana).then(({definitions, length}) => {
|
||||||
return {length, definitions: definitions.slice(0, this.options.general.maxResults)};
|
return {length, definitions: definitions.slice(0, this.options.general.maxResults)};
|
||||||
}),
|
}),
|
||||||
callback
|
callback
|
||||||
|
@ -25,10 +25,6 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3>General Options</h3>
|
<h3>General Options</h3>
|
||||||
|
|
||||||
<div class="checkbox">
|
|
||||||
<label><input type="checkbox" id="enable-search"> Enable search</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label><input type="checkbox" id="audio-playback-buttons"> Audio playback buttons</label>
|
<label><input type="checkbox" id="audio-playback-buttons"> Audio playback buttons</label>
|
||||||
</div>
|
</div>
|
||||||
@ -242,6 +238,7 @@
|
|||||||
<script src="../lib/handlebars.min.js"></script>
|
<script src="../lib/handlebars.min.js"></script>
|
||||||
<script src="js/templates.js"></script>
|
<script src="js/templates.js"></script>
|
||||||
<script src="js/gecko.js"></script>
|
<script src="js/gecko.js"></script>
|
||||||
|
<script src="js/util.js"></script>
|
||||||
<script src="js/options.js"></script>
|
<script src="js/options.js"></script>
|
||||||
<script src="js/options-form.js"></script>
|
<script src="js/options-form.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -18,18 +18,20 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>
|
<p>
|
||||||
<input type="checkbox" data-toggle="toggle">
|
<input type="checkbox" id="enable-search">
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<div class="btn-group" style="white-space: nowrap">
|
<div class="btn-group" style="white-space: nowrap">
|
||||||
<button type="button" id="open-search" class="btn btn-default btn-xs glyphicon glyphicon-search"></button>
|
<button type="button" id="open-search" title="Search" class="btn btn-default btn-xs glyphicon glyphicon-search"></button>
|
||||||
<button type="button" id="open-options" class="btn btn-default btn-xs glyphicon glyphicon-cog"></button>
|
<button type="button" id="open-options" title="Options" class="btn btn-default btn-xs glyphicon glyphicon-wrench"></button>
|
||||||
<button type="button" id="open-help" class="btn btn-default btn-xs glyphicon glyphicon-question-sign"></button>
|
<button type="button" id="open-help" title="Help" class="btn btn-default btn-xs glyphicon glyphicon-question-sign"></button>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</p>
|
||||||
<script src="../lib/jquery-3.1.1.min.js"></script>
|
<script src="../lib/jquery-3.1.1.min.js"></script>
|
||||||
<script src="../lib/bootstrap-toggle/bootstrap-toggle.min.js"></script>
|
<script src="../lib/bootstrap-toggle/bootstrap-toggle.min.js"></script>
|
||||||
<script src="js/gecko.js"></script>
|
<script src="js/gecko.js"></script>
|
||||||
|
<script src="js/util.js"></script>
|
||||||
|
<script src="js/options.js"></script>
|
||||||
<script src="js/popup.js"></script>
|
<script src="js/popup.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user