getThumbUrl
This commit is contained in:
parent
7c9c155f5b
commit
35c5a0ebcf
|
@ -12,7 +12,7 @@ import { DEFAULT_HEADER_OFFSET, useUI } from '~/context/ui'
|
|||
import type { Author, Maybe, Shout, Topic } from '~/graphql/schema/core.gen'
|
||||
import { processPrepositions } from '~/intl/prepositions'
|
||||
import { isCyrillic } from '~/intl/translate'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { MediaItem } from '~/types/mediaitem'
|
||||
import { capitalize } from '~/utils/capitalize'
|
||||
import { AuthorBadge } from '../Author/AuthorBadge'
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { clsx } from 'clsx'
|
||||
import { Show, createMemo } from 'solid-js'
|
||||
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import './DialogCard.module.scss'
|
||||
|
||||
import styles from './DialogAvatar.module.scss'
|
||||
|
|
|
@ -6,7 +6,7 @@ import { useFollowing } from '~/context/following'
|
|||
import { useLocalize } from '~/context/localize'
|
||||
import { useSession } from '~/context/session'
|
||||
import { FollowingEntity, Topic } from '~/graphql/schema/core.gen'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { mediaMatches } from '~/lib/mediaQuery'
|
||||
import { capitalize } from '~/utils/capitalize'
|
||||
import styles from './TopicBadge.module.scss'
|
||||
|
|
|
@ -25,7 +25,7 @@ import { useLocalize } from '~/context/localize'
|
|||
import getMyShoutQuery from '~/graphql/query/core/article-my'
|
||||
import type { Shout, Topic } from '~/graphql/schema/core.gen'
|
||||
import { slugify } from '~/intl/translit'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { isDesktop } from '~/lib/mediaQuery'
|
||||
import { LayoutType } from '~/types/common'
|
||||
import { MediaItem } from '~/types/mediaitem'
|
||||
|
|
|
@ -19,7 +19,7 @@ import { useProfile } from '~/context/profile'
|
|||
import { useSession } from '~/context/session'
|
||||
import { useSnackbar, useUI } from '~/context/ui'
|
||||
import { InputMaybe, ProfileInput } from '~/graphql/schema/core.gen'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { handleImageUpload } from '~/lib/handleImageUpload'
|
||||
import { profileSocialLinks } from '~/lib/profileSocialLinks'
|
||||
import { clone } from '~/utils/clone'
|
||||
|
|
|
@ -3,7 +3,7 @@ import type { JSX } from 'solid-js'
|
|||
import { Link } from '@solidjs/meta'
|
||||
import { splitProps } from 'solid-js'
|
||||
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
|
||||
type Props = JSX.ImgHTMLAttributes<HTMLImageElement> & {
|
||||
width: number
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { clsx } from 'clsx'
|
||||
import { Show, createEffect, createMemo, createSignal, on, onCleanup } from 'solid-js'
|
||||
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { useEscKeyDownHandler } from '~/lib/useEscKeyDownHandler'
|
||||
import { Icon } from '../Icon'
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ import { useLocalize } from '~/context/localize'
|
|||
import { Shout } from '~/graphql/schema/core.gen'
|
||||
import enKeywords from '~/intl/locales/en/keywords.json'
|
||||
import ruKeywords from '~/intl/locales/ru/keywords.json'
|
||||
import { getImageUrl, getOpenGraphImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl, getOpenGraphImageUrl } from '~/lib/getThumbUrl'
|
||||
import { descFromBody } from '~/utils/meta'
|
||||
import { FooterView } from '../Discours/Footer'
|
||||
import { Header } from '../Nav/Header'
|
||||
|
|
|
@ -7,7 +7,7 @@ import { Manipulation, Navigation, Pagination } from 'swiper/modules'
|
|||
import { useLocalize } from '~/context/localize'
|
||||
import { useSnackbar } from '~/context/ui'
|
||||
import { composeMediaItems } from '~/lib/composeMediaItems'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { handleImageUpload } from '~/lib/handleImageUpload'
|
||||
import { validateUploads } from '~/lib/validateUploads'
|
||||
import { DropArea } from '../DropArea'
|
||||
|
|
|
@ -4,7 +4,7 @@ import SwiperCore from 'swiper'
|
|||
import { HashNavigation, Manipulation, Navigation, Pagination } from 'swiper/modules'
|
||||
import { throttle } from 'throttle-debounce'
|
||||
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { MediaItem } from '~/types/mediaitem'
|
||||
import { Icon } from '../Icon'
|
||||
import { Image } from '../Image'
|
||||
|
|
|
@ -8,12 +8,6 @@ const URL_CONFIG = {
|
|||
productionFolder: 'production/'
|
||||
}
|
||||
|
||||
const AUDIO_EXTENSIONS = new Set(['wav', 'mp3', 'ogg', 'aif', 'flac'])
|
||||
|
||||
const isAudioFile = (filename: string): boolean => {
|
||||
const extension = filename.split('.').pop()?.toLowerCase()
|
||||
return AUDIO_EXTENSIONS.has(extension ?? '')
|
||||
}
|
||||
const getLastSegment = (url: string): string => url.toLowerCase().split('/').pop() || ''
|
||||
|
||||
const buildSizePart = (width?: number, height?: number, includeSize = true): string => {
|
||||
|
@ -31,13 +25,21 @@ export const getImageUrl = (
|
|||
return src
|
||||
}
|
||||
const filename = getLastSegment(src)
|
||||
const base = isAudioFile(filename) ? URL_CONFIG.cdnUrl : URL_CONFIG.thumborUrl
|
||||
const suffix = options.noSizeUrlPart ? '' : buildSizePart(options.width, options.height)
|
||||
const subfolder = isAudioFile(filename) ? URL_CONFIG.audioSubfolder : URL_CONFIG.imageSubfolder
|
||||
const base = URL_CONFIG.thumborUrl
|
||||
const subfolder = URL_CONFIG.imageSubfolder
|
||||
|
||||
return `${base}${suffix}${URL_CONFIG.productionFolder}${subfolder}/${filename}`
|
||||
}
|
||||
|
||||
export const getAudioUrl = (src: string) => {
|
||||
const filename = getLastSegment(src)
|
||||
const base = URL_CONFIG.cdnUrl
|
||||
const subfolder = URL_CONFIG.audioSubfolder
|
||||
const prodfolder = URL_CONFIG.productionFolder
|
||||
return `${base}${prodfolder}${subfolder}/${filename}`
|
||||
}
|
||||
|
||||
export const getOpenGraphImageUrl = (
|
||||
src: string,
|
||||
options: {
|
|
@ -1,42 +0,0 @@
|
|||
import type { Author, Shout, Topic } from '~/graphql/schema/core.gen'
|
||||
|
||||
export const groupByName = (arr: Author[]) => {
|
||||
return arr.reduce(
|
||||
(acc: { [key: string]: Author[] }, a: Author) => {
|
||||
let c =
|
||||
a?.name
|
||||
?.replaceAll(/[^\d A-Za-zА-я]/g, '')
|
||||
.split(' ')
|
||||
.pop()
|
||||
?.slice(0, 1)
|
||||
.toUpperCase() || ''
|
||||
if (c) {
|
||||
if (/[^А-я]/.test(c)) c = 'A-Z'
|
||||
else if (!acc[c]) acc[c] = []
|
||||
acc[c].push(a)
|
||||
}
|
||||
return acc
|
||||
},
|
||||
{
|
||||
'A-Z': []
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
export const groupByTitle = (arr: (Shout | Topic)[]) => {
|
||||
return arr.reduce(
|
||||
(acc: { [key: string]: (Topic | Shout)[] }, tt: Topic | Shout) => {
|
||||
let c = (tt.title || '')
|
||||
.replaceAll(/[^\d A-Za-zА-я]/g, '')
|
||||
.slice(0, 1)
|
||||
.toUpperCase()
|
||||
if (/[^А-я]/.test(c)) c = 'A-Z'
|
||||
else if (!acc[c]) acc[c] = []
|
||||
acc[c].push(tt)
|
||||
return acc
|
||||
},
|
||||
{
|
||||
'A-Z': []
|
||||
}
|
||||
)
|
||||
}
|
|
@ -2,6 +2,12 @@ import { UploadFile } from '@solid-primitives/upload'
|
|||
|
||||
export const imageExtensions = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp'])
|
||||
export const docExtensions = new Set(['doc', 'docx', 'pdf', 'txt'])
|
||||
export const audioExtensions = new Set(['wav', 'mp3', 'ogg', 'aif', 'flac'])
|
||||
|
||||
export const isAudioFilename = (filename: string): boolean => {
|
||||
const extension = filename.split('.').pop()?.toLowerCase()
|
||||
return audioExtensions.has(extension || '')
|
||||
}
|
||||
|
||||
export const validateUploads = (fileType: string, files: UploadFile[]): boolean => {
|
||||
for (const file of files) {
|
||||
|
|
|
@ -15,7 +15,7 @@ import {
|
|||
Shout,
|
||||
Topic
|
||||
} from '~/graphql/schema/core.gen'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { SHOUTS_PER_PAGE } from '../../(main)'
|
||||
|
||||
const fetchAuthorShouts = async (slug: string, offset?: number) => {
|
||||
|
|
|
@ -9,7 +9,7 @@ import { useLocalize } from '~/context/localize'
|
|||
import { useTopics } from '~/context/topics'
|
||||
import { loadShouts, loadTopics } from '~/graphql/api/public'
|
||||
import { Author, LoadShoutsOptions, Shout, Topic } from '~/graphql/schema/core.gen'
|
||||
import { getImageUrl } from '~/lib/getImageUrl'
|
||||
import { getImageUrl } from '~/lib/getThumbUrl'
|
||||
import { descFromBody } from '~/utils/meta'
|
||||
import { SHOUTS_PER_PAGE } from '../../(main)'
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user