383 lines
10 KiB
JavaScript
383 lines
10 KiB
JavaScript
$.ajaxSetup({ headers: { 'x-polygon-csrf': $('meta[name="polygon-csrf"]').attr('content') } });
|
|
|
|
/* todo - dont be lazy and work on this
|
|
polygon.ajax = function(url, method, data, trusted, successCallback, errorCallback)
|
|
{
|
|
var ajaxOptions = {type: method, data: data};
|
|
|
|
if(trusted)
|
|
{
|
|
ajaxOptions.url = window.location.origin + url;
|
|
ajaxOptions.headers: {'x-polygon-csrf': $('meta[name="polygon-csrf"]').attr('content')};
|
|
}
|
|
else { ajaxOptions.url = url; }
|
|
|
|
|
|
}*/
|
|
|
|
polygon.button =
|
|
{
|
|
busy: function(button)
|
|
{
|
|
$(button).attr("disabled", "disabled").find(".spinner-border").removeClass("d-none");
|
|
},
|
|
|
|
active: function(button)
|
|
{
|
|
$(button).removeAttr("disabled").find(".spinner-border").addClass("d-none");
|
|
}
|
|
};
|
|
|
|
polygon.insertAlert = function(options)
|
|
{
|
|
var alertCode = '';
|
|
if (options.alertClasses == undefined) options.alertClasses = '';
|
|
|
|
if (options.parentClasses) alertCode += '<div class="' + options.parentClasses + '">';
|
|
alertCode += '<div class="alert alert-danger ' + options.alertClasses + ' px-2 py-1" style="width: fit-content;" role="alert">' + options.text + '</div>';
|
|
if (options.parentClasses) alertCode += '</div>';
|
|
|
|
$(options.parent).append(alertCode);
|
|
}
|
|
|
|
polygon.buildModal = function(options)
|
|
{
|
|
if (options.options == undefined)
|
|
options.options = "show";
|
|
|
|
if (options.fade == undefined)
|
|
$(".global.modal").addClass("fade");
|
|
else if (!options.fade)
|
|
$(".global.modal").removeClass("fade");
|
|
|
|
if (options.image != undefined)
|
|
options.body = '<div class="row"><div class="col-3"><img src="' + options.image + '" class="img-fluid"></div><div class="col-9 text-left">' + options.body + '</div></div>';
|
|
|
|
var footer = $(".global.modal .modal-footer .mx-auto");
|
|
footer.empty();
|
|
|
|
$(".global.modal .modal-title").html(options.header);
|
|
$(".global.modal .modal-body").html(options.body);
|
|
|
|
$.each(options.buttons, function(_, button)
|
|
{
|
|
var buttonCode = '<button type="button" class="' + button.class + ' btn-lg text-center mx-1"';
|
|
|
|
if (button.attributes != undefined)
|
|
{
|
|
$.each(button.attributes, function(Attribute, Value)
|
|
{
|
|
buttonCode += ' ' + Attribute + '="' + Value + '"';
|
|
});
|
|
}
|
|
|
|
if (button.dismiss) buttonCode += ' data-dismiss="modal"';
|
|
|
|
buttonCode += '><h4 class="font-weight-normal my-';
|
|
|
|
if (polygon.user.theme == "2014") buttonCode += '0';
|
|
else buttonCode += '1';
|
|
|
|
buttonCode += '">' + button.text + '</h4></button>';
|
|
|
|
footer.append(buttonCode);
|
|
});
|
|
|
|
if (options.footer) footer.append('<p class="text-muted mt-3 mb-0">' + options.footer + '</p>');
|
|
|
|
$(".global.modal").modal(options.options);
|
|
};
|
|
|
|
polygon.CreateControl = function(Options)
|
|
{
|
|
// Properties:
|
|
// Options.Container - specified the name of the container
|
|
// Options.Properties - specifies additional properties
|
|
// Options.PopulateCallback - callback for populateRow
|
|
// Options.AjaxOptions - sets the options for $.ajax
|
|
// Options.ExtraComponents - components to show/hide that are not included here by default
|
|
|
|
if (Options.Container == undefined) return false;
|
|
if (Options.AjaxConfig == undefined) return false;
|
|
|
|
if (!$("." + Options.Container + "-container").length) return false;
|
|
|
|
var Control = {};
|
|
|
|
if (Options.Properties != undefined)
|
|
{
|
|
$.each(Options.Properties, function(Property, Value)
|
|
{
|
|
Control[Property] = Value;
|
|
});
|
|
}
|
|
|
|
Control.Page = 1;
|
|
Control.Container = Options.Container;
|
|
|
|
Control.Display = function(Page)
|
|
{
|
|
if (Page != undefined) Control.Page = Page;
|
|
|
|
$("." + Options.Container + "-container .items").empty();
|
|
$("." + Options.Container + "-container .no-items").addClass("d-none");
|
|
$("." + Options.Container + "-container .pagination").addClass("d-none");
|
|
$("." + Options.Container + "-container .loading").removeClass("d-none");
|
|
|
|
if (Options.ExtraComponents != undefined)
|
|
{
|
|
$.each(Options.ExtraComponents, function(_, Component)
|
|
{
|
|
$("." + Options.Container + "-container " + Component).addClass("d-none");
|
|
});
|
|
}
|
|
|
|
Control.AjaxConfig = Options.AjaxConfig(Control);
|
|
Control.AjaxConfig.data.Page = Control.Page;
|
|
Control.AjaxConfig.success = function(Data)
|
|
{
|
|
$("." + Options.Container + "-container .loading").addClass("d-none");
|
|
|
|
if (Options.ExtraComponents != undefined)
|
|
{
|
|
$.each(Options.ExtraComponents, function(_, Component)
|
|
{
|
|
$("." + Options.Container + "-container " + Component).removeClass("d-none");
|
|
});
|
|
}
|
|
|
|
polygon.pagination.handle(Options.Container, Control.Page, Data.pages);
|
|
|
|
if (Data.items == undefined)
|
|
{
|
|
$("." + Options.Container + "-container .no-items").html(Data.message);
|
|
$("." + Options.Container + "-container .no-items").removeClass("d-none");
|
|
return;
|
|
}
|
|
|
|
polygon.populateRow(Options.Container, Data.items, Options.PopulateCallback);
|
|
}
|
|
|
|
$.ajax(Control.AjaxConfig);
|
|
}
|
|
|
|
$(function()
|
|
{
|
|
if (Options.Initializers != undefined) Options.Initializers(Control);
|
|
polygon.pagination.register(Options.Container, Control.Display);
|
|
Control.Display();
|
|
});
|
|
|
|
return Control;
|
|
}
|
|
|
|
polygon.populate = function(Data, TemplateName, Container, ExtendTemplate)
|
|
{
|
|
$.each(Data, function(_, Item)
|
|
{
|
|
var Template = $(TemplateName).clone();
|
|
|
|
if (ExtendTemplate != undefined)
|
|
{
|
|
TemplateExtension = ExtendTemplate(Item, Template);
|
|
Item = TemplateExtension.Item;
|
|
Template = TemplateExtension.Template;
|
|
}
|
|
|
|
Template.html(function(_, html)
|
|
{
|
|
for (let key in Item) html = html.replace(new RegExp("\\$" + key, "g"), Item[key]);
|
|
return html;
|
|
});
|
|
|
|
if (Template.find("img").attr("data-src"))
|
|
Template.find("img").attr("src", Template.find("img").attr("data-src"));
|
|
|
|
Template = Template.contents().unwrap();
|
|
|
|
Template.appendTo(Container);
|
|
});
|
|
}
|
|
|
|
polygon.populateRow = function(Control, Data, ExtendTemplate)
|
|
{
|
|
polygon.populate(Data, "." + Control + "-container .template", "." + Control + "-container .items", ExtendTemplate);
|
|
polygon.registerHandlers(Control);
|
|
}
|
|
|
|
polygon.registerHandlers = function(control)
|
|
{
|
|
if(control == undefined)
|
|
{
|
|
if($("[data-toggle='tooltip']").length)
|
|
$("[data-toggle='tooltip']").tooltip();
|
|
|
|
if($("input[data-toggle='toggle']").length)
|
|
$("input[data-toggle='toggle']").bootstrapToggle();
|
|
|
|
$(".app img").each(function()
|
|
{
|
|
if($(this).attr("data-src") === undefined) return;
|
|
if($(this).attr("data-src").charAt(0) == "$") return;
|
|
|
|
$(this).attr("src", $(this).attr("data-src"));
|
|
$(this).removeAttr("data-src");
|
|
});
|
|
}
|
|
else
|
|
{
|
|
if($("." + control + "-container [data-toggle='tooltip']").length)
|
|
$("." + control + "-container [data-toggle='tooltip']").tooltip();
|
|
|
|
if($("." + control + "-container input[data-toggle='toggle']").length)
|
|
$("." + control + "-container input[data-toggle='toggle']").bootstrapToggle();
|
|
|
|
if($("." + control + "-container .item .details").length)
|
|
$("." + control + "-container .item").hover(function(){ $(this).find(".details").removeClass("d-none"); }, function(){ $(this).find(".details").addClass("d-none"); });
|
|
|
|
$("." + control + "-container .items img").each(function()
|
|
{
|
|
if($(this).attr("data-src") === undefined) return;
|
|
$(this).attr("src", $(this).attr("data-src"));
|
|
$(this).removeAttr("data-src");
|
|
});
|
|
|
|
if($("." + control + "-container .accordion").length)
|
|
{
|
|
if($.ui == undefined) throw "Accordion widget detected for " + control + " applet but jQuery UI is not loaded";
|
|
|
|
if($("." + control + "-container .accordion").hasClass("ui-accordion"))
|
|
$("." + control + "-container .accordion").accordion("destroy");
|
|
|
|
$("." + control + "-container .accordion").accordion({ autoHeight: false, collapsible: true });
|
|
}
|
|
}
|
|
}
|
|
|
|
polygon.pagination =
|
|
{
|
|
register: function(control, callback)
|
|
{
|
|
var pagination = "." + control + "-container .pagination";
|
|
var page;
|
|
|
|
if (!$(pagination).length) return;
|
|
|
|
$(pagination + " .back").click(function()
|
|
{
|
|
callback(+$(pagination + " .page").val() - 1);
|
|
});
|
|
$(pagination + " .next").click(function()
|
|
{
|
|
callback(+$(pagination + " .page").val() + 1);
|
|
});
|
|
|
|
$(pagination + " .page").on("focusout keypress", this, function(event)
|
|
{
|
|
page = $(this).val();
|
|
|
|
if (isNaN(page) || page < 1) page = 1;
|
|
|
|
if (event.type == "keypress")
|
|
if (event.which == 13) $(this).blur(); else return;
|
|
|
|
if (page == $(this).attr("data-last-page")) return;
|
|
$(this).attr("data-last-page", page);
|
|
callback(page);
|
|
});
|
|
},
|
|
|
|
handle: function(control, page, pages)
|
|
{
|
|
var pagination = "." + control + "-container .pagination";
|
|
|
|
if (page > pages) page = pages;
|
|
if (isNaN(page) || page < 1) page = 1;
|
|
|
|
if (!$(pagination).length) return;
|
|
if (pages <= 1 || pages == undefined) return $(pagination).addClass("d-none");
|
|
|
|
$(pagination).removeClass("d-none");
|
|
$(pagination + " .pages").text(pages);
|
|
|
|
if ($(pagination + " .page").prop("tagName") == "INPUT") $(pagination + " .page").val(page);
|
|
else $(pagination + " .page").text(page);
|
|
|
|
if (page <= 1) $(pagination + " .back").attr("disabled", "disabled");
|
|
else $(pagination + " .back").removeAttr("disabled");
|
|
|
|
if (page >= pages) $(pagination + " .next").attr("disabled", "disabled");
|
|
else $(pagination + " .next").removeAttr("disabled");
|
|
}
|
|
}
|
|
|
|
polygon.appendination =
|
|
{
|
|
register: function(Control, Threshold)
|
|
{
|
|
if (!$("."+Control.Control+"-container").length) return false;
|
|
|
|
$("body").on("click", "."+Control.Control+"-container .show-more", function(){ Control.Display(true); });
|
|
|
|
$(window).scroll(function()
|
|
{
|
|
if (Control.Loading || Control.ReachedEnd) return;
|
|
if ($(window).scrollTop() + $(window).height() < $(document).height() - Threshold) return;
|
|
Control.Display(true);
|
|
});
|
|
|
|
$(function(){ Control.Display(false) });
|
|
|
|
return true;
|
|
},
|
|
|
|
handle: function(Control, Data)
|
|
{
|
|
if (Control.Page < Data.pages)
|
|
{
|
|
$("."+Control.Control+"-container .show-more").removeClass("d-none");
|
|
Control.ReachedEnd = false;
|
|
}
|
|
else
|
|
{
|
|
Control.ReachedEnd = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
toastr.options =
|
|
{
|
|
"closeButton": false,
|
|
"debug": false,
|
|
"newestOnTop": false,
|
|
"progressBar": true,
|
|
"positionClass": "toast-top-right",
|
|
"preventDuplicates": false,
|
|
"onclick": null,
|
|
"showDuration": "300",
|
|
"hideDuration": "1000",
|
|
"timeOut": "10000",
|
|
"extendedTimeOut": "1000",
|
|
"showEasing": "swing",
|
|
"hideEasing": "linear",
|
|
"showMethod": "fadeIn",
|
|
"hideMethod": "fadeOut"
|
|
}
|
|
|
|
$(function()
|
|
{
|
|
polygon.registerHandlers();
|
|
if (polygon.user.logged_in)
|
|
{
|
|
setInterval(function()
|
|
{
|
|
if (document.hidden) return;
|
|
$.post("/api/account/update-ping", function(data)
|
|
{
|
|
if (data.friendRequests) $(".friend-requests-indicator").text(data.friendRequests).removeClass("d-none");
|
|
else $(".friend-requests-indicator").addClass("d-none");
|
|
if (data.status == 401) window.location.reload();
|
|
});
|
|
}, 60000);
|
|
}
|
|
}); |