TootAuthorGroup: remove css module
This commit is contained in:
		
							parent
							
								
									edfbf5505b
								
							
						
					
					
						commit
						f56b92fff0
					
				
					 3 changed files with 66 additions and 59 deletions
				
			
		| 
						 | 
				
			
			@ -10,23 +10,19 @@ import {
 | 
			
		|||
  createContext,
 | 
			
		||||
  useContext,
 | 
			
		||||
} from "solid-js";
 | 
			
		||||
import tootStyle from "./toot.module.css";
 | 
			
		||||
import { formatRelative } from "date-fns";
 | 
			
		||||
import Img from "~material/Img.js";
 | 
			
		||||
import { Body2 } from "~material/typography.js";
 | 
			
		||||
import { SmartToySharp, Lock } from "@suid/icons-material";
 | 
			
		||||
import { useTimeSource } from "~platform/timesrc.js";
 | 
			
		||||
import { resolveCustomEmoji } from "../masto/toot.js";
 | 
			
		||||
import { Divider } from "@suid/material";
 | 
			
		||||
import cardStyle from "~material/cards.module.css";
 | 
			
		||||
import MediaAttachmentGrid from "./toots/MediaAttachmentGrid.jsx";
 | 
			
		||||
import { useDateFnLocale } from "~platform/i18n";
 | 
			
		||||
import { makeAcctText, useDefaultSession } from "../masto/clients";
 | 
			
		||||
import TootContent from "./toots/TootContent";
 | 
			
		||||
import BoostIcon from "./toots/BoostIcon";
 | 
			
		||||
import PreviewCard from "./toots/PreviewCard";
 | 
			
		||||
import TootPoll from "./toots/TootPoll";
 | 
			
		||||
import TootActionGroup from "./toots/TootActionGroup.js";
 | 
			
		||||
import TootAuthorGroup from "./toots/TootAuthorGroup.js";
 | 
			
		||||
import "./RegularToot.css";
 | 
			
		||||
 | 
			
		||||
