-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.js
158 lines (143 loc) · 5.23 KB
/
settings.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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
// #region Doggo population
function ReturnBreeds() {
// Log for debugging
var url = "https://dog.ceo/api/breeds/list/all"
// Return promise of fetch
return fetch(url)
}
function EnumerateBreeds(JsonPromise) {
return new Promise(function(resolve, reject) {
// wait for promise to resolve
JsonPromise.then(function(value) {
// List to hold breeds we find
if (value.status != "success") {
// On failure....
console.log("Unable to load doggo breeds")
} else {
// On success...
console.log("Enumerating doggo breeds")
// List to hold results
var BreedList = []
// Enumerate keys
var BreedArray = value.message
for(var Breed in BreedArray) {
PushBreedToList(BreedList,BreedArray, Breed)
} // end of for
} // end of else
return resolve(BreedList) // finally we return BreedList and resolve promise
}) // end of then
})
}
function PushBreedToList(List, DoggoArray, DoggoBreed) {
// Create object
var SingleBreed = {}
SingleBreed["type"] = "doggo"
// For each key check if there are subkeys
if (DoggoArray[DoggoBreed].length > 0) {
for(var Index in DoggoArray[DoggoBreed]) {
SubBreed = DoggoArray[DoggoBreed][Index]
FinalBreed = `${DoggoBreed}/${SubBreed}`
SingleBreed["value"] = FinalBreed
}
} else {
SingleBreed["value"] = DoggoBreed
}
// Push to list
List.push(SingleBreed)
}
function PopulateBreeds() {
return new Promise(function(resolve, reject) {
this.ReturnBreeds().then(function(value) {
// Find json of response
var JsonResponse = value.json()
// Enumerate breeds from promise
var BreedList = EnumerateBreeds(JsonResponse)
BreedList.then(function(value) {
// Find select
var SelectBox = document.getElementById("DoggoBreedsSelect")
// Populate
var index = 1
// All option
SelectBox[0] = new Option("All doggos", "All doggos")
value.forEach(element => {
SelectBox[index] = new Option(element.value, element.value)
index++
})
return resolve("Populate DoggoBreedsSelect")
}).catch(function(error) {
return reject(`Unable to populateDoggoBreedsSelect: ${error}`)
})
})
})
}
// #endregion Doggo population
// #region Save Settings
function saveOptions(e) {
e.preventDefault();
// Get selected breed
var BreedsSelection = document.getElementById("DoggoBreedsSelect")
var BreedSelected = BreedsSelection.options[BreedsSelection.selectedIndex].text
var ContinousDoggosSelection = document.getElementById("continousDoggos").checked
// Save setting
browser.storage.sync.set({
PreferredBreed: BreedSelected,
ContinousDoggos: ContinousDoggosSelection
});
// Output to console
console.log("***** Saving Settings *****")
console.log(`PreferredBreed: ${BreedSelected}`)
console.log(`ContinousDoggos: ${ContinousDoggosSelection}`)
console.log("***** Settings Saved *****")
}
function restoreOptions() {
// Set current choice
function setCurrentChoicePreferredBreed(result) {
// Get preference
var PreferredBreedIndex = result.PreferredBreed
console.log(`PreferredBreed: ${PreferredBreedIndex}`)
// Get index
var Collection = document.getElementById("DoggoBreedsSelect")
var PreferredIndex = ReturnIndex(Collection, PreferredBreedIndex)
Collection.selectedIndex = PreferredIndex
console.log(`Index: ${PreferredIndex}`)
}
function setCurrentChoiceContinousDoggos(result) {
// Get preference
var ContinousDoggosSelection = result.ContinousDoggos
console.log(`ContinuousDoggos: ${ContinousDoggosSelection}`)
// Set checkbox
document.getElementById("continousDoggos").checked = ContinousDoggosSelection
}
function onError(error) {
console.log(`Error: ${error}`);
}
var gettingBreed = browser.storage.sync.get("PreferredBreed");
gettingBreed.then(setCurrentChoicePreferredBreed, onError);
var gettingContinous = browser.storage.sync.get("ContinousDoggos");
gettingContinous.then(setCurrentChoiceContinousDoggos, onError);
}
function ReturnIndex(HTMLCollection, ExpectedValue) {
var CollectionLength = HTMLCollection.length
for(var i = 0; i < CollectionLength -1; i++) {
if (HTMLCollection[i].value == ExpectedValue) {
return i
}
}
return 0
}
// #endregion Save Settings
window.onload = function() {
this.PopulateBreeds().then(function(value) {
// Log result of promises
console.log(value)
// *** Bind event handlers *** //
// Save options event handler
document.getElementById("SaveSettings").addEventListener('click', saveOptions)
// *** End event handlers *** //
// Restore options if possible
restoreOptions()
}).catch(function (error) {
// Log error
console.log(error)
})
}