My personal website emmeline.tngl.io/
0
fork

Configure Feed

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

update

Emmeline 2f2ee793 c07abf7b

+143 -93
+2
components/nav.html
··· 2 2 <ul> 3 3 <p><a href="${site.urls.index}">${site.titles.index}</a></p> 4 4 <p><a href="${site.urls.about}">${site.titles.about}</a></p> 5 + <p><a href="${site.urls.contact}">${site.titles.contact}</a></p> 6 + <p><a href="${site.urls.projects}">${site.titles.projects}</a></p> 5 7 </ul> 6 8 </nav>
+137 -28
main.pup
··· 1 1 let paw = import("paw"); 2 2 3 + let pages = [ 4 + [ 5 + id: "index", 6 + url: "/", 7 + page: "index.html", 8 + title: "Home" 9 + ], 10 + [ 11 + id: "about", 12 + url: "/about", 13 + page: "about.html", 14 + title: "About Me" 15 + ], 16 + [ 17 + id: "contact", 18 + url: "/contact/", 19 + page: "contact.html", 20 + title: "Contact" 21 + ], 22 + [ 23 + id: "projects", 24 + url: "/projects/", 25 + page: "projects.html", 26 + title: "Projects" 27 + ], 28 + ]; 29 + 3 30 let friend_buttons = [ 4 31 [ 5 32 href: "https://gingershaped.computer", ··· 36 63 ], 37 64 ]; 38 65 39 - add(names: map) { 40 - for key in maps.keys(names) { 41 - paw.set("title", names[key]); 42 - paw.add(key, strings.cat([key, ".html"])); 43 - paw.set("title", nil); 44 - } 45 - } 66 + let git_forges = [ 67 + tangled: [url: "https://tangled.org/", name: "Tangled"], 68 + girlforge: [url: "https://git.girlkisser.top/", name: "Girlforge"], 69 + github: [url: "https://github.com/", name: "Github"], 70 + ]; 71 + 72 + let my_projects = [ 73 + [ 74 + name: "Keraforge", 75 + status: "Active", 76 + url: [ 77 + tangled: "emmeline.girlkisser.top/keraforge/", 78 + girlforge: "keraforgers/keraforge/", 79 + ], 80 + desc: "Top-down 2D RPG game engine.", 81 + ], 82 + [ 83 + name: "Puppy", 84 + status: "Active", 85 + url: [ 86 + tangled: "emmeline.girlkisser.top/puppy/", 87 + girlforge: "emmeline/puppy/", 88 + ], 89 + desc: "Minimalistic scripting language for embedding.", 90 + ], 91 + [ 92 + name: "Pawww", 93 + status: "Active", 94 + url: [ 95 + tangled: "emmeline.girlkisser.top/pawww/", 96 + girlforge: "emmeline/pawww/", 97 + ], 98 + desc: "Templating language written in Puppy.", 99 + ], 100 + [ 101 + name: "bini", 102 + status: "Stable", 103 + url: [ 104 + tangled: "emmeline.girlkisser.top/bini/", 105 + girlforge: "emmeline/bini/", 106 + ], 107 + desc: "Cross-platform binary file I/O library for C.", 108 + ], 109 + [ 110 + name: "beep", 111 + status: "Active", 112 + url: [ 113 + tangled: "emmeline.girlkisser.top/beep/", 114 + girlforge: "emmeline/beep/", 115 + ], 116 + desc: "Self-hosted mini-blogger.", 117 + ] 118 + ]; 46 119 47 120 compile_buttons(btns: lst) -> lst { 48 121 let output = []; ··· 78 151 -> output 79 152 } 80 153 81 - main { 82 - let pages = [ 83 - about: "About Me", 84 - ]; 154 + compile_projects(projects: lst) -> lst { 155 + let output = []; 156 + for proj in projects { 157 + let urls = ""; 158 + let is_first = true; 159 + for id in maps.keys(proj.url) { 160 + let affix = ""; 161 + if is_first && #proj.url > 0 { 162 + is_first = false; 163 + affix = " (primary)"; 164 + } else { 165 + affix = " (mirror)"; 166 + } 167 + urls = strings.cat([ 168 + urls, 169 + "<p>", 170 + '<a href="', 171 + git_forges[id].url, 172 + proj.url[id], 173 + '">', 174 + git_forges[id].name, 175 + "</a>", 176 + affix, 177 + "</p>" 178 + ]); 179 + } 85 180 181 + let s = strings.cat([ 182 + "<tr>", 183 + "<td>", proj.name, "</td>", 184 + "<td>", proj.status, "</td>", 185 + "<td>", urls, "</td>", 186 + "<td>", proj.desc, "</td>", 187 + "</tr>" 188 + ]); 189 + 190 + lists.append(output, s); 191 + } 192 + -> output 193 + } 194 + 195 + main { 86 196 let site = [ 87 - urls: [ 88 - index: "/", 197 + urls: [:], 198 + titles: [:], 199 + projects: [ 200 + data: compile_projects(my_projects), 89 201 ], 90 - titles: [ 91 - index: "Home", 202 + buttons: [ 203 + friends: compile_buttons(friend_buttons), 204 + misc: compile_buttons(misc_buttons), 92 205 ], 206 + time: sys.now(), 93 207 ]; 94 - for page in maps.keys(pages) { 95 - site.urls[page] = strings.cat(["/", page, "/"]); 96 - site.titles[page] = pages[page]; 208 + for page in pages { 209 + site.urls[page.id] = page.url; 210 + site.titles[page.id] = page.title; 97 211 } 98 212 paw.set("site", site); 99 - 100 - paw.set("time", sys.now()); 101 - 102 - paw.set("buttons.friends", compile_buttons(friend_buttons)); 103 - paw.set("buttons.misc", compile_buttons(misc_buttons)); 104 213 105 214 paw.add_component("head"); 106 215 paw.add_component("nav"); 107 216 108 217 paw.add_static("style.css"); 109 218 110 - paw.set("title", "Home"); 111 - paw.add("", "index.html"); 112 - paw.set("title", nil); 113 - 114 - add(pages); 219 + for page in pages { 220 + paw.set("title", page.title); 221 + paw.add(page.url, page.page); 222 + paw.set("title", nil); 223 + } 115 224 }
+2 -2
pages/index.html
··· 66 66 <br/> 67 67 <h3>Buttons</h3> 68 68 <p>My Circle:</p> 69 - ${buttons.friends} 69 + ${site.buttons.friends} 70 70 <p>Misc:</p> 71 - ${buttons.misc} 71 + ${site.buttons.misc}
+1 -62
pages/projects.html
··· 7 7 <table> 8 8 <tr> 9 9 <th>Name</th> 10 - <th>Kind</th> 11 10 <th>Status</th> 12 11 <th>URL</th> 13 12 <th>Description</th> 14 13 </tr> 15 - <tr> 16 - <td>Keraforge</td> 17 - <td>Game Engine</td> 18 - <td>Active</td> 19 - <td> 20 - <p><a href="https://tangled.org/emmeline.girlkisser.top/keraforge/">Tangled (primary)</a></p> 21 - <p><a href="https://git.girlkisser.top/keraforgers/keraforge/">Girlforge (read-only mirror)</a></p> 22 - </td> 23 - <td>A top-down 2D RPG game engine.</td> 24 - </tr> 25 - <tr> 26 - <td>beep</td> 27 - <td>Social Media Webapp</td> 28 - <td>Active</td> 29 - <td> 30 - <p><a href="https://tangled.org/emmeline.girlkisser.top/beep/">Tangled (primary)</a></p> 31 - <p><a href="https://git.girlkisser.top/emmeline/beep/">Girlforge (read-only mirror)</a></p> 32 - </td> 33 - <td>A self-hosted mini-blogger.</td> 34 - </tr> 14 + ${site.projects.data} 35 15 </table> 36 - 37 - <section> 38 - <details>Older Projects</details> 39 - <table> 40 - <tr> 41 - <th>Name</th> 42 - <th>Kind</th> 43 - <th>Status</th> 44 - <th>URL</th> 45 - <th>Description</th> 46 - </tr> 47 - <tr> 48 - <td>Sea</td> 49 - <td>Compiler</td> 50 - <td>WIP</td> 51 - <td><a href="https://github.com/sea-lang/sea/">Github</a></td> 52 - <td>A general-purpose programming language designed for low-level-capable, performant, and portable code.</td> 53 - </tr> 54 - <tr> 55 - <td>MineFactorial</td> 56 - <td>Minecraft Mod</td> 57 - <td>WIP</td> 58 - <td><a href="https://github.com/emmathemartian/minefactorial/">Github</a></td> 59 - <td>MineFactory revived and reimagined for modern versions.</td> 60 - </tr> 61 - <tr> 62 - <td>Cygnus</td> 63 - <td>Minecraft Mod</td> 64 - <td>WIP</td> 65 - <td><a href="https://github.com/nebula-modding/cygnus/">Github</a></td> 66 - <td>A space mod aiming to make exploring space fun and unique.</td> 67 - </tr> 68 - <tr> 69 - <td>Lazuli</td> 70 - <td>Minecraft Mod</td> 71 - <td>WIP</td> 72 - <td><a href="https://github.com/nebula-modding/cygnus/">Github</a></td> 73 - <td>A space mod aiming to make exploring space fun and unique.</td> 74 - </tr> 75 - </table> 76 - </section>
+1 -1
templates/index.html
··· 15 15 <main> 16 16 ${body} 17 17 <footer> 18 - <p>Site compiled at <code>${time}</code>.</p> 18 + <p>Site compiled at <code>${site.time}</code>.</p> 19 19 </footer> 20 20 </main> 21 21 </div>