iobroker.openligadb
Version:
ioBroker Adapter to get soccer sport match results from OpenLigaDB
1,071 lines (1,069 loc) • 55.5 kB
JavaScript
"use strict";
(() => {
var __getOwnPropNames = Object.getOwnPropertyNames;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
// ../package.json
var version;
var init_package = __esm({
"../package.json"() {
version = "1.9.1";
}
});
// openligadb/js/openligadb.js
var require_openligadb = __commonJS({
"openligadb/js/openligadb.js"(exports) {
init_package();
fetch("widgets/openligadb/i18n/translations.json").then((res) => __async(null, null, function* () {
const i18n = yield res.json();
$.extend(true, systemDictionary, i18n);
}));
vis.binds["openligadb"] = {
version,
showVersion: function() {
if (vis.binds["openligadb"].version) {
console.log(`Version openligadb: ${vis.binds["openligadb"].version}`);
vis.binds["openligadb"].version = null;
}
},
pivottable2: {
createWidget: function(widgetID, view, data, style) {
const $div = $(`#${widgetID}`);
if (!$div.length) {
return setTimeout(function() {
vis.binds["openligadb"].pivottable2.createWidget(widgetID, view, data, style);
}, 100);
}
const allmatches = data["oid-allmatches"] ? JSON.parse(vis.states.attr(`${data["oid-allmatches"]}.val`)) : [];
let currgameday = data["oid-currgameday"] ? vis.states.attr(`${data["oid-currgameday"]}.val`) : 1;
currgameday = currgameday || 1;
const maxicon = data.maxicon || 25;
const shortname = data.shortname || false;
const onlylogo = data.onlylogo || false;
const highlight = data.highlight || "";
const preparedhighlight = vis.binds["openligadb"].prepareFilter(highlight);
const sort = data.sort || "table";
const highlightontop = data.highlightontop || false;
function onChange() {
vis.binds["openligadb"].pivottable2.createWidget(widgetID, view, data, style);
}
if (data["oid-allmatches"] && data["oid-currgameday"]) {
if (!vis.editMode) {
vis.binds["openligadb"].bindStates2(
$div,
[data["oid-allmatches"], data["oid-currgameday"]],
onChange
);
}
}
if (!allmatches) {
return;
}
const pivottable2 = allmatches.reduce(function(collect, item) {
let team;
if (Object.prototype.hasOwnProperty.call(collect, item.team1.teamName)) {
team = collect[item.team1.teamName];
} else {
team = {
teamName: item.team1.teamName,
shortName: item.team1.shortName,
teamIconUrl: item.team1.teamIconUrl,
gamedays: []
};
}
const result = vis.binds["openligadb"].getResult(item.matchResults);
let team1result = Object.prototype.hasOwnProperty.call(result, "pointsTeam1") ? result.pointsTeam1 : "-";
let team2result = Object.prototype.hasOwnProperty.call(result, "pointsTeam2") ? result.pointsTeam2 : "-";
if (item.group.groupOrderID > currgameday) {
team1result = "-";
team2result = "-";
}
const game = {
matchDateTime: item.matchDateTime,
result: `${team1result}:${team2result}`,
groupName: item.group.groupName,
groupOrderID: item.group.groupOrderID,
teamName: item.team2.teamName,
shortName: item.team2.shortName,
teamIconUrl: item.team2.teamIconUrl
};
team.gamedays[item.team2.teamName] = game;
collect[item.team1.teamName] = team;
return collect;
}, []);
let table = vis.binds["openligadb"].table4.calcTable(allmatches, 1, currgameday, currgameday);
const newtable = [];
for (const items in table) {
newtable.push(table[items]);
}
if (sort == "table") {
table = newtable.sort(function(a, b) {
return a.points > b.points ? -1 : b.points > a.points ? 1 : a.goalDiff < b.goalDiff ? 1 : a.goalDiff > b.goalDiff ? -1 : 0;
});
}
if (sort == "name") {
table = newtable.sort(function(a, b) {
const name1 = shortname ? a.shortName : a.teamName;
const name2 = shortname ? b.shortName : b.teamName;
return name1 > name2 ? 1 : name1 < name2 ? -1 : 0;
});
}
if (highlightontop) {
if (preparedhighlight.map((el) => el.filter).join(";").trim() != "") {
let tophighlight = preparedhighlight.map((el) => el.filter).join(";").split(";");
tophighlight = tophighlight.reverse();
for (let i = 0; i < tophighlight.length; i++) {
const topindex = table.findIndex(function(item) {
return item.teamName.toLowerCase().indexOf(tophighlight[i].toLowerCase()) >= 0;
});
if (topindex > 0) {
table.splice(0, 0, table.splice(topindex, 1)[0]);
}
}
}
}
let text = "";
text += "<style> \n";
text += `#${widgetID} .oldb-icon {
`;
text += ` max-height: ${maxicon}px;
`;
text += ` max-width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-center {
`;
text += " text-align: center;\n";
text += "} \n";
text += `#${widgetID} .oldb-tt td{
`;
text += " white-space: nowrap;\n";
text += "} \n";
text += `#${widgetID} .oldb-full {
`;
text += " width: 100%;\n";
text += "} \n";
text += "</style> \n";
text += '<table class="oldb-tt">';
text += " <tr>";
text += ' <th class="oldb-center oldb-rank">#</th><th></th><th></th>';
table.forEach(function(team) {
text += ' <th class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-icon" src="${team.teamIconUrl}">`;
text += " </th>";
});
text += ` <th class="oldb-center oldb-goaldiff" title="${_("Diff_tooltip")}">${_("Diff")}</th><th class="oldb-center oldb-points" title="${_("Punkte_tooltip")}">${_("Punkte")}</th>`;
text += " </tr>";
let pteam1;
table.forEach(function(team1) {
pteam1 = pivottable2[team1.teamName];
let team1name = shortname ? team1.shortName : team1.teamName;
if (vis.binds["openligadb"].checkHighlite(
team1.teamName,
preparedhighlight.map((el) => el.filter).join(";")
)) {
team1name = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(team1name, preparedhighlight)}">${team1name}</b>`;
}
text += " <tr>";
text += ' <td class="oldb-center oldb-rank">';
text += team1.ranking[team1.ranking.length - 1];
text += " </td>";
text += ' <td class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-icon" src="${team1.teamIconUrl}">`;
text += " </td>";
if (!onlylogo) {
text += ` <td class="oldb-teamname oldb-full">${team1name}</td>`;
}
table.forEach(function(team2) {
if (team1.teamName == team2.teamName) {
text += ' <td class=""></td>';
return;
}
const result = pteam1.gamedays[team2.teamName] && pteam1.gamedays[team2.teamName].result || "-";
text += ` <td class="oldb-center oldb-result">${result}</td>`;
});
text += ` <td class="oldb-center oldb-goaldiff">${team1.goalDiff}</td>`;
text += ` <td class="oldb-center oldb-points">${team1.points}</td>`;
text += " </tr>";
});
text += "</table>";
$(`#${widgetID}`).html(text);
}
},
goalgetters2: {
createWidget: function(widgetID, view, data, style) {
const $div = $(`#${widgetID}`);
if (!$div.length) {
return setTimeout(function() {
vis.binds["openligadb"].goalgetters2.createWidget(widgetID, view, data, style);
}, 100);
}
let goalgetters = data["oid-goalgetters"] ? JSON.parse(vis.states.attr(`${data["oid-goalgetters"]}.val`)) : [];
const maxcount = data.maxcount || 99999;
const sort = data.sort || "goal";
const highlight = data.highlight || "";
const showonlyhighlight = data.showonlyhighlight || false;
function onChange() {
vis.binds["openligadb"].goalgetters2.createWidget(widgetID, view, data, style);
}
if (data["oid-goalgetters"]) {
if (!vis.editMode) {
vis.binds["openligadb"].bindStates2($div, [data["oid-goalgetters"]], onChange);
}
}
goalgetters = this.setName(goalgetters);
if (sort == "goal") {
goalgetters = goalgetters.sort(function(a, b) {
return b.goalCount - a.goalCount;
});
}
if (sort == "name") {
goalgetters = goalgetters.sort(function(a, b) {
return `${a.lastname} ${a.prename}`.localeCompare(`${b.lastname} ${b.prename}`);
});
}
let text = "";
text += "<style> \n";
text += `#${widgetID} .oldb-tt td{
`;
text += " white-space: nowrap;\n";
text += "} \n";
text += `#${widgetID} .oldb-left {
`;
text += " text-align: left;\n";
text += "} \n";
text += "</style> \n";
text += '<table class="oldb-gg">';
text += " <tr>";
text += ` <th class="oldb-left" title="${_("Name_tooltip")}">${_("Name")}</td>`;
text += ` <th class="oldb-left" title="${_("Tore_tooltip")}">${_("Tore")}</td>`;
text += " </tr>";
let count = 0;
goalgetters.forEach(function(goalgetter) {
if (count < maxcount) {
let name = "";
name += goalgetter.lastname;
goalgetter.prename ? name += `, ${goalgetter.prename}` : name += goalgetter.prename;
const check = vis.binds["openligadb"].checkHighlite(name, highlight);
if (check) {
name = `<b>${name}</b>`;
}
if (!showonlyhighlight || showonlyhighlight && check) {
text += " <tr>";
text += ` <td class="oldb-left">${name}</td>`;
text += ` <td class="oldb-left">${goalgetter.goalCount}</td>`;
text += " </tr>";
count++;
}
}
});
text += "</table> ";
$(`#${widgetID}`).html(text);
},
setName: function(goalgetters) {
let arr;
goalgetters.forEach(function(goalgetter) {
const regex_c1 = /(.+), ?(.+)/g;
const regex_c2 = /(.+)\. ?(.+)/g;
const name = goalgetter.goalGetterName.trim();
goalgetter.ok = false;
arr = regex_c1.exec(name);
if (arr && arr[1] && arr[2]) {
goalgetter.prename = arr[2];
goalgetter.lastname = arr[1];
goalgetter.ok = true;
return;
}
arr = regex_c2.exec(name);
if (arr && arr[1] && arr[2]) {
goalgetter.lastname = arr[2];
goalgetter.prename = `${arr[1]}.`;
goalgetter.ok = true;
return;
}
arr = name.split(" ");
if (arr && arr.length > 1) {
goalgetter.lastname = arr.pop();
goalgetter.prename = arr.join(" ");
goalgetter.ok = true;
return;
}
if (arr && arr.length == 1) {
goalgetter.lastname = arr.pop();
goalgetter.prename = "";
goalgetter.ok = true;
}
});
return goalgetters;
}
},
favgames3: {
createWidget: function(widgetID, view, data, style) {
const $div = $(`#${widgetID}`);
if (!$div.length) {
return setTimeout(function() {
vis.binds["openligadb"].favgames3.createWidget(widgetID, view, data, style);
}, 100);
}
let favgames = [];
const showabbreviation = data.showabbreviation || false;
const onlylogo = data.onlylogo || false;
const showweekday = data.showweekday || false;
const showresult = data.showresult || false;
const maxicon = data.maxicon || 25;
let nohighlight = "";
const bound = [];
for (let i = 1; i <= data.lcount; i++) {
const allmatches = data[`oid-allmatches${i}`] ? JSON.parse(vis.states.attr(`${data[`oid-allmatches${i}`]}.val`)) : [];
const currgameday = data[`oid-currgameday${i}`] ? vis.states.attr(`${data[`oid-currgameday${i}`]}.val`) : 1;
if (data[`oid-allmatches${i}`]) {
bound.push(data[`oid-allmatches${i}`]);
}
if (data[`oid-currgameday${i}`]) {
bound.push(data[`oid-currgameday${i}`]);
}
let showgameday = data[`showgameday${i}`] || "";
if (vis.editMode && /{.*}/gm.test(showgameday)) {
showgameday = "";
}
if (showgameday == 0) {
showgameday = "";
}
showgameday = showgameday || currgameday || "";
let showgamedaycount = data[`showgamedaycount${i}`] || 9999;
if (showgamedaycount == 0) {
showgamedaycount = 9999;
}
const abbreviation = data[`abbreviation${i}`] || "";
const shortname = data[`shortname${i}`] || false;
const filter = data[`filter${i}`] || "";
const preparedfilter = vis.binds["openligadb"].prepareFilter(filter);
favgames = favgames.concat(
this.filterFavGames(
allmatches,
showgameday,
showgamedaycount,
currgameday,
preparedfilter,
shortname,
abbreviation
)
);
if (filter == "") {
nohighlight += `group${i} `;
}
}
function onChange() {
vis.binds["openligadb"].favgames3.createWidget(widgetID, view, data, style);
}
if (bound.length > 0) {
if (!vis.editMode) {
vis.binds["openligadb"].bindStates2($div, bound, onChange);
}
}
favgames = this.sortFavGames(favgames);
const weekday_options = { weekday: "short" };
const date_options = { month: "2-digit", day: "2-digit" };
const time_options = { hour: "2-digit", minute: "2-digit" };
let text = "";
text += "<style> \n";
text += `#${widgetID} .oldb-icon {
`;
text += ` max-height: ${maxicon}px;
`;
text += ` max-width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-tdicon {
`;
text += ` width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-tt {
`;
text += " width: 100%;\n";
text += "} \n";
text += `#${widgetID} .oldb-tt td{
`;
text += " white-space: nowrap;\n";
text += "} \n";
text += `#${widgetID} .oldb-full {
`;
text += " width: 50%;\n";
text += "} \n";
text += `#${widgetID} .oldb-center {
`;
text += " text-align: center;\n";
text += "} \n";
text += `#${widgetID} .oldb-right {
`;
text += " text-align: right;\n";
text += "} \n";
text += `#${widgetID} .oldb-left {
`;
text += " text-align: left;\n";
text += "} \n";
text += `#${widgetID} .oldb-datetime {
`;
text += " font-weight: bold;\n";
text += "} \n";
text += "</style> \n";
text += '<table class="oldb-tt">';
favgames.forEach(function(match) {
let team1name = match.shortname ? match.team1.shortName : match.team1.teamName;
let team2name = match.shortname ? match.team2.shortName : match.team2.teamName;
if (vis.binds["openligadb"].checkHighlite(team1name, match.filter.map((el) => el.filter).join(";"))) {
team1name = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(team1name, match.filter)}">${team1name}</b>`;
}
if (vis.binds["openligadb"].checkHighlite(team2name, match.filter.map((el) => el.filter).join(";"))) {
team2name = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(team2name, match.filter)}">${team2name}</b>`;
}
const result = vis.binds["openligadb"].getResult(match.matchResults);
const team1result = Object.prototype.hasOwnProperty.call(result, "pointsTeam1") ? result.pointsTeam1 : "-";
const team2result = Object.prototype.hasOwnProperty.call(result, "pointsTeam2") ? result.pointsTeam2 : "-";
const today = /* @__PURE__ */ new Date();
const mdate = vis.binds["openligadb"].getDateFromJSON(match.matchDateTime);
vis.binds["openligadb"].compareDate(today, mdate) ? text += ' <tr class="todaygame">' : text += " <tr>";
if (showweekday) {
text += ` <td class="oldb-left">${vis.binds["openligadb"].getDateFromJSON(match.matchDateTime).toLocaleString(vis.language, weekday_options)}</td>`;
}
text += ` <td class="oldb-left">${vis.binds["openligadb"].getDateFromJSON(match.matchDateTime).toLocaleString(vis.language, date_options)}</td>`;
text += ` <td class="oldb-left">${vis.binds["openligadb"].getDateFromJSON(match.matchDateTime).toLocaleString(vis.language, time_options)}</td>`;
if (showabbreviation) {
text += ` <td class="oldb-left">${match.abbreviation}</td>`;
}
text += ' <td class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-icon" src="${match.team1.teamIconUrl}">`;
text += " </td>";
if (!onlylogo) {
text += ` <td class="oldb-full">${team1name}</td>`;
}
if (showresult) {
text += ` <td class="oldb-left">${team1result}</td>`;
}
text += ' <td class="oldb-left">:</td>';
if (showresult) {
text += ` <td class="oldb-left">${team2result}</td>`;
}
text += ' <td class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-left oldb-icon" src="${match.team2.teamIconUrl}">`;
text += " </td>";
if (!onlylogo) {
text += ` <td class="oldb-full">${team2name}</td>`;
}
text += " </tr>";
});
if (nohighlight != "") {
text += `<tr><td>No filter set for: ${nohighlight}</td></tr>`;
}
text += "</table> ";
$(`#${widgetID}`).html(text);
},
filterFavGames: function(allmatches, gameday, gamedaycount, currgameday, filter, shortname, abbreviation) {
if (!Array.isArray(allmatches)) {
return [];
}
gameday = parseInt(gameday);
gamedaycount = parseInt(gamedaycount);
currgameday = parseInt(currgameday);
return allmatches.reduce(function(result, item) {
let found;
item.abbreviation = abbreviation;
if (gameday > 0 && item.group.groupOrderID >= gameday && item.group.groupOrderID < gameday + gamedaycount) {
found = item;
}
if (gameday < 0 && item.group.groupOrderID >= currgameday + gameday && item.group.groupOrderID < currgameday + gameday + gamedaycount) {
found = item;
}
item.filter = filter;
item.shortname = shortname;
if (found && (vis.binds["openligadb"].checkHighlite(
item.team1.teamName,
filter.map((el) => el.filter).join(";")
) || vis.binds["openligadb"].checkHighlite(
item.team2.teamName,
filter.map((el) => el.filter).join(";")
))) {
result.push(item);
}
return result;
}, []);
},
sortFavGames: function(favgames) {
return favgames.sort(function(a, b) {
let comp = 0;
if (vis.binds["openligadb"].getDateFromJSON(a.matchDateTime).getTime() > vis.binds["openligadb"].getDateFromJSON(b.matchDateTime).getTime()) {
comp = 1;
}
if (vis.binds["openligadb"].getDateFromJSON(a.matchDateTime).getTime() < vis.binds["openligadb"].getDateFromJSON(b.matchDateTime).getTime()) {
comp = -1;
}
return comp;
});
}
},
gameday2: {
createWidget: function(widgetID, view, data, style) {
const $div = $(`#${widgetID}`);
if (!$div.length) {
return setTimeout(function() {
vis.binds["openligadb"].gameday2.createWidget(widgetID, view, data, style);
}, 100);
}
const allmatches = data["oid-allmatches"] ? JSON.parse(vis.states.attr(`${data["oid-allmatches"]}.val`)) : [];
const currgameday = data["oid-currgameday"] ? vis.states.attr(`${data["oid-currgameday"]}.val`) : 1;
let showgameday = data.showgameday || "";
if (vis.editMode && /{.*}/gm.test(showgameday)) {
showgameday = "";
}
if (showgameday == 0) {
showgameday = "";
}
let showgamedaycount = data.showgamedaycount || 1;
if (showgamedaycount == 0) {
showgamedaycount = 1;
}
const showweekday = data.showweekday || false;
const showgoals = data.showgoals || false;
const maxicon = data.maxicon || 25;
const shortname = data.shortname || false;
const onlylogo = data.onlylogo || false;
const highlight = data.highlight || "";
const preparedhighlight = vis.binds["openligadb"].prepareFilter(highlight);
function onChange() {
vis.binds["openligadb"].gameday2.createWidget(widgetID, view, data, style);
}
if (data["oid-allmatches"] && data["oid-currgameday"]) {
if (!vis.editMode) {
vis.binds["openligadb"].bindStates2(
$div,
[data["oid-allmatches"], data["oid-currgameday"]],
onChange
);
}
}
const matches = this.filterGameDay(
allmatches,
showgameday || currgameday || "",
showgamedaycount,
currgameday
);
const gamedays = this.groupGameDay(matches, shortname, preparedhighlight.map((el) => el.filter).join(";"));
let text = "";
text += "<style> \n";
text += `#${widgetID} .oldb-icon {
`;
text += ` max-height: ${maxicon}px;
`;
text += ` max-width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-tdicon {
`;
text += ` width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-tt {
`;
text += " width: 100%;\n";
text += "} \n";
text += `#${widgetID} .oldb-tt td{
`;
text += " white-space: nowrap;\n";
text += "} \n";
text += `#${widgetID} .oldb-wrap {
`;
text += " white-space: normal !important;\n";
text += "} \n";
text += `#${widgetID} .oldb-goal {
`;
text += " white-space: nowrap;\n";
text += " display: inline-block;\n";
text += "} \n";
text += `#${widgetID} .oldb-full {
`;
text += " width: 50%;\n";
text += "} \n";
text += `#${widgetID} .oldb-center {
`;
text += " text-align: center;\n";
text += "} \n";
text += `#${widgetID} .oldb-right {
`;
text += " text-align: right;\n";
text += "} \n";
text += `#${widgetID} .oldb-left {
`;
text += " text-align: left;\n";
text += "} \n";
text += `#${widgetID} .oldb-datetime {
`;
text += " font-weight: bold;\n";
text += "} \n";
text += "</style> \n";
text += '<table class="oldb-tt">';
const date_options = showweekday ? { weekday: "short", month: "2-digit", day: "2-digit" } : { month: "2-digit", day: "2-digit" };
const time_options = { hour: "2-digit", minute: "2-digit" };
gamedays.forEach(
function(gameday) {
const today = /* @__PURE__ */ new Date();
const gddate = vis.binds["openligadb"].getDateFromJSON(gameday.matchDateTime);
let classtext = vis.binds["openligadb"].compareDate(today, gddate) ? "todaygameheader" : "";
classtext += gameday.favorite ? " favorite" : "";
classtext != "" ? text += ` <tr class="${classtext}">` : text += " <tr>";
text += ` <td class="oldb-right oldb-datetime" colspan="3">${gddate.toLocaleString(vis.language, date_options)}</td>`;
text += ' <td class=""></td>';
text += ` <td class="oldb-left oldb-datetime" colspan="3">${gddate.toLocaleString(vis.language, time_options)}</td>`;
text += " </tr>";
gameday.matches.forEach(
function(match) {
const mdate = vis.binds["openligadb"].getDateFromJSON(match.matchDateTime);
let team1name = shortname ? match.team1.shortName : match.team1.teamName;
let team2name = shortname ? match.team2.shortName : match.team2.teamName;
if (match.team1.favorite) {
team1name = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(team1name, preparedhighlight)}">${team1name}</b>`;
}
if (match.team2.favorite) {
team2name = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(team2name, preparedhighlight)}">${team2name}</b>`;
}
if (onlylogo) {
team1name = " ";
team2name = " ";
}
const result = vis.binds["openligadb"].getResult(match.matchResults);
const team1result = Object.prototype.hasOwnProperty.call(result, "pointsTeam1") ? result.pointsTeam1 : "-";
const team2result = Object.prototype.hasOwnProperty.call(result, "pointsTeam2") ? result.pointsTeam2 : "-";
vis.binds["openligadb"].compareDate(today, mdate) ? text += ' <tr class="todaygame">' : text += " <tr>";
text += ` <td class="oldb-right oldb-full">${team1name}</td>`;
text += ' <td class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-icon" src="${match.team1.teamIconUrl}">`;
text += " </td>";
text += ` <td class="oldb-center">${team1result}</td>`;
text += ' <td class="oldb-center">:</td>';
text += ` <td class="oldb-center">${team2result}</td>`;
text += ' <td class="oldb-center oldb-tdicon">';
text += ` <img class="oldb-center oldb-icon" src="${match.team2.teamIconUrl}">`;
text += " </td>";
text += ` <td class="oldb-left oldb-full">${team2name}</td>`;
text += " </tr>";
const goals = this.getGoals(match);
if (showgoals && goals != "") {
text += " <tr>";
text += ` <td class="oldb-center oldb-wrap" colspan="7"><small>${this.getGoals(match)}</small></td>`;
text += " </tr>";
}
}.bind(this)
);
}.bind(this)
);
text += "</table> ";
$(`#${widgetID}`).html(text);
},
filterGameDay: function(allmatches, gameday, gamedaycount, currgameday) {
gameday = parseInt(gameday);
gamedaycount = parseInt(gamedaycount);
currgameday = parseInt(currgameday);
return allmatches.reduce(function(result, item) {
if (gameday > 0 && item.group.groupOrderID >= gameday && item.group.groupOrderID < gameday + gamedaycount) {
result.push(item);
}
if (gameday < 0 && item.group.groupOrderID >= currgameday + gameday && item.group.groupOrderID < currgameday + gameday + gamedaycount) {
result.push(item);
}
return result;
}, []);
},
groupGameDay: function(allmatches, shortname, highlight) {
const newarray = [];
const objectarr = allmatches.reduce(function(result, item) {
let gameday;
if (Object.prototype.hasOwnProperty.call(result, item.matchDateTime)) {
gameday = result[item.matchDateTime];
} else {
gameday = {
matchDateTime: item.matchDateTime,
matches: [],
favorite: false
};
}
const team1name = shortname ? item.team1.shortName : item.team1.teamName;
let team2name = shortname ? item.team2.shortName : item.team2.teamName;
item.team1.favorite = false;
item.team2.favorite = false;
if (vis.binds["openligadb"].checkHighlite(team1name, highlight)) {
item.team1.favorite = true;
gameday.favorite = true;
}
if (vis.binds["openligadb"].checkHighlite(team2name, highlight)) {
team2name = `<b class="favorite">${team2name}</b>`;
item.team2.favorite = true;
gameday.favorite = true;
}
gameday.matches.push(item);
result[item.matchDateTime] = gameday;
return result;
}, []);
for (const items in objectarr) {
newarray.push(objectarr[items]);
}
return newarray;
},
getGoals: function(match) {
let goaltxts = "";
match.goals.forEach(function(goal, index, arr) {
let goaltxt = "";
const name = goal.goalGetterName ? ` ${goal.goalGetterName}` : "";
const minute = goal.matchMinute ? ` (${goal.matchMinute})` : "";
goaltxt += `${goal.scoreTeam1}:${goal.scoreTeam2}${name}${minute}`;
goaltxt += goal.isPenalty ? " (Elfmeter)" : "";
goaltxt += goal.isOwnGoal ? " (Eigentor)" : "";
goaltxt += index < arr.length - 1 ? ", " : "";
goaltxts += `<span class="oldb-goal">${goaltxt}</span>`;
});
return goaltxts;
}
},
table4: {
createWidget: function(widgetID, view, data, style) {
const $div = $(`#${widgetID}`);
if (!$div.length) {
return setTimeout(function() {
vis.binds["openligadb"].table4.createWidget(widgetID, view, data, style);
}, 100);
}
const allmatches = data["oid-allmatches"] ? JSON.parse(vis.states.attr(`${data["oid-allmatches"]}.val`)) : [];
const currgameday = data["oid-currgameday"] ? vis.states.attr(`${data["oid-currgameday"]}.val`) : 1;
let showgameday = data.showgameday || "";
if (vis.editMode && /{.*}/gm.test(showgameday)) {
showgameday = "";
}
if (showgameday == 0) {
showgameday = "";
}
showgameday = showgameday || currgameday || "";
let lastgamecount = data["lastgamecount"] || showgameday;
if (lastgamecount == 0) {
lastgamecount = showgameday;
}
const showtrend = data.showtrend || false;
const iconup = data.iconup || "widgets/openligadb/img/trend_up.png";
const icondn = data.icondn || "widgets/openligadb/img/trend_dn.png";
const iconst = data.iconst || "widgets/openligadb/img/trend_st.png";
const mode_binding = data.mode_binding || "";
data.mode = "1total,2home,3away,4round1,5round2".indexOf(mode_binding) >= 0 && mode_binding != "" ? mode_binding : data.mode;
const mode = data.mode || "1total";
const mymode = mode[0];
function onChange() {
vis.binds["openligadb"].table4.createWidget(widgetID, view, data, style);
}
if (data["oid-allmatches"] && data["oid-currgameday"]) {
if (!vis.editMode) {
vis.binds["openligadb"].bindStates2(
$div,
[data["oid-allmatches"], data["oid-currgameday"]],
onChange
);
}
}
let table = this.calcTable(allmatches, mymode, showgameday, lastgamecount);
const newtable = [];
for (const items in table) {
newtable.push(table[items]);
}
table = newtable.sort(function(a, b) {
return a.points > b.points ? -1 : b.points > a.points ? 1 : a.goalDiff < b.goalDiff ? 1 : a.goalDiff > b.goalDiff ? -1 : 0;
});
const maxicon = data.maxicon || 25;
const onlylogo = data.onlylogo || false;
const shortname = data.shortname || false;
const highlight = data.highlight || "";
const filter = data.filter || "";
const preparedhighlight = vis.binds["openligadb"].prepareFilter(highlight);
let text = "";
text += "<style> \n";
text += `#${widgetID} .oldb-icon {
`;
text += ` max-height: ${maxicon}px;
`;
text += ` max-width: ${maxicon}px;
`;
text += "} \n";
text += `#${widgetID} .oldb-tt {
`;
text += " width: 100%;\n";
text += "} \n";
text += `#${widgetID} .oldb-tt td{
`;
text += " white-space: nowrap;\n";
text += "} \n";
text += `#${widgetID} .oldb-full {
`;
text += " width: 100%;\n";
text += "} \n";
text += `#${widgetID} .oldb-center {
`;
text += " text-align: center;\n";
text += "} \n";
text += "</style> \n";
text += '<table class="oldb-tt">';
text += " <thead>";
text += " <tr >";
text += ` <th class="oldb-center oldb-rank" >`;
text += " #";
text += " </th>";
text += ` <th colspan="2" class="oldb-clubheader" style="text-align: left;" title="${_("Club_tooltip")}">`;
text += ` ${_("Club")}`;
text += " </th>";
text += "";
text += ` <th class="oldb-center oldb-games" title="${_("Sp_tooltip")}">`;
text += ` ${_("Sp")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-won" title="${_("S_tooltip")}">`;
text += ` ${_("S")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-draw" title="${_("U_tooltip")}">`;
text += ` ${_("U")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-lost" title="${_("N_tooltip")}">`;
text += ` ${_("N")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-goals" title="${_("Tore_tooltip")}">`;
text += ` ${_("Tore")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-goaldiff" title="${_("Diff_tooltip")}">`;
text += ` ${_("Diff")}`;
text += " </th>";
text += ` <th class="oldb-center oldb-points" title="${_("Punkte_tooltip")}">`;
text += ` ${_("Punkte")}`;
text += " </th>";
if (showtrend) {
text += ` <th class="oldb-center oldb-trend" title="${_("T_tooltip")}">`;
}
if (showtrend) {
text += ` ${_("T")}`;
}
if (showtrend) {
text += " </th>";
}
text += " </tr>";
text += " </thead>";
text += ' <tbody class="oldb-tb">';
table.forEach(function(team, index) {
let teamname = shortname ? team.shortName : team.teamName;
if (!(vis.binds["openligadb"].checkHighlite(teamname, filter) || filter == "")) {
return;
}
if (vis.binds["openligadb"].checkHighlite(teamname, preparedhighlight.map((el) => el.filter).join(";"))) {
teamname = `<b class="favorite ${vis.binds["openligadb"].getCSSClass(teamname, preparedhighlight)}">${teamname}</b>`;
}
text += " <tr>";
text += ' <td class="oldb-center oldb-rank">';
text += index + 1;
text += " </td>";
text += ' <td class="oldb-center">';
text += ` <img class="oldb-icon" src="${team.teamIconUrl}">`;
text += " </td>";
if (!onlylogo) {
text += ' <td class="oldb-teamname oldb-full">';
text += ` <span>${teamname}</span>`;
text += " </td>";
}
text += ' <td class="oldb-center oldb-games">';
text += team.matches;
text += " </td>";
text += ' <td class="oldb-center oldb-won">';
text += team.won;
text += " </td>";
text += ' <td class="oldb-center oldb-draw">';
text += team.draw;
text += " </td>";
text += ' <td class="oldb-center oldb-lost">';
text += team.lost;
text += " </td>";
text += ' <td class="oldb-center oldb-goals">';
text += `${team.goals}:${team.opponentGoals}`;
text += " </td>";
text += ' <td class="oldb-center oldb-goaldiff">';
text += team.goalDiff;
text += " </td>";
text += ' <td class="oldb-center oldb-points">';
text += ` <strong>${team.points}</strong>`;
text += " </td>";
let ticon = "";
if (showtrend) {
if (team.ranking[team.ranking.length - 1] < team.ranking[team.ranking.length - 2]) {
ticon = iconup;
}
if (team.ranking[team.ranking.length - 1] > team.ranking[team.ranking.length - 2]) {
ticon = icondn;
}
if (team.ranking[team.ranking.length - 1] == team.ranking[team.ranking.length - 2]) {
ticon = iconst;
}
}
if (showtrend) {
text += ' <td class="oldb-center oldb-points">';
text += ` <img class="oldb-icon" src="${ticon}">`;
text += " </td>";
}
text += " </tr>";
});
text += " </tbody>";
text += "</table> ";
$(`#${widgetID}`).html(text);
},
addRanking: function(table, prevgd) {
let newtable = [];
for (const items in table) {
newtable.push(table[items]);
}
newtable = newtable.sort(function(a, b) {
return a.points > b.points ? -1 : b.points > a.points ? 1 : a.goalDiff < b.goalDiff ? 1 : a.goalDiff > b.goalDiff ? -1 : 0;
});
newtable.forEach(function(team, index) {
table[team.teamName].ranking[prevgd] = index + 1;
});
},
calcTable: function(allmatches, mymode, showgameday, lastgamecount) {
let prevgd = 0;
if (!allmatches) {
return [];
}
const maxgameday = allmatches.reduce(function(a, b) {
return Math.max(a, b.group.groupOrderID);
}, 0);
const table = allmatches.reduce((result, item) => {
if (item.group.groupOrderID != prevgd && item.group.groupOrderID <= showgameday) {
this.addRanking(result, prevgd);
}
prevgd = item.group.groupOrderID;
const team1name = item.team1.teamName;
const shortname1 = item.team1.shortName;
const teamiconurl1 = item.team1.teamIconUrl;
const team2name = item.team2.teamName;
const shortname2 = item.team2.shortName;
const teamiconurl2 = item.team2.teamIconUrl;
let team1;
if (Object.prototype.hasOwnProperty.call(result, team1name)) {
team1 = result[team1name];
} else {
team1 = {
teamName: team1name,
shortName: shortname1,
teamIconUrl: teamiconurl1,
points: 0,
ranking: [],
opponentGoals: 0,
goals: 0,
matches: 0,
won: 0,
lost: 0,
draw: 0,
goalDiff: 0
};
}
let team2;
if (Object.prototype.hasOwnProperty.call(result, team2name)) {
team2 = result[team2name];
} else {
team2 = {
teamName: team2name,
shortName: shortname2,
teamIconUrl: teamiconurl2,
points: 0,
ranking: [],
opponentGoals: 0,
goals: 0,
matches: 0,
won: 0,
lost: 0,
draw: 0,
goalDiff: 0
};
}
const matchresult = vis.binds["openligadb"].getResult(item.matchResults);
if (Object.prototype.hasOwnProperty.call(matchresult, "pointsTeam1") && item.group.groupOrderID <= showgameday && item.group.groupOrderID > showgameday - lastgamecount) {
if (matchresult.pointsTeam1 > matchresult.pointsTeam2) {
if (mymode == 1 || mymode == 2 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team1.points += 3;
team1.opponentGoals += matchresult.pointsTeam2;
team1.goals += matchresult.pointsTeam1;
team1.matches += 1;
team1.won += 1;
team1.goalDiff = team1.goals - team1.opponentGoals;
}
if (mymode == 1 || mymode == 3 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team2.points += 0;
team2.opponentGoals += matchresult.pointsTeam1;
team2.goals += matchresult.pointsTeam2;
team2.matches += 1;
team2.lost += 1;
team2.goalDiff = team2.goals - team2.opponentGoals;
}
}
if (matchresult.pointsTeam1 == matchresult.pointsTeam2) {
if (mymode == 1 || mymode == 2 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team1.points += 1;
team1.opponentGoals += matchresult.pointsTeam2;
team1.goals += matchresult.pointsTeam1;
team1.matches += 1;
team1.draw += 1;
team1.goalDiff = team1.goals - team1.opponentGoals;
}
if (mymode == 1 || mymode == 3 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team2.points += 1;
team2.opponentGoals += matchresult.pointsTeam1;
team2.goals += matchresult.pointsTeam2;
team2.matches += 1;
team2.draw += 1;
team2.goalDiff = team2.goals - team2.opponentGoals;
}
}
if (matchresult.pointsTeam1 < matchresult.pointsTeam2) {
if (mymode == 1 || mymode == 2 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team1.points += 0;
team1.opponentGoals += matchresult.pointsTeam2;
team1.goals += matchresult.pointsTeam1;
team1.matches += 1;
team1.lost += 1;
team1.goalDiff = team1.goals - team1.opponentGoals;
}
if (mymode == 1 || mymode == 3 || mymode == 4 && item.group.groupOrderID <= maxgameday / 2 || mymode == 5 && item.group.groupOrderID > maxgameday / 2) {
team2.points += 3;
team2.opponentGoals += matchresult.pointsTeam1;
team2.goals += matchresult.pointsTeam2;
team2.matches += 1;
team2.won += 1;
team2.goalDiff = team2.goals - team2.opponentGoals;
}
}
}
result[team1name] = team1;
result[team2name] = team2;
return result;
}, []);
this.addRanking(table, sh