-
Notifications
You must be signed in to change notification settings - Fork 2
/
wanikani-kana-search.user.js
51 lines (44 loc) · 1.28 KB
/
wanikani-kana-search.user.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
// ==UserScript==
// @name WaniKani Kana Search
// @namespace https://greasyfork.org/users/649
// @version 1.0.1
// @description Search on WaniKani using hiragana
// @author Adrien Pyke
// @match *://www.wanikani.com/*
// @grant none
// @require https://unpkg.com/wanakana@4.0.2/umd/wanakana.min.js
// ==/UserScript==
(() => {
'use strict';
const Util = {
q: (query, context = document) => context.querySelector(query),
qq: (query, context = document) => [...context.querySelectorAll(query)]
};
const form = Util.q('#search-form');
if (!form) return;
const input = Util.q('#query', form);
let kanaActive = false;
const hookupEvents = btn =>
(btn.onclick = () => {
kanaActive = !kanaActive;
btn.style.color = kanaActive ? '#333' : '#999';
wanakana[kanaActive ? 'bind' : 'unbind'](input);
input.focus();
});
const addKanaButton = () => {
const span = document.createElement('span');
Object.assign(span.style, {
position: 'absolute',
top: '0.3em',
right: '0.6em',
cursor: 'pointer',
fontWeight: 'bold',
color: '#999',
userSelect: 'none'
});
span.textContent = 'あ';
form.appendChild(span);
hookupEvents(span);
};
addKanaButton();
})();