UNPKG

@waline/client

Version:

client for waline comment system

93 lines (80 loc) 2.9 kB
import type { IGif } from '@giphy/js-types'; import type { WalineEmojiPresets, WalineMeta, WalineSearchOptions, WalineSearchResult, } from '../typings'; const availableMeta: WalineMeta[] = ['nick', 'mail', 'link']; export const getMeta = (meta: WalineMeta[]): WalineMeta[] => meta.filter((item) => availableMeta.includes(item)); export const defaultEmoji: WalineEmojiPresets[] = [ '//unpkg.com/@waline/emojis@1.1.0/weibo', ]; export const defaultLang = 'en-US'; export const defaultUploadImage = (file: File): Promise<string> => new Promise((resolve, reject) => { if (file.size > 128 * 1000) return reject(new Error('File too large! File size limit 128KB')); const reader = new FileReader(); reader.readAsDataURL(file); reader.onload = (): void => resolve(reader.result?.toString() || ''); reader.onerror = reject; }); export const defaultTexRenderer = (blockMode: boolean): string => blockMode === true ? '<p class="wl-tex">Tex is not available in preview</p>' : '<span class="wl-tex">Tex is not available in preview</span>'; export const getDefaultSearchOptions = (lang: string): WalineSearchOptions => { interface GifsResult { data: IGif[]; meta: { msg: string; // eslint-disable-next-line @typescript-eslint/naming-convention response_id: string; status: number; }; pagination: { count: number; // eslint-disable-next-line @typescript-eslint/naming-convention total_count: number; offset: number; }; } const fetchGiphy = async ( url: string, params: Record<string, string> = {} ): Promise<WalineSearchResult> => fetch( `https://api.giphy.com/v1/gifs/${url}?${new URLSearchParams({ lang, limit: '20', rating: 'g', // eslint-disable-next-line @typescript-eslint/naming-convention api_key: '6CIMLkNMMOhRcXPoMCPkFy4Ybk2XUiMp', ...params, }).toString()}` ) .then((resp) => <Promise<GifsResult>>resp.json()) .then(({ data }) => data.map((gif) => ({ title: gif.title, src: gif.images.downsized_medium.url, })) ); return { search: (word: string): Promise<WalineSearchResult> => fetchGiphy('search', { q: word, offset: '0' }), default: (): Promise<WalineSearchResult> => fetchGiphy('trending', {}), more: (word: string, offset = 0): Promise<WalineSearchResult> => fetchGiphy('search', { q: word, offset: offset.toString() }), }; }; export const defaultReaction = [ '//unpkg.com/@waline/emojis/tieba/tieba_agree.png', '//unpkg.com/@waline/emojis/tieba/tieba_look_down.png', '//unpkg.com/@waline/emojis/tieba/tieba_sunglasses.png', '//unpkg.com/@waline/emojis/tieba/tieba_pick_nose.png', '//unpkg.com/@waline/emojis/tieba/tieba_awkward.png', '//unpkg.com/@waline/emojis/tieba/tieba_sleep.png', ];