fobe-web/FinobeUtilityJsSource.js

274 lines
8.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Finobe JS Utilities 2021
*/
//utility for populating HTML with data from object OR calling a function with the objects current position and replacing the marker with returned data
//[] for calling a function and replacing the marker with the return data (allows for more logic) (turned out to be incredibly useful)
//{} for replacing the marker with the objects data
//TODO: clean up?
function parseHtml(html, limit, object, message, singleObject=false) {
var html_result = '';
var buffer = "";
for (var i = 0; i < limit; i++) {
if (singleObject) {
var objectData = object;
} else {
var objectData = object[i];
}
buffer = html;
//we have reached the end of the data available
if (objectData === undefined) {
break;
}
for (var pos = 0; pos <= html.length; pos++) {
var firstFound = false;
var functionCall = false;
var secondPositionIdentifier = "";
if (html.charAt(pos) == "{") {
firstFound = true;
secondPositionIdentifier = "}";
} else if (html.charAt(pos) == "[") {
firstFound = true;
functionCall = true;
secondPositionIdentifier = "]";
}
if (firstFound) { //first position
for (var len = pos; len; len++) {
if (html.charAt(len) == secondPositionIdentifier) { //second position
var marker = "";
for (var d = pos; d < len+1; d++) { //data between the two positions
marker += html.charAt(d);
}
//where we handle the data O_O
//using replace instead of replaceAll for compatibility
if (!functionCall) {
buffer = buffer.replace(marker, objectData[marker.substring(1, marker.length - 1)]); //replace marker with data from the object
} else {
try {
buffer = buffer.replace(marker, window[marker.substring(1, marker.length - 1)](objectData)); //replace the marker with the data returned from the call
}
catch (error) {
console.log('[functionCall] Something went wrong.')
}
}
break;
}
}
}
}
html_result += buffer;
}
if (html_result == "") {
html_result = message;
}
return html_result;
}
//http get json no cds
function getJSON(url) {
return $.getJSON(url);
}
//http get json cds
function getJSONCDS(url) {
return $.ajax(url, {
xhrFields: {
withCredentials: true
},
crossDomain: true
});
}
//http post json cds
function postJSONCDS(url, jsondata) {
return $.ajax({
type: 'POST',
url: url,
xhrFields: {
withCredentials: true
},
crossDomain: true,
data: jsondata,
dataType: 'json',
});
}
//pretty ghetto but is incredibly useful for multi page helper, ex output: ,1,"ass",2
function parseArrayArgs(args) {
var parsed = ",";
for (const arg of args) {
if (typeof arg == "string") {
parsed += "'"+arg+"',";
} else {
parsed += arg+",";
}
}
return parsed.substring(0, parsed.length - 1); //remove last comma
}
//utility is for making pages easier
function staticPageHelper(api, loadingurl, container, html, page, limit, keyword, message, optionalArgs = "") {
if (loadingurl !== "") {
var loadingHtml = '<div class="text-center">';
loadingHtml += '<img src="' + loadingurl + '" class="loading-rotate" width="250" height="250" />';
loadingHtml += '</div>';
$(container).html(loadingHtml);
}
getJSONCDS(api + '?limit=' + limit + '&page=' + page + '&keyword=' + keyword + optionalArgs)
.done(function(jsonData) {
$(container).html(parseHtml(html, limit, jsonData, message));
});
}
//utility for making pagination enabled pages easy
function multiPageHelper(callName, args, api, loadingurl, container, buttonsid, html, page, limit, keyword, message, optionalArgs = "") {
if (loadingurl !== "") {
var loadingHtml = '<div class="text-center">';
loadingHtml += '<img src="' + loadingurl + '" class="loading-rotate" width="250" height="250" />';
loadingHtml += '</div>';
$(container).html(loadingHtml);
}
var parsedArguments = "";
if (args && args.constructor === Array) {
parsedArguments = parseArrayArgs(args)
}
$(buttonsid).html('');
getJSONCDS(api + '?limit=' + limit + '&page=' + page + '&keyword=' + keyword + optionalArgs)
.done(function(jsonData) {
var showButtons = false;
var buttons = '';
var firstPos = 0;
var secondPos = 0;
var pageCount = jsonData.pageCount;
var pageResults = jsonData.pageResults;
var currentPage = page;
var nextPage = currentPage + 1;
var previousPage = currentPage - 1;
var pageButtonEnd = currentPage + 3;
if (nextPage > pageCount) {
nextPage = pageCount;
}
if (previousPage == 0) {
previousPage = 1;
}
if (pageCount > 1) {
showButtons = true;
}
if (showButtons)
{
if (pageCount < 5) {
firstPos = 1;
secondPos = pageCount;
}
else
{
if (previousPage == currentPage - 1) {
if (currentPage >= pageCount - 2) {
firstPos = pageCount - 3;
} else {
firstPos = currentPage-1;
}
secondPos = pageButtonEnd-1;
} else {
firstPos = currentPage;
secondPos = pageButtonEnd;
}
}
buttons+= '<button type="button" onclick="' + callName + '(1' + parsedArguments + ')" class="btn btn-danger">«</button>';
buttons+= '<button type="button" onclick="' + callName + '(' + previousPage + parsedArguments + ')" class="btn btn-danger"></button>';
for (i = firstPos; i <= secondPos; i++) {
if (i <= pageCount) {
buttons+= '<button type="button" onclick="' + callName + '(' + i + parsedArguments + ')" ' + ((i == currentPage) ? 'style="background-color: #c82333;"' : '') + 'class="btn btn-danger">' + i + '</button>';
}
}
buttons+= '<button type="button" onclick="' + callName + '(' + nextPage + parsedArguments + ')" class="btn btn-danger"></button>';
buttons+= '<button type="button" onclick="' + callName + '(' + pageCount + parsedArguments + ')" class="btn btn-danger">»</button>';
}
$(container).html(parseHtml(html, pageResults, jsonData, message));
$(buttonsid).html(buttons);
});
}
//comments
class Comments {
constructor(assetid, commentsid, commentscontainer, buttonscontainer, successid, errorid, inputid, messageDelay, newObject) {
this.assetid = assetid;
this.commentsid = commentsid;
this.commentscontainer = commentscontainer;
this.buttonscontainer = buttonscontainer;
this.successid = successid;
this.errorid = errorid;
this.inputid = inputid;
this.messageDelay = messageDelay;
this.newObject = newObject;
var gameInfo = "https://api.idk16.xyz/game/info?id=" + this.assetid;
var self = this;
getJSONCDS(gameInfo)
.done(function(jsonData) {
if (jsonData.CommentsEnabled) {
$(self.commentsid).show();
self.commentsPage();
}
});
}
commentsPage(page=1)
{
var html = '<div class="row mb-2">';
html += '<div class="card w-100">';
html += '<div class="card-body">';
html += '<h6>Comment by <a class="red-a" href="/profile/view?id={userid}">{username}</a> : <a style="color:grey;">{date}</a></h6>';
html += '<div class="row marg-bot-15">';
html += '<div class="col-sm-1">';
html += '<a href="/profile/view?id={userid}"><img class="card-img-top marg-bot-15" src="{thumbnail}" style="width:4rem;border-radius:100%;"></a>';
html += '</div>';
html += '<div class="col-sm" style="overflow:hidden;">';
html += '<p>{comment}</p>';
html += '</div>';
html += '</div>';
html += '</div>';
html += '</div>';
html += '</div>';
multiPageHelper(this.newObject + ".commentsPage", [], "https://api.idk16.xyz/comments/", "https://api.idk16.xyz/logo", this.commentscontainer, this.buttonscontainer, html, page, 10, "", "No comments", "&assetId=" + this.assetid);
}
submitComment(comment) {
var self = this;
postJSONCDS("https://api.idk16.xyz/comments/newcomment?assetId=" + this.assetid, JSON.stringify({"comment": comment}))
.done(function(object) {
var alert = object.alert;
var messageid = self.errorid;
if (alert == "Comment Placed") {
messageid = self.successid;
$(self.inputid).val('');
self.commentsPage();
}
$(messageid).text(alert);
$(messageid).show();
window.scrollTo({top: 0, behavior: "smooth"});
setTimeout(function() {
$(messageid).hide();
}, self.messageDelay);
});
}
}