mirror of
https://github.com/writefreely/writefreely
synced 2024-12-13 18:12:28 +00:00
a850fa14cd
This adds a "Pages" section to the admin part of the site, and enables admins to edit the pre-defined About and Privacy pages there, instead of on the dashboard itself. It also restructures how these pages get sent around in the backend and lays the groundwork for dynamically adding static pages. The backend changes were made with more customization in mind, such as an instance-wide custom stylesheet (T563). Ref T566
179 lines
6.7 KiB
Cheetah
179 lines
6.7 KiB
Cheetah
{{define "admin"}}
|
|
{{template "header" .}}
|
|
|
|
<style type="text/css">
|
|
h2 {font-weight: normal;}
|
|
ul.pagenav {list-style: none;}
|
|
form {
|
|
margin: 0 0 2em;
|
|
}
|
|
form dt {
|
|
line-height: inherit;
|
|
}
|
|
.ui.divider:not(.vertical):not(.horizontal) {
|
|
border-top: 1px solid rgba(34,36,38,.15);
|
|
border-bottom: 1px solid rgba(255,255,255,.1);
|
|
}
|
|
.ui.divider {
|
|
margin: 1rem 0;
|
|
line-height: 1;
|
|
height: 0;
|
|
font-weight: 700;
|
|
text-transform: uppercase;
|
|
letter-spacing: .05em;
|
|
color: rgba(0,0,0,.85);
|
|
-webkit-user-select: none;
|
|
-moz-user-select: none;
|
|
-ms-user-select: none;
|
|
user-select: none;
|
|
-webkit-tap-highlight-color: transparent;
|
|
font-size: 1rem;
|
|
}
|
|
.invisible {
|
|
display: none;
|
|
}
|
|
</style>
|
|
|
|
<div class="content-container snug">
|
|
{{template "admin-header" .}}
|
|
|
|
{{if .Message}}<p>{{.Message}}</p>{{end}}
|
|
|
|
<h2>On this page</h2>
|
|
<ul class="pagenav">
|
|
<li><a href="#reset-pass">Reset user password</a></li>
|
|
<li><a href="#config">Configuration</a></li>
|
|
<li><a href="#monitor">Application monitor</a></li>
|
|
</ul>
|
|
|
|
<hr />
|
|
|
|
<h2>Users</h2>
|
|
|
|
<h3><a name="reset-pass"></a>reset password</h3>
|
|
<pre><code>writefreely --reset-pass <username></code></pre>
|
|
|
|
<hr />
|
|
|
|
<h2><a name="config"></a>App Configuration</h2>
|
|
|
|
{{if .ConfigMessage}}<p class="success" style="text-align: center">{{.ConfigMessage}}</p>{{end}}
|
|
|
|
<form action="/admin/update/config" method="post">
|
|
<div class="ui attached table segment">
|
|
<dl class="dl-horizontal admin-dl-horizontal">
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}>Site Name</dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}><input type="text" name="site_name" id="site_name" class="inline" value="{{.Config.SiteName}}" style="width: 14em;" /></dd>
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}>Site Description</dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}><input type="text" name="site_desc" id="site_desc" class="inline" value="{{.Config.SiteDesc}}" style="width: 14em;" /></dd>
|
|
<dt>Host</dt>
|
|
<dd>{{.Config.Host}}</dd>
|
|
<dt>User Mode</dt>
|
|
<dd>{{if .Config.SingleUser}}Single user{{else}}Multiple users{{end}}</dd>
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}><label for="open_registration">Open Registrations</label></dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}><input type="checkbox" name="open_registration" id="open_registration" {{if .Config.OpenRegistration}}checked="checked"{{end}} /></dd>
|
|
<dt><label for="min_username_len">Minimum Username Length</label></dt>
|
|
<dd><input type="number" name="min_username_len" id="min_username_len" class="inline" min="1" max="100" value="{{.Config.MinUsernameLen}}" /></dd>
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}><label for="max_blogs">Maximum Blogs per User</label></dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}><input type="number" name="max_blogs" id="max_blogs" class="inline" min="1" value="{{.Config.MaxBlogs}}" /></dd>
|
|
<dt><label for="federation">Federation</label></dt>
|
|
<dd><input type="checkbox" name="federation" id="federation" {{if .Config.Federation}}checked="checked"{{end}} /></dd>
|
|
<dt><label for="public_stats">Public Stats</label></dt>
|
|
<dd><input type="checkbox" name="public_stats" id="public_stats" {{if .Config.PublicStats}}checked="checked"{{end}} /></dd>
|
|
<dt><label for="private">Private Instance</label></dt>
|
|
<dd><input type="checkbox" name="private" id="private" {{if .Config.Private}}checked="checked"{{end}} /></dd>
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}><label for="local_timeline">Local Timeline</label></dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}><input type="checkbox" name="local_timeline" id="local_timeline" {{if .Config.LocalTimeline}}checked="checked"{{end}} /></dd>
|
|
<dt{{if .Config.SingleUser}} class="invisible"{{end}}><label for="user_invites">Allow sending invitations by</label></dt>
|
|
<dd{{if .Config.SingleUser}} class="invisible"{{end}}>
|
|
<select name="user_invites" id="user_invites">
|
|
<option value="none" {{if eq .Config.UserInvites ""}}selected="selected"{{end}}>No one</option>
|
|
<option value="user" {{if eq .Config.UserInvites "user"}}selected="selected"{{end}}>Users</option>
|
|
<option value="admin" {{if eq .Config.UserInvites "admin"}}selected="selected"{{end}}>Admins</option>
|
|
</select>
|
|
</dd>
|
|
</dl>
|
|
<input type="submit" value="Save Configuration" />
|
|
</div>
|
|
</form>
|
|
|
|
<hr />
|
|
|
|
<h2><a name="monitor"></a>Application</h2>
|
|
|
|
<div class="ui attached table segment">
|
|
<dl class="dl-horizontal admin-dl-horizontal">
|
|
<dt>WriteFreely</dt>
|
|
<dd>{{.Version}}</dd>
|
|
<dt>Server Uptime</dt>
|
|
<dd>{{.SysStatus.Uptime}}</dd>
|
|
<dt>Current Goroutines</dt>
|
|
<dd>{{.SysStatus.NumGoroutine}}</dd>
|
|
<div class="ui divider"></div>
|
|
<dt>Current memory usage</dt>
|
|
<dd>{{.SysStatus.MemAllocated}}</dd>
|
|
<dt>Total mem allocated</dt>
|
|
<dd>{{.SysStatus.MemTotal}}</dd>
|
|
<dt>Memory obtained</dt>
|
|
<dd>{{.SysStatus.MemSys}}</dd>
|
|
<dt>Pointer lookup times</dt>
|
|
<dd>{{.SysStatus.Lookups}}</dd>
|
|
<dt>Memory allocate times</dt>
|
|
<dd>{{.SysStatus.MemMallocs}}</dd>
|
|
<dt>Memory free times</dt>
|
|
<dd>{{.SysStatus.MemFrees}}</dd>
|
|
<div class="ui divider"></div>
|
|
<dt>Current heap usage</dt>
|
|
<dd>{{.SysStatus.HeapAlloc}}</dd>
|
|
<dt>Heap memory obtained</dt>
|
|
<dd>{{.SysStatus.HeapSys}}</dd>
|
|
<dt>Heap memory idle</dt>
|
|
<dd>{{.SysStatus.HeapIdle}}</dd>
|
|
<dt>Heap memory in use</dt>
|
|
<dd>{{.SysStatus.HeapInuse}}</dd>
|
|
<dt>Heap memory released</dt>
|
|
<dd>{{.SysStatus.HeapReleased}}</dd>
|
|
<dt>Heap objects</dt>
|
|
<dd>{{.SysStatus.HeapObjects}}</dd>
|
|
<div class="ui divider"></div>
|
|
<dt>Bootstrap stack usage</dt>
|
|
<dd>{{.SysStatus.StackInuse}}</dd>
|
|
<dt>Stack memory obtained</dt>
|
|
<dd>{{.SysStatus.StackSys}}</dd>
|
|
<dt>MSpan structures in use</dt>
|
|
<dd>{{.SysStatus.MSpanInuse}}</dd>
|
|
<dt>MSpan structures obtained</dt>
|
|
<dd>{{.SysStatus.HeapSys}}</dd>
|
|
<dt>MCache structures in use</dt>
|
|
<dd>{{.SysStatus.MCacheInuse}}</dd>
|
|
<dt>MCache structures obtained</dt>
|
|
<dd>{{.SysStatus.MCacheSys}}</dd>
|
|
<dt>Profiling bucket hash table obtained</dt>
|
|
<dd>{{.SysStatus.BuckHashSys}}</dd>
|
|
<dt>GC metadata obtained</dt>
|
|
<dd>{{.SysStatus.GCSys}}</dd>
|
|
<dt>Other system allocation obtained</dt>
|
|
<dd>{{.SysStatus.OtherSys}}</dd>
|
|
<div class="ui divider"></div>
|
|
<dt>Next GC recycle</dt>
|
|
<dd>{{.SysStatus.NextGC}}</dd>
|
|
<dt>Since last GC</dt>
|
|
<dd>{{.SysStatus.LastGC}}</dd>
|
|
<dt>Total GC pause</dt>
|
|
<dd>{{.SysStatus.PauseTotalNs}}</dd>
|
|
<dt>Last GC pause</dt>
|
|
<dd>{{.SysStatus.PauseNs}}</dd>
|
|
<dt>GC times</dt>
|
|
<dd>{{.SysStatus.NumGC}}</dd>
|
|
</dl>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
history.replaceState(null, "", "/admin"+window.location.hash);
|
|
</script>
|
|
|
|
{{template "footer" .}}
|
|
|
|
{{template "body-end" .}}
|
|
{{end}}
|