From ba6071d2a693d930b913d1bf6edde5a4cb7054af Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 6 Dec 2021 19:23:41 -0500 Subject: [PATCH] Remove vanilla code --- .gitignore | 4 + 404.html | 87 --------- about.html | 36 ---- favicon.ico | Bin 5430 -> 0 bytes index.html | 32 ---- pages.json | 13 -- pages/grade-calc/README.md | 23 --- pages/grade-calc/config/eee3307c.json | 25 --- pages/grade-calc/config/eel4742c.json | 29 --- pages/grade-calc/config/eel4781.json | 35 ---- pages/grade-calc/config/map2302.json | 41 ---- pages/grade-calc/gc_client.js | 204 -------------------- pages/grade-calc/index.html | 115 ------------ pages/index.html | 20 -- pages/playlists.html | 24 --- pages/recommended.html | 100 ---------- pages/resources.html | 43 ----- scripts/fuzzy.js | 144 -------------- site.json | 60 ------ stylesheets/persia.css | 259 -------------------------- 20 files changed, 4 insertions(+), 1290 deletions(-) delete mode 100644 404.html delete mode 100644 about.html delete mode 100644 favicon.ico delete mode 100644 index.html delete mode 100644 pages.json delete mode 100644 pages/grade-calc/README.md delete mode 100644 pages/grade-calc/config/eee3307c.json delete mode 100644 pages/grade-calc/config/eel4742c.json delete mode 100644 pages/grade-calc/config/eel4781.json delete mode 100644 pages/grade-calc/config/map2302.json delete mode 100644 pages/grade-calc/gc_client.js delete mode 100644 pages/grade-calc/index.html delete mode 100644 pages/index.html delete mode 100644 pages/playlists.html delete mode 100644 pages/recommended.html delete mode 100644 pages/resources.html delete mode 100644 scripts/fuzzy.js delete mode 100644 site.json delete mode 100644 stylesheets/persia.css diff --git a/.gitignore b/.gitignore index e43b0f9..73aa029 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ +node_modules/ + +.next/ + .DS_Store diff --git a/404.html b/404.html deleted file mode 100644 index b2961af..0000000 --- a/404.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - PaulW.XYZ / - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - -
-

Error 404: Not Found

-

- Uh oh! The page you are looking for does not exist...
- [Wikipedia] Learn more about HTTP status codes. -

-
- - - - \ No newline at end of file diff --git a/about.html b/about.html deleted file mode 100644 index e9ee25f..0000000 --- a/about.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - -PaulW.XYZ / About - - - - - - -
-This is a personal website written by @LambdaPaul.

-Why did I write this? -I do not really know, at least the content I put here. I guess I wanted a place on the web where I wanted to put everything I think is worth looking at some point in the future. -
-
-It seems wise to have things up here even though they may embarrass me at some point in the future, as many of the things I have done in the past have. Especially the web sites I made in high school. I will never forget those. -
-
- -Deploys by Netlify - -
-
-

Design Draft

-This is a draft of the rationale behind writing pages the way I have. I do not like the traditional web conventions so this is where I experiment the most with interfacing elements. The navigation pane-based design works when they are simple and easy to understand. When they get too complex, people rely on using search bars to get where they want. My goal is to find a method to eliminate the visual noise of the complex navigation panes and find a reasonable alternative them while being easy to use.

Page Categorization

The home page or the index page solely acts as a gateway to all the other pages on the site. The accessible pages are categorized on a need-based system. Since I currently do not have multiple pages, I have them all under a single directory.

Design Principles

The goal of my home page’s design is to keep this minimal. There is no need for unnecessary content to waste people’s time. The rule is simple: only waste one’s time if they willingly do so.

Modern webpages tend to be bulky. This entire site should retain the modern design while being as minimal and static as possible.

Design Problems

