Add configurable browser tab title (#1055) (replicates mxtommy/Kip #1077) - #63
Merged
Merged
Conversation
Adds resolveBrowserTabTitle() plus its spec. The stub returns the raw value, so the tests fail on purpose: a blank/whitespace value should fall back to "KIP" and a set value should be trimmed.
resolveBrowserTabTitle() now trims the value and falls back to "KIP" when blank. Adds a persisted browserTabTitle app setting (mirrors the instanceName pattern in SettingsService, defaulting to "KIP"), a "Browser Tab" field in Settings > Display, and an effect in AppComponent that keeps document.title in sync via Angular's Title service. Lets users running several KIP instances tell their tabs apart.
Preserve SKip's tab branding: the upstream #1055 feature drives document.title and defaulted to 'KIP', which would override the fork's 'SKip' title (index.html, manifest). Rebrand all defaults, the resolver fallback, UI copy, and tests to 'SKip'.
24 tasks
Brings the branch up to date with main. main's display.component.spec.ts already carries the getBrowserTabTitle/setBrowserTabTitle stubs and the current SettingsNotifications suite, which the branch's older spec lacked — the source of the angular-vitest failure. No source changes needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ETfeXXs8R5ciw6nGxGYj2C
Contributor
Author
Content review: accept — clean, one lowRead the settings plumbing, resolver util, and the
Otherwise clean and appropriately scoped. (Resolution applied earlier: merged main to pick up the settings-mock stubs the branch's older spec lacked; CI green.) |
mairas
added a commit
that referenced
this pull request
Jul 1, 2026
Re-lands the trim fix from the content review of #63 (configurable tab title): #63 merged at its pre-fix head, so this follow-up delivers it. The setter persisted the raw value; only the resolver trimmed for display, so a padded/whitespace-only tab title was stored verbatim. Trim on store and normalize blank to '' (the resolver still falls back to the default). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ETfeXXs8R5ciw6nGxGYj2C
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replicates upstream PR mxtommy/Kip#1077 ("Add configurable browser tab title (#1055)") by dillan.
Adds a persisted
browserTabTitleapp setting, a "Browser Tab" field under Settings > Display, and an effect inAppComponentthat keepsdocument.titlein sync via Angular'sTitleservice — letting users running several instances tell their tabs apart.Method: commit-by-commit cherry-pick (linear upstream history, original authorship preserved).
src/app/core/services/settings.service.ts— Cherry-pick conflict in the profile-config init block. The fork loadsisRemoteControl/instanceNamefrom the per-deviceconnectionConfig(not the profile), so those upstream blocks were deliberately removed here. Kept the fork's divergence and added only the newbrowserTabTitleinit block.src/default-config/config.blank.const.ts— Changed the defaultbrowserTabTitlefrom"KIP"to"SKip"so the fork's tab branding is preserved.src/app/core/utils/browser-tab-title.util.ts— Rebranded the empty/whitespace fallback from'KIP'to'SKip'.src/app/core/utils/browser-tab-title.util.spec.ts— Updated test expectations to the'SKip'default.src/app/core/services/settings.service.ts— Rebranded theBehaviorSubjectdefault and init fallback from'KIP'to'SKip'.src/app/app.component.ts— Rebranded thetoSignalinitialValuefrom'KIP'to'SKip'.src/app/core/components/options/display/display.component.ts— Rebranded the form model default from'KIP'to'SKip'.src/app/core/components/options/display/display.component.html— Rebranded UI copy and placeholder (KIP instances→SKip instances,Ex. Mast-KIP→Ex. Mast-SKip).Without these branding changes the feature would override the fork's existing
SKiptab title (set inindex.html/manifest.json) withKIP.Needs a build + review before merge.
This is an experimental replica carried in the fork for evaluation.
package-lock.jsonwas not regenerated (no install/build run); a build is required before merge.