mirror of
https://github.com/tiennm99/lombok.git
synced 2026-10-13 22:16:11 +00:00
224 lines
5.5 KiB
JavaScript
224 lines
5.5 KiB
JavaScript
"use strict";
|
|
|
|
(function($) {
|
|
var supporters = {};
|
|
var weights = {};
|
|
var types = ["enterprise", "professional", "patron"];
|
|
|
|
function shuffle(array) {
|
|
var i = 0, j = 0, temp = null;
|
|
for (i = array.length - 1; i > 0; i -= 1) {
|
|
j = Math.floor(Math.random() * (i + 1));
|
|
temp = array[i];
|
|
array[i] = array[j];
|
|
array[j] = temp;
|
|
}
|
|
}
|
|
|
|
function pad(number) {
|
|
return number < 10 ? '0' + number : number;
|
|
}
|
|
|
|
function fromDate(d) {
|
|
return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate());
|
|
|
|
}
|
|
|
|
function toDate(s) {
|
|
var x = /^(\d{4})-(\d{2})-(\d{2})$/.exec(s);
|
|
if (x) return new Date(parseInt(x[1]), parseInt(x[2]) - 1, parseInt(x[3]));
|
|
return null;
|
|
}
|
|
|
|
function Supporter(type, json) {
|
|
this.type = type;
|
|
this.name = json.name;
|
|
this.logo = json.logo;
|
|
this.url = json.url;
|
|
this.showName = json.showName;
|
|
this.start = json.range ? toDate(json.range[0]) : null;
|
|
this.end = json.range ? toDate(json.range[1]) : null;
|
|
this.weight = (!json.weight && json.weight !== 0.0) ? 1.0 : json.weight;
|
|
}
|
|
|
|
Supporter.prototype.inRange = function(d) {
|
|
return (!this.start || this.start <= d) && (!this.end || this.end > d);
|
|
};
|
|
|
|
Supporter.prototype.render = function() {
|
|
var d = $("<div />").addClass("supportItem").addClass(this.type);
|
|
var a = d;
|
|
if (this.url) {
|
|
a = $("<a />").attr("href", this.url).attr("rel", "noopener").attr("target", "_blank");
|
|
d.append(a);
|
|
}
|
|
var n = $("<span />").text(this.name);
|
|
a.append(n);
|
|
|
|
if (this.logo) {
|
|
a.addClass("logo");
|
|
var i = new Image();
|
|
var showName = this.showName;
|
|
i.onload = function() {
|
|
var w = i.width;
|
|
var h = i.height;
|
|
var wf = w / 162;
|
|
var hf = h / 80;
|
|
var f = hf > wf ? hf : wf;
|
|
var wt = Math.round(w / f);
|
|
var ht = Math.round(h / f);
|
|
i.width = wt;
|
|
i.height = ht;
|
|
var ji = $(i);
|
|
if (!showName) a.empty();
|
|
ji.css("width", wt + "px");
|
|
ji.css("height", ht + "px");
|
|
ji.attr("alt", n.text());
|
|
ji.attr("title", n.text());
|
|
a.prepend(ji);
|
|
};
|
|
i.src = '/files/' + this.logo;
|
|
}
|
|
return d;
|
|
}
|
|
|
|
function errorHandler(xhr, statusText, err) {
|
|
var errMsg = "Can't connect to projectlombok.org to fetch the list of licensees and supporters.";
|
|
if (console && console.log) {
|
|
console.log("AJAX error for loading list of supporters:");
|
|
console.log(err);
|
|
}
|
|
var errBox = $("<div />").addClass("errorBox").text(errMsg);
|
|
$(".supporters").text("").append(errBox);
|
|
}
|
|
|
|
function successHandler(data) {
|
|
$.each(types, function() {
|
|
var t = this;
|
|
supporters[t] = [];
|
|
if (data && data[t]) $.each(data[t], function() {
|
|
supporters[t].push(new Supporter(t, this));
|
|
});
|
|
});
|
|
weights = data.modWeight;
|
|
if (typeof weights !== 'object') weights = {};
|
|
updatePage();
|
|
}
|
|
|
|
function build() {
|
|
var spinner = $("<img />").attr("title", "loading").attr("src", "/img/spinner.gif").addClass("spinner");
|
|
$(".supporters").append(spinner);
|
|
$.ajax({
|
|
url: "/files/supporters.json",
|
|
dataType: "json",
|
|
cache: true,
|
|
error: errorHandler,
|
|
success: function(data) {
|
|
spinner.remove();
|
|
successHandler(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
function applySupporters() {
|
|
build();
|
|
}
|
|
|
|
function updatePage() {
|
|
updateSupporters();
|
|
updateSupporterBar();
|
|
}
|
|
|
|
var supPerBar = 3;
|
|
function updateSupporterBar() {
|
|
var s = $(".supporterBar");
|
|
if (s.length === 0) return;
|
|
s.find(".introText").show();
|
|
s.append($("<div />").addClass("sbCnt"));
|
|
var sf = s.find(".supporterFooter").show();
|
|
s.append(sf);
|
|
s = s.find(".sbCnt");
|
|
var now = new Date();
|
|
var list = [];
|
|
$.each(types, function() {
|
|
var t = this;
|
|
$.each(supporters[t], function() {
|
|
if (this.inRange(now)) {
|
|
var w = weights[t] ? weights[t] : 1.0;
|
|
if (this.weight) w = w * this.weight;
|
|
for (var i = 0; i < w; i++) list.push(this);
|
|
}
|
|
});
|
|
});
|
|
|
|
shuffle(list);
|
|
|
|
var len = list.length;
|
|
if (!len) return;
|
|
|
|
var pos = 0;
|
|
var c = [], cd = [];
|
|
for (var i = 0; i < supPerBar; i++) {
|
|
c[i] = null;
|
|
cd[i] = $("<div />").addClass("barItem");
|
|
}
|
|
|
|
var upd = function() {
|
|
var nw = [], a = [], fo = $(), fi = $();
|
|
var sPos = pos;
|
|
for (var i = 0; i < supPerBar; i++) {
|
|
if (++pos === len) pos = 0;
|
|
var z = false;
|
|
for (var j = 0; j < i; j++) if (nw[j] === list[pos]) z = true;
|
|
if (z) i--;
|
|
else nw[i] = list[pos];
|
|
if (pos === sPos) break;
|
|
}
|
|
for (var i = 0; i < supPerBar; i++) a[i] = (nw[i] === c[i] || !nw[i]) ? null : nw[i].render(i + 1).hide();
|
|
for (var i = 0; i < supPerBar; i++) {
|
|
if (a[i]) {
|
|
fi = fi.add(a[i]);
|
|
fo = fo.add(cd[i].children());
|
|
if (cd[i].parent().length === 0) s.append(cd[i]);
|
|
cd[i].append(a[i]);
|
|
c[i] = nw[i];
|
|
}
|
|
}
|
|
|
|
if (fo.length === 0) fi.fadeIn();
|
|
else {
|
|
fo.fadeOut("normal", function() {
|
|
fi.fadeIn();
|
|
fo.remove();
|
|
});
|
|
}
|
|
};
|
|
|
|
setInterval(upd, 10000);
|
|
upd();
|
|
}
|
|
|
|
function updateSupporters() {
|
|
var s = $(".supporters");
|
|
s.empty();
|
|
var now = new Date();
|
|
$.each(types, function() {
|
|
var t = this;
|
|
var d = $("<div />").addClass("row");
|
|
var h = $("<h2 />").text(t);
|
|
d.append(h);
|
|
$.each(supporters[t], function() {
|
|
if (this.inRange(now)) d.append(this.render());
|
|
});
|
|
if (d.children().length > 1) s.append(d);
|
|
});
|
|
if (s.children().length < 1) {
|
|
var x = $("<div />").addClass("noSupportersBox").html(
|
|
"We don't have any supporters yet this month.<br /><a href=\"https://patreon.com/lombok\">Become a patron</a> " +
|
|
"or <a href=\"/order-license-info\">order a professional or enterprise license</a> today!");
|
|
s.append(x);
|
|
}
|
|
}
|
|
|
|
$(applySupporters);
|
|
})($); |