A new user would never understand how this site works. My ideal navigation system would involve having as few navigation elements as possible. This is the reason why I chose to add solely the fuzzy-search bar. However, I have not been able to find a good way to give users of my pages a good way to interact in case they do not use the search bar. I previously used to list them all but it was not easy on the eyes and looked lazy. Maybe a command system that does not use symbols (considering touch devices do not support non-Latin character insertions easily). Maybe something similar to *nix commands. The site somewhat vaguely follows the basic file-system structure. However, this goes against my goal of “ease-of-use” which is why I have not done it yet. -

- - - \ No newline at end of file diff --git a/favicon.ico b/favicon.ico deleted file mode 100644 index a3d97a3d2730b22cae204c4cb7f3ee6daadd1c30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmcgwYfltc7@ju%0Dl6X8WV*y_42__+AnQvDyiayXw<}7o0`a_wO_2He(+X}1;lDp z)KY}D0ii@GmBkdTyHu8&qR|3UuFFO0auF8T<>`6P>^n0%S-Lwjn@%#Eo!RrA=Q+=N z-shY}QQlDARF*DPM4P01xVs<(-GX5u=}Gdz#^&>RBu({j!efme{c-NajsrTEPy@5u4=dE^Pc`aBk} zAoL8#`51XqEZsB*%2kHYn&xpun@1fU4>w{`_^CNVR#hc?7Tfeb*bA0sr353_TzD~Hmxs6)Cy|vg< zx>~LcbAR)**$=Eflg}iHd!4w+kK{$hW4eeZ-8FyxENhYKs>SC<*Vt28XQVe>BU6Jo zcxzL*Mv}3+Y(288x67OAEXVbU^c)_qr0qNDJ*~b5Ic}S1$EHWr!NPyZr?~%(*7Kle z>PH-?9ewSK=wH`WiL{cHQbXdBU7arR57q2cy|6h?8}GNUck+C?|9OVsLQos8H|%qa zf4%uz+$iUk-*@qMLS<)X#_an9YQ0P6ajS-)Yy3gjg_T!588%yyI`|I(g&|KYvj%u-_ zWi0+?zq6y?Txb@wzDNhF`O7u=JmIVB$J#tzz8*qZdm$*_#KEfWT>m7^0l_12I-sKrg}B6cgE%RqZ@Byf8_>8eiB*;p~v45)vp%Qo$*t}Ic00< z8sY7mH4b+2FeA=W{+Th&E9pa>;XJ3~spq4}=Va_ETjw|rM(|j=N8+bI&BF(p26pO! z@oArkt-D!==y^Eb5RWf~7+SXR>u%(b7<{X`a~=|*zdhYagT$=AMCxAPi6`&+dB&OU z&iu!|?kPxw|Ju`CUHeY=AG^Bqy63&mj^8-Z-H31Z{NY4*Bfg#e#;NW`d|T&t(>apI zv)bA@e;FW`0<_J#qZDX|EKKYnd2DW+V5}UzU}O@>E8kW G`{Tb9E{fd% diff --git a/index.html b/index.html deleted file mode 100644 index dda1c13..0000000 --- a/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - -PaulW.XYZ / - - - - - - -
-© 2021 Paul W. -
- - - - \ No newline at end of file diff --git a/pages.json b/pages.json deleted file mode 100644 index ed88d4e..0000000 --- a/pages.json +++ /dev/null @@ -1,13 +0,0 @@ -[ - {"title":"About", "link": "/about"}, - {"title":"Pages", "link": "/pages/"}, - {"title":"Resources", "link": "/pages/resources"}, - {"title":"Recommended", "link": "/pages/recommended"}, - {"title":"Grade Calculator", "link": "/pages/grade-calc/"}, - {"title":"GitHub", "link": "https://github.com/lambdapaul"}, - {"title":"GitLab", "link": "https://gitlab.com/lambdapaul"}, - {"title":"Mastodon", "link": "https://mastodon.social/@lambdapaul"}, - {"title":"Matrix", "link": "https://matrix.to/#/@lambdapaul:matrix.org"}, - {"title":"Keybase", "link": "https://keybase.io/lambdapaul"}, - {"title":"Playlists", "link": "/pages/playlists"} -] \ No newline at end of file diff --git a/pages/grade-calc/README.md b/pages/grade-calc/README.md deleted file mode 100644 index 3a99b3b..0000000 --- a/pages/grade-calc/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# Grade Calculator - -Some professors do not properly configure the Canvas grade percentages based on their syllabus. Instead, they opt to use Excel to calculate the final grades after everything. It can be hard to estimate how much effort I should allocate for those classes without making an Excel file. - -So I wrote this to quickly configure a calculator to see what I will end up getting in a class based on how much effort I put in. - -## Short Summary of the JSON structure - -The JSON is expected to have an array of section descriptions. - -`name : string` is used as the class name. They have to be unique for each section to work as expected. - -`title : string` is used as the heading for the sections. - -`percentage : number` is used to weigh the section for the final grade. - -`output : boolean` when true, it calculates the section score. - -`points : [number]` used for each assignment in the section. - -`bothMethods : boolean` when true, the weighted and unweighted scores are calculated. - -`info : string` used for section description. \ No newline at end of file diff --git a/pages/grade-calc/config/eee3307c.json b/pages/grade-calc/config/eee3307c.json deleted file mode 100644 index 09e6e3c..0000000 --- a/pages/grade-calc/config/eee3307c.json +++ /dev/null @@ -1,25 +0,0 @@ -[ - { - "name": "final", - "title": "Final", - "percentage": 40, - "info": "" - }, - { - "name": "midterm", - "title": "Midterm", - "percentage": 30 - }, - { - "name": "homework", - "title": "Homework", - "percentage": 10, - "points": [100,100,100,100,100,100] - }, - { - "name": "lab", - "title": "Lab", - "percentage": 20, - "info": "Lab score is accurate and does not need any sub-calculation." - } -] \ No newline at end of file diff --git a/pages/grade-calc/config/eel4742c.json b/pages/grade-calc/config/eel4742c.json deleted file mode 100644 index a7c2457..0000000 --- a/pages/grade-calc/config/eel4742c.json +++ /dev/null @@ -1,29 +0,0 @@ -[ - { - "name": "exams", - "percentage": 70, - "points": [ - 100, - 100, - 100 - ], - "title": "Exams" - }, - { - "name": "homework", - "percentage": 15, - "points": [ - 90, - 50, - 110, - 90 - ], - "title": "Homework" - }, - { - "info": "Lab score is accurate and does not need any sub-calculation.", - "name": "lab", - "percentage": 15, - "title": "Lab" - } -] \ No newline at end of file diff --git a/pages/grade-calc/config/eel4781.json b/pages/grade-calc/config/eel4781.json deleted file mode 100644 index f8cd9da..0000000 --- a/pages/grade-calc/config/eel4781.json +++ /dev/null @@ -1,35 +0,0 @@ -[ - { - "name": "midterm", - "percentage": 25, - "info":"http://www.ece.ucf.edu/~yuksem/teaching/EEL-4781-Spring-2021.html" - }, - { - "name": "final", - "percentage": 25 - }, - { - "name": "project", - "percentage": 15, - "info":"Webserver project" - }, - { - "name": "homework", - "percentage": 20, - "points": [ - 100, - 100, - 100, - 100, - 100 - ] - }, - { - "name": "lab", - "percentage": 15, - "points": [ - 100, - 100 - ] - } -] \ No newline at end of file diff --git a/pages/grade-calc/config/map2302.json b/pages/grade-calc/config/map2302.json deleted file mode 100644 index abddd19..0000000 --- a/pages/grade-calc/config/map2302.json +++ /dev/null @@ -1,41 +0,0 @@ -[ - { - "name": "final", - "title": "Final", - "percentage": 25, - "info": "" - }, - { - "name": "midterm", - "title": "Midterm", - "percentage": 50, - "points": [ - 20, - 20, - 20 - ], - "output": true - }, - { - "name": "quiz", - "title": "Quiz", - "percentage": 10, - "points": [ - 30, - 10, - 15 - ], - "output": true, - "bothMethods": true - }, - { - "name": "homework", - "title": "Homework", - "percentage": 10 - }, - { - "name": "attendance", - "title": "Attendance", - "percentage": 5 - } -] \ No newline at end of file diff --git a/pages/grade-calc/gc_client.js b/pages/grade-calc/gc_client.js deleted file mode 100644 index 4600053..0000000 --- a/pages/grade-calc/gc_client.js +++ /dev/null @@ -1,204 +0,0 @@ -class GradeCalc { - maxscore = 0; - sections = []; - inputSection = []; - outputSection = []; - fields = []; - grades = []; - ugrades = []; - both = false; - totalOutput = null; - - constructor(config, outCallback) { - this.totalOutput = document.createElement("div"); - let dConfig = JSON.parse(JSON.stringify(config)); // dirty clone - let sanConfig = []; - for (let conf of dConfig) { - if (conf.percentage === undefined || conf.name === undefined) - continue; - if (conf.title === undefined) - conf.title = conf.name[0].toUpperCase() + conf.name.slice(1); - sanConfig.push(conf); - } - this.config = sanConfig; - for (let [i, conf] of this.config.entries()) { - this.maxscore += conf.percentage; - - this.inputSection[i] = []; - this.outputSection[i] = document.createElement("div"); - - if (conf.bothMethods) { - this.both = true; - } - - this.sections[i] = (this.createSection(i)); - } - - for (let [k, v] of this.fields.entries()) { - for (let field of v) { - this.addInputEventListener(k, field); - } - } - - outCallback(this.sections); - } - - createSection(id) { - let conf = this.config[id]; - - var section = document.createElement("div"); - section.classList.add(conf.name); - - var heading = document.createElement("h2"); - heading.innerHTML = `${conf.title} (${conf.percentage}%)`; - - section.appendChild(heading); - - if (conf.info !== undefined) - section.appendChild(document.createTextNode(conf.info)); - - this.fields[id] = []; - if (conf.points !== undefined) { - for (var i = 0; i < conf.points.length; i++) { - section.appendChild(this.createInputSection(id, i)); - } - } - else { - section.appendChild(this.createInputSection(id, 0, true)); - } - - - section.appendChild(this.outputSection[id]); - return section; - } - - createInputSection(sectId, inputId, soleInput = false) { - let conf = this.config[sectId]; - let inputSection = document.createElement("div"); - inputSection.classList.add("input-section"); - - let label = document.createElement("label"); - if (soleInput) - label.innerHTML = `${conf.title} Score: `; - else - label.innerHTML = `${conf.title} ${inputId + 1} Score: `; - - let field = document.createElement("input"); - field.classList.add(`input`); - field.classList.add(`${conf.name}-score`); - this.fields[sectId][inputId] = field; - - let suffix = (soleInput) ? "%" : ` / ${conf.points[inputId]} pts`; - - inputSection.appendChild(label); - inputSection.appendChild(field); - inputSection.appendChild(document.createTextNode(suffix)); - - this.inputSection[sectId][inputId] = inputSection; - return inputSection; - } - - addInputEventListener(id, field, event = "keyup") { - let conf = this.config[id]; - field.addEventListener(event, () => { - if (conf.output !== undefined && conf.output) - this.showSectionGrade(id); - this.showTotalGrade(); - }); - } - - calculateSectionGrade(id, unweighted = false) { - let conf = this.config[id]; - let fields = this.fields[id]; - if (fields === undefined) - return; - if (conf.points === undefined) { - return parseFloat(fields[0].value); - } - - let total = 0; - - if (unweighted) { - let counter = 0; - for (let [i, field] of fields.entries()) { - let val = parseFloat(field.value); - if (isNaN(val)) - continue; - total += val / conf.points[i]; - counter++; - } - - return (total / counter * 100); - } - - total = fields.reduce((acc, cur) => { - let c = parseFloat(cur.value); - if (isNaN(c)) - return acc; - return acc + parseFloat(c); - }, 0); - - let max_total = 0; - for (let [i, field] of conf.points.entries()) { - if (isNaN(parseFloat(fields[i].value))) - continue; - max_total += field; - } - - return (total / max_total * 100); - } - - showSectionGrade(id) { - let conf = this.config[id]; - let grade = this.calculateSectionGrade(id); - let ugrade = this.calculateSectionGrade(id, true); - - - this.grades[id] = grade * parseFloat(conf.percentage) / 100; - this.ugrades[id] = ugrade * parseFloat(conf.percentage) / 100; - - grade = !isNaN(grade) ? grade.toFixed(2) : "..."; - ugrade = !isNaN(ugrade) ? ugrade.toFixed(2) : "..."; - if (conf.bothMethods) { - this.outputSection[id].innerHTML - = `Score (weighted): ${grade}%
Score (unweighted): ${ugrade}%`; - return; - } - - this.outputSection[id].innerHTML = `Score: ${grade}`; - } - - showTotalGrade() { - for (let [k, conf] of this.config.entries()) { - if (!conf.output) { - this.grades[k] = this.calculateSectionGrade(k) * parseFloat(conf.percentage) / 100; - this.ugrades[k] = this.calculateSectionGrade(k, true) * parseFloat(conf.percentage) / 100; - } - } - - let grade = this.grades.reduce((a, c) => { - if (isNaN(c)) - return a; - return a + c - }, 0); - let ugrade = this.ugrades.reduce((a, c) => { - if (isNaN(c)) - return a; - return a + c - }, 0); - - grade = !isNaN(grade) ? grade.toFixed(2) : "..."; - ugrade = !isNaN(ugrade) ? ugrade.toFixed(2) : "..."; - if (this.both) { - this.totalOutput.innerHTML - = `Total Score (weighted): ${grade}%
Total Score (unweighted): ${ugrade}%`; - return; - } - - this.totalOutput.innerHTML = `Total Score: ${grade}%`; - } - - get elemTotal() { - return this.totalOutput; - } -} \ No newline at end of file diff --git a/pages/grade-calc/index.html b/pages/grade-calc/index.html deleted file mode 100644 index ac96035..0000000 --- a/pages/grade-calc/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - Grade Calc - - - - -

PaulW.XYZ / Pages / Grade Calculator

-
-
-

About

- Check out the README.md file - to learn more about the configuration structure. -

Usage

-
    -
  1. Either configure the calculator using the text box below or load one from the existing JSON files to - generate one.
  2. -
  3. Click Generate.
  4. -
  5. Enter the input values.
  6. -
-
- -
-
-
- - - - - diff --git a/pages/index.html b/pages/index.html deleted file mode 100644 index 8a0d0cf..0000000 --- a/pages/index.html +++ /dev/null @@ -1,20 +0,0 @@ - - - - - PaulW.XYZ / Pages - - - - - - - - \ No newline at end of file diff --git a/pages/playlists.html b/pages/playlists.html deleted file mode 100644 index c6b0b3f..0000000 --- a/pages/playlists.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - Pages / Playlists - - - - -

PaulW.XYZ / Pages / Playlists

-
-

Music

-

Classical by Composer

- - - - - diff --git a/pages/recommended.html b/pages/recommended.html deleted file mode 100644 index fd4714f..0000000 --- a/pages/recommended.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - Pages / Recommended - - - - - -

PaulW.XYZ / Pages / Recommended

-
-

If the one you're looking for is not on this list, it is most likely I haven't had the chance to read it yet or I may have put it on the Resources page, if it is freely available.

-
-

Books

-

Technology

-

C programming

-
    -
  • The C Programming Language [K&R] duh
  • -
  • Expert C Programming by Peter van der Linden
  • -
  • Practical C Programming by Steve Oualline (kind of outdated but still good)
  • -
-

Operating Systems

-
    -
  • Advanced Programming in the Unix Environment by W. Richard Stevens
  • -
  • Operating Systems: Design and Implementation by Andrew S. Tanenbaum (I haven't had a chance to read his other books on OS. I am not a fan of his networking book though.)
  • -
- - - -

Computer Engineering

-
    -
  • Making Embedded Systems: Design Patterns for Great Software by Elecia White
  • - -
- - - -

Compilers

-
    -
  • Compilers: Principles, Techniques, and Tools [Dragon Book] (discusses theory in detail so it is kind of hard to read)
  • -
- -

Other

-
    -
  • Definitive Guide to sed: Tutorial and Reference
  • -
- -

Classics

-

Only the English ones for now.

-
    -
  • A Tale of Two Cities
  • -
  • The Mayor of Casterbridge
  • -
  • The Citadel
  • -
  • Oliver Twist
  • -
  • Macbeth
  • -
  • Othello
  • -
  • Adventures of Huckleberry Finn
  • -
- -

Languages

-
    -
  • Lingua Latina per se Illustrata (Both parts)
  • -
-
- -

Movies

-
    -
  • Blade Runner 2049
  • -
  • The Hateful Eight
  • -
  • Goodfellas
  • -
  • Inception
  • -
  • Memento
  • -
  • The Grand Budapest Hotel
  • -
-
- -

Music

-
    -
  • Große Fuge Op. 133
  • -
  • KV 387
  • -
  • KV 448
  • -
  • BWV 1048
  • -
  • Prelude in G Minor (Op. 23 No. 5)
  • -
  • String Quartet, Op. 20 No. 2 (Haydn)
  • -
-
- -

Video Games

-
    -
  • The Legend of Zelda: Breath of the Wild
  • -
  • Portal 2
  • -
-
- - \ No newline at end of file diff --git a/pages/resources.html b/pages/resources.html deleted file mode 100644 index 64ee305..0000000 --- a/pages/resources.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - Pages / Resources - - - - -

PaulW.XYZ / Pages / Resources

-
-

Programming

- -

Posts

- -

Talks

- -

Electrical

- -

Other Topics

- -
- - \ No newline at end of file diff --git a/scripts/fuzzy.js b/scripts/fuzzy.js deleted file mode 100644 index dbae39f..0000000 --- a/scripts/fuzzy.js +++ /dev/null @@ -1,144 +0,0 @@ -(() => { - let searchField = document.querySelector("#search"); - if (searchField === null) - return; - - let client = new XMLHttpRequest(); - client.open("GET", "/pages.json"); - client.onreadystatechange = () => { - if (client.readyState === 4) - fuzzyInit(client.responseText); - } - client.send(); - searchField.focus(); -})(); - -function fuzzyInit(pagesFileName) { - if (pagesFileName == "") - return; - - let searchField = document.querySelector("#search"); - let resultBlock = document.querySelector("#results"); - if (searchField === null || resultBlock === null) - return; - - var pages; - try { - pages = JSON.parse(pagesFileName); - } catch (e) { - console.error(e); - document.body.innerHTML = e.message; - return; - } - - pages.sort((x, y) => {return ('' + x.title).localeCompare(y.title)}); - - searchField.addEventListener("keyup", (e) => { - - let searchValue = searchField.value ? searchField.value.toLowerCase() : ""; - - if (e.code === "Enter") { - if (resultBlock.childNodes === null - || resultBlock.childNodes[0] === null - || resultBlock.childNodes[0].href === undefined) - return; - - window.location = resultBlock.childNodes[0].href; - return; - } - - // help - if (searchValue === "?" || searchValue === "help") { - resultBlock.innerHTML = "

Help

Enter a page or directory name.
If do not know any, clear the search field to list everything.
Using the Enter key would take you to the first page in list, if the list is not empty.
Alternatively, use the Up and Down arrow keys to select the page you want and use the Enter key.
Use Backspace to go back to the search." - return; - } - - let results = []; - for (const [i, page] of pages.entries()) { - ret = fuzzySearch(page.title, searchValue); - if (ret === null) - continue; - results.push({formatted: ret.formatted, link: page.link, score: ret.score}); - } - - results.sort((x, y) => {return x.score - y.score}); - - resultBlock.innerHTML = ""; - for (const res of results) { - linkBlock = document.createElement("a"); - linkBlock.classList.add("hyperlink"); - linkBlock.href = res.link; - linkBlock.innerHTML = `
${res.formatted}
`; - resultBlock.appendChild(linkBlock); - } - - if (results.length <= 0) - resultBlock.innerHTML = "Unknown command or no matching pages found." - }); - - document.body.addEventListener("keydown", (e) => { - if (e.code === "Backspace") { - searchField.focus(); - } - - if (e.code === "ArrowDown" || e.code === "ArrowUp") { - if (resultBlock.childNodes === null) - return; - - resultNodes = resultBlock.childNodes; - - if (resultNodes.length <= 1) - return; - - let currNode = document.activeElement; - - if (searchField === currNode) { - e.preventDefault(); - if (e.code === "ArrowDown") - resultNodes[0].focus(); - else - resultNodes[resultNodes.length - 1].focus(); - return; - } - - if (Array.from(resultNodes).indexOf(currNode) < 0) - return; - - e.preventDefault(); - if (e.code === "ArrowDown") - if (currNode.nextElementSibling === null) - searchField.focus(); - else - currNode.nextElementSibling.focus(); - else if (e.code === "ArrowUp") - if (currNode.previousElementSibling === null) - searchField.focus(); - else - currNode.previousElementSibling.focus(); - return; - } - }); -} - -function fuzzySearch(findIn, find) { - let search = find.replace(/\s/g, ""); - search = search.toLowerCase(); - let tokens = findIn.split(''); - let pc = 0; - let score = 0; - - for (const [i, ch] of tokens.entries()) { - if (ch.toLowerCase() === search[pc]) { - score += i - pc; - tokens[i] = `${ch}`; - pc++; - if (search.length < pc) - return null; - } - } - - if (search.length === pc) - return {formatted: tokens.join(''), score: (score / search.length)}; - - return null; -} \ No newline at end of file diff --git a/site.json b/site.json deleted file mode 100644 index d2a5189..0000000 --- a/site.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "root", - "domain": "paulw.xyz", - "children": [ - { - "name": "pages", - "type": "directory", - "children": [ - { - "name": "resources", - "type": "html" - }, - { - "name": "recommended", - "type": "html" - }, - { - "name": "playlists", - "type": "html" - }, - { - "name": "grade-calc", - "type": "directory", - "text": "Grade Calculator" - } - ] - }, - { - "name": "about", - "type": "html" - }, - { - "name": "github", - "type": "external", - "text": "GitHub", - "url": "https://github.com/LambdaPaul" - }, - { - "name": "gitlab", - "type": "external", - "text": "GitLab", - "url": "https://gitlab.com/LambdaPaul" - }, - { - "name": "mastodon", - "type": "external", - "url": "https://mastodon.social/@lambdapaul" - }, - { - "name": "keybase", - "type": "external", - "url": "https://keybase.io/lambdapaul" - }, - { - "name": "matrix", - "type": "external", - "url": "https://matrix.to/#/@lambdapaul:matrix.org" - } - ] -} diff --git a/stylesheets/persia.css b/stylesheets/persia.css deleted file mode 100644 index c6473c2..0000000 --- a/stylesheets/persia.css +++ /dev/null @@ -1,259 +0,0 @@ -* { - box-sizing: border-box; -} - -html { - font-family: sans-serif; - line-height: 1.15; - -webkit-text-size-adjust: 100%; - -webkit-tap-highlight-color: rgba(0, 0, 0, 0); - height: 100%; -} - -article, -aside, -figcaption, -figure, -footer, -header, -hgroup, -main, -nav, -section { - display: block; -} - -body { - margin: 0; - font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; - font-size: 16px; - font-weight: 400; - line-height: 1.5; - color: #fff; - text-align: left; - height: 100%; - background: linear-gradient(to bottom right, #64a95a, #388c73) no-repeat - center center fixed; - background-color: #539c65; - background-size: cover; - margin-bottom: 1rem; -} - -[tabindex="-1"]:focus { - outline: 0 !important; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: 0.5rem; -} - -h1, -.h1 { - font-size: 2.5rem; -} - -h2, -.h2 { - font-size: 2rem; -} - -h3, -.h3 { - font-size: 1.75rem; -} - -h4, -.h4 { - font-size: 1.5rem; -} - -h5, -.h5 { - font-size: 1.25rem; -} - -h6, -.h6 { - font-size: 1rem; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -a { - color: #009dff; - text-decoration: underline; - background-color: transparent; - outline: none; -} -a:hover { - text-decoration: underline; -} -a:focus { - text-decoration: underline dotted; -} - -section { - margin: 0.5rem; -} - -.button { - display: inline-block; - font-weight: 400; - text-align: center; - user-select: none; - background-color: transparent; - border: 1px solid transparent; - text-decoration: none; - padding: 0.25rem 1rem; - font-size: 1rem; - line-height: 1.5; - border: none; - border-radius: 0.25rem; - transition: filter 250ms ease; - color: #fff; - background: linear-gradient(rgb(76 70 167), rgb(0 43 255)); - margin: 0.25rem 0; - box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.05), 0 2px 3px 0 rgba(255, 255, 255, 0.1); - cursor: pointer; -} - -.button:hover { - filter: brightness(125%); - color: #fff; - text-decoration: none; -} - -.button:focus { - box-shadow: 0 0 0 0.1rem rgb(255, 255, 255); - border: none; - outline: none; -} - -.title { - white-space: pre-wrap; - padding: 0.25rem 0.5rem; - font-size: 3rem; - box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); - background-color: rgba(0,0,0,0.5); -} - -.input { - display: inline-block; - box-shadow: inset 0 4px 8px 0 rgba(0,0,0,0.2); - padding: 0.5rem; - border: none; - outline: none; -} - -.nav-list { - margin: 1rem; - padding: 1rem; - box-shadow: inset 0 4px 8px 0 rgba(0,0,0,0.2); - background-color: rgba(0,0,0,0.5); -} - -.fuzzynav { - position: relative; - margin: 2rem; -} - -.fuzzynav input.search { - display: block; - width: 100%; - font-size: 2rem; - background: linear-gradient(rgba(116, 116, 116, 0.2),rgba(65, 65, 65, 0.2)); - box-shadow: inset 0 4px 8px 0 rgba(0,0,0,0.2); - padding: 0.5rem; - color: rgb(255, 255, 255); - border: none; - outline: none; -} - - -.fuzzynav input.search::placeholder { - color: rgb(214, 214, 214); - font-style: italic; -} - -.block, -.fuzzynav div.results { - margin: 1rem; - padding: 1rem; - box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2); - background-color: rgba(0,0,0,0.5); -} -span.clear { - clear: both; - display: block; -} - -.nav-list a, -.fuzzynav div.results .hyperlink { - color: #009dff; - background-color: #539c65; - display: block; - padding: 0.5rem; - width: 100%; - margin: 0.5rem auto; - font-size: 1.2rem; - transition: 300ms cubic-bezier(0.075, 0.82, 0.165, 1); - text-decoration: none; - background: linear-gradient(to bottom right, #64a95a, #388c73) no-repeat - center center fixed; -} - -.nav-list a:hover, -.fuzzynav div.results .hyperlink:hover { - text-decoration: none; - transform: scale(1.01); -} - -.fuzzynav div.results .hyperlink:focus { - box-shadow: 0 0 1px 1px rgb(255, 255, 255); -} - -.nav-list a, -.fuzzynav div.results .hyperlink .name { - color: #ffffff; -} - -.fuzzynav div.results .hyperlink .link { - color: #0000FE; - text-align: right; - font-size: 1rem; -} - -.fuzzynav div.results .hyperlink .highlight { - text-decoration: underline; -} - -footer { - color: #fff; - float: right; - margin: 0.5rem; -} - -.m-icon { - width: 256px; - height: 256px; - position: fixed; - bottom: 0; - left: 0; - z-index: -1; -} -