<!DOCTYPE html> <html lang="en" class="light-theme"> <head> <link rel="stylesheet" type="text/css" href="css/bundle.css"> {{ template "header.html" . }} <title>{{ .lang.Strings.pageTitle }}</title> </head> <body class="max-w-full overflow-x-hidden section"> <div id="notification-box"></div> <span class="dropdown" tabindex="0" id="lang-dropdown"> <span class="button ~urge dropdown-button"> <i class="ri-global-line"></i> <span class="ml-1 chev"></span> </span> <div class="dropdown-display"> <div class="card ~neutral !low" id="lang-list"> </div> </div> </span> <div class="page-container" id="page-container"> <div class="card ~neutral !low mb-1"> <div class="row"> <img class="banner header" src="banner.svg" alt="jfa-go" /> </div> <div class="row col flex center"> <span class="heading welcome">{{ .lang.StartPage.welcome }}</span> </div> <div class="row col flex center"> <p class="content">{{ .lang.StartPage.pressStart }}</p> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="support">{{ .lang.StartPage.httpsNotice }}</span> <span class="button ~urge !normal next">{{ .lang.StartPage.start }}</span> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.Language.title }}</span> <p class="content" id="language-description"></p> <label class="label"> <span class="mt-half">{{ .lang.Language.defaultAdminLang }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="ui-language-admin"> </select> </div> </label> <label class="label"> <span class="mt-half">{{ .lang.Language.defaultFormLang }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="ui-language-form"> </select> </div> </label> <label class="label"> <span class="mt-half">{{ .lang.Language.defaultEmailLang }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="email-language"> </select> </div> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.General.title }}</span> <div class="row"> <div class="col"> <label class="label"> <span class="mt-half">{{ .lang.General.listenAddress }}</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="ui-host" value="0.0.0.0"> </label> <label class="row switch"> <input type="checkbox" id="advanced-tls"><span>{{ .lang.General.useHTTPS }}</span> </label> <p class="support mb-1">{{ .lang.General.useHTTPSNotice }}</p> <label class="label"> <span class="mt-half">{{ .lang.General.pathToCertificate }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="advanced-tls_cert"> </label> <label class="label"> <span class="mt-half">{{ .lang.General.pathToKeyFile }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="advanced-tls_key"> </label> <span class="heading">{{ .lang.Updates.title }}</span> <p class="content" id="updates-description"></p> <label class="row switch pb-1"> <input type="checkbox" id="updates-enabled" checked><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span>{{ .lang.Updates.updateChannel }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="updates-channel"> <option value="stable">{{ .lang.Updates.stable }}</option> <option value="unstable">{{ .lang.Updates.unstable }}</option> </select> </div> </label> </div> <div class="col"> <label class="label"> <span class="mt-half">{{ .lang.Strings.port }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="ui-port" value="8056"> </label> <label class="label"> <span class="mt-half">{{ .lang.General.httpsPort }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="advanced-tls_port" value="8057"> </label> <label class="label"> <span class="mt-half">{{ .lang.General.urlBase }} ({{ .lang.Strings.optional }})</span> <input type="url" class="input ~neutral !normal mt-half" id="ui-url_base"> <p class="support mb-1">{{ .lang.General.urlBaseNotice }}</p> </label> <label class="label"> <span>{{ .lang.Strings.theme }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="ui-theme"> <option value="Jellyfin (Dark)">{{ .lang.General.darkTheme }}</option> <option value="Default (Light)">{{ .lang.General.lightTheme }}</option> </select> </div> </label> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.Login.title }}</span> <p class="content">{{ .lang.Login.description }}</p> <div class="pl-1"> <label class="row switch pb-1"> <input type="radio" name="ui-jellyfin_login" value="true" checked><span>{{ .lang.Login.authorizeWithJellyfin }}</span> </label> <label class="row switch pl-1 pb-1"> <input type="checkbox" id="ui-admin_only"><span>{{ .lang.Login.adminOnly }}</span> </label> <label class="row switch pb-1"> <input type="radio" name="ui-jellyfin_login" value="false"><span>{{ .lang.Login.authorizeManual }}</span> </label> </div> <div id="login-manual"> <label class="label"> <span class="mt-half">{{ .lang.Strings.username }}</span> <input type="text" id="ui-username" class="input ~neutral !normal mt-half mb-1" placeholder="{{ .lang.Strings.username }}"> </label> <label class="label"> <span>{{ .lang.Strings.password }}</span> <input type="password" id="ui-password" class="input ~neutral !normal mt-half mb-1" placeholder="{{ .lang.Strings.password }}"> </label> <label class="label"> <span>{{ .lang.Strings.emailAddress }} ({{ .lang.Strings.optional }})</span> <input type="email" id="ui-email" class="input ~neutral !normal mt-half" placeholder="email@address"> <span class="support mb-1">{{ .lang.Login.emailNotice }}</span> </label> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.JellyfinEmby.title }}</span> <p class="content">{{ .lang.JellyfinEmby.description }}</p> <div class="row"> <div class="col"> <label class="label"> <span>{{ .lang.Strings.serverType }}</span> <div class="select ~neutral !normal mt-half"> <select id="jellyfin-type"> <option value="jellyfin">Jellyfin</option> <option value="emby">Emby</option> </select> </div> <p class="support mb-1">{{ .lang.JellyfinEmby.embyNotice }}</p> </label> <label class="label"> <span class="mt-half">{{ .lang.JellyfinEmby.replaceJellyfin }} ({{ .lang.Strings.optional }})</span> <input type="text" class="input ~neutral !normal mt-half" id="jellyfin-substitute_jellyfin_strings"> <p class="support mb-1">{{ .lang.JellyfinEmby.replaceJellyfinNotice }}</p> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.username }}</span> <input type="text" id="jellyfin-username" class="input ~neutral !normal mt-half mb-1" placeholder="{{ .lang.Strings.username }}"> </label> <label class="label"> <span>{{ .lang.Strings.password }}</span> <input type="password" id="jellyfin-password" class="input ~neutral !normal mt-half mb-1" placeholder="{{ .lang.Strings.password }}"> </label> </div> <div class="col"> <label class="label"> <span class="mt-half">{{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.internal }})</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="jellyfin-server" placeholder="http://jellyf.in:80"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.serverAddress }} ({{ .lang.JellyfinEmby.external }})</span> <input type="url" class="input ~neutral !normal mt-half" id="jellyfin-public_server" placeholder="https://jellyf.in"> <p class="support mb-1">{{ .lang.JellyfinEmby.addressExternalNotice }}</p> </label> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal" id="jellyfin-test-connection">{{ .lang.JellyfinEmby.testConnection }}</span> <span class="button ~urge !normal next" disabled>{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.Ombi.title }}</span> <p class="content">{{ .lang.Ombi.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="ombi-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.serverAddress }}</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="ombi-server" placeholder="ombi.jellyf.in"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.apiKey }}</span> <input type="text" class="input ~neutral !normal mt-half" id="ombi-api_key"> <p class="support mb-1">{{ .lang.Ombi.apiKeyNotice }}</p> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.Email.title }}</span> <p class="content" id="email-description"></p> <div class="row"> <div class="col"> <label class="label"> <span>{{ .lang.Email.method }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="email-method"> <option value="">{{ .lang.Strings.disabled }}</option> <option value="smtp">SMTP</option> <option value="mailgun">Mailgun</option> </select> </div> </label> <label class="row switch"> <input type="checkbox" id="email-no_username"><span>{{ .lang.Email.useEmailAsUsername }}</span> </label> <p class="support mb-1">{{ .lang.Email.useEmailAsUsernameNotice }}</p> <label class="label"> <span class="mt-half">{{ .lang.Email.fromAddress }}</span> <input type="email" class="input ~neutral !normal mt-half mb-1" id="email-address" placeholder="mail@jellyf.in"> </label> <label class="label"> <span class="mt-half">{{ .lang.Email.senderName }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="email-from" value="Jellyfin"> </label> <label class="label"> <span class="mt-half">{{ .lang.Email.dateFormat }}</span> <input type="text" class="input ~neutral !normal mt-half" id="email-date_format" value="%d/%m/%y"> <p class="support mb-1" id="email-dateformat-notice"></p> </label> <div> <label class="row switch pb-1"> <input type="radio" name="email-24h" value="true" checked><span>{{ .lang.Email.time24h }}</span> </label> <label class="row switch pb-1"> <input type="radio" name="email-24h" value="false"><span>{{ .lang.Email.time12h }}</span> </label> </div> </div> <div class="col"> <div id="email-smtp"> <p class="subheading">SMTP</p> <label class="label"> <span>{{ .lang.Email.encryption }}</span> <div class="select ~neutral !normal mt-half mb-1"> <select id="smtp-encryption"> <option value="starttls">STARTTLS ({{ .lang.Strings.port }} 587)</option> <option value="ssl_tls">SSL/TLS ({{ .lang.Strings.port }} 465)</option> </select> </div> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.serverAddress }}</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="smtp-server" placeholder="smtp.jellyf.in"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.port }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="smtp-port" placeholder="587"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.username }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="smtp-username"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.password }}</span> <input type="password" class="input ~neutral !normal mt-half mb-1" id="smtp-password"> </label> </div> <div id="email-mailgun"> <p class="subheading">Mailgun</p> <label class="label"> <span class="mt-half">{{ .lang.Email.mailgunApiURL }}</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="mailgun-api_url" placeholder="https://api.eu.mailgun.net/v3/mail.jellyf.in/messages"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.apiKey }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="mailgun-api_key"> </label> </div> </div> </div> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused related-to-email"> <span class="heading">{{ .lang.Notifications.title }}</span> <p class="content">{{ .lang.Notifications.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="notifications-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <span class="heading">{{ .lang.WelcomeEmails.title }}</span> <p class="content">{{ .lang.WelcomeEmails.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="welcome_email-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="welcome_email-subject" placeholder="{{ .emailLang.WelcomeEmail.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused related-to-email"> <span class="heading">{{ .lang.InviteEmails.title }}</span> <p class="content">{{ .lang.InviteEmails.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="invite_emails-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.URL }}</span> <input type="url" class="input ~neutral !normal mt-half mb-1" id="invite_emails-url_base" placeholder="https://accounts.jellyf.in/invite"> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="invite_emails-subject" placeholder="{{ .emailLang.InviteEmail.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div id="password-resets" class="card ~neutral !low mb-1 unfocused related-to-email"> <span class="heading">{{ .lang.PasswordResets.title }}</span> <p class="content">{{ .lang.PasswordResets.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="password_resets-enabled"><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordResets.pathToJellyfin }}</span> <input type="text" class="input ~neutral !normal mt-half" id="password_resets-watch_directory" placeholder="/config/jellyfin"> <p class="support mb-1">{{ .lang.PasswordResets.pathToJellyfinNotice }}</p> </label> <label class="label"> <span class="mt-half">{{ .lang.Strings.emailSubject }}</span> <input type="text" class="input ~neutral !normal mt-half mb-1" id="password_resets-subject" placeholder="{{ .emailLang.PasswordReset.title }}"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.PasswordValidation.title }}</span> <p class="content">{{ .lang.PasswordValidation.description }}</p> <label class="row switch pb-1"> <input type="checkbox" id="password_validation-enabled" checked><span>{{ .lang.Strings.enabled }}</span> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordValidation.length }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="password_validation-min_length" value="8"> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordValidation.uppercase }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="password_validation-upper" value="1"> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordValidation.lowercase }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="password_validation-lower" value="0"> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordValidation.numbers }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="password_validation-number" value="0"> </label> <label class="label"> <span class="mt-half">{{ .lang.PasswordValidation.special }}</span> <input type="number" class="input ~neutral !normal mt-half mb-1" id="password_validation-special" value="0"> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <span class="heading">{{ .lang.HelpMessages.title }}</span> <p class="content">{{ .lang.HelpMessages.description }}</p> <label class="label"> <span class="mt-half">{{ .lang.HelpMessages.contactMessage }}</span> <input type="text" class="input ~neutral !normal mt-half" id="ui-contact_message"> <p class="support mb-1">{{ .lang.HelpMessages.contactMessageNotice }}</p> </label> <label class="label"> <span class="mt-half">{{ .lang.HelpMessages.helpMessage }}</span> <input type="text" class="input ~neutral !normal mt-half" id="ui-help_message"> <p class="support mb-1">{{ .lang.HelpMessages.helpMessageNotice }}</p> </label> <label class="label"> <span class="mt-half">{{ .lang.HelpMessages.successMessage }}</span> <input type="text" class="input ~neutral !normal mt-half" id="ui-success_message"> <p class="support mb-1">{{ .lang.HelpMessages.successMessageNotice }}</p> </label> <label class="label related-to-email"> <span class="mt-half">{{ .lang.HelpMessages.emailMessage }}</span> <input type="text" class="input ~neutral !normal mt-half" id="email-message"> <p class="support mb-1">{{ .lang.HelpMessages.emailMessageNotice }}</p> </label> <section class="section ~neutral banner footer flex-expand middle"> <span class="button ~neutral !normal back">{{ .lang.Strings.back }}</span> <div> <span class="button ~urge !normal next">{{ .lang.Strings.next }}</span> </div> </section> </div> <div class="card ~neutral !low mb-1 unfocused"> <div class="row col flex center"> <span class="heading">{{ .lang.EndPage.finished }}</span> </div> <div class="row col flex center"> <p class="content">{{ .lang.EndPage.restartMessage }}</p> </div> <div class="row col flex center"> <span class="button ~neutral !normal back mr-1">{{ .lang.Strings.back }}</span> <span class="button ~urge !normal" id="restart">{{ .lang.Strings.submit }}</span> <span class="button ~urge !normal unfocused" id="refresh">{{ .lang.EndPage.refreshPage }}</span> </div> </div> </div> <script> window.langFile = JSON.parse({{ .language }}); window.messages = JSON.parse({{ .messages }}); </script> <script src="js/setup.js" type="module"></script> </body> </html>