2024-07-08 22:46:35 +02:00

73 lines
1.6 KiB
JavaScript

import Gtk from 'gi://Gtk'
import { gettext as _ } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'
function findPadSize(rows) {
let maxSize = []
for (const row of rows) {
row.forEach((col, i) => {
if (typeof maxSize[i] !== 'number') maxSize[i] = 0
if (col.length > maxSize[i]) maxSize[i] = col.length
})
}
return maxSize
}
function row(value, desc, ex) {
return `|<tt><b>${value}</b></tt> | <tt>${_(desc)}</tt> | <tt><i>${_(
ex
)}</i></tt>\n`
}
export function table(rows) {
const [patternPad, descriptionPad, examplePad] = findPadSize(rows)
return `\n\n${rows.reduce(
(acc, [pattern, description, example]) =>
acc +
row(
pattern.padEnd(patternPad),
description.padEnd(descriptionPad),
example.padStart(examplePad)
),
''
)}`
}
export function a(ref, label) {
return ref ? `<a href="${ref}">${_(label)}</a>` : ''
}
export function b(label) {
return `<b>${_(label)}</b>`
}
export function addBox(box, child) {
box.append(child)
}
export function useAddRow(main) {
let row = 0
return (label, input) => {
let inputWidget = input
if (input instanceof Gtk.Switch) {
inputWidget = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL })
addBox(inputWidget, input)
}
if (label) {
main.attach(label, 0, row, 1, 1)
if (inputWidget) main.attach(inputWidget, 1, row, 1, 1)
} else {
main.attach(inputWidget, 0, row, 2, 1)
}
row++
return row - 1
}
}
export function createLabel(label) {
return new Gtk.Label({
label: label,
hexpand: true,
halign: Gtk.Align.START,
})
}