Create script.js
diff --git a/script.js b/script.js
new file mode 100644
index 0000000..3118c86
--- /dev/null
+++ b/script.js
@@ -0,0 +1,347 @@
+// JavaScript Document
+$(document).ready(function(e) {
+ /* Todo:
+ • Merge this with Node.js, almost done
+ • Webpages in a database/more editable version
+ • Add cookies to track previous commands? (You can press up and down to browse previous commands this session)
+*/
+ var faviconnumber = 1;
+ function favicon() {
+ favicon = favicon == 1 ? 2 : 1;
+ $('.favicon').attr('href','favicon' + favicon + ".png");
+ }
+ console.clear();
+ var commandlist = [ /*Can be populated with various methods*/
+ ["/help", "Show commands"],
+ ["/list", "List all pages on the website"],
+ ["/nav <location>", "Navigate to location"],
+ ["/gl", "Generate a url for the current page - [^http://koya.io/](This doesn't work in an iframe, try it at *Koya.io*) outputs something like [^http://koya.io/connect](*koya.io/connect*)"],
+ ["/clear", "Clear the console"],
+ ["/login <username> <password>", "Login to your account - This is not set up and when implemeneted it'll be '/login username' then request password without printing into the cmd prompt"],
+ ["/upload", "Upload file, must be logged in."]
+ ];
+ var previouscommands = [];
+ var currentcommand = 0;
+ var pages = [ /*Can be populated with various methods*/
+ ["index", "Welcome to Koya.io", "Simply, this is just a sandbox in which to add to; no real point - a couple of features that I plan to add though:", "URL shortner and open tracker, just enter a URL into the command line and press enter and you will get 2 links - 1 which looks like [http://koya.io/XXXXXX](http://koya.io/XXXXXX) and another [http://koya.io/u/XXXXXX](http://koya.io/u/XXXXXX) : they will both forward but the second will show a preview of the full url so they know where you are going.", "You can also save small messages with `/msg <string <160 chars>` and you will get a url like [http://koya.io/XXXXXX](http://koya.io/XXXXXX)","Pressing Ctrl+v will paste the short text or image and you will get a link.", "There will be accounts but likely given out rather than being able to register them whenever, this is a personal site so idk."],
+ ["about", "About Koya.io", "Personal power website for Finn 'Koya' Shackleton.", "Will include some features which too are mainly for personal use: Link shortner, image host, pastebin and any sandbox testing", "The colours have been taken from [https://github.com/Poorchop/darktooth-theme-ports/tree/8c852e8edde8df57d831dc8631493b0565fadbbc/hexchat-darktooth](Poorchop's Darktooth HexChat theme)", "In the process of turning the website into a server sided thing, currently what you can read is in the [http://koya.io/scripts.js](JavaScript file)!"],
+ ["connect", "Connect with Koya",
+ "[mailto:_@koya.io](Email _@koya.io)",
+ "[skype:finn.shackleton](Skype)",
+ "[^http://steamcommunity.com/id/bananabutterscotchmaplepancakes](Steam) < Always available",
+ "[^http://codepen.io/OfficialAntarctica](Codepen)",
+ "[^http://everybodyedits.com/profiles/bbmp](Everybody Edits)"]
+ ];
+ var pageindex = ["index", "about", "connect"];
+ var currentpage = "landing";
+ var url = "http://koya.io/"
+ /*
+ Custom Text Syntax
+ Links:
+ [URLPATH](NAME) - regular
+ [^URLPATH](NAME) - open in new tab
+
+ Styles:
+ *TEXT* - bold text
+ E! - Text is an error/notification
+ A! - spaces are converted to non-breaking spaces (it's for ascii art - after all, this is a text based website)
+ */
+
+ function init() {
+ setInterval(time);
+ console.clear();
+ console.log(new Date().getTime());
+ log("Website", "A!********************************");
+ log("Website", "A!* ____ _ ___ ____ ____ *");
+ log("Website", "A!* | __ )| | |_ _/ ___/ ___| *");
+ log("Website", "A!* | _ \ | | | |\___ \___ \ *");
+ log("Website", "A!* | |_) | |___ | | ___) |__) | *");
+ log("Website", "A!* |____/|_____|___|____/____/ *");
+ log("Website", "A!* *");
+ log("Website", "A!********************************");
+ log("Website", "A!Have A Truly Blissful Experience");
+ log("Website", "A!********************************");
+ log("Website", "");
+ log("Website", "E!Bliss ROMs temporary site [^http://blissroms.io/](*blissroms.io*)");
+ log("Website", "");
+ log("Website", "A!********************************");
+ log("Website", "");
+ log("Website", "E , [^http://paypal.me/TeamBliss](*Donate to Team Bliss*)");
+ urlvars();
+ log("Client", "For help say '/help'");
+ setInterval(favicon,500);
+ }
+
+ function urlvars() {
+ var pagelocs = window.location.pathname.replace("/","").split("/");
+ var pageloc = pagelocs[0];
+ console.log(pageloc);
+ //alert();
+ if(pageloc != "") {
+ if ($.inArray(pageloc, pageindex) >= 0) {
+ currentpage = pageloc;
+ }
+ }
+ log("Website", "You are currently on page: *" + currentpage + "*");
+ if(pageloc != "") {
+ if ($.inArray(pageloc, pageindex) >= 0) {
+ currentpage = pageloc;
+ loadpage($.inArray(pageloc, pageindex));
+ } else {
+ //Un-note next line to show 404 errors with wrong urls
+ //log("Client", "404 - The page '" + pageloc + "' does not exist. To ");
+ }
+ }
+ if(pageloc == "") {
+ log("Client", "What would you like to access?");
+ }
+ }
+ function getParam(name){
+ name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
+ var regexS = "[\\?&]"+name+"=([^&#]*)";
+ var regex = new RegExp( regexS );
+ var results = regex.exec (window.location.href);
+ if (results == null) {
+ return "";
+ }
+ else {
+ return results[1];
+ }
+ }
+
+ function log(name, information) {
+ var d = new Date();
+ var hours = ((d.getHours() < 10) ? "0" : "") + d.getHours();
+ var minutes = ((d.getMinutes() < 10) ? "0" : "") + d.getMinutes();
+ var seconds = ((d.getSeconds() < 10) ? "0" : "") + d.getSeconds();
+ var colour = "whitet";
+ var textcolour = "";
+ var postcolour = "";
+
+ switch (name[0]) {
+ case "!":
+ postcolour = " important";
+ name = name.substr(1);
+ break;
+ }
+ switch (name) {
+ case "Website":
+ colour = "redt";
+ break;
+ case "Server":
+ colour = "bluet";
+ break;
+ case "Client":
+ colour = "bluet";
+ break;
+ case "User":
+ colour = "greent";
+ postcolour = " selft";
+ break;
+ }
+ if (information[0] == "A" && information[1] == "!") {
+ information = information.substr(2);
+ information = information.replace(/ /g, '\u00A0');
+ }
+ if (information[0] == "E" && information[1] == "!") {
+ information = information.substr(2);
+ postcolour = " important";
+ }
+
+ while (information.indexOf("](") >= 0) { //URL parser
+
+ var NAMEregExp = /\(([^)]+)\)/;
+ var uname = NAMEregExp.exec(information)[1];
+
+ var URLregExp = /\[([^)]+)\]/;
+ var url = URLregExp.exec(information)[1];
+ var newpage = false;
+ if (url[0] == "^") {
+ newpage = true;
+ url = url.substr(1);
+ }
+ var start = information.indexOf("[");
+ var end = information.indexOf(")");
+ if (newpage) {
+ information = information.replace(information.substring(start, end + 1), "").splice(start, 0, '<a href="' + url + '" target="_blank">' + uname + '</a>');
+ } else {
+ information = information.replace(information.substring(start, end + 1), "").splice(start, 0, '<a href="' + url + '">' + uname + '</a>');
+ }
+ //information = '<a href="' + url + '">' + uname + '</a>'; //working
+
+ }
+ var tobold = true;
+ var boldnumber = 0;
+ for (var i = 0; i < information.length; i++) {
+ if (information[i] == "*" && information[i - 1] != "*" && information[i + 1] != "*") {
+ boldnumber++;
+ }
+ }
+ while (information.indexOf("*") >= 0) { //Bold parser
+ var pos = information.indexOf("*");
+ information = information.replace("*", "");
+ if (tobold) {
+ information = information.splice(pos, 0, '<b>');
+ } else {
+ information = information.splice(pos, 0, '</b>');
+ }
+ tobold = !tobold;
+ if (tobold && boldnumber <= 1) {
+ break;
+ }
+ //information = '<a href="' + url + '">' + uname + '</a>'; //working
+ }
+ var tounderline = true;
+ var underlinenumber = 0;
+ for (var i = 0; i < information.length; i++) {
+ if (information[i] == "*" && information[i - 1] != "*" && information[i + 1] != "*") {
+ underlinenumber++;
+ }
+ }
+ while (information.indexOf("**") >= 0) { //Bold parser
+ var pos = information.indexOf("**");
+ information = information.replace("**", "");
+ if (tounderline) {
+ information = information.splice(pos, 0, '<u>');
+ } else {
+ information = information.splice(pos, 0, '</u>');
+ }
+ tounderline = !tounderline;
+ if (tounderline && underlinenumber <= 1) {
+ break;
+ }
+ //information = '<a href="' + url + '">' + uname + '</a>'; //working
+ } /**/
+ $(".stream").append('<div class="line">' +
+ '<p class="time">[' + hours + ":" + minutes + ":" + seconds + ']</p>' +
+ '<p class="name ' + colour + '">' + name + '</p>' +
+ '<p class="information' + postcolour + '">' + information + '</p>' +
+ '</div>');
+ $(document).scrollTop($(document).height() - $(window).height());
+ }
+ var timestring = "";
+ function time() {
+ var d = new Date();
+ var hours = d.getHours();
+ var minutes = d.getMinutes();
+ var seconds = d.getSeconds();
+ if (hours < 10) {
+ hours = "0" + hours;
+ }
+ if (minutes < 10) {
+ minutes = "0" + minutes;
+ }
+ if (seconds < 10) {
+ seconds = "0" + seconds;
+ }
+ var temptimestring = "[" + hours + ":" + minutes + ":" + seconds + "]";
+ if (temptimestring != timestring) {
+ timestring = temptimestring;
+ $(".editline .time").text(timestring);
+ }
+ }
+
+ var ctrldown = false;
+ $(".editline .edit").keydown(function(e) {
+ var text = $(".editline .edit").text();
+ console.log(e.which);
+ if (e.which == 13 && text !== "" && !ctrldown) {
+ var commands = text.split(' ');
+ var output = "";
+ if (commands[0] == "help") {
+ text = "/" + text;
+ }
+ $(".editline .edit").text("");
+ log("User", text);
+
+ previouscommands[currentcommand] = text;
+ currentcommand = previouscommands.length;
+ $(".editline .edit").keydown(35);
+ cmd(commands[0], text, commands);
+ /*Add mod commands*/
+ //modcmd(commands[0], text, commands);
+ /*Add mod commands*/
+
+ }
+ if (e.which == 38) { //up
+ if (currentcommand > 0) {
+ currentcommand--;
+ $(".editline .edit").text(previouscommands[currentcommand]);
+ }
+ }
+ if (e.which == 40) { //down
+
+ if (currentcommand < previouscommands.length) {
+ currentcommand++;
+ $(".editline .edit").text(previouscommands[currentcommand]);
+ }
+ }
+ });
+
+ function cmd(command, words, word) {
+ switch (word[0]) {
+ case "/help":
+ case "help":
+ for (var i = 0; i < commandlist.length; i++) {
+ output = commandlist[i][0] + " : " + commandlist[i][1];
+ //console.log(command[i][0]);
+ log("Client", output);
+ }
+ break;
+ case "/gl":
+ //window.location.href = "http://koya.io" + (currentpage == "landing" ? "" : "/" + currentpage);
+ window.history.pushState(currentpage, 'InpagePage', (currentpage == "landing" ? "/" : "/" + currentpage));
+ break;
+ case "/clear":
+ $(".stream").text("");
+ break;
+ case "/nav":
+ if ($.inArray(word[1], pageindex) >= 0) {
+ currentpage = word[1];
+ log("Website", "You are now in " + currentpage);
+ loadpage($.inArray(word[1], pageindex));
+ } else {
+ log("Client", "'" + word[1] + "' does not exist.");
+ }
+ break;
+ case "/list":
+ $.each(pageindex, function(id, content) {
+ log("Client", "> " + content);
+ });
+ break;
+ case "/login":
+ if (word.length >= 3) {
+ log("Client", "Attempting to login to " + word[1] + " with " + Array(word[2].length + 1).join("•"));
+ loginreturn = false;
+ //log("Client", "ER1");
+ setTimeout(loginemptyreturn, 20000);
+ } else {
+ log("Client", "Not enough arguments to log in, you need a USERNAME and a PASSWORD.");
+ }
+ break;
+ default:
+ output = "Unrecognised command '" + word[0] + "'.";
+ log("Client", output);
+ }
+ }
+
+ function loadpage(i) {
+ $.each(pages[i], function(id, content) {
+ if (content != pageindex[i]) {
+ log("Website", content);
+ }
+ });
+ }
+ var loginreturn = false;
+
+ function loginemptyreturn() {
+ //log("Client", "ER2");
+ if (!loginreturn) {
+ log("Client", "E![LOGIN] No Return Recieved");
+ }
+ }
+ String.prototype.splice = function(idx, rem, str) {
+ return this.slice(0, idx) + str + this.slice(idx + Math.abs(rem));
+ };
+ init();
+});