From 8d4c70a571d868958bf779400401b03b9124b178 Mon Sep 17 00:00:00 2001 From: Ray Slakinski <19767+rays@users.noreply.github.com> Date: Sun, 8 Nov 2026 14:18:55 -0500 Subject: [PATCH] Admin page: the top bar clears the status bar in the iOS app (#423) admin.html's viewport meta lacked viewport-fit=cover, which index.html has. Without it env(safe-area-inset-top) is 0, so the top bar's padding did not clear the clock in the app's full-screen web view, and the back arrow sat under it and could not be tapped. Seen in the simulator, the built page served locally: the arrow and the title level with the clock before, below the status bar after. Also a launch argument, -ipx.noBadgePrompt, so a simulator run can get past the badge permission dialog. Co-Authored-By: Claude Sonnet 5.5 --- ios/README.md | 2 +- ios/Sources/Badge.swift | 3 +++ web/CHANGELOG.md | 2 ++ web/admin.html | 2 +- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ios/README.md b/ios/README.md index f3544e6..a664417 100644 --- a/ios/README.md +++ b/ios/README.md @@ -27,7 +27,7 @@ The first launch asks, with `https://ipodderx.sdf1.net` filled in; a bare host g Shake the phone to change it. Plain `http://` only on your own network (`http://192.168.1.130:8099`), which is all `NSAllowsLocalNetworking` allows. Sign in on the page that follows, through Cloudflare Access or ipx's own form; the cookies that leaves are what the -player uses (`CookieBridge`). `-ipx.server ` as a launch argument overrides it for a run. +player uses (`CookieBridge`). `-ipx.server ` as a launch argument overrides it for a run. `-ipx.noBadgePrompt YES` skips the badge permission dialog, which covers the page in a simulator run nobody is there to tap. ## Player token diff --git a/ios/Sources/Badge.swift b/ios/Sources/Badge.swift index 6dd97db..34f1116 100644 --- a/ios/Sources/Badge.swift +++ b/ios/Sources/Badge.swift @@ -32,6 +32,9 @@ enum Badge { /// Asks once, for the badge alone: no alerts, no sounds. static func requestPermission() { + // `-ipx.noBadgePrompt YES` on the launch arguments: a simulator run that drives the page + // has nobody to tap Allow, and the dialog covers it. + if UserDefaults.standard.bool(forKey: "ipx.noBadgePrompt") { return } UNUserNotificationCenter.current().requestAuthorization(options: [.badge]) { _, _ in } } diff --git a/web/CHANGELOG.md b/web/CHANGELOG.md index b3cd9bc..08a0b97 100644 --- a/web/CHANGELOG.md +++ b/web/CHANGELOG.md @@ -23,6 +23,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The Check every feed button in All Subscriptions' header, which did what the top bar's does (#416). ### Fixed + +- The admin page's top bar clears the status bar in the iOS app, so its back button can be tapped; the page asked for no room under the clock as the app page does (#423). - Swiping, or j, through more than 50 items no longer stops at the 50th until a reload: the next ones are fetched as you near the end, and Load more on the Unread tab no longer skips as many unread items as you had read (#383). - On the Unread tab, a short list read through no longer asks the server for more that is not there, or shows a count of 0 items beside the items still on screen (#385). - ipx-web no longer logs a deprecation warning about its metrics setting at every start (#381). diff --git a/web/admin.html b/web/admin.html index 31769d7..36ac673 100644 --- a/web/admin.html +++ b/web/admin.html @@ -2,7 +2,7 @@ - + iPX admin