1
1
mirror of https://github.com/go-gitea/gitea synced 2025-07-22 18:28:37 +00:00

Finish all new admin pages.

This commit is contained in:
Unknwon
2014-08-30 20:49:51 +08:00
parent 66d51804c9
commit 9bc63bda7d
12 changed files with 469 additions and 331 deletions

View File

@@ -1,232 +1,230 @@
{{template "base/head" .}}
{{template "base/navbar" .}}
<div id="body" class="container" data-page="admin">
{{template "admin/nav" .}}
<div id="admin-container" class="col-md-10">
<div class="panel panel-default">
<div class="panel-heading">
Server Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Application Name</dt>
<dd>{{AppName}}</dd>
<dt>Application Version</dt>
<dd>{{AppVer}}</dd>
<dt>Application URL</dt>
<dd>{{.AppUrl}}</dd>
<dt>Domain</dt>
<dd>{{.Domain}}</dd>
<dt>Offline Mode</dt>
<dd><i class="fa fa{{if .OfflineMode}}-check{{end}}-square-o"></i></dd>
<dt>Disable Router Log</dt>
<dd><i class="fa fa{{if .DisableRouterLog}}-check{{end}}-square-o"></i></dd>
<hr/>
<dt>Run User</dt>
<dd>{{.RunUser}}</dd>
<dt>Run Mode</dt>
<dd>{{.RunMode}}</dd>
<hr/>
<dt>Repository Root Path</dt>
<dd>{{.RepoRootPath}}</dd>
<dt>Static File Root Path</dt>
<dd>{{.StaticRootPath}}</dd>
<dt>Log File Root Path</dt>
<dd>{{.LogRootPath}}</dd>
<dt>Script Type</dt>
<dd>{{.ScriptType}}</dd>
<dt>Reverse Authentication User</dt>
<dd>{{.ReverseProxyAuthUser}}</dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Database Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Type</dt>
<dd>{{.DbCfg.Type}}</dd>
<dt>Host</dt>
<dd>{{.DbCfg.Host}}</dd>
<dt>Name</dt>
<dd>{{.DbCfg.Name}}</dd>
<dt>User</dt>
<dd>{{.DbCfg.User}}</dd>
<dt>SslMode</dt>
<dd>{{.DbCfg.SslMode}} (for "postgres" only)</dd>
<dt>Path</dt>
<dd>{{.DbCfg.Path}} (for "sqlite3" only)</dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Service Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Register Email Confirmation</dt>
<dd><i class="fa fa{{if .Service.RegisterEmailConfirm}}-check{{end}}-square-o"></i></dd>
<dt>Disable Registration</dt>
<dd><i class="fa fa{{if .Service.DisableRegistration}}-check{{end}}-square-o"></i></dd>
<dt>Require Sign In View</dt>
<dd><i class="fa fa{{if .Service.RequireSignInView}}-check{{end}}-square-o"></i></dd>
<dt>Mail Notification</dt>
<dd><i class="fa fa{{if .Service.EnableNotifyMail}}-check{{end}}-square-o"></i></dd>
<dt>Enable Cache Avatar</dt>
<dd><i class="fa fa{{if .Service.EnableCacheAvatar}}-check{{end}}-square-o"></i></dd>
<hr/>
<dt>Active Code Lives</dt>
<dd>{{.Service.ActiveCodeLives}} minutes</dd>
<dt>Reset Password Code Lives</dt>
<dd>{{.Service.ResetPwdCodeLives}} minutes</dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Webhook Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Task Interval</dt>
<dd>{{.WebhookTaskInterval}} minutes</dd>
<dt>Deliver Timeout</dt>
<dd>{{.WebhookDeliverTimeout}} seconds</dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Mailer Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Enabled</dt>
<dd><i class="fa fa{{if .MailerEnabled}}-check{{end}}-square-o"></i></dd>
{{if .MailerEnabled}}<dt>Name</dt>
<dd>{{.Mailer.Name}}</dd>
<dt>Host</dt>
<dd>{{.Mailer.Host}}</dd>
<dt>User</dt>
<dd>{{.Mailer.User}}</dd>{{end}}
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
OAuth Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Enabled</dt>
<dd><i class="fa fa{{if .OauthEnabled}}-check{{end}}-square-o"></i></dd>
{{if .OauthEnabled}}<dt>GitHub</dt>
<dd><i class="fa fa{{if .Oauther.GitHub}}-check{{end}}-square-o"></i></dd>
<dt>Google</dt>
<dd><i class="fa fa{{if .Oauther.Google}}-check{{end}}-square-o"></i></dd>
<dt>Tencent QQ</dt>
<dd><i class="fa fa{{if .Oauther.Tencent}}-check{{end}}-square-o"></i></dd>
<dt>Weibo</dt>
<dd><i class="fa fa{{if .Oauther.Weibo}}-check{{end}}-square-o"></i></dd>
{{end}}
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Cache Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Cache Adapter</dt>
<dd>{{.CacheAdapter}}</dd>
<dt>Cache Config</dt>
<dd><div style="padding-top: 5px;"><pre>{{.CacheConfig}}</pre></div></dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Session Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Session Provider</dt>
<dd>{{.SessionProvider}}</dd>
<dt>Cookie Name</dt>
<dd>{{.SessionConfig.CookieName}}</dd>
<dt>Enable Set Cookie</dt>
<dd><i class="fa fa{{if .SessionConfig.EnableSetCookie}}-check{{end}}-square-o"></i></dd>
<dt>GC Interval Time</dt>
<dd>{{.SessionConfig.Gclifetime}} seconds</dd>
<dt>Session Life Time</dt>
<dd>{{.SessionConfig.Maxlifetime}} seconds</dd>
<dt>HTTPS Only</dt>
<dd><i class="fa fa{{if .SessionConfig.Secure}}-check{{end}}-square-o"></i></dd>
<dt>Cookie Life Time</dt>
<dd>{{.SessionConfig.CookieLifeTime}} seconds</dd>
<dt>Session ID Hash Function</dt>
<dd>{{.SessionConfig.SessionIDHashFunc}}</dd>
<dt>Session ID Hash Key</dt>
<dd>{{.SessionConfig.SessionIDHashKey}}</dd>
<dt>Provider Config</dt>
<dd>{{.SessionConfig.ProviderConfig}}</dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Picture Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>Picture Service</dt>
<dd>{{.PictureService}}</dd>
<dt>Disable Gravatar</dt>
<dd><i class="fa fa{{if .DisableGravatar}}-check{{end}}-square-o"></i></dd>
</dl>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
Log Configuration
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
{{range .Loggers}}
<dt>Log Mode</dt>
<dd>{{.Mode}}</dd>
<dt>Log Config</dt>
<dd>
<div style="padding-top: 5px;"><pre>{{.Config}}</pre></div>
</dd>
{{end}}
</dl>
{{template "ng/base/head" .}}
{{template "ng/base/header" .}}
<div id="admin-wrapper">
<div id="setting-wrapper" class="main-wrapper">
<div id="admin-setting" class="container clear">
{{template "admin/nav" .}}
<div class="grid-4-5 left">
<div class="setting-content">
{{template "ng/base/alert" .}}
<div id="setting-content">
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.server_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.app_name"}}</dt>
<dd>{{AppName}}</dd>
<dt>{{.i18n.Tr "admin.config.app_ver"}}</dt>
<dd>{{AppVer}}</dd>
<dt>{{.i18n.Tr "admin.config.app_url"}}</dt>
<dd>{{.AppUrl}}</dd>
<dt>{{.i18n.Tr "admin.config.domain"}}</dt>
<dd>{{.Domain}}</dd>
<dt>{{.i18n.Tr "admin.config.offline_mode"}}</dt>
<dd><i class="fa fa{{if .OfflineMode}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.disable_router_log"}}</dt>
<dd><i class="fa fa{{if .DisableRouterLog}}-check{{end}}-square-o"></i></dd>
<hr/>
<dt>{{.i18n.Tr "admin.config.run_user"}}</dt>
<dd>{{.RunUser}}</dd>
<dt>{{.i18n.Tr "admin.config.run_mode"}}</dt>
<dd>{{.RunMode}}</dd>
<hr/>
<dt>{{.i18n.Tr "admin.config.repo_root_path"}}</dt>
<dd>{{.RepoRootPath}}</dd>
<dt>{{.i18n.Tr "admin.config.static_file_root_path"}}</dt>
<dd>{{.StaticRootPath}}</dd>
<dt>{{.i18n.Tr "admin.config.log_file_root_path"}}</dt>
<dd>{{.LogRootPath}}</dd>
<dt>{{.i18n.Tr "admin.config.script_type"}}</dt>
<dd>{{.ScriptType}}</dd>
<dt>{{.i18n.Tr "admin.config.reverse_auth_user"}}</dt>
<dd>{{.ReverseProxyAuthUser}}</dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.db_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.db_type"}}</dt>
<dd>{{.DbCfg.Type}}</dd>
<dt>{{.i18n.Tr "admin.config.db_host"}}</dt>
<dd>{{.DbCfg.Host}}</dd>
<dt>{{.i18n.Tr "admin.config.db_name"}}</dt>
<dd>{{.DbCfg.Name}}</dd>
<dt>{{.i18n.Tr "admin.config.db_user"}}</dt>
<dd>{{.DbCfg.User}}</dd>
<dt>{{.i18n.Tr "admin.config.db_ssl_mode"}}</dt>
<dd>{{.DbCfg.SslMode}} {{.i18n.Tr "admin.config.db_ssl_mode_helper"}}</dd>
<dt>{{.i18n.Tr "admin.config.db_path"}}</dt>
<dd>{{.DbCfg.Path}} {{.i18n.Tr "admin.config.db_path_helper"}}</dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.service_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.register_email_confirm"}}</dt>
<dd><i class="fa fa{{if .Service.RegisterEmailConfirm}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.disable_register"}}</dt>
<dd><i class="fa fa{{if .Service.DisableRegistration}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.require_sign_in_view"}}</dt>
<dd><i class="fa fa{{if .Service.RequireSignInView}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.mail_notify"}}</dt>
<dd><i class="fa fa{{if .Service.EnableNotifyMail}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.enable_cache_avatar"}}</dt>
<dd><i class="fa fa{{if .Service.EnableCacheAvatar}}-check{{end}}-square-o"></i></dd>
<hr/>
<dt>{{.i18n.Tr "admin.config.active_code_lives"}}</dt>
<dd>{{.Service.ActiveCodeLives}} {{.i18n.Tr "tool.raw_minutes"}}</dd>
<dt>{{.i18n.Tr "admin.config.reset_password_code_lives"}}</dt>
<dd>{{.Service.ResetPwdCodeLives}} {{.i18n.Tr "tool.raw_minutes"}}</dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.webhook_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.task_interval"}}</dt>
<dd>{{.WebhookTaskInterval}} {{.i18n.Tr "tool.raw_minutes"}}</dd>
<dt>{{.i18n.Tr "admin.config.deliver_timeout"}}</dt>
<dd>{{.WebhookDeliverTimeout}} {{.i18n.Tr "tool.raw_seconds"}}</dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.mailer_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.mailer_enabled"}}</dt>
<dd><i class="fa fa{{if .MailerEnabled}}-check{{end}}-square-o"></i></dd>
{{if .MailerEnabled}}<dt>{{.i18n.Tr "admin.config.mailer_name"}}</dt>
<dd>{{.Mailer.Name}}</dd>
<dt>{{.i18n.Tr "admin.config.mailer_host"}}</dt>
<dd>{{.Mailer.Host}}</dd>
<dt>{{.i18n.Tr "admin.config.mailer_user"}}</dt>
<dd>{{.Mailer.User}}</dd>{{end}}
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.oauth_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.oauth_enabled"}}</dt>
<dd><i class="fa fa{{if .OauthEnabled}}-check{{end}}-square-o"></i></dd>
{{if .OauthEnabled}}<dt>GitHub</dt>
<dd><i class="fa fa{{if .Oauther.GitHub}}-check{{end}}-square-o"></i></dd>
<dt>Google</dt>
<dd><i class="fa fa{{if .Oauther.Google}}-check{{end}}-square-o"></i></dd>
<dt>腾讯 QQ</dt>
<dd><i class="fa fa{{if .Oauther.Tencent}}-check{{end}}-square-o"></i></dd>
<dt>新浪微博</dt>
<dd><i class="fa fa{{if .Oauther.Weibo}}-check{{end}}-square-o"></i></dd>
{{end}}
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.cache_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.cache_adapter"}}</dt>
<dd>{{.CacheAdapter}}</dd>
<dt>{{.i18n.Tr "admin.config.cache_interval"}}</dt>
<dd>{{.CacheInternal}} {{.i18n.Tr "tool.raw_seconds"}}</dd>
<dt>{{.i18n.Tr "admin.config.cache_conn"}}</dt>
<dd><pre>{{.CacheConn}}</pre></dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.session_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.session_provider"}}</dt>
<dd>{{.SessionProvider}}</dd>
<dt>{{.i18n.Tr "admin.config.provider_config"}}</dt>
<dd><pre>{{.SessionConfig.ProviderConfig}}</pre></dd>
<dt>{{.i18n.Tr "admin.config.cookie_name"}}</dt>
<dd>{{.SessionConfig.CookieName}}</dd>
<dt>{{.i18n.Tr "admin.config.enable_set_cookie"}}</dt>
<dd><i class="fa fa{{if .SessionConfig.EnableSetCookie}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.gc_interval_time"}}</dt>
<dd>{{.SessionConfig.Gclifetime}} {{.i18n.Tr "tool.raw_seconds"}}</dd>
<dt>{{.i18n.Tr "admin.config.session_life_time"}}</dt>
<dd>{{.SessionConfig.Maxlifetime}} {{.i18n.Tr "tool.raw_seconds"}}</dd>
<dt>{{.i18n.Tr "admin.config.https_only"}}</dt>
<dd><i class="fa fa{{if .SessionConfig.Secure}}-check{{end}}-square-o"></i></dd>
<dt>{{.i18n.Tr "admin.config.cookie_life_time"}}</dt>
<dd>{{.SessionConfig.CookieLifeTime}} {{.i18n.Tr "tool.raw_seconds"}}</dd>
<dt>{{.i18n.Tr "admin.config.session_hash_function"}}</dt>
<dd>{{.SessionConfig.SessionIDHashFunc}}</dd>
<dt>{{.i18n.Tr "admin.config.session_hash_key"}}</dt>
<dd>{{.SessionConfig.SessionIDHashKey}}</dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.picture_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
<dt>{{.i18n.Tr "admin.config.picture_service"}}</dt>
<dd>{{.PictureService}}</dd>
<dt>{{.i18n.Tr "admin.config.disable_gravatar"}}</dt>
<dd><i class="fa fa{{if .DisableGravatar}}-check{{end}}-square-o"></i></dd>
</dl>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.config.log_config"}}</strong>
</div>
<div class="panel-body">
<dl class="dl-horizontal admin-dl-horizontal">
{{range .Loggers}}
<dt>{{$.i18n.Tr "admin.config.log_mode"}}</dt>
<dd>{{.Mode}}</dd>
<dt>{{$.i18n.Tr "admin.config.log_config"}}</dt>
<dd><pre>{{.Config}}</pre></dd>
{{end}}
</dl>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{template "base/footer" .}}
{{template "ng/base/footer" .}}

