A clean, Markdown-based publishing platform made for writers. Write together, and build a community. https://writefreely.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

177 lines
7.3 KiB

  1. {{define "app-settings"}}
  2. {{template "header" .}}
  3. <style type="text/css">
  4. h2 {font-weight: normal;}
  5. form {
  6. margin: 0 0 2em;
  7. }
  8. form dt {
  9. line-height: inherit;
  10. }
  11. .invisible {
  12. display: none;
  13. }
  14. p.docs {
  15. font-size: 0.86em;
  16. }
  17. input[type=checkbox] {
  18. height: 1em;
  19. width: 1em;
  20. }
  21. select {
  22. font-size: 1em;
  23. }
  24. </style>
  25. <div class="content-container snug">
  26. {{template "admin-header" .}}
  27. {{if .Message}}<p><a name="config"></a>{{.Message}}</p>{{end}}
  28. {{if .ConfigMessage}}<p class="success" style="text-align: center">{{.ConfigMessage}}</p>{{end}}
  29. <form action="/admin/update/config" method="post">
  30. <div class="features row">
  31. <div{{if .Config.SingleUser}} class="invisible"{{end}}>
  32. Site Title
  33. <p>Your public site name.</p>
  34. </div>
  35. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="text" name="site_name" id="site_name" class="inline" value="{{.Config.SiteName}}" style="width: 14em;"/></div>
  36. </div>
  37. <div class="features row">
  38. <div{{if .Config.SingleUser}} class="invisible"{{end}}>
  39. Site Description
  40. <p>Describe your site &mdash; this shows in your site's metadata.</p>
  41. </div>
  42. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="text" name="site_desc" id="site_desc" class="inline" value="{{.Config.SiteDesc}}" style="width: 14em;"/></div>
  43. </div>
  44. <div class="features row">
  45. <div>
  46. Host
  47. <p>The public address where users will access your site, starting with <code>http://</code> or <code>https://</code>.</p>
  48. </div>
  49. <div>{{.Config.Host}}</div>
  50. </div>
  51. <div class="features row">
  52. <div>
  53. Community Mode
  54. <p>Whether your site is made for one person or many.</p>
  55. </div>
  56. <div>{{if .Config.SingleUser}}Single user{{else}}Multiple users{{end}}</div>
  57. </div>
  58. <div class="features row">
  59. <div{{if .Config.SingleUser}} class="invisible"{{end}}>
  60. Landing Page
  61. <p>The page that logged-out visitors will see first. This should be an absolute path like: <code>/read</code></p>
  62. </div>
  63. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="text" name="landing" id="landing" class="inline" value="{{.Config.Landing}}" style="width: 14em;"/></div>
  64. </div>
  65. <div class="features row">
  66. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="open_registration">
  67. Open Registrations
  68. <p>Allow anyone who visits the site to create an account.</p>
  69. </label></div>
  70. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="checkbox" name="open_registration" id="open_registration" {{if .Config.OpenRegistration}}checked="checked"{{end}} />
  71. </div>
  72. </div>
  73. <div class="features row">
  74. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="open_deletion">
  75. Allow account deletion
  76. <p>Allow all users to delete their account. Admins can always delete users.</p>
  77. </label></div>
  78. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="checkbox" name="open_deletion" id="open_deletion" {{if .Config.OpenDeletion}}checked="checked"{{end}} />
  79. </div>
  80. </div>
  81. <div class="features row">
  82. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="user_invites">
  83. Allow invitations from...
  84. <p>Choose who is allowed to invite new people.</p>
  85. </label></div>
  86. <div{{if .Config.SingleUser}} class="invisible"{{end}}>
  87. <select name="user_invites" id="user_invites">
  88. <option value="none" {{if eq .Config.UserInvites ""}}selected="selected"{{end}}>No one</option>
  89. <option value="admin" {{if eq .Config.UserInvites "admin"}}selected="selected"{{end}}>Only Admins</option>
  90. <option value="user" {{if eq .Config.UserInvites "user"}}selected="selected"{{end}}>All Users</option>
  91. </select>
  92. </div>
  93. </div>
  94. <div class="features row">
  95. <div><label for="private">
  96. Private Instance
  97. <p>Limit site access to people with an account.</p>
  98. </label></div>
  99. <div><input type="checkbox" name="private" id="private" {{if .Config.Private}}checked="checked"{{end}} /></div>
  100. </div>
  101. <div class="features row">
  102. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="local_timeline">
  103. Reader
  104. <p>Show a feed of user posts for anyone who chooses to share there.</p>
  105. </label></div>
  106. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="checkbox" name="local_timeline" id="local_timeline" {{if .Config.LocalTimeline}}checked="checked"{{end}} /></div>
  107. </div>
  108. <div class="features row">
  109. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="default_visibility">
  110. Default blog visibility
  111. <p>The default setting for new accounts and blogs.</p>
  112. </label></div>
  113. <div{{if .Config.SingleUser}} class="invisible"{{end}}>
  114. <select name="default_visibility" id="default_visibility">
  115. <option value="unlisted" {{if eq .Config.DefaultVisibility "unlisted"}}selected="selected"{{end}}>Unlisted</option>
  116. <option value="public" {{if eq .Config.DefaultVisibility "public"}}selected="selected"{{end}}>Public</option>
  117. <option value="private" {{if eq .Config.DefaultVisibility "private"}}selected="selected"{{end}}>Private</option>
  118. </select>
  119. </div>
  120. </div>
  121. <div class="features row">
  122. <div{{if .Config.SingleUser}} class="invisible"{{end}}><label for="max_blogs">
  123. Maximum Blogs per User
  124. <p>Keep things simple by setting this to <strong>1</strong>, unlimited by setting to <strong>0</strong>, or pick another amount.</p>
  125. </label></div>
  126. <div{{if .Config.SingleUser}} class="invisible"{{end}}><input type="number" name="max_blogs" id="max_blogs" class="inline" min="0" value="{{.Config.MaxBlogs}}"/></div>
  127. </div>
  128. <div class="features row">
  129. <div><label for="federation">
  130. Federation
  131. <p>Enable accounts on this site to propagate their posts via the ActivityPub protocol.</p>
  132. </label></div>
  133. <div><input type="checkbox" name="federation" id="federation" {{if .Config.Federation}}checked="checked"{{end}} /></div>
  134. </div>
  135. <div class="features row">
  136. <div><label for="public_stats">
  137. Public Stats
  138. <p>Publicly display the number of users and posts on your <strong>About</strong> page.</p>
  139. </label></div>
  140. <div><input type="checkbox" name="public_stats" id="public_stats" {{if .Config.PublicStats}}checked="checked"{{end}} /></div>
  141. </div>
  142. <div class="features row">
  143. <div><label for="monetization">
  144. Monetization
  145. <p>Enable blogs on this site to receive micro&shy;pay&shy;ments from readers via <a target="wm" href="https://webmonetization.org/">Web Monetization</a>.</p>
  146. </label></div>
  147. <div><input type="checkbox" name="monetization" id="monetization" {{if .Config.Monetization}}checked="checked"{{end}} /></div>
  148. </div>
  149. <div class="features row">
  150. <div><label for="min_username_len">
  151. Minimum Username Length
  152. <p>The minimum number of characters allowed in a username. (Recommended: 2 or more.)</p>
  153. </label></div>
  154. <div><input type="number" name="min_username_len" id="min_username_len" class="inline" min="1" max="100" value="{{.Config.MinUsernameLen}}"/></div>
  155. </div>
  156. <div class="features row">
  157. <input type="submit" value="Save Settings" />
  158. </div>
  159. </form>
  160. <p class="docs">Still have questions? Read more details in the <a href="https://writefreely.org/docs/{{.OfficialVersion}}/admin/config">configuration docs</a>.</p>
  161. </div>
  162. <script>
  163. history.replaceState(null, "", "/admin/settings"+window.location.hash);
  164. </script>
  165. {{template "footer" .}}
  166. {{template "body-end" .}}
  167. {{end}}