207 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			207 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
 *
 | 
						|
 * @licstart  The following is the entire license notice for the
 | 
						|
 *  JavaScript code in this page.
 | 
						|
 *
 | 
						|
 * Copyright (C) 2018 Jaume Fuster i Claris
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * The JavaScript code in this page is free software: you can
 | 
						|
 * redistribute it and/or modify it under the terms of the GNU
 | 
						|
 * General Public License (GNU GPL) as published by the Free Software
 | 
						|
 * Foundation, either version 3 of the License, or (at your option)
 | 
						|
 * any later version.  The code is distributed WITHOUT ANY WARRANTY;
 | 
						|
 * without even the implied warranty of MERCHANTABILITY or FITNESS
 | 
						|
 * FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.
 | 
						|
 *
 | 
						|
 * As additional permission under GNU GPL version 3 section 7, you
 | 
						|
 * may distribute non-source (e.g., minimized or compacted) forms of
 | 
						|
 * that code without the copy of the GNU GPL normally required by
 | 
						|
 * section 4, provided you include this license notice and a URL
 | 
						|
 * through which recipients can access the Corresponding Source.
 | 
						|
 *
 | 
						|
 * @licend  The above is the entire license notice
 | 
						|
 * for the JavaScript code in this page.
 | 
						|
 *
 | 
						|
 */
 | 
						|
 | 
						|
// "Thus, programs must be written for people to read, and only incidentally for machines to execute."
 | 
						|
// TODO: Commenting.
 | 
						|
 | 
						|
// ---------- CONFIGURATION ----------
 | 
						|
 | 
						|
// div.innerHTML : {a.innerHTML : a.href}
 | 
						|
var sites = {
 | 
						|
  "E-Mail": {
 | 
						|
    GMail: "https://mail.google.com/mail/u/0/",
 | 
						|
    Posteo: "https://www.posteo.de",
 | 
						|
    realcore: "https://outlook.office365.com/mail/inbox",
 | 
						|
    gCal: "https://calendar.google.com/calendar/r",
 | 
						|
    Keep: "https://keep.google.com/u/0/",
 | 
						|
  },
 | 
						|
  Work: {
 | 
						|
    gitlab: "https://gitlab.com/nutmountain/landgard?sort=updated_desc",
 | 
						|
    "enfore api docs": "https://docs.apis.enfore.com/",
 | 
						|
    apex:
 | 
						|
      "https://18.185.159.119:8443/ords/f?p=123:LOGIN_DESKTOP:15410784571178:::::",
 | 
						|
    aws:
 | 
						|
      "https://us-east-1.signin.aws.amazon.com/oauth?SignatureVersion=4&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJMOATPLHVSJ563XQ&X-Amz-Date=2019-10-15T15%3A01%3A16.654Z&X-Amz-Signature=5cd9c455e673d043421f5bc47b87c61a438cd5b85d808f85e6b3304f0ef6c2de&X-Amz-SignedHeaders=host&client_id=arn%3Aaws%3Aiam%3A%3A015428540659%3Auser%2Fhomepage&redirect_uri=https%3A%2F%2Fconsole.aws.amazon.com%2Fconsole%2Fhome%3Fstate%3DhashArgs%2523%26isauthcode%3Dtrue&response_type=code&state=hashArgs%23",
 | 
						|
    "rc-intranet": "https://realcorevv.sharepoint.com/sites/RC-Intranet/",
 | 
						|
  },
 | 
						|
  Social: {
 | 
						|
    WhatsApp: "https://web.whatsapp.com",
 | 
						|
    Telegram: "https://web.telegram.org",
 | 
						|
    discord: "https://discordapp.com/channels/@me",
 | 
						|
    YouTube: "https://www.youtube.com/",
 | 
						|
    threema: "https://web.threema.ch",
 | 
						|
  },
 | 
						|
  News: {
 | 
						|
    golem: "https://www.golem.de/",
 | 
						|
    heise: "https://www.heise.de/",
 | 
						|
    WAZ: "http://www.waz.de",
 | 
						|
    FAZ: "http://www.faz.net",
 | 
						|
    HackerNews: "https://news.ycombinator.com/",
 | 
						|
  },
 | 
						|
  Programming: {
 | 
						|
    "/r/programming": "https://reddit.com/r/programming",
 | 
						|
    Github: "https://github.com/",
 | 
						|
    gisthub: "https://gist.github.com/",
 | 
						|
    regex101: "https://regex101.com/",
 | 
						|
    extensions: "http://extensionmethod.net/csharp",
 | 
						|
  },
 | 
						|
  reddit: {
 | 
						|
    linux: "https://reddit.com/r/linux",
 | 
						|
    sffpc: "https://reddit.com/r/sffpc",
 | 
						|
    unixporn: "https://reddit.com/r/unixporn",
 | 
						|
    games: "https://reddit.com/r/games",
 | 
						|
    switchhacking: "https://reddit.com/r/switchhaxing+switchhacks",
 | 
						|
  },
 | 
						|
  hosted: {
 | 
						|
		yavin: "http://yavin:8181",
 | 
						|
    gitea: "http://gitea.brudi.xyz",
 | 
						|
    send: "http://send.brudi.xyz",
 | 
						|
    kanban: "http://kanboard.brudi.xyz",
 | 
						|
		media: "https://media.hartzarett.ruhr"
 | 
						|
  },
 | 
						|
  Games: {
 | 
						|
    // To find the game ID check the url in the store page or the community page
 | 
						|
    "CS:GO": "steam://run/730",
 | 
						|
    "Lost Ark": "steam://run/1599340",
 | 
						|
    "Golf It!": "steam://run/571740",
 | 
						|
    PUBG: "steam://run/578080",
 | 
						|
    // "West of Loathing": "steam://run/597220",
 | 
						|
    // "POSTAL 2": "steam://run/223470",
 | 
						|
  },
 | 
						|
};
 | 
						|
 | 
						|
