nice clean recipes pear.dunkirk.sh
recipes
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

chore: rename to pear

+44 -44
+2 -2
.gitignore
··· 3 3 *.exe 4 4 *.test 5 5 *.out 6 - pare 6 + pear 7 7 .DS_Store 8 8 build-errors.log 9 - pare.db* 9 + pear.db*
+3 -3
README.md
··· 1 - # pare 1 + # pear 2 2 3 3 making recipe websites palatable again 4 4 5 - The canonical repo for this is hosted on tangled over at [`dunkirk.sh/pare`](https://tangled.org/dunkirk.sh/pare) 5 + The canonical repo for this is hosted on tangled over at [`dunkirk.sh/pear`](https://tangled.org/dunkirk.sh/pear) 6 6 7 7 <p align="center"> 8 8 <img src="https://raw.githubusercontent.com/taciturnaxolotl/carriage/main/.github/images/line-break.svg" /> ··· 13 13 </p> 14 14 15 15 <p align="center"> 16 - <a href="https://tangled.org/dunkirk.sh/pare/blob/main/LICENSE.md"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=O'Saasy&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a> 16 + <a href="https://tangled.org/dunkirk.sh/pear/blob/main/LICENSE.md"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=O'Saasy&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a> 17 17 </p>
+1 -1
go.mod
··· 1 - module tangled.org/dunkirk.sh/pare 1 + module tangled.org/dunkirk.sh/pear 2 2 3 3 go 1.26.2 4 4
+1 -1
internal/cache/cache.go
··· 5 5 "encoding/json" 6 6 "time" 7 7 8 - "tangled.org/dunkirk.sh/pare/internal/models" 8 + "tangled.org/dunkirk.sh/pear/internal/models" 9 9 10 10 _ "github.com/mattn/go-sqlite3" 11 11 )
+1 -1
internal/cooklang/export.go
··· 6 6 "sort" 7 7 "strings" 8 8 9 - "tangled.org/dunkirk.sh/pare/internal/models" 9 + "tangled.org/dunkirk.sh/pear/internal/models" 10 10 ) 11 11 12 12 func Export(recipe *models.Recipe) string {
+2 -2
internal/extract/hrecipe/hrecipe.go
··· 3 3 import ( 4 4 "strings" 5 5 6 - "tangled.org/dunkirk.sh/pare/internal/extract/schema" 7 - "tangled.org/dunkirk.sh/pare/internal/models" 6 + "tangled.org/dunkirk.sh/pear/internal/extract/schema" 7 + "tangled.org/dunkirk.sh/pear/internal/models" 8 8 9 9 "golang.org/x/net/html" 10 10 )
+4 -4
internal/extract/pipeline.go
··· 10 10 "strings" 11 11 "time" 12 12 13 - "tangled.org/dunkirk.sh/pare/internal/extract/hrecipe" 14 - "tangled.org/dunkirk.sh/pare/internal/extract/schema" 15 - "tangled.org/dunkirk.sh/pare/internal/extract/wprm" 16 - "tangled.org/dunkirk.sh/pare/internal/models" 13 + "tangled.org/dunkirk.sh/pear/internal/extract/hrecipe" 14 + "tangled.org/dunkirk.sh/pear/internal/extract/schema" 15 + "tangled.org/dunkirk.sh/pear/internal/extract/wprm" 16 + "tangled.org/dunkirk.sh/pear/internal/models" 17 17 ) 18 18 19 19 type Pipeline struct {
+1 -1
internal/extract/schema/jsonld.go
··· 7 7 "strconv" 8 8 "strings" 9 9 10 - "tangled.org/dunkirk.sh/pare/internal/models" 10 + "tangled.org/dunkirk.sh/pear/internal/models" 11 11 12 12 "golang.org/x/net/html" 13 13 )
+1 -1
internal/extract/schema/microdata.go
··· 4 4 "fmt" 5 5 "strings" 6 6 7 - "tangled.org/dunkirk.sh/pare/internal/models" 7 + "tangled.org/dunkirk.sh/pear/internal/models" 8 8 9 9 "golang.org/x/net/html" 10 10 )
+1 -1
internal/extract/wprm/wprm.go
··· 5 5 "regexp" 6 6 "strings" 7 7 8 - "tangled.org/dunkirk.sh/pare/internal/models" 8 + "tangled.org/dunkirk.sh/pear/internal/models" 9 9 10 10 "golang.org/x/net/html" 11 11 )
+6 -6
main.go
··· 19 19 "github.com/go-chi/chi/v5/middleware" 20 20 "github.com/joho/godotenv" 21 21 22 - "tangled.org/dunkirk.sh/pare/internal/cache" 23 - "tangled.org/dunkirk.sh/pare/internal/cooklang" 24 - "tangled.org/dunkirk.sh/pare/internal/extract" 25 - "tangled.org/dunkirk.sh/pare/internal/models" 26 - "tangled.org/dunkirk.sh/pare/ui" 22 + "tangled.org/dunkirk.sh/pear/internal/cache" 23 + "tangled.org/dunkirk.sh/pear/internal/cooklang" 24 + "tangled.org/dunkirk.sh/pear/internal/extract" 25 + "tangled.org/dunkirk.sh/pear/internal/models" 26 + "tangled.org/dunkirk.sh/pear/ui" 27 27 ) 28 28 29 29 var gitHash = "dev" ··· 31 31 func main() { 32 32 godotenv.Load() 33 33 port := flag.Int("port", 3000, "port to listen on") 34 - dbPath := flag.String("db", "pare.db", "path to SQLite database") 34 + dbPath := flag.String("db", "pear.db", "path to SQLite database") 35 35 baseURL := flag.String("base-url", "", "base URL of this service") 36 36 flag.Parse() 37 37
ui/static/og.png

This is a binary file and will not be displayed.

+2 -2
ui/templates/base.html
··· 4 4 <head> 5 5 <meta charset="utf-8"> 6 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 - <title>{{block "title" .}}pare{{end}}</title> 7 + <title>{{block "title" .}}pear{{end}}</title> 8 8 <link rel="icon" type="image/svg+xml" href="/static/favicon.svg"> 9 9 <link rel="stylesheet" href="/static/style.css"> 10 10 </head> 11 11 <body> 12 12 <nav> 13 - <a href="/" class="wordmark">pare</a> 13 + <a href="/" class="wordmark">pear</a> 14 14 </nav> 15 15 <div class="page"> 16 16 {{block "content" .}}{{end}}
+2 -2
ui/templates/cook.html
··· 10 10 </head> 11 11 <body> 12 12 <nav> 13 - <a href="/" class="wordmark">pare</a> 13 + <a href="/" class="wordmark">pear</a> 14 14 </nav> 15 15 <div class="page"> 16 16 <div class="cook-header"> ··· 31 31 </div> 32 32 <footer> 33 33 <span>made by <a href="https://dunkirk.sh" target="_blank" rel="noopener">Kieran Klukas</a></span> 34 - <a href="https://tangled.org/dunkirk.sh/pare/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 34 + <a href="https://tangled.org/dunkirk.sh/pear/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 35 35 </footer> 36 36 <script> 37 37 function copyCook() {
+3 -3
ui/templates/error.html
··· 4 4 <head> 5 5 <meta charset="utf-8"> 6 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 - <title>pare - error</title> 7 + <title>pear - error</title> 8 8 <link rel="icon" type="image/svg+xml" href="/static/favicon.svg"> 9 9 <link rel="stylesheet" href="/static/style.css"> 10 10 </head> 11 11 <body> 12 12 <nav> 13 - <a href="/" class="wordmark">pare</a> 13 + <a href="/" class="wordmark">pear</a> 14 14 </nav> 15 15 <div class="page"> 16 16 <div class="error-box"> ··· 21 21 </div> 22 22 <footer> 23 23 <span>made by <a href="https://dunkirk.sh" target="_blank" rel="noopener">Kieran Klukas</a></span> 24 - <a href="https://tangled.org/dunkirk.sh/pare/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 24 + <a href="https://tangled.org/dunkirk.sh/pear/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 25 25 </footer> 26 26 <script> 27 27 const errorPhrases = [
+6 -6
ui/templates/index.html
··· 4 4 <head> 5 5 <meta charset="utf-8"> 6 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 - <title>pare: nice recipes</title> 7 + <title>pear: nice recipes</title> 8 8 <link rel="icon" type="image/svg+xml" href="/static/favicon.svg"> 9 9 <link rel="stylesheet" href="/static/style.css"> 10 - <meta property="og:title" content="pare: nice recipes"> 10 + <meta property="og:title" content="pear: nice recipes"> 11 11 <meta property="og:type" content="website"> 12 12 <meta property="og:url" content="{{.BaseURL}}"> 13 13 <meta property="og:image" content="{{.BaseURL}}/static/og.png"> 14 14 <meta name="twitter:card" content="summary"> 15 - <meta name="twitter:title" content="pare: nice recipes"> 15 + <meta name="twitter:title" content="pear: nice recipes"> 16 16 <meta name="twitter:image" content="{{.BaseURL}}/static/og.png"> 17 17 </head> 18 18 <body> 19 19 <nav> 20 - <a href="/" class="wordmark">pare</a> 20 + <a href="/" class="wordmark">pear</a> 21 21 </nav> 22 22 <div class="page"> 23 23 <div class="hero"> ··· 25 25 <div class="search-form"> 26 26 <form method="GET" action="/"> 27 27 <input type="text" name="url" placeholder="https://www.seriouseats.com/..." value="" autofocus> 28 - <button type="submit">pare it</button> 28 + <button type="submit">pear it</button> 29 29 </form> 30 30 </div> 31 31 </div> 32 32 </div> 33 33 <footer> 34 34 <span>made by <a href="https://dunkirk.sh" target="_blank" rel="noopener">Kieran Klukas</a></span> 35 - <a href="https://tangled.org/dunkirk.sh/pare/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 35 + <a href="https://tangled.org/dunkirk.sh/pear/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 36 36 </footer> 37 37 </body> 38 38 </html>
+3 -3
ui/templates/loading.html
··· 4 4 <head> 5 5 <meta charset="utf-8"> 6 6 <meta name="viewport" content="width=device-width,initial-scale=1"> 7 - <title>pare - extracting…</title> 7 + <title>pear - extracting…</title> 8 8 <link rel="icon" type="image/svg+xml" href="/static/favicon.svg"> 9 9 <link rel="stylesheet" href="/static/style.css"> 10 10 </head> 11 11 <body> 12 12 <nav> 13 - <a href="/" class="wordmark">pare</a> 13 + <a href="/" class="wordmark">pear</a> 14 14 </nav> 15 15 <div class="page"> 16 16 <div class="loading-box" id="loading-container"> ··· 22 22 </div> 23 23 <footer> 24 24 <span>made by <a href="https://dunkirk.sh" target="_blank" rel="noopener">Kieran Klukas</a></span> 25 - <a href="https://tangled.org/dunkirk.sh/pare/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 25 + <a href="https://tangled.org/dunkirk.sh/pear/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 26 26 </footer> 27 27 <script> 28 28 const targetURL = "{{.TargetURL | urlquery}}";
+5 -5
ui/templates/recipe.html
··· 19 19 </head> 20 20 <body> 21 21 <nav> 22 - <a href="/" class="wordmark">pare</a> 22 + <a href="/" class="wordmark">pear</a> 23 23 </nav> 24 24 <div class="page"> 25 25 {{if .Recipe.ImageURL}} ··· 95 95 const label = li.querySelector('label').textContent; 96 96 if (li.classList.contains('checked')) state[label] = true; 97 97 }); 98 - localStorage.setItem('pare:' + location.pathname.slice(1), JSON.stringify({t: Date.now(), s: state})); 98 + localStorage.setItem('pear:' + location.pathname.slice(1), JSON.stringify({t: Date.now(), s: state})); 99 99 } 100 100 101 101 function loadChecks() { 102 102 try { 103 - const raw = JSON.parse(localStorage.getItem('pare:' + location.pathname.slice(1)) || 'null'); 103 + const raw = JSON.parse(localStorage.getItem('pear:' + location.pathname.slice(1)) || 'null'); 104 104 if (!raw) return; 105 105 if (Date.now() - raw.t > 48 * 60 * 60 * 1000) { 106 - localStorage.removeItem('pare:' + location.pathname.slice(1)); 106 + localStorage.removeItem('pear:' + location.pathname.slice(1)); 107 107 return; 108 108 } 109 109 document.querySelectorAll('.ingredient-list li').forEach(li => { ··· 233 233 </div> 234 234 <footer> 235 235 <span>made by <a href="https://dunkirk.sh" target="_blank" rel="noopener">Kieran Klukas</a></span> 236 - <a href="https://tangled.org/dunkirk.sh/pare/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 236 + <a href="https://tangled.org/dunkirk.sh/pear/commit/{{.GitHash}}" target="_blank" rel="noopener" class="commit-link">{{.GitHash}}</a> 237 237 </footer> 238 238 </body> 239 239 </html>