-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspell.js
97 lines (79 loc) · 2.71 KB
/
spell.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
90
91
92
93
94
95
96
97
(function loadModule() {
initLoad();
function initLoad() {
if(href.includes("quizlet.com") && href.includes("/spell")) {
new Spell();
}
}
})();
class Spell {
constructor() {
this.hijack();
this.play();
this.cooldown = 10;
this.last_called = Date.now();
try {
document.getElementsByClassName('UIIcon--audio')[0].parentElement.click()
} catch(e) {}
}
play() {
let elem1 = document.getElementById('js-spellReplayAudio'),
elem2 = document.getElementsByClassName('SpellQuestionView-replayAudio')[0];
let event = new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
char: 'Escape',
key: 'Escape',
shiftKey: false,
keyCode: 27,
which: 27
});
(elem2 || elem1).dispatchEvent(event);
}
input() {
let elem1 = document.getElementById('js-spellInput'),
elem2 = document.getElementsByClassName('AutoExpandTextarea-textarea')[0],
elem3 = document.querySelector('textarea');
return elem2 || elem1 || elem3;
}
hijack() {
let self = this;
Howl.prototype.oldPlay = Howl.prototype.play;
Howl.prototype.play = function () { self.solve(this); }
}
enter() {
let event = new KeyboardEvent('keydown', {
bubbles: true,
cancelable: true,
char: 'Enter',
key: 'Enter',
shiftKey: false,
keyCode: 13,
which: 13
});
this.input().dispatchEvent(event);
}
solve(e) {
e.oldPlay();
let now = Date.now();
if (now - this.last_called <= this.cooldown) return false;
this.last_called = now;
let terms = Answers.get(),
answer = new URLSearchParams(e._src).get('b'),
input = this.input();
for (let i = 0; i < terms.length; ++i) {
let src = new URLSearchParams(terms[i]._wordAudioUrl).get('b');
if (src == answer) {
let word = terms[i].word;
let event = window.document.createEvent('Event');
event.initEvent('input', true, true);
let inp = input,
data = Object.getOwnPropertyDescriptor(inp.constructor.prototype, 'value');
(null == data ? void 0 : data.set) ? data.set.call(inp, word) : inp.value = word;
input.dispatchEvent(event);
//setTimeout(() => { this.enter(); }, 100);
break;
}
}
}
}