mirror of
https://github.com/coracle-social/coracle.git
synced 2024-09-18 19:23:40 +00:00
Fix truncating content based on links that aren't displayed
This commit is contained in:
parent
4420284e64
commit
06405d5cc3
@ -1,5 +1,5 @@
|
||||
<script lang="ts">
|
||||
import {without, last} from "ramda"
|
||||
import {without} from "ramda"
|
||||
import {
|
||||
parseContent,
|
||||
getLinks,
|
||||
@ -28,8 +28,7 @@
|
||||
const links = getLinks(shortContent)
|
||||
const extraLinks = without(links, getLinks(fullContent))
|
||||
|
||||
export const isNewline = i =>
|
||||
!shortContent[i] || shortContent[i].type === NEWLINE
|
||||
export const isNewline = i => !shortContent[i] || shortContent[i].type === NEWLINE
|
||||
|
||||
export const isStartOrEnd = i => isNewline(i - 1) || isNewline(i + 1)
|
||||
</script>
|
||||
@ -46,7 +45,7 @@
|
||||
<QRCode fullWidth onClick="copy" code={value} />
|
||||
</div>
|
||||
{:else if type === LINK}
|
||||
<NoteContentLink {value} showMedia={showMedia && isStartOrEnd(i) && last(value.url.split('://')).includes('/')} />
|
||||
<NoteContentLink {value} showMedia={showMedia && isStartOrEnd(i)} />
|
||||
{:else if type.match(/^nostr:np(rofile|ub)$/)}
|
||||
<NoteContentPerson {value} />
|
||||
{:else if type.startsWith("nostr:") && showMedia && isStartOrEnd(i) && value.id !== anchorId}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import {Tags} from "src/util/nostr"
|
||||
import {canDisplayUrl} from "src/util/notes"
|
||||
import {urlIsMedia} from "src/util/notes"
|
||||
import NoteContentLink from "src/app/shared/NoteContentLink.svelte"
|
||||
|
||||
export let note, showMedia
|
||||
@ -9,5 +9,5 @@
|
||||
</script>
|
||||
|
||||
{#if url}
|
||||
<NoteContentLink value={{url, canDisplay: canDisplayUrl(url)}} {showMedia} />
|
||||
<NoteContentLink value={{url, isMedia: urlIsMedia(url)}} {showMedia} />
|
||||
{/if}
|
||||
|
@ -1,10 +1,10 @@
|
||||
<script lang="ts">
|
||||
import {marked} from 'marked'
|
||||
import insane from 'insane'
|
||||
import {Tags} from 'src/util/nostr'
|
||||
import {canDisplayUrl} from 'src/util/notes'
|
||||
import {marked} from "marked"
|
||||
import insane from "insane"
|
||||
import {Tags} from "src/util/nostr"
|
||||
import {urlIsMedia} from "src/util/notes"
|
||||
import {modal} from "src/partials/state"
|
||||
import Chip from 'src/partials/Chip.svelte'
|
||||
import Chip from "src/partials/Chip.svelte"
|
||||
import NoteContentLink from "src/app/shared/NoteContentLink.svelte"
|
||||
|
||||
export let note, showEntire
|
||||
@ -19,18 +19,16 @@
|
||||
</script>
|
||||
|
||||
<div class="flex flex-col gap-2 overflow-hidden text-ellipsis">
|
||||
<h3 class="text-2xl staatliches">{title}</h3>
|
||||
<h3 class="staatliches text-2xl">{title}</h3>
|
||||
{#if summary && !showEntire}
|
||||
<p>{summary}</p>
|
||||
{/if}
|
||||
{#if showMedia && image && canDisplayUrl(image)}
|
||||
{#if showMedia && image && urlIsMedia(image)}
|
||||
<NoteContentLink value={{url: image, canDisplay: true}} showMedia />
|
||||
{/if}
|
||||
<div>
|
||||
{#each tags.topics() as topic}
|
||||
<Chip
|
||||
class="mr-2 mb-2 inline-block cursor-pointer"
|
||||
on:click={() => openTopic(topic)}>
|
||||
<Chip class="mr-2 mb-2 inline-block cursor-pointer" on:click={() => openTopic(topic)}>
|
||||
#{topic}
|
||||
</Chip>
|
||||
{/each}
|
||||
|
@ -1,6 +1,6 @@
|
||||
<script lang="ts">
|
||||
import {Tags} from "src/util/nostr"
|
||||
import {canDisplayUrl} from "src/util/notes"
|
||||
import {urlIsMedia} from "src/util/notes"
|
||||
import NoteContentKind1 from "src/app/shared/NoteContentKind1.svelte"
|
||||
import NoteContentLink from "src/app/shared/NoteContentLink.svelte"
|
||||
|
||||
@ -16,5 +16,5 @@
|
||||
</div>
|
||||
|
||||
{#if ref}
|
||||
<NoteContentLink {showMedia} value={{url: ref, canDisplay: canDisplayUrl(ref)}} />
|
||||
<NoteContentLink {showMedia} value={{url: ref, isMedia: urlIsMedia(ref)}} />
|
||||
{/if}
|
||||
|
@ -13,7 +13,7 @@
|
||||
let hidden = false
|
||||
</script>
|
||||
|
||||
{#if showMedia && value.canDisplay}
|
||||
{#if showMedia && value.isMedia}
|
||||
<div class="py-2">
|
||||
<Media link={annotateMedia(value.url)} onClose={close} />
|
||||
</div>
|
||||
|
@ -14,7 +14,8 @@ export const NOSTR_NPUB = "nostr:npub"
|
||||
export const NOSTR_NPROFILE = "nostr:nprofile"
|
||||
export const NOSTR_NADDR = "nostr:naddr"
|
||||
|
||||
export const canDisplayUrl = url => !url.match(/\.(apk|docx|xlsx|csv|dmg)/)
|
||||
export const urlIsMedia = url =>
|
||||
!url.match(/\.(apk|docx|xlsx|csv|dmg)/) && last(url.split("://")).includes("/")
|
||||
|
||||
export const parseContent = ({content, tags = []}) => {
|
||||
const result = []
|
||||
@ -120,7 +121,7 @@ export const parseContent = ({content, tags = []}) => {
|
||||
url = "https://" + url
|
||||
}
|
||||
|
||||
return [LINK, raw, {url, canDisplay: canDisplayUrl(url)}]
|
||||
return [LINK, raw, {url, isMedia: urlIsMedia(url)}]
|
||||
}
|
||||
}
|
||||
|
||||
@ -170,8 +171,8 @@ export const truncateContent = (content, {showEntire, maxLength, showMedia = fal
|
||||
const truncateAt = maxLength * 0.6
|
||||
|
||||
content.every((part, i) => {
|
||||
const isText = [TOPIC, TEXT].includes(part.type)
|
||||
const isMedia = [LINK, INVOICE].includes(part.type) || part.type.startsWith("nostr:")
|
||||
const isText = [TOPIC, TEXT].includes(part.type) || (part.type === LINK && !part.value.isMedia)
|
||||
const isMedia = part.type === INVOICE || part.type.startsWith("nostr:") || part.value.isMedia
|
||||
|
||||
if (isText) {
|
||||
length += part.value.length
|
||||
@ -200,5 +201,5 @@ export const truncateContent = (content, {showEntire, maxLength, showMedia = fal
|
||||
export const getLinks = parts =>
|
||||
pluck(
|
||||
"value",
|
||||
parts.filter(x => x.type === LINK && x.canDisplay)
|
||||
parts.filter(x => x.type === LINK && x.isMedia)
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user