Skip to content

Commit f35cc63

Browse files
committed
Add image support!
1 parent 6104ba9 commit f35cc63

File tree

5 files changed

+36
-11
lines changed

5 files changed

+36
-11
lines changed

libs/mimes.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
window.mimes = {
2+
'image/jpeg': '.jpg',
3+
'image/png': '.png',
4+
'image/gif': '.gif',
5+
'image/bmp': '.bmp',
6+
'image/webp': '.webp',
7+
'image/svg+xml': '.svg',
8+
'audio/mpeg': '.mp3',
9+
'audio/wav': '.wav',
10+
'audio/ogg': '.ogg',
11+
'audio/midi': '.mid'
12+
}

manifest.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "Quizlet to Anki",
33
"description": "Turn your Quizlet flashcards into Anki decks",
4-
"version": "0.0.0.1",
4+
"version": "0.0.0.2",
55
"manifest_version": 3,
66
"action": {
77
"default_popup": "src/popup.html",

quizlet-fetcher

src/popup.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ <h1>Quizlet to Anki</h1>
1717

1818
<div id="results">Loading. Please wait.</div><br>
1919
<button id="generate" disabled="true">Download</button>
20+
<script src="/libs/mimes.js"></script>
2021
<script src="/libs/file-saver.js"></script>
2122
<script src="/libs/js-sha1.js"></script>
2223
<script src="/libs/jszip.js"></script>
2324
<script src="/libs/sql.js"></script>
2425
<script src="/libs/apkg-export.js"></script>
25-
<script src="/quizlet-fetcher/dist/parser.js"></script>
26+
<script src="/quizlet-fetcher/dist/index.min.js"></script>
2627
<script src="popup.js"></script>
2728
</body>
2829
</html>

src/popup.js

+20-8
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ async function main() {
55

66
if (response.error) return document.querySelector("#results").innerText = response.error
77

8-
const quizlet = new window.QuizletFetcher(response.html)
8+
const quizlet = new window.QuizletFetcher(response.html).getJSON()
99

10-
11-
document.querySelector("#results").innerText = `${quizlet.title}\nDescription: ${quizlet.description || "No description found."}\n${quizlet.cards.length} card(s) found`
10+
document.querySelector("#results").innerText = `${quizlet.title}\n\nAuthor: ${quizlet.author}\n\nDescription: ${quizlet.description || "No description found."}\n\n${quizlet.cards.length} card(s) found with ${quizlet.cards.filter(a => a.image).length} image(s)`
1211
window.cardSet = quizlet
1312
document.getElementById("generate").disabled = false
1413
} catch (e) {
14+
console.error(e)
1515
document.querySelector("#results").innerText = "Failed to get and parse HTML. This can be caused by the page not being a Quizlet Flashcard, or the page not being fully loaded when you open this extension. Try closing and opening it again."
1616
}
1717
}
@@ -20,12 +20,24 @@ document.getElementById("generate").addEventListener("click", makeCards);
2020
async function makeCards() {
2121

2222
const apkg = new window.apkgExport(window.cardSet.title)
23-
window.cardSet.cards.forEach(card => {
24-
apkg.addCard(card.term, card.definition)
23+
let promises = window.cardSet.cards.map(async card => {
24+
const id = Math.random().toString(32).slice(2)
25+
26+
if (card.image) {
27+
const img = await (await fetch(card.image.replace(/^https:\/\/.*?\/(https?:\/\/.*)$/, "$1"))).blob()
28+
var filename = id
29+
window.mimes[img] ? filename = filename + window.mimes[img] : null
30+
apkg.addMedia(filename, img)
31+
console.log(apkg.media)
32+
}
33+
apkg.addCard(card.term, card.image ? `${card.definition} <br><img src="${id}">` : card.definition)
2534
})
2635

27-
apkg.save()
28-
.then(zip => {
29-
saveAs(zip, "output.apkg")
36+
Promise.all(promises)
37+
.then(() => {
38+
apkg.save()
39+
.then(zip => {
40+
saveAs(zip, "output.apkg")
41+
})
3042
})
3143
}

0 commit comments

Comments
 (0)