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.
252 lines
7.4 KiB
252 lines
7.4 KiB
const main = document.getElementById("main");
|
|
const form = document.getElementById("search");
|
|
const input = document.getElementById("input");
|
|
let ctx = document.getElementById('myChart');
|
|
const graphic = document.getElementById("graphic")
|
|
const icon = document.getElementById('icon')
|
|
|
|
let filteredCountries = [];
|
|
let countriesPopulation = [];
|
|
let mostSpekingLangue = new Map();
|
|
|
|
calculateMostSpeakingLangues(countriesData)
|
|
createCardAndDisplay(sortCountriesToCountriName(countriesData))
|
|
|
|
// create carts and display in HTML function
|
|
function createCardAndDisplay(arr){
|
|
let cards = [];
|
|
arr.forEach((data) => {
|
|
countriesPopulation.push(data.population)
|
|
|
|
let card = `
|
|
<div class = "country-wrapper">
|
|
<img src = "${data.flag}">
|
|
<p class = "country-name">${data.name } </p>
|
|
<ul>
|
|
<li>Capital: ${data.capital} </li>
|
|
<li>Langue: ${data.languages} </li>
|
|
<li>Population: ${data.population} </li>
|
|
<ul>
|
|
</div>
|
|
`;
|
|
cards.push(card)
|
|
})
|
|
main.innerHTML = ''
|
|
main.innerHTML = cards
|
|
}
|
|
|
|
// buttons click events
|
|
form.addEventListener('click', (e) => {
|
|
e.preventDefault()
|
|
let element = e.target;
|
|
if(!element.matches('button')) return;
|
|
switch(element.id){
|
|
|
|
// click reverse button
|
|
case'reverseButton':
|
|
if (input.value.length == 0){
|
|
if(main.className == "main"){
|
|
main.className = "main-reverse"
|
|
createCardAndDisplay(sortCountriesToCountriName(countriesData).reverse())
|
|
}
|
|
else if(main.className == "main-reverse"){
|
|
main.className = "main"
|
|
createCardAndDisplay(sortCountriesToCountriName(countriesData))
|
|
}
|
|
else {
|
|
main.className = 'main'
|
|
createCardAndDisplay(sortCountriesToCountriName(countriesData))
|
|
}
|
|
}
|
|
else {
|
|
if(main.className == 'filtered-countries'){
|
|
main.className = 'filtered-countries-reverse'
|
|
createCardAndDisplay(filteredCountries.reverse())
|
|
}
|
|
else if(main.className == 'filtered-countries-reverse'){
|
|
main.className = 'filtered-countries'
|
|
createCardAndDisplay(filteredCountries.reverse())
|
|
}
|
|
else{
|
|
main.className = 'filtered-countries';
|
|
createCardAndDisplay(sortCountriesToCountriName(filteredCountries))
|
|
}
|
|
}
|
|
break
|
|
|
|
// click capital button
|
|
case'capitalButton':
|
|
if(input.value.length == 0 ){
|
|
if(main.className == "main-capital"){
|
|
main.className = "main-capital-reverse"
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(countriesData)).reverse())
|
|
}
|
|
else if(main.className == "main-capital-reverse"){
|
|
main.className = "main-capital"
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(countriesData)))
|
|
}
|
|
else {
|
|
main.className = 'main-capital'
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(countriesData)))
|
|
}
|
|
}
|
|
else {
|
|
if(main.className == 'filtered-capital'){
|
|
main.className = 'filtered-capital-reverse'
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(filteredCountries)).reverse())
|
|
}
|
|
else if (main.className == 'filtered-capital-reverse'){
|
|
main.className = 'filtered-capital'
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(filteredCountries)))
|
|
}
|
|
else{
|
|
main.className = 'filtered-capital'
|
|
createCardAndDisplay(sortCountriesToCapitalName(sortCountriesToCountriName(filteredCountries)))
|
|
}
|
|
}
|
|
break;
|
|
|
|
// click population button
|
|
case 'population-button':
|
|
if (input.value.length == 0){
|
|
if (main.className == 'main-population'){
|
|
main.className = 'main-population-reverse'
|
|
createCardAndDisplay(sortCountriesToPopulation(countriesData).reverse())
|
|
}
|
|
else if (main.className == 'main-population-reverse'){
|
|
main.className = 'main-population'
|
|
createCardAndDisplay(sortCountriesToPopulation(countriesData))
|
|
}
|
|
else {
|
|
main.className = 'main-population'
|
|
createCardAndDisplay(sortCountriesToPopulation(countriesData))
|
|
}
|
|
}
|
|
else{
|
|
if(main.className == 'filtered-population'){
|
|
main.className = 'filtered-population-reverse'
|
|
createCardAndDisplay(sortCountriesToPopulation(filteredCountries).reverse())
|
|
}
|
|
else if (main.className == 'filtered-population-reverse'){
|
|
main.className = 'filtered-population'
|
|
createCardAndDisplay(sortCountriesToPopulation(filteredCountries))
|
|
}
|
|
else {
|
|
main.className = 'filtered-population'
|
|
createCardAndDisplay(sortCountriesToPopulation(filteredCountries))
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
//input event listener
|
|
input.addEventListener('keyup', (e)=>{
|
|
countriesPopulation = [];
|
|
filteredCountries = [];
|
|
|
|
e.preventDefault()
|
|
let value = e.target.value.trim().toLowerCase()
|
|
|
|
if (value.length > 0){
|
|
sortCountriesToCountriName(countriesData).forEach((data) => {
|
|
if(data.name.toLowerCase().trim().startsWith(value)){
|
|
filteredCountries.push(data)
|
|
countriesPopulation.push(data.population)
|
|
}
|
|
})
|
|
main.className = 'filtered-countries'
|
|
createCardAndDisplay(filteredCountries)
|
|
updateGrapgic(sortArrayNames(filteredCountries),
|
|
sortArrays(countriesPopulation))
|
|
}
|
|
else if (value.length == 0){
|
|
main.className = 'main'
|
|
createCardAndDisplay((sortCountriesToCountriName(countriesData)))
|
|
updateGrapgic(sortArrayNames(countriesData).slice(0,8),
|
|
sortArrays(countriesPopulation).slice(0,8))
|
|
}
|
|
});
|
|
|
|
// return sort countries name function
|
|
function sortArrays(arr){
|
|
return arr.sort((a, b) => {return b-a})
|
|
}
|
|
|
|
// Return the names of countries sorted by country population
|
|
function sortArrayNames (arr){
|
|
let countriesName = [];
|
|
sortCountriesToPopulation(arr).forEach((data)=>{
|
|
countriesName.push(data.name)
|
|
})
|
|
return countriesName;
|
|
}
|
|
|
|
// return sort countries data array by countries name
|
|
function sortCountriesToCountriName(arr) {
|
|
return arr.sort((a, b) =>{
|
|
if(a.name < b.name) return -1;
|
|
if(a.name > b.name) return +1;
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
// return sort capital name
|
|
function sortCountriesToCapitalName(arr) {
|
|
return arr.sort((a, b) =>{
|
|
if(a.capital == undefined ) return -1
|
|
if(a.capital < b.capital) return -1;
|
|
if(a.capital > b.capital) return +1;
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
// return sort populations
|
|
function sortCountriesToPopulation (arr) {
|
|
return arr.sort((a, b) => {
|
|
if(a.population < b.population) return +1
|
|
if(a.population > b.population) return -1
|
|
return 0;
|
|
});
|
|
}
|
|
|
|
// Object for graphic
|
|
let myCharts = new Chart(ctx, {
|
|
type: 'bar',
|
|
data: {
|
|
labels:sortArrayNames(countriesData).slice(0,8),
|
|
datasets: [{
|
|
label: '# of Votes',
|
|
data:sortArrays(countriesPopulation).slice(0,8),
|
|
borderWidth: 1
|
|
}]
|
|
},
|
|
options: {
|
|
scales: {
|
|
y: {
|
|
beginAtZero: true
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
// update graphic when pressing keyboard
|
|
function updateGrapgic(countriesNames, countriesPopulations) {
|
|
myCharts.data.labels = countriesNames;
|
|
myCharts.data.datasets[0].data = countriesPopulations;
|
|
myCharts.update()
|
|
}
|
|
|
|
icon.addEventListener('click', ()=> {
|
|
graphic.classList.toggle('graphic-wrapper')
|
|
})
|
|
|
|
|
|
function calculateMostSpeakingLangues(array) {
|
|
|
|
array.forEach((data) =>{
|
|
mostSpekingLangue.set(data.languages,data.name)
|
|
})
|
|
}
|
|
|
|
|