mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-22 11:46:40 +00:00
[feature] About page (#1495)
* about page basics * more info, styling * update emoji sizing on about page contact card
This commit is contained in:
parent
e824e14705
commit
b6143c9ab8
50
internal/web/about.go
Normal file
50
internal/web/about.go
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package web
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
apiutil "github.com/superseriousbusiness/gotosocial/internal/api/util"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||||
|
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
aboutPath = "/about"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *Module) aboutGETHandler(c *gin.Context) {
|
||||||
|
instance, err := m.processor.InstanceGetV1(c.Request.Context())
|
||||||
|
if err != nil {
|
||||||
|
apiutil.ErrorHandler(c, gtserror.NewErrorInternalError(err), m.processor.InstanceGetV1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.HTML(http.StatusOK, "about.tmpl", gin.H{
|
||||||
|
"instance": instance,
|
||||||
|
"ogMeta": ogBase(instance),
|
||||||
|
"blocklistExposed": config.GetInstanceExposeSuspendedWeb(),
|
||||||
|
"stylesheets": []string{
|
||||||
|
assetsPathPrefix + "/Fork-Awesome/css/fork-awesome.min.css",
|
||||||
|
},
|
||||||
|
"javascript": []string{distPathPrefix + "/frontend.js"},
|
||||||
|
})
|
||||||
|
}
|
|
@ -30,7 +30,7 @@
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
domainBlockListPath = "/about/suspended"
|
domainBlockListPath = aboutPath + "/suspended"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (m *Module) domainBlockListGETHandler(c *gin.Context) {
|
func (m *Module) domainBlockListGETHandler(c *gin.Context) {
|
||||||
|
|
|
@ -104,6 +104,7 @@ func (m *Module) Route(r router.Router, mi ...gin.HandlerFunc) {
|
||||||
r.AttachHandler(http.MethodGet, rssFeedPath, m.rssFeedGETHandler)
|
r.AttachHandler(http.MethodGet, rssFeedPath, m.rssFeedGETHandler)
|
||||||
r.AttachHandler(http.MethodGet, confirmEmailPath, m.confirmEmailGETHandler)
|
r.AttachHandler(http.MethodGet, confirmEmailPath, m.confirmEmailGETHandler)
|
||||||
r.AttachHandler(http.MethodGet, robotsPath, m.robotsGETHandler)
|
r.AttachHandler(http.MethodGet, robotsPath, m.robotsGETHandler)
|
||||||
|
r.AttachHandler(http.MethodGet, aboutPath, m.aboutGETHandler)
|
||||||
r.AttachHandler(http.MethodGet, domainBlockListPath, m.domainBlockListGETHandler)
|
r.AttachHandler(http.MethodGet, domainBlockListPath, m.domainBlockListGETHandler)
|
||||||
|
|
||||||
// Attach redirects from old endpoints to current ones for backwards compatibility
|
// Attach redirects from old endpoints to current ones for backwards compatibility
|
||||||
|
|
|
@ -502,6 +502,57 @@ label {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.about {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1rem;
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 0.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-account-card {
|
||||||
|
/* display: inline-grid;
|
||||||
|
grid-template-columns: 4rem auto;
|
||||||
|
grid-template-rows: 4rem;
|
||||||
|
gap: 1rem;
|
||||||
|
padding: 0.5rem; */
|
||||||
|
display: inline-grid;
|
||||||
|
grid-template-columns: auto 1fr;
|
||||||
|
grid-template-rows: auto auto;
|
||||||
|
text-decoration: none;
|
||||||
|
gap: 0.5rem 1rem;
|
||||||
|
border-radius: $br;
|
||||||
|
padding: 0.5rem;
|
||||||
|
min-width: 40%;
|
||||||
|
margin-bottom: 0.3rem;
|
||||||
|
|
||||||
|
background: $list-entry-bg;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $list-entry-alternate-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
align-self: end;
|
||||||
|
margin: 0;
|
||||||
|
color: $fg;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.avatar {
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
width: 5rem;
|
||||||
|
height: 5rem;
|
||||||
|
object-fit: cover;
|
||||||
|
grid-row: 1 / span 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 30rem) {
|
@media screen and (max-width: 30rem) {
|
||||||
.domain-blocklist .entry {
|
.domain-blocklist .entry {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|
85
web/template/about.tmpl
Normal file
85
web/template/about.tmpl
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
{{- /*
|
||||||
|
GoToSocial
|
||||||
|
Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/ -}}
|
||||||
|
|
||||||
|
{{ template "header.tmpl" .}}
|
||||||
|
<main>
|
||||||
|
<section class="about">
|
||||||
|
<h1>About</h1>
|
||||||
|
<div>
|
||||||
|
{{.instance.Description |noescape}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Admin Contact</h2>
|
||||||
|
{{if .instance.ContactAccount}}
|
||||||
|
<a href="{{.instance.ContactAccount.URL}}" class="contact-account-card">
|
||||||
|
<img class="avatar" src="{{.instance.ContactAccount.Avatar}}" alt="" />
|
||||||
|
<h3>
|
||||||
|
{{if .instance.ContactAccount.DisplayName}}{{emojify .instance.ContactAccount.Emojis (escape .instance.ContactAccount.DisplayName)}}{{else}}{{.instance.ContactAccount.Username}}{{end}}
|
||||||
|
</h3>
|
||||||
|
<span>@{{.instance.ContactAccount.Username}}</span>
|
||||||
|
</a><br />
|
||||||
|
{{end}}
|
||||||
|
{{if .instance.Email}}
|
||||||
|
Email: <a href="mailto:{{.instance.Email}}">{{.instance.Email}}</a>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h2>Features</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Registration is
|
||||||
|
{{if .instance.Registrations}}
|
||||||
|
enabled{{if .instance.ApprovalRequired}}, but requires admin approval{{end}}.
|
||||||
|
{{else}}
|
||||||
|
disabled.
|
||||||
|
{{end}}
|
||||||
|
</li>
|
||||||
|
{{if .instance.Configuration.Accounts.AllowCustomCSS}}
|
||||||
|
<li>
|
||||||
|
Users are allowed to set <a href="https://docs.gotosocial.org/en/latest/user_guide/custom_css/"
|
||||||
|
target="_blank" rel="noopener noreferrer">Custom CSS</a> for their profiles.
|
||||||
|
</li>
|
||||||
|
{{end}}
|
||||||
|
<li>
|
||||||
|
Toots can contain up to {{.instance.Configuration.Statuses.MaxCharacters}} characters and
|
||||||
|
{{.instance.Configuration.Statuses.MaxMediaAttachments}} media attachments.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Polls can have up to {{.instance.Configuration.Polls.MaxOptions}} options, with
|
||||||
|
{{.instance.Configuration.Polls.MaxCharactersPerOption}} characters each.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<h2>Moderated servers</h2>
|
||||||
|
<p>
|
||||||
|
ActivityPub instances exchange (federate) data with other servers, including accounts and toots.
|
||||||
|
This can be prevented for specific domains by suspending them. None of their content is stored,
|
||||||
|
and interaction with their users is blocked both ways.</br>
|
||||||
|
{{if .blocklistExposed}}
|
||||||
|
<a href="/about/suspended">View the list of suspended domains</a>
|
||||||
|
{{else}}
|
||||||
|
This instance does not publically share this list.
|
||||||
|
{{end}}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
{{ template "footer.tmpl" .}}
|
Loading…
Reference in a new issue