Left: | ||
Right: |
OLD | NEW |
---|---|
1 (function(){ | 1 (function(){ |
2 document.addEventListener("DOMContentLoaded", function() | 2 document.addEventListener("DOMContentLoaded", function() |
3 { | 3 { |
4 | 4 |
5 /************************************************************************** | 5 /************************************************************************** |
6 * General | 6 * General |
7 **************************************************************************/ | 7 **************************************************************************/ |
8 | 8 |
9 // Change html class name from "no-js" to "js" | 9 // Change html class name from "no-js" to "js" |
10 document.documentElement.className = "js"; | 10 document.documentElement.className = "js"; |
(...skipping 18 matching lines...) Expand all Loading... | |
29 toggleNavbarCollapseEls[i] | 29 toggleNavbarCollapseEls[i] |
30 .addEventListener("click", toggleNavbarCollapse, false); | 30 .addEventListener("click", toggleNavbarCollapse, false); |
31 } | 31 } |
32 | 32 |
33 /************************************************************************** | 33 /************************************************************************** |
34 * CustomSelect | 34 * CustomSelect |
35 **************************************************************************/ | 35 **************************************************************************/ |
36 | 36 |
37 function CustomSelect(select) | 37 function CustomSelect(select) |
38 { | 38 { |
39 console.log(select) | |
juliandoucette
2017/10/31 13:19:58
Hello, world
ire
2017/11/01 12:36:49
Oops! Thanks :)
| |
40 | |
39 this.select = select; | 41 this.select = select; |
40 this.close(); | 42 this.close(); |
41 this.select | 43 this.select |
42 .addEventListener("click", this._onClick.bind(this), false); | 44 .addEventListener("click", this._onClick.bind(this), false); |
43 this.select | 45 this.select |
44 .addEventListener("focusout", this._onFocusOut.bind(this), false); | 46 .addEventListener("focusout", this._onFocusOut.bind(this), false); |
45 } | 47 } |
46 | 48 |
47 CustomSelect.prototype._onFocusOut = function() | 49 CustomSelect.prototype._onFocusOut = function() |
48 { | 50 { |
49 // setTimeout to allow document.activeElement | 51 // setTimeout to allow document.activeElement |
50 // to move to newly focused element | 52 // to move to newly focused element |
51 setTimeout(function() | 53 setTimeout(function() |
52 { | 54 { |
53 var newFocus = document.activeElement; | 55 var newFocus = document.activeElement; |
54 | 56 |
55 if (newFocus | 57 if (newFocus |
56 .classList.contains("custom-select-selected") || | 58 .classList.contains("custom-select-selected") || |
57 newFocus | 59 newFocus |
60 .classList.contains("custom-select-option") || | |
61 newFocus | |
58 .parentElement | 62 .parentElement |
59 .classList.contains("custom-select-option")) | 63 .classList.contains("custom-select-option")) |
60 { | 64 { |
61 return; | 65 return; |
62 } | 66 } |
63 | 67 |
64 this.close(); | 68 this.close(); |
65 | 69 |
66 }.bind(this), 1); | 70 }.bind(this), 1); |
67 } | 71 } |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
217 | 221 |
218 this.toggleSection(event.target); | 222 this.toggleSection(event.target); |
219 } | 223 } |
220 | 224 |
221 var productTopicsAccordion = document.getElementById('product-topics-accordi on'); | 225 var productTopicsAccordion = document.getElementById('product-topics-accordi on'); |
222 if (productTopicsAccordion) | 226 if (productTopicsAccordion) |
223 { | 227 { |
224 new Accordion(productTopicsAccordion); | 228 new Accordion(productTopicsAccordion); |
225 } | 229 } |
226 | 230 |
231 /************************************************************************** | |
232 * BrowserSelect | |
233 **************************************************************************/ | |
234 | |
235 function BrowserSelect(select) | |
236 { | |
237 this.select = select; | |
238 CustomSelect.apply(this, [this.select]); | |
239 | |
240 this.DEFAULT_BROWSER = "chrome"; | |
241 this.BROWSER_STORAGE_KEY = "BROWSER"; | |
juliandoucette
2017/10/31 13:19:59
NIT/Suggest: The word "STORAGE" is unnecessary (ve
ire
2017/11/01 12:36:49
I don't think it's unnecessary, because it's relat
| |
242 this.BROWSER_AUTODETECTED_STORAGE_KEY = "BROWSER_AUTODETECTED"; | |
243 | |
244 this.select | |
245 .addEventListener("click", this._onClickOrKeyDown.bind(this), false); | |
246 | |
247 this.select | |
248 .addEventListener("keydown", this._onClickOrKeyDown.bind(this), false); | |
249 | |
250 var storedBrowser = localStorage.getItem(this.BROWSER_STORAGE_KEY); | |
251 if (storedBrowser) this.selectOption(storedBrowser); | |
252 else this.detectBrowser(); | |
253 } | |
254 | |
255 BrowserSelect.prototype = CustomSelect.prototype; | |
juliandoucette
2017/10/31 13:19:59
This assignment is by reference; not by copy. As a
ire
2017/11/01 12:36:48
Thanks! Done.
| |
256 | |
257 BrowserSelect.prototype.detectBrowser = function() | |
258 { | |
259 localStorage.setItem(this.BROWSER_AUTODETECTED_STORAGE_KEY, "true"); | |
260 | |
261 var browser; | |
262 if (bowser.chrome) browser = "chrome"; | |
263 else if (bowser.opera) browser = "opera"; | |
264 else if (bowser.coast) browser = "opera"; | |
265 else if (bowser.samsungBrowser) browser = "samsung"; | |
266 else if (bowser.yandexbrowser) browser = "yandex"; | |
267 else if (bowser.maxthon) browser = "maxthon"; | |
268 else if (bowser.msie) browser = "ie"; | |
269 else if (bowser.msedge) browser = "edge"; | |
270 else if (bowser.firefox) browser = "firefox"; | |
271 else if (bowser.ios) browser = "ios"; | |
272 else if (bowser.safari) browser = "safari"; | |
273 else | |
274 { | |
275 localStorage.removeItem(this.BROWSER_AUTODETECTED_STORAGE_KEY); | |
276 browser = this.DEFAULT_BROWSER; | |
277 } | |
278 | |
279 this.selectOption(browser); | |
280 }; | |
281 | |
282 BrowserSelect.prototype.selectOption = function(browser) | |
283 { | |
284 localStorage.setItem(this.BROWSER_STORAGE_KEY, browser); | |
285 | |
286 // Change body class | |
287 var bodyClassList = Array.prototype.slice.call(document.body.classList); | |
288 for (var i = 0; i < bodyClassList.length; i++) | |
289 { | |
290 if (bodyClassList[i].indexOf('ua-') > -1) | |
291 { | |
292 document.body.classList.remove(bodyClassList[i]); | |
293 } | |
294 } | |
295 document.body.classList.add("ua-" + browser); | |
296 | |
297 // Check selected option | |
298 var selectedItem = this.select | |
299 .querySelector("[data-value='" + browser + "']"); | |
300 selectedItem.setAttribute("aria-checked", "true"); | |
301 | |
302 // Set selected option | |
303 var selectedOption = selectedItem.innerHTML; | |
304 | |
305 if (localStorage.getItem(this.BROWSER_AUTODETECTED_STORAGE_KEY)) | |
306 { | |
307 var autodetected = document | |
308 .getElementById('browser-select-autodetected') | |
309 .innerHTML; | |
310 selectedOption += "<span class='muted'>(" + autodetected + ")</span>"; | |
311 } | |
312 | |
313 this.select | |
314 .querySelector(".custom-select-selected") | |
315 .innerHTML = selectedOption; | |
316 }; | |
317 | |
318 BrowserSelect.prototype._onClickOrKeyDown = function(event) | |
319 { | |
320 if (!event.target.classList.contains("custom-select-option")) return; | |
321 | |
322 var IS_ENTER_KEY = event.key == "Enter" || event.keyCode == 13; | |
323 if (event.keyCode && !IS_ENTER_KEY) return; | |
324 | |
325 localStorage.removeItem(this.BROWSER_AUTODETECTED_STORAGE_KEY); | |
326 | |
327 // Uncheck previously checked option | |
328 this.select | |
329 .querySelector("[aria-checked='true']") | |
330 .setAttribute("aria-checked", "false"); | |
331 | |
332 this.selectOption(event.target.getAttribute("data-value")); | |
333 | |
334 this.close(); | |
335 }; | |
336 | |
337 var browserSelect = document.getElementById("browser-select"); | |
338 if (browserSelect) | |
339 { | |
340 new BrowserSelect(browserSelect); | |
341 } | |
342 | |
227 }, false); | 343 }, false); |
228 }()); | 344 }()); |
OLD | NEW |