aboutsummaryrefslogtreecommitdiff
path: root/ext/bg
diff options
context:
space:
mode:
Diffstat (limited to 'ext/bg')
-rw-r--r--ext/bg/background.html2
-rw-r--r--ext/bg/context.html2
-rw-r--r--ext/bg/js/backend.js7
-rw-r--r--ext/bg/js/options.js7
-rw-r--r--ext/bg/js/search.js2
-rw-r--r--ext/bg/js/settings.js59
-rw-r--r--ext/bg/js/util.js16
-rw-r--r--ext/bg/lang/deinflect.json818
-rw-r--r--ext/bg/search.html2
-rw-r--r--ext/bg/settings.html36
10 files changed, 916 insertions, 35 deletions
diff --git a/ext/bg/background.html b/ext/bg/background.html
index 3262f2a1..5978f10f 100644
--- a/ext/bg/background.html
+++ b/ext/bg/background.html
@@ -10,6 +10,8 @@
<script src="/mixed/lib/jszip.min.js"></script>
<script src="/mixed/lib/wanakana.min.js"></script>
+ <script src="/mixed/js/extension.js"></script>
+
<script src="/bg/js/anki.js"></script>
<script src="/bg/js/api.js"></script>
<script src="/bg/js/audio.js"></script>
diff --git a/ext/bg/context.html b/ext/bg/context.html
index 01b4fb30..198ccd42 100644
--- a/ext/bg/context.html
+++ b/ext/bg/context.html
@@ -32,6 +32,8 @@
<script src="/mixed/lib/jquery.min.js"></script>
<script src="/mixed/lib/bootstrap-toggle/bootstrap-toggle.min.js"></script>
+ <script src="/mixed/js/extension.js"></script>
+
<script src="/bg/js/api.js"></script>
<script src="/bg/js/options.js"></script>
<script src="/bg/js/util.js"></script>
diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js
index d49286d0..d95cb82d 100644
--- a/ext/bg/js/backend.js
+++ b/ext/bg/js/backend.js
@@ -57,9 +57,10 @@ class Backend {
this.anki = new AnkiNull();
}
+ const callback = () => this.checkLastError(chrome.runtime.lastError);
chrome.tabs.query({}, tabs => {
for (const tab of tabs) {
- chrome.tabs.sendMessage(tab.id, {action: 'optionsSet', params: options}, () => null);
+ chrome.tabs.sendMessage(tab.id, {action: 'optionsSet', params: options}, callback);
}
});
}
@@ -147,6 +148,10 @@ class Backend {
chrome.browserAction.setBadgeText({text});
}
}
+
+ checkLastError(e) {
+ // NOP
+ }
}
window.yomichan_backend = new Backend();
diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js
index 29d8a215..7d993987 100644
--- a/ext/bg/js/options.js
+++ b/ext/bg/js/options.js
@@ -199,6 +199,10 @@ function optionsSetDefaults(options) {
popupHeight: 250,
popupHorizontalOffset: 0,
popupVerticalOffset: 10,
+ popupHorizontalOffset2: 10,
+ popupVerticalOffset2: 0,
+ popupHorizontalTextPosition: 'below',
+ popupVerticalTextPosition: 'before',
showGuide: true,
compactTags: false,
compactGlossaries: false,
@@ -214,7 +218,8 @@ function optionsSetDefaults(options) {
autoHideResults: false,
delay: 20,
length: 10,
- modifier: 'shift'
+ modifier: 'shift',
+ deepDomScan: false
},
dictionaries: {},
diff --git a/ext/bg/js/search.js b/ext/bg/js/search.js
index f08f22da..a3382398 100644
--- a/ext/bg/js/search.js
+++ b/ext/bg/js/search.js
@@ -25,7 +25,7 @@ class DisplaySearch extends Display {
this.query = $('#query').on('input', this.onSearchInput.bind(this));
this.intro = $('#intro');
- this.dependencies = {...this.dependencies, ...{docRangeFromPoint, docSentenceExtract}};
+ this.dependencies = Object.assign({}, this.dependencies, {docRangeFromPoint, docSentenceExtract});
window.wanakana.bind(this.query.get(0));
}
diff --git a/ext/bg/js/settings.js b/ext/bg/js/settings.js
index 75082f3e..f5d669b2 100644
--- a/ext/bg/js/settings.js
+++ b/ext/bg/js/settings.js
@@ -32,10 +32,14 @@ async function formRead() {
optionsNew.general.showAdvanced = $('#show-advanced-options').prop('checked');
optionsNew.general.maxResults = parseInt($('#max-displayed-results').val(), 10);
optionsNew.general.popupDisplayMode = $('#popup-display-mode').val();
+ optionsNew.general.popupHorizontalTextPosition = $('#popup-horizontal-text-position').val();
+ optionsNew.general.popupVerticalTextPosition = $('#popup-vertical-text-position').val();
optionsNew.general.popupWidth = parseInt($('#popup-width').val(), 10);
optionsNew.general.popupHeight = parseInt($('#popup-height').val(), 10);
optionsNew.general.popupHorizontalOffset = parseInt($('#popup-horizontal-offset').val(), 0);
optionsNew.general.popupVerticalOffset = parseInt($('#popup-vertical-offset').val(), 10);
+ optionsNew.general.popupHorizontalOffset2 = parseInt($('#popup-horizontal-offset2').val(), 0);
+ optionsNew.general.popupVerticalOffset2 = parseInt($('#popup-vertical-offset2').val(), 10);
optionsNew.general.customPopupCss = $('#custom-popup-css').val();
optionsNew.scanning.middleMouse = $('#middle-mouse-button-scan').prop('checked');
@@ -43,6 +47,7 @@ async function formRead() {
optionsNew.scanning.selectText = $('#select-matched-text').prop('checked');
optionsNew.scanning.alphanumeric = $('#search-alphanumeric').prop('checked');
optionsNew.scanning.autoHideResults = $('#auto-hide-results').prop('checked');
+ optionsNew.scanning.deepDomScan = $('#deep-dom-scan').prop('checked');
optionsNew.scanning.delay = parseInt($('#scan-delay').val(), 10);
optionsNew.scanning.length = parseInt($('#scan-length').val(), 10);
optionsNew.scanning.modifier = $('#scan-modifier-key').val();
@@ -116,7 +121,7 @@ async function formMainDictionaryOptionsPopulate(options) {
select.append($('<option class="text-muted" value="">Not selected</option>'));
let mainDictionary = '';
- for (const dictRow of await utilDatabaseSummarize()) {
+ for (const dictRow of toIterable(await utilDatabaseSummarize())) {
if (dictRow.sequenced) {
select.append($(`<option value="${dictRow.title}">${dictRow.title}</option>`));
if (dictRow.title === options.general.mainDictionary) {
@@ -168,10 +173,14 @@ async function onReady() {
$('#show-advanced-options').prop('checked', options.general.showAdvanced);
$('#max-displayed-results').val(options.general.maxResults);
$('#popup-display-mode').val(options.general.popupDisplayMode);
+ $('#popup-horizontal-text-position').val(options.general.popupHorizontalTextPosition);
+ $('#popup-vertical-text-position').val(options.general.popupVerticalTextPosition);
$('#popup-width').val(options.general.popupWidth);
$('#popup-height').val(options.general.popupHeight);
$('#popup-horizontal-offset').val(options.general.popupHorizontalOffset);
$('#popup-vertical-offset').val(options.general.popupVerticalOffset);
+ $('#popup-horizontal-offset2').val(options.general.popupHorizontalOffset2);
+ $('#popup-vertical-offset2').val(options.general.popupVerticalOffset2);
$('#custom-popup-css').val(options.general.customPopupCss);
$('#middle-mouse-button-scan').prop('checked', options.scanning.middleMouse);
@@ -179,6 +188,7 @@ async function onReady() {
$('#select-matched-text').prop('checked', options.scanning.selectText);
$('#search-alphanumeric').prop('checked', options.scanning.alphanumeric);
$('#auto-hide-results').prop('checked', options.scanning.autoHideResults);
+ $('#deep-dom-scan').prop('checked', options.scanning.deepDomScan);
$('#scan-delay').val(options.scanning.delay);
$('#scan-length').val(options.scanning.length);
$('#scan-modifier-key').val(options.scanning.modifier);
@@ -314,12 +324,12 @@ async function dictionaryGroupsPopulate(options) {
const dictGroups = $('#dict-groups').empty();
const dictWarning = $('#dict-warning').hide();
- const dictRows = await utilDatabaseSummarize();
+ const dictRows = toIterable(await utilDatabaseSummarize());
if (dictRows.length === 0) {
dictWarning.show();
}
- for (const dictRow of dictRowsSort(dictRows, options)) {
+ for (const dictRow of toIterable(dictRowsSort(dictRows, options))) {
const dictOptions = options.dictionaries[dictRow.title] || {
enabled: false,
priority: 0,
@@ -581,26 +591,25 @@ async function onAnkiFieldTemplatesReset(e) {
*/
async function getBrowser() {
- if (typeof chrome !== "undefined") {
- if (typeof browser !== "undefined") {
- try {
- const info = await browser.runtime.getBrowserInfo();
- if (info.name === "Fennec") {
- return "firefox-mobile";
- }
- } catch (e) { }
- return "firefox";
- } else {
- return "chrome";
- }
+ if (EXTENSION_IS_BROWSER_EDGE) {
+ return 'edge';
+ }
+ if (typeof browser !== 'undefined') {
+ try {
+ const info = await browser.runtime.getBrowserInfo();
+ if (info.name === 'Fennec') {
+ return 'firefox-mobile';
+ }
+ } catch (e) { }
+ return 'firefox';
} else {
- return "edge";
+ return 'chrome';
}
}
function storageBytesToLabeledString(size) {
const base = 1000;
- const labels = ["bytes", "KB", "MB", "GB"];
+ const labels = ['bytes', 'KB', 'MB', 'GB'];
let labelIndex = 0;
while (size >= base) {
size /= base;
@@ -620,14 +629,14 @@ storageEstimate.mostRecent = null;
async function storageInfoInitialize() {
const browser = await getBrowser();
- const container = document.querySelector("#storage-info");
- container.setAttribute("data-browser", browser);
+ const container = document.querySelector('#storage-info');
+ container.setAttribute('data-browser', browser);
await storageShowInfo();
- container.classList.remove("storage-hidden");
+ container.classList.remove('storage-hidden');
- document.querySelector("#storage-refresh").addEventListener('click', () => storageShowInfo(), false);
+ document.querySelector('#storage-refresh').addEventListener('click', () => storageShowInfo(), false);
}
async function storageUpdateStats() {
@@ -637,8 +646,8 @@ async function storageUpdateStats() {
const valid = (estimate !== null);
if (valid) {
- document.querySelector("#storage-usage").textContent = storageBytesToLabeledString(estimate.usage);
- document.querySelector("#storage-quota").textContent = storageBytesToLabeledString(estimate.quota);
+ document.querySelector('#storage-usage').textContent = storageBytesToLabeledString(estimate.usage);
+ document.querySelector('#storage-quota').textContent = storageBytesToLabeledString(estimate.quota);
}
storageUpdateStats.isUpdating = false;
@@ -650,8 +659,8 @@ async function storageShowInfo() {
storageSpinnerShow(true);
const valid = await storageUpdateStats();
- document.querySelector("#storage-use").classList.toggle("storage-hidden", !valid);
- document.querySelector("#storage-error").classList.toggle("storage-hidden", valid);
+ document.querySelector('#storage-use').classList.toggle('storage-hidden', !valid);
+ document.querySelector('#storage-error').classList.toggle('storage-hidden', valid);
storageSpinnerShow(false);
}
diff --git a/ext/bg/js/util.js b/ext/bg/js/util.js
index 34b06ddb..3dc7c900 100644
--- a/ext/bg/js/util.js
+++ b/ext/bg/js/util.js
@@ -87,6 +87,20 @@ function utilDatabasePurge() {
return utilBackend().translator.database.purge();
}
-function utilDatabaseImport(data, progress, exceptions) {
+async function utilDatabaseImport(data, progress, exceptions) {
+ // Edge cannot read data on the background page due to the File object
+ // being created from a different window. Read on the same page instead.
+ if (EXTENSION_IS_BROWSER_EDGE) {
+ data = await utilReadFile(data);
+ }
return utilBackend().translator.database.importDictionary(data, progress, exceptions);
}
+
+function utilReadFile(file) {
+ return new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.onload = () => resolve(reader.result);
+ reader.onerror = () => reject(reader.error);
+ reader.readAsBinaryString(file);
+ });
+}
diff --git a/ext/bg/lang/deinflect.json b/ext/bg/lang/deinflect.json
index 7ee00b2f..7a68ea71 100644
--- a/ext/bg/lang/deinflect.json
+++ b/ext/bg/lang/deinflect.json
@@ -784,6 +784,150 @@
"rulesOut": [
"adj-i"
]
+ },
+ {
+ "kanaIn": "のたもうたら",
+ "kanaOut": "のたまう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "いったら",
+ "kanaOut": "いく",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "おうたら",
+ "kanaOut": "おう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "こうたら",
+ "kanaOut": "こう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "そうたら",
+ "kanaOut": "そう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "とうたら",
+ "kanaOut": "とう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "行ったら",
+ "kanaOut": "行く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "逝ったら",
+ "kanaOut": "逝く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "往ったら",
+ "kanaOut": "往く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "請うたら",
+ "kanaOut": "請う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "乞うたら",
+ "kanaOut": "乞う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "恋うたら",
+ "kanaOut": "恋う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "問うたら",
+ "kanaOut": "問う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "負うたら",
+ "kanaOut": "負う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "沿うたら",
+ "kanaOut": "沿う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "添うたら",
+ "kanaOut": "添う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "副うたら",
+ "kanaOut": "副う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "厭うたら",
+ "kanaOut": "厭う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
}
],
"-tari": [
@@ -891,6 +1035,150 @@
"rulesOut": [
"adj-i"
]
+ },
+ {
+ "kanaIn": "のたもうたり",
+ "kanaOut": "のたまう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "いったり",
+ "kanaOut": "いく",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "おうたり",
+ "kanaOut": "おう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "こうたり",
+ "kanaOut": "こう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "そうたり",
+ "kanaOut": "そう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "とうたり",
+ "kanaOut": "とう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "行ったり",
+ "kanaOut": "行く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "逝ったり",
+ "kanaOut": "逝く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "往ったり",
+ "kanaOut": "往く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "請うたり",
+ "kanaOut": "請う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "乞うたり",
+ "kanaOut": "乞う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "恋うたり",
+ "kanaOut": "恋う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "問うたり",
+ "kanaOut": "問う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "負うたり",
+ "kanaOut": "負う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "沿うたり",
+ "kanaOut": "沿う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "添うたり",
+ "kanaOut": "添う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "副うたり",
+ "kanaOut": "副う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "厭うたり",
+ "kanaOut": "厭う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
}
],
"-te": [
@@ -998,6 +1286,150 @@
"rulesOut": [
"v5"
]
+ },
+ {
+ "kanaIn": "のたもうて",
+ "kanaOut": "のたまう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "いって",
+ "kanaOut": "いく",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "おうて",
+ "kanaOut": "おう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "こうて",
+ "kanaOut": "こう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "そうて",
+ "kanaOut": "そう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "とうて",
+ "kanaOut": "とう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "行って",
+ "kanaOut": "行く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "逝って",
+ "kanaOut": "逝く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "往って",
+ "kanaOut": "往く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "請うて",
+ "kanaOut": "請う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "乞うて",
+ "kanaOut": "乞う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "恋うて",
+ "kanaOut": "恋う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "問うて",
+ "kanaOut": "問う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "負うて",
+ "kanaOut": "負う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "沿うて",
+ "kanaOut": "沿う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "添うて",
+ "kanaOut": "添う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "副うて",
+ "kanaOut": "副う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "厭うて",
+ "kanaOut": "厭う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
}
],
"-zu": [
@@ -1251,6 +1683,16 @@
]
},
{
+ "kanaIn": "させる",
+ "kanaOut": "す",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
"kanaIn": "たせる",
"kanaOut": "つ",
"rulesIn": [
@@ -1498,6 +1940,14 @@
]
},
{
+ "kanaIn": "き",
+ "kanaOut": "くる",
+ "rulesIn": [],
+ "rulesOut": [
+ "vk"
+ ]
+ },
+ {
"kanaIn": "ぎ",
"kanaOut": "ぎる",
"rulesIn": [],
@@ -1881,6 +2331,16 @@
]
},
{
+ "kanaIn": "される",
+ "kanaOut": "す",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
"kanaIn": "たれる",
"kanaOut": "つ",
"rulesIn": [
@@ -1929,12 +2389,10 @@
"rulesOut": [
"v5"
]
- }
- ],
- "passive or causative": [
+ },
{
- "kanaIn": "される",
- "kanaOut": "す",
+ "kanaIn": "られる",
+ "kanaOut": "る",
"rulesIn": [
"v1"
],
@@ -2048,6 +2506,150 @@
"rulesOut": [
"adj-i"
]
+ },
+ {
+ "kanaIn": "のたもうた",
+ "kanaOut": "のたまう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "いった",
+ "kanaOut": "いく",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "おうた",
+ "kanaOut": "おう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "こうた",
+ "kanaOut": "こう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "そうた",
+ "kanaOut": "そう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "とうた",
+ "kanaOut": "とう",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "行った",
+ "kanaOut": "行く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "逝った",
+ "kanaOut": "逝く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "往った",
+ "kanaOut": "往く",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "請うた",
+ "kanaOut": "請う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "乞うた",
+ "kanaOut": "乞う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "恋うた",
+ "kanaOut": "恋う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "問うた",
+ "kanaOut": "問う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "負うた",
+ "kanaOut": "負う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "沿うた",
+ "kanaOut": "沿う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "添うた",
+ "kanaOut": "添う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "副うた",
+ "kanaOut": "副う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "厭うた",
+ "kanaOut": "厭う",
+ "rulesIn": [],
+ "rulesOut": [
+ "v5"
+ ]
}
],
"polite": [
@@ -2674,7 +3276,6 @@
],
"rulesOut": [
"v1",
- "v5",
"vk"
]
},
@@ -2787,5 +3388,210 @@
"vs"
]
}
+ ],
+ "causative passive": [
+ {
+ "kanaIn": "かされる",
+ "kanaOut": "く",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "がされる",
+ "kanaOut": "ぐ",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "たされる",
+ "kanaOut": "つ",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "なされる",
+ "kanaOut": "ぬ",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "ばされる",
+ "kanaOut": "ぶ",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "まされる",
+ "kanaOut": "む",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "らされる",
+ "kanaOut": "る",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "わされる",
+ "kanaOut": "う",
+ "rulesIn": [
+ "v1"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ }
+ ],
+ "-toku": [
+ {
+ "kanaIn": "いとく",
+ "kanaOut": "く",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "いどく",
+ "kanaOut": "ぐ",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "きとく",
+ "kanaOut": "くる",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "vk"
+ ]
+ },
+ {
+ "kanaIn": "しとく",
+ "kanaOut": "す",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "しとく",
+ "kanaOut": "する",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "vs"
+ ]
+ },
+ {
+ "kanaIn": "っとく",
+ "kanaOut": "う",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "っとく",
+ "kanaOut": "つ",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "っとく",
+ "kanaOut": "る",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "んどく",
+ "kanaOut": "ぬ",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "んどく",
+ "kanaOut": "ぶ",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "んどく",
+ "kanaOut": "む",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v5"
+ ]
+ },
+ {
+ "kanaIn": "とく",
+ "kanaOut": "る",
+ "rulesIn": [
+ "v5"
+ ],
+ "rulesOut": [
+ "v1",
+ "vk"
+ ]
+ }
]
}
diff --git a/ext/bg/search.html b/ext/bg/search.html
index ce156578..05c0daab 100644
--- a/ext/bg/search.html
+++ b/ext/bg/search.html
@@ -37,6 +37,8 @@
<script src="/mixed/lib/jquery.min.js"></script>
<script src="/mixed/lib/wanakana.min.js"></script>
+ <script src="/mixed/js/extension.js"></script>
+
<script src="/bg/js/api.js"></script>
<script src="/bg/js/audio.js"></script>
<script src="/bg/js/dictionary.js"></script>
diff --git a/ext/bg/settings.html b/ext/bg/settings.html
index c6677018..cc140023 100644
--- a/ext/bg/settings.html
+++ b/ext/bg/settings.html
@@ -107,6 +107,28 @@
</select>
</div>
+ <div class="form-group">
+ <div class="row">
+ <div class="col-xs-6">
+ <label for="popup-display-mode">Popup position for horizontal text</label>
+ <select class="form-control" id="popup-horizontal-text-position">
+ <option value="below">Below text</option>
+ <option value="above">Above text</option>
+ </select>
+ </div>
+ <div class="col-xs-6">
+ <label for="popup-display-mode">Popup position for vertical text</label>
+ <select class="form-control" id="popup-vertical-text-position">
+ <option value="default">Same as for horizontal text</option>
+ <option value="before">Before text reading direction</option>
+ <option value="after">After text reading direction</option>
+ <option value="left">Left of text</option>
+ <option value="right">Right of text</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
<div class="form-group options-advanced">
<label for="audio-playback-volume">Audio playback volume (percent)</label>
<input type="number" min="0" max="100" id="audio-playback-volume" class="form-control">
@@ -134,6 +156,14 @@
</div>
<div class="form-group options-advanced">
+ <label>Popup offset for vertical text (horizontal, vertical; in pixels)</label>
+ <div class="row">
+ <div class="col-xs-6"><input type="number" min="0" id="popup-horizontal-offset2" class="form-control"></div>
+ <div class="col-xs-6"><input type="number" min="0" id="popup-vertical-offset2" class="form-control"></div>
+ </div>
+ </div>
+
+ <div class="form-group options-advanced">
<label for="custom-popup-css">Custom popup CSS</label>
<div><textarea autocomplete="off" spellcheck="false" wrap="soft" id="custom-popup-css" class="form-control"></textarea></div>
</div>
@@ -162,6 +192,10 @@
<label><input type="checkbox" id="auto-hide-results"> Automatically hide results</label>
</div>
+ <div class="checkbox options-advanced">
+ <label><input type="checkbox" id="deep-dom-scan"> Deep DOM scan</label>
+ </div>
+
<div class="form-group options-advanced">
<label for="scan-delay">Scan delay (in milliseconds)</label>
<input type="number" min="1" id="scan-delay" class="form-control">
@@ -399,6 +433,8 @@
<script src="/mixed/lib/bootstrap/js/bootstrap.min.js"></script>
<script src="/mixed/lib/handlebars.min.js"></script>
+ <script src="/mixed/js/extension.js"></script>
+
<script src="/bg/js/anki.js"></script>
<script src="/bg/js/api.js"></script>
<script src="/bg/js/dictionary.js"></script>