handy online tools for AT Protocol boat.kelinci.net
atproto bluesky atcute typescript solidjs
20
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: set page title

Mary d6ce0cf0 9490e181

+43 -2
+19
src/lib/navigation/router.tsx
··· 5 5 type JSX, 6 6 type Owner, 7 7 createContext, 8 + createEffect, 8 9 createMemo, 9 10 createRoot, 10 11 createSignal, ··· 276 277 277 278 cb(); 278 279 onCleanup(routerEvents.on(route.id, (e) => e.enter && cb())); 280 + }; 281 + 282 + export const createFocusEffect = (cb: () => void) => { 283 + const { route } = useViewContext(); 284 + const [active, setActive] = createSignal(true); 285 + 286 + onCleanup(routerEvents.on(route.id, (e) => setActive(e.focus))); 287 + createEffect(() => { 288 + if (active()) { 289 + cb(); 290 + } 291 + }); 292 + }; 293 + 294 + export const useTitle = (cb: () => string) => { 295 + createFocusEffect(() => { 296 + document.title = cb(); 297 + }); 279 298 }; 280 299 281 300 export interface RouterViewProps {
+4
src/views/frontpage.tsx
··· 1 1 import { Component, ComponentProps } from 'solid-js'; 2 2 3 + import { useTitle } from '~/lib/navigation/router'; 4 + 3 5 import HistoryIcon from '~/components/ic-icons/baseline-history'; 4 6 import ArchiveOutlinedIcon from '~/components/ic-icons/outline-archive'; 5 7 import BookmarksOutlinedIcon from '~/components/ic-icons/outline-bookmarks'; ··· 125 127 </> 126 128 ); 127 129 }); 130 + 131 + useTitle(() => `boat`); 128 132 129 133 return ( 130 134 <>
+7 -1
src/views/identity/did-lookup.tsx
··· 5 5 6 6 import { getDidDocument } from '~/api/queries/did-doc'; 7 7 import { resolveHandleViaAppView } from '~/api/queries/handle'; 8 + import { serviceUrlString } from '~/api/types/strings'; 8 9 import { DID_OR_HANDLE_RE, isDid } from '~/api/utils/strings'; 9 10 11 + import { useTitle } from '~/lib/navigation/router'; 10 12 import { createQuery } from '~/lib/utils/query'; 11 13 import { asIdentifier, useSearchParams } from '~/lib/utils/search-params'; 12 14 13 15 import CircularProgressView from '~/components/circular-progress-view'; 14 16 import ErrorView from '~/components/error-view'; 15 - import { serviceUrlString } from '~/api/types/strings'; 16 17 17 18 const DidLookupPage = () => { 18 19 const [params, setParams] = useSearchParams({ ··· 34 35 return doc; 35 36 }, 36 37 ); 38 + 39 + useTitle(() => { 40 + const ident = params.q; 41 + return `View identity info` + (ident ? ` — ${ident}` : ``) + ` — boat`; 42 + }); 37 43 38 44 return ( 39 45 <>
+7 -1
src/views/identity/plc-oplogs.tsx
··· 7 7 import { didString, handleString, serviceUrlString } from '~/api/types/strings'; 8 8 import { DID_OR_HANDLE_RE, isDid } from '~/api/utils/strings'; 9 9 10 + import { useTitle } from '~/lib/navigation/router'; 11 + import { dequal } from '~/lib/utils/dequal'; 10 12 import { createQuery } from '~/lib/utils/query'; 11 13 import { asIdentifier, useSearchParams } from '~/lib/utils/search-params'; 12 14 13 15 import CircularProgressView from '~/components/circular-progress-view'; 14 16 import DiffTable from '~/components/diff-table'; 15 17 import ErrorView from '~/components/error-view'; 16 - import { dequal } from '~/lib/utils/dequal'; 17 18 18 19 const PlcOperationLogPage = () => { 19 20 const [params, setParams] = useSearchParams({ ··· 43 44 return v.parse(plcLogEntries, json); 44 45 }, 45 46 ); 47 + 48 + useTitle(() => { 49 + const ident = params.q; 50 + return `View PLC operation logs` + (ident ? ` — ${ident}` : ``) + ` — boat`; 51 + }); 46 52 47 53 return ( 48 54 <>
+3
src/views/repository/car-unpack.tsx
··· 5 5 import { writeTarEntry } from '@mary/tar'; 6 6 7 7 import { createDropZone } from '~/lib/hooks/dropzone'; 8 + import { useTitle } from '~/lib/navigation/router'; 8 9 import { makeAbortable } from '~/lib/utils/abortable'; 9 10 10 11 import Logger, { createLogger } from '~/components/logger'; ··· 151 152 }, 152 153 ); 153 154 }; 155 + 156 + useTitle(() => `Unpack CAR file — boat`); 154 157 155 158 return ( 156 159 <>
+3
src/views/repository/repo-export.tsx
··· 10 10 import { serviceUrlString } from '~/api/types/strings'; 11 11 import { DID_OR_HANDLE_RE, isDid } from '~/api/utils/strings'; 12 12 13 + import { useTitle } from '~/lib/navigation/router'; 13 14 import { makeAbortable } from '~/lib/utils/abortable'; 14 15 import { formatBytes } from '~/lib/utils/intl/bytes'; 15 16 ··· 127 128 logger.log(`Finished`); 128 129 } 129 130 }; 131 + 132 + useTitle(() => `Export repository — boat`); 130 133 131 134 return ( 132 135 <>