Add dynamic page title
This commit is contained in:
		
							parent
							
								
									fb3c8ab5c3
								
							
						
					
					
						commit
						38565e2e1f
					
				| 
						 | 
					@ -7,9 +7,9 @@ Inspired by the [invidio.us](https://github.com/omarroth/invidious) project.
 | 
				
			||||||
- All requests go through the backend, client never talks to Twitter
 | 
					- All requests go through the backend, client never talks to Twitter
 | 
				
			||||||
- Prevents Twitter from tracking your IP or JavaScript fingerprint
 | 
					- Prevents Twitter from tracking your IP or JavaScript fingerprint
 | 
				
			||||||
- Unofficial API (no rate limits or developer account required)
 | 
					- Unofficial API (no rate limits or developer account required)
 | 
				
			||||||
- Lightweight (for [@nim_lang](https://twitter.com/nim_lang), 32KB vs 552KB from twitter.com)
 | 
					 | 
				
			||||||
- AGPLv3 licensed, no proprietary instances permitted
 | 
					- AGPLv3 licensed, no proprietary instances permitted
 | 
				
			||||||
- Dark theme
 | 
					- Dark theme
 | 
				
			||||||
 | 
					- Lightweight (for [@nim_lang](https://twitter.com/nim_lang), 36KB vs 580KB from twitter.com)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Installation
 | 
					## Installation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,3 +79,9 @@ proc linkUser*(profile: Profile; class=""): string =
 | 
				
			||||||
    result &= span("✔", class="verified-icon", title="Verified account")
 | 
					    result &= span("✔", class="verified-icon", title="Verified account")
 | 
				
			||||||
  if not username and profile.protected:
 | 
					  if not username and profile.protected:
 | 
				
			||||||
    result &= span("🔒", class="protected-icon", title="Protected account")
 | 
					    result &= span("🔒", class="protected-icon", title="Protected account")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proc pageTitle*(profile: Profile): string =
 | 
				
			||||||
 | 
					  &"{profile.fullname} (@{profile.username}) | Nitter"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					proc pageTitle*(page: string): string =
 | 
				
			||||||
 | 
					  &"{page} | Nitter"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
import asyncdispatch, asyncfile, httpclient, strutils, uri, os
 | 
					import asyncdispatch, asyncfile, httpclient, strutils, strformat, uri, os
 | 
				
			||||||
import jester
 | 
					import jester
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import api, utils, types, cache
 | 
					import api, utils, types, cache, formatters
 | 
				
			||||||
import views/[user, general, conversation]
 | 
					import views/[user, general, conversation]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const cacheDir {.strdefine.} = "/tmp/nitter"
 | 
					const cacheDir {.strdefine.} = "/tmp/nitter"
 | 
				
			||||||
| 
						 | 
					@ -16,11 +16,12 @@ proc showTimeline(name: string; num=""): Future[string] {.async.} =
 | 
				
			||||||
  if profile.username.len == 0:
 | 
					  if profile.username.len == 0:
 | 
				
			||||||
    return ""
 | 
					    return ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return renderMain(renderProfile(profile, await tweetsFut, num.len == 0))
 | 
					  let profileHtml = renderProfile(profile, await tweetsFut, num.len == 0)
 | 
				
			||||||
 | 
					  return renderMain(profileHtml, title=pageTitle(profile))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
routes:
 | 
					routes:
 | 
				
			||||||
  get "/":
 | 
					  get "/":
 | 
				
			||||||
    resp renderMain(renderSearchPanel())
 | 
					    resp renderMain(renderSearchPanel(), title=pageTitle("Search"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  post "/search":
 | 
					  post "/search":
 | 
				
			||||||
    if @"query".len == 0:
 | 
					    if @"query".len == 0:
 | 
				
			||||||
| 
						 | 
					@ -44,7 +45,8 @@ routes:
 | 
				
			||||||
    if conversation.tweet.id.len == 0:
 | 
					    if conversation.tweet.id.len == 0:
 | 
				
			||||||
      resp Http404, showError("Tweet not found")
 | 
					      resp Http404, showError("Tweet not found")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    resp renderMain(renderConversation(conversation))
 | 
					    let title = pageTitle(conversation.tweet.profile)
 | 
				
			||||||
 | 
					    resp renderMain(renderConversation(conversation), title=title)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get "/pic/@sig/@url":
 | 
					  get "/pic/@sig/@url":
 | 
				
			||||||
    cond "http" in @"url"
 | 
					    cond "http" in @"url"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,11 +2,11 @@
 | 
				
			||||||
#import user
 | 
					#import user
 | 
				
			||||||
#import xmltree
 | 
					#import xmltree
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#proc renderMain*(body: string): string =
 | 
					#proc renderMain*(body: string; title="Nitter"): string =
 | 
				
			||||||
<!DOCTYPE html>
 | 
					<!DOCTYPE html>
 | 
				
			||||||
<html>
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <title>Nitter</title>
 | 
					    <title>${xmltree.escape(title)}</title>
 | 
				
			||||||
    <link rel="stylesheet" type="text/css" href="/style.css">
 | 
					    <link rel="stylesheet" type="text/css" href="/style.css">
 | 
				
			||||||
  </head>
 | 
					  </head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,5 +46,5 @@
 | 
				
			||||||
#end proc
 | 
					#end proc
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#proc showError*(error: string): string =
 | 
					#proc showError*(error: string): string =
 | 
				
			||||||
${renderMain(renderError(error))}
 | 
					${renderMain(renderError(error), title="Error | Nitter")}
 | 
				
			||||||
#end proc
 | 
					#end proc
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue