Cleaned the code

This commit is contained in:
Nik Topler 2020-09-16 10:00:31 +02:00
parent 95daa3f1e1
commit 2dd3a0f0b7
9 changed files with 699 additions and 419 deletions

305
JS/diacritics.js Normal file
View file

@ -0,0 +1,305 @@
const replacementList = [
{
base: ' ',
chars: "\u00A0",
}, {
base: '0',
chars: "\u07C0",
}, {
base: 'A',
chars: "\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F",
}, {
base: 'AA',
chars: "\uA732",
}, {
base: 'AE',
chars: "\u00C6\u01FC\u01E2",
}, {
base: 'AO',
chars: "\uA734",
}, {
base: 'AU',
chars: "\uA736",
}, {
base: 'AV',
chars: "\uA738\uA73A",
}, {
base: 'AY',
chars: "\uA73C",
}, {
base: 'B',
chars: "\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0181",
}, {
base: 'C',
chars: "\u24b8\uff23\uA73E\u1E08\u0106\u0043\u0108\u010A\u010C\u00C7\u0187\u023B",
}, {
base: 'D',
chars: "\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018A\u0189\u1D05\uA779",
}, {
base: 'Dh',
chars: "\u00D0",
}, {
base: 'DZ',
chars: "\u01F1\u01C4",
}, {
base: 'Dz',
chars: "\u01F2\u01C5",
}, {
base: 'E',
chars: "\u025B\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E\u1D07",
}, {
base: 'F',
chars: "\uA77C\u24BB\uFF26\u1E1E\u0191\uA77B",
}, {
base: 'G',
chars: "\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E\u0262",
}, {
base: 'H',
chars: "\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D",
}, {
base: 'I',
chars: "\u24BE\uFF29\xCC\xCD\xCE\u0128\u012A\u012C\u0130\xCF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197",
}, {
base: 'J',
chars: "\u24BF\uFF2A\u0134\u0248\u0237",
}, {
base: 'K',
chars: "\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2",
}, {
base: 'L',
chars: "\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780",
}, {
base: 'LJ',
chars: "\u01C7",
}, {
base: 'Lj',
chars: "\u01C8",
}, {
base: 'M',
chars: "\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C\u03FB",
}, {
base: 'N',
chars: "\uA7A4\u0220\u24C3\uFF2E\u01F8\u0143\xD1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u019D\uA790\u1D0E",
}, {
base: 'NJ',
chars: "\u01CA",
}, {
base: 'Nj',
chars: "\u01CB",
}, {
base: 'O',
chars: "\u24C4\uFF2F\xD2\xD3\xD4\u1ED2\u1ED0\u1ED6\u1ED4\xD5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\xD6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\xD8\u01FE\u0186\u019F\uA74A\uA74C",
}, {
base: 'OE',
chars: "\u0152",
}, {
base: 'OI',
chars: "\u01A2",
}, {
base: 'OO',
chars: "\uA74E",
}, {
base: 'OU',
chars: "\u0222",
}, {
base: 'P',
chars: "\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754",
}, {
base: 'Q',
chars: "\u24C6\uFF31\uA756\uA758\u024A",
}, {
base: 'R',
chars: "\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782",
}, {
base: 'S',
chars: "\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784",
}, {
base: 'T',
chars: "\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786",
}, {
base: 'Th',
chars: "\u00DE",
}, {
base: 'TZ',
chars: "\uA728",
}, {
base: 'U',
chars: "\u24CA\uFF35\xD9\xDA\xDB\u0168\u1E78\u016A\u1E7A\u016C\xDC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244",
}, {
base: 'V',
chars: "\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245",
}, {
base: 'VY',
chars: "\uA760",
}, {
base: 'W',
chars: "\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72",
}, {
base: 'X',
chars: "\u24CD\uFF38\u1E8A\u1E8C",
}, {
base: 'Y',
chars: "\u24CE\uFF39\u1EF2\xDD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE",
}, {
base: 'Z',
chars: "\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762",
}, {
base: 'a',
chars: "\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250\u0251",
}, {
base: 'aa',
chars: "\uA733",
}, {
base: 'ae',
chars: "\u00E6\u01FD\u01E3",
}, {
base: 'ao',
chars: "\uA735",
}, {
base: 'au',
chars: "\uA737",
}, {
base: 'av',
chars: "\uA739\uA73B",
}, {
base: 'ay',
chars: "\uA73D",
}, {
base: 'b',
chars: "\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253\u0182",
}, {
base: 'c',
chars: "\uFF43\u24D2\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184",
}, {
base: 'd',
chars: "\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\u018B\u13E7\u0501\uA7AA",
}, {
base: 'dh',
chars: "\u00F0",
}, {
base: 'dz',
chars: "\u01F3\u01C6",
}, {
base: 'e',
chars: "\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u01DD",
}, {
base: 'f',
chars: "\u24D5\uFF46\u1E1F\u0192",
}, {
base: 'ff',
chars: "\uFB00",
}, {
base: 'fi',
chars: "\uFB01",
}, {
base: 'fl',
chars: "\uFB02",
}, {
base: 'ffi',
chars: "\uFB03",
}, {
base: 'ffl',
chars: "\uFB04",
}, {
base: 'g',
chars: "\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\uA77F\u1D79",
}, {
base: 'h',
chars: "\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265",
}, {
base: 'hv',
chars: "\u0195",
}, {
base: 'i',
chars: "\u24D8\uFF49\xEC\xED\xEE\u0129\u012B\u012D\xEF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131",
}, {
base: 'j',
chars: "\u24D9\uFF4A\u0135\u01F0\u0249",
}, {
base: 'k',
chars: "\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3",
}, {
base: 'l',
chars: "\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747\u026D",
}, {
base: 'lj',
chars: "\u01C9",
}, {
base: 'm',
chars: "\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F",
}, {
base: 'n',
chars: "\u24DD\uFF4E\u01F9\u0144\xF1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5\u043B\u0509",
}, {
base: 'nj',
chars: "\u01CC",
}, {
base: 'o',
chars: "\u24DE\uFF4F\xF2\xF3\xF4\u1ED3\u1ED1\u1ED7\u1ED5\xF5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\xF6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\xF8\u01FF\uA74B\uA74D\u0275\u0254\u1D11",
}, {
base: 'oe',
chars: "\u0153",
}, {
base: 'oi',
chars: "\u01A3",
}, {
base: 'oo',
chars: "\uA74F",
}, {
base: 'ou',
chars: "\u0223",
}, {
base: 'p',
chars: "\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755\u03C1",
}, {
base: 'q',
chars: "\u24E0\uFF51\u024B\uA757\uA759",
}, {
base: 'r',
chars: "\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783",
}, {
base: 's',
chars: "\u24E2\uFF53\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B\u0282",
}, {
base: 'ss',
chars: "\xDF",
}, {
base: 't',
chars: "\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787",
}, {
base: 'th',
chars: "\u00FE",
}, {
base: 'tz',
chars: "\uA729",
}, {
base: 'u',
chars: "\u24E4\uFF55\xF9\xFA\xFB\u0169\u1E79\u016B\u1E7B\u016D\xFC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289",
}, {
base: 'v',
chars: "\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C",
}, {
base: 'vy',
chars: "\uA761",
}, {
base: 'w',
chars: "\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73",
}, {
base: 'x',
chars: "\u24E7\uFF58\u1E8B\u1E8D",
}, {
base: 'y',
chars: "\u24E8\uFF59\u1EF3\xFD\u0177\u1EF9\u0233\u1E8F\xFF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF",
}, {
base: 'z',
chars: "\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763",
}
]
let diacriticsMap = {}
for (let i = 0; i < replacementList.length; i++) {
let chars = replacementList[i].chars
for (let j = 0; j < chars.length; j++)
diacriticsMap[chars[j]] = replacementList[i].base
}
function removeDiacritics(str) { return str.replace(/[^\u0000-\u007e]/g, function(c) { return diacriticsMap[c] || c }) }

