Compare commits

..

No commits in common. "master" and "development" have entirely different histories.

6 changed files with 37 additions and 57 deletions

View file

@ -8,8 +8,6 @@ This is a chrome extension that automatically removes furigana from websites bas
## Installation
[Download it from the Chrome Web Store](https://chrome.google.com/webstore/detail/furikani/lbjenjfljjnlkbdfbgmgcnkfnddaeccl)
[Download it from the Firefox Add-On Store](https://addons.mozilla.org/en-US/firefox/addon/furikani/)
---
## How to use

View file

@ -10,11 +10,4 @@
## v0.6.3
* Startup sync check is now more consistent
* Level number updates in realtime after sync
* Fixed bug where internal Kanji list would get reset on sync
# v0.7
* FuriKani now supports Firefox!
* Fixed potential innerHTML risks
## v0.7.1
* Add support for non-static websites
* Fixed bug where internal Kanji list would get reset on sync

0
build.sh Executable file → Normal file
View file

View file

@ -1,7 +1,7 @@
{
"name": "FuriKani",
"description": "Removes furigana on websites based on your WaniKani level",
"version": "0.7",
"version": "0.6.3",
"icons": {
"16": "res/icon16.png",
"48": "res/icon48.png",
@ -21,4 +21,4 @@
"scripts": ["src/background.js"]
},
"permissions": ["storage"]
}
}

View file

@ -19,35 +19,6 @@ var kanjiStyleSheet = document.createElement("style")
document.head.appendChild(vocabStyleSheet)
document.head.appendChild(kanjiStyleSheet)
function handleRubyTag(tag, vocabulary, kanji) {
// Copy the ruby element into a new ruby element so we can modify it
// without modifying the website
var ruby = document.createElement("ruby")
ruby.innerHTML = tag.innerHTML;
// Remove all tags (except for <rb>, <span>)
while(ruby.lastElementChild)
{
if(ruby.lastElementChild.tagName.toLowerCase() === "rb" ||
ruby.lastElementChild.tagName.toLowerCase() === "span")
{
ruby.innerHTML = ruby.lastElementChild.innerHTML
break
}
ruby.removeChild(ruby.lastElementChild)
}
// If the contents of the <ruby> tag are in the word list, tag the <rt> tag
// with the correct class
var rtTag = tag.getElementsByTagName("rt").item(0)
if(vocabulary.includes(ruby.innerText))
rtTag.classList.add("furikani-vocabulary")
if(kanji.includes(ruby.innerText))
rtTag.classList.add("furikani-kanji")
}
// Get stored word list from chrome storage
chrome.storage.local.get(["vocabulary", "kanji", "validUserLevel", "enabled", "enabledVocab", "enabledKanji"], (data) => {
// The users level is not valid, e.g. it exceeds the maximum allowed level
@ -68,19 +39,37 @@ chrome.storage.local.get(["vocabulary", "kanji", "validUserLevel", "enabled", "e
const vocabulary = data.vocabulary
const kanji = data.kanji
let observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
mutation.addedNodes.forEach((node, _key, _parent) => {
if (node.tagName?.toLowerCase() !== "ruby") {
return;
}
// Fetch all <ruby> tags on the website
var rubyTags = document.body.getElementsByTagName("ruby")
handleRubyTag(node, vocabulary, kanji)
})
});
})
for(let tag in rubyTags)
{
// Copy the ruby element into a new ruby element so we can modify it
// without modifying the website
var ruby = document.createElement("ruby")
ruby.innerHTML = rubyTags.item(tag).innerHTML
observer.observe(document.documentElement, { subtree: true, childList: true });
// Remove all tags (except for <rb>, <span>)
while(ruby.lastElementChild)
{
if(ruby.lastElementChild.tagName.toLowerCase() === "rb" ||
ruby.lastElementChild.tagName.toLowerCase() === "span")
{
ruby.innerHTML = ruby.lastElementChild.innerHTML
break
}
ruby.removeChild(ruby.lastElementChild)
}
// If the contents of the <ruby> tag are in the word list, tag the <rt> tag
// with the correct class
var rtTag = rubyTags.item(tag).getElementsByTagName("rt").item(0)
if(vocabulary.includes(ruby.innerText))
rtTag.classList.add("furikani-vocabulary")
if(kanji.includes(ruby.innerText))
rtTag.classList.add("furikani-kanji")
}
})
chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
@ -107,4 +96,4 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
}
return true;
})
})

View file

@ -6,7 +6,7 @@
<body>
<header>
<h1>FuriKani</h1>
<h2>v0.7</h2>
<h2>v0.6.3</h2>
</header>
<div id="token-area">
@ -53,10 +53,10 @@
<footer>
<span id="level-text">Using WaniKani Level <span id="level"></span></span>
<span id="author" >Made by <a target="_blank" href="https://repos.einweckglas.com/lauchmelder">Lauchmelder</a></span>
<a id="source" target="_blank" href="https://repos.einweckglas.com/lauchmelder/FuriKani">Source Code</a>
<span id="author" >Made by <a target="_blank" href="https://github.com/Lauchmelder23">Lauchmelder</a></span>
<a id="source" target="_blank" href="https://github.com/Lauchmelder23/FuriKani">Source Code</a>
</footer>
<script src="popup.js"></script>
</body>
</html>
</html>