// Adapted version of https://github.com/Stremio/stremio-addon-sdk/blob/v1.6.2/src/landingTemplate.js import { ManifestWithConfig } from './types'; import { envGet } from './utils'; const STYLESHEET = ` * { box-sizing: border-box; } body, html { margin: 0; padding: 0; width: 100%; min-height: 100%; } body { padding: 2vh; font-size: 2.2vh; } html { background-size: auto 100%; background-size: cover; background-position: center center; background-repeat: no-repeat; box-shadow: inset 0 0 0 2000px rgb(0 0 0 / 60%); } body { display: flex; font-family: 'Open Sans', Arial, sans-serif; color: white; } h1 { font-size: 4.5vh; font-weight: 700; } h2 { font-size: 2.2vh; font-weight: normal; font-style: italic; opacity: 0.8; } h3 { font-size: 2.2vh; } h1, h2, h3, p { margin: 0; text-shadow: 0 0 1vh rgba(0, 0, 0, 0.15); } p { font-size: 1.75vh; } ul { font-size: 1.75vh; margin: 0; margin-top: 1vh; padding-left: 3vh; } a { color: white } a.install-link { text-decoration: none } button { border: 0; outline: 0; color: white; background: #8A5AAB; padding: 1.2vh 3.5vh; margin: auto; text-align: center; font-family: 'Open Sans', Arial, sans-serif; font-size: 2.2vh; font-weight: 600; cursor: pointer; display: block; box-shadow: 0 0.5vh 1vh rgba(0, 0, 0, 0.2); transition: box-shadow 0.1s ease-in-out; } button:hover { box-shadow: none; } button:active { box-shadow: 0 0 0 0.5vh white inset; } #addon { width: 40vh; margin: auto; } .logo { height: 14vh; width: 14vh; margin: auto; margin-bottom: 3vh; } .logo img { width: 100%; } .name, .version { display: inline-block; vertical-align: top; } .name { line-height: 5vh; margin: 0; } .version { position: relative; line-height: 5vh; opacity: 0.8; margin-bottom: 2vh; } .contact { position: absolute; left: 0; bottom: 4vh; width: 100%; text-align: center; } .contact a { font-size: 1.4vh; font-style: italic; } .separator { margin-bottom: 4vh; } .form-element { margin-bottom: 2vh; } .label-to-top { margin-bottom: 2vh; } .label-to-right { margin-left: 1vh !important; } .full-width { width: 100%; } `; export function landingTemplate(manifest: ManifestWithConfig) { const background = manifest.background || 'https://dl.strem.io/addon-background.jpg'; const logo = manifest.logo || 'https://dl.strem.io/addon-logo.png'; const contactHTML = manifest.contactEmail ? `

Contact ${manifest.name} creator:

${manifest.contactEmail}
` : ''; const stylizedTypes = manifest.types .map(types => types.charAt(0).toUpperCase() + types.slice(1) + (types !== 'series' ? 's' : '')); let formHTML = ''; let script = ''; if ((manifest.config || []).length) { let options = ''; manifest.config.forEach((elem) => { const key = elem.key; if (['text', 'number', 'password'].includes(elem.type)) { const isRequired = elem.required ? ' required' : ''; const defaultHTML = elem.default ? ` value="${elem.default}"` : ''; const inputType = elem.type; options += `
${elem.title}
`; } else if (elem.type === 'checkbox') { const isChecked = elem.default === 'checked' ? ' checked' : ''; options += `
`; } else if (elem.type === 'select') { const defaultValue = elem.default || (elem.options || [])[0]; options += `
${elem.title}
`; } }); if (options.length) { formHTML = `
${options}
`; script += ` installLink.onclick = () => { return mainForm.reportValidity() } const updateLink = () => { const config = Object.fromEntries(new FormData(mainForm)) installLink.href = 'stremio://' + window.location.host + '/' + encodeURIComponent(JSON.stringify(config)) + '/manifest.json' } mainForm.onchange = updateLink `; } } return ` ${manifest.name} - Stremio Addon

${manifest.name}

v${manifest.version || '0.0.0'}

${manifest.description || ''}

The source code can be found on GitHub.

${envGet('CONFIGURATION_DESCRIPTION') || ''}

This addon has more :

${formHTML} ${contactHTML}
`; }