mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-30 23:02:25 -05: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
					
				
			
		
					 5 changed files with 188 additions and 1 deletions
				
			
		
							
								
								
									
										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 @@ import ( | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| 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…
	
	Add table
		Add a link
		
	
		Reference in a new issue