在 Google 搜尋結果頁面利用快捷鍵進行快速瀏覽。
// ==UserScript== // @name Google Navigation // @name:zh-TW Google 快覽 // @name:zh-CN Google 快覽 // @namespace veringsek // @match http://*.google.com/search* // @match http://*.google.ad/search* // @match http://*.google.ae/search* // @match http://*.google.com.af/search* // @match http://*.google.com.ag/search* // @match http://*.google.com.ai/search* // @match http://*.google.al/search* // @match http://*.google.am/search* // @match http://*.google.co.ao/search* // @match http://*.google.com.ar/search* // @match http://*.google.as/search* // @match http://*.google.at/search* // @match http://*.google.com.au/search* // @match http://*.google.az/search* // @match http://*.google.ba/search* // @match http://*.google.com.bd/search* // @match http://*.google.be/search* // @match http://*.google.bf/search* // @match http://*.google.bg/search* // @match http://*.google.com.bh/search* // @match http://*.google.bi/search* // @match http://*.google.bj/search* // @match http://*.google.com.bn/search* // @match http://*.google.com.bo/search* // @match http://*.google.com.br/search* // @match http://*.google.bs/search* // @match http://*.google.bt/search* // @match http://*.google.co.bw/search* // @match http://*.google.by/search* // @match http://*.google.com.bz/search* // @match http://*.google.ca/search* // @match http://*.google.cd/search* // @match http://*.google.cf/search* // @match http://*.google.cg/search* // @match http://*.google.ch/search* // @match http://*.google.ci/search* // @match http://*.google.co.ck/search* // @match http://*.google.cl/search* // @match http://*.google.cm/search* // @match http://*.google.cn/search* // @match http://*.google.com.co/search* // @match http://*.google.co.cr/search* // @match http://*.google.com.cu/search* // @match http://*.google.cv/search* // @match http://*.google.com.cy/search* // @match http://*.google.cz/search* // @match http://*.google.de/search* // @match http://*.google.dj/search* // @match http://*.google.dk/search* // @match http://*.google.dm/search* // @match http://*.google.com.do/search* // @match http://*.google.dz/search* // @match http://*.google.com.ec/search* // @match http://*.google.ee/search* // @match http://*.google.com.eg/search* // @match http://*.google.es/search* // @match http://*.google.com.et/search* // @match http://*.google.fi/search* // @match http://*.google.com.fj/search* // @match http://*.google.fm/search* // @match http://*.google.fr/search* // @match http://*.google.ga/search* // @match http://*.google.ge/search* // @match http://*.google.gg/search* // @match http://*.google.com.gh/search* // @match http://*.google.com.gi/search* // @match http://*.google.gl/search* // @match http://*.google.gm/search* // @match http://*.google.gr/search* // @match http://*.google.com.gt/search* // @match http://*.google.gy/search* // @match http://*.google.com.hk/search* // @match http://*.google.hn/search* // @match http://*.google.hr/search* // @match http://*.google.ht/search* // @match http://*.google.hu/search* // @match http://*.google.co.id/search* // @match http://*.google.ie/search* // @match http://*.google.co.il/search* // @match http://*.google.im/search* // @match http://*.google.co.in/search* // @match http://*.google.iq/search* // @match http://*.google.is/search* // @match http://*.google.it/search* // @match http://*.google.je/search* // @match http://*.google.com.jm/search* // @match http://*.google.jo/search* // @match http://*.google.co.jp/search* // @match http://*.google.co.ke/search* // @match http://*.google.com.kh/search* // @match http://*.google.ki/search* // @match http://*.google.kg/search* // @match http://*.google.co.kr/search* // @match http://*.google.com.kw/search* // @match http://*.google.kz/search* // @match http://*.google.la/search* // @match http://*.google.com.lb/search* // @match http://*.google.li/search* // @match http://*.google.lk/search* // @match http://*.google.co.ls/search* // @match http://*.google.lt/search* // @match http://*.google.lu/search* // @match http://*.google.lv/search* // @match http://*.google.com.ly/search* // @match http://*.google.co.ma/search* // @match http://*.google.md/search* // @match http://*.google.me/search* // @match http://*.google.mg/search* // @match http://*.google.mk/search* // @match http://*.google.ml/search* // @match http://*.google.com.mm/search* // @match http://*.google.mn/search* // @match http://*.google.ms/search* // @match http://*.google.com.mt/search* // @match http://*.google.mu/search* // @match http://*.google.mv/search* // @match http://*.google.mw/search* // @match http://*.google.com.mx/search* // @match http://*.google.com.my/search* // @match http://*.google.co.mz/search* // @match http://*.google.com.na/search* // @match http://*.google.com.ng/search* // @match http://*.google.com.ni/search* // @match http://*.google.ne/search* // @match http://*.google.nl/search* // @match http://*.google.no/search* // @match http://*.google.com.np/search* // @match http://*.google.nr/search* // @match http://*.google.nu/search* // @match http://*.google.co.nz/search* // @match http://*.google.com.om/search* // @match http://*.google.com.pa/search* // @match http://*.google.com.pe/search* // @match http://*.google.com.pg/search* // @match http://*.google.com.ph/search* // @match http://*.google.com.pk/search* // @match http://*.google.pl/search* // @match http://*.google.pn/search* // @match http://*.google.com.pr/search* // @match http://*.google.ps/search* // @match http://*.google.pt/search* // @match http://*.google.com.py/search* // @match http://*.google.com.qa/search* // @match http://*.google.ro/search* // @match http://*.google.ru/search* // @match http://*.google.rw/search* // @match http://*.google.com.sa/search* // @match http://*.google.com.sb/search* // @match http://*.google.sc/search* // @match http://*.google.se/search* // @match http://*.google.com.sg/search* // @match http://*.google.sh/search* // @match http://*.google.si/search* // @match http://*.google.sk/search* // @match http://*.google.com.sl/search* // @match http://*.google.sn/search* // @match http://*.google.so/search* // @match http://*.google.sm/search* // @match http://*.google.sr/search* // @match http://*.google.st/search* // @match http://*.google.com.sv/search* // @match http://*.google.td/search* // @match http://*.google.tg/search* // @match http://*.google.co.th/search* // @match http://*.google.com.tj/search* // @match http://*.google.tl/search* // @match http://*.google.tm/search* // @match http://*.google.tn/search* // @match http://*.google.to/search* // @match http://*.google.com.tr/search* // @match http://*.google.tt/search* // @match http://*.google.com.tw/search* // @match http://*.google.co.tz/search* // @match http://*.google.com.ua/search* // @match http://*.google.co.ug/search* // @match http://*.google.co.uk/search* // @match http://*.google.com.uy/search* // @match http://*.google.co.uz/search* // @match http://*.google.com.vc/search* // @match http://*.google.co.ve/search* // @match http://*.google.vg/search* // @match http://*.google.co.vi/search* // @match http://*.google.com.vn/search* // @match http://*.google.vu/search* // @match http://*.google.ws/search* // @match http://*.google.rs/search* // @match http://*.google.co.za/search* // @match http://*.google.co.zm/search* // @match http://*.google.co.zw/search* // @match http://*.google.cat/search* // @match https://*.google.com/search* // @match https://*.google.ad/search* // @match https://*.google.ae/search* // @match https://*.google.com.af/search* // @match https://*.google.com.ag/search* // @match https://*.google.com.ai/search* // @match https://*.google.al/search* // @match https://*.google.am/search* // @match https://*.google.co.ao/search* // @match https://*.google.com.ar/search* // @match https://*.google.as/search* // @match https://*.google.at/search* // @match https://*.google.com.au/search* // @match https://*.google.az/search* // @match https://*.google.ba/search* // @match https://*.google.com.bd/search* // @match https://*.google.be/search* // @match https://*.google.bf/search* // @match https://*.google.bg/search* // @match https://*.google.com.bh/search* // @match https://*.google.bi/search* // @match https://*.google.bj/search* // @match https://*.google.com.bn/search* // @match https://*.google.com.bo/search* // @match https://*.google.com.br/search* // @match https://*.google.bs/search* // @match https://*.google.bt/search* // @match https://*.google.co.bw/search* // @match https://*.google.by/search* // @match https://*.google.com.bz/search* // @match https://*.google.ca/search* // @match https://*.google.cd/search* // @match https://*.google.cf/search* // @match https://*.google.cg/search* // @match https://*.google.ch/search* // @match https://*.google.ci/search* // @match https://*.google.co.ck/search* // @match https://*.google.cl/search* // @match https://*.google.cm/search* // @match https://*.google.cn/search* // @match https://*.google.com.co/search* // @match https://*.google.co.cr/search* // @match https://*.google.com.cu/search* // @match https://*.google.cv/search* // @match https://*.google.com.cy/search* // @match https://*.google.cz/search* // @match https://*.google.de/search* // @match https://*.google.dj/search* // @match https://*.google.dk/search* // @match https://*.google.dm/search* // @match https://*.google.com.do/search* // @match https://*.google.dz/search* // @match https://*.google.com.ec/search* // @match https://*.google.ee/search* // @match https://*.google.com.eg/search* // @match https://*.google.es/search* // @match https://*.google.com.et/search* // @match https://*.google.fi/search* // @match https://*.google.com.fj/search* // @match https://*.google.fm/search* // @match https://*.google.fr/search* // @match https://*.google.ga/search* // @match https://*.google.ge/search* // @match https://*.google.gg/search* // @match https://*.google.com.gh/search* // @match https://*.google.com.gi/search* // @match https://*.google.gl/search* // @match https://*.google.gm/search* // @match https://*.google.gr/search* // @match https://*.google.com.gt/search* // @match https://*.google.gy/search* // @match https://*.google.com.hk/search* // @match https://*.google.hn/search* // @match https://*.google.hr/search* // @match https://*.google.ht/search* // @match https://*.google.hu/search* // @match https://*.google.co.id/search* // @match https://*.google.ie/search* // @match https://*.google.co.il/search* // @match https://*.google.im/search* // @match https://*.google.co.in/search* // @match https://*.google.iq/search* // @match https://*.google.is/search* // @match https://*.google.it/search* // @match https://*.google.je/search* // @match https://*.google.com.jm/search* // @match https://*.google.jo/search* // @match https://*.google.co.jp/search* // @match https://*.google.co.ke/search* // @match https://*.google.com.kh/search* // @match https://*.google.ki/search* // @match https://*.google.kg/search* // @match https://*.google.co.kr/search* // @match https://*.google.com.kw/search* // @match https://*.google.kz/search* // @match https://*.google.la/search* // @match https://*.google.com.lb/search* // @match https://*.google.li/search* // @match https://*.google.lk/search* // @match https://*.google.co.ls/search* // @match https://*.google.lt/search* // @match https://*.google.lu/search* // @match https://*.google.lv/search* // @match https://*.google.com.ly/search* // @match https://*.google.co.ma/search* // @match https://*.google.md/search* // @match https://*.google.me/search* // @match https://*.google.mg/search* // @match https://*.google.mk/search* // @match https://*.google.ml/search* // @match https://*.google.com.mm/search* // @match https://*.google.mn/search* // @match https://*.google.ms/search* // @match https://*.google.com.mt/search* // @match https://*.google.mu/search* // @match https://*.google.mv/search* // @match https://*.google.mw/search* // @match https://*.google.com.mx/search* // @match https://*.google.com.my/search* // @match https://*.google.co.mz/search* // @match https://*.google.com.na/search* // @match https://*.google.com.ng/search* // @match https://*.google.com.ni/search* // @match https://*.google.ne/search* // @match https://*.google.nl/search* // @match https://*.google.no/search* // @match https://*.google.com.np/search* // @match https://*.google.nr/search* // @match https://*.google.nu/search* // @match https://*.google.co.nz/search* // @match https://*.google.com.om/search* // @match https://*.google.com.pa/search* // @match https://*.google.com.pe/search* // @match https://*.google.com.pg/search* // @match https://*.google.com.ph/search* // @match https://*.google.com.pk/search* // @match https://*.google.pl/search* // @match https://*.google.pn/search* // @match https://*.google.com.pr/search* // @match https://*.google.ps/search* // @match https://*.google.pt/search* // @match https://*.google.com.py/search* // @match https://*.google.com.qa/search* // @match https://*.google.ro/search* // @match https://*.google.ru/search* // @match https://*.google.rw/search* // @match https://*.google.com.sa/search* // @match https://*.google.com.sb/search* // @match https://*.google.sc/search* // @match https://*.google.se/search* // @match https://*.google.com.sg/search* // @match https://*.google.sh/search* // @match https://*.google.si/search* // @match https://*.google.sk/search* // @match https://*.google.com.sl/search* // @match https://*.google.sn/search* // @match https://*.google.so/search* // @match https://*.google.sm/search* // @match https://*.google.sr/search* // @match https://*.google.st/search* // @match https://*.google.com.sv/search* // @match https://*.google.td/search* // @match https://*.google.tg/search* // @match https://*.google.co.th/search* // @match https://*.google.com.tj/search* // @match https://*.google.tl/search* // @match https://*.google.tm/search* // @match https://*.google.tn/search* // @match https://*.google.to/search* // @match https://*.google.com.tr/search* // @match https://*.google.tt/search* // @match https://*.google.com.tw/search* // @match https://*.google.co.tz/search* // @match https://*.google.com.ua/search* // @match https://*.google.co.ug/search* // @match https://*.google.co.uk/search* // @match https://*.google.com.uy/search* // @match https://*.google.co.uz/search* // @match https://*.google.com.vc/search* // @match https://*.google.co.ve/search* // @match https://*.google.vg/search* // @match https://*.google.co.vi/search* // @match https://*.google.com.vn/search* // @match https://*.google.vu/search* // @match https://*.google.ws/search* // @match https://*.google.rs/search* // @match https://*.google.co.za/search* // @match https://*.google.co.zm/search* // @match https://*.google.co.zw/search* // @match https://*.google.cat/search* // @grant none // @version 0.3.4 // @author veringsek // @description Navigate through Google Search with a set of hotkeys. // @description:zh-TW 在 Google 搜尋結果頁面利用快捷鍵進行快速瀏覽。 // @description:zh-CN 在 Google 搜尋結果頁面利用快捷鍵進行快速瀏覽。 // ==/UserScript== (function () { let css = document.createElement('style'); css.type = 'text/css'; css.innerText = ` :root { --google-navigation--button-size: 30px; --google-navigation--stroke-color: black; --google-navigation--background-color: white; --google-navigation--button-opacity: 1; } .google-navigation--button { position: absolute; left: calc(-5 / 3 * var(--google-navigation--button-size)); border: 2px var(--google-navigation--stroke-color) solid; border-radius: 5px; background: var(--google-navigation--background-color); box-shadow: 0px 2px var(--google-navigation--stroke-color); color: var(--google-navigation--stroke-color) !important; opacity: var(--google-navigation--button-opacity); text-decoration: none !important; width: var(--google-navigation--button-size); height: var(--google-navigation--button-size); line-height: var(--google-navigation--button-size); text-align: center; font-size: calc(2 / 3 * var(--google-navigation--button-size)); user-select: none; transition: all 0.1s linear; animation: spawn 0.2s; } .google-navigation--button.keydown { background: var(--google-navigation--stroke-color); color: var(--google-navigation--background-color) !important; transform: scale(0.8); } .google-navigation--switch { opacity: 0; } .google-navigation--switch.keydown { opacity: 1; } @keyframes spawn { from { transform: scale(0); } } `; document.head.appendChild(css); })(); let GoogleNavigation = {}; GoogleNavigation.GN_KEYDOWN_TIMER_DURATION = 1000; GoogleNavigation.GN_KEYDOWN_TIMER_CANCELED = 'GN_KEYDOWN_TIMER_CANCELED'; GoogleNavigation.GN_KEYPRESS_SENSITIVITY = 500; GoogleNavigation.GN_KEYPRESS_CANCELED = 'GN_KEYPRESS_CANCELED'; GoogleNavigation.GN_BUTTON_SIZE = 30; GoogleNavigation.GN_BUTTON_SIZE_HALF = GoogleNavigation.GN_BUTTON_SIZE / 2; GoogleNavigation.keydowns = new Set(); GoogleNavigation.tmrKeydown = undefined; globalThis.GoogleNavigation = GoogleNavigation; function setCSSVars() { document.documentElement.style.setProperty( '--google-navigation--button-size', `${globalThis.GoogleNavigation.GN_BUTTON_SIZE}px` ); document.documentElement.style.setProperty( '--google-navigation--stroke-color', globalThis.getComputedStyle(document.body)['color'] ); document.documentElement.style.setProperty( '--google-navigation--background-color', globalThis.getComputedStyle(document.body)['backgroundColor'] ); } function makeTemplate() { let template = document.createElement('a'); template.classList.add('google-navigation--button'); template.commandKeydown = function () { this.classList.add('keydown'); let documentElement = document.documentElement; documentElement.scroll({ top: this.getBoundingClientRect().top + documentElement.scrollTop - window.innerHeight / 2, behavior: 'smooth' }); globalThis.GoogleNavigation.tmrKeydown = globalThis.setTimeout(() => { globalThis.clearTimeout(globalThis.GoogleNavigation.tmrKeydown); globalThis.GoogleNavigation.tmrKeydown = globalThis.GoogleNavigation.GN_KEYDOWN_TIMER_CANCELED; this.classList.remove('keydown'); this.commandCancel(); }, globalThis.GoogleNavigation.GN_KEYDOWN_TIMER_DURATION); }; template.commandKeyup = function () { this.classList.remove('keydown'); this.commandPress(); }; template.commandPress = function () { if (document.getElementById('google-navigation--switch-Control').keydown) { window.open(this.link, '_blank'); } else { window.open(this.link, '_self'); } }; template.commandCancel = function () { return; }; globalThis.GoogleNavigation.buttonTemplate = template; } function getClonedButton(key, link) { let string = key; if (Array.isArray(key)) { [key, string] = key; } let cloned = globalThis.GoogleNavigation.buttonTemplate.cloneNode(); cloned.commandKeydown = globalThis.GoogleNavigation.buttonTemplate.commandKeydown; cloned.commandKeyup = globalThis.GoogleNavigation.buttonTemplate.commandKeyup; cloned.commandPress = globalThis.GoogleNavigation.buttonTemplate.commandPress; cloned.commandCancel = globalThis.GoogleNavigation.buttonTemplate.commandCancel; cloned.innerHTML = string; cloned.classList.add(`google-navigation--button-${key}`); if (link) { cloned.link = link; cloned.setAttribute('link', link); } return cloned; } function plantButtons() { let search = document.getElementById('search'); let rcnt = document.getElementById('rcnt'); let links = [...document.getElementsByClassName('LC20lb')]; let num = 0; for (let link of links) { if (getCollapseSectionParent(link)) continue; if (num >= 10) break; let href = link.parentElement.href; let cloned; cloned = getClonedButton(num, href); cloned.style.top = `${link.offsetTop + link.clientHeight / 2 - GoogleNavigation.GN_BUTTON_SIZE_HALF}px`; link.insertBefore(cloned, link.children[0]); let node = link; let notInRcnt = false; do { if (!(node instanceof Element)) { notInRcnt = true; break; } let style = window.getComputedStyle(node); if (style['overflow'] === 'hidden') { node.style.overflow = 'visible'; } if (style['contain'] === 'layout paint') { node.style.contain = 'unset'; } node = node.parentElement; } while (node !== rcnt); if (notInRcnt) continue; setButtonEnter(document.activeElement === document.body); num += 1; } if (search) { let cloned = getClonedButton(['Control', 'CTRL']); cloned.id = 'google-navigation--switch-Control'; cloned.classList.add('google-navigation--switch'); cloned.style.left = '-150px'; cloned.style.width = '80px'; cloned.style.fontWeight = 'bold'; cloned.keydown = false; cloned.commandKeydown = function () { this.tmrKeypress = globalThis.setTimeout(() => { this.tmrKeypress = globalThis.GoogleNavigation.GN_KEYPRESS_CANCELED; }, globalThis.GoogleNavigation.GN_KEYPRESS_SENSITIVITY); }; cloned.commandKeyup = function () { if (this.tmrKeypress === globalThis.GoogleNavigation.GN_KEYPRESS_CANCELED) { this.tmrKeypress = undefined; } else if (this.tmrKeypress) { this.keydown = !this.keydown; if (this.keydown) { this.classList.add('keydown'); } else { this.classList.remove('keydown'); } } }; search.insertBefore(cloned, search.children[0]); } let btnWiki = document.getElementsByClassName('ruhjFe')[0]; if (btnWiki) { let cloned = getClonedButton(['p', 'P'], btnWiki.href); let card = getWidgetParent(btnWiki); if (!card) { card = document.getElementById('rhs'); cloned.style.left = `calc(2 / 3 * var(--google-navigation--button-size) + 100%)`; } card.style.position = 'relative'; card.insertBefore(cloned, card.children[0]); } let translatorWidgetMain = document.getElementById('tw-main'); let translatorWidgetSourceTextTA = document.getElementById('tw-source-text-ta'); if (translatorWidgetMain && translatorWidgetSourceTextTA) { let cloned = getClonedButton(['t', 'T']); let rectMain = translatorWidgetMain.getBoundingClientRect(); let rectText = translatorWidgetSourceTextTA.getBoundingClientRect(); let top = (rectText.bottom + rectText.top) / 2 - rectMain.top - GoogleNavigation.GN_BUTTON_SIZE_HALF; cloned.style.top = `${top}px`; cloned.commandPress = function () { document.getElementById('tw-source-text-ta').focus(); }; translatorWidgetMain.style.position = 'relative'; translatorWidgetMain.insertBefore(cloned, translatorWidgetMain.children[0]); } let calculatorWidget = document.getElementById('cwos')?.parentElement?.parentElement; if (calculatorWidget) { let calculatorWidgetParent = getWidgetParent(calculatorWidget); let cloned = getClonedButton(['t', 'T']); let top = calculatorWidgetParent.clientHeight / 2 - globalThis.GoogleNavigation.GN_BUTTON_SIZE_HALF; cloned.style.top = `${top}px`; cloned.commandPress = function () { document.getElementById('cwos').parentElement.parentElement.focus(); }; calculatorWidgetParent.insertBefore(cloned, calculatorWidgetParent.children[0]); } let pnprev = document.getElementById('pnprev'); if (pnprev) { let cloned = getClonedButton([',', ','], pnprev.href); cloned.style.top = '-3px'; cloned.style.left = '-40px'; pnprev.style.position = 'relative'; pnprev.insertBefore(cloned, pnprev.children[0]); } let pnnext = document.getElementById('pnnext'); if (pnnext) { let cloned = getClonedButton(['.', '‧'], pnnext.href); cloned.style.top = '-3px'; cloned.style.left = 'calc(100% + 5px)'; pnnext.style.position = 'relative'; pnnext.insertBefore(cloned, pnnext.children[0]); } } function isCommanding() { let target = document.activeElement; return !(['INPUT', 'TEXTAREA'].includes(target.tagName) || target.classList.contains('jlkklc')); } function cssVar(name) { return globalThis.getComputedStyle(document.documentElement).getPropertyValue(name); } function getParent(element, condition) { let node = element; do { if (condition(node)) return node; node = node.parentElement; } while (node !== document.body); return null; } function getWidgetParent(element) { return getParent(element, node => { let computedStyle = globalThis.getComputedStyle(node); let borderWidth = computedStyle.borderWidth; return borderWidth !== '' && !(/^0\D*/.test(borderWidth)); }); } function getCollapseSectionParent(element) { return getParent(element, node => node.getAttribute('jscontroller') === 'Da4hkd'); } function assignEventListeners() { let onFocusChanged = function (ev) { document.documentElement.style.setProperty( '--google-navigation--button-opacity', isCommanding() ? 1 : 0.5 ); setButtonEnter(document.activeElement === document.body); }; window.addEventListener('focus', onFocusChanged, true); window.addEventListener('blur', onFocusChanged, true); document.body.addEventListener('keydown', function (ev) { if (globalThis.GoogleNavigation.keydowns.has(ev.key)) return; globalThis.GoogleNavigation.keydowns.add(ev.key); if (isCommanding()) { let button = document.getElementsByClassName(`google-navigation--button-${ev.key}`)[0]; if (button) { button.commandKeydown(); } } }); document.body.addEventListener('keyup', function (ev) { globalThis.GoogleNavigation.keydowns.delete(ev.key); if (globalThis.GoogleNavigation.tmrKeydown === globalThis.GoogleNavigation.GN_KEYDOWN_TIMER_CANCELED) { globalThis.GoogleNavigation.tmrKeydown = undefined; return; } globalThis.clearTimeout(globalThis.GoogleNavigation.tmrKeydown); globalThis.GoogleNavigation.tmrKeydown = undefined; if (isCommanding()) { let button = document.getElementsByClassName(`google-navigation--button-${ev.key}`)[0]; if (button) { button.commandKeyup(); } } }); } function setButtonEnter(enabled) { let btn0 = document.getElementsByClassName('google-navigation--button-0')[0]; if (enabled) { btn0.innerHTML = '⮨'; btn0.classList.add('google-navigation--button-Enter'); } else { btn0.innerHTML = '0'; btn0.classList.remove('google-navigation--button-Enter'); } } setCSSVars(); makeTemplate(); plantButtons(); assignEventListeners();