Files
monkeygg2.github.io/js/index.js
T

202 lines
5.8 KiB
JavaScript

let currentMenu = $(".homepage");
$(".column button .card").on("click", function () {
let nextMenu = this.getAttribute("data");
if (nextMenu == "homepage") {
$(".side-buttons").fadeOut(300);
}
currentMenu.fadeOut(300, () => {
$("." + nextMenu).fadeIn(200);
});
currentMenu = $(nextMenu);
if (currentMenu != $(".homepage")) {
$(".side-buttons").fadeIn(200);
}
});
// Function to calculate the
// Jaro Similarity of two strings
// from https://www.geeksforgeeks.org/jaro-and-jaro-winkler-similarity/
function jaro_distance(s1, s2) {
// If the strings are equal
if (s1 == s2)
return 1.0;
// Length of two strings
let len1 = s1.length, len2 = s2.length;
if (len1 == 0 || len2 == 0)
return 0.0;
// Maximum distance upto which matching
// is allowed
let max_dist = Math.floor(Math.max(len1, len2) / 2) - 1;
// Count of matches
let match = 0;
// Hash for matches
let hash_s1 = new Array(s1.length);
hash_s1.fill(0);
let hash_s2 = new Array(s2.length);
hash_s2.fill(0);
// Traverse through the first string
for (let i = 0; i < len1; i++) {
// Check if there is any matches
for (let j = Math.max(0, i - max_dist);
j < Math.min(len2, i + max_dist + 1); j++)
// If there is a match
if (s1[i] == s2[j] &&
hash_s2[j] == 0) {
hash_s1[i] = 1;
hash_s2[j] = 1;
match++;
break;
}
}
// If there is no match
if (match == 0)
return 0.0;
// Number of transpositions
let t = 0;
let point = 0;
// Count number of occurrences
// where two characters match but
// there is a third matched character
// in between the indices
for (let i = 0; i < len1; i++)
if (hash_s1[i] == 1) {
// Find the next matched character
// in second string
while (hash_s2[point] == 0)
point++;
if (s1[i] != s2[point++])
t++;
}
t /= 2;
// Return the Jaro Similarity
return ((match) / (len1)
+ (match) / (len2)
+ (match - t) / (match))
/ 3.0;
}
// Jaro Winkler Similarity
function jaroWinklerSimilarity(s1, s2) {
let jaro_dist = jaro_distance(s1, s2);
// If the jaro Similarity is above a threshold
if (jaro_dist > 0.7) {
// Find the length of common prefix
let prefix = 0;
for (let i = 0; i < Math.min(s1.length, s2.length); i++) {
// If the characters match
if (s1[i] == s2[i])
prefix++;
// Else break
else
break;
}
// Maximum of 4 characters are allowed in prefix
prefix = Math.min(4, prefix);
// Calculate jaro winkler Similarity
jaro_dist += 0.1 * prefix * (1 - jaro_dist);
}
return jaro_dist.toFixed(6);
}
function searchGamesList() {
const input = $("#search");
const filter = input.val().toLowerCase();
const elems = Array.from(document.querySelectorAll("#gamesList li"));
for (i = 0; i < elems.length; i++) {
if (jaroWinklerSimilarity(filter, elems[i].innerHTML.toLowerCase().slice(0, filter.length - 1)) >= 0.9 && elems[i].innerHTML.length > 3 || elems[i].innerHTML.toLowerCase().indexOf(filter) > -1) {
elems[i].style.display = "";
} else {
elems[i].style.display = "none";
}
}
}
function updateList() {
const filter = $("#search").val().toLowerCase();
const elems = Array.from(document.querySelectorAll("#gamesList li"));
const sortType = $("#sort").val();
// sort by selected sort type
elems.sort(function (a, b) {
if (sortType === 'alphabetical') {
return a.textContent.localeCompare(b.textContent);
} else if (sortType === 'reverse') {
return b.textContent.localeCompare(a.textContent);
}
});
// then filter items with the search input
elems.forEach(function (item) {
if (jaroWinklerSimilarity(filter, item.innerHTML.toLowerCase().slice(0, filter.length - 1)) >= 0.9 && item.innerHTML.length > 3 || item.innerHTML.toLowerCase().indexOf(filter) > -1) {
item.style.display = "";
} else {
item.style.display = "none";
}
});
// now sort by jaro winkler distance
elems.sort(function (a, b) {
const distanceA = jaroWinklerSimilarity(filter, a.textContent.toLowerCase());
const distanceB = jaroWinklerSimilarity(filter, b.textContent.toLowerCase());
return distanceA - distanceB;
})
// then fill it with the sorted and filtered list
for (const item of elems) {
document.getElementById("gamesList").appendChild(item);
}
}
$("#search").on("input", updateList);
$("#sort").on("change", updateList);
function makeclone() {
if ((window.top.location.href != "about:blank")) {
var url = window.location.href;
win = window.open();
if (!win || win.closed || typeof win.closed == 'undefined') {
alert('Please allow Pop-Ups - By disabling popups, you allow this website to show up in your history.');
} else {
win.document.body.style.margin = "0";
win.document.body.style.height = "100vh";
var iframe = win.document.createElement("iframe");
iframe.style.border = "none";
iframe.style.width = "100%";
iframe.style.height = "100%";
iframe.style.margin = "0";
iframe.referrerpolicy = "no-referrer";
iframe.allow = "fullscreen";
iframe.src = url.toString();
win.document.body.appendChild(iframe);
window.location.replace("https://classroom.google.com");
}
}
}