module Pages class Layout < ::Phlex::HTML def pages = { home: { title: "Home", url: "/" }, blog: { title: "Blog", url: "/blog" }, about: { title: "About", url: "/about" }, garden: { title: "Garden", url: "https://garden.farthergate.com" }, } def initialize(page, meta: {}) @page = page if @page.is_a? Symbol @page_info = pages[page] else @page_info = @page end @meta = meta end def view_template doctype html { head { title { @page_info[:title] + " | Aleks Rūtiņš" } meta(charset: "utf-8") meta(name: "viewport", content: "width=device-width, initial-scale=1.0") link(rel: "prefetch", href: "/DM_Mono/DMMono-Regular.ttf") link(rel: "prefetch", href: "/DM_Mono/DMMono-Medium.ttf") link(rel: "stylesheet", href: "/site.css") script(defer: true, 'data-domain' => "farthergate.com", src: "https://plausible.farthergate.com/js/script.js") @meta.each { |name, content| meta(name: name, content: content) } } body(class: 'm-0 p-0') { header(class: 'sticky top-0 bg-white/50 backdrop-blur-md border-gray-500 border-b flex p-3 justify-center') { nav(class: 'flex gap-4') { pages.each { |key, page| a(href: page[:url], class: key == @page ? "active" : "") { page[:title].downcase } } } } yield } } end end end