mirror of
https://github.com/the-spellman/old-site
synced 2024-10-29 23:47:52 +00:00
Add files via upload
This commit is contained in:
parent
34037f20ff
commit
88b442ce3c
34 changed files with 1348 additions and 2 deletions
|
@ -1,2 +1,3 @@
|
|||
# sammy-lord.github.io
|
||||
My site
|
||||
# resume
|
||||
|
||||
made to be portable and able to be copied to any server, you can even just open the index.html if you're not running a flatpak browser!
|
||||
|
|
BIN
ad.gif
Normal file
BIN
ad.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 38 KiB |
11
dixie-game.html
Normal file
11
dixie-game.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Hello, Tiger!</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello, Tiger!</h1>
|
||||
<p>Free-play White Tiger Slots</p>
|
||||
<iframe width="1000px" height="500px" src="https://funkygames.io/demo?gameCode=102636&lang=EN"></iframe>
|
||||
</body>
|
||||
</html>
|
0
favicon.gif
Normal file
0
favicon.gif
Normal file
0
favicon.ico
Normal file
0
favicon.ico
Normal file
BIN
flashcert.pdf
Normal file
BIN
flashcert.pdf
Normal file
Binary file not shown.
449
frontendjs-example/frontend.js
Normal file
449
frontendjs-example/frontend.js
Normal file
|
@ -0,0 +1,449 @@
|
|||
// Created by Samuel Lord (NodeMixaholic/Sparksammy)
|
||||
// Now Maintained by Maxwell (GOrwell1984)
|
||||
// Licensed under Samuel Public License with <3
|
||||
|
||||
// Functions for commonly used elements
|
||||
|
||||
// Get element by ID
|
||||
function getElementById(elementID) {
|
||||
return document.getElementById(elementID)
|
||||
}
|
||||
|
||||
//Convert markdown to HTML and back
|
||||
function markdownToHTML(markdown) {
|
||||
// Replace headers (h1, h2, h3) with corresponding HTML tags
|
||||
markdown = markdown.replace(/^# (.*$)/gim, '<h1>$1</h1>');
|
||||
markdown = markdown.replace(/^## (.*$)/gim, '<h2>$1</h2>');
|
||||
markdown = markdown.replace(/^### (.*$)/gim, '<h3>$1</h3>');
|
||||
|
||||
// Replace bold and italic text with corresponding HTML tags
|
||||
markdown = markdown.replace(/\*\*(.*)\*\*/gim, '<b>$1</b>');
|
||||
markdown = markdown.replace(/\*(.*)\*/gim, '<i>$1</i>');
|
||||
|
||||
// Replace unordered list items with HTML list tags
|
||||
markdown = markdown.replace(/\* (.*?)(\n|$)/gim, '<li>$1</li>');
|
||||
|
||||
// Replace inline code with HTML <code> tag
|
||||
markdown = markdown.replace(/`(.*?)`/gim, '<code>$1</code>');
|
||||
|
||||
// Replace blockquotes with HTML <blockquote> tag
|
||||
markdown = markdown.replace(/^\s*> (.*)$/gim, '<blockquote>$1</blockquote>');
|
||||
|
||||
// Replace horizontal rules with HTML <hr> tag
|
||||
markdown = markdown.replace(/^\s*[-*_]{3,}\s*$/gim, '<hr>');
|
||||
|
||||
// Replace line breaks with HTML <br> tag
|
||||
markdown = markdown.replace(/\n$/gim, '<br>');
|
||||
|
||||
// Replace images with HTML <img> tag
|
||||
markdown = markdown.replace(/!\[(.*?)\]\((.*?)\)/gim, '<img alt="$1" src="$2">');
|
||||
|
||||
// Replace links with HTML <a> tag
|
||||
markdown = markdown.replace(/\[(.*?)\]\((.*?)\)/gim, '<a href="$2">$1</a>');
|
||||
|
||||
markdown = markdown.replaceAll("<ol><ul>", "")
|
||||
|
||||
markdown = markdown.replaceAll("</ul></ol>", "")
|
||||
|
||||
return markdown;
|
||||
}
|
||||
|
||||
function htmlToMarkdown(html) {
|
||||
// Replace headers (h1, h2, h3) with corresponding Markdown tags
|
||||
html = html.replace(/<h1>(.*?)<\/h1>/gim, '# $1');
|
||||
html = html.replace(/<h2>(.*?)<\/h2>/gim, '## $1');
|
||||
html = html.replace(/<h3>(.*?)<\/h3>/gim, '### $1');
|
||||
|
||||
// Replace bold and italic text with corresponding Markdown tags
|
||||
html = html.replace(/<b>(.*?)<\/b>/gim, '**$1**');
|
||||
html = html.replace(/<i>(.*?)<\/i>/gim, '*$1*');
|
||||
|
||||
// Replace unordered list items with Markdown list tags
|
||||
html = html.replace(/<ul>(.*?)<\/ul>/gim, function(match, p1) {
|
||||
let listItems = p1.trim().split('</li>');
|
||||
listItems.pop();
|
||||
listItems = listItems.map(item => '* ' + item.trim().replace(/<li>/gim, '')).join('\n');
|
||||
return listItems;
|
||||
});
|
||||
|
||||
// Replace ordered list items with Markdown list tags
|
||||
html = html.replace(/<li>(.*?)<\/li>/gim, '* $1\n');
|
||||
|
||||
// Replace inline code with Markdown backticks
|
||||
html = html.replace(/<code>(.*?)<\/code>/gim, '`$1`');
|
||||
|
||||
// Replace blockquotes with Markdown blockquote tag
|
||||
html = html.replace(/<blockquote>(.*?)<\/blockquote>/gim, '> $1');
|
||||
|
||||
// Replace horizontal rules with Markdown horizontal rules
|
||||
html = html.replace(/<hr>/gim, '---');
|
||||
|
||||
// Replace line breaks with Markdown line breaks
|
||||
html = html.replace(/<br>/gim, '\n');
|
||||
|
||||
// Replace images with Markdown image syntax
|
||||
html = html.replace(/<img alt="(.*?)" src="(.*?)">/gim, '![$1]($2)');
|
||||
|
||||
// Replace links with Markdown link syntax
|
||||
html = html.replace(/<a href="(.*?)">(.*?)<\/a>/gim, '[$2]($1)');
|
||||
|
||||
html = html.replaceAll("<ol><ul>", "")
|
||||
|
||||
html = html.replaceAll("</ul></ol>", "")
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
// Generalized element creation
|
||||
function createElement(tagName, elementID, attributes = {}) {
|
||||
const element = document.createElement(tagName);
|
||||
element.id = elementID;
|
||||
for (const [name, value] of Object.entries(attributes)) {
|
||||
element.setAttribute(name, value);
|
||||
}
|
||||
document.body.appendChild(element);
|
||||
return element;
|
||||
}
|
||||
|
||||
function createDiv(elementID) {
|
||||
createElement("div", elementID);
|
||||
}
|
||||
|
||||
function createParagraph(elementID, text) {
|
||||
let elem = createElement("p", elementID);
|
||||
elem.innerText = `${text}`
|
||||
return elem
|
||||
}
|
||||
|
||||
function initHead(pageTitle = "") {
|
||||
// Create head element
|
||||
let head = document.createElement("head");
|
||||
|
||||
// Create title element
|
||||
let titleElement = document.createElement("title");
|
||||
titleElement.textContent = pageTitle;
|
||||
|
||||
// Create link element for app icon
|
||||
let appIcon = document.createElement("link");
|
||||
appIcon.rel = "apple-touch-icon";
|
||||
appIcon.sizes = "180x180";
|
||||
appIcon.href = "icon.png";
|
||||
|
||||
// Create link element for favicon
|
||||
let favicon = document.createElement("link");
|
||||
favicon.rel = "icon";
|
||||
favicon.type = "image/png";
|
||||
favicon.href = "icon.png";
|
||||
|
||||
// Append title, app icon, and favicon to the head element
|
||||
head.appendChild(titleElement);
|
||||
head.appendChild(appIcon);
|
||||
head.appendChild(favicon);
|
||||
|
||||
// Append head element to the document
|
||||
document.documentElement.insertBefore(head, document.documentElement.firstChild);
|
||||
}
|
||||
|
||||
|
||||
function initBody(bodyID = "body") {
|
||||
// Create a new body element with the desired id
|
||||
const newBody = document.createElement("body");
|
||||
newBody.id = bodyID;
|
||||
|
||||
// Get a reference to the existing body element (if any)
|
||||
const oldBody = document.body;
|
||||
|
||||
// Replace the existing body (if present) with the new one
|
||||
if (oldBody) {
|
||||
document.documentElement.replaceChild(newBody, oldBody);
|
||||
} else {
|
||||
// Simply append the new body if none exists
|
||||
document.documentElement.appendChild(newBody);
|
||||
}
|
||||
}
|
||||
|
||||
function createButton(elementID, text, attributes = {}) {
|
||||
let elem = createElement("button", elementID);
|
||||
elem.innerText = `${text}`
|
||||
for (const [name, value] of Object.entries(attributes)) {
|
||||
elem.setAttribute(name, value);
|
||||
}
|
||||
return elem;
|
||||
}
|
||||
|
||||
// Insert element with ID to element with ID
|
||||
function insertElementIntoId(elementIdOuter, elementIdSelf, tagName) {
|
||||
const element = document.createElement(tagName);
|
||||
element.id = elementIdSelf;
|
||||
for (const [name, value] of Object.entries(attributes)) {
|
||||
element.setAttribute(name, value);
|
||||
}
|
||||
getElementById(elementIdOuter).appendChild(element);
|
||||
return element;
|
||||
}
|
||||
|
||||
// Insert HTML to element with ID
|
||||
function insertHTMLIntoId(elementIdOuter, html) {
|
||||
getElementById(elementIdOuter).innerHTML = `${String(html)}`;
|
||||
return element;
|
||||
}
|
||||
|
||||
function changeAttributes(element, attributes = {}) {
|
||||
for (const [name, value] of Object.entries(attributes)) {
|
||||
element.setAttribute(name, value);
|
||||
}
|
||||
}
|
||||
|
||||
function createImage(elementID, src) {
|
||||
return createElement("img", elementID, { src: src });
|
||||
}
|
||||
|
||||
// Get URL parameters
|
||||
function getURLParameters() {
|
||||
return new URLSearchParams(window.location.search);
|
||||
}
|
||||
|
||||
// Read file contents
|
||||
function readFileContents(file) {
|
||||
file = file.toString();
|
||||
const fileToRead = new File([""], file);
|
||||
const reader = new FileReader();
|
||||
return new Promise((resolve, reject) => {
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = () => reject(reader.error);
|
||||
reader.readAsText(fileToRead, "UTF-8");
|
||||
});
|
||||
}
|
||||
|
||||
// Read data file as data URL
|
||||
function readDataFile(file) {
|
||||
file = file.toString();
|
||||
const fileToRead = new File([""], file);
|
||||
const reader = new FileReader();
|
||||
return new Promise((resolve, reject) => {
|
||||
reader.onload = () => resolve(reader.result);
|
||||
reader.onerror = () => reject(reader.error);
|
||||
reader.readAsDataURL(fileToRead);
|
||||
});
|
||||
}
|
||||
|
||||
function writeToBody(html) {
|
||||
document.body.innerHTML += html.toString();
|
||||
}
|
||||
|
||||
function overwriteBody(html) {
|
||||
document.body.innerHTML = html.toString();
|
||||
}
|
||||
|
||||
function randomPOS(elementID) {
|
||||
const top = Math.floor(Math.random() * 90);
|
||||
const left = Math.floor(Math.random() * 90);
|
||||
document.getElementById(elementID).style.top = `${top}%`;
|
||||
document.getElementById(elementID).style.left = `${left}%`;
|
||||
}
|
||||
|
||||
function pos(elementID, x, y) {
|
||||
document.getElementById(elementID).style.top = `${y}%`;
|
||||
document.getElementById(elementID).style.left = `${x}%`;
|
||||
}
|
||||
|
||||
// Select a random value in an array (handles non-arrays)
|
||||
function randomSelectArray(array) {
|
||||
if (Array.isArray(array)) {
|
||||
const randomIndex = Math.floor(Math.random() * array.length);
|
||||
return array[randomIndex];
|
||||
} else {
|
||||
console.log(`Error: ${array} is not an Array!`);
|
||||
return null; // Or throw an error
|
||||
}
|
||||
}
|
||||
|
||||
function sleep(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
}
|
||||
|
||||
async function asyncSleep(ms) {
|
||||
await new Promise(r => setTimeout(r, ms));
|
||||
}
|
||||
|
||||
// Check if a variable is a function
|
||||
function isFunction(item) {
|
||||
return typeof item === 'function';
|
||||
}
|
||||
|
||||
function applyCSS(elementID, prop, value) {
|
||||
document.getElementById(elementID).style[prop] = value;
|
||||
}
|
||||
|
||||
function writeTimeAndDate(elementID, hourFormat) {
|
||||
const element = document.getElementById(elementID);
|
||||
const date = new Date();
|
||||
const locale = hourFormat === 24 ? "en-GB" : "en-US";
|
||||
element.innerText = date.toLocaleString(locale);
|
||||
}
|
||||
|
||||
function writeText(elementID, str) {
|
||||
document.getElementById(elementID).innerText = String(str);
|
||||
}
|
||||
|
||||
function writeHTML(elementID, str) {
|
||||
document.getElementById(elementID).innerHTML = String(str);
|
||||
}
|
||||
|
||||
function clearPage() {
|
||||
document.body.innerHTML = "";
|
||||
}
|
||||
|
||||
function createList(listID, items) {
|
||||
const list = document.createElement("ul");
|
||||
list.id = listID;
|
||||
document.body.appendChild(list);
|
||||
items.forEach(item => (list.innerHTML += `<li>${item}</li>`));
|
||||
}
|
||||
|
||||
function addToList(listID, jsArray) {
|
||||
let listParent = document.getElementById(listID);
|
||||
jsArray.forEach(item => {
|
||||
listParent.innerHTML += `<li>${item}</li>`;
|
||||
});
|
||||
}
|
||||
|
||||
// Gets the value of an attribute
|
||||
// Example: getAttribute(document.getElementById("link"), "href");
|
||||
function getAttribute(element, attribute) {
|
||||
let result = element.getAttribute(attribute);
|
||||
return result;
|
||||
}
|
||||
|
||||
// Show/Hide Elements
|
||||
// Example: hideShow(element)
|
||||
function hideShow(element) {
|
||||
if (element.style.display == 'none') {
|
||||
element.style.display = '';
|
||||
} else{
|
||||
element.style.display = 'none';
|
||||
}
|
||||
}
|
||||
|
||||
// Example: fadeOut(element, 1000)
|
||||
function fadeOut(element, ms) {
|
||||
let elem = getElementById(element);
|
||||
ms = parseInt(ms);
|
||||
for (i = 0; i < (ms + 1); i++) {
|
||||
elem.style.opacity -= (i / 100);
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Example: fadeIn(element, 1000);
|
||||
function fadeIn(element, ms) {
|
||||
elem = getElementById(element);
|
||||
elem.style.opacity = 0;
|
||||
ms = parseInt(ms);
|
||||
for (i = 0; i < (ms + 1); i++) {
|
||||
elem.style.opacity += (i / 100);
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
|
||||
function spin(elementID, duration) {
|
||||
const element = document.getElementById(elementID);
|
||||
if (!element) {
|
||||
console.error(`Element with ID '${elementID}' not found.`);
|
||||
return;
|
||||
}
|
||||
|
||||
let start;
|
||||
const animate = (timestamp) => {
|
||||
if (!start) start = timestamp;
|
||||
const elapsed = timestamp - start;
|
||||
const rotation = (elapsed / duration) * 360;
|
||||
element.style.transform = `rotate(${rotation}deg)`;
|
||||
|
||||
if (elapsed < duration) {
|
||||
requestAnimationFrame(animate);
|
||||
} else {
|
||||
start = null;
|
||||
element.style.transform = 'none'; // Reset transform after animation completes
|
||||
}
|
||||
};
|
||||
|
||||
requestAnimationFrame(animate);
|
||||
}
|
||||
|
||||
|
||||
//Eval alternative
|
||||
//Example: exec("alert('Hello, world!')")
|
||||
function exec(jsCode) {
|
||||
let js = jsCode.toString();
|
||||
Function(js)()
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function readInternetText(url) {
|
||||
var request = new XMLHttpRequest(); // Create a new XMLHttpRequest object
|
||||
request.open('GET', url, false); // Open the request with synchronous mode
|
||||
request.send(null); // Send the request with no additional data
|
||||
|
||||
if (request.status === 200) { // Check if the request was successful
|
||||
return request.responseText; // Return the response text
|
||||
} else {
|
||||
return 'Error: ' + request.status; // Return an error message if the request failed
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function requir3(jsURL) {
|
||||
let req = readInternetText(jsURL);
|
||||
exec(req);
|
||||
}
|
||||
|
||||
// Example: getFileSize(path/to/file)
|
||||
function getFileSize(file) {
|
||||
file = file.toString();
|
||||
file = new File([""], file);
|
||||
return file.getFileSize;
|
||||
}
|
||||
|
||||
function lastModified(file) {
|
||||
file = file.toString();
|
||||
file = new File([""], file);
|
||||
return file.lastModified;
|
||||
}
|
||||
|
||||
// Example: playAudio("https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3", 0.4);
|
||||
function playAudio(audio, speed) {
|
||||
let ma = new Audio(audio);
|
||||
ma.playbackRate = speed;
|
||||
ma.play();
|
||||
}
|
||||
|
||||
// Example: redir(url);
|
||||
function redir(url) {
|
||||
window.location.href = url.toString();
|
||||
}
|
||||
|
||||
// Function to import Google Fonts via name
|
||||
function importGoogleFont(fontName) {
|
||||
// Create a new link element
|
||||
const link = document.createElement('link');
|
||||
|
||||
// Set the rel attribute to 'stylesheet'
|
||||
link.rel = 'stylesheet';
|
||||
|
||||
// Set the href attribute to the Google Fonts URL with the specified font name
|
||||
link.href = `https://fonts.googleapis.com/css?family=${fontName.replace(' ', '+')}`;
|
||||
|
||||
// Append the link element to the head of the document
|
||||
document.head.appendChild(link);
|
||||
}
|
||||
|
||||
|
||||
requir3("https://cdn.jsdelivr.net/npm/gun/gun.js") //Add Gun.JS support.
|
||||
|
||||
function initGun(relays = []) {
|
||||
return Gun(relays)
|
||||
}
|
29
frontendjs-example/index.html
Normal file
29
frontendjs-example/index.html
Normal file
|
@ -0,0 +1,29 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<script src="frontend.js"></script>
|
||||
<script>
|
||||
initHead("FrontendJS Example")
|
||||
initBody()
|
||||
clearPage()
|
||||
writeHTML("body", markdownToHTML(`# Hello world!
|
||||
|
||||
This is an example of how to properly use Frontend JS.
|
||||
Also it's a test if things are working.
|
||||
|
||||
* Air
|
||||
* Water
|
||||
* Fire
|
||||
* Dirt
|
||||
* ####ing magnets, how do they work!?!
|
||||
`))
|
||||
createParagraph("paragraphLorum", `Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed pulvinar nisl eu risus tincidunt, non aliquet metus tempor. Duis ac tortor commodo, venenatis leo at, consectetur nulla.`)
|
||||
createImage("moz", "https://upload.wikimedia.org/wikipedia/commons/5/5c/Mozilla_dinosaur_head_logo.png")
|
||||
applyCSS("moz", "width", "25%")
|
||||
let dino = createButton("dino", "dino sound")
|
||||
changeAttributes(dino, {"onclick": "spin('moz', 1000); playAudio(`https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3`, 0.4)"})
|
||||
applyCSS("body", "background", "black")
|
||||
applyCSS("body", "color", "lime")
|
||||
importGoogleFont('Roboto');
|
||||
applyCSS("body", "font-family", "'Roboto', sans-serif")
|
||||
</script>
|
||||
</html>
|
42
generate-spl/index.html
Normal file
42
generate-spl/index.html
Normal file
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SPL Generator</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Samuel Public License Generator</h2>
|
||||
|
||||
<form id="splForm">
|
||||
<label for="name">Your Name or Organization:</label>
|
||||
<textarea id="name" rows="2" cols="30"></textarea>
|
||||
|
||||
<button type="button" onclick="generateSPL()">Generate SPL</button>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function generateSPL() {
|
||||
// Get the name from the textarea
|
||||
const name = document.getElementById('name').value;
|
||||
|
||||
// Fetch the latest SPL template
|
||||
fetch('https://raw.githubusercontent.com/sam-sneed/spl-template/main/spl')
|
||||
.then(response => response.text())
|
||||
.then(template => {
|
||||
// Replace placeholders with actual values
|
||||
const fullNumericYear = new Date().getFullYear();
|
||||
const splText = template.replace('FULL-NUMERIC-YEAR', fullNumericYear).replace('YOUR-REAL-NAME-OR-ORG', name);
|
||||
|
||||
// Set the body content to the generated SPL text
|
||||
document.body.innerText = `${splText}`;
|
||||
})
|
||||
.catch(error => console.error('Error fetching SPL template:', error));
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
3
html/README.md
Normal file
3
html/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# resume
|
||||
|
||||
made to be portable and able to be copied to any server, you can even just open the index.html if you're not running a flatpak browser!
|
11
html/dixie-game.html
Normal file
11
html/dixie-game.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Hello, Tiger!</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Hello, Tiger!</h1>
|
||||
<p>Free-play White Tiger Slots</p>
|
||||
<iframe width="1000px" height="500px" src="https://funkygames.io/demo?gameCode=102636&lang=EN"></iframe>
|
||||
</body>
|
||||
</html>
|
BIN
html/flashcert.pdf
Normal file
BIN
html/flashcert.pdf
Normal file
Binary file not shown.
42
html/generate-spl/index.html
Normal file
42
html/generate-spl/index.html
Normal file
|
@ -0,0 +1,42 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>SPL Generator</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h2>Samuel Public License Generator</h2>
|
||||
|
||||
<form id="splForm">
|
||||
<label for="name">Your Name or Organization:</label>
|
||||
<textarea id="name" rows="2" cols="30"></textarea>
|
||||
|
||||
<button type="button" onclick="generateSPL()">Generate SPL</button>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
function generateSPL() {
|
||||
// Get the name from the textarea
|
||||
const name = document.getElementById('name').value;
|
||||
|
||||
// Fetch the latest SPL template
|
||||
fetch('https://raw.githubusercontent.com/NodeMixaholic/samuel-public-license/main/LICENSE')
|
||||
.then(response => response.text())
|
||||
.then(template => {
|
||||
// Replace placeholders with actual values
|
||||
const fullNumericYear = new Date().getFullYear();
|
||||
const splText = template.replace('FULL-NUMERIC-YEAR', fullNumericYear).replace('YOUR-REAL-NAME-OR-ORG', name);
|
||||
|
||||
// Set the body content to the generated SPL text
|
||||
document.body.innerText = `${splText}`;
|
||||
})
|
||||
.catch(error => console.error('Error fetching SPL template:', error));
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
19
html/homepage/LICENSE
Normal file
19
html/homepage/LICENSE
Normal file
|
@ -0,0 +1,19 @@
|
|||
The Samuel Public License Revision 5 (SPL-R5)
|
||||
|
||||
Copyright (c) 2024 Samuel Lord
|
||||
|
||||
This document grants permission, without charge, to any individual acquiring a copy of the software and its associated documentation files (hereinafter referred to as the "Software"). Such individuals are authorized to engage in activities related to the Software with certain restrictions (listed below), including, but not limited to, the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software. These permissions extend to persons to whom the Software is furnished, subject to compliance with the specified conditions outlined below.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
In making contributions to the Software, contributors irrevocably assign, transfer, and convey all rights, titles, and interests in and to their contributions to the project owner(s). This assignment is absolute and encompasses all intellectual property rights, including, but not limited to, copyrights, patents, trademarks, and trade secrets. Contributors acknowledge and consent that they have no further claim, right, or interest in their contributions and agree to relinquish any moral rights associated with the contributed content. This assignment is effective upon the act of contributing to the Software, and contributors affirm that they have the authority to make such an assignment. However, contributors retain the right to modify their contributions.
|
||||
|
||||
Furthermore, this document permits the reuse and redistribution of both executable binaries and source code, contingent upon the inclusion of the previously mentioned copyright notice and permission notice in all copies or substantial portions of the Software. It is imperative that you explicitly acknowledge and agree that the owner(s) retain ownership rights over the aforementioned source code.
|
||||
|
||||
Moreover, companies using the Software are encouraged to contribute upstream. Fortune 500 companies are required to make an annual contribution of at least 20,000 USD or an equivalent amount to support the project's sustainability unless no donation option is provided.
|
||||
|
||||
Additionally, note that the use of AI-assisted tools, including but not limited to GitHub Copilot and ChatGPT, is expressly permitted in conjunction with this software. Users are encouraged to leverage these AI tools to enhance their experience in developing, modifying, and interacting with the Software. The permission granted herein extends to the integration and utilization of AI-generated content for coding and communication purposes. The owners(s) of the Software acknowledge and embrace the collaborative nature of AI-assisted development.
|
||||
|
||||
In addition, the owner of the code is granted the authority to update their copy of The Samuel Public License (SPL) to the latest revision. This update may be undertaken at the discretion of the owner to ensure alignment with any subsequent revisions made to The Samuel Public License.
|
||||
|
||||
The aforementioned copyright notice and this permission notice must be included in all copies or substantial portions of the Software.
|
3
html/homepage/README.md
Normal file
3
html/homepage/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# homepage
|
||||
|
||||
My Personal Homepage
|
79
html/homepage/index.html
Normal file
79
html/homepage/index.html
Normal file
|
@ -0,0 +1,79 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Sam's Homepage</title>
|
||||
<link rel="stylesheet" href="styling.css">
|
||||
</head>
|
||||
<body>
|
||||
<!--a header saying hello -->
|
||||
<div align="center">
|
||||
<h1>"Hello, World!" --some computer</h1>
|
||||
<p><b><i id="biblepassage"></i></b></p>
|
||||
<div id="search-bar">
|
||||
<input type="text" id="search-input" placeholder="Search Sparksammy">
|
||||
<button id="search-button">Search</button>
|
||||
</div>
|
||||
|
||||
<h2>Nifty Links</h2>
|
||||
|
||||
<h3>AI/Social</h3>
|
||||
<p>
|
||||
<a href="https://gemini.google.com/app">Gemini</a>
|
||||
<a href="https://chat.openai.com">ChatGPT</a>
|
||||
<a href="https://discord.com/app">Discord</a>
|
||||
<a href="https://linktr.ee/anonymouse42">Sparksammy's Linktree</a>
|
||||
</p>
|
||||
|
||||
<h3>Learning & Education</h3>
|
||||
<p>
|
||||
<a href="https://www.udemy.com/">Udemy</a>
|
||||
<a href="https://www.youtube.com/c/freeCodeCamp">freeCodeCamp.org</a>
|
||||
<a href="https://www.youtube.com/c/TheCodingTrain">The Coding Train</a>
|
||||
</p>
|
||||
|
||||
<h3>Documentation</h3>
|
||||
<p>
|
||||
<a href="https://developer.mozilla.org/en-US/docs/Web">Mozilla Developer Docs</a>
|
||||
<a href="https://developer.roblox.com/en-US/">ROBLOX Developer Wiki</a>
|
||||
<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">JavaScript MDN Docs</a>
|
||||
<a href="https://developer.mozilla.org/en-US/docs/Web/HTML">HTML MDN Docs</a>
|
||||
<a href="https://developer.mozilla.org/en-US/docs/Web/CSS">CSS MDN Docs</a>
|
||||
<a href="https://docs.microsoft.com/en-us/windows/">Windows Documentation</a>
|
||||
<a href="https://linux.die.net/man/">Die.net - Linux Man Pages</a>
|
||||
<a href="https://www.w3schools.com/">W3Schools</a>
|
||||
</p>
|
||||
|
||||
<h3>News & Security</h3>
|
||||
<p>
|
||||
<a href="https://www.theverge.com/">The Verge</a>
|
||||
<a href="https://arstechnica.com/">Ars Technica</a>
|
||||
<a href="https://www.engadget.com/">Engadget</a>
|
||||
<a href="https://www.technologyreview.com/">MIT Technology Review</a>
|
||||
<a href="https://www.wired.com/">Wired</a>
|
||||
<a href="https://krebsonsecurity.com/">Krebs on Security</a>
|
||||
</p>
|
||||
|
||||
<h3>More Coding YouTube Channels</h3>
|
||||
<p>
|
||||
<a href="https://www.youtube.com/c/TheCodingTrain">The Coding Train</a>
|
||||
<a href="https://www.youtube.com/c/TraversyMedia">Traversy Media</a>
|
||||
<a href="https://www.youtube.com/c/FrontendMasters">Frontend Masters</a>
|
||||
<a href="https://www.youtube.com/c/Codecademy">Codecademy</a>
|
||||
<a href="https://www.youtube.com/c/TechLead">The TechLead</a>
|
||||
<a href="https://www.youtube.com/c/fireship">Fireship</a>
|
||||
<a href="https://www.youtube.com/c/NoBoilerplate">No Boilerplate</a>
|
||||
</p>
|
||||
|
||||
<h3>Node's Stuff</h3>
|
||||
<p>
|
||||
<a href="http://nodemixaholic.com:3002">NodeMixaholic's Git</a>
|
||||
<a href="http://nodemixaholic.com/jellyfin">Jellyfin</a>
|
||||
</p>
|
||||
|
||||
<br>
|
||||
</div>
|
||||
<script src="script.js"></script>
|
||||
</body>
|
||||
</html>
|
32
html/homepage/script.js
Normal file
32
html/homepage/script.js
Normal file
|
@ -0,0 +1,32 @@
|
|||
let codingMode = false; // Set to true for coding mode (no api calls to bible passage)
|
||||
|
||||
//https://labs.bible.org/api/?passage=random&formatting=plain&type=text
|
||||
async function fetchBiblePassage() {
|
||||
try {
|
||||
let textData;
|
||||
if (codingMode == true) {
|
||||
textData = 'Samuel 16:9 “And he said, "I now know de wae" in zimbabwe.';
|
||||
} else {
|
||||
const response = await fetch('https://labs.bible.org/api/?passage=random&formatting=plain&type=text');
|
||||
textData = await response.text();
|
||||
}
|
||||
document.getElementById('biblepassage').textContent = `${textData}`;
|
||||
} catch (error) {
|
||||
console.error('Error fetching Bible passage:', error);
|
||||
// Handle the error gracefully, e.g., display an error message to the user
|
||||
}
|
||||
}
|
||||
|
||||
fetchBiblePassage();
|
||||
|
||||
const searchButton = document.getElementById('search-button');
|
||||
const searchInput = document.getElementById('search-input');
|
||||
|
||||
searchButton.addEventListener('click', () => {
|
||||
const searchTerm = searchInput.value;
|
||||
if (searchTerm) {
|
||||
window.location.href = `https://search.sparksammy.com/search.php?q=${searchTerm}&p=0&t=0`;
|
||||
} else {
|
||||
alert('Please enter a search term.');
|
||||
}
|
||||
});
|
95
html/homepage/styling.css
Normal file
95
html/homepage/styling.css
Normal file
|
@ -0,0 +1,95 @@
|
|||
/* Basic styles */
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
/* With dark mode */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
body {
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Apply dark mode styles to other elements as needed */
|
||||
}
|
||||
|
||||
|
||||
h1 {
|
||||
text-align: center;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
p {
|
||||
text-align: center;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #007bff;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
font-size: 1.2rem;
|
||||
padding-left: 1.2rem;
|
||||
padding-right: 1.2rem;
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
#search-bar {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
margin: 20px auto;
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
#search-input {
|
||||
padding: 5px;
|
||||
border: 1px solid #ccc;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
#search-button {
|
||||
padding: 5px 10px;
|
||||
border: 1px solid #ccc;
|
||||
cursor: pointer;
|
||||
background-color: #007bff;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* Media queries for responsiveness */
|
||||
|
||||
@media only screen and (max-width: 768px) {
|
||||
/* Styles for screens smaller than 768px (mobile devices) */
|
||||
h1 {
|
||||
font-size: 1.5rem; /* Adjust font size for smaller screens */
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 1rem; /* Adjust font size for smaller screens */
|
||||
}
|
||||
|
||||
a {
|
||||
font-size: 0.8rem; /* Adjust font size for smaller screens */
|
||||
}
|
||||
|
||||
#search-bar {
|
||||
width: 80%; /* Adjust width for smaller screens */
|
||||
}
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 768px) {
|
||||
/* Styles for screens wider than 768px (desktop) */
|
||||
#search-bar {
|
||||
width: 40%; /* Adjust width for larger screens */
|
||||
}
|
||||
}
|
90
html/index.html
Normal file
90
html/index.html
Normal file
|
@ -0,0 +1,90 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>Resume</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 style="text-align: center;"><img src="node.png" alt="NodeMixaholic Icon"
|
||||
style="width: 99px; height: 99px;">Sparksammy/NodeMixaholic</h1>
|
||||
<ul style="text-align: center;">
|
||||
</ul>
|
||||
<div style="text-align: center;">
|
||||
<a href="http://git.nodemixaholic.com" target="_new">Git</a><br>
|
||||
</div>
|
||||
<p></p>
|
||||
<hr>
|
||||
<p><br>
|
||||
</p>
|
||||
<h1 style="text-align: center;"></h1>
|
||||
<h2> <img src="me.png" alt="a photo of me" style="width: 61px; height: 160px;"><strong>Summary:</strong>
|
||||
</h2>
|
||||
<div class="markdown prose w-full break-words dark:prose-invert light">
|
||||
<p>High school-educated coder with expertise in LuaU, C#, JavaScript, and
|
||||
NodeJS. Passionate about open source contributions and ROBLOX
|
||||
development. Adobe Certified Associate in Premiere Pro and Adobe Flash
|
||||
CS6. A tech enthusiast who occasionally shares insights through blog
|
||||
posts.</p>
|
||||
<h2 style="text-align: left;"><strong>Education:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>High School Diploma<br>
|
||||
<ul>
|
||||
<li><a href="ppcert.pdf">Adobe Certified Associate in Premiere Pro</a></li>
|
||||
<li><a href="flashcert.pdf">Adobe Certified Associate in Adobe Flash
|
||||
CS6</a></li>
|
||||
<li>Graduated from Home School</li>
|
||||
<ul>
|
||||
<li>Switched between public and home schools multiple times.</li>
|
||||
<li>We named our home school "Eureka Learning Academy"</li>
|
||||
<ul>
|
||||
<li>Because we wanted it to sound smart.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Skills:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>Languages: LuaU, C#, JavaScript, NodeJS</li>
|
||||
<li>ROBLOX Development</li>
|
||||
<li>Contributions to Open Source</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Work Experience:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>
|
||||
<p>Open Source Contributor</p>
|
||||
<ul>
|
||||
<li>Actively involved in various open source projects.</li>
|
||||
<li>Demonstrated proficiency in code contributions and collaboration
|
||||
with the developer community.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>Former ROBLOX Experience Developer</p>
|
||||
<ul>
|
||||
<li>Created numerous ROBLOX experiences, showcasing creative game
|
||||
design and scripting skills.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Projects:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>Git: <a href="http://git.nodemixaholic.com/nodemixaholic" target="_new">NodeMixaholic
|
||||
Git Server<br>
|
||||
</a>
|
||||
<ul>
|
||||
<li>Extensive list of open-source contributions, demonstrating
|
||||
coding proficiency and commitment to the developer community.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>Authored occasional blog posts sharing insights and tech-related
|
||||
thoughts.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</div>
|
||||
<p><br>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
100
html/index.html.bak
Normal file
100
html/index.html.bak
Normal file
|
@ -0,0 +1,100 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>Resume</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 style="text-align: center;"><img src="node.png" alt="NodeMixaholic Icon"
|
||||
style="width: 99px; height: 99px;">Samuel Lord's Resume</h1>
|
||||
<ul style="text-align: center;">
|
||||
</ul>
|
||||
<div style="text-align: center;">Phone: 409-225-2252<br>
|
||||
Email: <a href="mailto:work@nodemixaholic.com" target="_new">work@nodemixaholic.com</a><br>
|
||||
Clearnet Portfolio: <a href="https://github.com/NodeMixaholic" target="_new">GitHub</a>,
|
||||
<a href="https://sparksammy.com" target="_new">Personal Blog</a></div>
|
||||
<p></p>
|
||||
<hr>
|
||||
<p><br>
|
||||
</p>
|
||||
<h1 style="text-align: center;"></h1>
|
||||
<h2> <img src="me.png" alt="a photo of me" style="width: 61px; height: 160px;"><strong>Summary:</strong>
|
||||
</h2>
|
||||
<div class="markdown prose w-full break-words dark:prose-invert light">
|
||||
<p>High school-educated coder with expertise in LuaU, C#, JavaScript, and
|
||||
NodeJS. Passionate about open source contributions and ROBLOX
|
||||
development. Adobe Certified Associate in Premiere Pro and Adobe Flash
|
||||
CS6. A tech enthusiast who occasionally shares insights through blog
|
||||
posts.</p>
|
||||
<h2 style="text-align: left;"><strong>Education:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>High School Diploma<br>
|
||||
<ul>
|
||||
<li><a href="ppcert.pdf">Adobe Certified Associate in Premiere Pro</a></li>
|
||||
<li><a href="flashcert.pdf">Adobe Certified Associate in Adobe Flash
|
||||
CS6</a></li>
|
||||
<li>Graduated from Home School</li>
|
||||
<ul>
|
||||
<li>Switched between public and home schools multiple times.</li>
|
||||
<li>We named our home school "Eureka Learning Academy"</li>
|
||||
<ul>
|
||||
<li>Because we wanted it to sound smart.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Skills:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>Languages: LuaU, C#, JavaScript, NodeJS</li>
|
||||
<li>ROBLOX Development</li>
|
||||
<li>Contributions to Open Source</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Work Experience:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>
|
||||
<p>Open Source Contributor</p>
|
||||
<ul>
|
||||
<li>GitHub: <a href="https://github.com/NodeMixaholic" target="_new">NodeMixaholic
|
||||
(clearnet page!)<br>
|
||||
</a></li>
|
||||
<li>Actively involved in various open source projects.</li>
|
||||
<li>Demonstrated proficiency in code contributions and collaboration
|
||||
with the developer community.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<p>ROBLOX Experience Developer</p>
|
||||
<ul>
|
||||
<li>Created numerous ROBLOX experiences, showcasing creative game
|
||||
design and scripting skills.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Projects:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>GitHub Portfolio: <a href="https://github.com/NodeMixaholic" target="_new">NodeMixaholic
|
||||
GitHub Profile (clearnet page!)<br>
|
||||
</a>
|
||||
<ul>
|
||||
<li>Extensive list of open-source contributions, demonstrating
|
||||
coding proficiency and commitment to the developer community.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: left;"><strong>Blog Posts:</strong></h2>
|
||||
<ul style="text-align: left;">
|
||||
<li>Personal Blog: <a href="https://sparksammy.com" target="_new">Sparksammy
|
||||
Blog (clearnet page!)<br>
|
||||
</a>
|
||||
<ul>
|
||||
<li>Authored occasional blog posts sharing insights and tech-related
|
||||
thoughts.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p><br>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
BIN
html/me.png
Normal file
BIN
html/me.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
BIN
html/node.png
Normal file
BIN
html/node.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 132 KiB |
BIN
html/ppcert.pdf
Normal file
BIN
html/ppcert.pdf
Normal file
Binary file not shown.
30
html/yearoflinux/countdown.js
Normal file
30
html/yearoflinux/countdown.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
document.addEventListener('DOMContentLoaded', function () {
|
||||
// Set the date for January 1st of the following year
|
||||
const targetDate = new Date();
|
||||
targetDate.setFullYear(targetDate.getFullYear() + 1);
|
||||
targetDate.setMonth(0);
|
||||
targetDate.setDate(1);
|
||||
targetDate.setHours(0, 0, 0, 0);
|
||||
|
||||
// Update the countdown every second
|
||||
setInterval(updateCountdown, 1000);
|
||||
|
||||
function updateCountdown() {
|
||||
const currentDate = new Date();
|
||||
const timeDifference = targetDate - currentDate;
|
||||
|
||||
const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
|
||||
const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
|
||||
const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById('days').textContent = formatTime(days);
|
||||
document.getElementById('hours').textContent = formatTime(hours);
|
||||
document.getElementById('minutes').textContent = formatTime(minutes);
|
||||
document.getElementById('seconds').textContent = formatTime(seconds);
|
||||
}
|
||||
|
||||
function formatTime(time) {
|
||||
return time < 10 ? `0${time}` : time;
|
||||
}
|
||||
});
|
32
html/yearoflinux/index.html
Normal file
32
html/yearoflinux/index.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
<title>Year of the Linux Desktop Countdown</title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>The year of the Linux desktop is coming soon!</h1>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div id="countdown">
|
||||
<div id="days" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Days</div>
|
||||
|
||||
<div id="hours" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Hours</div>
|
||||
|
||||
<div id="minutes" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Minutes</div>
|
||||
|
||||
<div id="seconds" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Seconds</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script src="countdown.js"></script>
|
||||
</body>
|
||||
</html>
|
43
html/yearoflinux/styles.css
Normal file
43
html/yearoflinux/styles.css
Normal file
|
@ -0,0 +1,43 @@
|
|||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #282c35;
|
||||
color: white;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
background-color: #1e222b;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 80vh;
|
||||
}
|
||||
|
||||
#countdown {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.countdown-item {
|
||||
background-color: #1e222b;
|
||||
color: white;
|
||||
padding: 0.5em;
|
||||
border-radius: 5px;
|
||||
margin: 0 0.3em;
|
||||
}
|
||||
|
||||
.countdown-label {
|
||||
text-align: center;
|
||||
}
|
107
index.html
Normal file
107
index.html
Normal file
|
@ -0,0 +1,107 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Sparksammy/NodeMixaholic</title>
|
||||
<style>
|
||||
body {
|
||||
background-color: black;
|
||||
color: limegreen;
|
||||
font-family: Arial, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
h1 {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: green;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
text-decoration-color: greenyellow;
|
||||
}
|
||||
hr {
|
||||
color: lime;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<a href="https://linuxmint.com"><img src="ad.gif" alt="AD for linux" style="width: 100%;"></a>
|
||||
<h1><img src="node.png" alt="NodeMixaholic Icon" style="width: 99px; height: 99px;">Sparksammy/NodeMixaholic</h1>
|
||||
<hr>
|
||||
<a href="https://github.com/sneed-group">Sneed Group Git</a> - <a href="/homepage">My Personal Homepage</a> - <a href="/blog">The Blog</a> - <a href="https://www.roblox.com/users/265407551/profile">My ROBLOX</a> - <a href="https://ai.nodemixaholic.com">Tiny Samantha Cloud UI</a>
|
||||
<hr>
|
||||
|
||||
<h2><img src="tux-retro-blink.gif" alt="a gif of tux blinking" style="width: 15%;">Summary:</h2>
|
||||
<p>
|
||||
High school-educated coder with expertise in LuaU, C#, JavaScript, and NodeJS. Passionate about open source contributions and ROBLOX development. Adobe Certified Associate in Premiere Pro and Adobe Flash CS6. A tech enthusiast who occasionally shares insights through blog posts.
|
||||
</p>
|
||||
|
||||
<h2>Education:</h2>
|
||||
<ul>
|
||||
<li>High School Diploma</li>
|
||||
<li><a href="ppcert.pdf">Adobe Certified Associate in Premiere Pro</a></li>
|
||||
<li><a href="flashcert.pdf">Adobe Certified Associate in Adobe Flash CS6</a></li>
|
||||
<li>Graduated from Home School</li>
|
||||
<ul>
|
||||
<li>Switched between public and home schools multiple times.</li>
|
||||
<li>We named our home school "Eureka Learning Academy"</li>
|
||||
<ul>
|
||||
<li>Because we wanted it to sound smart.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<h2>Skills:</h2>
|
||||
<ul>
|
||||
<li>Languages: LuaU, C#, JavaScript, NodeJS, GoLang, Python3</li>
|
||||
<li>ROBLOX Development</li>
|
||||
<li>Contributions to Open Source</li>
|
||||
</ul>
|
||||
|
||||
<h2>Work Experience:</h2>
|
||||
<ul>
|
||||
<li>Open Source Contributor
|
||||
<ul>
|
||||
<li>Actively involved in various open source projects.</li>
|
||||
<li>Demonstrated proficiency in code contributions and collaboration with the developer community.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Semi-Retired ROBLOX Experience Developer
|
||||
<ul>
|
||||
<li>Created numerous ROBLOX experiences, showcasing creative game design and scripting skills.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Projects:</h2>
|
||||
<ul>
|
||||
<li>Git: <a href="https://github.com/sneed-group">Sneed Group Git</a>
|
||||
<ul>
|
||||
<li>Extensive list of open-source contributions, demonstrating coding proficiency and commitment to the developer community.</li>
|
||||
<li>Authored occasional <a href="/blog">blog</a> posts sharing insights and tech-related thoughts.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="https://www.roblox.com/users/265407551/profile">ROBLOX Experiences</a></li>
|
||||
</ul>
|
||||
<hr>
|
||||
<p>Copyright Sammy (Sparksammy/Nodemixaholic) Lord. All rights reserved. <b>You <i>are</i> permitted to use any part of this website as part of a training set for a computer-generated algorithm.</b></p>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
23
index.nginx-debian.html
Normal file
23
index.nginx-debian.html
Normal file
|
@ -0,0 +1,23 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to nginx!</title>
|
||||
<style>
|
||||
html { color-scheme: light dark; }
|
||||
body { width: 35em; margin: 0 auto;
|
||||
font-family: Tahoma, Verdana, Arial, sans-serif; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Welcome to nginx!</h1>
|
||||
<p>If you see this page, the nginx web server is successfully installed and
|
||||
working. Further configuration is required.</p>
|
||||
|
||||
<p>For online documentation and support please refer to
|
||||
<a href="http://nginx.org/">nginx.org</a>.<br/>
|
||||
Commercial support is available at
|
||||
<a href="http://nginx.com/">nginx.com</a>.</p>
|
||||
|
||||
<p><em>Thank you for using nginx.</em></p>
|
||||
</body>
|
||||
</html>
|
BIN
node.png
Normal file
BIN
node.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 132 KiB |
BIN
ppcert.pdf
Normal file
BIN
ppcert.pdf
Normal file
Binary file not shown.
BIN
tux-retro-blink.gif
Normal file
BIN
tux-retro-blink.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
30
yearoflinux/countdown.js
Normal file
30
yearoflinux/countdown.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
document.addEventListener('DOMContentLoaded', function () {
|
||||
// Set the date for January 1st of the following year
|
||||
const targetDate = new Date();
|
||||
targetDate.setFullYear(targetDate.getFullYear() + 1);
|
||||
targetDate.setMonth(0);
|
||||
targetDate.setDate(1);
|
||||
targetDate.setHours(0, 0, 0, 0);
|
||||
|
||||
// Update the countdown every second
|
||||
setInterval(updateCountdown, 1000);
|
||||
|
||||
function updateCountdown() {
|
||||
const currentDate = new Date();
|
||||
const timeDifference = targetDate - currentDate;
|
||||
|
||||
const days = Math.floor(timeDifference / (1000 * 60 * 60 * 24));
|
||||
const hours = Math.floor((timeDifference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
|
||||
const minutes = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
|
||||
const seconds = Math.floor((timeDifference % (1000 * 60)) / 1000);
|
||||
|
||||
document.getElementById('days').textContent = formatTime(days);
|
||||
document.getElementById('hours').textContent = formatTime(hours);
|
||||
document.getElementById('minutes').textContent = formatTime(minutes);
|
||||
document.getElementById('seconds').textContent = formatTime(seconds);
|
||||
}
|
||||
|
||||
function formatTime(time) {
|
||||
return time < 10 ? `0${time}` : time;
|
||||
}
|
||||
});
|
32
yearoflinux/index.html
Normal file
32
yearoflinux/index.html
Normal file
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
<title>Year of the Linux Desktop Countdown</title>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>The year of the Linux desktop is coming soon!</h1>
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<div id="countdown">
|
||||
<div id="days" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Days</div>
|
||||
|
||||
<div id="hours" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Hours</div>
|
||||
|
||||
<div id="minutes" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Minutes</div>
|
||||
|
||||
<div id="seconds" class="countdown-item">00</div>
|
||||
<div class="countdown-label">Seconds</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<script src="countdown.js"></script>
|
||||
</body>
|
||||
</html>
|
43
yearoflinux/styles.css
Normal file
43
yearoflinux/styles.css
Normal file
|
@ -0,0 +1,43 @@
|
|||
body {
|
||||
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background-color: #282c35;
|
||||
color: white;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
background-color: #1e222b;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
main {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 80vh;
|
||||
}
|
||||
|
||||
#countdown {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-items: center;
|
||||
font-size: 2em;
|
||||
}
|
||||
|
||||
.countdown-item {
|
||||
background-color: #1e222b;
|
||||
color: white;
|
||||
padding: 0.5em;
|
||||
border-radius: 5px;
|
||||
margin: 0 0.3em;
|
||||
}
|
||||
|
||||
.countdown-label {
|
||||
text-align: center;
|
||||
}
|
Loading…
Reference in a new issue