diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-01-29 17:42:29 +0100 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-01-29 17:42:29 +0100 |
commit | e87f29e017a75af15d228d537bc20b9fc78ace24 (patch) | |
tree | cc4a7b76192d32290b569bedbcd8fedec9d7cda2 /yomichan-user/conf.d/sentence-export.js | |
parent | 34ea3829e7cb435a4357b43fcfff514fdd39083e (diff) |
update sentense-export to work with user.js
Diffstat (limited to 'yomichan-user/conf.d/sentence-export.js')
-rw-r--r-- | yomichan-user/conf.d/sentence-export.js | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/yomichan-user/conf.d/sentence-export.js b/yomichan-user/conf.d/sentence-export.js new file mode 100644 index 0000000..fb034d1 --- /dev/null +++ b/yomichan-user/conf.d/sentence-export.js @@ -0,0 +1,75 @@ +async function getClipboardSettings() { + return (await yomichan.api.getSettings([{ + scope: "profile", + optionsContext: { current: true }, + path: 'clipboard' + }]))[0].result; +} + +async function setClipboardSettings(settings) { + await yomichan.api.modifySettings([{ + scope: "profile", + optionsContext: { current: true }, + path: 'clipboard', + action: 'set', + value: settings + }]); +} + +async function exportSentence() { + var inputHTML = document.getElementById("query-parser-content"); + var output = ""; + + for (var child of inputHTML.children) { + for (var subchild of child.childNodes) { + if (subchild.nodeName == '#text') { + output += subchild.textContent; + continue; + } + if (subchild.nodeName == 'RUBY') { + output += `[${subchild.childNodes[0].innerText}](${subchild.childNodes[1].innerText})`; + continue; + } + } + } + + var userClipboardSettings = await getClipboardSettings(); + var tempSettings = { + enableBackgroundMonitor: false, + enableSearchPageMonitor: false, + autoSearchContent: false, + maximumSearchLength: userClipboardSettings.maximumSearchLength, + }; + await setClipboardSettings(tempSettings); + + navigator.clipboard.writeText(output); + + // execute on next JS event loop + setTimeout(async () => await setClipboardSettings(userClipboardSettings), 0); + + return output; +} + +function patchSearchBar() { + var searchBarOuter = document.getElementsByClassName("search-textbox-container")[0]; + var button = document.createElement("button"); + button.id = "anki-sentence-export-button"; + button.classList.add("search-button"); + button.onclick = exportSentence; + var icon = document.createElement("span"); + icon.classList.add("icon"); + icon.setAttribute("data-icon", "copy"); + button.appendChild(icon); + searchBarOuter.insertBefore(button, searchBarOuter.childNodes[2]); +} + +function run() { + if (document.body.classList.contains("patched")) return; + + patchSearchBar(); + + document.body.classList.add("patched"); +} + +run(); + |