2 Commits

Author SHA1 Message Date
pharpend 57e7254f8d wip: updating version 2025-12-16 22:18:51 -08:00
pharpend e379a86020 remove references and links to broken features 2025-12-16 22:11:27 -08:00
32 changed files with 37 additions and 146 deletions
+7 -3
View File
@@ -3,7 +3,11 @@
{registered,[]},
{included_applications,[]},
{applications,[stdlib,kernel]},
{vsn,"0.1.0"},
{modules,[fd_client,fd_client_man,fd_client_sup,fd_clients,
fd_sup,fewd]},
{vsn,"0.2.0"},
{modules,[fd_cache,fd_httpd,fd_httpd_client,fd_httpd_client_man,
fd_httpd_client_sup,fd_httpd_clients,fd_httpd_sfc,
fd_httpd_sfc_cache,fd_httpd_sfc_entry,fd_httpd_utils,
fd_sup,fd_wsp,fewd,qhl,qhl_ws,wfc,wfc_bm,wfc_eval,
wfc_eval_context,wfc_ltr,wfc_pp,wfc_read,wfc_sentence,
wfc_sftt,wfc_ttfuns,wfc_utils,wfc_word,zj]},
{mod,{fewd,[]}}]}.
-106
View File
@@ -1,106 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Chat with Websockets</title>
<link rel="stylesheet" href="/css/default.css">
</head>
<body>
<div id="titlebar">
<div class="content">
<a href="/" class="tb-home">Home</a>
</div>
</div>
<div class="content">
<h1 class="content-title">Chat with websockets</h1>
<div class="content-body">
<input autofocus label="Nick" id="nick"></input>
<textarea hidden disabled id="wfc-output"></textarea>
<input hidden id="wfc-input"></input>
</div>
</div>
<script>
let nelt = document.getElementById('nick');
let ielt = document.getElementById('wfc-input');
let oelt = document.getElementById('wfc-output');
let ws = new WebSocket("/ws/chat");
let nick = '';
// when user hits any key while typing in nick
function on_nick(evt) {
if (evt.key === 'Enter') {
// don't do default thing
evt.preventDefault();
// grab contents
let contents = nelt.value;
let trimmed = contents.trim();
// if contents are nonempty
let nonempty_contents = trimmed.length > 0;
if (nonempty_contents) {
nick = trimmed;
let msg_obj = ['nick', nick];
let msg_str = JSON.stringify(msg_obj);
console.log('message to server:', contents.trim());
// query backend for result
ws.send(msg_str);
// delete element from dom
nelt.remove();
oelt.hidden = false;
ielt.hidden = false;
ielt.autofocus = true;
}
}
}
// when user hits any key while typing in ielt
function on_input_key(evt) {
if (evt.key === 'Enter') {
// don't do default thing
evt.preventDefault();
// grab contents
let contents = ielt.value;
let trimmed = contents.trim();
// if contents are nonempty
let nonempty_contents = trimmed.length > 0;
if (nonempty_contents) {
let msg_obj = ['chat', trimmed];
let msg_str = JSON.stringify(msg_obj);
console.log('message to server:', contents.trim());
// query backend for result
ws.send(msg_str);
// clear input
ielt.value = '';
// add to output
oelt.value += '> ';
oelt.value += trimmed;
oelt.value += '\n';
}
}
}
function main() {
nelt.addEventListener('keydown', on_nick);
ielt.addEventListener('keydown', on_input_key);
ws.onmessage =
function (msg_evt) {
console.log('message from server:', msg_evt);
let msg_str = msg_evt.data;
let msg_obj = JSON.parse(msg_str);
oelt.value += msg_obj.nick;
oelt.value += '> ';
oelt.value += msg_obj.msg;
oelt.value += '\n';
};
}
main();
</script>
</body>
</html>
-2
View File
@@ -16,9 +16,7 @@
<h1 class="content-title">FEWD: index</h1>
<ul>
<li><a href="/chat.html">Chatroom</a></li>
<li><a href="/echo.html">Echo</a></li>
<li><a href="/tetris.html">Tetris</a></li>
<li><a href="/wfc.html">WFC</a></li>
</ul>
</div>
-24
View File
@@ -1,24 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Tetris with Websockets</title>
<link rel="stylesheet" href="/css/default.css">
<link rel="stylesheet" href="/css/tetris.css">
</head>
<body>
<div id="titlebar">
<div class="content">
<a href="/" class="tb-home">Home</a>
</div>
</div>
<div class="content">
<h1 class="content-title">Tetris</h1>
<textarea id="tetris-state"></textarea>
</div>
<script type="module" src="./js/dist/tetris.js"></script>
</body>
</html>
+1
View File
@@ -1,5 +1,6 @@
% @doc storing map #{cookie := Context}
-module(fd_cache).
-vsn("0.2.0").
-behavior(gen_server).
+1 -1
View File
@@ -1,5 +1,5 @@
-module(fd_httpd).
-vsn("0.1.0").
-vsn("0.2.0").
-behaviour(supervisor).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1 -1
View File
@@ -14,7 +14,7 @@
%%% @end
-module(fd_httpd_client).
-vsn("0.1.0").
-vsn("0.2.0").
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
-license("BSD-2-Clause-FreeBSD").
+1 -1
View File
@@ -10,7 +10,7 @@
%%% @end
-module(fd_httpd_client_man).
-vsn("0.1.0").
-vsn("0.2.0").
-behavior(gen_server).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1 -1
View File
@@ -14,7 +14,7 @@
%%% @end
-module(fd_httpd_client_sup).
-vsn("0.1.0").
-vsn("0.2.0").
-behaviour(supervisor).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1 -1
View File
@@ -9,7 +9,7 @@
%%% @end
-module(fd_httpd_clients).
-vsn("0.1.0").
-vsn("0.2.0").
-behavior(supervisor).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1
View File
@@ -1,5 +1,6 @@
% @doc static file cache
-module(fd_httpd_sfc).
-vsn("0.2.0").
-behavior(gen_server).
+1
View File
@@ -1,6 +1,7 @@
% @doc
% cache data management
-module(fd_httpd_sfc_cache).
-vsn("0.2.0").
-export_type([
cache/0
+1
View File
@@ -2,6 +2,7 @@
%
% this spams the filesystem, so it's not "pure" code
-module(fd_httpd_sfc_entry).
-vsn("0.2.0").
-export_type([
encoding/0,
+2 -1
View File
@@ -1,5 +1,6 @@
% @doc http utility functions
-module(fd_httpd_utils).
-vsn("0.2.0").
-export([
new_cookie/0,
@@ -113,6 +114,6 @@ add_headers(Hs, Body) ->
default_headers(Body) ->
BodySize = byte_size(iolist_to_binary(Body)),
#{"Server" => "fewd 0.1.0",
#{"Server" => "fewd 0.2.0",
"Date" => qhl:ridiculous_web_date(),
"Content-Length" => io_lib:format("~p", [BodySize])}.
+1 -1
View File
@@ -12,7 +12,7 @@
%%% @end
-module(fd_sup).
-vsn("0.1.0").
-vsn("0.2.0").
-behaviour(supervisor).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1
View File
@@ -7,6 +7,7 @@
%
% for each websocket message it gets
-module(fd_wsp).
-vsn("0.2.0").
-behavior(gen_server).
+1 -1
View File
@@ -3,7 +3,7 @@
%%% @end
-module(fewd).
-vsn("0.1.0").
-vsn("0.2.0").
-behavior(application).
-author("Peter Harpending <peterharpending@qpq.swiss>").
-copyright("Peter Harpending <peterharpending@qpq.swiss>").
+1
View File
@@ -2,6 +2,7 @@
%
% ref: https://datatracker.ietf.org/doc/html/rfc6455
-module(qhl_ws).
-vsn("0.2.0").
-export_type([
opcode/0,
+1
View File
@@ -1,6 +1,7 @@
% @doc
% porcelain wfc ops
-module(wfc).
-vsn("0.2.0").
-export_type([
sentence/0
+1
View File
@@ -1,6 +1,7 @@
% @doc
% bit matrices
-module(wfc_bm).
-vsn("0.2.0").
-export_type([
bit/0,
+1
View File
@@ -1,4 +1,5 @@
-module(wfc_eval).
-vsn("0.2.0").
-export_type([
]).
+1
View File
@@ -1,4 +1,5 @@
-module(wfc_eval_context).
-vsn("0.2.0").
-export_type([
context/0
+1
View File
@@ -7,6 +7,7 @@
%
% mathematically, this is a variable like "a", "b", "c", etc
-module(wfc_ltr).
-vsn("0.2.0").
-export_type([
ltr/0
+1
View File
@@ -1,4 +1,5 @@
-module(wfc_pp).
-vsn("0.2.0").
-export([
eval_result/1,
+1
View File
@@ -1,4 +1,5 @@
-module(wfc_read).
-vsn("0.2.0").
-export_type([
]).
+1
View File
@@ -6,6 +6,7 @@
%
% empty sentence is 0
-module(wfc_sentence).
-vsn("0.2.0").
-export_type([
sentence/0
+1
View File
@@ -1,6 +1,7 @@
% @doc
% sentence-fun <-> truth table logic
-module(wfc_sftt).
-vsn("0.2.0").
-export_type([
sf/0, tt/0
+1
View File
@@ -1,6 +1,7 @@
% @doc
% library of truth tables
-module(wfc_ttfuns).
-vsn("0.2.0").
-export_type([
bit/0,
+1
View File
@@ -1,5 +1,6 @@
% @doc misc utility functions
-module(wfc_utils).
-vsn("0.2.0").
-export([err/2, str/2, emsg/2]).
+1
View File
@@ -13,6 +13,7 @@
%
% operations assume all inputs are valid
-module(wfc_word).
-vsn("0.2.0").
-export_type([
word/0
+1 -1
View File
@@ -5,7 +5,7 @@
%%% @end
-module(zj).
-vsn("1.1.2").
-vsn("0.2.0").
-author("Craig Everett <zxq9@zxq9.com>").
-copyright("Craig Everett <zxq9@zxq9.com>").
-license("MIT").
+2 -2
View File
@@ -1,10 +1,10 @@
{name,"front end web development lab"}.
{type,app}.
{modules,[]}.
{author,"Peter Harpending"}.
{prefix,"fd"}.
{desc,"Front End Web Dev in Erlang stuff"}.
{author,"Peter Harpending"}.
{package_id,{"otpr","fewd",{0,1,0}}}.
{package_id,{"otpr","fewd",{0,2,0}}}.
{deps,[]}.
{key_name,none}.
{a_email,"peterharpending@qpq.swiss"}.