mirror of
https://github.com/karl0ss/homepage.git
synced 2025-05-02 13:33:40 +01:00
Enhancement: icons-only bookmarks style (#4384)
This commit is contained in:
parent
c58f59c105
commit
cb3248117f
@ -118,6 +118,22 @@ As an example, this would produce the following layout:
|
|||||||
|
|
||||||
<img width="1260" alt="Screenshot 2022-09-15 at 8 03 57 PM" src="https://user-images.githubusercontent.com/82196/190466646-8ca94505-0fcf-4964-9687-3a6c7cd3144f.png">
|
<img width="1260" alt="Screenshot 2022-09-15 at 8 03 57 PM" src="https://user-images.githubusercontent.com/82196/190466646-8ca94505-0fcf-4964-9687-3a6c7cd3144f.png">
|
||||||
|
|
||||||
|
### Icons-Only Layout
|
||||||
|
|
||||||
|
You can also specify the an icon-only layout for bookmarks, either like so:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
layout:
|
||||||
|
Media:
|
||||||
|
iconsOnly: true
|
||||||
|
```
|
||||||
|
|
||||||
|
or globally:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
bookmarksStyle: icons
|
||||||
|
```
|
||||||
|
|
||||||
### Sorting
|
### Sorting
|
||||||
|
|
||||||
Service groups and bookmark groups can be mixed in order, **but should use different group names**. If you do not specify any bookmark groups they will all show at the bottom of the page.
|
Service groups and bookmark groups can be mixed in order, **but should use different group names**. If you do not specify any bookmark groups they will all show at the bottom of the page.
|
||||||
|
@ -7,7 +7,13 @@ import ErrorBoundary from "components/errorboundry";
|
|||||||
import List from "components/bookmarks/list";
|
import List from "components/bookmarks/list";
|
||||||
import ResolvedIcon from "components/resolvedicon";
|
import ResolvedIcon from "components/resolvedicon";
|
||||||
|
|
||||||
export default function BookmarksGroup({ bookmarks, layout, disableCollapse, groupsInitiallyCollapsed }) {
|
export default function BookmarksGroup({
|
||||||
|
bookmarks,
|
||||||
|
layout,
|
||||||
|
disableCollapse,
|
||||||
|
groupsInitiallyCollapsed,
|
||||||
|
bookmarksStyle,
|
||||||
|
}) {
|
||||||
const panel = useRef();
|
const panel = useRef();
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -64,7 +70,7 @@ export default function BookmarksGroup({ bookmarks, layout, disableCollapse, gro
|
|||||||
>
|
>
|
||||||
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
|
<Disclosure.Panel className="transition-all overflow-hidden duration-300 ease-out" ref={panel} static>
|
||||||
<ErrorBoundary>
|
<ErrorBoundary>
|
||||||
<List bookmarks={bookmarks.bookmarks} layout={layout} />
|
<List bookmarks={bookmarks.bookmarks} layout={layout} bookmarksStyle={bookmarksStyle} />
|
||||||
</ErrorBoundary>
|
</ErrorBoundary>
|
||||||
</Disclosure.Panel>
|
</Disclosure.Panel>
|
||||||
</Transition>
|
</Transition>
|
||||||
|
@ -4,12 +4,17 @@ import classNames from "classnames";
|
|||||||
import { SettingsContext } from "utils/contexts/settings";
|
import { SettingsContext } from "utils/contexts/settings";
|
||||||
import ResolvedIcon from "components/resolvedicon";
|
import ResolvedIcon from "components/resolvedicon";
|
||||||
|
|
||||||
export default function Item({ bookmark }) {
|
export default function Item({ bookmark, iconOnly = false }) {
|
||||||
const description = bookmark.description ?? new URL(bookmark.href).hostname;
|
const description = bookmark.description ?? new URL(bookmark.href).hostname;
|
||||||
const { settings } = useContext(SettingsContext);
|
const { settings } = useContext(SettingsContext);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<li key={bookmark.name} id={bookmark.id} className="bookmark" data-name={bookmark.name}>
|
<li
|
||||||
|
key={bookmark.name}
|
||||||
|
id={bookmark.id}
|
||||||
|
className={classNames("bookmark", iconOnly && "grid")}
|
||||||
|
data-name={bookmark.name}
|
||||||
|
>
|
||||||
<a
|
<a
|
||||||
href={bookmark.href}
|
href={bookmark.href}
|
||||||
title={bookmark.name}
|
title={bookmark.name}
|
||||||
@ -17,9 +22,20 @@ export default function Item({ bookmark }) {
|
|||||||
target={bookmark.target ?? settings.target ?? "_blank"}
|
target={bookmark.target ?? settings.target ?? "_blank"}
|
||||||
className={classNames(
|
className={classNames(
|
||||||
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
|
settings.cardBlur !== undefined && `backdrop-blur${settings.cardBlur.length ? "-" : ""}${settings.cardBlur}`,
|
||||||
"block w-full text-left cursor-pointer transition-all h-15 mb-3 rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10",
|
"text-left cursor-pointer transition-all rounded-md font-medium text-theme-700 dark:text-theme-200 dark:hover:text-theme-300 shadow-md shadow-theme-900/10 dark:shadow-theme-900/20 bg-theme-100/20 hover:bg-theme-300/20 dark:bg-white/5 dark:hover:bg-white/10",
|
||||||
|
iconOnly ? "h-[60px] w-[60px] grid" : "block w-full h-15 mb-3",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
|
{iconOnly ? (
|
||||||
|
<div className="flex items-center justify-center text-theme-700 hover:text-theme-700 dark:text-theme-200 text-xl font-medium rounded-md bookmark-icon py-0.5">
|
||||||
|
{bookmark.icon && (
|
||||||
|
<div className="w-7 h-7">
|
||||||
|
<ResolvedIcon icon={bookmark.icon} alt={bookmark.abbr} />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
{!bookmark.icon && bookmark.abbr}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
<div className="flex">
|
<div className="flex">
|
||||||
<div className="flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md bookmark-icon">
|
<div className="flex-shrink-0 flex items-center justify-center w-11 bg-theme-500/10 dark:bg-theme-900/50 text-theme-700 hover:text-theme-700 dark:text-theme-200 text-sm font-medium rounded-l-md bookmark-icon">
|
||||||
{bookmark.icon && (
|
{bookmark.icon && (
|
||||||
@ -36,6 +52,7 @@ export default function Item({ bookmark }) {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
)}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -4,16 +4,22 @@ import { columnMap } from "../../utils/layout/columns";
|
|||||||
|
|
||||||
import Item from "components/bookmarks/item";
|
import Item from "components/bookmarks/item";
|
||||||
|
|
||||||
export default function List({ bookmarks, layout }) {
|
export default function List({ bookmarks, layout, bookmarksStyle }) {
|
||||||
|
let classes =
|
||||||
|
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col mt-3 bookmark-list";
|
||||||
|
const style = {};
|
||||||
|
if (layout?.iconsOnly || bookmarksStyle === "icons") {
|
||||||
|
classes = "grid gap-3 mt-3 bookmark-list";
|
||||||
|
style.gridTemplateColumns = "repeat(auto-fill, minmax(60px, 1fr))";
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<ul
|
<ul className={classNames(classes)} style={style}>
|
||||||
className={classNames(
|
|
||||||
layout?.style === "row" ? `grid ${columnMap[layout?.columns]} gap-x-2` : "flex flex-col",
|
|
||||||
"mt-3 bookmark-list",
|
|
||||||
)}
|
|
||||||
>
|
|
||||||
{bookmarks.map((bookmark) => (
|
{bookmarks.map((bookmark) => (
|
||||||
<Item key={`${bookmark.name}-${bookmark.href}`} bookmark={bookmark} />
|
<Item
|
||||||
|
key={`${bookmark.name}-${bookmark.href}`}
|
||||||
|
bookmark={bookmark}
|
||||||
|
iconOnly={layout?.iconsOnly || bookmarksStyle === "icons"}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</ul>
|
</ul>
|
||||||
);
|
);
|
||||||
|
@ -297,6 +297,7 @@ function Home({ initialSettings }) {
|
|||||||
disableCollapse={settings.disableCollapse}
|
disableCollapse={settings.disableCollapse}
|
||||||
useEqualHeights={settings.useEqualHeights}
|
useEqualHeights={settings.useEqualHeights}
|
||||||
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
|
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
|
||||||
|
bookmarksStyle={settings.bookmarksStyle}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<BookmarksGroup
|
<BookmarksGroup
|
||||||
@ -333,6 +334,7 @@ function Home({ initialSettings }) {
|
|||||||
layout={settings.layout?.[group.name]}
|
layout={settings.layout?.[group.name]}
|
||||||
disableCollapse={settings.disableCollapse}
|
disableCollapse={settings.disableCollapse}
|
||||||
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
|
groupsInitiallyCollapsed={settings.groupsInitiallyCollapsed}
|
||||||
|
bookmarksStyle={settings.bookmarksStyle}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
@ -350,6 +352,7 @@ function Home({ initialSettings }) {
|
|||||||
settings.useEqualHeights,
|
settings.useEqualHeights,
|
||||||
settings.cardBlur,
|
settings.cardBlur,
|
||||||
settings.groupsInitiallyCollapsed,
|
settings.groupsInitiallyCollapsed,
|
||||||
|
settings.bookmarksStyle,
|
||||||
initialSettings.layout,
|
initialSettings.layout,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user