[WIP] A simple wake-on-lan service
at main 69 lines 1.5 kB view raw
1<script lang="ts"> 2 import { config } from "./lib/api"; 3 import Target from "./lib/Target.svelte"; 4 import ThemeProvider from "./lib/ThemeProvider.svelte"; 5 6 const targets = [ 7 ...Object.entries(config.targets) 8 .filter(([k, v]) => config.pinned.includes(k)) 9 .sort( 10 ([k1], [k2]) => config.pinned.indexOf(k1) - config.pinned.indexOf(k2), 11 ), 12 ...Object.entries(config.targets).filter( 13 ([k]) => !config.pinned.includes(k), 14 ), 15 ]; 16 17 console.log(config); 18</script> 19 20<ThemeProvider /> 21<main> 22 <div></div> 23 <h1> 24 {config.info.title} 25 <img src="/favicon.ico" alt="" style:height="1ch" /> 26 </h1> 27 <ul class="targets"> 28 {#each targets as [name, { mac, ip, url }]} 29 <li> 30 <Target {name} {mac} {ip} {url} /> 31 </li> 32 {/each} 33 </ul> 34 <ul class="links"> 35 {#each config.info.links as [text, href]} 36 <li><a {href}>{text}</a></li> 37 {/each} 38 </ul> 39</main> 40 41<style> 42 main { 43 max-width: 50ch; 44 margin: 1rem auto; 45 padding: 1rem; 46 background: var(--theme-background-main); 47 color: var(--theme-text); 48 border-radius: 10px; 49 } 50 51 .targets { 52 display: grid; 53 grid-template-columns: 1fr; 54 grid-auto-rows: auto; 55 gap: 1rem; 56 grid-auto-flow: row; 57 padding-block: 1rem; 58 list-style: none; 59 } 60 61 .links { 62 display: flex; 63 gap: 0.2rem 2rem; 64 justify-content: center; 65 align-items: center; 66 list-style: none; 67 flex-wrap: wrap; 68 } 69</style>