View file

@ -1,5 +1,232 @@
let weatherArrayToday
let weatherArrayTommorow
let weatherArray2Days
const weather = {
async getweather() {
city = changeDiacritics(userLocationInformationValue[3])
const key = php.info('weather')
const response = await fetch(`https://cors-anywhere.herokuapp.com/https://api.weatherapi.com/v1/forecast.json?key=${key}&q=${city}&days=7`)
const data = await response.json()
weatherArrayToday = data.forecast.forecastday[0]
weatherArrayTommorow = data.forecast.forecastday[1]
weatherArray2Days = data.forecast.forecastday[2]
},
updateWeather() {
let header = document.querySelectorAll('.weather-main-header')[0]
header.children[0].src = weatherArrayToday.day.condition.icon
header.children[1].innerHTML = userLocationInformationValue[3]
header.children[2].innerHTML = `${Math.round(weatherArrayToday.day.avgtemp_c)}°C`
let weatherDate = new Date(weatherArrayToday.date)
let tommorowNumber = weatherDate.getDay()
let dayAfterTomorrow = weatherDate.getDay()
if(tommorowNumber == 6) tommorowNumber = tommorowNumber - 7
if(dayAfterTomorrow == 5 || dayAfterTomorrow == 6) dayAfterTomorrow = dayAfterTomorrow - 7
let dayAcronymTommorow = daysAcronyms[tommorowNumber + 1]
let dayAcronymIn2Days = daysAcronyms[dayAfterTomorrow + 2]
let mainWeatherContent = document.querySelectorAll('.weather-3-days')[0]
mainWeatherContent.children[0].firstElementChild.innerHTML = 'Today'
mainWeatherContent.children[1].firstElementChild.innerHTML = dayAcronymTommorow
mainWeatherContent.children[2].firstElementChild.innerHTML = dayAcronymIn2Days
mainWeatherContent.children[0].children[1].firstElementChild.src = weatherArrayToday.day.condition.icon
mainWeatherContent.children[1].children[1].firstElementChild.src = weatherArrayTommorow.day.condition.icon
mainWeatherContent.children[2].children[1].firstElementChild.src = weatherArray2Days.day.condition.icon
mainWeatherContent.children[0].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[1].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[2].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[0].children[1].lastElementChild.innerHTML = `${weatherArrayToday.day.avgtemp_c}°C`
mainWeatherContent.children[1].children[1].lastElementChild.innerHTML = `${weatherArrayTommorow.day.avgtemp_c}°C`
mainWeatherContent.children[2].children[1].lastElementChild.innerHTML = `${weatherArray2Days.day.avgtemp_c}°C`
mainWeatherContent.children[0].children[2].lastElementChild.innerHTML = `${weatherArrayToday.day.daily_chance_of_rain}%`
mainWeatherContent.children[1].children[2].lastElementChild.innerHTML = `${weatherArrayTommorow.day.daily_chance_of_rain}%`
mainWeatherContent.children[2].children[2].lastElementChild.innerHTML = `${weatherArray2Days.day.daily_chance_of_rain}%`
}
}
let userLocationInformationValue
const user = {
location : async() => { userLocationInformationValue = await user.country() },
country : async() => {
const key = await php.info('user')
const response = await fetch(`https://ipinfo.io?token=${key}`)
const data = await response.json()
const userCountryAcronym = data.country.toLowerCase()
const userCountry = getAcronymCountry(userCountryAcronym)
const userCity = data.city
const userRegion = data.region
const userLocation = data.loc
const userTimeZone = data.timezone
return [userCountry, userCountryAcronym, userCity, userRegion, userLocation, userTimeZone]
}
}
const searchBox = {
update : async (query) => {
let i = 0
let images = await searchBox.fetch(query)
if(images.hits.length === 0) {
images = await searchBox.fetch('nature')
i = Math.round(Math.random() * images.hits.length)
}
let searchAside = document.querySelector('article.search.aside')
searchAside.firstElementChild.firstElementChild.innerHTML = capitalizeString(mainSearchInput.value)
searchAside.firstElementChild.querySelector('figure img').src = images.hits[i].webformatURL
searchAside.firstElementChild.querySelector('figure img').classList.remove('disable')
},
fetch : async(query) => {
const key = await php.info('images')
const response = await fetch(`https://pixabay.com/api/?key=${key}&q=${query}&image_type=photo`)
const image = await response.json()
return image
}
}
let mouseSuggestHover = false
let moreSuggestWordsArray = []
const suggest = {
fetch : async (input) => {
const res = await fetch(`https://api.datamuse.com/sug?s=${input}`)
return words = await res.json()
},
suggest : async() => {
let fetchArray = []
let suggestWordsArray = []
let input = mainSearchInput.value.split(' ')
let n = 0
while(suggestWordsArray.length < 16) {
fetchArray = await suggest.fetch(input[n])
for(let i = 0; i < fetchArray.length; i++)
if(suggestWordsArray.indexOf(fetchArray[i].word) === -1 && fetchArray[i].word !== mainSearchInput.value) suggestWordsArray.push(fetchArray[i].word)
input[n] = removeCharactersInString(input[n], 0, -1)
if(input.length === 0) break
}
suggest.generate(suggestWordsArray)
removeDisableSideElements()
},
generate : (array) => {
let section = document.querySelector('article.suggested-words.aside section')
section.innerHTML = ''
for(let i = 0; i < array.length; i++) {
let div = document.createElement('div')
div.innerHTML = array[i]
div.classList.add('search-box')
div.onclick = () => suggest.selectSuggestedSearchOption(div)
section.appendChild(div)
}
},
manageSuggestWords : async () => {
let suggestWordsArray = await suggest.fetch(mainSearchInput.value)
if(suggestWordsArray.length === 0) return hideSuggestWords()
if(suggestWordsArray.length > 6) suggestWordsArray = removeCharactersInString(suggestWordsArray, 4, suggestWordsArray.length)
suggest.suggestBox(suggestWordsArray)
for(let i = 0; i < suggestMainInput.getElementsByTagName('div').length; i++) {
suggestMainInput.getElementsByTagName('div')[i].onmouseover = () => {
place = i
if(suggestMainInput.querySelectorAll('div.active').length === 1) suggestMainInput.querySelectorAll('div.active')[0].classList.remove('active','key')
suggestMainInput.getElementsByTagName('div')[i].classList.add('active')
}
suggestMainInput.getElementsByTagName('div')[i].onmouseleave = () => { suggestMainInput.getElementsByTagName('div')[i].classList.remove('active','key') }
}
},
suggestBox : (words) => {
let wordBoxes = words.map(word => `<div class="grid pointer" onclick="suggest.selectSuggestedSearchOption(this.firstElementChild)">
<span>${word.word}</span>
</div>`).join('')
const html = `<hr class="absolute">${wordBoxes}`
suggestMainInput.innerHTML = html
},
mouseSuggestHoverChange : (parameter) => {
mouseSuggestHover = parameter
},
removeAllSuggestWordBoxes : () => {
let numberOfBoxes = suggestMainInput.querySelectorAll('div').length
for(let i = 0; i < numberOfBoxes; i++)
suggestMainInput.querySelector('div').remove()
},
selectSuggestedSearchOption : (element) => {
removeActiveSidebarCategory()
hideSuggestWords()
let elementInnerHTML = addCharacterBetweenSpaceInString(element.innerHTML, ' ', '+')
let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML)
historyPushState(location.origin + location.pathname, `?q=${elementInnerHTML}&`, `cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`)
mainSearch()
}
}
const responsiveVersion = {
mobileVersionNavigationBar() {
mainSearchIcon.classList.add('disable')
mainSearchBackLeftIcon.classList.remove('disable')
navigationBarLeft.classList.add('disable')
navigationBarRight.classList.add('disable')
navigationBarMiddle.style.gridColumn = '1/4'
mainSearchFigure.style.gridColumn = '1/2'
mainSearchBackLeftTooltiptext.classList.remove('disable')
mainSearchInput.style.display = 'grid'
extOptIcon.style.display = 'flex'
mainSearchInput.focus()
sideBarContent.style.left = '-100%'
sideMenuCounter = 1
},
desktopVersionNavigationBar() {
mainSearchIcon.classList.remove('disable')
mainSearchBackLeftIcon.classList.add('disable')
navigationBarLeft.classList.remove('disable')
navigationBarRight.classList.remove('disable')
navigationBarMiddle.style.gridColumn = '2/3'
mainSearchFigure.style.gridColumn = '3/4'
mainSearchBackLeftTooltiptext.classList.add('disable')
mainSearchInput.style.display = 'none'
extOptIcon.style.display = 'none'
}
}
const regularExpressions = {
url : {
query : /[\?|\&]+[q]+[=].*?[&]/g,
country : /[\?|\&]+[c]+[o]+[u]+[=].{2}/g,
backgroundColor : /[\&]+[b]+[g]+[=].*/g
},
string : {
symbols : /[@_!#$%^&*()<>?/|}{~:]/g
}
}
const php = {
info : async(word) => {
const response = await fetch('privateInfo.php', {
method: "POST",
body: createFormData(word)
})
return await response.text()
},
session : async() => {
const response = await fetch('include/session.inc.php', {
method: "POST",
body: createFormData('user')
})
return await response.text()
}
}
window.onload = async () => { window.onload = async () => {
await getuserLocationInformationValue() await user.location()
removeActiveSidebarCategory() removeActiveSidebarCategory()
if (window.location.pathname.includes('headlines')) headlines() if (window.location.pathname.includes('headlines')) headlines()
else if (window.location.pathname.includes('for-you')) forYou() else if (window.location.pathname.includes('for-you')) forYou()
@ -20,20 +247,21 @@ window.onload = async () => {
// changeBackgroundColor() // changeBackgroundColor()
let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML) let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML)
if(!window.location.search.match(regularExpressions.url.country)) historyPushState(window.location.origin + window.location.pathname, '', `?cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`) // if(!window.location.search.match(regularExpressions.url.country))
else {
urlCountryAcronym = window.location.search.match(regularExpressions.url.country)[0].slice(5, 7) //historyPushState(window.location.origin + window.location.pathname, '', `?cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`)
if(getAcronymCountry(urlCountryAcronym) === undefined) return openLinks(filePath.headlines) // else {
urlCountry = getAcronymCountry(urlCountryAcronym) // urlCountryAcronym = window.location.search.match(regularExpressions.url.country)[0].slice(5, 7)
updateCountrySelect(urlCountry) // if(getAcronymCountry(urlCountryAcronym) === undefined) return openLinks(filePath.headlines)
} // urlCountry = getAcronymCountry(urlCountryAcronym)
// updateCountrySelect(urlCountry)
// }
if(!window.location.search.match(regularExpressions.url.query)) return if(!window.location.search.match(regularExpressions.url.query)) return
let query = location.search.match(regularExpressions.url.query)[0] let query = location.search.match(regularExpressions.url.query)[0]
query = removeCharactersInString(query, 3, query.length - 1) query = removeCharactersInString(query, 3, query.length - 1)
/* Search news */ /* Search news */
} }
window.onclick = (e) => { window.onclick = (e) => {
@ -45,73 +273,34 @@ window.onclick = (e) => {
else if(!extraSearchOptions.classList.contains('disable')) clickInOutCheck(extraSearchOptions, e.target) else if(!extraSearchOptions.classList.contains('disable')) clickInOutCheck(extraSearchOptions, e.target)
} }
async function getPrivateInfo(word) {
let formData = new FormData
formData.append(word, '')
const response = await fetch('privateInfo.php', {
method: "POST",
body: formData
})
const data = await response.text()
return data
}
function openLinks(string) { window.location.replace(websiteURL + string) } function openLinks(string) { window.location.replace(websiteURL + string) }
function historyPushState(webiste, string, country, background) { history.pushState({}, null, webiste + string + country + background) } function historyPushState(webiste, string, country, background) { history.pushState({}, null, webiste + string + country + background) }
function changeBackgroundColor() { document.body.className = window.location.search.match(regularExpressions.url.backgroundColor)[0].slice(4,10) } function changeBackgroundColor() { document.body.className = window.location.search.match(regularExpressions.url.backgroundColor)[0].slice(4,10) }
let userLocationInformationValue // console.log(changeDiacritics())
async function getuserLocationInformationValue() { userLocationInformationValue = await getUsersCountry() } // function changeDiacritics() {
// let string = 'leščać'
async function getUsersCountry() { // string = string.split('')
const key = await getPrivateInfo('user') // console.log(string)
const response = await fetch(`https://ipinfo.io?token=${key}`) // // const regexDiacritics = /č|ć|đ|š|ž/g
const data = await response.json() // for(let i = 0; i < string.length; i++)
const userCountryAcronym = data.country.toLowerCase() // if(diacriticLetters.test(string[i]))
const userCountry = getAcronymCountry(userCountryAcronym) // string[i] = diacriticsReplacement[string[i]]
const userCity = data.city // return string
const userRegion = data.region // }
const userLocation = data.loc
const userTimeZone = data.timezone
return [userCountry, userCountryAcronym, userCity, userRegion, userLocation, userTimeZone]
}
let weatherArrayToday
let weatherArrayTommorow
let weatherArray2Days
async function getWeather() {
city = changeDiacritics(userLocationInformationValue[3])
const key = getPrivateInfo('weather')
const response = await fetch(`https://cors-anywhere.herokuapp.com/https://api.weatherapi.com/v1/forecast.json?key=${key}&q=${city}&days=7`)
const data = await response.json()
weatherArrayToday = data.forecast.forecastday[0]
weatherArrayTommorow = data.forecast.forecastday[1]
weatherArray2Days = data.forecast.forecastday[2]
}
function changeDiacritics(string) {
const regexDiacritics = /č|ć|đ|š|ž/g
string = string.split('')
for(let i = 0; i < string.length; i++)
if(regexDiacritics.test(string[i]))
string[i] = diacriticsReplacement[string[i]]
return string
}
function getLanguageAcronym(target) { function getLanguageAcronym(target) {
for(let i = 0; i < language.length; i++) for(let i = 0; i < language.length; i++)
if(language[i] === target) if(language[i] === target)
return languageAcronyms[i] return languageAcronyms[i]
} }
function getCountryAcronym(target) { function getCountryAcronym(target) {
for(let i = 0; i < countries.length; i++) for(let i = 0; i < countries.length; i++)
if(countries[i] === target) if(countries[i] === target)
return countryAcronyms[i] return countryAcronyms[i]
} }
function getAcronymCountry(acronym) { function getAcronymCountry(acronym) {
for(let i = 0; i < countries.length; i++) for(let i = 0; i < countries.length; i++)
if(countryAcronyms[i] === acronym) if(countryAcronyms[i] === acronym)
@ -123,43 +312,6 @@ function getAcronymLanguage(acronym) {
return language[i] return language[i]
} }
function updateWeather() {
let header = document.querySelectorAll('.weather-main-header')[0]
header.children[0].src = weatherArrayToday.day.condition.icon
header.children[1].innerHTML = userLocationInformationValue[3]
header.children[2].innerHTML = `${Math.round(weatherArrayToday.day.avgtemp_c)}°C`
let weatherDate = new Date(weatherArrayToday.date)
let tommorowNumber = weatherDate.getDay()
let dayAfterTomorrow = weatherDate.getDay()
if(tommorowNumber == 6) tommorowNumber = tommorowNumber - 7
if(dayAfterTomorrow == 5 || dayAfterTomorrow == 6) dayAfterTomorrow = dayAfterTomorrow - 7
let dayAcronymTommorow = daysAcronyms[tommorowNumber + 1]
let dayAcronymIn2Days = daysAcronyms[dayAfterTomorrow + 2]
let mainWeatherContent = document.querySelectorAll('.weather-3-days')[0]
mainWeatherContent.children[0].firstElementChild.innerHTML = 'Today'
mainWeatherContent.children[1].firstElementChild.innerHTML = dayAcronymTommorow
mainWeatherContent.children[2].firstElementChild.innerHTML = dayAcronymIn2Days
mainWeatherContent.children[0].children[1].firstElementChild.src = weatherArrayToday.day.condition.icon
mainWeatherContent.children[1].children[1].firstElementChild.src = weatherArrayTommorow.day.condition.icon
mainWeatherContent.children[2].children[1].firstElementChild.src = weatherArray2Days.day.condition.icon
mainWeatherContent.children[0].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[1].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[2].children[2].firstElementChild.src = 'http://cdn.weatherapi.com/weather/64x64/day/302.png'
mainWeatherContent.children[0].children[1].lastElementChild.innerHTML = `${weatherArrayToday.day.avgtemp_c}°C`
mainWeatherContent.children[1].children[1].lastElementChild.innerHTML = `${weatherArrayTommorow.day.avgtemp_c}°C`
mainWeatherContent.children[2].children[1].lastElementChild.innerHTML = `${weatherArray2Days.day.avgtemp_c}°C`
mainWeatherContent.children[0].children[2].lastElementChild.innerHTML = `${weatherArrayToday.day.daily_chance_of_rain}%`
mainWeatherContent.children[1].children[2].lastElementChild.innerHTML = `${weatherArrayTommorow.day.daily_chance_of_rain}%`
mainWeatherContent.children[2].children[2].lastElementChild.innerHTML = `${weatherArray2Days.day.daily_chance_of_rain}%`
}
function changeTemperatureUnit(element) { function changeTemperatureUnit(element) {
const unit = element.innerHTML const unit = element.innerHTML
@ -206,9 +358,6 @@ function changeTemperatureUnit(element) {
document.querySelectorAll('.weather-article .active')[0].classList.remove('active') document.querySelectorAll('.weather-article .active')[0].classList.remove('active')
element.classList.add('active') element.classList.add('active')
} }
function removeCharactersInString(string, frontNumber, backNumber) { return string.slice(frontNumber, backNumber)}
function celsiusToFahrenheit(number) { return number * 9/5 + 32 } function celsiusToFahrenheit(number) { return number * 9/5 + 32 }
function celsiusToKelvin(number) { return Number(number) + 273 } function celsiusToKelvin(number) { return Number(number) + 273 }
function kelvinToFahrenheit(number) { return (number - 273) * 9/5 + 32 } function kelvinToFahrenheit(number) { return (number - 273) * 9/5 + 32 }
@ -216,12 +365,11 @@ function kelvinToCelsius(number) { return number - 273 }
function fahrenheitToCelsius(number) { return (number - 32) * 5/9 } function fahrenheitToCelsius(number) { return (number - 32) * 5/9 }
function fahrenheitToKelvin(number) { return (number - 32) * 5/9 + 273 } function fahrenheitToKelvin(number) { return (number - 32) * 5/9 + 273 }
/* HEADLINES */ /* HEADLINES */
async function headlines() { async function headlines() {
// await getWeather() // await weather.getWeather()
// updateWeather() // weather.updateWeather()
sidebarCategorySelect(document.querySelector('.fa-newspaper').parentElement) sidebarCategorySelect(document.querySelector('.fa-newspaper').parentElement)
} }
@ -231,22 +379,23 @@ async function headlines() {
if(window.location.search.match(regularExpressions.url.query) === null) return openLinks(filePath.headlines) if(window.location.search.match(regularExpressions.url.query) === null) return openLinks(filePath.headlines)
addDisableSideElements() addDisableSideElements()
console.log(extra === undefined) // console.log(extra === undefined)
let locationSearch
if(extra === undefined) { if(extra === undefined) {
searchInputValue = window.location.search.match(regularExpressions.url.query)[0].slice(3, -1) let searchInputValue = window.location.search.match(regularExpressions.url.query)[0].slice(3, -1)
mainSearchInput.value = addCharacterBetweenSpaceInString(searchInputValue, '+', ' ') mainSearchInput.value = addCharacterBetweenSpaceInString(searchInputValue, '+', ' ')
updateSearchBox(mainSearchInput.value.trim()) searchBox.update(mainSearchInput.value.trim())
} else { } else {
console.log(createUrlExtraOptions()) let extraOptionsUrl = createUrlExtraOptions()
let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML)
historyPushState(websiteURL, extraOptionsUrl, selectedCountryAcronym, backgroundColor)
} }
hideSuggestWords() hideSuggestWords()
suggestWords() suggest.suggest()
/* Search news articles */ /* Search news articles */
} }
function newSearch(extra) { function newSearch(extra) {
if(extra !== undefined) { if(extra !== undefined) {
@ -268,48 +417,25 @@ async function headlines() {
} }
function createUrlExtraOptions(type) { function createUrlExtraOptions() {
let hasWordsV = hasWords.value let url
let exactPhraseV = exactPhrase.value let exactPhraseV = exactPhrase.value.trim()
let excludeWordsV = excludeWords.value let hasWordsV = hasWords.value.trim()
let excludeWordsV = excludeWords.value.trim()
if(exactPhraseV.length !== 0 && hasWordsV.length === 0 && excludeWordsV.length === 0) return`"${exactPhraseV}"` if(exactPhraseV.length !== 0 && hasWordsV.length === 0 && excludeWordsV.length === 0) url = `"${exactPhraseV.trim()}"`
else if(hasWordsV.length !== 0 && exactPhraseV.length === 0 && excludeWordsV.length === 0) return devideStringIntoWords(hasWordsV,'HW') else if(hasWordsV.length !== 0 && exactPhraseV.length === 0 && excludeWordsV.length === 0) url = addCharacterBetweenSpaceInString(hasWordsV, ' ', '+')
else if(excludeWordsV.length !== 0 && exactPhraseV.length === 0 && hasWordsV.length === 0) return devideStringIntoWords(excludeWordsV,'EW') else if(excludeWordsV.length !== 0 && exactPhraseV.length === 0 && hasWordsV.length === 0) url = addCharacterBetweenSpaceInString(excludeWordsV, ' ', '-')
else if (exactPhraseV.length !== 0 && hasWordsV.length !== 0 && excludeWordsV.length === 0) return `"${exactPhraseV}"+${devideStringIntoWords(hasWordsV,'HW')}` // else if (exactPhraseV.length !== 0 && hasWordsV.length !== 0 && excludeWordsV.length === 0) return `"${exactPhraseV}"+${devideStringIntoWords(hasWordsV,'HW')}`
else if(hasWordsV.length !== 0 && excludeWordsV.length !== 0 && exactPhraseV.length === 0) return `${devideStringIntoWords(hasWordsV,'HW')} ${devideStringIntoWords(excludeWordsV,'EW')}` // else if(hasWordsV.length !== 0 && excludeWordsV.length !== 0 && exactPhraseV.length === 0) return `${devideStringIntoWords(hasWordsV,'HW')} ${devideStringIntoWords(excludeWordsV,'EW')}`
else if(exactPhraseV.length !== 0 && excludeWordsV.length !== 0 && hasWordsV.length === 0) return `"${exactPhraseV}" ${devideStringIntoWords(excludeWordsV,'EW')}` // else if(exactPhraseV.length !== 0 && excludeWordsV.length !== 0 && hasWordsV.length === 0) return `"${exactPhraseV}" ${devideStringIntoWords(excludeWordsV,'EW')}`
else if(exactPhraseV.length !== 0 && excludeWordsV.length !== 0 && hasWordsV.length !== 0) return `"${exactPhraseV}" ${devideStringIntoWords(hasWordsV,'HW')} ${devideStringIntoWords(excludeWordsV,'EW')}` // else if(exactPhraseV.length !== 0 && excludeWordsV.length !== 0 && hasWordsV.length !== 0) return `"${exactPhraseV}" ${devideStringIntoWords(hasWordsV,'HW')} ${devideStringIntoWords(excludeWordsV,'EW')}`
return url
// historyPushState(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(mainSearchInput.value, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`)
} }
function devideStringIntoWords(string, keyword){ function devideStringIntoWords(string, keyword){
if(keyword === 'HW') return `+${string.replace(/\s/g,' +')}` if(keyword === 'HW') return `+${string.replace(/\s/g, ' +')}`
if(keyword === 'EW') return `-${string.replace(/\s/g,' -')}` if(keyword === 'EW') return `-${string.replace(/\s/g, ' -')}`
}
function mobileVersionNavigationBar() {
mainSearchIcon.classList.add('disable')
mainSearchBackLeftIcon.classList.remove('disable')
navigationBarLeft.classList.add('disable')
navigationBarRight.classList.add('disable')
navigationBarMiddle.style.gridColumn = '1/4'
mainSearchFigure.style.gridColumn = '1/2'
mainSearchBackLeftTooltiptext.classList.remove('disable')
mainSearchInput.style.display = 'grid'
extOptIcon.style.display = 'flex'
mainSearchInput.focus()
sideBarContent.style.left = '-100%'
sideMenuCounter = 1
}
function desktopVersionNavigationBar() {
mainSearchIcon.classList.remove('disable')
mainSearchBackLeftIcon.classList.add('disable')
navigationBarLeft.classList.remove('disable')
navigationBarRight.classList.remove('disable')
navigationBarMiddle.style.gridColumn = '2/3'
mainSearchFigure.style.gridColumn = '3/4'
mainSearchBackLeftTooltiptext.classList.add('disable')
mainSearchInput.style.display = 'none'
extOptIcon.style.display = 'none'
} }
/* FOR YOU */ /* FOR YOU */
@ -346,40 +472,16 @@ function settings() {
function about() { function about() {
} }
const regularExpressions = {
url : {
query : /[\?|\&]+[q]+[=].*?[&]/g,
country : /[\?|\&]+[c]+[o]+[u]+[=].{2}/g,
backgroundColor : /[\&]+[b]+[g]+[=].*/g
},
string : {
symbols : /[@_!#$%^&*()<>?/|}{~:]/g
}
}
function sidebarCategorySelect(selectedElement) {
if(selectedElement.classList.contains('side-menu-active')) return
selectedElement.classList.add('side-menu-active')
selectedElement.firstElementChild.classList.add('side-menu-active')
/* Search news articles */
}
function removeActiveSidebarCategory() {
let oldSelectedElements = document.querySelectorAll('.side-menu-active')
for(let i = 0; i < oldSelectedElements.length; i++)
oldSelectedElements[i].classList.remove('side-menu-active')
}
mainSearchInput.onfocus = () => { mainSearchInput.onfocus = () => {
if(!extraSearchOptions.classList.contains('disable')) return manageExtraSearchOptions() if(!extraSearchOptions.classList.contains('disable')) return manageExtraSearchOptions()
else if(mainSearchInput.value.length !== 0) showSuggestWords() else if(mainSearchInput.value.length !== 0) showSuggestWords()
manageSuggestWords() suggest.manageSuggestWords()
} }
mainSearchInput.oninput = () => { mainSearchInput.oninput = () => {
if(mainSearchInput.value.length === 0) return hideSuggestWords() if(mainSearchInput.value.length === 0) return hideSuggestWords()
else if(suggestMainInput.classList.contains('disable')) showSuggestWords() else if(suggestMainInput.classList.contains('disable')) showSuggestWords()
manageSuggestWords() suggest.manageSuggestWords()
} }
let place = 0 let place = 0
mainSearchInput.onkeyup = (e) => { mainSearchInput.onkeyup = (e) => {
@ -387,8 +489,10 @@ mainSearchInput.onkeyup = (e) => {
let suggestDivActiveKey = suggestMainInput.querySelectorAll('div.active.key') let suggestDivActiveKey = suggestMainInput.querySelectorAll('div.active.key')
if(e.keyCode === 13) { if(e.keyCode === 13) {
if(suggestDivActiveKey.length === 1) historyPushState(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(suggestDivActiveKey[0].firstElementChild.innerHTML, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`) if(suggestDivActiveKey.length === 1)//historyPushState
else historyPushState(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(mainSearchInput.value, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`) console.log(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(suggestDivActiveKey[0].firstElementChild.innerHTML, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`)
else //historyPushState
console.log(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(mainSearchInput.value, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`)
mainSearch() mainSearch()
// if(!suggestMainInput.classList.contains('disable')) hideSuggestWords() // if(!suggestMainInput.classList.contains('disable')) hideSuggestWords()
// return mainSearch() // return mainSearch()
@ -415,67 +519,6 @@ mainSearchInput.onkeyup = (e) => {
} }
} }
let mouseSuggestHover = false
function mouseSuggestHoverChange(parameter) {
mouseSuggestHover = parameter
}
let searchSuggestOptionsArray = []
let resultArray = []
let searchSuggestOptionSelectedWord
const maxNumberSuggestWords = 6
async function fetchWords(input) {
const res = await fetch(`https://api.datamuse.com/sug?s=${input}`)
return words = await res.json()
}
async function manageSuggestWords() {
let suggestWordsArray = await fetchWords(mainSearchInput.value)
if(suggestWordsArray.length === 0) return hideSuggestWords()
if(suggestWordsArray.length > 6) suggestWordsArray = removeCharactersInString(suggestWordsArray, 4, suggestWordsArray.length)
suggestBox(suggestWordsArray)
for(let i = 0; i < suggestMainInput.getElementsByTagName('div').length; i++) {
suggestMainInput.getElementsByTagName('div')[i].onmouseover = () => {
place = i
if(suggestMainInput.querySelectorAll('div.active').length === 1) suggestMainInput.querySelectorAll('div.active')[0].classList.remove('active','key')
suggestMainInput.getElementsByTagName('div')[i].classList.add('active')
}
suggestMainInput.getElementsByTagName('div')[i].onmouseleave = () => { suggestMainInput.getElementsByTagName('div')[i].classList.remove('active','key') }
}
}
const suggestBox = words => {
let wordBoxes = words.map(word => `<div class="grid pointer" onclick="selectSuggestedSearchOption(this.firstElementChild)">
<span>${word.word}</span>
</div>`).join('')
const html = `<hr class="absolute">${wordBoxes}`
suggestMainInput.innerHTML = html
}
function removeAllSuggestWordBoxes() {
let numberOfBoxes = suggestMainInput.querySelectorAll('div').length
for(let i = 0; i < numberOfBoxes; i++)
suggestMainInput.querySelector('div').remove()
}
function selectSuggestedSearchOption(element) {
removeActiveSidebarCategory()
hideSuggestWords()
let elementInnerHTML = addCharacterBetweenSpaceInString(element.innerHTML, ' ', '+')
let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML)
historyPushState(location.origin + location.pathname, `?q=${elementInnerHTML}&`, `cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`)
mainSearch()
}
function addCharacterBetweenSpaceInString(word, replace, character) {
word = word.trim().replace(/\s\s+/g, ' ')
if(replace === ' ') return word.replace(/\s/g, character)
else if(replace === '+') return word.replace(/\+/g, character)
}
function updateCountrySelect(country) { function updateCountrySelect(country) {
selectedCountry.innerHTML = country selectedCountry.innerHTML = country
if(location.pathname.includes('search')) string = '&' if(location.pathname.includes('search')) string = '&'
@ -539,15 +582,12 @@ function generateCountries() {
for(let i = 0; i < newCountriesArray.length; i++) for(let i = 0; i < newCountriesArray.length; i++)
createElementsForCountry(newCountriesArray[i], 'not-active', 'normal') createElementsForCountry(newCountriesArray[i], 'not-active', 'normal')
} }
function removeDuplicates(array) { array.splice(0, array.length, ...(new Set(array))) }
function removeSelectedValuesFromArray(array, target) { return target.filter(val => !array.includes(val)) }
function checkForDoubleCountriesSuggest(country) { function checkForDoubleCountriesSuggest(country) {
for(let i = 0; i < suggestCountriesArray.length; i++) for(let i = 0; i < suggestCountriesArray.length; i++)
if(suggestCountriesArray[i] === country) if(suggestCountriesArray[i] === country)
return true return true
return false return false
} }
function createElementsForCountry(country, activeCountry, location) { function createElementsForCountry(country, activeCountry, location) {
let aside = document.createElement('aside') let aside = document.createElement('aside')
aside.classList.add('radio-button-container','grid') aside.classList.add('radio-button-container','grid')
@ -584,7 +624,6 @@ function changeSelectedCountry(element) {
aside.firstElementChild.firstElementChild.classList.add('active') aside.firstElementChild.firstElementChild.classList.add('active')
aside.firstElementChild.firstElementChild.firstElementChild.classList.add('active') aside.firstElementChild.firstElementChild.firstElementChild.classList.add('active')
} }
let lastSelectedCountry = null let lastSelectedCountry = null
let selectedC = null let selectedC = null
let newCountriesArray = [] let newCountriesArray = []
@ -677,7 +716,7 @@ hasWords.oninput = () => { inputExtraSearchOptionChange() }
excludeWords.oninput = () => { inputExtraSearchOptionChange() } excludeWords.oninput = () => { inputExtraSearchOptionChange() }
function inputExtraSearchOptionChange() { function inputExtraSearchOptionChange() {
if(hasWords.value.length === 0 && exactPhrase.value.length === 0 && excludeWords.value.length === 0){ if(hasWords.value.length === 0 && exactPhrase.value.length === 0 && excludeWords.value.length === 0) {
submitButton.disabled = true submitButton.disabled = true
submitButton.classList.add('ext-opt-submit-disable') submitButton.classList.add('ext-opt-submit-disable')
submitButton.classList.remove('ext-opt-submit') submitButton.classList.remove('ext-opt-submit')
@ -688,86 +727,10 @@ function inputExtraSearchOptionChange() {
} }
} }
function saveSearchWord(element) {
if(element.firstElementChild.classList.contains('yellow-color')) {
element.firstElementChild.classList.remove('yellow-color', 'fa')
element.firstElementChild.classList.add('fal')
}
else {
element.firstElementChild.classList.add('yellow-color', 'fa')
element.firstElementChild.classList.remove('fal')
}
}
function followSearchWord(element) {
if(element.firstElementChild.classList.contains('blue-color')) {
element.innerHTML = ' <i class="fa fa-star"></i> Follow'
element.firstElementChild.classList.remove('blue-color')
element.classList.remove('blue-color')
} else {
element.innerHTML = ' <i class="fa fa-star"></i> Following'
element.firstElementChild.classList.add('blue-color')
element.classList.add('blue-color')
}
}
async function suggestWords() {
let fetchArray = []
let suggestWordsArray = []
let input = mainSearchInput.value.split(' ')
let n = 0
while(suggestWordsArray.length < 16) {
fetchArray = await fetchWords(input[n])
for(let i = 0; i < fetchArray.length; i++)
if(suggestWordsArray.indexOf(fetchArray[i].word) === -1 && fetchArray[i].word !== mainSearchInput.value) suggestWordsArray.push(fetchArray[i].word)
input[n] = removeCharactersInString(input[n], 0, -1)
if(input.length === 0) break
}
generateSuggestWords(suggestWordsArray)
removeDisableSideElements()
}
let moreSuggestWordsArray = []
function generateSuggestWords(array) {
let section = document.querySelector('article.suggested-words.aside section')
section.innerHTML = ''
for(let i = 0; i < array.length; i++) {
let div = document.createElement('div')
div.innerHTML = array[i]
div.classList.add('search-box')
div.onclick = () => selectSuggestedSearchOption(div)
section.appendChild(div)
}
}
async function updateSearchBox(query) {
let i = 0
let images = await fetchImages(query)
if(images.hits.length === 0) {
images = await fetchImages('nature')
i = Math.round(Math.random() * images.hits.length)
}
let searchBox = document.querySelector('article.search.aside')
searchBox.firstElementChild.firstElementChild.innerHTML = capitalizeString(mainSearchInput.value)
searchBox.firstElementChild.querySelector('figure img').src = images.hits[i].webformatURL
searchBox.firstElementChild.querySelector('figure img').classList.remove('disable')
}
async function fetchImages(query) {
const key = await getPrivateInfo('images')
const response = await fetch(`https://pixabay.com/api/?key=${key}&q=${query}&image_type=photo`)
const image = await response.json()
return image
}
function addDisableSideElements() { mainAsideContent.querySelectorAll('article').forEach(article => article.classList.add('disable')) } function addDisableSideElements() { mainAsideContent.querySelectorAll('article').forEach(article => article.classList.add('disable')) }
function removeDisableSideElements() { mainAsideContent.querySelectorAll('article.disable').forEach(article => article.classList.remove('disable')) } function removeDisableSideElements() { mainAsideContent.querySelectorAll('article.disable').forEach(article => article.classList.remove('disable')) }
function saveNews(element) { function saveNews(element) {
if(element.lastElementChild.textContent === 'Save') { if(element.lastElementChild.textContent === 'Save') {
element.firstElementChild.classList.remove('far') element.firstElementChild.classList.remove('far')
element.firstElementChild.classList.add('fas') element.firstElementChild.classList.add('fas')
@ -793,38 +756,23 @@ function followNews(element) {
//PHP //PHP
} }
function capitalizeString(string) { return string.charAt(0).toUpperCase() + string.slice(1) }
/* API */ /* API */
// fetchNewsArticles() // fetchNewsArticles()
// async function fetchNewsArticles() { async function fetchNewsArticles() {
const key = await php.info('news')
const response = await fetch(`http://cors-anywhere.herokuapp.com/http://newsapi.org/v2/everything?q=-velenje america "coronavirus"&sortBy=popularity&apiKey=${key}`).catch(() => {
// noArticlesFoundNotification()
})
// const response = await fetch(newsApiLoadUrl).catch(err => {
// noArticlesFoundNotification()
// })
const json = await response.json()
const articles = await json.articles
// const response = await fetch(`http://cors-anywhere.herokuapp.com/`).catch(() => { console.log(articles, `http://cors-anywhere.herokuapp.com/http://newsapi.org/v2/everything?q=-velenje america "coronavirus"&sortBy=popularity&apiKey=${key}`)
// noArticlesFoundNotification()
// })
// // const response = await fetch(newsApiLoadUrl).catch(err => {
// // noArticlesFoundNotification()
// // })
// const json = await response.json()
// const articles = await json.articles
// console.log(articles)
// }
function sayHello (name, age) {
// console.log(name)
// console.log(age)
// console.log(this)
} }
sayHello.call('This', 'Nik Topler', 18)
const information = { const information = {
firstName : 'Nik', firstName : 'Nik',
@ -833,8 +781,18 @@ const information = {
let { firstName } = information let { firstName } = information
// console.log(firstName) // console.log(firstName)
function createFormData(word) {
let newArray = [1 ,2, 123, 23, 4, 3.123, 12, 93, 0] let formData = new FormData
let result = newArray.filter( val => { return val % 2 === 1} ) formData.append(word, '')
// console.log(result) return formData
}
function capitalizeString(string) { return string.charAt(0).toUpperCase() + string.slice(1) }
function removeCharactersInString(string, frontNumber, backNumber) { return string.slice(frontNumber, backNumber)}
function removeDuplicates(array) { array.splice(0, array.length, ...(new Set(array))) }
function removeSelectedValuesFromArray(array, target) { return target.filter(val => !array.includes(val)) }
function addCharacterBetweenSpaceInString(word, replace, character) {
word = word.trim().replace(/\s\s+/g, ' ')
if(replace === ' ') return word.replace(/\s/g, character)
else if(replace === '+') return word.replace(/\+/g, character)
}

View file

@ -91,7 +91,7 @@ function hideSuggestWords() {
mainSearchInput.style.borderBottomLeftRadius = '6px' mainSearchInput.style.borderBottomLeftRadius = '6px'
mainSearchInput.style.borderBottomRightRadius = '6px' mainSearchInput.style.borderBottomRightRadius = '6px'
suggestMainInput.classList.add('disable') suggestMainInput.classList.add('disable')
removeAllSuggestWordBoxes() suggest.removeAllSuggestWordBoxes()
} }
function hideSelectCountry() { function hideSelectCountry() {
@ -127,4 +127,16 @@ function resetExtraSearchOptions() {
indexTimeLabel.innerHTML = 'Anytime' indexTimeLabel.innerHTML = 'Anytime'
for(let i = 0; i < 3; i++) for(let i = 0; i < 3; i++)
document.querySelectorAll('.extra-search-options > div > input')[i].value = '' document.querySelectorAll('.extra-search-options > div > input')[i].value = ''
} }
function sidebarCategorySelect(selectedElement) {
if(selectedElement.classList.contains('side-menu-active')) return
selectedElement.classList.add('side-menu-active')
selectedElement.firstElementChild.classList.add('side-menu-active')
/* Search news articles */
}
function removeActiveSidebarCategory() {
let oldSelectedElements = document.querySelectorAll('.side-menu-active')
for(let i = 0; i < oldSelectedElements.length; i++)
oldSelectedElements[i].classList.remove('side-menu-active')
}

View file

@ -1,69 +1,69 @@
// /** Google */ // /** Google */
// function onSignIn(googleUser) { function onSignIn(googleUser) {
// console.log('Logged in as: ' + JSON.stringify(googleUser.getBasicProfile())) console.log('Logged in as: ' + JSON.stringify(googleUser.getBasicProfile()))
// let profile = googleUser.getBasicProfile() let profile = googleUser.getBasicProfile()
// // console.log('ID: ' + profile.getId()) // Do not send to your backend! Use an ID token instead. // console.log('ID: ' + profile.getId()) // Do not send to your backend! Use an ID token instead.
// // console.log('Name: ' + profile.getName()) // console.log('Name: ' + profile.getName())
// // console.log('Image URL: ' + profile.getImageUrl()) // console.log('Image URL: ' + profile.getImageUrl())
// // console.log('Email: ' + profile.getEmail()) // console.log('Email: ' + profile.getEmail())
// } }
// function onFailure(error) { function onFailure(error) {
// console.log(error) console.log(error)
// } }
// var googleUser = {}; var googleUser = {};
// var startApp = function() { var startApp = function() {
// gapi.load('auth2', function(){ gapi.load('auth2', function(){
// auth2 = gapi.auth2.init({ auth2 = gapi.auth2.init({
// client_id: '571327981909-r5sunoo4l6uqducmqm7vjon1af0tmso1.apps.googleusercontent.com', client_id: '571327981909-r5sunoo4l6uqducmqm7vjon1af0tmso1.apps.googleusercontent.com',
// cookiepolicy: 'single_host_origin', cookiepolicy: 'single_host_origin',
// }); });
// attachSignin(document.getElementById('googleBtn')); attachSignin(document.getElementById('googleBtn'));
// }); });
// }; };
// function attachSignin(element) { function attachSignin(element) {
// auth2.attachClickHandler(element, {}, auth2.attachClickHandler(element, {},
// (googleUser) =>{ (googleUser) =>{
// console.log(googleUser.getBasicProfile())}, console.log(googleUser.getBasicProfile())},
// (error) => { (error) => {
// // alert(JSON.stringify(error, undefined, 2)); // alert(JSON.stringify(error, undefined, 2));
// }); });
// } }
// startApp() startApp()
// function signOut() { function signOut() {
// var auth2 = gapi.auth2.getAuthInstance() var auth2 = gapi.auth2.getAuthInstance()
// auth2.signOut().then(function () { auth2.signOut().then(function () {
// console.log('User signed out.') console.log('User signed out.')
// }) })
// } }
// /** GitHub */ /** GitHub */
// document.getElementById('github-button').addEventListener('click', () => { document.getElementById('github-button').addEventListener('click', () => {
// // Initialize with your OAuth.io app public key // Initialize with your OAuth.io app public key
// OAuth.initialize('_nPRfzTNGplyDCW0vD9dmek5QAg'); OAuth.initialize('_nPRfzTNGplyDCW0vD9dmek5QAg');
// // Use popup for oauth // Use popup for oauth
// // Alternative is redirect // Alternative is redirect
// OAuth.popup('github').then(github => { OAuth.popup('github').then(github => {
// console.log('github:', github); console.log('github:', github);
// // Retrieves user data from oauth provider // Retrieves user data from oauth provider
// // Prompts 'welcome' message with User's email on successful login // Prompts 'welcome' message with User's email on successful login
// // #me() is a convenient method to retrieve user data without requiring you // #me() is a convenient method to retrieve user data without requiring you
// // to know which OAuth provider url to call // to know which OAuth provider url to call
// github.me().then(data => { github.me().then(data => {
// console.log('me data:', data); console.log('me data:', data);
// // alert('GitHub says your email is:' + data.email + ".\nView browser 'Console Log' for more details"); // alert('GitHub says your email is:' + data.email + ".\nView browser 'Console Log' for more details");
// }); });
// // Retrieves user data from OAuth provider by using #get() and // Retrieves user data from OAuth provider by using #get() and
// // OAuth provider url // OAuth provider url
// github.get('/user').then(data => { github.get('/user').then(data => {
// console.log('self data:', data); console.log('self data:', data);
// }) })
// }); });
// }) })
// /** FaceBook */ // /** FaceBook */

View file

@ -14,6 +14,7 @@
<script src="../JS/variables.js" defer></script> <script src="../JS/variables.js" defer></script>
<script src="../JS/show.js" defer></script> <script src="../JS/show.js" defer></script>
<script src="../JS/main.js" defer></script> <script src="../JS/main.js" defer></script>
<script src="..JS/diacritics.js" defer></script>
<script src="../JS/sign.js" defer></script> <script src="../JS/sign.js" defer></script>
<script src="https://kit.fontawesome.com/89923351fd.js" crossorigin="anonymous" defer></script> <script src="https://kit.fontawesome.com/89923351fd.js" crossorigin="anonymous" defer></script>

View file

@ -68,7 +68,7 @@
onclick="mainSearch('extra')">Search</button> onclick="mainSearch('extra')">Search</button>
</footer> </footer>
</aside> </aside>
<aside class="search-words absolute disable" id="search-words" onmouseover="mouseSuggestHoverChange(true)" onmouseout="mouseSuggestHoverChange(false)"> <aside class="search-words absolute disable" id="search-words" onmouseover="suggest.mouseSuggestHoverChange(true)" onmouseout="suggest.mouseSuggestHoverChange(false)">
<hr class="absolute"> <hr class="absolute">
</aside> </aside>
</div> </div>

7
include/session.inc.php Normal file
View file

@ -0,0 +1,7 @@
<?php session_start();
echo $_SERVER['REQUEST_URI'];
if(isset($_SESSION['user_id'])) {
}

View file

@ -5,11 +5,7 @@ $dotend = Dotenv::createImmutable(__DIR__);
$dotend->load(); $dotend->load();
if($_SERVER['REQUEST_METHOD'] !== 'POST') return; if($_SERVER['REQUEST_METHOD'] !== 'POST') return;
if(isset($_POST['images'])) return image(); if(isset($_POST['images'])) echo $_ENV['IMAGE_API_KEY'];
if(isset($_POST['user'])) return user(); else if(isset($_POST['user'])) echo $_ENV['USER_LOCATION_API_KEY'];
if(isset($_POST['weather'])) return weather(); else if(isset($_POST['weather'])) echo $_ENV['WEATHER_API_KEY'];
else if(isset($_POST['news'])) echo $_ENV['NEWS_API_KEY'];
function image() { echo $_ENV['IMAGE_API_KEY']; }
function user() { echo $_ENV['USER_LOCATION_API_KEY']; }
function weather() { echo $_ENV['WEATHER_API_KEY']; }

View file

@ -12,8 +12,9 @@
<link rel="stylesheet" href="CSS/index.css"> <link rel="stylesheet" href="CSS/index.css">
<script src="JS/variables.js" defer></script> <script src="JS/variables.js" defer></script>
<script src="JS/show.js" defer></script> <script src="JS/diacritics.js" defer></script>
<script src="JS/main.js" defer></script> <script src="JS/main.js" defer></script>
<script src="JS/show.js" defer></script>
<script src="JS/sign.js" defer></script> <script src="JS/sign.js" defer></script>
<script src="https://kit.fontawesome.com/89923351fd.js" crossorigin="anonymous" defer></script> <script src="https://kit.fontawesome.com/89923351fd.js" crossorigin="anonymous" defer></script>