View File

@@ -0,0 +1,74 @@
{{template "ng/base/head" .}}
{{template "ng/base/header" .}}
<div id="admin-wrapper">
<div id="setting-wrapper" class="main-wrapper">
<div id="admin-setting" class="container clear">
{{template "admin/nav" .}}
<div class="grid-4-5 left">
<div class="setting-content">
{{template "ng/base/alert" .}}
<div id="setting-content">
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.monitor.cron"}}</strong>
</div>
<div class="panel-body admin-panel">
<table class="table table-striped">
<thead>
<tr>
<th>{{.i18n.Tr "admin.monitor.name"}}</th>
<th>{{.i18n.Tr "admin.monitor.schedule"}}</th>
<th>{{.i18n.Tr "admin.monitor.next"}}</th>
<th>{{.i18n.Tr "admin.monitor.previous"}}</th>
<th>{{.i18n.Tr "admin.monitor.execute_times"}}</th>
</tr>
</thead>
<tbody>
{{range .Entries}}
<tr>
<td>{{.Description}}</td>
<td>{{.Spec}}</td>
<td>{{.Next}}</td>
<td>{{.Prev}}</td>
<td>{{.ExecTimes}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
<br>
<div class="panel panel-radius">
<div class="panel-header">
<strong>{{.i18n.Tr "admin.monitor.process"}}</strong>
</div>
<div class="panel-body admin-panel">
<table class="table table-striped">
<thead>
<tr>
<th>Pid</th>
<th>{{.i18n.Tr "admin.monitor.desc"}}</th>
<th>{{.i18n.Tr "admin.monitor.start"}}</th>
<th>{{.i18n.Tr "admin.monitor.execute_time"}}</th>
</tr>
</thead>
<tbody>
{{range .Processes}}
<tr>
<td>{{.Pid}}</td>
<td>{{.Description}}</td>
<td>{{.Start}}</td>
<td>{{TimeSince .Start}}</td>
</tr>
{{end}}
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{{template "ng/base/footer" .}}

View File

@@ -1,40 +0,0 @@
{{template "base/head" .}}
{{template "base/navbar" .}}
<div id="body" class="container" data-page="admin">
{{template "admin/nav" .}}
<div id="admin-container" class="col-md-10">
<ul class="nav nav-tabs">
<li{{if .PageIsMonitorCron}} class="active"{{end}}><a href="/admin/monitor">Cron Tasks</a></li>
<li{{if .PageIsMonitorProcess}} class="active"{{end}}><a href="/admin/monitor?tab=process">Processes</a></li>
</ul>
<div class="panel panel-default">
<div class="panel-body">
{{if .PageIsMonitorCron}}
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Schedule</th>
<th>Next Time</th>
<th>Previous Time</th>
<th>Execute Times</th>
</tr>
</thead>
<tbody>
{{range .Entries}}
<tr>
<td>{{.Description}}</td>
<td>{{.Spec}}</td>
<td>{{.Next}}</td>
<td>{{.Prev}}</td>
<td>{{.ExecTimes}}</td>
</tr>
{{end}}
</tbody>
</table>
{{end}}
</div>
</div>
</div>
</div>
{{template "base/footer" .}}

View File

@@ -1,38 +0,0 @@
{{template "base/head" .}}
{{template "base/navbar" .}}
<div id="body" class="container" data-page="admin">
{{template "admin/nav" .}}
<div id="admin-container" class="col-md-10">
<ul class="nav nav-tabs">
<li{{if .PageIsMonitorCron}} class="active"{{end}}><a href="/admin/monitor">Cron Tasks</a></li>
<li{{if .PageIsMonitorProcess}} class="active"{{end}}><a href="/admin/monitor?tab=process">Processes</a></li>
</ul>
<div class="panel panel-default">
<div class="panel-body">
{{if .PageIsMonitorProcess}}
<table class="table table-striped">
<thead>
<tr>
<th>Pid</th>
<th>Description</th>
<th>Start Time</th>
<th>Execution Time</th>
</tr>
</thead>
<tbody>
{{range .Processes}}
<tr>
<td>{{.Pid}}</td>
<td>{{.Description}}</td>
<td>{{.Start}}</td>
<td>{{TimeSince .Start}}</td>
</tr>
{{end}}
</tbody>
</table>
{{end}}
</div>
</div>
</div>
</div>
{{template "base/footer" .}}