export type TootEnv = {
 | 
			
		||||
| 
						 | 
				
			
			@ -66,63 +62,17 @@ type RegularTootProps = {
 | 
			
		|||
 | 
			
		||||
export function findRootToot(element: HTMLElement) {
 | 
			
		||||
  let current: HTMLElement | null = element;
 | 
			
		||||
  while (current && !current.classList.contains(tootStyle.toot)) {
 | 
			
		||||
  while (current && !current.classList.contains("RegularToot")) {
 | 
			
		||||
    current = current.parentElement;
 | 
			
		||||
  }
 | 
			
		||||
  if (!current) {
 | 
			
		||||
    throw Error(
 | 
			
		||||
      `the element must be placed under a element with ${tootStyle.toot}`,
 | 
			
		||||
      `the element must be placed under a element with .RegularToot`,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
  return current;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function TootAuthorGroup(
 | 
			
		||||
  props: {
 | 
			
		||||
    status: mastodon.v1.Status;
 | 
			
		||||
    now: Date;
 | 
			
		||||
  } & JSX.HTMLElementTags["div"],
 | 
			
		||||
) {
 | 
			
		||||
  const [managed, rest] = splitProps(props, ["status", "now"]);
 | 
			
		||||
  const toot = () => managed.status;
 | 
			
		||||
  const dateFnLocale = useDateFnLocale();
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div class={tootStyle.tootAuthorGrp} {...rest}>
 | 
			
		||||
      <Img src={toot().account.avatar} class={tootStyle.tootAvatar} />
 | 
			
		||||
      <div class={tootStyle.tootAuthorNameGrp}>
 | 
			
		||||
        <div class={tootStyle.tootAuthorNamePrimary}>
 | 
			
		||||
          <Show when={toot().account.bot}>
 | 
			
		||||
            <SmartToySharp class="acct-mark" aria-label="Bot" />
 | 
			
		||||
          </Show>
 | 
			
		||||
          <Show when={toot().account.locked}>
 | 
			
		||||
            <Lock class="acct-mark" aria-label="Locked" />
 | 
			
		||||
          </Show>
 | 
			
		||||
          <Body2
 | 
			
		||||
            component="span"
 | 
			
		||||
            ref={(e: { innerHTML: string }) => {
 | 
			
		||||
              createRenderEffect(() => {
 | 
			
		||||
                e.innerHTML = resolveCustomEmoji(
 | 
			
		||||
                  toot().account.displayName,
 | 
			
		||||
                  toot().account.emojis,
 | 
			
		||||
                );
 | 
			
		||||
              });
 | 
			
		||||
            }}
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <time datetime={toot().createdAt}>
 | 
			
		||||
          {formatRelative(toot().createdAt, managed.now, {
 | 
			
		||||
            locale: dateFnLocale(),
 | 
			
		||||
          })}
 | 
			
		||||
        </time>
 | 
			
		||||
        <span>
 | 
			
		||||
          @{toot().account.username}@{new URL(toot().account.url).hostname}
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * find bottom-to-top the element with `data-action`.
 | 
			
		||||
 */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
.tootAuthorGrp {
 | 
			
		||||
.TootAuthorGroup {
 | 
			
		||||
  display: flex;
 | 
			
		||||
  align-items: flex-start;
 | 
			
		||||
  gap: 8px;
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +10,7 @@
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tootAuthorNameGrp {
 | 
			
		||||
.TootAuthorGroup > .name-grp {
 | 
			
		||||
  display: grid;
 | 
			
		||||
  grid-template-columns: 1fr auto;
 | 
			
		||||
  color: var(--tutu-color-secondary-text-on-surface);
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +30,10 @@
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tootAuthorNamePrimary {
 | 
			
		||||
.TootAuthorGroup > .name-grp > .name-primary {
 | 
			
		||||
  color: var(--tutu-color-on-surface);
 | 
			
		||||
 | 
			
		||||
  > :global(.acct-mark) {
 | 
			
		||||
  > .acct-mark {
 | 
			
		||||
    font-size: 1.2em;
 | 
			
		||||
    color: var(--tutu-color-secondary-text-on-surface);
 | 
			
		||||
    vertical-align: sub;
 | 
			
		||||
| 
						 | 
				
			
			@ -41,7 +41,7 @@
 | 
			
		|||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.tootAvatar {
 | 
			
		||||
.TootAuthorGroup > .avatar {
 | 
			
		||||
  width: calc(var(--toot-avatar-size, 40px) - 1px);
 | 
			
		||||
  aspect-ratio: 1/1;
 | 
			
		||||
  object-fit: contain;
 | 
			
		||||
| 
						 | 
				
			
			@ -49,4 +49,4 @@
 | 
			
		|||
  overflow: hidden;
 | 
			
		||||
  border: 1px solid var(--tutu-color-surface);
 | 
			
		||||
  background-color: var(--tutu-color-surface-d);
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								src/timelines/toots/TootAuthorGroup.tsx
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								src/timelines/toots/TootAuthorGroup.tsx
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,57 @@
 | 
			
		|||
import { SmartToySharp, Lock } from "@suid/icons-material";
 | 
			
		||||
import { formatRelative } from "date-fns";
 | 
			
		||||
import type { mastodon } from "masto";
 | 
			
		||||
import { createRenderEffect, Show, splitProps, type JSX } from "solid-js";
 | 
			
		||||
import Img from "~material/Img";
 | 
			
		||||
import { Body2 } from "~material/typography";
 | 
			
		||||
import { useAppLocale } from "~platform/i18n";
 | 
			
		||||
import { resolveCustomEmoji } from "../../masto/toot";
 | 
			
		||||
import "./TootAuthorGroup.css";
 | 
			
		||||
 | 
			
		||||
function TootAuthorGroup(
 | 
			
		||||
  props: {
 | 
			
		||||
    status: mastodon.v1.Status;
 | 
			
		||||
    now: Date;
 | 
			
		||||
  } & JSX.HTMLElementTags["div"],
 | 
			
		||||
) {
 | 
			
		||||
  const [managed, rest] = splitProps(props, ["status", "now"]);
 | 
			
		||||
  const toot = () => managed.status;
 | 
			
		||||
  const { dateFn: dateFnLocale } = useAppLocale();
 | 
			
		||||
 | 
			
		||||
  return (
 | 
			
		||||
    <div class="TootAuthorGroup" {...rest}>
 | 
			
		||||
      <Img src={toot().account.avatar} class="avatar" />
 | 
			
		||||
      <div class={"name-grp"}>
 | 
			
		||||
        <div class="name-primary">
 | 
			
		||||
          <Show when={toot().account.bot}>
 | 
			
		||||
            <SmartToySharp class="acct-mark" aria-label="Bot" />
 | 
			
		||||
          </Show>
 | 
			
		||||
          <Show when={toot().account.locked}>
 | 
			
		||||
            <Lock class="acct-mark" aria-label="Locked" />
 | 
			
		||||
          </Show>
 | 
			
		||||
          <Body2
 | 
			
		||||
            component="span"
 | 
			
		||||
            ref={(e: { innerHTML: string }) => {
 | 
			
		||||
              createRenderEffect(() => {
 | 
			
		||||
                e.innerHTML = resolveCustomEmoji(
 | 
			
		||||
                  toot().account.displayName,
 | 
			
		||||
                  toot().account.emojis,
 | 
			
		||||
                );
 | 
			
		||||
              });
 | 
			
		||||
            }}
 | 
			
		||||
          />
 | 
			
		||||
        </div>
 | 
			
		||||
        <time datetime={toot().createdAt}>
 | 
			
		||||
          {formatRelative(toot().createdAt, managed.now, {
 | 
			
		||||
            locale: dateFnLocale(),
 | 
			
		||||
          })}
 | 
			
		||||
        </time>
 | 
			
		||||
        <span>
 | 
			
		||||
          @{toot().account.username}@{new URL(toot().account.url).hostname}
 | 
			
		||||
        </span>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default TootAuthorGroup;
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue