2023-03-06 13:35:09 -06:00
<!DOCTYPE html>
< html >
2023-03-30 09:26:05 -05:00
2023-04-23 17:14:32 -05:00
< head >
2024-11-30 13:30:21 -06:00
< title class = info > Chloe Fontenot's Web Server</ title >
< link rel = "icon" type = "image/x-icon" href = "Chloe_face.jpg" >
< link rel = "icon" href = "Chloe_face.jpg" type = "image/jpeg" />
2023-04-23 17:23:17 -05:00
< meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />
2024-11-30 13:30:21 -06:00
< meta content = "Chloe Fontenot's Web Server" property = "og:title" />
< meta content = "Home Page of Chloe Fontenot's Web Server" property = "og:description" />
< meta content = "https://chloefontenot.org" property = "og:url" />
< meta content = "https://chloefontenot.org/Chloe_face.jpg" property = "og:image" />
2023-04-23 17:14:32 -05:00
< meta content = "#FF0000" data-react-helmet = "true" name = "theme-color" />
2024-02-09 14:21:34 -06:00
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
2023-04-23 17:14:32 -05:00
< link href = "root.css" rel = "stylesheet" >
<!-- Google tag (gtag.js) -->
< script async src = "https://www.googletagmanager.com/gtag/js?id=G-L9QF12JY74" ></ script >
< script >
window . dataLayer = window . dataLayer || [];
function gtag () { dataLayer . push ( arguments ); }
gtag ( 'js' , new Date ());
gtag ( 'config' , 'G-L9QF12JY74' );
</ script >
</ head >
2023-03-06 13:35:09 -06:00
2023-03-06 14:36:22 -06:00
< body class = "center" >
2023-04-23 17:14:32 -05:00
< div id = "wrapper" >
< nav >
< h1 > Hi! Welcome to my Web Server!</ h1 >
< div class = "navborder" >
< a class = "button" href = "index.html" > Home</ a >
2024-08-12 13:05:45 -05:00
< a class = "button" href = "https://discord.gg/nxZUrsBxmp" > My Discord Server</ a >
2024-11-30 13:30:21 -06:00
< a class = "button" href = "https://gitea.chloefontenot.org/CCF_100" > Gitea</ a >
< a class = "button" href = "https://search.chloefontenot.org" > SearXNG Instance</ a >
< a class = "button" href = "https://jellyfin.chloefontenot.org" > Jellyfin</ a >
2024-03-22 19:57:05 -05:00
< div class = "dropdown" />
< button class = "dropbtn button" > Minecraft Server Dynamic Maps</ button >
< div class = "dropdown-content navborder" >
2024-11-30 13:30:21 -06:00
< a class = "button dropdownButton" href = "https://survival.chloefontenot.org" > Survival Server</ a >
< a class = "button dropdownButton" href = "https://creative.chloefontenot.org" > Creative Server</ a >
< a class = "button dropdownButton" href = "https://modded.chloefontenot.org" > Modded Server</ a >
2025-04-01 18:04:51 -05:00
< a class = "button dropdownButton" href = "https://craftoria.chloefontenot.org" > Craftoria Server</ a >
2024-03-22 19:57:05 -05:00
</ div >
</ div >
< div class = "dropdown" >
< button class = "dropbtn button" > WASM Games</ button >
< div class = "dropdown-content navborder" >
2024-03-22 22:24:45 -05:00
< a class = "button dropdownButton" href = "mario" > Mario</ a >< br >
< a class = "button dropdownButton" href = "sonic1" > Sonic 1</ a >< br >
< a class = "button dropdownButton" href = "sonic2" > Sonic 2</ a >< br >
2024-09-03 21:16:45 -05:00
< a class = "button dropdownButton" href = "soniccd" > Sonic CD</ a >< br >
2024-09-03 20:28:44 -05:00
< a class = "button dropdownButton" href = "celeste-wasm" > Celeste</ a >
2024-03-22 19:57:05 -05:00
</ div >
</ div >
2023-04-23 17:14:32 -05:00
</ div >
</ nav >
2023-03-06 18:33:28 -06:00
2024-11-30 13:30:21 -06:00
< h2 class = "aboutme" > About me< img class = "aboutme" src = "Chloe.jpg" alt = "Chloe" height = "5%" width = "5%" ></ h2 >
< p class = "info" > Hi! My name is < mark > Chloe Fontenot.</ mark > I am a college graduate of South Louisiana Communitity College. I am also a software developer. < br > I love writing code! 😁</ p >
2024-04-11 09:30:50 -05:00
< p > This site is hosted on a computer I built myself running Arch Linux and NGINX.</ p >
2023-04-23 17:14:32 -05:00
< p > Pick a design!</ p >
< div id = "selectDesign" >
2024-08-11 19:25:27 -05:00
< input placeholder = "Enter some text here" id = inputText >
2023-04-23 17:14:32 -05:00
< select id = "designSelections" name = "designSelections" >
< option value = "design1" > Design 1</ option >
< option value = "design2" > Design 2 (Triangle)</ option >
< option value = "design3" > Design 3 (Triangle, varient 2)</ option >
< option value = "design4" > Design 4 (Circle)</ option >
< option value = "design5" > Design 5 (Circle, varient 2)</ option >
</ select >
< input class = "button" type = "button" onclick = "drawDesign();" value = "Draw design" >
2024-08-12 12:34:19 -05:00
< input class = "button" id = "toggleEasterEgg" type = "button" onclick = "easterEgg(false);" value = "Disable Easter Egg" style = "display: none;" >
2023-04-23 17:14:32 -05:00
</ div >
2024-08-12 12:59:37 -05:00
< p id = "jsOutput" ></ p >
<!--img id=riitag src="https://tag.rc24.xyz/294976590658666497/tag.max.png" alt="My RiiTag" width=1024-->
< button id = DiscordButton class = button onClick = "toggleDiscordWidget()" > Show Discord Widget</ button >
< div id = "DiscordWidget" style = "display: none" >
2025-02-28 13:55:29 -06:00
< iframe src = "https://discord.com/widget?id=475327576110268466&theme=dark" width = "350" height = "500" allowtransparency = "true" frameborder = "0" sandbox = "allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts" ></ iframe >
2024-08-12 12:59:37 -05:00
</ div >
< p >
< a href = "https://jigsaw.w3.org/css-validator/check/referer" >
< img style = "border:0;width:88px;height:31px" src = "https://jigsaw.w3.org/css-validator/images/vcss"
alt = "Valid CSS!" />
</ a >
</ p >
< footer >
2025-02-28 13:21:11 -06:00
< a href = https://gitea.chloefontenot.org/CCF_100/frontpage class = "button info" > Chloe Fontenot, 2025</ a >
2024-08-12 12:59:37 -05:00
</ footer >
2023-04-23 17:14:32 -05:00
< script >
2024-08-12 12:34:19 -05:00
function getCookie ( cname ) {
let name = cname + "=" ;
let decodedCookie = decodeURIComponent ( document . cookie );
console . log ( decodedCookie );
let ca = decodedCookie . split ( ';' );
for ( let i = 0 ; i < ca . length ; i ++ ) {
let c = ca [ i ];
while ( c . charAt ( 0 ) == ' ' ) {
c = c . substring ( 1 );
}
if ( c . indexOf ( name ) == 0 ) {
return c . substring ( name . length , c . length );
}
}
return "" ;
}
function easterEgg ( easterEggState ) {
console . log ( "Easter egg state is: " + easterEggState );
if ( easterEggState ) {
document . cookie = "easterEggState=true" ;
2024-11-30 13:30:21 -06:00
document . body . style . backgroundImage = "url(https://files.chloefontenot.org/blahaj-bl%C3%A5haj.gif)" ;
2024-08-12 12:34:19 -05:00
document . getElementById ( "toggleEasterEgg" ). style . display = "inline" ;
2024-08-11 17:58:04 -05:00
// change name :3
let siteData = document . getElementsByClassName ( "info" );
console . log ( siteData );
for ( let i = 0 ; i < siteData . length ; ++ i ) {
console . log ( siteData [ i ]);
2024-11-30 13:30:21 -06:00
//siteData[i].innerHTML = siteData[i].innerHTML.replace("Chloe", "Chloe");
2024-08-11 17:58:04 -05:00
}
2024-08-12 12:34:19 -05:00
} else {
document . cookie = "easterEggState=false" ;
document . body . style . backgroundImage = "url(space.gif)" ;
document . getElementById ( "toggleEasterEgg" ). style . display = "none" ;
// change name :3
let siteData = document . getElementsByClassName ( "info" );
console . log ( siteData );
for ( let i = 0 ; i < siteData . length ; ++ i ) {
console . log ( siteData [ i ]);
2024-11-30 13:30:21 -06:00
//siteData[i].innerHTML = siteData[i].innerHTML.replace("Chloe", "Chloe");
2024-08-12 12:34:19 -05:00
}
}
}
easterEgg (( /true/ ). test ( getCookie ( "easterEggState" )));
function drawDesign () {
let event = document . getElementById ( 'designSelections' );
let value = event . options [ event . selectedIndex ]. value ;
//alert(value);
let inputText = document . getElementById ( "inputText" ). value ;
if ( inputText . includes ( "🏳️⚧️" )) {
inputText += " Trans rights are human rights! 🏳️⚧️" ;
easterEgg ( true );
2024-08-11 12:42:35 -05:00
}
2023-04-23 17:14:32 -05:00
let designText ;
switch ( value ) {
case "design1" :
designText = design1 ( inputText );
break ;
case "design2" :
designText = design2 ( inputText );
break ;
case "design3" :
designText = design3 ( inputText );
break ;
case "design4" :
designText = design4 ( inputText );
break ;
case "design5" :
designText = design5 ( inputText );
break ;
}
document . getElementById ( "jsOutput" ). innerHTML = designText ;
}
2023-03-06 13:35:09 -06:00
2023-04-23 17:14:32 -05:00
function design1 ( input ) {
console . log ( "Running design1..." );
let outputString ;
let startEnd = "" ;
for ( let i = 0 ; i < input . length + 2 ; i ++ ) {
startEnd += "*" ;
}
outputString = startEnd + "<br>" ;
outputString += "*" + "<br>" ;
outputString += "* " + input + "<br>" ;
outputString += "*" + "<br>" ;
outputString += startEnd ;
return outputString ;
}
function design2 ( input ) {
console . log ( "Running design2..." );
let outputString ;
let height = ( input . length * 2 ) + 6 ;
let mid = Math . trunc ( height / 2 ) + 1 ;
if ( height % 2 == 0 ) {
height ++ ;
}
outputString = "" ;
for ( let i = 0 ; i < height ; i ++ ) {
if ( mid == i ) { //Determine if we're in the middle of the triangle
outputString += "**" + input + "**" ;
} else {
for ( let j = 0 ; j < i ; j ++ ) {
outputString += "*" ;
}
}
outputString += "<br>" ;
}
return outputString ;
}
function design3 ( input ) {
console . log ( "Running design3..." );
let outputString ;
let height = ( input . length * 2 ) + 6 ;
let mid = Math . trunc ( height / 2 ) + 1 ;
if ( height % 2 == 0 ) {
height ++ ;
}
outputString = "" ;
if ( mid % 2 == 1 ) { // Skip a line if odd
var subOffset = 1 ;
var addOffset = 0 ;
} else {
var subOffset = 0 ;
var addOffset = 1 ;
}
for ( let i = 0 ; i < mid - addOffset ; i ++ ) {
for ( let j = 0 ; j < i ; j ++ ) {
if ( i % 2 == 1 ) {
if ( i != ( mid - 1 )) {
if ( i == 0 || ( j == 0 || j == ( i - 1 ))) { // Check if we're at the beginning or end of the line
outputString += "*" ;
} else {
outputString += " " ;
}
}
}
}
outputString += "<br>" ;
}
outputString += "* " + input + " *<br>" ;
for ( let i = mid - subOffset ; i > 0 ; i -- ) {
for ( let j = 0 ; j < i ; j ++ ) {
if ( i % 2 == 1 ) {
if ( j != ( mid - 1 ) || ( j != mid )) {
if (( i == 0 || ( j == 0 || j == ( i - 1 )))) { // Check if we're at the beginning or end of the line
outputString += "*" ;
} else {
outputString += " " ;
}
}
}
}
outputString += "<br>" ;
}
return outputString ;
}
2023-03-07 17:58:34 -06:00
2023-04-23 17:14:32 -05:00
function design4 ( input ) {
let outputString = "" ;
let outputLine = "" ;
let radius = ( input . length + 1 );
let mid = radius ;
if ( mid % 2 == 1 ) {
var spaceOffset = " " ;
} else {
var spaceOffset = "" ;
}
console . log ( radius , mid );
// dist represents distance to the center
let dist = parseFloat ( 0 );
let space = ""
for ( let i = 0 ; i < ( input . length / 2 ); ++ i ) {
space += " " ;
}
// for horizontal movement
var i ;
var j ;
let lineHasInput = false ;
for ( i = 0 ; i <= 2 * radius ; i ++ ) {
lineHasInput = false ;
if ( Math . trunc ( i ) != mid ) {
// for vertical movement
for ( j = 0 ; j <= 2 * radius ; j ++ ) {
dist = Math . sqrt (
(( i - radius ) * ( i - radius ) * 4 ) + // (* 4) accounts for the offset between lines
( j - radius ) * ( j - radius )
);
//console.log(i, j, radius, dist);
// dist should be in the range (radius - 0.5)
// and (radius + 0.5) to print stars(*)
2023-03-22 17:56:20 -05:00
2023-03-07 17:58:34 -06:00
2023-04-23 17:14:32 -05:00
if ( dist > radius - 1 && dist < radius + 1 ) { //&& dist > radius - 1
lineHasInput = true ;
outputLine += "·" ; //zero-width space
} else {
outputLine += " " ;
}
}
} else {
lineHasInput = true ;
outputLine += "·" + space + input + space + spaceOffset + "·" ; //zero-width space
}
2023-03-07 17:58:34 -06:00
2023-04-23 17:14:32 -05:00
//console.log(i, j, outputLine);
if ( lineHasInput ) {
2024-08-12 12:59:37 -05:00
//console.log("outputLine", outputLine);
2023-04-23 17:14:32 -05:00
outputString += outputLine + "<br>" ;
}
outputLine = "" ;
}
return outputString ;
}
2024-02-17 23:41:08 -06:00
2023-04-23 17:14:32 -05:00
var charIterateState ;
2024-02-17 23:41:08 -06:00
const surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g ;
2023-04-23 17:14:32 -05:00
function charIterate ( input ) {
2024-02-17 23:41:08 -06:00
let stringLength = ( input . length - 1 );
let temp = input . split ( '' );
for ( let i = 0 ; i < stringLength ; ++ i ) {
let compareString = temp . join ( "" );
let stringEval = undefined , stringEvalIndex = undefined ;
while (( stringEval = surrogatePairs . exec ( compareString )) !== null ) {
stringEvalIndex = stringEval . index ;
2024-08-12 12:59:37 -05:00
//console.log("emoji is at index", stringEvalIndex);
2023-04-23 17:14:32 -05:00
}
2024-02-17 23:41:08 -06:00
if ( stringEvalIndex == i ) {
stringLength -- ;
temp . splice ( i , 1 );
console . log ( "Decreasing stringLength variable to" , stringLength );
}
}
if ( charIterateState == undefined ) {
//console.log("undefined! setting to zero");
charIterateState = 0 ;
} else {
if ( charIterateState < stringLength ) {
charIterateState ++ ;
} else {
charIterateState = 0 ;
2023-04-23 17:14:32 -05:00
}
2024-02-17 23:41:08 -06:00
}
//console.log(charIterateState, fixedCharAt(input, charIterateState));
return charIterateState ;
}
2023-03-06 13:35:09 -06:00
2023-04-23 17:14:32 -05:00
function design5 ( input ) {
2024-02-17 23:41:08 -06:00
charIterateState = undefined ;
2023-04-23 17:14:32 -05:00
let outputString = "" ;
let outputLine = "" ;
let radius = ( input . length );
let mid = radius ;
if ( mid % 2 == 1 ) {
var spaceOffset = " " ;
2024-02-17 23:41:08 -06:00
} else {
var spaceOffset = "" ;
2023-04-23 17:14:32 -05:00
}
2024-08-12 12:59:37 -05:00
//console.log(radius, mid);
2024-02-17 23:41:08 -06:00
// dist represents distance to the center
let dist = parseFloat ( 0 );
let space = ""
for ( let i = 0 ; i < ( input . length / 2 ); ++ i ) {
space += " " ;
}
// for horizontal movement
var i ;
var j ;
let lineHasInput = false ;
for ( i = 0 ; i <= 2 * radius ; i ++ ) {
lineHasInput = false ;
if ( Math . trunc ( i ) != mid ) {
// for vertical movement
for ( j = 0 ; j <= 2 * radius ; j ++ ) {
dist = Math . sqrt (
(( i - radius ) * ( i - radius ) * 4 ) + // (* 4) accounts for the offset between lines
( j - radius ) * ( j - radius )
);
//console.log(i, j, radius, dist);
// dist should be in the range (radius - 0.5)
// and (radius + 0.5) to print stars(*)
if ( dist > radius - 1 && dist < radius + 1 ) { //&& dist > radius - 1
lineHasInput = true ;
outputLine += "" + fixedCharAt ( input , charIterate ( input )); //zero-width space
} else {
outputLine += " " ;
}
}
} else {
lineHasInput = true ;
outputLine += fixedCharAt ( input , charIterate ( input )) + space + input + space + spaceOffset + fixedCharAt ( input , charIterate ( input ));
}
//console.log(i, j, outputLine);
if ( lineHasInput ) {
outputString += outputLine + "<br>" ;
}
outputLine = "" ;
}
return outputString ;
}
// Code from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt
function fixedCharAt ( str , idx ) {
str = String ( str );
//const surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
while ( surrogatePairs . exec ( str ) !== null ) {
const lastIdx = surrogatePairs . lastIndex ;
if ( lastIdx - 2 < idx ) {
idx ++ ;
} else {
break ;
}
}
if ( idx >= str . length || idx < 0 ) {
return "" ;
}
let ret = str . charAt ( idx );
if (
/[\uD800-\uDBFF]/ . test ( ret ) &&
/[\uDC00-\uDFFF]/ . test ( str . charAt ( idx + 1 ))
) {
// Go one further, since one of the "characters" is part of a surrogate pair
ret += str . charAt ( idx + 1 );
}
return ret ;
}
2024-04-18 19:51:12 -05:00
function toggleDiscordWidget () {
var widget = document . getElementById ( "DiscordWidget" );
var button = document . getElementById ( "DiscordButton" );
if ( widget . style . display === "none" ) {
widget . style . display = "block" ;
button . textContent = "Hide Discord Widget" ;
} else {
widget . style . display = "none" ;
button . textContent = "Show Discord Widget" ;
}
}
2023-04-23 17:14:32 -05:00
</ script >
</ div >
2023-03-06 16:28:32 -06:00
</ body >
2023-03-06 13:35:09 -06:00
2023-07-31 08:07:48 -05:00
</ html >