e24f651c86
So I found this [linter](https://github.com/Riverside-Healthcare/djlint) which features a mode for go templates, so I gave it a try and it did find a number of valid issue, like unbalanced tags etc. It also has a number of bugs, I had to disable/workaround many issues. Given that this linter is written in python, this does add a dependency on `python` >= 3.8 and `poetry` to the development environment to be able to run this linter locally. - `e.g.` prefixes on placeholders are removed because the linter had a false-positive on `placeholder="e.g. cn=Search"` for the `attr=value` syntax and it's not ideal anyways to write `e.g.` into a placeholder because a placeholder is meant to hold a sample value. - In `templates/repo/settings/options.tmpl` I simplified the logic to not conditionally create opening tags without closing tags because this stuff confuses the linter (and possibly the reader as well).
350 lines
17 KiB
Handlebars
350 lines
17 KiB
Handlebars
{{template "base/head" .}}
|
|
<div role="main" aria-label="{{.Title}}" class="page-content install">
|
|
<div class="ui middle very relaxed page grid">
|
|
<div class="sixteen wide center aligned centered column">
|
|
<h3 class="ui top attached header">
|
|
{{.locale.Tr "install.title"}}
|
|
</h3>
|
|
<div class="ui attached segment">
|
|
{{template "base/alert" .}}
|
|
|
|
<p>{{.locale.Tr "install.docker_helper" "https://docs.gitea.io/en-us/install-with-docker/" | Safe}}</p>
|
|
|
|
<form class="ui form" action="{{AppSubUrl}}/" method="post">
|
|
<!-- Database Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.db_title"}}</h4>
|
|
<p>{{.locale.Tr "install.require_db_desc"}}</p>
|
|
<div class="inline required field {{if .Err_DbType}}error{{end}}">
|
|
<label>{{.locale.Tr "install.db_type"}}</label>
|
|
<div class="ui selection database type dropdown">
|
|
<input type="hidden" id="db_type" name="db_type" value="{{.CurDbType}}">
|
|
<div class="text">{{.CurDbType}}</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
{{range .DbTypeNames}}
|
|
<div class="item" data-value="{{.type}}">{{.name}}</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="common-host">
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_host">{{.locale.Tr "install.host"}}</label>
|
|
<input id="db_host" name="db_host" value="{{.db_host}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_user">{{.locale.Tr "install.user"}}</label>
|
|
<input id="db_user" name="db_user" value="{{.db_user}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_passwd">{{.locale.Tr "install.password"}}</label>
|
|
<input id="db_passwd" name="db_passwd" type="password" value="{{.db_passwd}}">
|
|
</div>
|
|
<div class="inline required field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_name">{{.locale.Tr "install.db_name"}}</label>
|
|
<input id="db_name" name="db_name" value="{{.db_name}}">
|
|
<span class="help">{{.locale.Tr "install.db_helper"}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="postgres">
|
|
<div class="inline required field">
|
|
<label>{{.locale.Tr "install.ssl_mode"}}</label>
|
|
<div class="ui selection database type dropdown">
|
|
<input type="hidden" name="ssl_mode" value="{{if .ssl_mode}}{{.ssl_mode}}{{else}}disable{{end}}">
|
|
<div class="default text">disable</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
<div class="item" data-value="disable">Disable</div>
|
|
<div class="item" data-value="require">Require</div>
|
|
<div class="item" data-value="verify-full">Verify Full</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="inline field {{if .Err_DbSetting}}error{{end}}">
|
|
<label for="db_schema">{{.locale.Tr "install.db_schema"}}</label>
|
|
<input id="db_schema" name="db_schema" value="{{.db_schema}}">
|
|
<span class="help">{{.locale.Tr "install.db_schema_helper"}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="mysql">
|
|
<div class="inline required field">
|
|
<label>{{.locale.Tr "install.charset"}}</label>
|
|
<div class="ui selection database type dropdown">
|
|
<input type="hidden" name="charset" value="{{if .charset}}{{.charset}}{{else}}utf8mb4{{end}}">
|
|
<div class="default text">utf8mb4</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
<div class="item" data-value="utf8mb4">utf8mb4</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="gt-hidden" data-db-setting-for="sqlite3">
|
|
<div class="inline required field {{if or .Err_DbPath .Err_DbSetting}}error{{end}}">
|
|
<label for="db_path">{{.locale.Tr "install.path"}}</label>
|
|
<input id="db_path" name="db_path" value="{{.db_path}}">
|
|
<span class="help">{{.locale.Tr "install.sqlite_helper" | Safe}}</span>
|
|
</div>
|
|
</div>
|
|
|
|
{{if .Err_DbInstalledBefore}}
|
|
<div>
|
|
<p class="reinstall-message">{{.locale.Tr "install.reinstall_confirm_message"}}</p>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_1"}}</label>
|
|
<input name="reinstall_confirm_first" type="checkbox">
|
|
</div>
|
|
</div>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_2"}}</label>
|
|
<input name="reinstall_confirm_second" type="checkbox">
|
|
</div>
|
|
</div>
|
|
<div class="reinstall-confirm">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.reinstall_confirm_check_3"}}</label>
|
|
<input name="reinstall_confirm_third" type="checkbox">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
|
|
<!-- General Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.general_title"}}</h4>
|
|
<div class="inline required field {{if .Err_AppName}}error{{end}}">
|
|
<label for="app_name">{{.locale.Tr "install.app_name"}}</label>
|
|
<input id="app_name" name="app_name" value="{{.app_name}}" required>
|
|
<span class="help">{{.locale.Tr "install.app_name_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field {{if .Err_RepoRootPath}}error{{end}}">
|
|
<label for="repo_root_path">{{.locale.Tr "install.repo_path"}}</label>
|
|
<input id="repo_root_path" name="repo_root_path" value="{{.repo_root_path}}" required>
|
|
<span class="help">{{.locale.Tr "install.repo_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline field {{if .Err_LFSRootPath}}error{{end}}">
|
|
<label for="lfs_root_path">{{.locale.Tr "install.lfs_path"}}</label>
|
|
<input id="lfs_root_path" name="lfs_root_path" value="{{.lfs_root_path}}">
|
|
<span class="help">{{.locale.Tr "install.lfs_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field {{if .Err_RunUser}}error{{end}}">
|
|
<label for="run_user">{{.locale.Tr "install.run_user"}}</label>
|
|
<input id="run_user" name="run_user" value="{{.run_user}}" required>
|
|
<span class="help">{{.locale.Tr "install.run_user_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="domain">{{.locale.Tr "install.domain"}}</label>
|
|
<input id="domain" name="domain" value="{{.domain}}" placeholder="try.gitea.io" required>
|
|
<span class="help">{{.locale.Tr "install.domain_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="ssh_port">{{.locale.Tr "install.ssh_port"}}</label>
|
|
<input id="ssh_port" name="ssh_port" value="{{.ssh_port}}">
|
|
<span class="help">{{.locale.Tr "install.ssh_port_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="http_port">{{.locale.Tr "install.http_port"}}</label>
|
|
<input id="http_port" name="http_port" value="{{.http_port}}" required>
|
|
<span class="help">{{.locale.Tr "install.http_port_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="app_url">{{.locale.Tr "install.app_url"}}</label>
|
|
<input id="app_url" name="app_url" value="{{.app_url}}" placeholder="https://try.gitea.io" required>
|
|
<span class="help">{{.locale.Tr "install.app_url_helper"}}</span>
|
|
</div>
|
|
<div class="inline required field">
|
|
<label for="log_root_path">{{.locale.Tr "install.log_root_path"}}</label>
|
|
<input id="log_root_path" name="log_root_path" value="{{.log_root_path}}" placeholder="log" required>
|
|
<span class="help">{{.locale.Tr "install.log_root_path_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label for="enable_update_checker">{{.locale.Tr "install.enable_update_checker"}}</label>
|
|
<input name="enable_update_checker" type="checkbox">
|
|
</div>
|
|
<span class="help">{{.locale.Tr "install.enable_update_checker_helper"}}</span>
|
|
</div>
|
|
|
|
|
|
<!-- Optional Settings -->
|
|
<h4 class="ui dividing header">{{.locale.Tr "install.optional_title"}}</h4>
|
|
|
|
<!-- Email -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_SMTP}} text red{{end}}">
|
|
{{.locale.Tr "install.email_title"}}
|
|
</summary>
|
|
<div class="inline field">
|
|
<label for="smtp_addr">{{.locale.Tr "install.smtp_addr"}}</label>
|
|
<input id="smtp_addr" name="smtp_addr" value="{{.smtp_addr}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="smtp_port">{{.locale.Tr "install.smtp_port"}}</label>
|
|
<input id="smtp_port" name="smtp_port" value="{{.smtp_port}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_SMTPFrom}}error{{end}}">
|
|
<label for="smtp_from">{{.locale.Tr "install.smtp_from"}}</label>
|
|
<input id="smtp_from" name="smtp_from" value="{{.smtp_from}}">
|
|
<span class="help">{{.locale.Tr "install.smtp_from_helper"}}</span>
|
|
</div>
|
|
<div class="inline field {{if .Err_SMTPUser}}error{{end}}">
|
|
<label for="smtp_user">{{.locale.Tr "install.mailer_user"}}</label>
|
|
<input id="smtp_user" name="smtp_user" value="{{.smtp_user}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="smtp_passwd">{{.locale.Tr "install.mailer_password"}}</label>
|
|
<input id="smtp_passwd" name="smtp_passwd" type="password" value="{{.smtp_passwd}}">
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.register_confirm"}}</label>
|
|
<input name="register_confirm" type="checkbox" {{if .register_confirm}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label>{{.locale.Tr "install.mail_notify"}}</label>
|
|
<input name="mail_notify" type="checkbox" {{if .mail_notify}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<!-- Server and other services -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_Services}} text red{{end}}">
|
|
{{.locale.Tr "install.server_service_title"}}
|
|
</summary>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="offline-mode">
|
|
<label data-tooltip-content="{{.locale.Tr "install.offline_mode_popup"}}">{{.locale.Tr "install.offline_mode"}}</label>
|
|
<input name="offline_mode" type="checkbox" {{if .offline_mode}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="disable-gravatar">
|
|
<label data-tooltip-content="{{.locale.Tr "install.disable_gravatar_popup"}}">{{.locale.Tr "install.disable_gravatar"}}</label>
|
|
<input name="disable_gravatar" type="checkbox" {{if .disable_gravatar}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="federated-avatar-lookup">
|
|
<label data-tooltip-content="{{.locale.Tr "install.federated_avatar_lookup_popup"}}">{{.locale.Tr "install.federated_avatar_lookup"}}</label>
|
|
<input name="enable_federated_avatar" type="checkbox" {{if .enable_federated_avatar}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-openid-signin">
|
|
<label data-tooltip-content="{{.locale.Tr "install.openid_signin_popup"}}">{{.locale.Tr "install.openid_signin"}}</label>
|
|
<input name="enable_open_id_sign_in" type="checkbox" {{if .enable_open_id_sign_in}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="disable-registration">
|
|
<label data-tooltip-content="{{.locale.Tr "install.disable_registration_popup"}}">{{.locale.Tr "install.disable_registration"}}</label>
|
|
<input name="disable_registration" type="checkbox" {{if .disable_registration}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="allow-only-external-registration">
|
|
<label data-tooltip-content="{{.locale.Tr "install.allow_only_external_registration_popup"}}">{{.locale.Tr "install.allow_only_external_registration_popup"}}</label>
|
|
<input name="allow_only_external_registration" type="checkbox" {{if .allow_only_external_registration}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-openid-signup">
|
|
<label data-tooltip-content="{{.locale.Tr "install.openid_signup_popup"}}">{{.locale.Tr "install.openid_signup"}}</label>
|
|
<input name="enable_open_id_sign_up" type="checkbox" {{if .enable_open_id_sign_up}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox" id="enable-captcha">
|
|
<label data-tooltip-content="{{.locale.Tr "install.enable_captcha_popup"}}">{{.locale.Tr "install.enable_captcha"}}</label>
|
|
<input name="enable_captcha" type="checkbox" {{if .enable_captcha}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.require_sign_in_view_popup"}}">{{.locale.Tr "install.require_sign_in_view"}}</label>
|
|
<input name="require_sign_in_view" type="checkbox" {{if .require_sign_in_view}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_keep_email_private_popup"}}">{{.locale.Tr "install.default_keep_email_private"}}</label>
|
|
<input name="default_keep_email_private" type="checkbox" {{if .default_keep_email_private}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_allow_create_organization_popup"}}">{{.locale.Tr "install.default_allow_create_organization"}}</label>
|
|
<input name="default_allow_create_organization" type="checkbox" {{if .default_allow_create_organization}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<div class="ui checkbox">
|
|
<label data-tooltip-content="{{.locale.Tr "install.default_enable_timetracking_popup"}}">{{.locale.Tr "install.default_enable_timetracking"}}</label>
|
|
<input name="default_enable_timetracking" type="checkbox" {{if .default_enable_timetracking}}checked{{end}}>
|
|
</div>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="no_reply_address">{{.locale.Tr "install.no_reply_address"}}</label>
|
|
<input id="_no_reply_address" name="no_reply_address" value="{{.no_reply_address}}">
|
|
<span class="help">{{.locale.Tr "install.no_reply_address_helper"}}</span>
|
|
</div>
|
|
<div class="inline field">
|
|
<label for="password_algorithm">{{.locale.Tr "install.password_algorithm"}}</label>
|
|
<div class="ui selection dropdown">
|
|
<input id="password_algorithm" type="hidden" name="password_algorithm" value="{{.password_algorithm}}">
|
|
<div class="text">{{.password_algorithm}}</div>
|
|
{{svg "octicon-triangle-down" 14 "dropdown icon"}}
|
|
<div class="menu">
|
|
{{range .PasswordHashAlgorithms}}
|
|
<div class="item" data-value="{{.}}">{{.}}</div>
|
|
{{end}}
|
|
</div>
|
|
</div>
|
|
<span class="help">{{.locale.Tr "install.password_algorithm_helper"}}</span>
|
|
</div>
|
|
</details>
|
|
|
|
<!-- Admin -->
|
|
<details class="optional field">
|
|
<summary class="title gt-py-3{{if .Err_Admin}} text red{{end}}">
|
|
{{.locale.Tr "install.admin_title"}}
|
|
</summary>
|
|
<p class="center">{{.locale.Tr "install.admin_setting_desc"}}</p>
|
|
<div class="inline field {{if .Err_AdminName}}error{{end}}">
|
|
<label for="admin_name">{{.locale.Tr "install.admin_name"}}</label>
|
|
<input id="admin_name" name="admin_name" value="{{.admin_name}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminEmail}}error{{end}}">
|
|
<label for="admin_email">{{.locale.Tr "install.admin_email"}}</label>
|
|
<input id="admin_email" name="admin_email" type="email" value="{{.admin_email}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
|
|
<label for="admin_passwd">{{.locale.Tr "install.admin_password"}}</label>
|
|
<input id="admin_passwd" name="admin_passwd" type="password" autocomplete="new-password" value="{{.admin_passwd}}">
|
|
</div>
|
|
<div class="inline field {{if .Err_AdminPasswd}}error{{end}}">
|
|
<label for="admin_confirm_passwd">{{.locale.Tr "install.confirm_password"}}</label>
|
|
<input id="admin_confirm_passwd" name="admin_confirm_passwd" autocomplete="new-password" type="password" value="{{.admin_confirm_passwd}}">
|
|
</div>
|
|
</details>
|
|
|
|
<div class="ui divider"></div>
|
|
<div class="inline field">
|
|
<label></label>
|
|
<button class="ui primary button">{{.locale.Tr "install.install_btn_confirm"}}</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<img class="gt-hidden" src="{{AssetUrlPrefix}}/img/loading.png">
|
|
{{template "base/footer" .}}
|