You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

216 lines
7.2 KiB

const UI = {
CLASSNAMES: {
EVENT: {
ITEM: 'event-item',
YEAR: 'event-year',
FLAG: 'event-flag',
LOCATION: 'event-location',
},
SORT: {
ITEM: 'sort-item',
TEXT: 'sort-text',
},
},
DATA: {
ROOT: 'data-root',
EVENT: 'data-event-key',
ROUND: 'data-round-key',
SORT: 'data-sort-key',
},
findRoot: (node) => {
while (node !== document.body && node.getAttribute(UI.DATA.ROOT) === null) {
node = node.parentNode;
}
return node;
},
clearActive: (nodes) => {
nodes.forEach(node => {
const classes = node.className.split(' ');
classes.splice(1, classes.indexOf('active'));
node.className = classes.join(' ');
});
},
updateEventsPane: (eventKey) => {
const eventItems = document.querySelectorAll(`.${UI.CLASSNAMES.EVENT.ITEM}`);
UI.clearActive(eventItems);
const activeEventNode = document.querySelector(`[${UI.DATA.EVENT}="${eventKey}"`);
activeEventNode.className += ' active';
},
updateRoundsPane: (rounds) => {
const roundsDiv = document.querySelector('.rounds');
},
updateSortPane: (sort) => {
const sortItems = document.querySelectorAll('.sort-item');
UI.clearActive(sortItems);
sortItems.forEach(node => {
if (node.getAttribute(UI.DATA.SORT) === sort) {
node.className += ' active';
}
});
},
buildEventsPane: (onClick) => {
const eventsList = [
{ year: 1930, location: "Uruguay", icon: "uy" },
{ year: 1934, location: "Italy", icon: "it" },
{ year: 1938, location: "France", icon: "fr" },
{ year: 1954, location: "Switzerland", icon: "ch" },
{ year: 1958, location: "Sweden", icon: "se" },
{ year: 1962, location: "Chile", icon: "cl" },
{ year: 1966, location: "England", icon: "gb" },
{ year: 1970, location: "Mexico", icon: "mx" },
{ year: 1974, location: "West Germany", icon: "de" },
{ year: 1978, location: "Argentina", icon: "ar" },
{ year: 1982, location: "Spain", icon: "es" },
{ year: 1986, location: "Mexico", icon: "mx" },
{ year: 1990, location: "Italy", icon: "it" },
{ year: 1994, location: "USA", icon: "us" },
{ year: 1998, location: "France", icon: "fr" },
{ year: 2002, location: "Japan / South Korea", icon: "jp" },
{ year: 2006, location: "Germany", icon: "de" },
{ year: 2010, location: "Johannesburg", icon: "za" },
{ year: 2014, location: "Brazil", icon: "br" },
];
const eventsDiv = document.querySelector('.events');
while (eventsDiv.hasChildNodes()) {
eventsDiv.firstChild.remove();
}
eventsList.forEach((evt) => {
const item = document.createElement('div');
const year = document.createElement('div');
const location = document.createElement('div');
const flag = document.createElement('div');
const flagIcon = document.createElement('div');
item.className = UI.CLASSNAMES.EVENT.ITEM;
item.addEventListener('click', onClick);
item.setAttribute(UI.DATA.EVENT, evt.year);
item.setAttribute(UI.DATA.ROOT, true);
year.className = UI.CLASSNAMES.EVENT.YEAR;
year.innerHTML = evt.year;
location.className = UI.CLASSNAMES.EVENT.LOCATION;
location.innerHTML = evt.location;
flag.className = UI.CLASSNAMES.EVENT.FLAG;
flagIcon.className = `flag-icon flag-icon-${evt.icon}`;
flag.appendChild(flagIcon);
item.appendChild(flag);
item.appendChild(year);
item.appendChild(location);
eventsDiv.appendChild(item);
});
},
buildSortPane: (onClick, SORT_TYPES) => {
const sortList = [
{ text: 'Order by continent', value: null },
{ text: 'Order by goals scored', value: SORT_TYPES.GOALS },
{ text: 'Order by country name', value: SORT_TYPES.COUNTRY },
{ text: 'Order by country population', value: SORT_TYPES.POPULATION },
];
const sortDiv = document.querySelector('.sort');
while (sortDiv.hasChildNodes()) {
sortDiv.firstChild.remove();
}
sortList.forEach(sort => {
const item = document.createElement('div');
const text = document.createElement('div');
item.className = UI.CLASSNAMES.SORT.ITEM;
item.addEventListener('click', onClick);
item.setAttribute(UI.DATA.SORT, sort.value);
item.setAttribute(UI.DATA.ROOT, true);
item.addEventListener('click', onClick);
text.className = UI.CLASSNAMES.SORT.TEXT;
text.innerHTML = sort.text;
item.appendChild(text);
sortDiv.appendChild(item);
});
},
buildRoundsPane: (onClick) => {
// const roundsDiv = document.querySelector('.rounds');
//
// while (roundsDiv.hasChildNodes()) {
// roundsDiv.firstChild.remove();
// }
//
// rounds.forEach(round => {
// const item = document.createElement('div');
// item.className = 'round-item';
// item.setAttribute('data-round-id', round.roundId);
//
// const hide = document.createElement('div');
// hide.className = 'round-hide';
// hide.innerHTML = 'hide';
//
// const text = document.createElement('div');
// text.className = 'round-text';
// text.innerHTML = round.roundName;
//
// item.appendChild(text);
// item.appendChild(hide);
// roundsDiv.appendChild(item);
// });
},
getRoundName: (name) => {
const name2 = name.match(/^Matchday/) ? 'First round' : name;
switch (name2) {
case 'Preliminary round':
case 'First round':
case 'First round replays':
case 'Group-1 Play-off':
case 'Group-2 Play-off':
case 'Group-3 Play-off':
case 'Group-4 Play-off':
return "Preliminaries";
case 'Round of 16':
return "Round of 16";
case 'Quarter-finals':
case 'Quarter-finals replays':
return "Quarter Finals";
case 'Semi-finals':
return "Semi Finals";
case 'Third place match':
case 'Third-place match':
case 'Match for third place':
case 'Third place play-off':
case 'Third-place play-off':
return "Third Place Match";
case 'Quarterfinals':
return "Quarterfinals";
case 'Semifinals':
return "Semifinals";
case 'Final':
case 'Finals':
return "Final";
}
console.error(`Unknown round name: ${name}`);
return name;
},
};