-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
89 lines (68 loc) · 1.89 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const id = chrome.runtime.id;
const Tess = Tesseract.create({
workerPath: `chrome-extension://${id}/tess/worker.min.js`,
langPath: `chrome-extension://${id}/lang/`,
corePath: `chrome-extension://${id}/tess/core.js`,
});
const db_request = indexedDB.open("Memes", 1);
let db;
db_request.onupgradeneeded = () => {
db = db_request.result;
store = db.createObjectStore("MemeStore", {
keyPath: "url"
});
console.log('Object store created.');
text_index = store.createIndex("MemeTextIndex", "text");
console.log('Text Index created.');
url_index = store.createIndex("MemeURLIndex", "url", {
unique: true
});
console.log('URL Index created.');
}
db_request.onsuccess = () => {
db = db_request.result;
}
const insert = doc => {
console.log('Inserting:', doc);
db.transaction(["MemeStore"], "readwrite").objectStore("MemeStore").put(doc);
}
const process = (image) => {
Tess.recognize(
image, {
lang: 'eng'
}
).then((result) => {
let text = "";
text += result.text;
let sanitized = text.toLowerCase().split('').map(char => {
const code = char.charCodeAt(0);
if ((code >= 48 && code <= 57) || (code >= 97 && code <= 122)) {
return char;
}
return ' ';
}).join('').replace(/\s+/gi, ' ').trim();
insert({
text: sanitized,
url: image.src,
width: image.width,
height: image.height
});
});
}
const handler = (request) => {
if (request.type !== 'image') {
return;
}
const img = new Image();
img.onload = () => {
if (img.width >= 300 && img.height >= 300) {
process(img);
}
};
img.src = request.url;
};
chrome.webRequest.onCompleted.addListener(handler, {
urls: [
"<all_urls>"
]
});