Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions src/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -969,23 +969,24 @@ <h2>
<template id="link-elem-template">
<li class="link link-elem">
<a rel="noreferrer noopener" draggable="false">
<div>
<div class="link-icon">
<img alt="" draggable="false" />
</div>
<span></span>
<span class="link-elem-title"></span>
</a>
</li>
</template>

<template id="link-folder-template">
<li class="link link-folder" tabindex="0">
<div>
<div class="link-icon">
<img alt="" draggable="false" />
<img alt="" draggable="false" />
<img alt="" draggable="false" />
<img alt="" draggable="false" />
</div>
<span></span>

<span class="link-folder-title"></span>
</li>
</template>

Expand Down
9 changes: 6 additions & 3 deletions src/scripts/features/links/folders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ queueMicrotask(() => {
document.addEventListener('close-folder', closeFolder)
})

export async function folderClick(event: MouseEvent | KeyboardEvent): Promise<void> {
const li = getLiFromEvent(event)
export async function folderClick(event: MouseEvent | KeyboardEvent, li?: HTMLLIElement): Promise<void> {
if (!li) {
li = getLiFromEvent(event)
}

let rightClick = false
let ctrlClick = false
Expand All @@ -26,7 +28,7 @@ export async function folderClick(event: MouseEvent | KeyboardEvent): Promise<vo
ctrlClick = event.button === 0 && (event.ctrlKey || event.metaKey)
middleClick = event.button === 1
} else if (event instanceof KeyboardEvent) {
if (event.key === 'Enter' || event.key === ' ') {
if (event.key === 'Enter' || event.key === ' ' || event.altKey) {
event.preventDefault() // prevent scrolling when pressing Space
folderClick(event)
} else return
Expand Down Expand Up @@ -118,6 +120,7 @@ async function closeFolder(): Promise<void> {
group.classList.remove('hiding')
}
}

}

function openAllLinks(data: Sync, li: HTMLLIElement): void {
Expand Down
44 changes: 43 additions & 1 deletion src/scripts/features/links/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ export async function quickLinks(init?: LinksInit, event?: LinksUpdate): Promise
initGroups(sync, !!init)
initRows(sync.linksrow, sync.linkstyle)
initblocks(sync, local)
setOpenLinkWithKeyboardEvents()
}

// Initialisation
Expand Down Expand Up @@ -248,6 +249,7 @@ export function initblocks(sync: Sync, local?: Local): true {

setRadius(sync.linkiconradius)
displayInterface('links')
limitAltableLinks()

return true
}
Expand Down Expand Up @@ -285,7 +287,7 @@ function createFolder(link: LinkFolder, folderChildren: Link[], style: Sync['lin

function createElem(link: LinkElem, openInNewtab: boolean, style: Sync['linkstyle']): HTMLLIElement {
const li = getHTMLTemplate<HTMLLIElement>('link-elem-template', 'li')
const span = li.querySelector('span')
const span = li.querySelector('span.link-elem-title')
const anchor = li.querySelector('a')
const img = li.querySelector('img')

Expand Down Expand Up @@ -482,6 +484,7 @@ export async function linksUpdate(update: LinksUpdate): Promise<void> {
return
}


storage.sync.set(data)
}

Expand Down Expand Up @@ -915,3 +918,42 @@ function getIconFromLinkElem(link: LinkElem): string {
function isLinkStyle(s: string): s is Sync['linkstyle'] {
return ['large', 'medium', 'small', 'inline', 'text'].includes(s)
}

function setOpenLinkWithKeyboardEvents(): void {
document.addEventListener('keydown', (event: KeyboardEvent) => {
// avoid key combos
if (!event.altKey || event.ctrlKey || event.metaKey) return
let index: number | null = null

if (event.code.startsWith('Digit')) {
index = Number(event.code.replace('Digit', ''))
}

if (event.code.startsWith('Numpad')) {
index = Number(event.code.replace('Numpad', ''))
}

if (index === null || Number.isNaN(index)) return

const link = document.querySelectorAll('.link')[index - 1] as HTMLLIElement

if (!link) return
event.preventDefault()

// if folder
if (link.classList.contains('link-folder')) {
folderClick(event, link)
} else { // if link
link.querySelector('a')?.click()
}
})
}

// no way to do this in CSS with the pinned groups :(
export function limitAltableLinks(): void {
const links = document.querySelectorAll<HTMLElement>('#linkblocks .link')

links.forEach((link, i) => {
link.classList.toggle('no-alt', i >= 9)
})
}
25 changes: 25 additions & 0 deletions src/scripts/features/others.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,31 @@ export function textShadow(init?: number, event?: number): void {
}
}

export function altMode(): void {
const root = document.documentElement

const set = (value: boolean) => {
root.dataset.altMode = String(value)
}

document.addEventListener('keydown', (event: KeyboardEvent) => {
if (event.key === 'Alt') set(true)
})

document.addEventListener('keyup', (event: KeyboardEvent) => {
if (event.key === 'Alt') set(false)
})

self.addEventListener('blur', () => set(false))

// in case the user clicks on another window whilst alting
document.addEventListener('visibilitychange', () => {
if (document.hidden) set(false)
})

document.addEventListener('contextmenu', () => set(false))
}

// Unfocus address bar on chromium
// https://stackoverflow.com/q/64868024
// if (window.location.search !== '?r=1') {
Expand Down
3 changes: 2 additions & 1 deletion src/scripts/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { darkmode, favicon, pageControl, tabTitle, textShadow } from './features/others.ts'
import { darkmode, favicon, pageControl, tabTitle, textShadow, altMode } from './features/others.ts'
import { supportersNotifications } from './features/supporters.ts'
import { synchronization } from './features/synchronization/index.ts'
import { backgroundsInit } from './features/backgrounds/index.ts'
Expand Down Expand Up @@ -93,6 +93,7 @@ async function startup(): Promise<void> {
pageControl({ width: sync.pagewidth, gap: sync.pagegap })
operaExtensionExplainer(local.operaExplained)
tabsTracking()
altMode()

document.documentElement.dataset.system = SYSTEM_OS as string
document.documentElement.dataset.browser = BROWSER as string
Expand Down
Loading
Loading