/* globals UAParser */ 'use strict'; var json = []; function filter(list) { return list.filter(o => { const browser = document.getElementById('browser').value; if (browser && browser !== 'skipped') { try { if (o.browser.name.toLowerCase().trim().indexOf(browser.trim()) === -1) { return false; } } catch (e) { return false; } } const os = document.getElementById('os').value; if (os && os !== 'skipped') { try { if (o.os.name.toLowerCase().trim().indexOf(os.trim()) === -1) { return false; } } catch (e) { return false; } } return true; }); } function sort(arr) { function sort(a = '', b = '') { const pa = a.split('.'); const pb = b.split('.'); for (let i = 0; i < 3; i++) { const na = Number(pa[i]); const nb = Number(pb[i]); if (na > nb) { return 1; } if (nb > na) { return -1; } if (!isNaN(na) && isNaN(nb)) { return 1; } if (isNaN(na) && !isNaN(nb)) { return -1; } } return 0; } const list = arr.sort((a, b) => sort(a.browser.version, b.browser.version)); if (document.getElementById('sort').value === 'true') { return list.reverse(); } return list; } function parse(j) { json = j.map(s => UAParser(s)); } function update() { const list = sort(filter(json)); const t = document.querySelector('template'); const parent = document.getElementById('list'); const tbody = parent.querySelector('tbody'); tbody.textContent = ''; parent.dataset.loading = true; window.setTimeout(() => { const fragment = document.createDocumentFragment(); list.forEach(o => { const clone = document.importNode(t.content, true); const second = clone.querySelector('td:nth-child(2)'); second.title = second.textContent = o.browser.name + ' ' + (o.browser.version || ' '); const third = clone.querySelector('td:nth-child(3)'); third.title = third.textContent = o.os.name + ' ' + (o.os.version || ' '); const forth = clone.querySelector('td:nth-child(4)'); forth.title = forth.textContent = o.ua; fragment.appendChild(clone); }); tbody.appendChild(fragment); document.getElementById('custom').placeholder = `Filter among ${list.length} "User-Agent" strings`; parent.dataset.loading = false; }, 1000); } document.addEventListener('change', ({target}) => { if (target.closest('#filter')) { localStorage.setItem(target.id, target.value); update(); } if (target.type === 'radio') { document.getElementById('ua').value = target.closest('tr').querySelector('td:nth-child(4)').textContent; document.getElementById('ua').dispatchEvent(new Event('input')); } }); document.getElementById('list').addEventListener('click', ({target}) => { const tr = target.closest('tr'); if (tr) { const input = tr.querySelector('input'); if (input && input !== target) { input.checked = !input.checked; input.dispatchEvent(new Event('change', { bubbles: true })); } } }); document.getElementById('custom').addEventListener('keyup', ({target}) => { const value = target.value; [...document.querySelectorAll('#list tr')] .forEach(tr => tr.dataset.matched = tr.textContent.toLowerCase().indexOf(value.toLowerCase()) !== -1); }); // init document.getElementById('os').value = localStorage.getItem('os') || 'windows'; document.getElementById('browser').value = localStorage.getItem('browser') || 'chrome'; chrome.storage.local.get({ ua: '' }, prefs => document.getElementById('ua').value = prefs.ua || navigator.userAgent); chrome.storage.onChanged.addListener(prefs => { if (prefs.ua) { document.getElementById('ua').value = prefs.ua.newValue || navigator.userAgent; document.getElementById('ua').dispatchEvent(new Event('input')); } }); window.addEventListener('load', () => { window.setTimeout(() => { const req = new XMLHttpRequest(); req.onload = () => { parse(req.response); update(); }; req.open('GET', 'list.json'); req.responseType = 'json'; req.send(); }, 100); }); function msg(msg) { const info = document.getElementById('info'); info.textContent = msg; window.setTimeout(() => info.textContent = 'User-Agent String:', 2000); } // commands document.addEventListener('click', ({target}) => { const cmd = target.dataset.cmd; if (cmd) { if (cmd === 'apply') { const value = document.getElementById('ua').value; if (value === navigator.userAgent) { msg('Default UA, press the reset button instead'); } else { msg('user-agent is set'); } chrome.storage.local.set({ ua: value === navigator.userAgent ? '' : value }); } else if (cmd === 'window') { const value = document.getElementById('ua').value; chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => chrome.runtime.getBackgroundPage(bg => bg.ua.update(value, tab.windowId))); } else if (cmd === 'reset') { const input = document.querySelector('#list :checked'); if (input) { input.checked = false; } chrome.storage.local.set({ ua: '' }); msg('reset to default'); } else if (cmd === 'refresh') { chrome.tabs.query({ active: true, currentWindow: true }, ([tab]) => chrome.tabs.reload(tab.id, { bypassCache: true })); } else if (cmd === 'options') { chrome.runtime.openOptionsPage(); } else if (cmd === 'reload') { chrome.runtime.reload(); } } }); document.getElementById('ua').addEventListener('input', e => { document.querySelector('[data-cmd=apply]').disabled = e.target.value === ''; document.querySelector('[data-cmd=window]').disabled = e.target.value === ''; });