diff options
| author | navewindre <boneyaard@gmail.com> | 2025-11-11 08:11:24 +0100 |
|---|---|---|
| committer | navewindre <boneyaard@gmail.com> | 2025-11-11 08:11:24 +0100 |
| commit | f5e29189f70c5c8532916504a1a22f8c586f6e73 (patch) | |
| tree | 9bf42144e608260527766e128268b380231ed95b | |
| parent | 6442494822d12c23cdd609031c4039d3309b64f6 (diff) | |
new web
410 files changed, 2751 insertions, 739 deletions
diff --git a/web/BlackWhiteResult.php b/web/BlackWhiteResult.php deleted file mode 100644 index f687ec6..0000000 --- a/web/BlackWhiteResult.php +++ /dev/null @@ -1,21 +0,0 @@ -<?php -/** - * The black / white or "ascii art" output processor. - * Transforms the input color values into ascii art characters. - * - * (c) 2016 Alex Schenkel - */ -namespace Img2Ascii; -require __DIR__ . '/result.php'; - -class BlackWhiteResult extends Result { - public $symbols = "@%#*+=-:. "; - - protected function gray2ascii($gray) { - $level = round($gray / 255.0 * (strlen($this->symbols)-1)); - return $this->symbols[(int)min($level,strlen($this->symbols)-1)]; - } - public function transformValue($value) { - return $this->gray2ascii($value); - } -} diff --git a/web/ColorResult.php b/web/ColorResult.php deleted file mode 100644 index 549bda0..0000000 --- a/web/ColorResult.php +++ /dev/null @@ -1,20 +0,0 @@ -<?php -/** - * Transforms an ascii result to a colored HTML representation. Each - * color value is represented by a single char, but HTML-styled to - * display the correct color. - * - * (c) 2016 Alex Schenkel - */ -namespace Img2Ascii; - -class ColorResult extends Result { - public $blockChar = '#'; // can also be an HTML entity, e.g. █ - - protected function transformValue($value) { - $r = floor($value[0]); - $g = floor($value[1]); - $b = floor($value[2]); - return "<span style='color:rgb({$r},{$g},{$b})'>{$this->blockChar}</span>"; - } -} diff --git a/web/Processor.php b/web/Processor.php deleted file mode 100644 index b1bf0bf..0000000 --- a/web/Processor.php +++ /dev/null @@ -1,103 +0,0 @@ -<?php -/** - * The Processor class processes an image and prepares - * the color values needed for the ascii output. - * - * Its main job is to process each pixel, do color calculations and - * store an internal color array for later ascii output, which then is done - * by its helper Result classes. - * - * (c) 2016 Alex Schenkel - */ -namespace Img2Ascii; - -class Processor { - protected $imgPath; - protected $image; - protected $imageWidth; - protected $imageHeight; - - protected $result; - - public function __construct($pathOrImgres) { - if (is_file($pathOrImgres)) { - $this->imgPath = $pathOrImgres; - $this->image = imagecreatefromstring(file_get_contents($pathOrImgres)); - } else { - $this->image = $pathOrImgres; - } - try { - $this->imageWidth = imagesx($this->image); - $this->imageHeight = imagesy($this->image); - } catch (\Exception $e) { - throw new \Exception("Image creation failed. Is the given resource a valid image?"); - } - } - - public function asciify($pixelWidth = 10) { - $charsX = floor($this->imageWidth / $pixelWidth); - return $this->asciifyToWidth($charsX); - } - - public function asciifyToWidth($charsX) { - $charsX = (int)$charsX; - if (!$charsX) $charsX = floor($this->imageWidth / 10); - $this->result = null; - - $blockWidth = $this->imageWidth / (float)$charsX; - $blockHeight = $blockWidth * 8.0/5.0; - $blockWidth = max(1,floor($blockWidth)); - $blockHeight = max(1,floor($blockHeight)); - - $ascii = array(); - - for ($y = 0; $y < $this->imageHeight; $y += $blockHeight) { - for ($x = 0; $x < $this->imageWidth; $x += $blockWidth) { - $value = [0,0,0]; - if ($x === 0) { - $ascii[$y / $blockHeight] = array(); - } - $counter = 0; - for ($innerY = $y; $innerY < $y + $blockHeight; $innerY++) { - if ($innerY > $this->imageHeight-1) break; - for ($innerX = $x; $innerX < $x + $blockWidth; $innerX++) { - if ($innerX > $this->imageWidth-1) break; - $counter++; - $rgb = imagecolorat($this->image,$innerX, $innerY); - $rgb = array($rgb >> 16, $rgb >> 8 & 255, $rgb & 255); - $value[0] += $rgb[0]; - $value[1] += $rgb[1]; - $value[2] += $rgb[2]; - } - } - $value[0] = $value[0] / $counter; - $value[1] = $value[1] / $counter; - $value[2] = $value[2] / $counter; - $ascii[$y / $blockHeight][$x / $blockWidth] = $value; - } - } - $this->result = $ascii; - return $this; - } - - protected function saturate($ascii) { - foreach($ascii as $y =>$line) { - foreach($line as $x => $value) { - $ascii[$y][$x] = $value[0]*1 + $value[1]*1 + $value[2]*1; - } - } - return $ascii; - } - - public function colorResult($blockChar = '#') { - $res = new ColorResult($this->result); - $res->blockChar = $blockChar; - return $res; - } - - public function result($symbols = "@%#*+=-:. ") { - $res = new BlackWhiteResult($this->saturate($this->result)); - $res->symbols = $symbols; - return $res; - } -} diff --git a/web/Result.php b/web/Result.php deleted file mode 100644 index 52e4c83..0000000 --- a/web/Result.php +++ /dev/null @@ -1,31 +0,0 @@ -<?php -/** - * The basic Result class for the Img2Ascii processor. - * - * It defines common output functions for the implementing output - * transformers. - * - * (c) 2016 Alex Schenkel - */ -namespace Img2Ascii; - -class Result { - public $ascii; - public function __construct(&$ascii) { - $this->ascii =& $ascii; - } - - public function writeFile($path, $lineEnding = "\n") { - $fh = fopen($path,'w'); - foreach($this->ascii as $line) { - foreach($line as $value) { - $value = $this->transformValue($value); - fputs($fh, $value); - } - fputs($fh,$lineEnding); - - } - fclose($fh); - return $this; - } -} diff --git a/web/icons/css.png b/web/icons/css.png Binary files differdeleted file mode 100644 index 90ccc4f..0000000 --- a/web/icons/css.png +++ /dev/null diff --git a/web/imgs/good1.jpg b/web/imgs/good1.jpg Binary files differdeleted file mode 100644 index 6a1e742..0000000 --- a/web/imgs/good1.jpg +++ /dev/null diff --git a/web/imgs/good2.jpg b/web/imgs/good2.jpg Binary files differdeleted file mode 100644 index 32347a4..0000000 --- a/web/imgs/good2.jpg +++ /dev/null diff --git a/web/imgs/good3.png b/web/imgs/good3.png Binary files differdeleted file mode 100644 index c6679a4..0000000 --- a/web/imgs/good3.png +++ /dev/null diff --git a/web/imgs/good4.jpg b/web/imgs/good4.jpg Binary files differdeleted file mode 100644 index c8b5fd9..0000000 --- a/web/imgs/good4.jpg +++ /dev/null diff --git a/web/imgs/good5.png b/web/imgs/good5.png Binary files differdeleted file mode 100644 index 2f9f7e8..0000000 --- a/web/imgs/good5.png +++ /dev/null diff --git a/web/imgs/good6.jpg b/web/imgs/good6.jpg Binary files differdeleted file mode 100644 index 68c6d45..0000000 --- a/web/imgs/good6.jpg +++ /dev/null diff --git a/web/imgs/good7.jpg b/web/imgs/good7.jpg Binary files differdeleted file mode 100644 index 01bcd28..0000000 --- a/web/imgs/good7.jpg +++ /dev/null diff --git a/web/imgs/good8.jpg b/web/imgs/good8.jpg Binary files differdeleted file mode 100644 index 5ae221c..0000000 --- a/web/imgs/good8.jpg +++ /dev/null diff --git a/web/index.php b/web/index.php deleted file mode 100644 index 5de9665..0000000 --- a/web/index.php +++ /dev/null @@ -1,180 +0,0 @@ -<?php header('Content-type: text/html; charset=utf-8');?> -<?php -/* -ini_set('display_errors', '1'); -ini_set('display_startup_errors', '1'); -error_reporting(E_ALL); -*/ - -require __DIR__ . '/minecraft.php'; -require __DIR__ . '/blackwhiteresult.php'; -require __DIR__ . '/colorresult.php'; -require __DIR__ . '/processor.php'; -function query_source_server($ip = null, $port = null) { - // https://stackoverflow.com/questions/33454035/counter-strike-go-server-query - - $socket = socket_create(AF_INET, SOCK_DGRAM, 0); - $result = socket_connect($socket, $ip, $port); - - if($result < 0){ - $server['name'] = "UNKNOWN"; - $server['map'] = "Could not connect"; - $server['game'] = "UNKNOWN"; - $server['description'] = "Could not connect"; - $server['players'] = 0; - $server['playersmax'] = 0; - $server['bots'] = 0; - $server['dedicated'] = "x"; - $server['os'] = "x"; - $server['password'] = "x"; - $server['vac'] = "Could not connect"; - $server['ip'] = "X.X.X.X"; - $server['port'] = "00000"; - - return $server; - } - - // FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79 00 - $data = "\xFF\xFF\xFF\xFF\x54\x53\x6F\x75\x72\x63\x65\x20\x45\x6E\x67\x69\x6E\x65\x20\x51\x75\x65\x72\x79\x00"; - socket_write($socket, $data, strlen($data)); - - $out = socket_read($socket, 4096); - - $queryData = explode("\x00", substr($out, 6), 5); - - $server['name'] = $queryData[0]; - $server['map'] = $queryData[1]; - $server['game'] = $queryData[2]; - $server['description'] = $queryData[3]; - $packet = $queryData[4]; - $app_id = (unpack("S", substr($packet, 0, 2))); - $app_id = array_pop($app_id); - $server['players'] = ord(substr($packet, 2, 1)); - $server['playersmax'] = ord(substr($packet, 3, 1)); - $server['bots'] = ord(substr($packet, 4, 1)); - $server['dedicated'] = substr($packet, 5, 1); - $server['os'] = substr($packet, 6, 1); - $server['password'] = ord(substr($packet, 7, 1)); - $server['vac'] = ord(substr($packet, 8, 1)); - $server['ip'] = $ip; - $server['port'] = $port; - - if ($server['bots'] > 0){ - $server['players'] = ($server['players'] - $server['bots']); - } - - return $server; -} -function query_minecraft_server($ip = null, $port = null) { - $server['result_valid'] = false; - try { - $mq = new MinecraftQuery(); - $mq->Connect($ip, intval($port), 3, true); - $players = $mq->GetPlayers(); - if ($players == false) $server['players'] = 0; - else $server['players'] = count($players); - $info = $mq->GetInfo(); - if ($info == false) return $server; - $server['version'] = $info['Version']; - $server['software'] = $info['Software']; - $server['ip'] = "{$ip}"; - $server['port'] = "{$port}"; - $server['playersmax'] = $info['MaxPlayers']; - $server['result_valid'] = true; - } catch (MinecraftQueryException $e) { } - - - return $server; -} - -function generate_status_div($server = null, $demos = true) { - echo "<div class=\"statusbox\">\n"; - echo "<H4>" . $server['name'] . "</H4>\n"; - echo "<H4>" . $server['ip'] . ":" . $server['port'] . "</H4>\n"; - echo $server['description'] . "\n\n"; - echo $server['map'] . "\n"; - echo "Players: " . $server['players'] . "/" . ($server['playersmax'] - 1) . "\n"; - echo "Bots: " . $server['bots'] . "\n\n"; - if( $demos == true ) - echo "<a href=\"steam://connect/" . $server['ip'] . ":" . $server['port']."\">CONNECT</a> <a href='/demos_css/'>DEMOS</a>"; - else - echo "<a href=\"steam://connect/" . $server['ip'] . ":" . $server['port']."\">CONNECT</a>"; - - echo "<hr>"; - echo "</div>\n"; -} - -function generate_mc_status_div($server = null) { - - echo "<div class=\"statusbox\">\n"; - echo "<H4>~~~ networkheaven.net ~~~</H4>\n"; - echo "<H4>" . $server['ip'] . ":" . $server['port'] . "</H4>\n"; - echo "minecraft\n\n"; - echo "Players: " . $server['players'] . "/" . ($server['playersmax']) . "\n"; - echo "Version: " . $server['version'] . "\n"; - echo "Software: " . $server['software'] . "\n\n"; - echo "<hr>"; - echo "</div>\n"; -} - -function gen_ascii() { - $dirp = './imgs/'; - $imgs = scandir($dirp); - $imgn = count($imgs); - $path = $dirp . '' . $imgs[rand(2, $imgn - 1)]; - $processor = new Img2Ascii\Processor($path); - $res = $processor->asciifyToWidth(45)->result(" .:-=+*#%@"); - foreach($res->ascii as $line) { - foreach($line as $value) { - $value = $res->transformValue($value); - echo ($value); - } - - echo '<br>'; - } -} - -?> - -<?php - echo file_get_contents("static_elements/h.html"); -?> - -<div style="margin: 0 auto; width: 820px; height: 880px; border: 1px solid #000000; background-color: #808080;"> - <h1 style="height:48px"> - NETWORKHEAVEN.NET - </h1> - <hr style="margin: 0"/> - - <div style="float: left; width: 200px; height: 785px; border-right: 1px solid #5B5B66; background-color: #808080; margin: 0 auto; padding: 0"> - <?php - $serverdata = query_source_server("45.33.90.90", "27015"); - if( $serverdata['playersmax'] > 0 ) - generate_status_div($serverdata); - $serverdata = query_source_server("107.192.200.138", "27015"); - if( $serverdata['playersmax'] > 0 ) - generate_status_div($serverdata, false); - $serverdata = query_source_server("107.192.200.138", "27016"); - if( $serverdata['playersmax'] > 0 ) - generate_status_div($serverdata, false); - $serverdata = query_minecraft_server("45.33.90.90", "25565"); - if( $serverdata['playersmax'] > 0 ) - generate_mc_status_div($serverdata); - ?> - </div> - <div style="float: left; width: 570px; background-color: #808080; padding-left: 30px; margin-top: 20px;"> - <h3>we want to provide an oldschool hassle-free gaming experience</h3> - <h3>our servers run minimal plugins developed by our own team, aiming only to smooth out vanilla gameplay</h3> - <pre style="display:block; text-align: center"> - <?php - gen_ascii(); - ?></pre> - <h3>we hope you enjoy your stay and have fun!</h3><br> - <h3><a href="https://steamcommunity.com/groups/networkheaven">STEAM</a><h3> - </div> -</div> - - -<?php - echo file_get_contents("static_elements/f.html"); -?> diff --git a/web/minecraft.php b/web/minecraft.php deleted file mode 100644 index 4f9dbc7..0000000 --- a/web/minecraft.php +++ /dev/null @@ -1,300 +0,0 @@ -<?php - -class MinecraftQuery -{ - /* - * Class written by xPaw - * - * Website: http://xpaw.me - * GitHub: https://github.com/xPaw/PHP-Minecraft-Query - */ - - const STATISTIC = 0x00; - const HANDSHAKE = 0x09; - - private $Socket; - private $Players; - private $Info; - - public function Connect( $Ip, $Port = 25565, $Timeout = 3, $ResolveSRV = true ) - { - if( !is_int( $Timeout ) || $Timeout < 0 ) - { - throw new \InvalidArgumentException( 'Timeout must be an integer.' ); - } - - if( $ResolveSRV ) - { - $this->ResolveSRV( $Ip, $Port ); - } - - $this->Socket = @\fsockopen( 'udp://' . $Ip, (int)$Port, $ErrNo, $ErrStr, (float)$Timeout ); - - if( $ErrNo || $this->Socket === false ) - { - throw new MinecraftQueryException( 'Could not create socket: ' . $ErrStr ); - } - - \stream_set_timeout( $this->Socket, $Timeout ); - \stream_set_blocking( $this->Socket, true ); - - try - { - $Challenge = $this->GetChallenge( ); - - $this->GetStatus( $Challenge ); - } - finally - { - \fclose( $this->Socket ); - } - } - - public function ConnectBedrock( $Ip, $Port = 19132, $Timeout = 3, $ResolveSRV = true ) - { - if( !is_int( $Timeout ) || $Timeout < 0 ) - { - throw new \InvalidArgumentException( 'Timeout must be an integer.' ); - } - - if( $ResolveSRV ) - { - $this->ResolveSRV( $Ip, $Port ); - } - - $this->Socket = @\fsockopen( 'udp://' . $Ip, (int)$Port, $ErrNo, $ErrStr, (float)$Timeout ); - - if( $ErrNo || $this->Socket === false ) - { - throw new MinecraftQueryException( 'Could not create socket: ' . $ErrStr ); - } - - \stream_set_timeout( $this->Socket, $Timeout ); - \stream_set_blocking( $this->Socket, true ); - - try - { - $this->GetBedrockStatus(); - } - finally - { - \fclose( $this->Socket ); - } - } - - public function GetInfo( ) - { - return isset( $this->Info ) ? $this->Info : false; - } - - public function GetPlayers( ) - { - return isset( $this->Players ) ? $this->Players : false; - } - - private function GetChallenge( ) - { - $Data = $this->WriteData( self :: HANDSHAKE ); - - if( $Data === false ) - { - throw new MinecraftQueryException( 'Failed to receive challenge.' ); - } - - return \pack( 'N', $Data ); - } - - private function GetStatus( $Challenge ) - { - $Data = $this->WriteData( self :: STATISTIC, $Challenge . \pack( 'c*', 0x00, 0x00, 0x00, 0x00 ) ); - - if( !$Data ) - { - throw new MinecraftQueryException( 'Failed to receive status.' ); - } - - $Last = ''; - $Info = Array( ); - - $Data = \substr( $Data, 11 ); // splitnum + 2 int - $Data = \explode( "\x00\x00\x01player_\x00\x00", $Data ); - - if( \count( $Data ) !== 2 ) - { - throw new MinecraftQueryException( 'Failed to parse server\'s response.' ); - } - - $Players = \substr( $Data[ 1 ], 0, -2 ); - $Data = \explode( "\x00", $Data[ 0 ] ); - - // Array with known keys in order to validate the result - // It can happen that server sends custom strings containing bad things (who can know!) - $Keys = Array( - 'hostname' => 'HostName', - 'gametype' => 'GameType', - 'version' => 'Version', - 'plugins' => 'Plugins', - 'map' => 'Map', - 'numplayers' => 'Players', - 'maxplayers' => 'MaxPlayers', - 'hostport' => 'HostPort', - 'hostip' => 'HostIp', - 'game_id' => 'GameName' - ); - - foreach( $Data as $Key => $Value ) - { - if( ~$Key & 1 ) - { - if( !isset( $Keys[ $Value ] ) ) - { - $Last = false; - continue; - } - - $Last = $Keys[ $Value ]; - $Info[ $Last ] = ''; - } - else if( $Last != false ) - { - $Info[ $Last ] = mb_convert_encoding( $Value, 'UTF-8' ); - } - } - - // Ints - $Info[ 'Players' ] = (int)$Info[ 'Players' ]; - $Info[ 'MaxPlayers' ] = (int)$Info[ 'MaxPlayers' ]; - $Info[ 'HostPort' ] = (int)$Info[ 'HostPort' ]; - - // Parse "plugins", if any - if( $Info[ 'Plugins' ] ) - { - $Data = \explode( ": ", $Info[ 'Plugins' ], 2 ); - - $Info[ 'RawPlugins' ] = $Info[ 'Plugins' ]; - $Info[ 'Software' ] = $Data[ 0 ]; - - if( \count( $Data ) == 2 ) - { - $Info[ 'Plugins' ] = \explode( "; ", $Data[ 1 ] ); - } - } - else - { - $Info[ 'Software' ] = 'Vanilla'; - } - - $this->Info = $Info; - - if( empty( $Players ) ) - { - $this->Players = null; - } - else - { - $this->Players = \explode( "\x00", $Players ); - } - } - - private function GetBedrockStatus( ) - { - // hardcoded magic https://github.com/facebookarchive/RakNet/blob/1a169895a900c9fc4841c556e16514182b75faf8/Source/RakPeer.cpp#L135 - $OFFLINE_MESSAGE_DATA_ID = \pack( 'c*', 0x00, 0xFF, 0xFF, 0x00, 0xFE, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD, 0xFD, 0xFD, 0x12, 0x34, 0x56, 0x78 ); - - $Command = \pack( 'cQ', 0x01, time() ); // DefaultMessageIDTypes::ID_UNCONNECTED_PING + 64bit current time - $Command .= $OFFLINE_MESSAGE_DATA_ID; - $Command .= \pack( 'Q', 2 ); // 64bit guid - $Length = \strlen( $Command ); - - if( $Length !== \fwrite( $this->Socket, $Command, $Length ) ) - { - throw new MinecraftQueryException( "Failed to write on socket." ); - } - - $Data = \fread( $this->Socket, 4096 ); - - if( empty( $Data ) ) - { - throw new MinecraftQueryException( "Failed to read from socket." ); - } - - if( $Data[ 0 ] !== "\x1C" ) // DefaultMessageIDTypes::ID_UNCONNECTED_PONG - { - throw new MinecraftQueryException( "First byte is not ID_UNCONNECTED_PONG." ); - } - - if( \substr( $Data, 17, 16 ) !== $OFFLINE_MESSAGE_DATA_ID ) - { - throw new MinecraftQueryException( "Magic bytes do not match." ); - } - - // TODO: What are the 2 bytes after the magic? - $Data = \substr( $Data, 35 ); - - // TODO: If server-name contains a ';' it is not escaped, and will break this parsing - $Data = \explode( ';', $Data ); - - $this->Info = - [ - 'GameName' => $Data[ 0 ] ?? null, - 'HostName' => $Data[ 1 ] ?? null, - 'Protocol' => $Data[ 2 ] ?? null, - 'Version' => $Data[ 3 ] ?? null, - 'Players' => isset( $Data[ 4 ] ) ? (int)$Data[ 4 ] : 0, - 'MaxPlayers' => isset( $Data[ 5 ] ) ? (int)$Data[ 5 ] : 0, - 'ServerId' => $Data[ 6 ] ?? null, - 'Map' => $Data[ 7 ] ?? null, - 'GameMode' => $Data[ 8 ] ?? null, - 'NintendoLimited' => $Data[ 9 ] ?? null, - 'IPv4Port' => isset( $Data[ 10 ] ) ? (int)$Data[ 10 ] : 0, - 'IPv6Port' => isset( $Data[ 11 ] ) ? (int)$Data[ 11 ] : 0, - 'Extra' => $Data[ 12 ] ?? null, // What is this? - ]; - $this->Players = null; - } - - private function WriteData( $Command, $Append = "" ) - { - $Command = \pack( 'c*', 0xFE, 0xFD, $Command, 0x01, 0x02, 0x03, 0x04 ) . $Append; - $Length = \strlen( $Command ); - - if( $Length !== \fwrite( $this->Socket, $Command, $Length ) ) - { - throw new MinecraftQueryException( "Failed to write on socket." ); - } - - $Data = \fread( $this->Socket, 4096 ); - - if( $Data === false ) - { - throw new MinecraftQueryException( "Failed to read from socket." ); - } - - if( \strlen( $Data ) < 5 || $Data[ 0 ] != $Command[ 2 ] ) - { - return false; - } - - return \substr( $Data, 5 ); - } - - private function ResolveSRV( &$Address, &$Port ) - { - if( \ip2long( $Address ) !== false ) - { - return; - } - - $Record = @\dns_get_record( '_minecraft._tcp.' . $Address, DNS_SRV ); - - if( empty( $Record ) ) - { - return; - } - - if( isset( $Record[ 0 ][ 'target' ] ) ) - { - $Address = $Record[ 0 ][ 'target' ]; - } - } -} diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..4418f02 --- /dev/null +++ b/web/package.json @@ -0,0 +1,32 @@ +{ + "type": "module", + "name": "jqueryjsx", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "build": "webpack --config webpack-prod.config.cjs", + "start": "webpack serve --open --config webpack-dev.config.cjs" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "@types/jquery": "^3.5.32", + "@types/react": "^18.3.12", + "copy-webpack-plugin": "^12.0.2", + "css-loader": "^7.1.2", + "highlight.js": "^11.11.1", + "html-webpack-plugin": "^5.6.3", + "jquery": "^4.0.0-beta.2", + "jsx-runtime": "^1.2.0", + "nakedjsx": "^0.17.2", + "style-loader": "^4.0.0", + "typescript": "^5.6.3" + }, + "devDependencies": { + "ts-loader": "^9.5.1", + "webpack": "^5.95.0", + "webpack-cli": "^5.1.4", + "webpack-dev-server": "^5.1.0" + } +} diff --git a/web/src/api.tsx b/web/src/api.tsx new file mode 100644 index 0000000..7233d89 --- /dev/null +++ b/web/src/api.tsx @@ -0,0 +1,39 @@ +export const url = "https://networkheaven.net"; + +export interface ReqParams { + method: string, + body?: string, +} + +export async function post( endpoint: string, body: Object ) { + return await req( endpoint, { + method: "POST", + body: JSON.stringify( body ), + } ); +} + +export async function req( endpoint: string, params: ReqParams ) { + const res = await fetch( `${url}/${endpoint}`, { + method: params.method, + headers: { + "Content-Type": "application/json", + }, + body: params.body, + } ); + + if( !res.ok ) { + let json = null; + try { + json = await res.json(); + } catch( e: any ) { + throw new Error( "error contacting server" ); + } + + throw new Error( json.msg ); + } + + const json = await res.json(); + if( json.status != 'ok' ) + throw new Error( json.msg ); + return json; +} diff --git a/web/src/ascii-art.tsx b/web/src/ascii-art.tsx new file mode 100644 index 0000000..a6caefe --- /dev/null +++ b/web/src/ascii-art.tsx @@ -0,0 +1,148 @@ +import * as JSX from "./jsx"; +import $ from "jquery"; + +export function AsciiArt() { + const ret = <div id="ascii-art"> + { asciiArtStr } + </div>; + + setTimeout( doAsciiArt ); + return ret; +} + +let startTime = 0.0; +let anim = 0.0; + +function animFunc( a: number ) { + let ringRadius = anim; + let radius = a; + + let dist = ringRadius - radius; + + dist = Math.abs( dist ); + + let ret = Math.pow( dist, 0.1 + 0.8 * Math.pow( (anim + 0.5) / 2, 1.6 ) ); + let remain = ret % 0.12; + return ret - remain; +} + +function hexToRgb( hex: string ) { + let r = parseInt( hex.slice( 1, 3 ), 16 ); + let g = parseInt( hex.slice( 3, 5 ), 16 ); + let b = parseInt( hex.slice( 5, 7 ), 16 ); + return [ r, g, b ]; +} + +function lerpColor( c1: number[], c2: number[], t: number ) { + let r1 = c1[0], g1 = c1[1], b1 = c1[2], a1 = c1[3]; + let r2 = c2[0], g2 = c2[1], b2 = c2[2], a2 = c2[3]; + let r = r1 + ( r2 - r1 ) * t; + let g = g1 + ( g2 - g1 ) * t; + let b = b1 + ( b2 - b1 ) * t; + let a = a1 + ( a2 - a1 ) * t; + return [ Math.round( r ), Math.round( g ), Math.round( b ), Math.round( a ) ]; +} + +function getDist( x: number, y: number ) { + const x1 = 0.75 - x / 71; + const y1 = 0.75 - y / 35; + return Math.sqrt( x1 * x1 + y1 * y1 ); +} + +let topY = 0; + +let isDoingAnim = false; +function doAsciiArt() { + let div = $( "#ascii-art" ); + if( !div.length ) { isDoingAnim = false; return; } + isDoingAnim = true; + + let deltaTime = ( Date.now() - startTime ) * 0.001; + startTime = Date.now(); + anim += .5 * deltaTime; + + if( anim > 2 ) + anim = -0.5; + + let rootColor = [ 255, 0, 255 ]; + let innerStr = ""; + for( let i = 0; i < asciiArtStr.length; ++i ) { + let x = i % 71; + let y = Math.floor( i / 71 ); + if( y > topY ) + topY = y; + + + if( asciiArtStr[i] == ',' || asciiArtStr[i] == '\t' ) { + innerStr += asciiArtStr[i]; + continue; + } + if( asciiArtStr[i] == ' ' ) { + innerStr += ' '; + continue; + } + + let dist = getDist( x, y ); + + let color = []; + if( asciiArtStr[i] == '#' ) { + let a = animFunc( dist * 2 ); + color = lerpColor( rootColor, [255, 255, 255, 1], a ); + color[3] = Math.max( Math.min( 1, Math.pow( dist, 2 ) + (1.0 - a) ), 0.8 ); + } + else { + const t = Math.max( 0.05, 1.0 - animFunc( (dist) * 0.75 ) ); + if( t < 0.25 ) { + color = lerpColor( [255, 255, 255, 255], [255, 189, 255, 255], (t - 0.5) * 2 ); + } + else if( t > 0.5 && t < 0.75 ) { + color = lerpColor( [255, 189, 255, 255], [0, 255, 255, 255], (t - 0.5) * 2 ); + } else { + color = lerpColor( [255, 255, 255, 255], [0, 255, 255, 255], (t - 0.5) * 2 ); + } + } + // appending string is faster than jsx + innerStr += `<span style='color: rgba(${color[0]}, ${color[1]}, ${color[2]}, ${color[3]})'>${asciiArtStr[i]}</span>`; + } + + div.html( innerStr ); + setTimeout( doAsciiArt, 85 ); +} + +const asciiArtStr = ` +⣿⣿⣿⣿⣿⣿⣿⣿⣶⣤ā£ā”ā ⢿┿ā£ā ā¢ā”ā ¤ā”ā ⢰ā ā”ā ā ā ā ā ā ā”ā”ā ā¢ā ā ⢠ā”ā ā”ā ā ā ā ā ā ā ā ”ā£ā ā¢ā øā ā øā£ā”ā ┽ā”ā”ā ā ā ā ā ¦ā ā ā ā ø +⣿⣿⣿⣿⣿⣿┿ā ā ⢻ā”ā£ā£·ā”æā¢ā ¤ā¢ā ¢ā¢ā °ā”ā ā”ā ā”ā ā ā ā£ā ¤ā ⣰ā ā”ā¢ā └⣺ā ā”ā °ā ā”ā¢ā °ā¢ā °ā¢ā ⢽ā ⢼ā ā” ā ⣿┼ā”⠱⢹┰ā ā ā ā ā ā£ā ā ā +⣿⣿⣿⣿⣿⣿ā ā¢ā ā¢ā£¹ā£ā”æā¢ā¢ā °ā¢ā ā”ā¢ā ⢳ā ā “ā ā ⣠ā ā” ā¢ā£ŗā”ā ¤ā¢ā ¢ā ⢠┿⢰ā”ā ā¢ā”ā¢ā °ā¢ā °ā¢øā ⣸ā ⢺ā”ā ¤ā¢ā£½ā£§ā¢©ā”ā¢ā¢§ā ”ā ā”ā ⠤⣸ā”ā ā +⣿⣿⣿⣿⣿⣿⠩ā”ā ⢿┯⣿ā ā”⠢⢔ā ā”ā ā ā ⢾ā¢ā ā ┓ā¢ā”¾ā ⣸⢻ā¢ā ⢠ā ā”⢼ā”⢸ā”ā ā ā”ā¢ā °ā¢ā °ā øā”⢼ā¢ā¢¹ā ⠰⢸⢿⠸ā”⢷ā¢ā øā£ā ā ¤ā¢ā”⠨⣧ā ā” +⣿⣿⣿⣿⣿⣿ā”⣿⣻⢾┷⣿ā ā”ā¢ā ā ā ā ā ā ⣾⠸ā ā¢ā”⣼ā ⢔ā”ā£ā ¢ā ā”ā ⢔ā”ā”⢺ā£ā ⢠ā ā Øā”ā¢ā ¢ā¢”ā”ā ¾ā¢ā¢øā”ā”⢼⢸ā ⢻ā ā£ā ⣷ā¢ā”ā ⠤⢱⢿ā ā +⣿⣿⣿⣿⣿⣿⣯ā”⢧┻⣽ā”ā °ā”ā¢ā ā ā”ā ā ā ⣿⢸ā¢ā¢ā¢øā”ā”⢼⢳ā ā¢ā”ā ā”⢺⢱ā”⣼⢿ā ā ā”ā ”ā¢ā ā¢ā¢ŗā”ā”ā”⢺ā¢ā”“┿⢸ā¢ā ā”⢺ā”⢸ā”ā ¤ā¢ā °ā¢ā£øā ā +⣿⣿⣿⣿⣿⣿⣿⣷ā ⢿⣹ā”ā ”ā ā ā ā ā ā ā ā¢ā”æā£øā ā¢ā£æā¢ā ā”┼ā¢ā£ā£ā£¤ā”“┯⢼⠓┿⢼⠾⠶⠶⠶⣤ā ā ⣹⢰ā”ā”ā”⢸⢔ā”┽ā”ā ⢳ā ⣷ā ⢿ā”ā ā”ā ┽ā¢ā” +⣿⣿⣿⣿⣿⣿⣿ā”ā ā£ā£æā ā ā ā ā ā ā”
ā ā ⢠ā”⣧ā ⣰⣿ā ⣼⠓ā”ā¢ā ā”⢠⢷ā ⢸⢠ā ⢸⣿ā ā¢ā ⢸ā ā¢ā”⣼ā ⣸ā ā”ā”ā”┧⠬⣓⣼ā£ā¢æā¢ā¢øā£¹ā ā ā”ā ā”ā +⣿⣿⣿⣿⣿⣿⣿ā£ā”·ā ⢸ā ā ā ⢠⣦ā£ā ā”ā¢ā ⣿⣧ā ⣽ā”ā ⣾⢰ā”ā¢ā ”ā¢ā”ā”ā ┼⣸ā ā ⣿ā ā ā ā£ā ⢸⢔ā”ā¢ā”⣼⢱ā ⣧ā ā ā ā ā”⣻⠺⣤⣿ā”ā ā ā”ā ā” +⣿⣿⣿⣿⣿⣿⣿⣿ā£ā ⣿ā ā ⢠ā ⢿⣣ā ā ā ā ⣿⣿ā ⢿ā ā¢ā£æā øā”ā¢ā¢ā”¼ā”¼ā ā¢ā¢§ā”Æā ā”⣿ā ā ⢰ā”ā ⣼┿ā ā”⣸ā¢ā ⢰ā”ā ā ā ā ā”ā”ā ā¢ā”ā”§ā£ā ā”ā ⢰ +⣿⣿⣿⣿⣿┿ā¢ā¢æā£æā£¶ā£»ā”ā ā”ā ⠸┽ā£ā ā”ā”⢿⣻┠⣿ā ⢸ā”ā£ā£§ā£¾ā£¾ā£æā£æā£¶ā£¾ā£¾ā£ā ā ⣿ā”ā ⣸ā ⣸┿ā¢ā”ā”┹ā”ā ⣼ā¢ā ¤ā ¤ā¢ā£ā”ā”ā ⠸⣼ā”ā ā ⣷ā ⣸ +⣿⣿⣿⣿⣿┹ā¢ā£ā”»ā£æā£·ā£ā ā£ā ā”⢻⣽ā”ā ”ā ⢹⣿ā”⣿⣓⣿⣿⣿⣿┿ā£ā£æā¢«ā£ā£ā ā ā ⠶⣿⢿ā ā”ā¢ā”⢔⣾ā ⣰ā ā ⣼ā ā£ā£¤ā£“⣦⣤⣧ā£ā£ ā ⣿ā”ā ā”ā”ā ┿ +⣿⣿⣿ā”⣧ā£ā”⢶ā”⣿⢻⣿ā”⢻ā”ā ā”⢧⢿ā”⢔ā ⢿ā£ā£·ā£æā”æā ⣯⢽┳⢧ā”ā ā ⣽ā”ā ā ā ā ā ⠻⢣ā£ā£“ā ā ā ā ā ā ā ⢸⣿⢿ā£ā æā£æā”æā£æā£·ā£¤ā£øā”ā ⢸ā ⢰ā +⣿⣿┿⣹⣧ā”⢾⢷ā”⢸⣯⢹⣷ā”⢻ā£ā ±ā£ā ³ā£æā£¦ā ²ā ¾ā£æā£æā£æā ā ā£ā ⢿┧⢿ā ā”⣸ā”ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā£ā£ā”ā¢ā”»ā”“⢷ā ⠻⣿⣿ā£ā ā”ā¢ā”ā +⣿⣿⠳⣽⠲ā£ā”æā¢øā”⣸ā ⣷⢺⣿⣧┻⣷ā£ā¢¢ā”⢽⣷⣤ā ⢧ā ⢦ā”⢻ā”ā ⢠ā¢ā ⢯ā”ā ā ā ā ā ā”ā ā¢ā ā¢ā ā ā ā ā ā ā ā”⣷⣹ā”ā µā”⣺ā ā ⠸⣿⣿⣾ā¢ā”¾ā ⣲ +⣿⢫ā”⣾⢹⣾ā¢ā¢¹ā”⢼ā ⣿⣹ā ā¢ā”æā£¾ā£æā£·ā£ā ²ā£½ā¢æā£æā£®ā£·ā£ā ā ā ā ā ā ā”ā ā ā ā ā ⣺ā ā ā ā¢ā ā ā ā£ā”ā ā ā ā ⢷ā¢ā ©ā └⠲ā ā ā ⣸ā¢ā£½ā£«ā”ā¢ā£“⢠+ā£ā¢·ā£ā£®ā ā”⠢⢼ā”⢸┿⢧ā£ā ā”ā”⣤⢩⢿ā£ā¢·ā£¤ā£ā£ā¢æā£®ā ⠳⠦⣤ā ā ā””ā¢ā¢ā ”ā
ā”ā ā ā ā”ā ā¢ā” ā ā Øā¢ā ā ā ā ā ā ā ┲⢷┼ā”ā ā ā”ā ⣿⣿ā£ā£“⣾ā¢ā£¾ +ā£ā¢ŗā£¼ā ā”ā ā”⣿ā”⢸ā”⠼⣿ā ⢷ā ⢹ā”⣿ā”ā ā ¶ā£ā£»ā£æā”ā ¢ā¢ā¢¤ā¢ā”ā”
ā ¦ā ┓ā ā ā ā¢ā ā ā ā ā ā ā ā
ā ā ā¢ā ā ā£ā ā ā ā£ā ā”ā ā ā ⢸⣿⢫⣿┳⣵┿⢿ +ā£ā”æā¢¼ā ā”
ā¢ā ⣿⣵⢺ā”ā ⣿⣧ā”ā ā¢ā ·ā¢¾ā”ā¢ā ¢ā¢ā¢¹ā ⣷ā ā” ā ⠤⠨ā£ā¢ā ā ┫ā¢ā ā ā”ā ā ā¢ā ā¢ā £ā ā ā ā ā ā „ā “ā¢ā¢ā ā ā ā ā ā ā ┿⣬┿⢣ā”⣸ā£ā¢» +⣾ā£ā”Æā¢¼ā£ā £ā£ā£æā”½ā£ŗā ⢠⠹┻⣿⣦ā”ā ā Ŗā£ā ā ā”┾ā ⣿ā ā µā ā”ā ā”ā ā ā ā ā ā ā ā ”ā ā ā ā”ā¢ā£ā ⣔ā ā ā”ā ā ā¢ā °ā ā ā ā ā¢ā”⢰ā ā”⠔⢠⢰⣿⠸⣸ +⣿⣿⣳⢯⣿⣿⣿⣷⣽⣹ā”ā ⣷⢳ā¢ā »ā¢æā£¦ā£ā”ā”ā ⢰ā”ā ⣿ā”ā ā ā ā ā ā”ā ā ā ā ā ā ā ā ā ā” ā”ā ā ā ā ¢ā¢ā ā ā ā ā ā ā ā¢ā ā ā ā ⢺ā”ā ā¢ā¢ā£Æā”⠵┠+⣿⣿ā”⣿⣿⣿⣿⣿⢾⣻⣧ā”⢹ā£ā£æā”ā ⢻⣿⣧ā ⠔⣸ā ā ⣾ā”ā ā ā ā ā ā ā ā ā ā ā ā¢ā” ā ā ā ā ā ā ā ā ā ā ⠫⣦ā ā ā¢ā ā ā ā ā ā”ā ā ⢦ā¢ā”⣼ā”⢦ā +⣿⣿┽⣹⣿⣿⣿⣿┯⣷⣯⢿ā£ā »ā£ā£·ā”ā ⢻⣷ā ⢠ā”ā ā ⣿⢸ā£ā ā ā ā ā ā ā¢ā”ā ā ā ā ā ā ā ā ā”°ā ā ¤ā£ā ā ā¢ā£ā ⣰ā ā ā ┓⢓⣧ā ā”ā ā ā ⢦ā”ā”⢢ā +┿⣿⣿⣽⣿⢿⣿⣿┷⣣⢿⣯⣻⢷⣽ā¢ā£æā”ā ⣿ā ⣸ā ā ā¢ā£·ā øā”ā ⢤ā”ā ⣠ā ā ā ā ā ā ā ā ā£ā ā ā ā ā ā ⢧ā”⢿⣿⣾┿ā ā” ā¢ā£“⣿⢸┷ā£ā£ā ā¢ā ā ā ⠧⣠+⣿⣷⣿⣿⣿⣿⣿⣿┿⣵⢫⣷ā£ā£ā£¾ā£»ā£¾ā£æā£ā¢æā ┿ā ā ā ⣼ā ⣿ā”ā¢ā”¼ā ā ā ā ā ā ā ā ā ā ā ā ā¢ā”ā ā ā ā ā ⠮⠿ā ā ā¢ā£“⣿⣿ā”┾ā¢ā ⣿ā ā ā ā ā ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣳⣿⣿⣿⣯ā£ā£·ā¢Æā£æā£æā£æā¢°ā ā ā ā ⢸ā ⣻ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ²ā ā”ā ā ā ā¢ā£ ⣾⣿⣿⣿⣿ā£ā ā¢ā¢”ā ā ā ā ā ā¢ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ā£ā¢¾ā”»ā¢·ā£Æā£æā£¼ā ā ā ā¢ā”¼ā ā ā ā ā ā ā ā ā ā ā ā ā ⠲⣤ā£ā”ā ā ā ā ā ⠢⣤⣾⣿⣿⣿⣿⣿⣿⣿⢸ā ā”±ā ā ā ā ⣠⣶ā ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿┿⢾⣽⣯ā£ā£½ā”ā ⣠ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ⠿⣷⣤ā”ā ā ā ā ā ⢿⣿⣿⣿⣿⣷⣿ā¢ā”ā ā ā ⣠ā”ā”±ā ā ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢯⢿⣿⣿⣿⣧ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā¢ā ā ā ā ā ā ā ⢿⣷ā£ā”ā ā ā ⠹⢿⣿⣿⣿⣿┼ā ā ā¢ā£¾ā£æā”ā ā ā ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿┻ā£ā¢¾ā”¹ā”æā ā ā ā¢ā”ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā ā¢ā”ā ā ⣠⣿⣿⣿⣿⣦ā£ā ā ā ⠻⣿⣿ā”ā¢ā ⣔ā ⢺⣿┣ā¢ā¢ā ā ā +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯ā£ā£¾ā£æā£§ā¢¶ā”¶ā£æā¢æā£æā£¦ā£¤ā£ā£ā£ā£¤ā£ā£“⣶⣤⣤ā£ā”ā ā ā¢ā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£·ā£ā ⢠⣾⣿⣾┷⣰ā ā”⣹⣿⣿⣶⣿ā£ā”⢠+⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ā”⣯⢷ā£ā”æā£½ā£»ā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£¶ā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£·ā£¦ā£½ā£æā”æā ā ā¢ā¢±ā¢øā£æā£æā£æā£æā£æā£æā£æ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿ā£ā”½ā£¾ā£¹ā”⣷┽ā£ā”½ā£Æā¢æā£¹ā¢Æā£æā£æā£æā£æā£Æā£æā”æā£æā£æā£æā£æā£æā£»ā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā”ā ā ⢪⢿⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯┽⣶⢯┽ā£ā£³ā¢Æā”½ā£ā£Æā£½ā¢«ā£æā”⣿⣻⢿┽⣿⣿⣿⣿⣻⣽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷ā”ā ā ⠹⣿⣿⣿⣿⣿⣿⣿ +⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣯⢷ā£ā”¾ā£½ā£¹ā”½ā¢¾ā£¹ā ·ā£ā£ā æā£¼ā£æā”⣯⣾⣿⢿⣹⢯ā£ā”æā£æā¢æā£¾ā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£æā£ā ā ā ⠻⣿⣿⣿⣿⣿ +`; diff --git a/web/src/blog.tsx b/web/src/blog.tsx new file mode 100644 index 0000000..9d86657 --- /dev/null +++ b/web/src/blog.tsx @@ -0,0 +1,10 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import { Page } from "./components"; +import { AsciiArt } from "./ascii-art"; + +export default function Blog() { + return <Page> + work in progress (: + </Page> +} diff --git a/web/src/components.tsx b/web/src/components.tsx new file mode 100644 index 0000000..ccd8da8 --- /dev/null +++ b/web/src/components.tsx @@ -0,0 +1,259 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import { Header } from "./header"; +import { Sidebar } from "./sidebar"; + +const popup_stack = []; +window.onclick = ( e: Event ) => { + if( !e.target ) return; + + if( popup_stack.length > 0 ) { + const last = popup_stack[popup_stack.length - 1]; + if( last.el[0] == e.target || last.el.find( e.target ).length != 0 ) return; + e.preventDefault(); + e.stopPropagation(); + if( last.fn ) + last.fn(); + + popup_stack.pop(); + last.el.remove(); + } +} + +/** + * appends an element to the DOM and saves it in the popup stack to be removed. +**/ +export function addPopup( element: JQuery ) { + document.body.appendChild( element[0] ); + setTimeout( () => popup_stack.push( { el: element, fn: null } ) ); +} + +/** + * closes the topmost popup +**/ +export function closePopup() { + if( popup_stack.length > 0 ) { + const last = popup_stack[popup_stack.length - 1]; + if( last.fn ) + last.fn(); + + popup_stack.pop(); + setTimeout( () => last.el.remove() ); + } +} + +/** + * sets a callback that will get executed once the current popup is closed + **/ +export function onPopupClosed( fn: Function ) { + setTimeout( () => { + if( popup_stack.length > 0 ) { + popup_stack[popup_stack.length - 1].fn = fn; + } + } ); +} + +/* + * accepts "folded" prop +**/ +export function RolldownListItem( props: any ) { + const ret = <div class="rolldown"> + <div class="rolldown-collapsed-container"> + <div class="rolldown-icon-container">></div> + <div class="rolldown-collapsed">{props.folded}</div> + </div> + <div class="rolldown-expanded-container"> + <div class="rolldown-expanded">{props.children}</div> + </div> + </div>; + + ret.onclick = () => { + $( ret ).toggleClass( "active" ); + $( ret ).find( ".rolldown-expanded-container" ).toggleClass( 'active' ); + }; + + return ret; +} + +export function Spinner( props: any ) { + let spinner_steps = [ + '/', + '-', + '\\', + '|', + '/', + '-', + '\\', + '|' + ]; + + const id = props.id || ''; + + let el = $( <div class="spinner" id={ id } style={ props.style || '' } /> ); + let i = 0; + let loop = () => { + el.text( spinner_steps[i++] ); + if( i > spinner_steps.length ) + i = 0; + + if( el[0].isConnected ) + setTimeout( loop, 100 ); + }; + + setTimeout( loop, 100 ); + return el[0]; +} + +/* + * accepts title prop +**/ +export function RolldownList( props: any ) { + return <GroupBox title={props.title} style={props.style} innerStyle="margin: 0px; width: 100%"> + <div class="rolldownlist"> + { props.children } + </div> + </GroupBox> +} + +/* + * accepts title prop and optional innerStyle +**/ +export function GroupBox( props: any ) { + return <div class="groupbox" id={props.id || ''} style={props.style || ''}> + <span class="grouptitle"> + {props.title} + </span> + <span class="groupbody" style={props.innerStyle || ''}> + {props.children} + </span> + </div> +} + +export function Page( props: any ) { + return <> + <Header /> + <div id="page-main"> + <Sidebar /> + <div id="page-main-content"> + {props.children} + </div> + </div> + + <BackgroundToggle /> + </> +} + +export function DropdownItem( props: any ) { + return <div class="dropdown-inner" style={ props.style || "" } onclick={ props.onclick || null }> + {props.children} + </div> +} + +/** + * supports innerStyle for styling the actual dropdown picker + **/ +export function Dropdown( props: any ) { + const children = props.children; + let title = props.title; + let inline = props.inline; + let onchange = props.onchange; + let classes = props.class || ''; + let style = props.style || ""; + let id = props.id || ''; + let innerStyle = props.innerStyle || ""; + + const showItems = ( e: Event ) => { + e.preventDefault(); + const target = $( e.target as HTMLElement ); + + const newDropdown = $( <div class="dropdown-wrapper" style={ innerStyle }> + { children.map( ( child: HTMLElement ) => { + if( !child.onclick ) child.onclick = onchange; return child; + } ) } + </div> ); + target.parent().append( newDropdown[0] ); + setTimeout( () => popup_stack.push( { el: newDropdown, fn: null } ) ); + } + + if( inline ) { + return <button class={ 'dropdown' + ' ' + classes } style={ style } onclick={ showItems } id={ id }> + { title } + </button> + } + else { + return <> + <label>{ title }</label> + <button class={ 'dropdown' + ' ' + classes } style={ style } onclick={ showItems } id={ id }> + </button> + </> + } +} + +export function OkPopup( props: any ) { + const children = props.children; + const classes = props.class || ''; + const style = props.style || ''; + const id = props.id || ''; + + const onclick = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + if( props.onclick ) + props.onclick(); + + closePopup(); + } + + return <div class={ "popup-msg " + classes } id={ id } style={ style }> + { children } + <div style="display: flex; justify-content: center"> + <button onclick={ onclick }>Ok</button> + </div> + </div> +} + +export function OkCancelPopup( props: any ) { + const children = props.children; + const classes = props.class || ''; + const style = props.style || ''; + const id = props.id || ''; + + const onclick = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + if( props.onclick ) + props.onclick(); + + closePopup(); + } + + const oncancel = ( e: Event ) => { + e.preventDefault(); + e.stopPropagation(); + + closePopup(); + } + + return <div class={ "popup-msg " + classes } id={ id } style={ style }> + { children } + <div style="display: flex; justify-content: center"> + <button onclick={ onclick } style="margin-right: 10px">Ok</button> + <button onclick={ oncancel }>Cancel</button> + </div> + </div> +} + +export function BackgroundToggle() { + const toggleBackground = () => { + const main = $( "#page-main" ); + if( main.css( "display" ) == "none" ) { + main.css( "display", "" ); + } else { + main.css( "display", "none" ); + } + } + + return <div id="background-toggle" onclick={ toggleBackground }> + show background + </div> +} diff --git a/web/src/header.tsx b/web/src/header.tsx new file mode 100644 index 0000000..94906c0 --- /dev/null +++ b/web/src/header.tsx @@ -0,0 +1,10 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; + +export function Header( props: any ) { + return <div class="border-wrapper" style="z-index: 1"> + <div class="header"> + networkheaven.net + </div> + </div> +} diff --git a/web/src/home.tsx b/web/src/home.tsx new file mode 100644 index 0000000..77404fd --- /dev/null +++ b/web/src/home.tsx @@ -0,0 +1,24 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import { Page } from "./components"; +import { AsciiArt } from "./ascii-art"; + +export default function Home() { + return <Page> + <div class="page-title"> + <h3 style="font-family: JPN24; font-size: 25px; width: min-content" class="gradient">NETWORKHEAVEN</h3> + </div> + <hr /> + <div style="width: 100%; display: flex; justify-content: center"> + <div style="text-align: left; width: 75%"> + <h4 style="font-family: JPN16; font-size: 17px; font-weight: normal; margin-bottom: 0px;"> + hi, im aura and this is my website. + <br /> + i will add more stuff when i have time + </h4> + </div> + </div> + <AsciiArt /> + <h3 style="font-family: JPN19; font-size: 20px"><a href="https://steamcommunity.com/groups/networkheaven">STEAM</a></h3> + </Page>; +} diff --git a/web/src/index-page.tsx b/web/src/index-page.tsx new file mode 100644 index 0000000..4b7ce1c --- /dev/null +++ b/web/src/index-page.tsx @@ -0,0 +1,14 @@ +import * as JSX from "./jsx"; +import Home from "./home"; +import Blog from "./blog"; +import Pkgs from "./pkg"; + +JSX.addRoute( "/", () => <Home /> ); +JSX.addRoute( "/blog", () => <Blog /> ); +JSX.addRoute( "/pkg", () => <Pkgs /> ); +JSX.addRoute( "/pkg/*", () => <Pkgs /> ); + +window.onpopstate = JSX.onPopState; + +const url = new URL( window.location.href ); +JSX.navigateParams( url.pathname, url.searchParams.entries() ); diff --git a/web/src/index.html b/web/src/index.html new file mode 100644 index 0000000..a5500e4 --- /dev/null +++ b/web/src/index.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="UTF-8"> + <meta name="description" content=" "> + <meta name="viewport" content="width=device-width,user-scalable=no"> + <title>networkheaven.net</title> + <link rel="stylesheet" href="/static/main.css"> + <link href="/static/highlight.css" rel="preload" as="style" onload="this.rel='stylesheet'"> + <link rel="apple-touch-icon" href="/static/nh.ico"> + <link rel="icon" href="/static/nh.ico" type="image/png"> + <link rel="shortcut icon" href="/static/nh.ico" type="image/png"> + </head> + <body> + <div id="moneyjsx-root"> + <div id="homepage" style="padding-top: 0px"> + <noscript> + <!--- for browsers with noscript !---> + <div id="ascii-art"> + + </div> + <h3 style="margin-top: 5px;">networkheaven.net</h3> + <div> + you need javascript to use this website + </div> + </noscript> + </div> + </div> + </body> +</html> + diff --git a/web/src/jsx.tsx b/web/src/jsx.tsx new file mode 100644 index 0000000..98ca440 --- /dev/null +++ b/web/src/jsx.tsx @@ -0,0 +1,267 @@ +import $ from 'jquery'; +const assetAttributeNames = new Set( ['data', 'srcset', 'src', 'href'] ); + +export interface Route { + path: string, + component: Function, + wildcard: boolean +}; + +const routes: Route[] = []; +let err404page = "/"; +let rootId = "moneyjsx-root"; +let onprenavigate: Function = () => {}; +let onpostnavigate: Function = () => {}; + +function routeForPath( route: string ) : Function | null { + if( !routes[route] ) { + for( let key of Object.keys( routes ) ) { + const r = routes[key]; + + if( r.wildcard ) { + if( route.slice( 0, r.path.length ) == r.path ) { + return r.component; + } + } + } + + return null; + } else return routes[route].component; +} + +/** + * sets the id of the element to be replaced by the navigator + **/ +export function setRootId( rootId: string ) { + rootId = rootId; +} + +/** + * adds a route component to the routes list + * the component function must return either a jquery or a DOM element + **/ +export function addRoute( name: string, component: Function ) { + let path = name; + let wildcard = false; + if( path[path.length - 1] === "*" ) { + console.log( "name" ); + path = path.substring( 0, path.length - 1 ); + wildcard = true; + } + + routes[path] = { path, component, wildcard }; +} + +/** + * sets the route for a 404 page + **/ +export function set404Route( name: string ) { + err404page = name; +} + +/** + * sets the callback that will get called when a route changes + **/ +export function onPreNavigate( callback: Function ) { + onprenavigate = callback; +} + +/** + * sets the callback that will get called when a route changes + **/ +export function onPostNavigate( callback: Function ) { + onpostnavigate = callback; +} + +/** + * replaces the root element with the route component + **/ +export function navigate( route: string ) { + console.log( route ); + let url = new URL( window.location.href ); + let cb = routeForPath( route ); + url.pathname = route; + if( !cb ) + return navigate( err404page ); + + window.history.pushState( {}, null, url.href ); + + onprenavigate(); + const el = $( cb() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * navigate with params. see: navigate + **/ +export function navigateParams( route: string, params: any ) { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( params ); + url.pathname = route; + url.search = uparams.toString(); + let cb = routeForPath( route ); + if( !cb ) + return navigate( err404page ); + + window.history.pushState( {}, null, url.href ); + + onprenavigate(); + const el = $( cb() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * wrapper for history.pushState + **/ +export function pushParams( params: any ) { + const url = new URL( window.location.href ); + url.search = new URLSearchParams( params ).toString(); + + window.history.pushState( {}, null, url.href ); +} + +/** + * navigates without adding a history entry + * useful for e.g. re-rendering a page after waiting for a data callback +**/ +export function navigateParamsSilent( route: string, params: any ) { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( params ); + url.pathname = route; + url.search = uparams.toString(); + let cb = routeForPath( route ); + if( !cb ) + return navigateSilent( err404page ); + + onprenavigate(); + const el = $( cb() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * see: navigateParamsSilent + **/ +export function navigateSilent( route: string ) { + let url = new URL( window.location.href ); + url.pathname = route; + let cb = routeForPath( route ); + if( !cb ) + return navigateSilent( err404page ); + + onprenavigate(); + const el = $( cb() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +/** + * action when the back button is pressed +**/ +export function onPopState() { + let url = new URL( window.location.href ); + let uparams = new URLSearchParams( url.searchParams ); + url.search = uparams.toString(); + let cb = routeForPath( url.pathname ); + if( !cb ) + return navigateSilent( err404page ); + + onprenavigate(); + const el = $( cb() ); + + $( `#${rootId}` ).children().remove(); + $( `#${rootId}` ).append( el ); + onpostnavigate(); +} + +export function getRoutes() : Route[] { + return routes; +} + + +// internal stuff below + +const originalAppendChild = Element.prototype.appendChild; +Element.prototype.appendChild = function( child: any ) { + if( Array.isArray( child ) ) { + for( const childArrayMember of child ) + this.appendChild( childArrayMember ); + + return child; + } + else if( typeof child === 'string' ) { + return originalAppendChild.call( this, document.createTextNode( child ) ); + } + else if( child ) { + return originalAppendChild.call( this, child ); + } +}; + +export function createElement( tag: any, props: any, ...children: any ) { + props = props || {}; + + if( typeof tag === "function" ) { + props.children = children; + return tag( props ); + } + + if( tag === 'raw-content' ) { + const dummy = document.createElement( 'div' ); + dummy.innerHTML = props.content; + return [...dummy.children]; + } + + const element = document.createElement( tag ); + + for( const [name, value] of Object.entries( props ) ) { + if( name.startsWith( 'on' ) ) { + const lowercaseName = name.toLowerCase(); + + if( lowercaseName in window ) { + element.addEventListener( lowercaseName.substring(2 ), value ); + continue; + } + } + + if( name == 'ref' ) { + ( value as any ).current = element; + continue; + } + + if( value === false ) + continue; + + if( value === true ) { + element.setAttribute( name, '' ); + continue; + } + + if( assetAttributeNames.has( name ) ) { + if( typeof value === 'string' ) { + element.setAttribute( name, value ); + } + continue; + } + + element.setAttribute( name, value ); + }; + + for( const child of children ) + element.appendChild( child ); + + return element; +} + +export function createFragment( props: any ) { + return props.children; +} diff --git a/web/src/pkg.tsx b/web/src/pkg.tsx new file mode 100644 index 0000000..70e75c6 --- /dev/null +++ b/web/src/pkg.tsx @@ -0,0 +1,164 @@ +import $ from "jquery"; +import * as JSX from "./jsx"; +import { Page, Spinner } from "./components"; +import { sizeHumanReadable } from "./util"; + +function downloadFile( file: string ) { + const a = document.createElement( "a" ); + a.href = "https://networkheaven.net/pkgs/"; + a.download = "string"; + a.click(); + a.remove(); +} + +function urlForHref( href: string, isdir: boolean ) { + const url = new URL( window.location.href ); + if( isdir ) { + const path = url.pathname; + if( path.endsWith( '/' ) ) { + return path + href; + } + return path + "/" + href; + } + + let searchParams = url.searchParams.toString(); + searchParams = searchParams.slice( searchParams.indexOf( '/' ) ); + searchParams = searchParams.slice( searchParams.indexOf( '/' ) ); + return "https://networkheaven.net/pkgs" + searchParams + "/" + href; +} + +interface PkgEntry { + name: string; + date: string; + time: string; + size: string; + isdir: boolean; +} + +function entryFromLine( line: string ): PkgEntry | null { + const isdir = line[line.length - 1] == '-'; + const name = line.slice( 0, line.indexOf( " " ) ); + if( name == ".." ) return null; + if( !name ) + return null; + let date = ''; + let time = ''; + let size = '' + + if( !isdir ) { + let end = line.lastIndexOf( " " ); + size = line.slice( end + 1 ); + date = line.slice( line.indexOf( " " ) + 1, end ); + end = date.indexOf( " " ); + const datetime = date.slice( date.search( /[0-9]/ ) ); + end = datetime.indexOf( ' ' ); + date = datetime.slice( 0, end ); + time = datetime.slice( end + 1 ); + time = time.slice( 0, time.indexOf( " " ) ); + } else { + let start = line.search( /[0-9]/ ) + date = line.slice( start ); + let end = date.indexOf( " " ); + date = date.slice( 0, end ); + time = line.slice( start + end + 1, line.length - 1 ); + time = time.slice( 0, time.indexOf( " " ) ); + } + + return { name, date, time, size, isdir }; +} + +async function getEntries(): Promise<PkgEntry[]> { + const url = new URL( window.location.href ); + const href = url.pathname.split( "/pkg" )[1]; + + const packages = await fetch( "https://networkheaven.net/pkgs/" + href ); + const text = await packages.text(); + + const pkgBody = $( <div /> ); + pkgBody.html( text ); + pkgBody.html( pkgBody.find( "body" ).html() ); + const pre = pkgBody.find( "pre" )[0].innerText; + + const ret = []; + console.log( url.pathname ); + if( !url.pathname.endsWith( "/pkg/" ) && !url.pathname.endsWith( "/pkg" ) ) { + ret.push({ + name: '../', + date: ' ', + time: ' ', + size: '', + isdir: true + } ); + } + + const lines = pre.split( "\n" ); + for( const line of lines ) { + if( !line.length ) + continue; + + const entry = entryFromLine( line ); + console.log( entry ); + if( entry ) + ret.push( entry ); + } + + return ret; +} + +function back() { + const url = new URL( window.location.href ); + if( url.pathname.endsWith( "/" ) ) + url.pathname = url.pathname.slice( 0, -1 ); + url.pathname = url.pathname.slice( 0, url.pathname.lastIndexOf( "/" ) ); + JSX.navigate( url.pathname ); +} + +function PackageEntry( props: any ) { + console.log( props ); + const entry = props.entry as PkgEntry; + console.log( urlForHref( entry.name, entry.isdir ) ); + return <tr> + <td> + { entry.name == "../" && + <a href='#' onclick={ () => back() } class="package-entry-link"> + ../yes + </a> } + { entry.name != "../" && + <a href='#' onclick={ () => JSX.navigate( urlForHref( entry.name, entry.isdir ) ) } class="package-entry-link"> + {entry.name} + </a> } + </td> + <td><span class="package-entry-date">{entry.date}</span></td> + <td><span class="package-entry-time">{entry.time}</span></td> + <td>{ !entry.isdir && <span>{ sizeHumanReadable( parseInt( entry.size ) ) }</span> }</td> + </tr> +} + +export default function Pkgs() { + setTimeout( async () => { + try { + const entries = await getEntries(); + const target = $( "#package-entries" ).find( "table" ); + $( "#package-entries" ).find( ".spinner" ).remove(); + for( const entry of entries ) { + target.append( <PackageEntry entry={entry} /> ); + } + + } catch( e ) { + console.log( e ); + } + + } ); + + return <Page> + <div style="display: flex; justify-content: center"> + <h3 style="font-family: JPN24; font-size: 25px; width: min-content" class="gradient">PACKAGE REPOSITORY</h3> + </div> + <hr /> + + <div id="package-entries"> + <table style="width: 90%;" /> + <Spinner /> + </div> + </Page> +} diff --git a/web/src/sidebar.tsx b/web/src/sidebar.tsx new file mode 100644 index 0000000..a1b3ad7 --- /dev/null +++ b/web/src/sidebar.tsx @@ -0,0 +1,126 @@ +import $ from 'jquery'; +import * as JSX from './jsx'; + +var interval = null; + +function cacheWeather( result: any ) { + const timestamp = new Date().getTime(); + + localStorage.setItem( "weather", JSON.stringify( result ) ); + localStorage.setItem( "weather_timestamp", timestamp.toString() ); +} + +function getWeatherCache() { + const timestamp = localStorage.getItem( "weather_timestamp" ); + if( !timestamp ) + return null; + + if( parseInt( timestamp ) + 60 * 60 * 1000 < new Date().getTime() ) { + localStorage.removeItem( "weather" ); + localStorage.removeItem( "weather_timestamp" ); + return null; + } + + try { + const res = JSON.parse( localStorage.getItem( "weather" ) ); + return res; + } catch( e ) { + console.log( e ); + return null; + } +} + +async function updateWeather() { + let weather = getWeatherCache(); + if( !weather ) { + weather = await fetch( + "https://api.open-meteo.com/v1/forecast?latitude=35.0647937&longitude=137.1784597¤t=temperature_2m,wind_speed_10m,relative_humidity_2m" + ) + + weather = await weather.json(); + cacheWeather( weather ); + } + + $( "#temp" ).text( weather.current.temperature_2m ); + $( "#wind" ).text( weather.current.wind_speed_10m ); + $( "#humi" ).text( weather.current.relative_humidity_2m ); + + setTimeout( updateWeather, 60 * 60 * 1000 ); +} + +function Weather() { + setTimeout( updateWeather ); + const weather = getWeatherCache(); + if( weather && weather.current ) { + const temp = weather.current.temperature_2m; + const wind = weather.current.wind_speed_10m; + const humi = weather.current.relative_humidity_2m; + return <div id="weather"> + <div class="sidebar-row"><h4>weather in </h4> <h4>ęē„ēćę„ę¬:</h4></div> + <div class="sidebar-row"><h4>temperature:</h4><h4><span id="temp">{temp.toString()} </span>°C</h4></div> + <div class="sidebar-row"><h4>wind speed:</h4><h4><span id="wind">{wind.toString()}</span>km/h</h4></div> + <div class="sidebar-row"><h4>humidity:</h4><h4><span id="humi">{humi.toString()}</span>%</h4></div> + </div> + } + + return <div id="weather"> + <div class="sidebar-row"><h4>weather in </h4> <h4>ęē„ēćę„ę¬:</h4></div> + <div class="sidebar-row"><h4>temperature:</h4><h4><span id="temp">--</span>°C</h4></div> + <div class="sidebar-row"><h4>wind speed:</h4><h4><span id="wind">--</span>km/h</h4></div> + <div class="sidebar-row"><h4>humidity:</h4><h4><span id="humi">--</span>%</h4></div> + </div> +} + +export function Sidebar() { + if( interval == null ) { + interval = setInterval( () => { + $( "#time" ).text( new Date().toLocaleTimeString() ); + $( "#date" ).text( new Date().toLocaleDateString() ); + }, 1000 ); + } + + return <div id="sidebar"> + <div><h3>information</h3></div> + <hr/> + <div class="sidebar-row"><h4>current time: </h4><h4><span id="time">{new Date().toLocaleTimeString()}</span></h4></div> + <div class="sidebar-row"><h4>today: </h4><h4><span id="date">{new Date().toLocaleDateString()}</span></h4></div> + <Weather /> + <div style="margin-top: 15px"><h3>links</h3></div> + <hr/> + <div class="sidebar-row"> + <h4> + <a class="nogradient" style="margin-bottom: 0" href="#" onclick={ () => JSX.navigate( "/" ) }> + homepage + </a> + </h4> + </div> + <div class="sidebar-row" style="margin-top: -18px"> + <h4> + <a class="nogradient" href="#" onclick={ () => JSX.navigate( "/pkg" ) }> + slackware packages + </a> + </h4> + </div> + <div class="sidebar-row" style="margin-top: -18px"> + <h4> + <a class="nogradient" href="#" onclick={ () => JSX.navigate( "/blog" ) }> + blog entries + </a> + </h4> + </div> + <div class="sidebar-row" style="margin-top: -18px"> + <h4> + <a class="nogradient" href="https://steamcommunity.com/groups/networkheaven"> + steam + </a> + </h4> + </div> + <div class="sidebar-row" style="margin-top: -18px"> + <h4> + <a class="nogradient" href="https://git.networkheaven.net"> + git + </a> + </h4> + </div> + </div> +} diff --git a/web/src/tsconfig.json b/web/src/tsconfig.json new file mode 100644 index 0000000..b964594 --- /dev/null +++ b/web/src/tsconfig.json @@ -0,0 +1,121 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + "moduleResolution": "node", + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + "lib": [ + "ES2017", + "DOM", + "DOM.Iterable", + "ScriptHost" + ], + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + "jsx": "react", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + "jsxFactory": "JSX.createElement", + "jsxFragmentFactory": "JSX.createFragment", + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": ".", + "paths": { + "*": ["types/*"] + }, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": [ + "./node_modules/@types", + "./types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": false, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": false, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": false, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": false, /* Check for class properties that are declared but not set in the constructor. */ + "strictBuiltinIteratorReturn": false, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + "noImplicitThis": false, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/web/src/user.tsx b/web/src/user.tsx new file mode 100644 index 0000000..d909d9e --- /dev/null +++ b/web/src/user.tsx @@ -0,0 +1,6 @@ +import $ from 'jquery'; + +import * as JSX from './jsx'; +import * as api from './api'; + + diff --git a/web/src/util.tsx b/web/src/util.tsx new file mode 100644 index 0000000..1b1ccc0 --- /dev/null +++ b/web/src/util.tsx @@ -0,0 +1,42 @@ +export function escapeHtml( html: string ) { + const entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/', + '`': '`', + '=': '=' + }; + + return String( html ).replace( /[&<>"'`=\/]/g, ( s ) => { + return entityMap[s]; + } ); +} + +export function parseJWT( token: string ) : any { + const parts = token.split( '.' ); + let encoded = parts[1]; + encoded = encoded.replace(/-/g, '+').replace(/_/g, '/'); + const pad = encoded.length % 4; + if( pad === 1 ) + throw new Error( 'what the fuck' ); + if( pad > 1 ) + encoded += new Array( 5 - pad ).join( '=' ); + + const payload = JSON.parse( atob( encoded ) ); + return payload; +} + +export function sizeHumanReadable( size: number ) { + if( size < 1024 ) + return size + ' B'; + else if( size < 1024 * 1024 ) + return ( size / 1024 ).toFixed( 2 ) + ' KB'; + else if( size < 1024 * 1024 * 1024 ) + return ( size / 1024 / 1024 ).toFixed( 2 ) + ' MB'; + else + return ( size / 1024 / 1024 / 1024 ).toFixed( 2 ) + ' GB'; +} + diff --git a/web/static/fonts/LICENSE.TXT b/web/static/fonts/LICENSE.TXT new file mode 100644 index 0000000..fd662a7 --- /dev/null +++ b/web/static/fonts/LICENSE.TXT @@ -0,0 +1,428 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the āLicensor.ā The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. + diff --git a/web/static/fonts/README.NFO b/web/static/fonts/README.NFO new file mode 100644 index 0000000..f09ee43 --- /dev/null +++ b/web/static/fonts/README.NFO @@ -0,0 +1,45 @@ +
+ _ Ä --- Ä _ Ä --- Ä
+ .ł" ,Ā, ~=Ņ_ .ł. .ł" ~=Ņ_
+ . . .OZZZOø ^g, . .žų~ųž. ^%· .s%ZOæ
+ ` Ą¦qZp¦' ųł `Z, ` _.,ś `gZæ ł:ZZ|
+ _Āg%%oc, ~ _., ` ŌZ; _.,Ā©y%Z=-:ś .s%Z%L, `OZZYi%gĀ_
+ jOZZZZOLś jOZZŖ, `Zb _.Ā©y%ZZZZZZZZ%=:ł jZZZZZZZb `ZZZZZZZb
+ łZZ?~ ~\ZZZ| |ZZZZO\ ś?Z.ł%ZZZZZZ¦*Źü^ų"`' /ZZ¦"~"¦ZZ\ łT ~!ZZ“
+ Z6f łZZZOłś|ZZZ^ZZi ]Z1ś:-":ZZZ' _. łOZ/ \ZZL : |6Z'
+ . `ZZŖ._ ~"^Z| łZZZ;\ZZ ĘZµ śZZZś _Ā%ZZś l%! .oZo, ]ZZśł _ŅZZ' .
+ , ~^Ź*Ź^~.ZśśZZZl ZZĀZZ1 ś łZZZZł ^¦!ZZł :=l dZZZb łZZ| ~^"~
+ ł g%ZZZśśZZZZ `ZZZų : śZZZZ: łlZZ| ł;ł :ZZZF śZZ| .'
+ ~Ä_ śZZZZ| łZZZZ ĄZZ' ł ?ZZZ! :ZZ³ś śł "¦" dZgś _Ä~
+ ~"^ :ZZZOłł|ZZZ! `^' ' `ZZZ ś¦ZZ: ś ./ZZf śÄ--`~
+ OZZZł jZ¦Ź~ `. _ _. . ~^¦L, YZZZZOzzĀĀ śł:=CO/
+ -V! j¦Ź^~ . ~-ŗł-~ . `^ʦZZF'śł:%CG' . O R G
+ ~Ä_ T _Ä~ ~' '^"~
+ ~"Ķ=|=Ķ"~
+ ł p r e s e n t s
+ ś
+
+
+ The Ultimate Oldschool PC Font Pack
+
+ < http://int10h.org/oldschool-pc-fonts/ >
+
+ v2.2 // 2020-11-21
+
+ ------------------------------------------------------------------------
+
+ For documentation see the 'docs' folder or these pages:
+
+ Readme: < http://int10h.org/oldschool-pc-fonts/readme/ >
+
+ Font list: < http://int10h.org/oldschool-pc-fonts/fontlist/ >
+
+ ------------------------------------------------------------------------
+
+ The Ultimate Oldschool PC Font Pack is licensed under a Creative Commons
+ Attribution-ShareAlike 4.0 International License.
+
+ You should have received a copy of the license along with this work. If
+ not, see < http://creativecommons.org/licenses/by-sa/4.0/ >.
+
+ (c) 2016-2020 VileR
diff --git a/web/static/fonts/README.TXT b/web/static/fonts/README.TXT new file mode 100644 index 0000000..02b06ef --- /dev/null +++ b/web/static/fonts/README.TXT @@ -0,0 +1,46 @@ +
+ _ ā --- ā _ ā --- ā
+ .ā" ,ā¬, ~=ā„_ .ā. .ā" ~=ā„_
+ . . .OZZZOā ^g, . .ā °~°ā . ^%ā .s%ZOā
+ ` āĀŖqZpĀŖ' °ā `Z, ` _.,Ā· `gZā ā:ZZ|
+ _ā¬g%%oc, ~ _., ` āZ; _.,ā¬āy%Z=-:Ā· .s%Z%L, `OZZYi%gā¬_
+ jOZZÿÿZZOLĀ· jOZZÿ¬, `Zb _.ā¬āy%ZZZZZZZZ%=:ā jZZZZZZZb `ZZZZĆæZZZb
+ āZZ?~ ~\ZZZ| |Ā¢ZZZZO\ Ā·?Z.ā%ĆæZZZZZZĀŖ*ā©āæ^°"`' /ZZĀŖ"~"ĀŖZZ\ āT ~!ZZā¤
+ Z6f āZZZOāĀ·|ZZZ^ZZi ]Z1Ā·:-":ZZZ' _. āOZ/ \ZZL : |6Z'
+ . `ZZ¬._ ~"^Z| āZZZ;\ZZ āZā” Ā·Ā¢ZZZĀ· _ā¬%ZZĀ· l%! .oZo, ]ZZĀ·ā _ā„ZZ' .
+ , ~^ā©*ā©^~.Z¢··ZZZl ZZā¬ZZ1 Ā· āZZZZā ^ĀŖ!ZZā :=l dZZZb āZZ| ~^"~
+ ā g%ZZZĀ·Ā·ZZZZ `Ā„ZZZ° : Ā·ZZZZ: ālZZ| ā;ā :ZZZF Ā·ZZ| .'
+ ~ā_ Ā·ZZZZ| āZZZZ āZZĆæ' ā ?ZZZ! :ZZāĀ· Ā·ā "ĀŖ" dZgĀ· _ā~
+ ~"^ :ZZZOāā|ZZZ! `^' ' `Ā„ZZZ Ā·ĀŖZZ: Ā· ./ZZf Ā·ā--`~
+ OZZZā jZĀŖā©~ `. _ _. . ~^ĀŖL, YZZZZOzzā¬ā¬ Ā·ā:=CO/
+ -V! jĀŖā©^~ . ~-āā-~ . `^ā©ĀŖZ„ÿZF'Ā·ā:%CG' . O R G
+ ~ā_ T _ā~ ~' '^"~
+ ~"ā=|=ā"~
+ ā p r e s e n t s
+ Ā·
+
+
+ The Ultimate Oldschool PC Font Pack
+
+ < http://int10h.org/oldschool-pc-fonts/ >
+
+ v2.2 // 2020-11-21
+
+ ------------------------------------------------------------------------
+
+ For documentation see the 'docs' folder or these pages:
+
+ Readme: < http://int10h.org/oldschool-pc-fonts/readme/ >
+
+ Font list: < http://int10h.org/oldschool-pc-fonts/fontlist/ >
+
+ ------------------------------------------------------------------------
+
+ The Ultimate Oldschool PC Font Pack is licensed under a Creative Commons
+ Attribution-ShareAlike 4.0 International License.
+
+ You should have received a copy of the license along with this work. If
+ not, see < http://creativecommons.org/licenses/by-sa/4.0/ >.
+
+ (c) 2016-2020 VileR
+
diff --git a/web/static/fonts/Web437_ACM_VGA_8x14.woff b/web/static/fonts/Web437_ACM_VGA_8x14.woff Binary files differnew file mode 100644 index 0000000..9f44664 --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_8x14.woff diff --git a/web/static/fonts/Web437_ACM_VGA_8x16.woff b/web/static/fonts/Web437_ACM_VGA_8x16.woff Binary files differnew file mode 100644 index 0000000..b828c2b --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_8x16.woff diff --git a/web/static/fonts/Web437_ACM_VGA_8x8.woff b/web/static/fonts/Web437_ACM_VGA_8x8.woff Binary files differnew file mode 100644 index 0000000..acfebfa --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_8x8.woff diff --git a/web/static/fonts/Web437_ACM_VGA_9x14.woff b/web/static/fonts/Web437_ACM_VGA_9x14.woff Binary files differnew file mode 100644 index 0000000..c388f41 --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_9x14.woff diff --git a/web/static/fonts/Web437_ACM_VGA_9x16.woff b/web/static/fonts/Web437_ACM_VGA_9x16.woff Binary files differnew file mode 100644 index 0000000..9f7f85f --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_9x16.woff diff --git a/web/static/fonts/Web437_ACM_VGA_9x8.woff b/web/static/fonts/Web437_ACM_VGA_9x8.woff Binary files differnew file mode 100644 index 0000000..7b82f03 --- /dev/null +++ b/web/static/fonts/Web437_ACM_VGA_9x8.woff diff --git a/web/static/fonts/Web437_AMI_EGA_8x14.woff b/web/static/fonts/Web437_AMI_EGA_8x14.woff Binary files differnew file mode 100644 index 0000000..385f625 --- /dev/null +++ b/web/static/fonts/Web437_AMI_EGA_8x14.woff diff --git a/web/static/fonts/Web437_AMI_EGA_8x8-2y.woff b/web/static/fonts/Web437_AMI_EGA_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..0073dbd --- /dev/null +++ b/web/static/fonts/Web437_AMI_EGA_8x8-2y.woff diff --git a/web/static/fonts/Web437_AMI_EGA_8x8.woff b/web/static/fonts/Web437_AMI_EGA_8x8.woff Binary files differnew file mode 100644 index 0000000..69e5483 --- /dev/null +++ b/web/static/fonts/Web437_AMI_EGA_8x8.woff diff --git a/web/static/fonts/Web437_AMI_EGA_9x14.woff b/web/static/fonts/Web437_AMI_EGA_9x14.woff Binary files differnew file mode 100644 index 0000000..37813dd --- /dev/null +++ b/web/static/fonts/Web437_AMI_EGA_9x14.woff diff --git a/web/static/fonts/Web437_AST_PremiumExec.woff b/web/static/fonts/Web437_AST_PremiumExec.woff Binary files differnew file mode 100644 index 0000000..9613ecf --- /dev/null +++ b/web/static/fonts/Web437_AST_PremiumExec.woff diff --git a/web/static/fonts/Web437_ATI_8x14.woff b/web/static/fonts/Web437_ATI_8x14.woff Binary files differnew file mode 100644 index 0000000..bc1a987 --- /dev/null +++ b/web/static/fonts/Web437_ATI_8x14.woff diff --git a/web/static/fonts/Web437_ATI_8x16.woff b/web/static/fonts/Web437_ATI_8x16.woff Binary files differnew file mode 100644 index 0000000..c782766 --- /dev/null +++ b/web/static/fonts/Web437_ATI_8x16.woff diff --git a/web/static/fonts/Web437_ATI_8x8-2y.woff b/web/static/fonts/Web437_ATI_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..a2098f8 --- /dev/null +++ b/web/static/fonts/Web437_ATI_8x8-2y.woff diff --git a/web/static/fonts/Web437_ATI_8x8.woff b/web/static/fonts/Web437_ATI_8x8.woff Binary files differnew file mode 100644 index 0000000..7984412 --- /dev/null +++ b/web/static/fonts/Web437_ATI_8x8.woff diff --git a/web/static/fonts/Web437_ATI_9x14.woff b/web/static/fonts/Web437_ATI_9x14.woff Binary files differnew file mode 100644 index 0000000..a8f1153 --- /dev/null +++ b/web/static/fonts/Web437_ATI_9x14.woff diff --git a/web/static/fonts/Web437_ATI_9x16.woff b/web/static/fonts/Web437_ATI_9x16.woff Binary files differnew file mode 100644 index 0000000..1f017ab --- /dev/null +++ b/web/static/fonts/Web437_ATI_9x16.woff diff --git a/web/static/fonts/Web437_ATI_9x8.woff b/web/static/fonts/Web437_ATI_9x8.woff Binary files differnew file mode 100644 index 0000000..c53ff48 --- /dev/null +++ b/web/static/fonts/Web437_ATI_9x8.woff diff --git a/web/static/fonts/Web437_ATI_SmallW_6x8.woff b/web/static/fonts/Web437_ATI_SmallW_6x8.woff Binary files differnew file mode 100644 index 0000000..479d653 --- /dev/null +++ b/web/static/fonts/Web437_ATI_SmallW_6x8.woff diff --git a/web/static/fonts/Web437_ATT_PC6300-2x.woff b/web/static/fonts/Web437_ATT_PC6300-2x.woff Binary files differnew file mode 100644 index 0000000..9d633b5 --- /dev/null +++ b/web/static/fonts/Web437_ATT_PC6300-2x.woff diff --git a/web/static/fonts/Web437_ATT_PC6300.woff b/web/static/fonts/Web437_ATT_PC6300.woff Binary files differnew file mode 100644 index 0000000..c7cb2c4 --- /dev/null +++ b/web/static/fonts/Web437_ATT_PC6300.woff diff --git a/web/static/fonts/Web437_Acer710_CGA-2y.woff b/web/static/fonts/Web437_Acer710_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..74d7126 --- /dev/null +++ b/web/static/fonts/Web437_Acer710_CGA-2y.woff diff --git a/web/static/fonts/Web437_Acer710_CGA.woff b/web/static/fonts/Web437_Acer710_CGA.woff Binary files differnew file mode 100644 index 0000000..07fddbc --- /dev/null +++ b/web/static/fonts/Web437_Acer710_CGA.woff diff --git a/web/static/fonts/Web437_Acer710_Mono.woff b/web/static/fonts/Web437_Acer710_Mono.woff Binary files differnew file mode 100644 index 0000000..c6cf32c --- /dev/null +++ b/web/static/fonts/Web437_Acer710_Mono.woff diff --git a/web/static/fonts/Web437_Acer_VGA_8x8-2y.woff b/web/static/fonts/Web437_Acer_VGA_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..0422518 --- /dev/null +++ b/web/static/fonts/Web437_Acer_VGA_8x8-2y.woff diff --git a/web/static/fonts/Web437_Acer_VGA_8x8.woff b/web/static/fonts/Web437_Acer_VGA_8x8.woff Binary files differnew file mode 100644 index 0000000..d13fa7b --- /dev/null +++ b/web/static/fonts/Web437_Acer_VGA_8x8.woff diff --git a/web/static/fonts/Web437_Acer_VGA_9x8.woff b/web/static/fonts/Web437_Acer_VGA_9x8.woff Binary files differnew file mode 100644 index 0000000..36c1e47 --- /dev/null +++ b/web/static/fonts/Web437_Acer_VGA_9x8.woff diff --git a/web/static/fonts/Web437_Amstrad_PC-2y.woff b/web/static/fonts/Web437_Amstrad_PC-2y.woff Binary files differnew file mode 100644 index 0000000..2a8593f --- /dev/null +++ b/web/static/fonts/Web437_Amstrad_PC-2y.woff diff --git a/web/static/fonts/Web437_Amstrad_PC.woff b/web/static/fonts/Web437_Amstrad_PC.woff Binary files differnew file mode 100644 index 0000000..89f7b01 --- /dev/null +++ b/web/static/fonts/Web437_Amstrad_PC.woff diff --git a/web/static/fonts/Web437_ApricotPortable.woff b/web/static/fonts/Web437_ApricotPortable.woff Binary files differnew file mode 100644 index 0000000..3b562f5 --- /dev/null +++ b/web/static/fonts/Web437_ApricotPortable.woff diff --git a/web/static/fonts/Web437_ApricotXenC.woff b/web/static/fonts/Web437_ApricotXenC.woff Binary files differnew file mode 100644 index 0000000..a2cde2a --- /dev/null +++ b/web/static/fonts/Web437_ApricotXenC.woff diff --git a/web/static/fonts/Web437_Apricot_200L-2y.woff b/web/static/fonts/Web437_Apricot_200L-2y.woff Binary files differnew file mode 100644 index 0000000..e4bf1f3 --- /dev/null +++ b/web/static/fonts/Web437_Apricot_200L-2y.woff diff --git a/web/static/fonts/Web437_Apricot_200L.woff b/web/static/fonts/Web437_Apricot_200L.woff Binary files differnew file mode 100644 index 0000000..5329aee --- /dev/null +++ b/web/static/fonts/Web437_Apricot_200L.woff diff --git a/web/static/fonts/Web437_Apricot_256L-2y.woff b/web/static/fonts/Web437_Apricot_256L-2y.woff Binary files differnew file mode 100644 index 0000000..710985f --- /dev/null +++ b/web/static/fonts/Web437_Apricot_256L-2y.woff diff --git a/web/static/fonts/Web437_Apricot_256L.woff b/web/static/fonts/Web437_Apricot_256L.woff Binary files differnew file mode 100644 index 0000000..ef73b30 --- /dev/null +++ b/web/static/fonts/Web437_Apricot_256L.woff diff --git a/web/static/fonts/Web437_Apricot_Mono.woff b/web/static/fonts/Web437_Apricot_Mono.woff Binary files differnew file mode 100644 index 0000000..e1041a3 --- /dev/null +++ b/web/static/fonts/Web437_Apricot_Mono.woff diff --git a/web/static/fonts/Web437_CL_EagleIII_8x16.woff b/web/static/fonts/Web437_CL_EagleIII_8x16.woff Binary files differnew file mode 100644 index 0000000..f0e9430 --- /dev/null +++ b/web/static/fonts/Web437_CL_EagleIII_8x16.woff diff --git a/web/static/fonts/Web437_CL_EagleIII_9x16.woff b/web/static/fonts/Web437_CL_EagleIII_9x16.woff Binary files differnew file mode 100644 index 0000000..1866e81 --- /dev/null +++ b/web/static/fonts/Web437_CL_EagleIII_9x16.woff diff --git a/web/static/fonts/Web437_CL_EagleII_8x16.woff b/web/static/fonts/Web437_CL_EagleII_8x16.woff Binary files differnew file mode 100644 index 0000000..342cdc6 --- /dev/null +++ b/web/static/fonts/Web437_CL_EagleII_8x16.woff diff --git a/web/static/fonts/Web437_CL_EagleII_9x16.woff b/web/static/fonts/Web437_CL_EagleII_9x16.woff Binary files differnew file mode 100644 index 0000000..38e8b1d --- /dev/null +++ b/web/static/fonts/Web437_CL_EagleII_9x16.woff diff --git a/web/static/fonts/Web437_CL_Stingray_8x16.woff b/web/static/fonts/Web437_CL_Stingray_8x16.woff Binary files differnew file mode 100644 index 0000000..94dc555 --- /dev/null +++ b/web/static/fonts/Web437_CL_Stingray_8x16.woff diff --git a/web/static/fonts/Web437_CL_Stingray_8x16_bold.woff b/web/static/fonts/Web437_CL_Stingray_8x16_bold.woff Binary files differnew file mode 100644 index 0000000..78cb4fc --- /dev/null +++ b/web/static/fonts/Web437_CL_Stingray_8x16_bold.woff diff --git a/web/static/fonts/Web437_CL_Stingray_8x19.woff b/web/static/fonts/Web437_CL_Stingray_8x19.woff Binary files differnew file mode 100644 index 0000000..1781f2f --- /dev/null +++ b/web/static/fonts/Web437_CL_Stingray_8x19.woff diff --git a/web/static/fonts/Web437_CL_Stingray_8x19_bold.woff b/web/static/fonts/Web437_CL_Stingray_8x19_bold.woff Binary files differnew file mode 100644 index 0000000..da422df --- /dev/null +++ b/web/static/fonts/Web437_CL_Stingray_8x19_bold.woff diff --git a/web/static/fonts/Web437_CompaqThin_8x14.woff b/web/static/fonts/Web437_CompaqThin_8x14.woff Binary files differnew file mode 100644 index 0000000..c448c58 --- /dev/null +++ b/web/static/fonts/Web437_CompaqThin_8x14.woff diff --git a/web/static/fonts/Web437_CompaqThin_8x16.woff b/web/static/fonts/Web437_CompaqThin_8x16.woff Binary files differnew file mode 100644 index 0000000..7914e4c --- /dev/null +++ b/web/static/fonts/Web437_CompaqThin_8x16.woff diff --git a/web/static/fonts/Web437_CompaqThin_8x8.woff b/web/static/fonts/Web437_CompaqThin_8x8.woff Binary files differnew file mode 100644 index 0000000..62772df --- /dev/null +++ b/web/static/fonts/Web437_CompaqThin_8x8.woff diff --git a/web/static/fonts/Web437_Compaq_Port3-2x.woff b/web/static/fonts/Web437_Compaq_Port3-2x.woff Binary files differnew file mode 100644 index 0000000..a859b9f --- /dev/null +++ b/web/static/fonts/Web437_Compaq_Port3-2x.woff diff --git a/web/static/fonts/Web437_Compaq_Port3.woff b/web/static/fonts/Web437_Compaq_Port3.woff Binary files differnew file mode 100644 index 0000000..b96d4e5 --- /dev/null +++ b/web/static/fonts/Web437_Compaq_Port3.woff diff --git a/web/static/fonts/Web437_Compis.woff b/web/static/fonts/Web437_Compis.woff Binary files differnew file mode 100644 index 0000000..44721a2 --- /dev/null +++ b/web/static/fonts/Web437_Compis.woff diff --git a/web/static/fonts/Web437_Copam_BIOS-2y.woff b/web/static/fonts/Web437_Copam_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..1a301bf --- /dev/null +++ b/web/static/fonts/Web437_Copam_BIOS-2y.woff diff --git a/web/static/fonts/Web437_Copam_BIOS.woff b/web/static/fonts/Web437_Copam_BIOS.woff Binary files differnew file mode 100644 index 0000000..1c51092 --- /dev/null +++ b/web/static/fonts/Web437_Copam_BIOS.woff diff --git a/web/static/fonts/Web437_Cordata_PPC-21.woff b/web/static/fonts/Web437_Cordata_PPC-21.woff Binary files differnew file mode 100644 index 0000000..bab8c7b --- /dev/null +++ b/web/static/fonts/Web437_Cordata_PPC-21.woff diff --git a/web/static/fonts/Web437_Cordata_PPC-400.woff b/web/static/fonts/Web437_Cordata_PPC-400.woff Binary files differnew file mode 100644 index 0000000..5f95c1b --- /dev/null +++ b/web/static/fonts/Web437_Cordata_PPC-400.woff diff --git a/web/static/fonts/Web437_DG_One-2y.woff b/web/static/fonts/Web437_DG_One-2y.woff Binary files differnew file mode 100644 index 0000000..5ebc340 --- /dev/null +++ b/web/static/fonts/Web437_DG_One-2y.woff diff --git a/web/static/fonts/Web437_DG_One-2y_bold.woff b/web/static/fonts/Web437_DG_One-2y_bold.woff Binary files differnew file mode 100644 index 0000000..38a7339 --- /dev/null +++ b/web/static/fonts/Web437_DG_One-2y_bold.woff diff --git a/web/static/fonts/Web437_DG_One.woff b/web/static/fonts/Web437_DG_One.woff Binary files differnew file mode 100644 index 0000000..9bee64f --- /dev/null +++ b/web/static/fonts/Web437_DG_One.woff diff --git a/web/static/fonts/Web437_DG_One_bold.woff b/web/static/fonts/Web437_DG_One_bold.woff Binary files differnew file mode 100644 index 0000000..a887854 --- /dev/null +++ b/web/static/fonts/Web437_DG_One_bold.woff diff --git a/web/static/fonts/Web437_DOS-V_TWN16.woff b/web/static/fonts/Web437_DOS-V_TWN16.woff Binary files differnew file mode 100644 index 0000000..4a9692a --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_TWN16.woff diff --git a/web/static/fonts/Web437_DOS-V_TWN19.woff b/web/static/fonts/Web437_DOS-V_TWN19.woff Binary files differnew file mode 100644 index 0000000..3ebeeb5 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_TWN19.woff diff --git a/web/static/fonts/Web437_DOS-V_re_ANK16.woff b/web/static/fonts/Web437_DOS-V_re_ANK16.woff Binary files differnew file mode 100644 index 0000000..a61193e --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_ANK16.woff diff --git a/web/static/fonts/Web437_DOS-V_re_ANK19.woff b/web/static/fonts/Web437_DOS-V_re_ANK19.woff Binary files differnew file mode 100644 index 0000000..6842296 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_ANK19.woff diff --git a/web/static/fonts/Web437_DOS-V_re_ANK24.woff b/web/static/fonts/Web437_DOS-V_re_ANK24.woff Binary files differnew file mode 100644 index 0000000..a54c6ad --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_ANK24.woff diff --git a/web/static/fonts/Web437_DOS-V_re_ANK30.woff b/web/static/fonts/Web437_DOS-V_re_ANK30.woff Binary files differnew file mode 100644 index 0000000..623d973 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_ANK30.woff diff --git a/web/static/fonts/Web437_DOS-V_re_JPN12.woff b/web/static/fonts/Web437_DOS-V_re_JPN12.woff Binary files differnew file mode 100644 index 0000000..04ea332 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_JPN12.woff diff --git a/web/static/fonts/Web437_DOS-V_re_JPN16.woff b/web/static/fonts/Web437_DOS-V_re_JPN16.woff Binary files differnew file mode 100644 index 0000000..6c91b6e --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_JPN16.woff diff --git a/web/static/fonts/Web437_DOS-V_re_JPN19.woff b/web/static/fonts/Web437_DOS-V_re_JPN19.woff Binary files differnew file mode 100644 index 0000000..48f154d --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_JPN19.woff diff --git a/web/static/fonts/Web437_DOS-V_re_JPN24.woff b/web/static/fonts/Web437_DOS-V_re_JPN24.woff Binary files differnew file mode 100644 index 0000000..a77aca7 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_JPN24.woff diff --git a/web/static/fonts/Web437_DOS-V_re_JPN30.woff b/web/static/fonts/Web437_DOS-V_re_JPN30.woff Binary files differnew file mode 100644 index 0000000..3073f72 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_JPN30.woff diff --git a/web/static/fonts/Web437_DOS-V_re_PRC16.woff b/web/static/fonts/Web437_DOS-V_re_PRC16.woff Binary files differnew file mode 100644 index 0000000..4ddf047 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_PRC16.woff diff --git a/web/static/fonts/Web437_DOS-V_re_PRC19.woff b/web/static/fonts/Web437_DOS-V_re_PRC19.woff Binary files differnew file mode 100644 index 0000000..322c960 --- /dev/null +++ b/web/static/fonts/Web437_DOS-V_re_PRC19.woff diff --git a/web/static/fonts/Web437_DTK_BIOS-2y.woff b/web/static/fonts/Web437_DTK_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..14c9926 --- /dev/null +++ b/web/static/fonts/Web437_DTK_BIOS-2y.woff diff --git a/web/static/fonts/Web437_DTK_BIOS.woff b/web/static/fonts/Web437_DTK_BIOS.woff Binary files differnew file mode 100644 index 0000000..7a1cbaf --- /dev/null +++ b/web/static/fonts/Web437_DTK_BIOS.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff b/web/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff Binary files differnew file mode 100644 index 0000000..15a696b --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt1-2y.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt1.woff b/web/static/fonts/Web437_EagleSpCGA_Alt1.woff Binary files differnew file mode 100644 index 0000000..a2af2d5 --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt1.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff b/web/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff Binary files differnew file mode 100644 index 0000000..cfee97a --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt2-2y.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt2.woff b/web/static/fonts/Web437_EagleSpCGA_Alt2.woff Binary files differnew file mode 100644 index 0000000..dbfdce7 --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt2.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff b/web/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff Binary files differnew file mode 100644 index 0000000..c7562a7 --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt3-2y.woff diff --git a/web/static/fonts/Web437_EagleSpCGA_Alt3.woff b/web/static/fonts/Web437_EagleSpCGA_Alt3.woff Binary files differnew file mode 100644 index 0000000..3ac1dfe --- /dev/null +++ b/web/static/fonts/Web437_EagleSpCGA_Alt3.woff diff --git a/web/static/fonts/Web437_EpsonMGA-2y.woff b/web/static/fonts/Web437_EpsonMGA-2y.woff Binary files differnew file mode 100644 index 0000000..31f04fb --- /dev/null +++ b/web/static/fonts/Web437_EpsonMGA-2y.woff diff --git a/web/static/fonts/Web437_EpsonMGA.woff b/web/static/fonts/Web437_EpsonMGA.woff Binary files differnew file mode 100644 index 0000000..3139daf --- /dev/null +++ b/web/static/fonts/Web437_EpsonMGA.woff diff --git a/web/static/fonts/Web437_EpsonMGA_Alt-2y.woff b/web/static/fonts/Web437_EpsonMGA_Alt-2y.woff Binary files differnew file mode 100644 index 0000000..4680e93 --- /dev/null +++ b/web/static/fonts/Web437_EpsonMGA_Alt-2y.woff diff --git a/web/static/fonts/Web437_EpsonMGA_Alt.woff b/web/static/fonts/Web437_EpsonMGA_Alt.woff Binary files differnew file mode 100644 index 0000000..0616ea7 --- /dev/null +++ b/web/static/fonts/Web437_EpsonMGA_Alt.woff diff --git a/web/static/fonts/Web437_EpsonMGA_Mono.woff b/web/static/fonts/Web437_EpsonMGA_Mono.woff Binary files differnew file mode 100644 index 0000000..4b132bf --- /dev/null +++ b/web/static/fonts/Web437_EpsonMGA_Mono.woff diff --git a/web/static/fonts/Web437_EuroPC_CGA-2y.woff b/web/static/fonts/Web437_EuroPC_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..ef56d5d --- /dev/null +++ b/web/static/fonts/Web437_EuroPC_CGA-2y.woff diff --git a/web/static/fonts/Web437_EuroPC_CGA.woff b/web/static/fonts/Web437_EuroPC_CGA.woff Binary files differnew file mode 100644 index 0000000..89b84ac --- /dev/null +++ b/web/static/fonts/Web437_EuroPC_CGA.woff diff --git a/web/static/fonts/Web437_EuroPC_Mono.woff b/web/static/fonts/Web437_EuroPC_Mono.woff Binary files differnew file mode 100644 index 0000000..2692893 --- /dev/null +++ b/web/static/fonts/Web437_EuroPC_Mono.woff diff --git a/web/static/fonts/Web437_EverexME_5x8.woff b/web/static/fonts/Web437_EverexME_5x8.woff Binary files differnew file mode 100644 index 0000000..1a84a60 --- /dev/null +++ b/web/static/fonts/Web437_EverexME_5x8.woff diff --git a/web/static/fonts/Web437_EverexME_7x8.woff b/web/static/fonts/Web437_EverexME_7x8.woff Binary files differnew file mode 100644 index 0000000..5b4c9d4 --- /dev/null +++ b/web/static/fonts/Web437_EverexME_7x8.woff diff --git a/web/static/fonts/Web437_EverexME_8x16.woff b/web/static/fonts/Web437_EverexME_8x16.woff Binary files differnew file mode 100644 index 0000000..1a47ea4 --- /dev/null +++ b/web/static/fonts/Web437_EverexME_8x16.woff diff --git a/web/static/fonts/Web437_FMTowns_re_8x16-2x.woff b/web/static/fonts/Web437_FMTowns_re_8x16-2x.woff Binary files differnew file mode 100644 index 0000000..1424b2a --- /dev/null +++ b/web/static/fonts/Web437_FMTowns_re_8x16-2x.woff diff --git a/web/static/fonts/Web437_FMTowns_re_8x16.woff b/web/static/fonts/Web437_FMTowns_re_8x16.woff Binary files differnew file mode 100644 index 0000000..702078a --- /dev/null +++ b/web/static/fonts/Web437_FMTowns_re_8x16.woff diff --git a/web/static/fonts/Web437_FMTowns_re_8x8.woff b/web/static/fonts/Web437_FMTowns_re_8x8.woff Binary files differnew file mode 100644 index 0000000..526cb89 --- /dev/null +++ b/web/static/fonts/Web437_FMTowns_re_8x8.woff diff --git a/web/static/fonts/Web437_HP_100LX_10x11.woff b/web/static/fonts/Web437_HP_100LX_10x11.woff Binary files differnew file mode 100644 index 0000000..223e168 --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_10x11.woff diff --git a/web/static/fonts/Web437_HP_100LX_16x12.woff b/web/static/fonts/Web437_HP_100LX_16x12.woff Binary files differnew file mode 100644 index 0000000..2eaa62e --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_16x12.woff diff --git a/web/static/fonts/Web437_HP_100LX_6x8-2x.woff b/web/static/fonts/Web437_HP_100LX_6x8-2x.woff Binary files differnew file mode 100644 index 0000000..3c48c55 --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_6x8-2x.woff diff --git a/web/static/fonts/Web437_HP_100LX_6x8.woff b/web/static/fonts/Web437_HP_100LX_6x8.woff Binary files differnew file mode 100644 index 0000000..5d6069c --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_6x8.woff diff --git a/web/static/fonts/Web437_HP_100LX_8x8-2x.woff b/web/static/fonts/Web437_HP_100LX_8x8-2x.woff Binary files differnew file mode 100644 index 0000000..87304c6 --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_8x8-2x.woff diff --git a/web/static/fonts/Web437_HP_100LX_8x8.woff b/web/static/fonts/Web437_HP_100LX_8x8.woff Binary files differnew file mode 100644 index 0000000..f60db64 --- /dev/null +++ b/web/static/fonts/Web437_HP_100LX_8x8.woff diff --git a/web/static/fonts/Web437_HP_150_re.woff b/web/static/fonts/Web437_HP_150_re.woff Binary files differnew file mode 100644 index 0000000..3eaaf6d --- /dev/null +++ b/web/static/fonts/Web437_HP_150_re.woff diff --git a/web/static/fonts/Web437_IBM_3270pc.woff b/web/static/fonts/Web437_IBM_3270pc.woff Binary files differnew file mode 100644 index 0000000..fb9cd72 --- /dev/null +++ b/web/static/fonts/Web437_IBM_3270pc.woff diff --git a/web/static/fonts/Web437_IBM_BIOS-2x.woff b/web/static/fonts/Web437_IBM_BIOS-2x.woff Binary files differnew file mode 100644 index 0000000..c5fe090 --- /dev/null +++ b/web/static/fonts/Web437_IBM_BIOS-2x.woff diff --git a/web/static/fonts/Web437_IBM_BIOS-2y.woff b/web/static/fonts/Web437_IBM_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..860baf5 --- /dev/null +++ b/web/static/fonts/Web437_IBM_BIOS-2y.woff diff --git a/web/static/fonts/Web437_IBM_BIOS.woff b/web/static/fonts/Web437_IBM_BIOS.woff Binary files differnew file mode 100644 index 0000000..9daecb3 --- /dev/null +++ b/web/static/fonts/Web437_IBM_BIOS.woff diff --git a/web/static/fonts/Web437_IBM_CGA-2y.woff b/web/static/fonts/Web437_IBM_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..5967b6f --- /dev/null +++ b/web/static/fonts/Web437_IBM_CGA-2y.woff diff --git a/web/static/fonts/Web437_IBM_CGA.woff b/web/static/fonts/Web437_IBM_CGA.woff Binary files differnew file mode 100644 index 0000000..fe8f17a --- /dev/null +++ b/web/static/fonts/Web437_IBM_CGA.woff diff --git a/web/static/fonts/Web437_IBM_CGAthin-2y.woff b/web/static/fonts/Web437_IBM_CGAthin-2y.woff Binary files differnew file mode 100644 index 0000000..99bd14a --- /dev/null +++ b/web/static/fonts/Web437_IBM_CGAthin-2y.woff diff --git a/web/static/fonts/Web437_IBM_CGAthin.woff b/web/static/fonts/Web437_IBM_CGAthin.woff Binary files differnew file mode 100644 index 0000000..c7efcf1 --- /dev/null +++ b/web/static/fonts/Web437_IBM_CGAthin.woff diff --git a/web/static/fonts/Web437_IBM_Conv-2x.woff b/web/static/fonts/Web437_IBM_Conv-2x.woff Binary files differnew file mode 100644 index 0000000..6ffe99d --- /dev/null +++ b/web/static/fonts/Web437_IBM_Conv-2x.woff diff --git a/web/static/fonts/Web437_IBM_Conv-2y.woff b/web/static/fonts/Web437_IBM_Conv-2y.woff Binary files differnew file mode 100644 index 0000000..9c07239 --- /dev/null +++ b/web/static/fonts/Web437_IBM_Conv-2y.woff diff --git a/web/static/fonts/Web437_IBM_Conv.woff b/web/static/fonts/Web437_IBM_Conv.woff Binary files differnew file mode 100644 index 0000000..656f15a --- /dev/null +++ b/web/static/fonts/Web437_IBM_Conv.woff diff --git a/web/static/fonts/Web437_IBM_DOS_ISO8-2x.woff b/web/static/fonts/Web437_IBM_DOS_ISO8-2x.woff Binary files differnew file mode 100644 index 0000000..f40721f --- /dev/null +++ b/web/static/fonts/Web437_IBM_DOS_ISO8-2x.woff diff --git a/web/static/fonts/Web437_IBM_DOS_ISO8.woff b/web/static/fonts/Web437_IBM_DOS_ISO8.woff Binary files differnew file mode 100644 index 0000000..d5b9bac --- /dev/null +++ b/web/static/fonts/Web437_IBM_DOS_ISO8.woff diff --git a/web/static/fonts/Web437_IBM_DOS_ISO9-2x.woff b/web/static/fonts/Web437_IBM_DOS_ISO9-2x.woff Binary files differnew file mode 100644 index 0000000..e5f89ee --- /dev/null +++ b/web/static/fonts/Web437_IBM_DOS_ISO9-2x.woff diff --git a/web/static/fonts/Web437_IBM_DOS_ISO9.woff b/web/static/fonts/Web437_IBM_DOS_ISO9.woff Binary files differnew file mode 100644 index 0000000..fe3eda9 --- /dev/null +++ b/web/static/fonts/Web437_IBM_DOS_ISO9.woff diff --git a/web/static/fonts/Web437_IBM_EGA_8x14-2x.woff b/web/static/fonts/Web437_IBM_EGA_8x14-2x.woff Binary files differnew file mode 100644 index 0000000..77b7fef --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_8x14-2x.woff diff --git a/web/static/fonts/Web437_IBM_EGA_8x14.woff b/web/static/fonts/Web437_IBM_EGA_8x14.woff Binary files differnew file mode 100644 index 0000000..84efc99 --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_8x14.woff diff --git a/web/static/fonts/Web437_IBM_EGA_8x8-2x.woff b/web/static/fonts/Web437_IBM_EGA_8x8-2x.woff Binary files differnew file mode 100644 index 0000000..63de4fb --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_8x8-2x.woff diff --git a/web/static/fonts/Web437_IBM_EGA_8x8.woff b/web/static/fonts/Web437_IBM_EGA_8x8.woff Binary files differnew file mode 100644 index 0000000..35506d2 --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_8x8.woff diff --git a/web/static/fonts/Web437_IBM_EGA_9x14-2x.woff b/web/static/fonts/Web437_IBM_EGA_9x14-2x.woff Binary files differnew file mode 100644 index 0000000..c301231 --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_9x14-2x.woff diff --git a/web/static/fonts/Web437_IBM_EGA_9x14.woff b/web/static/fonts/Web437_IBM_EGA_9x14.woff Binary files differnew file mode 100644 index 0000000..e70ffa2 --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_9x14.woff diff --git a/web/static/fonts/Web437_IBM_EGA_9x8-2x.woff b/web/static/fonts/Web437_IBM_EGA_9x8-2x.woff Binary files differnew file mode 100644 index 0000000..05a30bd --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_9x8-2x.woff diff --git a/web/static/fonts/Web437_IBM_EGA_9x8.woff b/web/static/fonts/Web437_IBM_EGA_9x8.woff Binary files differnew file mode 100644 index 0000000..1e77b7e --- /dev/null +++ b/web/static/fonts/Web437_IBM_EGA_9x8.woff diff --git a/web/static/fonts/Web437_IBM_MDA.woff b/web/static/fonts/Web437_IBM_MDA.woff Binary files differnew file mode 100644 index 0000000..677f562 --- /dev/null +++ b/web/static/fonts/Web437_IBM_MDA.woff diff --git a/web/static/fonts/Web437_IBM_Model30r0-2x.woff b/web/static/fonts/Web437_IBM_Model30r0-2x.woff Binary files differnew file mode 100644 index 0000000..1d5c9db --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model30r0-2x.woff diff --git a/web/static/fonts/Web437_IBM_Model30r0.woff b/web/static/fonts/Web437_IBM_Model30r0.woff Binary files differnew file mode 100644 index 0000000..0756047 --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model30r0.woff diff --git a/web/static/fonts/Web437_IBM_Model3x_Alt1.woff b/web/static/fonts/Web437_IBM_Model3x_Alt1.woff Binary files differnew file mode 100644 index 0000000..de87cb1 --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model3x_Alt1.woff diff --git a/web/static/fonts/Web437_IBM_Model3x_Alt2.woff b/web/static/fonts/Web437_IBM_Model3x_Alt2.woff Binary files differnew file mode 100644 index 0000000..b088d34 --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model3x_Alt2.woff diff --git a/web/static/fonts/Web437_IBM_Model3x_Alt3.woff b/web/static/fonts/Web437_IBM_Model3x_Alt3.woff Binary files differnew file mode 100644 index 0000000..6f647d0 --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model3x_Alt3.woff diff --git a/web/static/fonts/Web437_IBM_Model3x_Alt4.woff b/web/static/fonts/Web437_IBM_Model3x_Alt4.woff Binary files differnew file mode 100644 index 0000000..26b82bc --- /dev/null +++ b/web/static/fonts/Web437_IBM_Model3x_Alt4.woff diff --git a/web/static/fonts/Web437_IBM_PGC-2x.woff b/web/static/fonts/Web437_IBM_PGC-2x.woff Binary files differnew file mode 100644 index 0000000..e0b4aaa --- /dev/null +++ b/web/static/fonts/Web437_IBM_PGC-2x.woff diff --git a/web/static/fonts/Web437_IBM_PGC.woff b/web/static/fonts/Web437_IBM_PGC.woff Binary files differnew file mode 100644 index 0000000..23a07a1 --- /dev/null +++ b/web/static/fonts/Web437_IBM_PGC.woff diff --git a/web/static/fonts/Web437_IBM_PS-55_re.woff b/web/static/fonts/Web437_IBM_PS-55_re.woff Binary files differnew file mode 100644 index 0000000..09cfd77 --- /dev/null +++ b/web/static/fonts/Web437_IBM_PS-55_re.woff diff --git a/web/static/fonts/Web437_IBM_VGA_8x14-2x.woff b/web/static/fonts/Web437_IBM_VGA_8x14-2x.woff Binary files differnew file mode 100644 index 0000000..60529c8 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_8x14-2x.woff diff --git a/web/static/fonts/Web437_IBM_VGA_8x14.woff b/web/static/fonts/Web437_IBM_VGA_8x14.woff Binary files differnew file mode 100644 index 0000000..79c2b66 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_8x14.woff diff --git a/web/static/fonts/Web437_IBM_VGA_8x16-2x.woff b/web/static/fonts/Web437_IBM_VGA_8x16-2x.woff Binary files differnew file mode 100644 index 0000000..894dc88 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_8x16-2x.woff diff --git a/web/static/fonts/Web437_IBM_VGA_8x16.woff b/web/static/fonts/Web437_IBM_VGA_8x16.woff Binary files differnew file mode 100644 index 0000000..1f1508d --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_8x16.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x14-2x.woff b/web/static/fonts/Web437_IBM_VGA_9x14-2x.woff Binary files differnew file mode 100644 index 0000000..1b1184f --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x14-2x.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x14.woff b/web/static/fonts/Web437_IBM_VGA_9x14.woff Binary files differnew file mode 100644 index 0000000..3cea8b2 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x14.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x16-2x.woff b/web/static/fonts/Web437_IBM_VGA_9x16-2x.woff Binary files differnew file mode 100644 index 0000000..34cdcf8 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x16-2x.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x16.woff b/web/static/fonts/Web437_IBM_VGA_9x16.woff Binary files differnew file mode 100644 index 0000000..8ff3510 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x16.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x8-2x.woff b/web/static/fonts/Web437_IBM_VGA_9x8-2x.woff Binary files differnew file mode 100644 index 0000000..0a5b0c2 --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x8-2x.woff diff --git a/web/static/fonts/Web437_IBM_VGA_9x8.woff b/web/static/fonts/Web437_IBM_VGA_9x8.woff Binary files differnew file mode 100644 index 0000000..a79352d --- /dev/null +++ b/web/static/fonts/Web437_IBM_VGA_9x8.woff diff --git a/web/static/fonts/Web437_IBM_XGA-AI_12x20.woff b/web/static/fonts/Web437_IBM_XGA-AI_12x20.woff Binary files differnew file mode 100644 index 0000000..dab7e96 --- /dev/null +++ b/web/static/fonts/Web437_IBM_XGA-AI_12x20.woff diff --git a/web/static/fonts/Web437_IBM_XGA-AI_12x23.woff b/web/static/fonts/Web437_IBM_XGA-AI_12x23.woff Binary files differnew file mode 100644 index 0000000..d9e764d --- /dev/null +++ b/web/static/fonts/Web437_IBM_XGA-AI_12x23.woff diff --git a/web/static/fonts/Web437_IBM_XGA-AI_7x15.woff b/web/static/fonts/Web437_IBM_XGA-AI_7x15.woff Binary files differnew file mode 100644 index 0000000..6faa01f --- /dev/null +++ b/web/static/fonts/Web437_IBM_XGA-AI_7x15.woff diff --git a/web/static/fonts/Web437_IGS_VGA_8x16.woff b/web/static/fonts/Web437_IGS_VGA_8x16.woff Binary files differnew file mode 100644 index 0000000..6e0104b --- /dev/null +++ b/web/static/fonts/Web437_IGS_VGA_8x16.woff diff --git a/web/static/fonts/Web437_IGS_VGA_9x16.woff b/web/static/fonts/Web437_IGS_VGA_9x16.woff Binary files differnew file mode 100644 index 0000000..8521543 --- /dev/null +++ b/web/static/fonts/Web437_IGS_VGA_9x16.woff diff --git a/web/static/fonts/Web437_ITT_Xtra-2y.woff b/web/static/fonts/Web437_ITT_Xtra-2y.woff Binary files differnew file mode 100644 index 0000000..af66678 --- /dev/null +++ b/web/static/fonts/Web437_ITT_Xtra-2y.woff diff --git a/web/static/fonts/Web437_ITT_Xtra.woff b/web/static/fonts/Web437_ITT_Xtra.woff Binary files differnew file mode 100644 index 0000000..37e10f6 --- /dev/null +++ b/web/static/fonts/Web437_ITT_Xtra.woff diff --git a/web/static/fonts/Web437_Kaypro2K_G-2y.woff b/web/static/fonts/Web437_Kaypro2K_G-2y.woff Binary files differnew file mode 100644 index 0000000..9e5b7aa --- /dev/null +++ b/web/static/fonts/Web437_Kaypro2K_G-2y.woff diff --git a/web/static/fonts/Web437_Kaypro2K_G.woff b/web/static/fonts/Web437_Kaypro2K_G.woff Binary files differnew file mode 100644 index 0000000..de7a0e9 --- /dev/null +++ b/web/static/fonts/Web437_Kaypro2K_G.woff diff --git a/web/static/fonts/Web437_LE_Model_D_CGA-2y.woff b/web/static/fonts/Web437_LE_Model_D_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..a34026e --- /dev/null +++ b/web/static/fonts/Web437_LE_Model_D_CGA-2y.woff diff --git a/web/static/fonts/Web437_LE_Model_D_CGA.woff b/web/static/fonts/Web437_LE_Model_D_CGA.woff Binary files differnew file mode 100644 index 0000000..6d7e05a --- /dev/null +++ b/web/static/fonts/Web437_LE_Model_D_CGA.woff diff --git a/web/static/fonts/Web437_LE_Model_D_Mono.woff b/web/static/fonts/Web437_LE_Model_D_Mono.woff Binary files differnew file mode 100644 index 0000000..a464a1d --- /dev/null +++ b/web/static/fonts/Web437_LE_Model_D_Mono.woff diff --git a/web/static/fonts/Web437_MBytePC230_8x16.woff b/web/static/fonts/Web437_MBytePC230_8x16.woff Binary files differnew file mode 100644 index 0000000..14ed558 --- /dev/null +++ b/web/static/fonts/Web437_MBytePC230_8x16.woff diff --git a/web/static/fonts/Web437_MBytePC230_CGA-2y.woff b/web/static/fonts/Web437_MBytePC230_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..ba95952 --- /dev/null +++ b/web/static/fonts/Web437_MBytePC230_CGA-2y.woff diff --git a/web/static/fonts/Web437_MBytePC230_CGA.woff b/web/static/fonts/Web437_MBytePC230_CGA.woff Binary files differnew file mode 100644 index 0000000..a5cc805 --- /dev/null +++ b/web/static/fonts/Web437_MBytePC230_CGA.woff diff --git a/web/static/fonts/Web437_MBytePC230_EGA.woff b/web/static/fonts/Web437_MBytePC230_EGA.woff Binary files differnew file mode 100644 index 0000000..c896ad5 --- /dev/null +++ b/web/static/fonts/Web437_MBytePC230_EGA.woff diff --git a/web/static/fonts/Web437_MBytePC230_Mono.woff b/web/static/fonts/Web437_MBytePC230_Mono.woff Binary files differnew file mode 100644 index 0000000..6d9ea1e --- /dev/null +++ b/web/static/fonts/Web437_MBytePC230_Mono.woff diff --git a/web/static/fonts/Web437_Master_512-2y.woff b/web/static/fonts/Web437_Master_512-2y.woff Binary files differnew file mode 100644 index 0000000..0622dde --- /dev/null +++ b/web/static/fonts/Web437_Master_512-2y.woff diff --git a/web/static/fonts/Web437_Master_512-2y_bold.woff b/web/static/fonts/Web437_Master_512-2y_bold.woff Binary files differnew file mode 100644 index 0000000..3c75008 --- /dev/null +++ b/web/static/fonts/Web437_Master_512-2y_bold.woff diff --git a/web/static/fonts/Web437_Master_512-M7.woff b/web/static/fonts/Web437_Master_512-M7.woff Binary files differnew file mode 100644 index 0000000..750bb88 --- /dev/null +++ b/web/static/fonts/Web437_Master_512-M7.woff diff --git a/web/static/fonts/Web437_Master_512-M7_bold.woff b/web/static/fonts/Web437_Master_512-M7_bold.woff Binary files differnew file mode 100644 index 0000000..74e54fe --- /dev/null +++ b/web/static/fonts/Web437_Master_512-M7_bold.woff diff --git a/web/static/fonts/Web437_Master_512.woff b/web/static/fonts/Web437_Master_512.woff Binary files differnew file mode 100644 index 0000000..e37dd6f --- /dev/null +++ b/web/static/fonts/Web437_Master_512.woff diff --git a/web/static/fonts/Web437_Master_512_bold.woff b/web/static/fonts/Web437_Master_512_bold.woff Binary files differnew file mode 100644 index 0000000..d3be3bc --- /dev/null +++ b/web/static/fonts/Web437_Master_512_bold.woff diff --git a/web/static/fonts/Web437_Mindset-2x.woff b/web/static/fonts/Web437_Mindset-2x.woff Binary files differnew file mode 100644 index 0000000..792b938 --- /dev/null +++ b/web/static/fonts/Web437_Mindset-2x.woff diff --git a/web/static/fonts/Web437_Mindset-2y.woff b/web/static/fonts/Web437_Mindset-2y.woff Binary files differnew file mode 100644 index 0000000..7536e50 --- /dev/null +++ b/web/static/fonts/Web437_Mindset-2y.woff diff --git a/web/static/fonts/Web437_Mindset.woff b/web/static/fonts/Web437_Mindset.woff Binary files differnew file mode 100644 index 0000000..8401df9 --- /dev/null +++ b/web/static/fonts/Web437_Mindset.woff diff --git a/web/static/fonts/Web437_NEC_APC3_8x16-2x.woff b/web/static/fonts/Web437_NEC_APC3_8x16-2x.woff Binary files differnew file mode 100644 index 0000000..a6977d8 --- /dev/null +++ b/web/static/fonts/Web437_NEC_APC3_8x16-2x.woff diff --git a/web/static/fonts/Web437_NEC_APC3_8x16.woff b/web/static/fonts/Web437_NEC_APC3_8x16.woff Binary files differnew file mode 100644 index 0000000..cb06dd7 --- /dev/null +++ b/web/static/fonts/Web437_NEC_APC3_8x16.woff diff --git a/web/static/fonts/Web437_NEC_APC3_8x8-2y.woff b/web/static/fonts/Web437_NEC_APC3_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..8efe53a --- /dev/null +++ b/web/static/fonts/Web437_NEC_APC3_8x8-2y.woff diff --git a/web/static/fonts/Web437_NEC_APC3_8x8.woff b/web/static/fonts/Web437_NEC_APC3_8x8.woff Binary files differnew file mode 100644 index 0000000..06728ce --- /dev/null +++ b/web/static/fonts/Web437_NEC_APC3_8x8.woff diff --git a/web/static/fonts/Web437_NEC_MultiSpeed-2x.woff b/web/static/fonts/Web437_NEC_MultiSpeed-2x.woff Binary files differnew file mode 100644 index 0000000..69d4399 --- /dev/null +++ b/web/static/fonts/Web437_NEC_MultiSpeed-2x.woff diff --git a/web/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff b/web/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff Binary files differnew file mode 100644 index 0000000..16688dd --- /dev/null +++ b/web/static/fonts/Web437_NEC_MultiSpeed-2x_bold.woff diff --git a/web/static/fonts/Web437_NEC_MultiSpeed.woff b/web/static/fonts/Web437_NEC_MultiSpeed.woff Binary files differnew file mode 100644 index 0000000..8028efd --- /dev/null +++ b/web/static/fonts/Web437_NEC_MultiSpeed.woff diff --git a/web/static/fonts/Web437_NEC_MultiSpeed_bold.woff b/web/static/fonts/Web437_NEC_MultiSpeed_bold.woff Binary files differnew file mode 100644 index 0000000..38e0287 --- /dev/null +++ b/web/static/fonts/Web437_NEC_MultiSpeed_bold.woff diff --git a/web/static/fonts/Web437_Nix8810_M15.woff b/web/static/fonts/Web437_Nix8810_M15.woff Binary files differnew file mode 100644 index 0000000..b452fbf --- /dev/null +++ b/web/static/fonts/Web437_Nix8810_M15.woff diff --git a/web/static/fonts/Web437_Nix8810_M16.woff b/web/static/fonts/Web437_Nix8810_M16.woff Binary files differnew file mode 100644 index 0000000..45f2b56 --- /dev/null +++ b/web/static/fonts/Web437_Nix8810_M16.woff diff --git a/web/static/fonts/Web437_Nix8810_M35-2y.woff b/web/static/fonts/Web437_Nix8810_M35-2y.woff Binary files differnew file mode 100644 index 0000000..2c564f3 --- /dev/null +++ b/web/static/fonts/Web437_Nix8810_M35-2y.woff diff --git a/web/static/fonts/Web437_Nix8810_M35.woff b/web/static/fonts/Web437_Nix8810_M35.woff Binary files differnew file mode 100644 index 0000000..433bac3 --- /dev/null +++ b/web/static/fonts/Web437_Nix8810_M35.woff diff --git a/web/static/fonts/Web437_OlivettiThin_8x14.woff b/web/static/fonts/Web437_OlivettiThin_8x14.woff Binary files differnew file mode 100644 index 0000000..96a3803 --- /dev/null +++ b/web/static/fonts/Web437_OlivettiThin_8x14.woff diff --git a/web/static/fonts/Web437_OlivettiThin_8x16.woff b/web/static/fonts/Web437_OlivettiThin_8x16.woff Binary files differnew file mode 100644 index 0000000..9a6c9d7 --- /dev/null +++ b/web/static/fonts/Web437_OlivettiThin_8x16.woff diff --git a/web/static/fonts/Web437_OlivettiThin_9x14.woff b/web/static/fonts/Web437_OlivettiThin_9x14.woff Binary files differnew file mode 100644 index 0000000..b43b457 --- /dev/null +++ b/web/static/fonts/Web437_OlivettiThin_9x14.woff diff --git a/web/static/fonts/Web437_OlivettiThin_9x16.woff b/web/static/fonts/Web437_OlivettiThin_9x16.woff Binary files differnew file mode 100644 index 0000000..8686839 --- /dev/null +++ b/web/static/fonts/Web437_OlivettiThin_9x16.woff diff --git a/web/static/fonts/Web437_Olivetti_M15-2y.woff b/web/static/fonts/Web437_Olivetti_M15-2y.woff Binary files differnew file mode 100644 index 0000000..41b83b2 --- /dev/null +++ b/web/static/fonts/Web437_Olivetti_M15-2y.woff diff --git a/web/static/fonts/Web437_Olivetti_M15.woff b/web/static/fonts/Web437_Olivetti_M15.woff Binary files differnew file mode 100644 index 0000000..212a1a8 --- /dev/null +++ b/web/static/fonts/Web437_Olivetti_M15.woff diff --git a/web/static/fonts/Web437_Paradise132_7x16.woff b/web/static/fonts/Web437_Paradise132_7x16.woff Binary files differnew file mode 100644 index 0000000..2470eed --- /dev/null +++ b/web/static/fonts/Web437_Paradise132_7x16.woff diff --git a/web/static/fonts/Web437_Paradise132_7x9.woff b/web/static/fonts/Web437_Paradise132_7x9.woff Binary files differnew file mode 100644 index 0000000..3c6c103 --- /dev/null +++ b/web/static/fonts/Web437_Paradise132_7x9.woff diff --git a/web/static/fonts/Web437_Philips_YES_G-2x.woff b/web/static/fonts/Web437_Philips_YES_G-2x.woff Binary files differnew file mode 100644 index 0000000..ca1e9df --- /dev/null +++ b/web/static/fonts/Web437_Philips_YES_G-2x.woff diff --git a/web/static/fonts/Web437_Philips_YES_G-2y.woff b/web/static/fonts/Web437_Philips_YES_G-2y.woff Binary files differnew file mode 100644 index 0000000..d6c2808 --- /dev/null +++ b/web/static/fonts/Web437_Philips_YES_G-2y.woff diff --git a/web/static/fonts/Web437_Philips_YES_G.woff b/web/static/fonts/Web437_Philips_YES_G.woff Binary files differnew file mode 100644 index 0000000..09a7767 --- /dev/null +++ b/web/static/fonts/Web437_Philips_YES_G.woff diff --git a/web/static/fonts/Web437_Philips_YES_T-2y.woff b/web/static/fonts/Web437_Philips_YES_T-2y.woff Binary files differnew file mode 100644 index 0000000..ecba3fd --- /dev/null +++ b/web/static/fonts/Web437_Philips_YES_T-2y.woff diff --git a/web/static/fonts/Web437_Philips_YES_T.woff b/web/static/fonts/Web437_Philips_YES_T.woff Binary files differnew file mode 100644 index 0000000..fdc0c83 --- /dev/null +++ b/web/static/fonts/Web437_Philips_YES_T.woff diff --git a/web/static/fonts/Web437_PhoenixEGA_8x14.woff b/web/static/fonts/Web437_PhoenixEGA_8x14.woff Binary files differnew file mode 100644 index 0000000..56bf74c --- /dev/null +++ b/web/static/fonts/Web437_PhoenixEGA_8x14.woff diff --git a/web/static/fonts/Web437_PhoenixEGA_8x16.woff b/web/static/fonts/Web437_PhoenixEGA_8x16.woff Binary files differnew file mode 100644 index 0000000..6ff3f0c --- /dev/null +++ b/web/static/fonts/Web437_PhoenixEGA_8x16.woff diff --git a/web/static/fonts/Web437_PhoenixEGA_8x8-2y.woff b/web/static/fonts/Web437_PhoenixEGA_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..8bb59df --- /dev/null +++ b/web/static/fonts/Web437_PhoenixEGA_8x8-2y.woff diff --git a/web/static/fonts/Web437_PhoenixEGA_8x8.woff b/web/static/fonts/Web437_PhoenixEGA_8x8.woff Binary files differnew file mode 100644 index 0000000..9609a47 --- /dev/null +++ b/web/static/fonts/Web437_PhoenixEGA_8x8.woff diff --git a/web/static/fonts/Web437_PhoenixEGA_9x14.woff b/web/static/fonts/Web437_PhoenixEGA_9x14.woff Binary files differnew file mode 100644 index 0000000..1222a9d --- /dev/null +++ b/web/static/fonts/Web437_PhoenixEGA_9x14.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_8x14.woff b/web/static/fonts/Web437_PhoenixVGA_8x14.woff Binary files differnew file mode 100644 index 0000000..5ac2522 --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_8x14.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_8x16.woff b/web/static/fonts/Web437_PhoenixVGA_8x16.woff Binary files differnew file mode 100644 index 0000000..9ac9959 --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_8x16.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_8x8.woff b/web/static/fonts/Web437_PhoenixVGA_8x8.woff Binary files differnew file mode 100644 index 0000000..80bef7d --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_8x8.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_9x14.woff b/web/static/fonts/Web437_PhoenixVGA_9x14.woff Binary files differnew file mode 100644 index 0000000..0aaf954 --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_9x14.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_9x16.woff b/web/static/fonts/Web437_PhoenixVGA_9x16.woff Binary files differnew file mode 100644 index 0000000..644d6fb --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_9x16.woff diff --git a/web/static/fonts/Web437_PhoenixVGA_9x8.woff b/web/static/fonts/Web437_PhoenixVGA_9x8.woff Binary files differnew file mode 100644 index 0000000..0d85e6d --- /dev/null +++ b/web/static/fonts/Web437_PhoenixVGA_9x8.woff diff --git a/web/static/fonts/Web437_Phoenix_BIOS-2y.woff b/web/static/fonts/Web437_Phoenix_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..e849ae8 --- /dev/null +++ b/web/static/fonts/Web437_Phoenix_BIOS-2y.woff diff --git a/web/static/fonts/Web437_Phoenix_BIOS.woff b/web/static/fonts/Web437_Phoenix_BIOS.woff Binary files differnew file mode 100644 index 0000000..75a0b5e --- /dev/null +++ b/web/static/fonts/Web437_Phoenix_BIOS.woff diff --git a/web/static/fonts/Web437_Portfolio_6x8.woff b/web/static/fonts/Web437_Portfolio_6x8.woff Binary files differnew file mode 100644 index 0000000..6f39add --- /dev/null +++ b/web/static/fonts/Web437_Portfolio_6x8.woff diff --git a/web/static/fonts/Web437_RM_Nimbus-2y.woff b/web/static/fonts/Web437_RM_Nimbus-2y.woff Binary files differnew file mode 100644 index 0000000..e6f5173 --- /dev/null +++ b/web/static/fonts/Web437_RM_Nimbus-2y.woff diff --git a/web/static/fonts/Web437_RM_Nimbus.woff b/web/static/fonts/Web437_RM_Nimbus.woff Binary files differnew file mode 100644 index 0000000..12aac90 --- /dev/null +++ b/web/static/fonts/Web437_RM_Nimbus.woff diff --git a/web/static/fonts/Web437_Rainbow100_re_132.woff b/web/static/fonts/Web437_Rainbow100_re_132.woff Binary files differnew file mode 100644 index 0000000..43de2a2 --- /dev/null +++ b/web/static/fonts/Web437_Rainbow100_re_132.woff diff --git a/web/static/fonts/Web437_Rainbow100_re_40.woff b/web/static/fonts/Web437_Rainbow100_re_40.woff Binary files differnew file mode 100644 index 0000000..e7203cf --- /dev/null +++ b/web/static/fonts/Web437_Rainbow100_re_40.woff diff --git a/web/static/fonts/Web437_Rainbow100_re_66.woff b/web/static/fonts/Web437_Rainbow100_re_66.woff Binary files differnew file mode 100644 index 0000000..b1d0884 --- /dev/null +++ b/web/static/fonts/Web437_Rainbow100_re_66.woff diff --git a/web/static/fonts/Web437_Rainbow100_re_80.woff b/web/static/fonts/Web437_Rainbow100_re_80.woff Binary files differnew file mode 100644 index 0000000..19b6dbb --- /dev/null +++ b/web/static/fonts/Web437_Rainbow100_re_80.woff diff --git a/web/static/fonts/Web437_Robotron_A7100.woff b/web/static/fonts/Web437_Robotron_A7100.woff Binary files differnew file mode 100644 index 0000000..03e311d --- /dev/null +++ b/web/static/fonts/Web437_Robotron_A7100.woff diff --git a/web/static/fonts/Web437_STB_AutoEGA_8x14.woff b/web/static/fonts/Web437_STB_AutoEGA_8x14.woff Binary files differnew file mode 100644 index 0000000..7f88003 --- /dev/null +++ b/web/static/fonts/Web437_STB_AutoEGA_8x14.woff diff --git a/web/static/fonts/Web437_STB_AutoEGA_9x14.woff b/web/static/fonts/Web437_STB_AutoEGA_9x14.woff Binary files differnew file mode 100644 index 0000000..5b51b23 --- /dev/null +++ b/web/static/fonts/Web437_STB_AutoEGA_9x14.woff diff --git a/web/static/fonts/Web437_SanyoMBC16-2y.woff b/web/static/fonts/Web437_SanyoMBC16-2y.woff Binary files differnew file mode 100644 index 0000000..9da6d1e --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC16-2y.woff diff --git a/web/static/fonts/Web437_SanyoMBC16.woff b/web/static/fonts/Web437_SanyoMBC16.woff Binary files differnew file mode 100644 index 0000000..966c868 --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC16.woff diff --git a/web/static/fonts/Web437_SanyoMBC55x-2y.woff b/web/static/fonts/Web437_SanyoMBC55x-2y.woff Binary files differnew file mode 100644 index 0000000..a3fb0cb --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC55x-2y.woff diff --git a/web/static/fonts/Web437_SanyoMBC55x.woff b/web/static/fonts/Web437_SanyoMBC55x.woff Binary files differnew file mode 100644 index 0000000..38203b6 --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC55x.woff diff --git a/web/static/fonts/Web437_SanyoMBC775-2y.woff b/web/static/fonts/Web437_SanyoMBC775-2y.woff Binary files differnew file mode 100644 index 0000000..39ed8fa --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC775-2y.woff diff --git a/web/static/fonts/Web437_SanyoMBC775.woff b/web/static/fonts/Web437_SanyoMBC775.woff Binary files differnew file mode 100644 index 0000000..4daa0a8 --- /dev/null +++ b/web/static/fonts/Web437_SanyoMBC775.woff diff --git a/web/static/fonts/Web437_SeequaCm-2y.woff b/web/static/fonts/Web437_SeequaCm-2y.woff Binary files differnew file mode 100644 index 0000000..d099ecd --- /dev/null +++ b/web/static/fonts/Web437_SeequaCm-2y.woff diff --git a/web/static/fonts/Web437_SeequaCm.woff b/web/static/fonts/Web437_SeequaCm.woff Binary files differnew file mode 100644 index 0000000..e598bc3 --- /dev/null +++ b/web/static/fonts/Web437_SeequaCm.woff diff --git a/web/static/fonts/Web437_Sharp_PC3K-2x.woff b/web/static/fonts/Web437_Sharp_PC3K-2x.woff Binary files differnew file mode 100644 index 0000000..57e9047 --- /dev/null +++ b/web/static/fonts/Web437_Sharp_PC3K-2x.woff diff --git a/web/static/fonts/Web437_Sharp_PC3K.woff b/web/static/fonts/Web437_Sharp_PC3K.woff Binary files differnew file mode 100644 index 0000000..8ba5b50 --- /dev/null +++ b/web/static/fonts/Web437_Sharp_PC3K.woff diff --git a/web/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff b/web/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff Binary files differnew file mode 100644 index 0000000..932d65b --- /dev/null +++ b/web/static/fonts/Web437_Sharp_PC3K_Alt-2x.woff diff --git a/web/static/fonts/Web437_Sharp_PC3K_Alt.woff b/web/static/fonts/Web437_Sharp_PC3K_Alt.woff Binary files differnew file mode 100644 index 0000000..32759f1 --- /dev/null +++ b/web/static/fonts/Web437_Sharp_PC3K_Alt.woff diff --git a/web/static/fonts/Web437_Siemens_PC-D.woff b/web/static/fonts/Web437_Siemens_PC-D.woff Binary files differnew file mode 100644 index 0000000..8865075 --- /dev/null +++ b/web/static/fonts/Web437_Siemens_PC-D.woff diff --git a/web/static/fonts/Web437_Sigma_RM_8x14.woff b/web/static/fonts/Web437_Sigma_RM_8x14.woff Binary files differnew file mode 100644 index 0000000..626a260 --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_8x14.woff diff --git a/web/static/fonts/Web437_Sigma_RM_8x16.woff b/web/static/fonts/Web437_Sigma_RM_8x16.woff Binary files differnew file mode 100644 index 0000000..de40fdf --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_8x16.woff diff --git a/web/static/fonts/Web437_Sigma_RM_8x8.woff b/web/static/fonts/Web437_Sigma_RM_8x8.woff Binary files differnew file mode 100644 index 0000000..d87ce1a --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_8x8.woff diff --git a/web/static/fonts/Web437_Sigma_RM_9x14.woff b/web/static/fonts/Web437_Sigma_RM_9x14.woff Binary files differnew file mode 100644 index 0000000..cf7e8c5 --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_9x14.woff diff --git a/web/static/fonts/Web437_Sigma_RM_9x16.woff b/web/static/fonts/Web437_Sigma_RM_9x16.woff Binary files differnew file mode 100644 index 0000000..83b19c7 --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_9x16.woff diff --git a/web/static/fonts/Web437_Sigma_RM_9x8.woff b/web/static/fonts/Web437_Sigma_RM_9x8.woff Binary files differnew file mode 100644 index 0000000..10f4346 --- /dev/null +++ b/web/static/fonts/Web437_Sigma_RM_9x8.woff diff --git a/web/static/fonts/Web437_SperryPC_8x16.woff b/web/static/fonts/Web437_SperryPC_8x16.woff Binary files differnew file mode 100644 index 0000000..4b92b23 --- /dev/null +++ b/web/static/fonts/Web437_SperryPC_8x16.woff diff --git a/web/static/fonts/Web437_SperryPC_CGA-2y.woff b/web/static/fonts/Web437_SperryPC_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..22fd7fb --- /dev/null +++ b/web/static/fonts/Web437_SperryPC_CGA-2y.woff diff --git a/web/static/fonts/Web437_SperryPC_CGA.woff b/web/static/fonts/Web437_SperryPC_CGA.woff Binary files differnew file mode 100644 index 0000000..f3c629d --- /dev/null +++ b/web/static/fonts/Web437_SperryPC_CGA.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_200L-2x.woff b/web/static/fonts/Web437_Tandy1K-II_200L-2x.woff Binary files differnew file mode 100644 index 0000000..aa5daa6 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_200L-2x.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_200L-2y.woff b/web/static/fonts/Web437_Tandy1K-II_200L-2y.woff Binary files differnew file mode 100644 index 0000000..8b973f6 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_200L-2y.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_200L.woff b/web/static/fonts/Web437_Tandy1K-II_200L.woff Binary files differnew file mode 100644 index 0000000..2bc34fa --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_200L.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_225L-2y.woff b/web/static/fonts/Web437_Tandy1K-II_225L-2y.woff Binary files differnew file mode 100644 index 0000000..261d4de --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_225L-2y.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_225L.woff b/web/static/fonts/Web437_Tandy1K-II_225L.woff Binary files differnew file mode 100644 index 0000000..b7c45f8 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_225L.woff diff --git a/web/static/fonts/Web437_Tandy1K-II_Mono.woff b/web/static/fonts/Web437_Tandy1K-II_Mono.woff Binary files differnew file mode 100644 index 0000000..4c11e44 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-II_Mono.woff diff --git a/web/static/fonts/Web437_Tandy1K-I_200L-2x.woff b/web/static/fonts/Web437_Tandy1K-I_200L-2x.woff Binary files differnew file mode 100644 index 0000000..e52ddd0 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-I_200L-2x.woff diff --git a/web/static/fonts/Web437_Tandy1K-I_200L-2y.woff b/web/static/fonts/Web437_Tandy1K-I_200L-2y.woff Binary files differnew file mode 100644 index 0000000..eec2274 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-I_200L-2y.woff diff --git a/web/static/fonts/Web437_Tandy1K-I_200L.woff b/web/static/fonts/Web437_Tandy1K-I_200L.woff Binary files differnew file mode 100644 index 0000000..cdc9196 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-I_200L.woff diff --git a/web/static/fonts/Web437_Tandy1K-I_225L-2y.woff b/web/static/fonts/Web437_Tandy1K-I_225L-2y.woff Binary files differnew file mode 100644 index 0000000..6c8e2c1 --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-I_225L-2y.woff diff --git a/web/static/fonts/Web437_Tandy1K-I_225L.woff b/web/static/fonts/Web437_Tandy1K-I_225L.woff Binary files differnew file mode 100644 index 0000000..c7d6dbb --- /dev/null +++ b/web/static/fonts/Web437_Tandy1K-I_225L.woff diff --git a/web/static/fonts/Web437_Tandy2K-2x.woff b/web/static/fonts/Web437_Tandy2K-2x.woff Binary files differnew file mode 100644 index 0000000..8b2f99c --- /dev/null +++ b/web/static/fonts/Web437_Tandy2K-2x.woff diff --git a/web/static/fonts/Web437_Tandy2K.woff b/web/static/fonts/Web437_Tandy2K.woff Binary files differnew file mode 100644 index 0000000..04634bf --- /dev/null +++ b/web/static/fonts/Web437_Tandy2K.woff diff --git a/web/static/fonts/Web437_Tandy2K_G-2x.woff b/web/static/fonts/Web437_Tandy2K_G-2x.woff Binary files differnew file mode 100644 index 0000000..bf62bb3 --- /dev/null +++ b/web/static/fonts/Web437_Tandy2K_G-2x.woff diff --git a/web/static/fonts/Web437_Tandy2K_G-TV.woff b/web/static/fonts/Web437_Tandy2K_G-TV.woff Binary files differnew file mode 100644 index 0000000..213bc99 --- /dev/null +++ b/web/static/fonts/Web437_Tandy2K_G-TV.woff diff --git a/web/static/fonts/Web437_Tandy2K_G.woff b/web/static/fonts/Web437_Tandy2K_G.woff Binary files differnew file mode 100644 index 0000000..ec4dd96 --- /dev/null +++ b/web/static/fonts/Web437_Tandy2K_G.woff diff --git a/web/static/fonts/Web437_TelePC-2y.woff b/web/static/fonts/Web437_TelePC-2y.woff Binary files differnew file mode 100644 index 0000000..3f1da5d --- /dev/null +++ b/web/static/fonts/Web437_TelePC-2y.woff diff --git a/web/static/fonts/Web437_TelePC.woff b/web/static/fonts/Web437_TelePC.woff Binary files differnew file mode 100644 index 0000000..bb25c9c --- /dev/null +++ b/web/static/fonts/Web437_TelePC.woff diff --git a/web/static/fonts/Web437_Ti_Pro.woff b/web/static/fonts/Web437_Ti_Pro.woff Binary files differnew file mode 100644 index 0000000..1d8fb0e --- /dev/null +++ b/web/static/fonts/Web437_Ti_Pro.woff diff --git a/web/static/fonts/Web437_ToshibaSat_8x14.woff b/web/static/fonts/Web437_ToshibaSat_8x14.woff Binary files differnew file mode 100644 index 0000000..2e05675 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_8x14.woff diff --git a/web/static/fonts/Web437_ToshibaSat_8x16.woff b/web/static/fonts/Web437_ToshibaSat_8x16.woff Binary files differnew file mode 100644 index 0000000..99735df --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_8x16.woff diff --git a/web/static/fonts/Web437_ToshibaSat_8x8.woff b/web/static/fonts/Web437_ToshibaSat_8x8.woff Binary files differnew file mode 100644 index 0000000..92e9dc2 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_8x8.woff diff --git a/web/static/fonts/Web437_ToshibaSat_9x14.woff b/web/static/fonts/Web437_ToshibaSat_9x14.woff Binary files differnew file mode 100644 index 0000000..6c6dab6 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_9x14.woff diff --git a/web/static/fonts/Web437_ToshibaSat_9x16.woff b/web/static/fonts/Web437_ToshibaSat_9x16.woff Binary files differnew file mode 100644 index 0000000..482da55 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_9x16.woff diff --git a/web/static/fonts/Web437_ToshibaSat_9x8.woff b/web/static/fonts/Web437_ToshibaSat_9x8.woff Binary files differnew file mode 100644 index 0000000..1c19f2d --- /dev/null +++ b/web/static/fonts/Web437_ToshibaSat_9x8.woff diff --git a/web/static/fonts/Web437_ToshibaT300_8x16.woff b/web/static/fonts/Web437_ToshibaT300_8x16.woff Binary files differnew file mode 100644 index 0000000..2a93b1f --- /dev/null +++ b/web/static/fonts/Web437_ToshibaT300_8x16.woff diff --git a/web/static/fonts/Web437_ToshibaT300_8x8-2y.woff b/web/static/fonts/Web437_ToshibaT300_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..c809330 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaT300_8x8-2y.woff diff --git a/web/static/fonts/Web437_ToshibaT300_8x8.woff b/web/static/fonts/Web437_ToshibaT300_8x8.woff Binary files differnew file mode 100644 index 0000000..3b8d7f1 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaT300_8x8.woff diff --git a/web/static/fonts/Web437_ToshibaTxL1_8x16.woff b/web/static/fonts/Web437_ToshibaTxL1_8x16.woff Binary files differnew file mode 100644 index 0000000..f900627 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaTxL1_8x16.woff diff --git a/web/static/fonts/Web437_ToshibaTxL1_8x8.woff b/web/static/fonts/Web437_ToshibaTxL1_8x8.woff Binary files differnew file mode 100644 index 0000000..cbd7cec --- /dev/null +++ b/web/static/fonts/Web437_ToshibaTxL1_8x8.woff diff --git a/web/static/fonts/Web437_ToshibaTxL2_8x16.woff b/web/static/fonts/Web437_ToshibaTxL2_8x16.woff Binary files differnew file mode 100644 index 0000000..f7e5c74 --- /dev/null +++ b/web/static/fonts/Web437_ToshibaTxL2_8x16.woff diff --git a/web/static/fonts/Web437_ToshibaTxL2_8x8.woff b/web/static/fonts/Web437_ToshibaTxL2_8x8.woff Binary files differnew file mode 100644 index 0000000..a472b0b --- /dev/null +++ b/web/static/fonts/Web437_ToshibaTxL2_8x8.woff diff --git a/web/static/fonts/Web437_TridentEarly_8x11.woff b/web/static/fonts/Web437_TridentEarly_8x11.woff Binary files differnew file mode 100644 index 0000000..5474176 --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_8x11.woff diff --git a/web/static/fonts/Web437_TridentEarly_8x14.woff b/web/static/fonts/Web437_TridentEarly_8x14.woff Binary files differnew file mode 100644 index 0000000..97daa2e --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_8x14.woff diff --git a/web/static/fonts/Web437_TridentEarly_8x16.woff b/web/static/fonts/Web437_TridentEarly_8x16.woff Binary files differnew file mode 100644 index 0000000..5e71f0e --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_8x16.woff diff --git a/web/static/fonts/Web437_TridentEarly_8x8.woff b/web/static/fonts/Web437_TridentEarly_8x8.woff Binary files differnew file mode 100644 index 0000000..e116dd3 --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_8x8.woff diff --git a/web/static/fonts/Web437_TridentEarly_9x14.woff b/web/static/fonts/Web437_TridentEarly_9x14.woff Binary files differnew file mode 100644 index 0000000..293de0a --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_9x14.woff diff --git a/web/static/fonts/Web437_TridentEarly_9x16.woff b/web/static/fonts/Web437_TridentEarly_9x16.woff Binary files differnew file mode 100644 index 0000000..37d82a0 --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_9x16.woff diff --git a/web/static/fonts/Web437_TridentEarly_9x8.woff b/web/static/fonts/Web437_TridentEarly_9x8.woff Binary files differnew file mode 100644 index 0000000..3ff88db --- /dev/null +++ b/web/static/fonts/Web437_TridentEarly_9x8.woff diff --git a/web/static/fonts/Web437_Trident_8x11.woff b/web/static/fonts/Web437_Trident_8x11.woff Binary files differnew file mode 100644 index 0000000..d5d52b1 --- /dev/null +++ b/web/static/fonts/Web437_Trident_8x11.woff diff --git a/web/static/fonts/Web437_Trident_8x14.woff b/web/static/fonts/Web437_Trident_8x14.woff Binary files differnew file mode 100644 index 0000000..98576fa --- /dev/null +++ b/web/static/fonts/Web437_Trident_8x14.woff diff --git a/web/static/fonts/Web437_Trident_8x16.woff b/web/static/fonts/Web437_Trident_8x16.woff Binary files differnew file mode 100644 index 0000000..708258c --- /dev/null +++ b/web/static/fonts/Web437_Trident_8x16.woff diff --git a/web/static/fonts/Web437_Trident_8x8.woff b/web/static/fonts/Web437_Trident_8x8.woff Binary files differnew file mode 100644 index 0000000..8a7a2bd --- /dev/null +++ b/web/static/fonts/Web437_Trident_8x8.woff diff --git a/web/static/fonts/Web437_Trident_9x14.woff b/web/static/fonts/Web437_Trident_9x14.woff Binary files differnew file mode 100644 index 0000000..3446e73 --- /dev/null +++ b/web/static/fonts/Web437_Trident_9x14.woff diff --git a/web/static/fonts/Web437_Trident_9x16.woff b/web/static/fonts/Web437_Trident_9x16.woff Binary files differnew file mode 100644 index 0000000..da3a894 --- /dev/null +++ b/web/static/fonts/Web437_Trident_9x16.woff diff --git a/web/static/fonts/Web437_Trident_9x8.woff b/web/static/fonts/Web437_Trident_9x8.woff Binary files differnew file mode 100644 index 0000000..adb4b74 --- /dev/null +++ b/web/static/fonts/Web437_Trident_9x8.woff diff --git a/web/static/fonts/Web437_TsengEVA_132_6x14.woff b/web/static/fonts/Web437_TsengEVA_132_6x14.woff Binary files differnew file mode 100644 index 0000000..c90423a --- /dev/null +++ b/web/static/fonts/Web437_TsengEVA_132_6x14.woff diff --git a/web/static/fonts/Web437_TsengEVA_132_6x8.woff b/web/static/fonts/Web437_TsengEVA_132_6x8.woff Binary files differnew file mode 100644 index 0000000..6042cf1 --- /dev/null +++ b/web/static/fonts/Web437_TsengEVA_132_6x8.woff diff --git a/web/static/fonts/Web437_VTech_BIOS-2y.woff b/web/static/fonts/Web437_VTech_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..3207a4d --- /dev/null +++ b/web/static/fonts/Web437_VTech_BIOS-2y.woff diff --git a/web/static/fonts/Web437_VTech_BIOS.woff b/web/static/fonts/Web437_VTech_BIOS.woff Binary files differnew file mode 100644 index 0000000..7585b4e --- /dev/null +++ b/web/static/fonts/Web437_VTech_BIOS.woff diff --git a/web/static/fonts/Web437_Verite_8x14.woff b/web/static/fonts/Web437_Verite_8x14.woff Binary files differnew file mode 100644 index 0000000..a02281a --- /dev/null +++ b/web/static/fonts/Web437_Verite_8x14.woff diff --git a/web/static/fonts/Web437_Verite_8x16.woff b/web/static/fonts/Web437_Verite_8x16.woff Binary files differnew file mode 100644 index 0000000..00424a9 --- /dev/null +++ b/web/static/fonts/Web437_Verite_8x16.woff diff --git a/web/static/fonts/Web437_Verite_8x8-2y.woff b/web/static/fonts/Web437_Verite_8x8-2y.woff Binary files differnew file mode 100644 index 0000000..316c481 --- /dev/null +++ b/web/static/fonts/Web437_Verite_8x8-2y.woff diff --git a/web/static/fonts/Web437_Verite_8x8.woff b/web/static/fonts/Web437_Verite_8x8.woff Binary files differnew file mode 100644 index 0000000..e6a3f67 --- /dev/null +++ b/web/static/fonts/Web437_Verite_8x8.woff diff --git a/web/static/fonts/Web437_Verite_9x14.woff b/web/static/fonts/Web437_Verite_9x14.woff Binary files differnew file mode 100644 index 0000000..3c4c0bb --- /dev/null +++ b/web/static/fonts/Web437_Verite_9x14.woff diff --git a/web/static/fonts/Web437_Verite_9x16.woff b/web/static/fonts/Web437_Verite_9x16.woff Binary files differnew file mode 100644 index 0000000..c9da6f7 --- /dev/null +++ b/web/static/fonts/Web437_Verite_9x16.woff diff --git a/web/static/fonts/Web437_Verite_9x8.woff b/web/static/fonts/Web437_Verite_9x8.woff Binary files differnew file mode 100644 index 0000000..ae2181c --- /dev/null +++ b/web/static/fonts/Web437_Verite_9x8.woff diff --git a/web/static/fonts/Web437_Wang_Pro_Color-2y.woff b/web/static/fonts/Web437_Wang_Pro_Color-2y.woff Binary files differnew file mode 100644 index 0000000..b3306bd --- /dev/null +++ b/web/static/fonts/Web437_Wang_Pro_Color-2y.woff diff --git a/web/static/fonts/Web437_Wang_Pro_Color.woff b/web/static/fonts/Web437_Wang_Pro_Color.woff Binary files differnew file mode 100644 index 0000000..500f461 --- /dev/null +++ b/web/static/fonts/Web437_Wang_Pro_Color.woff diff --git a/web/static/fonts/Web437_Wang_Pro_Mono.woff b/web/static/fonts/Web437_Wang_Pro_Mono.woff Binary files differnew file mode 100644 index 0000000..3e9162d --- /dev/null +++ b/web/static/fonts/Web437_Wang_Pro_Mono.woff diff --git a/web/static/fonts/Web437_Wyse700a-2y.woff b/web/static/fonts/Web437_Wyse700a-2y.woff Binary files differnew file mode 100644 index 0000000..8bf060d --- /dev/null +++ b/web/static/fonts/Web437_Wyse700a-2y.woff diff --git a/web/static/fonts/Web437_Wyse700a.woff b/web/static/fonts/Web437_Wyse700a.woff Binary files differnew file mode 100644 index 0000000..e1a8e6c --- /dev/null +++ b/web/static/fonts/Web437_Wyse700a.woff diff --git a/web/static/fonts/Web437_Wyse700b-2y.woff b/web/static/fonts/Web437_Wyse700b-2y.woff Binary files differnew file mode 100644 index 0000000..9003597 --- /dev/null +++ b/web/static/fonts/Web437_Wyse700b-2y.woff diff --git a/web/static/fonts/Web437_Wyse700b.woff b/web/static/fonts/Web437_Wyse700b.woff Binary files differnew file mode 100644 index 0000000..d3ae560 --- /dev/null +++ b/web/static/fonts/Web437_Wyse700b.woff diff --git a/web/static/fonts/Web437_Zenith_Z-100.woff b/web/static/fonts/Web437_Zenith_Z-100.woff Binary files differnew file mode 100644 index 0000000..4fd99a2 --- /dev/null +++ b/web/static/fonts/Web437_Zenith_Z-100.woff diff --git a/web/static/fonts/Web437_Zenith_Z-100_Alt.woff b/web/static/fonts/Web437_Zenith_Z-100_Alt.woff Binary files differnew file mode 100644 index 0000000..21f8c33 --- /dev/null +++ b/web/static/fonts/Web437_Zenith_Z-100_Alt.woff diff --git a/web/static/fonts/WebPlus_AST_PremiumExec.woff b/web/static/fonts/WebPlus_AST_PremiumExec.woff Binary files differnew file mode 100644 index 0000000..ea95d23 --- /dev/null +++ b/web/static/fonts/WebPlus_AST_PremiumExec.woff diff --git a/web/static/fonts/WebPlus_Amstrad_PC-2y.woff b/web/static/fonts/WebPlus_Amstrad_PC-2y.woff Binary files differnew file mode 100644 index 0000000..f0af92f --- /dev/null +++ b/web/static/fonts/WebPlus_Amstrad_PC-2y.woff diff --git a/web/static/fonts/WebPlus_Amstrad_PC.woff b/web/static/fonts/WebPlus_Amstrad_PC.woff Binary files differnew file mode 100644 index 0000000..a89bd9c --- /dev/null +++ b/web/static/fonts/WebPlus_Amstrad_PC.woff diff --git a/web/static/fonts/WebPlus_Cordata_PPC-21.woff b/web/static/fonts/WebPlus_Cordata_PPC-21.woff Binary files differnew file mode 100644 index 0000000..486cbb9 --- /dev/null +++ b/web/static/fonts/WebPlus_Cordata_PPC-21.woff diff --git a/web/static/fonts/WebPlus_Cordata_PPC-400.woff b/web/static/fonts/WebPlus_Cordata_PPC-400.woff Binary files differnew file mode 100644 index 0000000..b36d384 --- /dev/null +++ b/web/static/fonts/WebPlus_Cordata_PPC-400.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_10x11.woff b/web/static/fonts/WebPlus_HP_100LX_10x11.woff Binary files differnew file mode 100644 index 0000000..be23ce0 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_10x11.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_16x12.woff b/web/static/fonts/WebPlus_HP_100LX_16x12.woff Binary files differnew file mode 100644 index 0000000..58c37c7 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_16x12.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_6x8-2x.woff b/web/static/fonts/WebPlus_HP_100LX_6x8-2x.woff Binary files differnew file mode 100644 index 0000000..0e12806 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_6x8-2x.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_6x8.woff b/web/static/fonts/WebPlus_HP_100LX_6x8.woff Binary files differnew file mode 100644 index 0000000..d259282 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_6x8.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_8x8-2x.woff b/web/static/fonts/WebPlus_HP_100LX_8x8-2x.woff Binary files differnew file mode 100644 index 0000000..8258270 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_8x8-2x.woff diff --git a/web/static/fonts/WebPlus_HP_100LX_8x8.woff b/web/static/fonts/WebPlus_HP_100LX_8x8.woff Binary files differnew file mode 100644 index 0000000..f2dca01 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_100LX_8x8.woff diff --git a/web/static/fonts/WebPlus_HP_150_re.woff b/web/static/fonts/WebPlus_HP_150_re.woff Binary files differnew file mode 100644 index 0000000..dc2ec33 --- /dev/null +++ b/web/static/fonts/WebPlus_HP_150_re.woff diff --git a/web/static/fonts/WebPlus_IBM_BIOS-2x.woff b/web/static/fonts/WebPlus_IBM_BIOS-2x.woff Binary files differnew file mode 100644 index 0000000..ffce1c5 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_BIOS-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_BIOS-2y.woff b/web/static/fonts/WebPlus_IBM_BIOS-2y.woff Binary files differnew file mode 100644 index 0000000..c46cbd1 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_BIOS-2y.woff diff --git a/web/static/fonts/WebPlus_IBM_BIOS.woff b/web/static/fonts/WebPlus_IBM_BIOS.woff Binary files differnew file mode 100644 index 0000000..a519221 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_BIOS.woff diff --git a/web/static/fonts/WebPlus_IBM_CGA-2y.woff b/web/static/fonts/WebPlus_IBM_CGA-2y.woff Binary files differnew file mode 100644 index 0000000..6998020 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_CGA-2y.woff diff --git a/web/static/fonts/WebPlus_IBM_CGA.woff b/web/static/fonts/WebPlus_IBM_CGA.woff Binary files differnew file mode 100644 index 0000000..a76d503 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_CGA.woff diff --git a/web/static/fonts/WebPlus_IBM_CGAthin-2y.woff b/web/static/fonts/WebPlus_IBM_CGAthin-2y.woff Binary files differnew file mode 100644 index 0000000..92df543 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_CGAthin-2y.woff diff --git a/web/static/fonts/WebPlus_IBM_CGAthin.woff b/web/static/fonts/WebPlus_IBM_CGAthin.woff Binary files differnew file mode 100644 index 0000000..cf5ebf6 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_CGAthin.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff b/web/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff Binary files differnew file mode 100644 index 0000000..b7808fd --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_8x14-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_8x14.woff b/web/static/fonts/WebPlus_IBM_EGA_8x14.woff Binary files differnew file mode 100644 index 0000000..9bc7e08 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_8x14.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff b/web/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff Binary files differnew file mode 100644 index 0000000..3013cec --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_8x8-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_8x8.woff b/web/static/fonts/WebPlus_IBM_EGA_8x8.woff Binary files differnew file mode 100644 index 0000000..bb39e9f --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_8x8.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff b/web/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff Binary files differnew file mode 100644 index 0000000..6e25b86 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_9x14-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_9x14.woff b/web/static/fonts/WebPlus_IBM_EGA_9x14.woff Binary files differnew file mode 100644 index 0000000..9d81c45 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_9x14.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff b/web/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff Binary files differnew file mode 100644 index 0000000..46885b2 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_9x8-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_EGA_9x8.woff b/web/static/fonts/WebPlus_IBM_EGA_9x8.woff Binary files differnew file mode 100644 index 0000000..0077442 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_EGA_9x8.woff diff --git a/web/static/fonts/WebPlus_IBM_MDA.woff b/web/static/fonts/WebPlus_IBM_MDA.woff Binary files differnew file mode 100644 index 0000000..45639b5 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_MDA.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff b/web/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff Binary files differnew file mode 100644 index 0000000..47cffd4 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_8x14-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_8x14.woff b/web/static/fonts/WebPlus_IBM_VGA_8x14.woff Binary files differnew file mode 100644 index 0000000..d1ee1c9 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_8x14.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff b/web/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff Binary files differnew file mode 100644 index 0000000..a589f63 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_8x16-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_8x16.woff b/web/static/fonts/WebPlus_IBM_VGA_8x16.woff Binary files differnew file mode 100644 index 0000000..466064d --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_8x16.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff b/web/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff Binary files differnew file mode 100644 index 0000000..8746fdc --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x14-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x14.woff b/web/static/fonts/WebPlus_IBM_VGA_9x14.woff Binary files differnew file mode 100644 index 0000000..44cce3e --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x14.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff b/web/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff Binary files differnew file mode 100644 index 0000000..f0ffd03 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x16-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x16.woff b/web/static/fonts/WebPlus_IBM_VGA_9x16.woff Binary files differnew file mode 100644 index 0000000..969fb65 --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x16.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff b/web/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff Binary files differnew file mode 100644 index 0000000..45326ef --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x8-2x.woff diff --git a/web/static/fonts/WebPlus_IBM_VGA_9x8.woff b/web/static/fonts/WebPlus_IBM_VGA_9x8.woff Binary files differnew file mode 100644 index 0000000..44cd4df --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_VGA_9x8.woff diff --git a/web/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff b/web/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff Binary files differnew file mode 100644 index 0000000..ff642ee --- /dev/null +++ b/web/static/fonts/WebPlus_IBM_XGA-AI_12x20.woff diff --git a/web/static/fonts/WebPlus_Rainbow100_re_132.woff b/web/static/fonts/WebPlus_Rainbow100_re_132.woff Binary files differnew file mode 100644 index 0000000..c553760 --- /dev/null +++ b/web/static/fonts/WebPlus_Rainbow100_re_132.woff diff --git a/web/static/fonts/WebPlus_Rainbow100_re_40.woff b/web/static/fonts/WebPlus_Rainbow100_re_40.woff Binary files differnew file mode 100644 index 0000000..c316398 --- /dev/null +++ b/web/static/fonts/WebPlus_Rainbow100_re_40.woff diff --git a/web/static/fonts/WebPlus_Rainbow100_re_66.woff b/web/static/fonts/WebPlus_Rainbow100_re_66.woff Binary files differnew file mode 100644 index 0000000..123af39 --- /dev/null +++ b/web/static/fonts/WebPlus_Rainbow100_re_66.woff diff --git a/web/static/fonts/WebPlus_Rainbow100_re_80.woff b/web/static/fonts/WebPlus_Rainbow100_re_80.woff Binary files differnew file mode 100644 index 0000000..4feb241 --- /dev/null +++ b/web/static/fonts/WebPlus_Rainbow100_re_80.woff diff --git a/web/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff b/web/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff Binary files differnew file mode 100644 index 0000000..b95844e --- /dev/null +++ b/web/static/fonts/WebPlus_Tandy1K-II_200L-2x.woff diff --git a/web/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff b/web/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff Binary files differnew file mode 100644 index 0000000..766fdf5 --- /dev/null +++ b/web/static/fonts/WebPlus_Tandy1K-II_200L-2y.woff diff --git a/web/static/fonts/WebPlus_Tandy1K-II_200L.woff b/web/static/fonts/WebPlus_Tandy1K-II_200L.woff Binary files differnew file mode 100644 index 0000000..a40ea22 --- /dev/null +++ b/web/static/fonts/WebPlus_Tandy1K-II_200L.woff diff --git a/web/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff b/web/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff Binary files differnew file mode 100644 index 0000000..2e376dc --- /dev/null +++ b/web/static/fonts/WebPlus_Tandy1K-II_225L-2y.woff diff --git a/web/static/fonts/WebPlus_Tandy1K-II_225L.woff b/web/static/fonts/WebPlus_Tandy1K-II_225L.woff Binary files differnew file mode 100644 index 0000000..226bfe4 --- /dev/null +++ b/web/static/fonts/WebPlus_Tandy1K-II_225L.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_8x14.woff b/web/static/fonts/WebPlus_ToshibaSat_8x14.woff Binary files differnew file mode 100644 index 0000000..54c3b46 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_8x14.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_8x16.woff b/web/static/fonts/WebPlus_ToshibaSat_8x16.woff Binary files differnew file mode 100644 index 0000000..1ac5866 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_8x16.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_8x8.woff b/web/static/fonts/WebPlus_ToshibaSat_8x8.woff Binary files differnew file mode 100644 index 0000000..dc45c25 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_8x8.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_9x14.woff b/web/static/fonts/WebPlus_ToshibaSat_9x14.woff Binary files differnew file mode 100644 index 0000000..3eac7ac --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_9x14.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_9x16.woff b/web/static/fonts/WebPlus_ToshibaSat_9x16.woff Binary files differnew file mode 100644 index 0000000..b324de1 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_9x16.woff diff --git a/web/static/fonts/WebPlus_ToshibaSat_9x8.woff b/web/static/fonts/WebPlus_ToshibaSat_9x8.woff Binary files differnew file mode 100644 index 0000000..ac2722c --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaSat_9x8.woff diff --git a/web/static/fonts/WebPlus_ToshibaTxL1_8x16.woff b/web/static/fonts/WebPlus_ToshibaTxL1_8x16.woff Binary files differnew file mode 100644 index 0000000..686cea5 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaTxL1_8x16.woff diff --git a/web/static/fonts/WebPlus_ToshibaTxL2_8x16.woff b/web/static/fonts/WebPlus_ToshibaTxL2_8x16.woff Binary files differnew file mode 100644 index 0000000..0526002 --- /dev/null +++ b/web/static/fonts/WebPlus_ToshibaTxL2_8x16.woff diff --git a/web/static/highlight.css b/web/static/highlight.css new file mode 100644 index 0000000..faa5d4d --- /dev/null +++ b/web/static/highlight.css @@ -0,0 +1,7 @@ +/*! + Theme: Synth Midnight Terminal Dark + Author: Michaƫl Ball (http://github.com/michael-ball/) + License: ~ MIT (or more permissive) [via base16-schemes-source] + Maintainer: @highlightjs/core-team + Version: 2021.09.0 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#c1c3c4;background:#050608}.hljs ::selection,.hljs::selection{background-color:#28292a;color:#c1c3c4}.hljs-comment{color:#474849}.hljs-tag{color:#a3a5a6}.hljs-operator,.hljs-punctuation,.hljs-subst{color:#c1c3c4}.hljs-operator{opacity:.7}.hljs-bullet,.hljs-deletion,.hljs-name,.hljs-selector-tag,.hljs-template-variable,.hljs-variable{color:#b53b50}.hljs-attr,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol,.hljs-variable.constant_{color:#ea770d}.hljs-class .hljs-title,.hljs-title,.hljs-title.class_{color:#c9d364}.hljs-strong{font-weight:700;color:#c9d364}.hljs-addition,.hljs-code,.hljs-string,.hljs-title.class_.inherited__{color:#06ea61}.hljs-built_in,.hljs-doctag,.hljs-keyword.hljs-atrule,.hljs-quote,.hljs-regexp{color:#42fff9}.hljs-attribute,.hljs-function .hljs-title,.hljs-section,.hljs-title.function_,.ruby .hljs-property{color:#03aeff}.diff .hljs-meta,.hljs-keyword,.hljs-template-tag,.hljs-type{color:#ea5ce2}.hljs-emphasis{color:#ea5ce2;font-style:italic}.hljs-meta,.hljs-meta .hljs-keyword,.hljs-meta .hljs-string{color:#cd6320}.hljs-meta .hljs-keyword,.hljs-meta-keyword{font-weight:700}
\ No newline at end of file diff --git a/web/static/main.css b/web/static/main.css new file mode 100644 index 0000000..cf1821f --- /dev/null +++ b/web/static/main.css @@ -0,0 +1,607 @@ +:root { + --back: #888; + --front: #E76969; + --green: #69E769; + --site-font: JPN16; + --gradient: linear-gradient(90deg,rgba(255, 100, 255, 1) 0%, rgba(0, 255, 255, 1) 100%); +} + +@font-face { + font-family: Terminal; + src: url( /static/fonts/Web437_IBM_PGC.woff ) +} + +@font-face { + font-family: JPN12; + src: url( /static/fonts/Web437_DOS-V_re_JPN12.woff ) +} + +@font-face { + font-family: JPN16; + src: url( /static/fonts/Web437_DOS-V_re_JPN16.woff ) +} + + +@font-face { + font-family: JPN19; + src: url( /static/fonts/Web437_DOS-V_re_JPN19.woff ) +} + +@font-face { + font-family: JPN24; + src: url( /static/fonts/Web437_DOS-V_re_JPN24.woff ) +} + +@font-face { + font-family: JPN30; + src: url( /static/fonts/Web437_DOS-V_re_JPN30.woff ) +} + +#moneyjsx-root { + display: flex; + flex-direction: column; + padding: 0; + margin: 0; +} +input[type="radio"] { + appearance: none; + background-color: var( --back ); + margin: 0; + font: inherit; + color: #888; + width: 1em; + height: 1em; + border: 0.15em solid currentColor; + border-radius: 50%; + display: grid; + place-content: center; +} + +input[type="radio"]::before { + content: ""; + width: 0.75em; + height: 0.75em; + border-radius: 50%; + transform: scale(0); + transition: 120ms transform ease-in-out; + box-shadow: inset 1em 1em var(--front); +} + +input[type="radio"]:checked::before { + transform: scale(1); +} + +.border-wrapper { + justify-content: center; + flex-direction: row; + align-self: center; + position: relative; + display: flex; + width: 100%; + background: var(--gradient); + padding: 1px 1px 1px 1px; + margin: 0px; +} + +.header { + width: calc(100% - 2px); + background: var(--back); + font-family: JPN24; + font-size: 26px; + height: 38px; + display: flex; + flex-direction: row; +} + +code { + font-family: Code; + font-size: 12px; + white-space: pre-wrap; +} + +html, body { + height: 100%; + overflow: auto; +} + +input { + background-color: #222; + border: 1px solid var(--front); + color: #888; + font-family: Code; +} + +button { + cursor: pointer; + border: 1px solid var(--front); + background-color: #222; + color: #fff; + font-size: 16px; + font-family: var( --site-font ); +} + +textarea { + border: 1px solid var( --front ); + background-color: #222; + color: white; +} + +hr { + border-top: 1px solid #aaa; + background: #ccc; + height: 1px; + width: calc( 100% - 2px ); +} + +a { + text-decoration: none; + background: var( --gradient ); + background-clip: border-box; + text-decoration: underline; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + color: #c6a6ff; +} + + +a:hover { + cursor: pointer; + color: #fff; + background: var( --gradient ); + background-clip: border-box; + text-decoration: underline; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + text-decoration: underline; +} + +.gradient { + background: var( --gradient ); + background-clip: border-box; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; +} + +.nogradient { + -webkit-text-fill-color: white; + -webkit-background-clip: text; + background: none; +} + +a.nogradient { + margin-bottom: 0px; + text-decoration: none; +} + +a.nogradient:hover { + text-decoration: underline; +} + +a.nogradient::after { + content:'.'; + -webkit-text-fill-color: transparent; + color: transparent; + width:calc( 100% - 7px ); + display:inline-block; + z-index: 2; + height: 1px; + margin-top: -2px; + background: #30e8bf; + padding: 0; + background: var( --gradient ); +} + +a.nogradient:hover::after { + background: none; +} + + +body { + background-color: var( --back ); + background-image: url( "/static/networkheaven.png" ); + font-family: var( --site-font ); + font-smooth: never !important; + background-position: center; + background-size: cover; + flex-direction: column; + display: flex; + color: #fff; + margin: 0; +} + + +#page-main { + flex-direction: row; + justify-content: center; + align-items: initial; + text-align: center; + padding: 30px 0 0; + overflow-x: clip; + display: flex; + width: 100%; + z-index: 0; + margin: 0; + margin-bottom: 30px; +} + +#page-main-content { + width: 800px; + min-width: 600px; + background: var( --back ); + border-left: 1px solid #ccc; + border-top: 1px solid #fff; + border-right: 1px solid #888; + border-bottom: 1px solid #222; +} + + +.red { color: #e96969; } +.black { color: #212325; } +.green { color: #10bb10; } +.btn_close { background: #ccc; } + + + +#sidebar { + width: 230px; + height: 100%; + margin-right: 20px; + text-align: left; + background: var( --back ); + border-left: 1px solid #ccc; + border-top: 1px solid #fff; + border-right: 1px solid #888; + border-bottom: 1px solid #222; +} + +#sidebar h3 { + margin-top: 8px; + margin-bottom: 8px; + background: var( --gradient ); + background-clip: border-box; + text-decoration: none; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + width: fit-content; + font-family: JPN24; + font-size: 24px; + margin-left: 4px; +} + +#sidebar h4 { + margin-top: 0px; + margin-bottom: 0px; + width: fit-content; + font-family: JPN16; + font-size: 17px; + margin-left: 4px; +} + + +.sidebar-row { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + padding-right: 4px; +} + +.page-title { + display: flex; + justify-content: center +} + +.page-title h3 { + margin-top: 15px; + margin-bottom: 6px; +} + +@media( max-width: 1100px ) { + #page-main-content { + width: calc( 100% - 20px ) !important; + min-width: unset !important; + margin-right: 20px !important; + margin-left: 0 !important; + }; + + #sidebar { + margin-left: 20px; + } + + .page-title h3 { + margin-top: 8px; + margin-bottom: 0px; + } + + .page-title { + height: 35px; + } + + #sidebar h3 { + margin-top: 8px; + margin-bottom: 8px; + background: var( --gradient ); + background-clip: border-box; + text-decoration: none; + -webkit-text-fill-color: transparent; + -webkit-background-clip: text; + width: fit-content; + font-family: JPN24; + font-size: 24px; + margin-left: 4px; + } + + #sidebar h4 { + font-family: JPN12 !important; + font-size: 13px !important; + } + + .sidebar-row { + margin-bottom: 6px; + } + + #ascii-art { + font-size: 7px !important; + } +} + +@media( max-width: 740px ) { + #sidebar { + width: 200px !important; + } + + #sidebar h4 { + font-size: 10px !important; + } + + #sidebar h3 { + font-size: 20px !important; + } + + .sidebar-row { + margin-bottom: 10px !important; + } + + #ascii-art { + font-size: 6px !important; + } +} + +#ascii-art { + white-space: pre-wrap; + font-family: Code; + font-size: 12px; + overflow:clip; + padding-top: 5px; +} + +#ascii-art span { + padding: 0; + margin: 0; +} + +.groupbox { + border: 1px solid var( --front ); + background-color: var( --back ); + justify-content: flex-start; + align-items: flex-start; + flex-direction: column; + height: fit-content; + min-height: 25px; + min-width: 333px; /* may need to change this for mobile */ + max-width: 600px; + display: flex; + margin: 5px; + z-index: 1; + flex: 1; +} +.groupbox > .grouptitle { + background-color: var( --back ); + font-family: inherit; + position: relative; + margin: 0 0 -15px; /* stupid hardcode, but its: ( title font height - 4 ) * -1 */ + padding: 0px 5px; + font-size: 18px; + z-index: 2; + top: -9px; + left: 5px; +} +.groupbody { + width: calc( 100% - 5px ); + height: calc( 100% - 5px ); + text-align: left; + margin: 5px; +} + +#popup-msgbox { + display: none; + justify-content: center; + align-items: center; + position: absolute; + left: 50%; + min-width: 250px; + border: 1px solid var( --front ); + background: var( --back ); + min-height: 120px; + top: 45vh; + transform: translate( -50%, -50% ); +} + + +.dropdown { + background-color: var( --back ); + border-color: var( --front ); + text-align: center; + color: #888; + height: 24px; + color: #fff; +} + +.dropdown-wrapper { + border: 2px inset var( --front ); + background-color: var( --back ); + justify-content: space-evenly; + flex-direction: column; + align-items: center; + position: absolute; + width: 256px; + z-index: 10; + margin-left: 10px; +} + +.dropdown-inner { + height: 30px; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-evenly; + border-bottom: 1px solid #333; + cursor: pointer; +} + +.rolldownlist { + height: fit-content; + position: relative; + width: 100%; + padding: 0; + margin: 0; +} + +.rolldown { + transition: background-color 0.3s ease-in-out; + border-bottom: 1px solid #E76969; + justify-content: space-between; + flex-direction: column; + display: flex; + height: auto; + width: 100%; +} + +.rolldown:nth-of-type( 1 ) { margin-top: -5px; } +.rolldown:nth-last-of-type( 1 ) { border-bottom: none; } +.rolldown:hover { cursor: pointer; } + +.rolldown-collapsed-container { + overflow: hidden; + padding: 10px; + display: flex; + height: auto; + width: 100%; +} + +.rolldown-collapsed { + float: left; + padding: 0; +} + +.rolldown-expanded-container { + text-align: center; + overflow: hidden; + transition: max-height 0.3s linear; + max-height: 0px; + margin: 0; + padding: 0; +} + +.rolldown-expanded-container.active { + display: flex !important; + max-height: 200px; + height: auto; +} + +.rolldown-expanded { + margin: 20px; +} + +.rolldown-expanded a { color: white; } + +.rolldown-icon-container { + margin-right: 15px; + position: relative; + float: left; + height: fit-content; +} + +.rolldown.active .rolldown-icon-container { + transform: rotate( 90deg ); +} + +.popup { + border: 1px solid var( --front ); + background-color: var( --back ); + box-shadow: 1px 1px 2px black; + justify-content: center; + align-items: center; + align-self: center; + flex-direction: column; + position: absolute; + max-height: 888px; + max-width: 600px; + min-width: 300px; + display: flex; + padding: 20px; + z-index: 5; + width: 85%; + top: 50%; + left: 50%; + transform: translate( -50%, -50% ); +} + +.popup-msg { + border: 1px solid var( --front ); + background-color: var( --back ); + box-shadow: 1px 1px 2px black; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: 1000; + padding: 10px; + display: flex; + flex-direction: column; +} + +.column { + display: flex; + flex-direction: column; +} + +#background-toggle { + position: absolute; + + bottom: 0px; + right: 0px; + background: #888; + border-left: 1px solid #ccc; + border-top: 1px solid #fff; + border-right: 1px solid #888; + border-bottom: 1px solid #222; +} + +#package-entries { + display: flex; + flex-direction: column; + width: 100%; + justify-content: center; + align-items: center; +} + +#package-entries table { + text-align: right; +} + +#package-entries table tr td:first-child { + text-align: left !important; +} + +.package-entry { + display: flex; + width: 80%; + + justify-content: space-between; +} + +.package-entry-date, +.package-entry-time { + padding: 0 10px; +} diff --git a/web/static_elements/networkheaven.png b/web/static/networkheaven.png Binary files differindex 97c2cf5..97c2cf5 100644 --- a/web/static_elements/networkheaven.png +++ b/web/static/networkheaven.png diff --git a/web/static/nh.ico b/web/static/nh.ico Binary files differnew file mode 100644 index 0000000..dca5438 --- /dev/null +++ b/web/static/nh.ico diff --git a/web/static/nh.jpg b/web/static/nh.jpg Binary files differnew file mode 100644 index 0000000..f8d65bb --- /dev/null +++ b/web/static/nh.jpg diff --git a/web/static/nh.png b/web/static/nh.png Binary files differnew file mode 100644 index 0000000..fa8d531 --- /dev/null +++ b/web/static/nh.png diff --git a/web/static/prompts.json b/web/static/prompts.json new file mode 100644 index 0000000..b121306 --- /dev/null +++ b/web/static/prompts.json @@ -0,0 +1,104 @@ +{ + "prompts": [ + "how do i fix a slow pc?", + "explain quantum computing in simple terms.", + "what is the best pizza topping?", + "recommend me a sci-fi movie.", + "how do i make a website?", + "tell me a fun fact.", + "what is the meaning of life?", + "how can i learn programming fast?", + "suggest a book to read.", + "who is elon musk?", + "explain blockchain.", + "what is the capital of japan?", + "give me a random joke.", + "what is 42 in binary?", + "what is the best coding language to learn?", + "how do you make coffee?", + "explain the concept of ai.", + "what is the weather today?", + "who won the last world cup?", + "tell me about black holes.", + "how do i become a millionaire?", + "best way to learn guitar?", + "what is love?", + "tell me about spacex.", + "give me a motivational quote.", + "explain recursion.", + "who is the president of the usa?", + "define cryptocurrency.", + "how to start a startup?", + "tell me a cool fact about space.", + "what are the benefits of meditation?", + "explain 5g technology.", + "suggest a new hobby.", + "how do i improve my memory?", + "what is 2+2?", + "what is a deep learning model?", + "who is albert einstein?", + "how can i become more productive?", + "what is the best anime series?", + "explain the stock market.", + "who invented the internet?", + "what are some good productivity hacks?", + "tell me a mystery fact.", + "what is dark matter?", + "how do i invest in stocks?", + "what is a good workout routine?", + "explain how electricity works.", + "give me a funny meme idea.", + "what is the history of bitcoin?", + "how do i write a resume?", + "recommend a good tv series.", + "explain the theory of relativity.", + "how do i quit a bad habit?", + "tell me something weird.", + "how can i become rich?", + "explain how nuclear energy works.", + "what is the healthiest diet?", + "how to deal with stress?", + "tell me about mars.", + "what is machine learning?", + "give me a random trivia.", + "how does ai work?", + "what is the best way to relax?", + "tell me something inspirational.", + "who invented computers?", + "explain string theory.", + "what is the biggest animal in the ocean?", + "how do i make friends?", + "tell me a conspiracy theory.", + "what is the fastest car in the world?", + "explain schrodinger's cat.", + "what is the best way to sleep better?", + "who wrote the bible?", + "how do i code in python?", + "what is the longest river in the world?", + "how does the brain work?", + "tell me about the moon landing.", + "what is quantum physics?", + "how to create a business plan?", + "what is an nft?", + "explain evolution.", + "how do i save money?", + "who is stephen hawking?", + "what is the best smartphone?", + "what are black holes?", + "how does the universe end?", + "tell me about tesla.", + "how do vaccines work?", + "what is consciousness?", + "explain time travel theories.", + "what is the best way to learn math?", + "how does google work?", + "what is augmented reality?", + "how do i boost my immune system?", + "what is the best travel destination?", + "tell me about dinosaurs.", + "explain the big bang.", + "how do satellites stay in orbit?", + "what is the difference between ai and ml?", + "how do i write a novel?" + ] +}
\ No newline at end of file diff --git a/web/static_elements/f.html b/web/static_elements/f.html deleted file mode 100644 index 308b1d0..0000000 --- a/web/static_elements/f.html +++ /dev/null @@ -1,2 +0,0 @@ -</body> -</html> diff --git a/web/static_elements/h.html b/web/static_elements/h.html deleted file mode 100644 index 5ca6896..0000000 --- a/web/static_elements/h.html +++ /dev/null @@ -1,9 +0,0 @@ -<!doctype html> -<html> -<head> -<meta charset="utf-8"> -<link rel="stylesheet" href="style.css"> -<title>NETWORKHEAVEN</title> -</head> - -<body> diff --git a/web/static_elements/px437_12.ttf b/web/static_elements/px437_12.ttf Binary files differdeleted file mode 100644 index f5ef3a3..0000000 --- a/web/static_elements/px437_12.ttf +++ /dev/null diff --git a/web/static_elements/px437_16.ttf b/web/static_elements/px437_16.ttf Binary files differdeleted file mode 100644 index 84db77b..0000000 --- a/web/static_elements/px437_16.ttf +++ /dev/null diff --git a/web/style.css b/web/style.css deleted file mode 100644 index c235155..0000000 --- a/web/style.css +++ /dev/null @@ -1,73 +0,0 @@ -@font-face { - font-family: "Px437 DOS/V re. JPN12"; - src: url("static_elements/px437_12.ttf"); -} - -@font-face { - font-family: "Px437 DOS/V re. JPN16"; - src: url("static_elements/px437_16.ttf"); -} - -body { - background-image: url("static_elements/networkheaven.png"); - /*background-image: linear-gradient(to right, purple , #008F8F);*/ - background-repeat: no-repeat; - background-size: cover; - text-shadow: 0px 0px 1px rgba(255,0,0,0); - font-smooth: never; - -webkit-font-smoothing : none; -} - -h1 { - text-align: center; - font-family: "Px437 DOS/V re. JPN16", monospace; - color: white; - font-size: 32px; -} - -h3 { - text-align: center; - font-family: "Px437 DOS/V re. JPN16", monospace; - font-size: 16px; - color: white; - margin: 0%; -} - -h4 { - text-align: center; - font-family: "Px437 DOS/V re. JPN12", monospace; - font-size: 12px; - color: white; - margin: 0%; -} - -pre { - font-family: monospace; - font-size: 12px; - color: white; -} - -a { - background: linear-gradient(to right, #FF00FF, #00FFFF); - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - text-decoration:none; - font-weight: bold; - font-size: 16px; - font-family: "Px437 DOS/V re. JPN16", monospace; -} - -hr { - color: rgb(128, 128, 128); -} - -.statusbox { - font-family: monospace; - font-size: 10px; - text-align: center; - color: white; - display: table; - margin-right: auto; - margin-left: auto; - white-space: pre-wrap; -} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..f2f29fc --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,120 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + "moduleResolution": "bundler", + "target": "es2020", + "lib": [ + "ES2017", + "DOM", + "DOM.Iterable", + "ScriptHost" + ], + // "lib": [], + "jsx": "react", + // "experimentalDecorators": true, + // "emitDecoratorMetadata": true, + "jsxFactory": "JSX.createElement", + "jsxFragmentFactory": "JSX.createFragment", + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "es2020", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + "baseUrl": ".", + "paths": { + "*": ["types/*"] + }, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": [ + "./node_modules/@types", + "./types" + ], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + //"checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + // "outDir": "./", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + "strictNullChecks": false, /* When type checking, take into account 'null' and 'undefined'. */ + "strictFunctionTypes": false, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + "strictBindCallApply": false, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + "strictPropertyInitialization": false, /* Check for class properties that are declared but not set in the constructor. */ + "strictBuiltinIteratorReturn": false, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ + "noImplicitThis": false, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/web/types/custom.d.ts b/web/types/custom.d.ts new file mode 100644 index 0000000..b7f740e --- /dev/null +++ b/web/types/custom.d.ts @@ -0,0 +1,8 @@ +declare namespace JSX { + type Element = any; + type ElementClass = any; + interface IntrinsicElements { + [elemName: string]: any; + } +} + diff --git a/web/webpack-dev.config.cjs b/web/webpack-dev.config.cjs new file mode 100644 index 0000000..4fa4b07 --- /dev/null +++ b/web/webpack-dev.config.cjs @@ -0,0 +1,45 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports = { + mode: 'development', + entry: './src/index-page.tsx', + module: { + rules: [ + { + test: /\.tsx?$/, + use: { + loader: 'ts-loader', + options: { + compilerOptions: { + module: 'es2020' + } + } + }, + exclude: /node_modules/, + } + ], + }, + resolve: { + extensions: ['.tsx', '.jsx', ".js"], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist') + }, + plugins: [ + new HtmlWebpackPlugin({ + template: './src/index.html', + }), + new CopyWebpackPlugin({ + patterns: [ + { from: './static/**' } + ] + }) + ], + devServer: { + historyApiFallback: true, + port: 9000, + }, +}; diff --git a/web/webpack-prod.config.cjs b/web/webpack-prod.config.cjs new file mode 100644 index 0000000..e850468 --- /dev/null +++ b/web/webpack-prod.config.cjs @@ -0,0 +1,48 @@ +const path = require('path'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports = { + mode: 'production', + entry: './src/index-page.tsx', + module: { + rules: [ + { + test: /\.tsx?$/, + use: { + loader: 'ts-loader', + options: { + compilerOptions: { + module: 'es2020' + } + } + }, + exclude: /node_modules/, + } + ], + }, + resolve: { + alias: { + jquery: "jquery/slim" + }, + extensions: ['.tsx', '.jsx', ".js"], + }, + output: { + filename: 'bundle.js', + path: path.resolve(__dirname, 'dist'), + }, + plugins: [ + new HtmlWebpackPlugin({ + template: './src/index.html', + }), + new CopyWebpackPlugin({ + patterns: [ + { from: './static/**' } + ] + }) + ], + devServer: { + historyApiFallback: true, + port: 9000, + }, +}; |
