diff --git a/404.html b/404.html new file mode 100644 index 0000000..b2961af --- /dev/null +++ b/404.html @@ -0,0 +1,87 @@ + + + +
+ + +
+ Uh oh! The page you are looking for does not exist...
+ [Wikipedia] Learn more about HTTP status codes.
+
Using the search bar will clear this message and list responses based on your query.
+Press any key to clear this message...
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.
The home page or the index page solely acts as a gateway to all the other pages on the site.
diff --git a/pages.json b/pages.json
index 5e2512b..8fd9ae0 100644
--- a/pages.json
+++ b/pages.json
@@ -1,7 +1,10 @@
[
- ["Pages", "/pages/"],
- ["Resources", "/pages/resources"],
- ["Recommended", "/pages/recommended"],
- ["Grade Calculator", "/pages/grade-calc/"],
- ["GitHub", "https://github.com/lambdapaul"]
+ {"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":"Keybase", "link": "https://keybase.io/lambdapaul"}
]
\ No newline at end of file
diff --git a/scripts/fuzzy.js b/scripts/fuzzy.js
index a7b5510..76054a1 100644
--- a/scripts/fuzzy.js
+++ b/scripts/fuzzy.js
@@ -1,19 +1,27 @@
-// good luck reading through this
-(function () {
- var client = new XMLHttpRequest();
+setTimeout(() => {
+ 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();
- document.querySelector("#search").focus();
-})();
+ searchField.focus();
+}, 50);
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);
@@ -25,66 +33,97 @@ function fuzzyInit(pagesFileName) {
pages.sort();
- document.querySelector("#search")
- .addEventListener("keyup", (e) => {
- switch (e.code) {
- case "Enter":
- if (document.querySelector("#results").childNodes[0].href === undefined)
- return;
- window.location = document.querySelector("#results").childNodes[0].href;
- break;
- case "ArrowDown":
- console.log("S");
- break;
- case "ArrowUp":
- console.log("W");
- break;
- }
+ searchField.addEventListener("keyup", (e) => {
- // help
- if (document.querySelector("#search").value === "?" || document.querySelector("#search").value == "help") {
- document.querySelector("#results").innerHTML = "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 it is not empty."
+ 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;
}
-
- // if (document.querySelector("#search").value === ""){
- // document.querySelector("#results").innerHTML = "Try entering something into the input field...";
- // return;
- // }
+ // help
+ if (searchValue === "?" || searchValue === "help") {
+ resultBlock.innerHTML = "
Enter
key would take you to the first page in list, if the list is not empty.Up
and Down
arrow keys to select the page you want and use the Enter
key."
+ return;
+ }
let results = [];
- for (const [i, [title, page]] of pages.entries()) {
- ret = fuzzySearch(title, document.querySelector("#search").value);
+ for (const [i, page] of pages.entries()) {
+ ret = fuzzySearch(page.title, searchValue);
if (ret === null)
continue;
- results.push([ret, page]);
+ results.push({formatted: ret.formatted, link: page.link, score: ret.score});
}
- results.sort((x, y) => {return x[0].second - y[0].second});
+ results.sort((x, y) => {return x.score - y.score});
- let output = "";
- for (const [hfRet, rlink] of results) {
- output += `