var search = {
 | 
						|
  default: "https://duckduckgo.com/",
 | 
						|
  g: "https://google.com/search",
 | 
						|
  d: "https://duckduckgo.com/",
 | 
						|
  s: "https://startpage.com/do/search",
 | 
						|
};
 | 
						|
 | 
						|
var pivotmatch = 0;
 | 
						|
var totallinks = 0;
 | 
						|
var prevregexp = "";
 | 
						|
 | 
						|
// ---------- BUILD PAGE ----------
 | 
						|
function matchLinks(regex = prevregexp) {
 | 
						|
  totallinks = 0;
 | 
						|
  pivotmatch = regex == prevregexp ? pivotmatch : 0;
 | 
						|
  prevregexp = regex;
 | 
						|
  pivotbuffer = pivotmatch;
 | 
						|
  p = document.getElementById("links");
 | 
						|
  while (p.firstChild) {
 | 
						|
    p.removeChild(p.firstChild);
 | 
						|
  }
 | 
						|
  if (regex.charAt(1) == " " && search.hasOwnProperty(regex.charAt(0))) {
 | 
						|
    document.getElementById("action").action = search[regex.charAt(0)];
 | 
						|
    document.getElementById("action").children[0].name = "q";
 | 
						|
  } else {
 | 
						|
    match = new RegExp(regex ? regex : ".", "i");
 | 
						|
    gmatches = false; // kinda ugly, rethink
 | 
						|
    for (i = 0; i < Object.keys(sites).length; i++) {
 | 
						|
      matches = false;
 | 
						|
      sn = Object.keys(sites)[i];
 | 
						|
      section = document.createElement("div");
 | 
						|
      section.id = sn;
 | 
						|
      section.innerHTML = sn;
 | 
						|
      section.className = "section";
 | 
						|
      inner = document.createElement("div");
 | 
						|
      for (l = 0; l < Object.keys(sites[sn]).length; l++) {
 | 
						|
        ln = Object.keys(sites[sn])[l];
 | 
						|
        if (match.test(ln)) {
 | 
						|
          link = document.createElement("a");
 | 
						|
          link.href = sites[sn][ln];
 | 
						|
          link.innerHTML = ln;
 | 
						|
          if (!pivotbuffer++ && regex != "") {
 | 
						|
            link.className = "selected";
 | 
						|
            document.getElementById("action").action = sites[sn][ln];
 | 
						|
            document
 | 
						|
              .getElementById("action")
 | 
						|
              .children[0].removeAttribute("name");
 | 
						|
          }
 | 
						|
          inner.appendChild(link);
 | 
						|
          matches = true;
 | 
						|
          gmatches = true;
 | 
						|
          totallinks++;
 | 
						|
        }
 | 
						|
      }
 | 
						|
      section.appendChild(inner);
 | 
						|
      matches ? p.appendChild(section) : false;
 | 
						|
    }
 | 
						|
    if (!gmatches || regex == "") {
 | 
						|
      document.getElementById("action").action = search["default"];
 | 
						|
      document.getElementById("action").children[0].name = "q";
 | 
						|
    }
 | 
						|
  }
 | 
						|
  document.getElementById("main").style.height =
 | 
						|
    document.getElementById("main").children[0].offsetHeight + "px";
 | 
						|
}
 | 
						|
 | 
						|
document.onkeydown = function (e) {
 | 
						|
  switch (e.keyCode) {
 | 
						|
    case 38:
 | 
						|
      pivotmatch = pivotmatch >= 0 ? 0 : pivotmatch + 1;
 | 
						|
      matchLinks();
 | 
						|
      break;
 | 
						|
    case 40:
 | 
						|
      pivotmatch =
 | 
						|
        pivotmatch <= -totallinks + 1 ? -totallinks + 1 : pivotmatch - 1;
 | 
						|
      matchLinks();
 | 
						|
      break;
 | 
						|
    default:
 | 
						|
      break;
 | 
						|
  }
 | 
						|
  document.getElementById("action").children[0].focus();
 | 
						|
};
 | 
						|
 | 
						|
document.getElementById("action").children[0].onkeypress = function (e) {
 | 
						|
  if (e.key == "ArrowDown" || e.key == "ArrowUp") {
 | 
						|
    return false;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
function displayClock() {
 | 
						|
  now = new Date();
 | 
						|
  clock =
 | 
						|
    (now.getHours() < 10 ? "0" + now.getHours() : now.getHours()) +
 | 
						|
    ":" +
 | 
						|
    (now.getMinutes() < 10 ? "0" + now.getMinutes() : now.getMinutes()) +
 | 
						|
    ":" +
 | 
						|
    (now.getSeconds() < 10 ? "0" + now.getSeconds() : now.getSeconds());
 | 
						|
  document.getElementById("clock").innerHTML = clock;
 | 
						|
}
 | 
						|
 | 
						|
window.onload = matchLinks();
 | 
						|
document.getElementById("action").onsubmit = function () {
 | 
						|
  svalue = this.children[0].value;
 | 
						|
  if (svalue.charAt(1) == " " && search.hasOwnProperty(svalue.charAt(0))) {
 | 
						|
    this.children[0].value = svalue.substring(2);
 | 
						|
  }
 | 
						|
  return true;
 | 
						|
};
 | 
						|
displayClock();
 | 
						|
setInterval(displayClock, 1000);
 |