import { INTERVAL_DATA_ATTRIBUTE } from '../../components/Autoplay/constants'; import { SRC_DATA_ATTRIBUTE, SRCSET_DATA_ATTRIBUTE } from '../../components/LazyLoad/constants'; import { URL } from './constants'; export interface BuildHtmlArgs { tag?: string; id?: string; length?: number; arrows?: boolean; progress?: boolean; autoplay?: boolean; src?: boolean | string; dataSrc?: boolean | string; dataSrcset?: boolean | string; dataInterval?: number[]; json?: string; } /** * Returns an HTML string for building a slider. * * @param args - Arguments. * * @return A built HTML. */ export function buildHtml(args: BuildHtmlArgs = {}): string { const { tag = 'div', id, length = 10, arrows, progress, autoplay, src = true, dataSrc, dataSrcset, dataInterval, json, } = args; return ` <${ tag } class="splide"${ id ? ` id=${ id }` : '' }${ json ? ` data-splide='${ json }'` : '' }>
${ arrows ? HTML_ARROWS : '' } ${ progress ? HTML_PROGRESS : '' } ${ autoplay ? HTML_AUTOPLAY : '' } `; } /** * Generates slides. * * @param length - A number of slides. * @param src - Whether to add src attribute or not. * @param dataSrc - Whether to add data-splide-lazy attribute or not. * @param dataSrcset - Whether to add data-splide-lazy-srcset attribute or not. * @param dataInterval - An array with autoplay interval. * * @return A built HTML. */ export function generateSlides( length: number, src?: boolean | string, dataSrc?: boolean | string, dataSrcset?: boolean | string, dataInterval: number[] = [], ): string { return Array.from({ length }).reduce((html, item, index) => { const attrs: string[] = []; if (dataInterval) { const interval = dataInterval[index]; if (interval) { attrs.push(`${ INTERVAL_DATA_ATTRIBUTE }="${ interval }"`); } } html += `
  • `; const imgAttrs = [`alt="${ index }"`]; if (src) { imgAttrs.push(`src="${ URL }/${ typeof src === 'string' ? src + '-' : '' }${ index }.jpg"`); } if (dataSrc) { imgAttrs.push(`${ SRC_DATA_ATTRIBUTE }="${ URL }/${ typeof dataSrc === 'string' ? dataSrc + '-' : '' }${ index }.jpg"`); } if (dataSrcset) { imgAttrs.push( `${ SRCSET_DATA_ATTRIBUTE }="${ URL }/${ typeof dataSrcset === 'string' ? dataSrcset + '-' : '' }${ index }.jpg 320w"`, ); } html += ``; html += `
  • `; return html; }, ''); } export const HTML_ARROWS = `
    `; export const HTML_PROGRESS = `
    `; export const HTML_AUTOPLAY = ` `;