Compare commits
	
		
			10 Commits
		
	
	
		
			6c14960794
			...
			776646ef12
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					776646ef12 | ||
| 
						 | 
					ab5711c584 | ||
| 
						 | 
					7a8555dc85 | ||
| 
						 | 
					77c87921f6 | ||
| 
						 | 
					ab49a6d04f | ||
| 
						 | 
					9ac6866860 | ||
| 
						 | 
					a2ce551e7c | ||
| 
						 | 
					12220c730e | ||
| 
						 | 
					d7aa194327 | ||
| 
						 | 
					1997fa2aab | 
							
								
								
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -42,11 +42,21 @@ npm-debug.log
 | 
				
			|||||||
# Backup files and directories
 | 
					# Backup files and directories
 | 
				
			||||||
*.bak
 | 
					*.bak
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TOTP test file
 | 
				
			||||||
 | 
					otp-test.enc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# SSL certificates
 | 
					# SSL certificates
 | 
				
			||||||
/priv/cert/*
 | 
					/priv/cert/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ignore static content; must be manually shipped
 | 
					# Ignore static content; must be manually shipped
 | 
				
			||||||
/priv/static/*/**
 | 
					/priv/static/*/**
 | 
				
			||||||
 | 
					/assets/css/*.tailwind
 | 
				
			||||||
 | 
					/assets/css/*.tailwind.map
 | 
				
			||||||
 | 
					/assets/sass/app.sass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ignore markdown; must be manually shipped
 | 
					# Ignore markdown; must be manually shipped
 | 
				
			||||||
/lib/sukaato_web/controllers/page_md/**/*
 | 
					/lib/sukaato_web/controllers/page_md/**/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Temporary
 | 
				
			||||||
 | 
					/lib/sukaato_web/controllers/page_html/users/anon/*
 | 
				
			||||||
 | 
					/lib/sukaato_web/controllers/page_json/users/anon/*
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
/home/rika/Portfolio/Documents/Source_Code/sukaato/assets/sass/themes/default/export.sass
 | 
					 | 
				
			||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
PRAGMA foreign_keys = ON;
 | 
					PRAGMA foreign_keys = ON;
 | 
				
			||||||
 | 
					DECLARE @email_address varchar = 'admin@sukaato.moe';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CREATE TABLE [IF NOT EXISTS] [User].users (
 | 
					CREATE TABLE [IF NOT EXISTS] [User].users (
 | 
				
			||||||
	id INTEGER PRIMARY KEY,
 | 
						id INTEGER PRIMARY KEY,
 | 
				
			||||||
@@ -34,7 +35,7 @@ INSERT INTO users (
 | 
				
			|||||||
VALUES (
 | 
					VALUES (
 | 
				
			||||||
    'root',
 | 
					    'root',
 | 
				
			||||||
    '$argon2id$v=19$m=256,t=1,p=4$JRuXmK5RvRJvvpvpWIF2UA$0uf3V1FHaIVmCgp2JfF+Mfrm66ihKXhKkf0RN820y/k',
 | 
					    '$argon2id$v=19$m=256,t=1,p=4$JRuXmK5RvRJvvpvpWIF2UA$0uf3V1FHaIVmCgp2JfF+Mfrm66ihKXhKkf0RN820y/k',
 | 
				
			||||||
    'admin@sukaato.moe',
 | 
					    @email_address,
 | 
				
			||||||
    '[15, 15, 15, 15, 15, 15]'
 | 
					    '[15, 15, 15, 15, 15, 15]'
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								bin/make_admin.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								bin/make_admin.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					PRAGMA foreign_keys = ON;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DECLARE @email_address varchar = 'admin@sukaato.moe';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INSERT INTO users (
 | 
				
			||||||
 | 
					    username,
 | 
				
			||||||
 | 
					    password,
 | 
				
			||||||
 | 
					    email,
 | 
				
			||||||
 | 
					    perms
 | 
				
			||||||
 | 
					) 
 | 
				
			||||||
 | 
					VALUES (
 | 
				
			||||||
 | 
					    'root',
 | 
				
			||||||
 | 
					    '$argon2id$v=19$m=256,t=1,p=4$JRuXmK5RvRJvvpvpWIF2UA$0uf3V1FHaIVmCgp2JfF+Mfrm66ihKXhKkf0RN820y/k',
 | 
				
			||||||
 | 
					    @email_address,
 | 
				
			||||||
 | 
					    '[15, 15, 15, 15, 15, 15]'
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
#! /bin/bash
 | 
					#! /bin/bash
 | 
				
			||||||
set -euo pipefail
 | 
					set -euo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mix phx.gen.schema User users name:string username:string password:string email:string dob:date gender_type:enum:trans:cis:nb gender_id:enum:fem:masc:combined:fluid:none bio:text affil:array:map perms:array:integer user_token:string pub_keys:map
 | 
					mix phx.gen.schema User users name:string username:string password:string email:string dob:date gender_type:enum:trans:cis:nb gender_id:enum:fem:masc:combined:fluid:none bio:text affil:array:map perms:array:integer user_token:string pub_keys:map totp_secret:string ltotp:utc_datetime fido_priority:integer fido_creds:array:string fido_keys:array:map fido_enabled:boolean fido_active:boolean totp_enabled:boolean totp_active:boolean
 | 
				
			||||||
mix ecto.migrate
 | 
					mix ecto.migrate
 | 
				
			||||||
mix phx.gen.schema Post posts title:string:unique abst:text auth_id:references:users rev_id:references:users slug:string content:text tags:array:string cat:string ledit:utc_datetime
 | 
					mix phx.gen.schema Post posts title:string:unique abst:text auth_id:references:users rev_id:references:users slug:string content:text tags:array:string cat:string ledit:utc_datetime
 | 
				
			||||||
mix ecto.migrate
 | 
					mix ecto.migrate
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										30
									
								
								lib/sukaato_web/controllers/error_html/404.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/sukaato_web/controllers/error_html/404.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% _rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="err_body">
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <button id="monoregistration" type="button" class="registbutt">Register</button>
 | 
				
			||||||
 | 
					            <button id="monologin" type="button" class="loginbutt">Log in</button>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO: Replace some parts with Caddy HTTP error code placeholders -->
 | 
				
			||||||
 | 
					                <article id="server_report">
 | 
				
			||||||
 | 
					                    <section><span>
 | 
				
			||||||
 | 
					                        <h1 id="status_code" class="error_code"><span>error_code error_label</span></h1>
 | 
				
			||||||
 | 
					                        <img src="" alt="">
 | 
				
			||||||
 | 
					                        <p id="status_message" class="error_message message">
 | 
				
			||||||
 | 
					                            <span>
 | 
				
			||||||
 | 
					                            error_message <br><br>trace
 | 
				
			||||||
 | 
					                            </span>
 | 
				
			||||||
 | 
					                        </p>
 | 
				
			||||||
 | 
					                    </span></section>
 | 
				
			||||||
 | 
					                </article>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra"></div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										30
									
								
								lib/sukaato_web/controllers/error_html/500.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								lib/sukaato_web/controllers/error_html/500.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% _rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="err_body">
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <button id="monoregistration" type="button" class="registbutt">Register</button>
 | 
				
			||||||
 | 
					            <button id="monologin" type="button" class="loginbutt">Log in</button>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO: Replace some parts with Caddy HTTP error code placeholders -->
 | 
				
			||||||
 | 
					                <article id="server_report">
 | 
				
			||||||
 | 
					                    <section><span>
 | 
				
			||||||
 | 
					                        <h1 id="status_code" class="error_code"><span>error_code error_label</span></h1>
 | 
				
			||||||
 | 
					                        <img src="" alt="">
 | 
				
			||||||
 | 
					                        <p id="status_message" class="error_message message">
 | 
				
			||||||
 | 
					                            <span>
 | 
				
			||||||
 | 
					                            error_message <br><br>trace
 | 
				
			||||||
 | 
					                            </span>
 | 
				
			||||||
 | 
					                        </p>
 | 
				
			||||||
 | 
					                    </span></section>
 | 
				
			||||||
 | 
					                </article>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra"></div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										122
									
								
								lib/sukaato_web/controllers/page_html/contact.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								lib/sukaato_web/controllers/page_html/contact.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,122 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel" class="panel">
 | 
				
			||||||
 | 
					            <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <div id="affil_wrap">
 | 
				
			||||||
 | 
					                    <div>
 | 
				
			||||||
 | 
					                        <%= for i <- @affil do %>
 | 
				
			||||||
 | 
					                            <%= for item <- i do %>
 | 
				
			||||||
 | 
					                                <a href={item["protocol"] <> item["scheme_postfix"] <> item["address"]}>
 | 
				
			||||||
 | 
					                                    <%= if Map.has_key?(item, "icon_uri") and item["icon_uri"] != "" do %>
 | 
				
			||||||
 | 
					                                        <img src={item["icon_uri"]} />
 | 
				
			||||||
 | 
					                                    <% else %>
 | 
				
			||||||
 | 
					                                        <%= if Map.has_key?(item, "icon_name") and item["icon_name"] != "" do %>
 | 
				
			||||||
 | 
					                                            <!-- @TODO either troubleshoot heroicons or draw from map of (social media logo?) images (SVG?) -->
 | 
				
			||||||
 | 
					                                            <.affiliate icon={item["icon_name"]} />
 | 
				
			||||||
 | 
					                                        <% else %>
 | 
				
			||||||
 | 
					                                            <%= item["name"] %>
 | 
				
			||||||
 | 
					                                        <% end %>
 | 
				
			||||||
 | 
					                                    <% end %>
 | 
				
			||||||
 | 
					                                </a>
 | 
				
			||||||
 | 
					                            <% end %>
 | 
				
			||||||
 | 
					                        <% end %>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div id="card_table">
 | 
				
			||||||
 | 
					                        <div id="affil_info">
 | 
				
			||||||
 | 
					                        <!-- <img src="https://static.vecteezy.com/system/resources/previews/022/185/914/original/metal-hand-sign-png.png" /> -->
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                                <%= for i <- @affil do %>
 | 
				
			||||||
 | 
					                                    <%= for item <- i do %>
 | 
				
			||||||
 | 
					                                        <a href={item["protocol"] <> item["scheme_postfix"] <> item["address"]}>
 | 
				
			||||||
 | 
					                                            <article>
 | 
				
			||||||
 | 
					                                                <span><h1 id={item["name"] <> "_label"} class="contact_label"><%= item["name"] %></h1>
 | 
				
			||||||
 | 
					                                                <p id={item["name"]} class="contact_datum">
 | 
				
			||||||
 | 
					                                                        <%= item["protocol"] <> " -> " <> item["address"] %>
 | 
				
			||||||
 | 
					                                                </p></span>
 | 
				
			||||||
 | 
					                                            </article>
 | 
				
			||||||
 | 
					                                        </a>
 | 
				
			||||||
 | 
					                                    <% end %>
 | 
				
			||||||
 | 
					                                <% end %>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <!-- <form id="contact_form" method="POST">
 | 
				
			||||||
 | 
					                    <label for="protocol" class="form_label">séance technique</label>
 | 
				
			||||||
 | 
					                    <select name="protocol" id="protocol">
 | 
				
			||||||
 | 
					                        <option value="email">email</option>
 | 
				
			||||||
 | 
					                    </select><br>
 | 
				
			||||||
 | 
					                    <div id="selected_protocol" class="form_group">
 | 
				
			||||||
 | 
					                        <label for="address_from" class="form_label">magician</label>
 | 
				
			||||||
 | 
					                        <input type="text" id="address_from" name="address_from" value="" /><br>
 | 
				
			||||||
 | 
					                        <label for="message" class="form_label">spell</label>
 | 
				
			||||||
 | 
					                        <textarea id="message" name="message" rows="20" cols="75" /><br>
 | 
				
			||||||
 | 
					                        <input type="submit" value="Submit" />
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </form> -->
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        // import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										87
									
								
								lib/sukaato_web/controllers/page_html/index.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								lib/sukaato_web/controllers/page_html/index.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,87 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <% # database queries may go here %>
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					                <!--
 | 
				
			||||||
 | 
					                <% # @TODO create the following routes or redirects %>
 | 
				
			||||||
 | 
					                <a href="moodboard">Moodboard</a>
 | 
				
			||||||
 | 
					                <a href="portfolio">Portfolio</a>
 | 
				
			||||||
 | 
					                <a href="watch"><%= @config["site"]["name"] %>TV</a>
 | 
				
			||||||
 | 
					                <a href="listen"><%= @config["site"]["name"] %>Wave</a>
 | 
				
			||||||
 | 
					                <a href="read"><%= @config["site"]["name"] %>Scrolls</a>
 | 
				
			||||||
 | 
					                <a href="hack">./<%= @config["site"]["name"] %>.src</a>
 | 
				
			||||||
 | 
					                -->
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO write a small explanation of site--take inspiration from neocities -->
 | 
				
			||||||
 | 
					                <article id="intro" class="exposition">
 | 
				
			||||||
 | 
					                    <span><% # <.greet /> %>
 | 
				
			||||||
 | 
					                    <.markdown_content page_query={@page_name} /></span>
 | 
				
			||||||
 | 
					                </article>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var notifs = new NotificationSounds();
 | 
				
			||||||
 | 
					        notifs.playSFX("loaded", 0.05, 5, [0.0, 0.01]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										82
									
								
								lib/sukaato_web/controllers/page_html/login.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								lib/sukaato_web/controllers/page_html/login.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <!-- <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio> -->
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel" class="panel">
 | 
				
			||||||
 | 
					            <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO write a small explanation of site--take inspiration from neocities -->
 | 
				
			||||||
 | 
					                <%= if @attempted do %>
 | 
				
			||||||
 | 
					                    <span><p>Either you forgot your clerical title, or the incantation was wrong.</p></span>
 | 
				
			||||||
 | 
					                <% end %>
 | 
				
			||||||
 | 
					                <form method="post" autocomplete="on">
 | 
				
			||||||
 | 
					                    <label id="username_label" for="username"><%= @form_fields.username %></label><br>
 | 
				
			||||||
 | 
					                    <input type="text" id="username" name="username"><br>
 | 
				
			||||||
 | 
					                    <label id="password_label" for="password"><%= @form_fields.password %></label><br>
 | 
				
			||||||
 | 
					                    <input type="password" id="password" name="password"><br>
 | 
				
			||||||
 | 
					                    <input type="hidden" name="_csrf_token" value={Phoenix.Controller.get_csrf_token()} />
 | 
				
			||||||
 | 
					                    <.submission btn_name={@button_choice} />
 | 
				
			||||||
 | 
					                </form>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        // import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										81
									
								
								lib/sukaato_web/controllers/page_html/logout.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								lib/sukaato_web/controllers/page_html/logout.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,81 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <!-- <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio> -->
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            <!-- <button id="monoregistration" type="button" class="registbutt">Register</button>
 | 
				
			||||||
 | 
					            <button id="monologin" type="button" class="loginbutt">Log in</button> -->
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					                <noscript>
 | 
				
			||||||
 | 
					                    <a href={~p"/login"}>Passage</a>
 | 
				
			||||||
 | 
					                </noscript>
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <span><p>You are already acting in your capacity as clergy. <br>Do you wish to return to laity?</p></span>
 | 
				
			||||||
 | 
					                <form method="post" autocomplete="on">
 | 
				
			||||||
 | 
					                    <input type="hidden" name="logout" value="true">
 | 
				
			||||||
 | 
					                    <input type="hidden" name="_csrf_token" value={Phoenix.Controller.get_csrf_token()} />
 | 
				
			||||||
 | 
					                    <.submission btn_name={@button_choice} />
 | 
				
			||||||
 | 
					                </form>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        // import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										91
									
								
								lib/sukaato_web/controllers/page_html/pubkey.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								lib/sukaato_web/controllers/page_html/pubkey.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,91 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <% # database queries may go here %>
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO write a small explanation of site--take inspiration from neocities -->
 | 
				
			||||||
 | 
					                <div id="gpg_link">
 | 
				
			||||||
 | 
					                <%= for q <- @qr do %>
 | 
				
			||||||
 | 
					                    <%= if elem(q, 0) != "" do %>
 | 
				
			||||||
 | 
					                        <a id="pubkey_link" class="cryptic" href={~p"/files/users/" <> @user <> "/gpg/" <> elem(q, 0) <> ".asc"}><h1><%= elem(q, 0) %></h1></a>
 | 
				
			||||||
 | 
					                    <% else %>
 | 
				
			||||||
 | 
					                        <h1>?</h1>
 | 
				
			||||||
 | 
					                    <% end %>
 | 
				
			||||||
 | 
					                    <%= if is_tuple(elem(q, 1)) do %>
 | 
				
			||||||
 | 
					                        <%= if elem(elem(q, 1), 0) == :ok do %>
 | 
				
			||||||
 | 
					                            <%= raw elem(elem(q, 1), 1) %>
 | 
				
			||||||
 | 
					                        <% end %>
 | 
				
			||||||
 | 
					                    <% end %>
 | 
				
			||||||
 | 
					                    <span><p id="pubkey_content" class="cryptic">
 | 
				
			||||||
 | 
					                        <% gpg_key = elem(q, 2) %>
 | 
				
			||||||
 | 
					                        -----BEGIN PGP PUBLIC KEY BLOCK-----<br>
 | 
				
			||||||
 | 
					                        <%= String.replace(gpg_key, "-----BEGIN PGP PUBLIC KEY BLOCK-----", "") |> String.replace("-----END PGP PUBLIC KEY BLOCK-----", "") %><br>
 | 
				
			||||||
 | 
					                        -----END PGP PUBLIC KEY BLOCK-----
 | 
				
			||||||
 | 
					                    </p></span>
 | 
				
			||||||
 | 
					                <% end %>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        // import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										86
									
								
								lib/sukaato_web/controllers/page_html/thinkers.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								lib/sukaato_web/controllers/page_html/thinkers.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio>
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <% # database queries may go here %>
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt" href={~p"/login"}>Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					                <!--
 | 
				
			||||||
 | 
					                <% # @TODO create the following routes or redirects %>
 | 
				
			||||||
 | 
					                <a href="moodboard">Moodboard</a>
 | 
				
			||||||
 | 
					                <a href="portfolio">Portfolio</a>
 | 
				
			||||||
 | 
					                <a href="watch"><%= @config["site"]["name"] %>TV</a>
 | 
				
			||||||
 | 
					                <a href="listen"><%= @config["site"]["name"] %>Wave</a>
 | 
				
			||||||
 | 
					                <a href="read"><%= @config["site"]["name"] %>Scrolls</a>
 | 
				
			||||||
 | 
					                <a href="hack">./<%= @config["site"]["name"] %>.src</a>
 | 
				
			||||||
 | 
					                -->
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO write a small explanation of site--take inspiration from neocities -->
 | 
				
			||||||
 | 
					                <article id="influences" class="exposition">
 | 
				
			||||||
 | 
					                    <span><.markdown_content page_query={@page_name} /></span>
 | 
				
			||||||
 | 
					                </article>
 | 
				
			||||||
 | 
					                <div id="thinker_gallery" class="tlist">
 | 
				
			||||||
 | 
					                    <.thinkify thinkers={@thinkers}/>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        /* import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>"; */
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										90
									
								
								lib/sukaato_web/controllers/page_html/twofact.html.heex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								lib/sukaato_web/controllers/page_html/twofact.html.heex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<% rel_proj_root = "../../../.." %>
 | 
				
			||||||
 | 
					<html lang={@config["site"]["lang"]}>
 | 
				
			||||||
 | 
					    <.html_head site_name={@config["site"]["name"]} site_author={@config["site"]["author"]} site_desc={@config["site"]["desc"]} />
 | 
				
			||||||
 | 
					    <script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
 | 
				
			||||||
 | 
					    <!-- <audio id="loaded" class="notifier" src={~p"/audio/page_load.mp3"}></audio> -->
 | 
				
			||||||
 | 
					    <body id="default_body">
 | 
				
			||||||
 | 
					        <noscript>
 | 
				
			||||||
 | 
					            <div id="noscript_panel" class="panel">
 | 
				
			||||||
 | 
					                <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					                <a id="monologin_noscript" class="loginbutt">Log in</a>
 | 
				
			||||||
 | 
					                <a id="monoregistration_noscript" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </noscript>
 | 
				
			||||||
 | 
					        <template id="panel">
 | 
				
			||||||
 | 
					            <!-- @TODO change below button button to anchor elements for ALL HEEx pages -->
 | 
				
			||||||
 | 
					            <a id="monologin" class="loginbutt">Log in</a>
 | 
				
			||||||
 | 
					            <a id="monoregistration" class="registbutt">Register</a>
 | 
				
			||||||
 | 
					        </template>
 | 
				
			||||||
 | 
					        <div id="banner">
 | 
				
			||||||
 | 
					            <% # @TODO verify the below works %>
 | 
				
			||||||
 | 
					            <%= raw File.read!(Path.expand("#{rel_proj_root}/priv/static/images/main.svg", __DIR__)) %>
 | 
				
			||||||
 | 
					            <span class="frontmatter"><a id="home" href={~p"/"}><h1 id="site_title" class="title"><%= @config["site"]["name"] %></h1></a></span>
 | 
				
			||||||
 | 
					            <nav id="site_nav">
 | 
				
			||||||
 | 
					                <.navify page_links={@pages} />
 | 
				
			||||||
 | 
					            </nav>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="doc">
 | 
				
			||||||
 | 
					            <main id="content" class="page_content">
 | 
				
			||||||
 | 
					                <!-- @TODO write a small explanation of site--take inspiration from neocities -->
 | 
				
			||||||
 | 
					                <%= if @attempted do %>
 | 
				
			||||||
 | 
					                    <span><p>No traces of daimonic possession detected via clairvoyance. Try again?</p></span>
 | 
				
			||||||
 | 
					                <% else %>
 | 
				
			||||||
 | 
					                    <span><p>By clairvoyance the cult shall detect if you've been properly daimonically possessed!</p></span>
 | 
				
			||||||
 | 
					                <% end %>
 | 
				
			||||||
 | 
					                <img />
 | 
				
			||||||
 | 
					                <form method="post" autocomplete="on">
 | 
				
			||||||
 | 
					                    <input type="hidden" name="_csrf_token" value={Phoenix.Controller.get_csrf_token()} />
 | 
				
			||||||
 | 
					                    <%= if @totp do %>
 | 
				
			||||||
 | 
					                        <label for="totp">Enter TOTP Code</label><br>
 | 
				
			||||||
 | 
					                        <input type="text" id="totp" name="code" maxlength="6"><br>
 | 
				
			||||||
 | 
					                    <% end %>
 | 
				
			||||||
 | 
					                    <%= if @fido do %>
 | 
				
			||||||
 | 
					                        <label for="fido"></label><br>
 | 
				
			||||||
 | 
					                        <input type="text" id="fido" name="chall_resp"><br>
 | 
				
			||||||
 | 
					                        <!-- <input type="hidden" name="chall" value=""> -->
 | 
				
			||||||
 | 
					                    <% end %>
 | 
				
			||||||
 | 
					                    <input type="submit" class="acct_manager" value="Verify">
 | 
				
			||||||
 | 
					                </form>
 | 
				
			||||||
 | 
					            </main>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div id="extra">
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <.html_foot />
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					    <script type="module">
 | 
				
			||||||
 | 
					        // import { NotificationSounds } from "<%= ~p"/js/notifiers.js" %>";
 | 
				
			||||||
 | 
					        import { Point, Line } from "<%= ~p"/js/space.js" %>";
 | 
				
			||||||
 | 
					        import { Hitbox, Tracker, spatialTriggerY } from "<%= ~p"/js/triggers.js" %>";
 | 
				
			||||||
 | 
					        import { reportPriority } from "<%= ~p"/js/err.js" %>";
 | 
				
			||||||
 | 
					        reportPriority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        let sandbox = new Hitbox(document.body)
 | 
				
			||||||
 | 
					        let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					        sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					        let ceiling = new Point(0, Math.round(sandbox.y), 0)
 | 
				
			||||||
 | 
					        let floor = new Point(0, Math.round(ceiling.y * (60 / sandbox.y)), 0)
 | 
				
			||||||
 | 
					        let constraint = new Line(ceiling, floor)
 | 
				
			||||||
 | 
					        window.addEventListener("resize", (e) => {
 | 
				
			||||||
 | 
					            let sandbox_prev_y = sandbox.y
 | 
				
			||||||
 | 
					            let sandbox_rect = sandbox.matter.getBoundingClientRect()
 | 
				
			||||||
 | 
					            sandbox.y = sandbox_rect.y
 | 
				
			||||||
 | 
					            ceiling.y = Math.round(sandbox.y)
 | 
				
			||||||
 | 
					            floor.y = Math.round((ceiling.y * (60 / sandbox_prev_y)) + ((ceiling.y * (60 / sandbox_prev_y)) * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            constraint.point1 = ceiling
 | 
				
			||||||
 | 
					            constraint.point2 = floor
 | 
				
			||||||
 | 
					            constraint.reset()
 | 
				
			||||||
 | 
					            console.log("Floor has changed to value %d", floor.y)
 | 
				
			||||||
 | 
					            console.log(Math.round(ceiling.y * (sandbox.y / sandbox_prev_y)))
 | 
				
			||||||
 | 
					            console.info("Logging \"top\" of %o on window resize as: %d", sandbox.matter, sandbox.y)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        sandbox.matter.addEventListener("mousemove", (e) => {
 | 
				
			||||||
 | 
					            let panel = document.getElementById("panel")
 | 
				
			||||||
 | 
					            let tracker = new Tracker(e, panel)
 | 
				
			||||||
 | 
					            tracker.y = tracker.event.clientY
 | 
				
			||||||
 | 
					            // let yFloor = Math.round(panel.getBoundingClientRect().height)
 | 
				
			||||||
 | 
					            spatialTriggerY(tracker, constraint, sandbox)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										9
									
								
								tasks.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								tasks.org
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					#+author: Alex Tavarez
 | 
				
			||||||
 | 
					#+email: ajt95@prole.biz
 | 
				
			||||||
 | 
					#+language: en
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* TODO [#A] Add view render file under `lib/sukaato_web/controllers` and template files under `lib/sukaato_web/controllers/*_html/` :feature:
 | 
				
			||||||
 | 
					** TODO [#A] Move ".php" extension pages and associated assets from original website project's `public` directory to `lib/sukaato_web/controllers/page_html`
 | 
				
			||||||
 | 
					** TODO [#A] Remove or substitute PHP in ".php" extension pages with HEEX variables
 | 
				
			||||||
 | 
					** TODO [#A] Change file extension of ".php" extension pages to ".html.heex"
 | 
				
			||||||
 | 
					** TODO [#A] Define HEEX variables in template files under `lib/sukaato_web/controllers/*_html/` wherever appropriate, starting directly in the related function in the view render file
 | 
				
			||||||
		Reference in New Issue
	
	Block a user