chore: add date formatting
This commit is contained in:
		
							parent
							
								
									6b8ad143fe
								
							
						
					
					
						commit
						74fa69274d
					
				@ -202,9 +202,8 @@ func addKey(preamble lextwt.Comments, key, value string, v ...any) lextwt.Commen
 | 
				
			|||||||
	return append(preamble, lextwt.NewCommentValue(comment, key, value))
 | 
						return append(preamble, lextwt.NewCommentValue(comment, key, value))
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
func mkPreamble(hostname, uri, path string, limit int, length, offset, end int64) lextwt.Comments {
 | 
					func mkPreamble(hostname, uri, path string, limit int, length, offset, end int64) lextwt.Comments {
 | 
				
			||||||
	uri += path
 | 
						hostname += path
 | 
				
			||||||
	preamble := addKey(mkPreambleDocs(hostname), "twt range", "1 %d", end)
 | 
						preamble := addKey(mkPreambleDocs(hostname), "twt range", "1 %d", end)
 | 
				
			||||||
	preamble = addKey(preamble, "self", "%s%s", hostname, mkqry(uri, limit, offset))
 | 
						preamble = addKey(preamble, "self", "%s%s", hostname, mkqry(uri, limit, offset))
 | 
				
			||||||
	if next := offset + length; next < end {
 | 
						if next := offset + length; next < end {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										66
									
								
								http-html.go
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								http-html.go
									
									
									
									
									
								
							@ -56,6 +56,44 @@ func (a *HTML) home(w http.ResponseWriter, r *http.Request) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	preamble := mkPreamble(a.hostname, uri, "", limit, int64(len(twts)), offset, end)
 | 
						preamble := mkPreamble(a.hostname, uri, "", limit, int64(len(twts)), offset, end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						reg := &HTWriter{
 | 
				
			||||||
 | 
							lextwt.NewTwtRegistry(preamble, reverse(twts)),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						reg.WriteTo(w)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (a *HTML) conv(w http.ResponseWriter, r *http.Request) {
 | 
				
			||||||
 | 
						ctx, span := otel.Span(r.Context())
 | 
				
			||||||
 | 
						defer span.End()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						w.Header().Set("Content-Type", "text/html; charset=utf-8")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						hash := r.PathValue("hash")
 | 
				
			||||||
 | 
						if (len(hash) < 6 || len(hash) > 8) && !notAny(hash, "abcdefghijklmnopqrstuvwxyz234567") {
 | 
				
			||||||
 | 
							w.WriteHeader(http.StatusBadRequest)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						limit := 100
 | 
				
			||||||
 | 
						if v, ok := strconv.Atoi(r.URL.Query().Get("limit")); ok == nil {
 | 
				
			||||||
 | 
							limit = v
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var offset int64 = 0
 | 
				
			||||||
 | 
						if v, ok := strconv.ParseInt(r.URL.Query().Get("offset"), 10, 64); ok == nil {
 | 
				
			||||||
 | 
							offset = v
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						twts, offset, end, err := fetchConv(ctx, a.db, hash, limit, offset)
 | 
				
			||||||
 | 
						span.RecordError(err)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							http.Error(w, "ERR", 500)
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						preamble := mkPreamble(a.hostname, "", "/conv/"+hash, limit, int64(len(twts)), offset, end)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	reg := &HTWriter{
 | 
						reg := &HTWriter{
 | 
				
			||||||
		lextwt.NewTwtRegistry(preamble, twts),
 | 
							lextwt.NewTwtRegistry(preamble, twts),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -90,9 +128,9 @@ func (r *HTWriter) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
				.h-card .u-photo { width: 32px; }
 | 
									.h-card .u-photo { width: 32px; }
 | 
				
			||||||
				.h-card .date { text-align: right;}
 | 
									.h-card .date { text-align: right;}
 | 
				
			||||||
				section { overflow: scroll; }
 | 
									section { overflow: scroll; }
 | 
				
			||||||
			</style
 | 
								</style>
 | 
				
			||||||
		</head>
 | 
							</head>
 | 
				
			||||||
	<body>
 | 
						<body onload="setTimestamps()">
 | 
				
			||||||
	<pre class='preamble'>
 | 
						<pre class='preamble'>
 | 
				
			||||||
	`)
 | 
						`)
 | 
				
			||||||
	output += int64(i)
 | 
						output += int64(i)
 | 
				
			||||||
@ -117,7 +155,7 @@ func (r *HTWriter) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
	i, err = fmt.Fprintln(w, "</pre><main>")
 | 
						i, err = fmt.Fprintln(w, "</pre><main>")
 | 
				
			||||||
	output += int64(i)
 | 
						output += int64(i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, twt := range reverse(r.Twts()) {
 | 
						for _, twt := range r.Twts() {
 | 
				
			||||||
		twter := twt.Twter()
 | 
							twter := twt.Twter()
 | 
				
			||||||
		uri, err := url.Parse(twter.URI)
 | 
							uri, err := url.Parse(twter.URI)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -149,7 +187,7 @@ func (r *HTWriter) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
					
 | 
										
 | 
				
			||||||
					<div class="date">
 | 
										<div class="date">
 | 
				
			||||||
						<div><a class="u-url" href="%s">%s</a></div>
 | 
											<div><a class="u-url" href="%s">%s</a></div>
 | 
				
			||||||
						<div><small>%s</small></div>
 | 
											<div><small> </small></div>
 | 
				
			||||||
					</div>	
 | 
										</div>	
 | 
				
			||||||
				</header>	
 | 
									</header>	
 | 
				
			||||||
				<section>
 | 
									<section>
 | 
				
			||||||
@ -160,8 +198,9 @@ func (r *HTWriter) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
		`, "/?uri="+twter.URI, twter.Avatar,
 | 
							`, "/?uri="+twter.URI, twter.Avatar,
 | 
				
			||||||
			"/?uri="+twter.URI, twter.Nick,
 | 
								"/?uri="+twter.URI, twter.Nick,
 | 
				
			||||||
			twter.URI, uri.Host,
 | 
								twter.URI, uri.Host,
 | 
				
			||||||
			"/conv/"+twt.Hash(), fmt.Sprintf("<time datetime='%s'>%s</time>", twt.Created().Format(time.RFC3339), twt.Created().Format(time.RFC822)),
 | 
								"/conv/"+twt.Subject().Tag().Text(), fmt.Sprintf("<time datetime='%s'>%s</time>", twt.Created().Format(time.RFC3339), twt.Created().Format(time.RFC822)),
 | 
				
			||||||
			time.Since(twt.Created()).Round(time.Second).String(), twt,
 | 
								// time.Since(twt.Created()).Round(time.Minute).String(), 
 | 
				
			||||||
 | 
								twt,
 | 
				
			||||||
		)
 | 
							)
 | 
				
			||||||
		output += int64(i)
 | 
							output += int64(i)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
@ -170,7 +209,20 @@ func (r *HTWriter) WriteTo(w io.Writer) (int64, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	i, err = fmt.Fprintln(w, "</main></body>")
 | 
						i, err = fmt.Fprintln(w, `</main>
 | 
				
			||||||
 | 
						<script>
 | 
				
			||||||
 | 
							function setTimestamps() {
 | 
				
			||||||
 | 
								document.querySelectorAll("time").forEach((e) => {
 | 
				
			||||||
 | 
									const OneDay = new Date(new Date().getTime() - (1 * 24 * 60 * 60 * 1000))
 | 
				
			||||||
 | 
									const d = new Date(e.hasAttributes() && e.attributes.getNamedItem('datetime'). value);
 | 
				
			||||||
 | 
									if (d > OneDay)
 | 
				
			||||||
 | 
										e.innerHTML = d.toLocaleTimeString('en-US',{ hour: '2-digit', minute: '2-digit' });
 | 
				
			||||||
 | 
									else
 | 
				
			||||||
 | 
										e.innerHTML = d.toLocaleDateString('en-US',{ hour: '2-digit', minute: '2-digit' });
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						</script>
 | 
				
			||||||
 | 
						</body>`)
 | 
				
			||||||
	output += int64(i)
 | 
						output += int64(i)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return output, err
 | 
						return output, err
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								http.go
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								http.go
									
									
									
									
									
								
							@ -35,9 +35,11 @@ func httpServer(ctx context.Context, app *appState) error {
 | 
				
			|||||||
		hostname: app.args.Hostname,
 | 
							hostname: app.args.Hostname,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	http.HandleFunc("/", html.home)
 | 
					 | 
				
			||||||
	http.HandleFunc("/health", html.healthcheck)
 | 
						http.HandleFunc("/health", html.healthcheck)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						http.HandleFunc("/", html.home)
 | 
				
			||||||
 | 
						http.HandleFunc("/conv/{hash}", html.conv)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	http.HandleFunc("/api/plain", api.plain)
 | 
						http.HandleFunc("/api/plain", api.plain)
 | 
				
			||||||
	http.HandleFunc("/api/plain/conv/{hash}", api.conv)
 | 
						http.HandleFunc("/api/plain/conv/{hash}", api.conv)
 | 
				
			||||||
	http.HandleFunc("/api/plain/mentions", api.mentions)
 | 
						http.HandleFunc("/api/plain/mentions", api.mentions)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user