-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
bangdd.js
75 lines (60 loc) · 2.25 KB
/
bangdd.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
const ID_SEARCH_FORM = "search_form_input";
const ID_SEARCH_BUTTON = "search_button";
const ID_DUCKBAR = "#react-duckbar ul";
const BANG_TO_ADD = "!g";
/** Most recently used or most commonly used bangs will start appearing from here */
function bangToAdd() {
return BANG_TO_ADD;
}
/** Allow user to configure */
function haveToClickSearch() {
return true;
}
/** Main Action on button click */
function onTimeToBang(event) {
let search_form_input = document.getElementById(ID_SEARCH_FORM);
let current_search = search_form_input.value;
let bang = bangToAdd();
if (!current_search.includes(bang)) {
search_form_input.value = current_search + " " + bang;
}
if (haveToClickSearch()) {
document.getElementById(ID_SEARCH_BUTTON).click();
}
}
function createButton() {
// Fetch class names from the second-to-last inactive item, or the last if fewer than two items
let existingLis = document.querySelectorAll(ID_DUCKBAR + ' li');
let existingLi = existingLis.length >= 2 ? existingLis[existingLis.length - 2] : existingLis[existingLis.length - 1];
let existingA = existingLi.querySelector('a');
let liClassNames = existingLi ? existingLi.className : '';
let aClassNames = existingA ? existingA.className : '';
let div = document.createElement('div');
div.innerHTML = `<li id="bang_it" class="${liClassNames}">
<a href="#" class="${aClassNames}">Google</a>
</li>`;
let bang_it = div.firstChild;
bang_it.addEventListener("click", function (event) {
(onTimeToBang).call(bang_it, event);
});
return bang_it;
}
function insertInCorrectPosition(bang_it) {
let existingButton = document.getElementById(bang_it.id);
if (existingButton) {
existingButton.remove();
console.log('Removed existing button');
}
insertAfter(bang_it, document.querySelector(ID_DUCKBAR).lastChild);
console.log('Inserted bang it element');
}
/* Helper Methods */
function insertAfter(el, referenceNode) {
referenceNode.parentNode.insertBefore(el, referenceNode.nextSibling);
}
/* End of helper methods */
function onExtensionLoading() {
let bang_it = createButton();
insertInCorrectPosition(bang_it);
}
onExtensionLoading();