Salah 0.5: defer center resizing until scrolling stops

This commit is contained in:
2026-09-12 13:15:30 +01:00
parent d92609e046
commit 1c20c2927c
5 changed files with 85 additions and 32 deletions
+8 -8
View File
@@ -9,21 +9,21 @@ const p = Object.assign({}, ctx.spec, JSON.parse(JSON.stringify(ctx.spec.private
p.update()
assert.equal(typeof p.onScroll, 'function', 'scroll handler drives center magnification')
const size = i => parseFloat(p.rows[i].timeStyle.fontSize)
p.onScroll({scrollY: 0})
p.onScroll({scrollY: 0, scrollState: 0})
assert.equal(size(0), 60, 'first centered prayer gets 60px time')
assert.ok(size(1) < size(0))
p.onScroll({scrollY: 104})
p.onScroll({scrollY: 104, scrollState: 0})
assert.equal(size(1), 60)
assert.equal(size(0), size(2), 'symmetric shrink around center')
p.onScroll({scrollY: 52})
assert.equal(size(0), size(1), 'continuous interpolation between rows')
assert.ok(size(0) > 30 && size(0) < 60)
p.onScroll({scrollY: 520})
p.onScroll({scrollY: 52, scrollState: 0})
assert.equal(size(1), 60, 'nearest row wins after stopping halfway')
assert.equal(size(0), 30)
p.onScroll({scrollY: 520, scrollState: 0})
assert.equal(size(5), 60, 'last prayer can be magnified')
p.update()
assert.equal(size(5), 60, 'clock refresh preserves scroll focus')
for (const offset of [-100, 9999]) {
p.onScroll({scrollY: offset})
p.onScroll({scrollY: offset, scrollState: 0})
p.rows.forEach(row => assert.ok(parseFloat(row.timeStyle.fontSize) >= 30 && parseFloat(row.timeStyle.fontSize) <= 60))
}
const before = JSON.stringify(p.rows)
@@ -37,4 +37,4 @@ function css(c,k) { return parseFloat(src.match(new RegExp('\\.'+c+'\\s*\\{([^}]
assert.equal(css('prayers','top') + css('prayers','height') / 2, 233, 'magnification center is physical screen center')
assert.equal(css('row','height'), 104, 'fixed row geometry prevents scroll feedback')
assert.ok(css('clock','font-size') > 42, 'header clock enlarged too')
console.log('Center magnification, interpolation, end rows, refresh preservation, invalid events and wiring passed')
console.log('Center magnification, settled focus, end rows, refresh preservation, invalid events and wiring passed')