From 2dd3a0f0b72e8766cb229c6159169760e3e7ef8f Mon Sep 17 00:00:00 2001 From: Nik Topler Date: Wed, 16 Sep 2020 10:00:31 +0200 Subject: [PATCH] Cleaned the code --- JS/diacritics.js | 305 +++++++++++++++++ JS/main.js | 654 +++++++++++++++++-------------------- JS/show.js | 16 +- JS/sign.js | 118 +++---- add-ons/head.php | 1 + add-ons/navigation-bar.php | 2 +- include/session.inc.php | 7 + privateInfo.php | 12 +- search.php | 3 +- 9 files changed, 699 insertions(+), 419 deletions(-) create mode 100644 JS/diacritics.js create mode 100644 include/session.inc.php diff --git a/JS/diacritics.js b/JS/diacritics.js new file mode 100644 index 0000000..b8ad9de --- /dev/null +++ b/JS/diacritics.js @@ -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 }) } diff --git a/JS/main.js b/JS/main.js index ada060a..54b3deb 100644 --- a/JS/main.js +++ b/JS/main.js @@ -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 => `
+ ${word.word} +
`).join('') + const html = `
${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 () => { - await getuserLocationInformationValue() + await user.location() removeActiveSidebarCategory() if (window.location.pathname.includes('headlines')) headlines() else if (window.location.pathname.includes('for-you')) forYou() @@ -20,20 +247,21 @@ window.onload = async () => { // changeBackgroundColor() let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML) - if(!window.location.search.match(regularExpressions.url.country)) historyPushState(window.location.origin + window.location.pathname, '', `?cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`) - else { - urlCountryAcronym = window.location.search.match(regularExpressions.url.country)[0].slice(5, 7) - if(getAcronymCountry(urlCountryAcronym) === undefined) return openLinks(filePath.headlines) - urlCountry = getAcronymCountry(urlCountryAcronym) - updateCountrySelect(urlCountry) - } + // if(!window.location.search.match(regularExpressions.url.country)) + + //historyPushState(window.location.origin + window.location.pathname, '', `?cou=${selectedCountryAcronym}&`,`bg=${backgroundColor}`) + // else { + // urlCountryAcronym = window.location.search.match(regularExpressions.url.country)[0].slice(5, 7) + // if(getAcronymCountry(urlCountryAcronym) === undefined) return openLinks(filePath.headlines) + // urlCountry = getAcronymCountry(urlCountryAcronym) + // updateCountrySelect(urlCountry) + // } if(!window.location.search.match(regularExpressions.url.query)) return let query = location.search.match(regularExpressions.url.query)[0] query = removeCharactersInString(query, 3, query.length - 1) /* Search news */ - } window.onclick = (e) => { @@ -45,73 +273,34 @@ window.onclick = (e) => { 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 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) } -let userLocationInformationValue -async function getuserLocationInformationValue() { userLocationInformationValue = await getUsersCountry() } - -async function getUsersCountry() { - const key = await getPrivateInfo('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] -} - -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 -} +// console.log(changeDiacritics()) +// function changeDiacritics() { +// let string = 'leščać' +// string = string.split('') +// console.log(string) +// // const regexDiacritics = /č|ć|đ|š|ž/g +// for(let i = 0; i < string.length; i++) +// if(diacriticLetters.test(string[i])) +// string[i] = diacriticsReplacement[string[i]] +// return string +// } function getLanguageAcronym(target) { for(let i = 0; i < language.length; i++) if(language[i] === target) return languageAcronyms[i] } - function getCountryAcronym(target) { for(let i = 0; i < countries.length; i++) if(countries[i] === target) return countryAcronyms[i] } - function getAcronymCountry(acronym) { for(let i = 0; i < countries.length; i++) if(countryAcronyms[i] === acronym) @@ -123,43 +312,6 @@ function getAcronymLanguage(acronym) { 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) { const unit = element.innerHTML @@ -206,9 +358,6 @@ function changeTemperatureUnit(element) { document.querySelectorAll('.weather-article .active')[0].classList.remove('active') element.classList.add('active') } - -function removeCharactersInString(string, frontNumber, backNumber) { return string.slice(frontNumber, backNumber)} - function celsiusToFahrenheit(number) { return number * 9/5 + 32 } function celsiusToKelvin(number) { return Number(number) + 273 } 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 fahrenheitToKelvin(number) { return (number - 32) * 5/9 + 273 } - /* HEADLINES */ async function headlines() { - // await getWeather() - // updateWeather() + // await weather.getWeather() + // weather.updateWeather() 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) addDisableSideElements() - console.log(extra === undefined) - let locationSearch + // console.log(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, '+', ' ') - updateSearchBox(mainSearchInput.value.trim()) + searchBox.update(mainSearchInput.value.trim()) } else { - console.log(createUrlExtraOptions()) + let extraOptionsUrl = createUrlExtraOptions() + let selectedCountryAcronym = getCountryAcronym(selectedCountry.innerHTML) + historyPushState(websiteURL, extraOptionsUrl, selectedCountryAcronym, backgroundColor) } hideSuggestWords() - suggestWords() + suggest.suggest() /* Search news articles */ } - + function newSearch(extra) { if(extra !== undefined) { @@ -268,48 +417,25 @@ async function headlines() { } - function createUrlExtraOptions(type) { - let hasWordsV = hasWords.value - let exactPhraseV = exactPhrase.value - let excludeWordsV = excludeWords.value + function createUrlExtraOptions() { + let url + let exactPhraseV = exactPhrase.value.trim() + let hasWordsV = hasWords.value.trim() + let excludeWordsV = excludeWords.value.trim() - if(exactPhraseV.length !== 0 && hasWordsV.length === 0 && excludeWordsV.length === 0) return`"${exactPhraseV}"` - else if(hasWordsV.length !== 0 && exactPhraseV.length === 0 && excludeWordsV.length === 0) return devideStringIntoWords(hasWordsV,'HW') - else if(excludeWordsV.length !== 0 && exactPhraseV.length === 0 && hasWordsV.length === 0) return devideStringIntoWords(excludeWordsV,'EW') - 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(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')}` + if(exactPhraseV.length !== 0 && hasWordsV.length === 0 && excludeWordsV.length === 0) url = `"${exactPhraseV.trim()}"` + 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) url = addCharacterBetweenSpaceInString(excludeWordsV, ' ', '-') + // 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(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')}` + return url + // historyPushState(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(mainSearchInput.value, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`) } function devideStringIntoWords(string, keyword){ - if(keyword === 'HW') 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' + if(keyword === 'HW') return `+${string.replace(/\s/g, ' +')}` + if(keyword === 'EW') return `-${string.replace(/\s/g, ' -')}` } /* FOR YOU */ @@ -346,40 +472,16 @@ function settings() { 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 = () => { if(!extraSearchOptions.classList.contains('disable')) return manageExtraSearchOptions() else if(mainSearchInput.value.length !== 0) showSuggestWords() - manageSuggestWords() + suggest.manageSuggestWords() } mainSearchInput.oninput = () => { if(mainSearchInput.value.length === 0) return hideSuggestWords() else if(suggestMainInput.classList.contains('disable')) showSuggestWords() - manageSuggestWords() + suggest.manageSuggestWords() } let place = 0 mainSearchInput.onkeyup = (e) => { @@ -387,8 +489,10 @@ mainSearchInput.onkeyup = (e) => { let suggestDivActiveKey = suggestMainInput.querySelectorAll('div.active.key') 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}`) - else historyPushState(location.origin + location.pathname, `?q=${addCharacterBetweenSpaceInString(mainSearchInput.value, ' ', '+')}&`, `cou=${getCountryAcronym(selectedCountry.innerHTML)}&`,`bg=${backgroundColor}`) + if(suggestDivActiveKey.length === 1)//historyPushState + 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() // if(!suggestMainInput.classList.contains('disable')) hideSuggestWords() // 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 => `
- ${word.word} -
`).join('') - const html = `
${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) { selectedCountry.innerHTML = country if(location.pathname.includes('search')) string = '&' @@ -539,15 +582,12 @@ function generateCountries() { for(let i = 0; i < newCountriesArray.length; i++) 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) { for(let i = 0; i < suggestCountriesArray.length; i++) if(suggestCountriesArray[i] === country) return true return false } - function createElementsForCountry(country, activeCountry, location) { let aside = document.createElement('aside') aside.classList.add('radio-button-container','grid') @@ -584,7 +624,6 @@ function changeSelectedCountry(element) { aside.firstElementChild.firstElementChild.classList.add('active') aside.firstElementChild.firstElementChild.firstElementChild.classList.add('active') } - let lastSelectedCountry = null let selectedC = null let newCountriesArray = [] @@ -677,7 +716,7 @@ hasWords.oninput = () => { inputExtraSearchOptionChange() } excludeWords.oninput = () => { 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.classList.add('ext-opt-submit-disable') 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 = ' Follow' - element.firstElementChild.classList.remove('blue-color') - element.classList.remove('blue-color') - } else { - element.innerHTML = ' 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 removeDisableSideElements() { mainAsideContent.querySelectorAll('article.disable').forEach(article => article.classList.remove('disable')) } function saveNews(element) { - if(element.lastElementChild.textContent === 'Save') { element.firstElementChild.classList.remove('far') element.firstElementChild.classList.add('fas') @@ -793,38 +756,23 @@ function followNews(element) { //PHP } -function capitalizeString(string) { return string.charAt(0).toUpperCase() + string.slice(1) } - /* API */ // 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(() => { -// 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) + console.log(articles, `http://cors-anywhere.herokuapp.com/http://newsapi.org/v2/everything?q=-velenje america "coronavirus"&sortBy=popularity&apiKey=${key}`) } -sayHello.call('This', 'Nik Topler', 18) const information = { firstName : 'Nik', @@ -833,8 +781,18 @@ const information = { let { firstName } = information // console.log(firstName) - -let newArray = [1 ,2, 123, 23, 4, 3.123, 12, 93, 0] -let result = newArray.filter( val => { return val % 2 === 1} ) -// console.log(result) +function createFormData(word) { + let formData = new FormData + formData.append(word, '') + 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) +} diff --git a/JS/show.js b/JS/show.js index 871fe85..5ef0331 100644 --- a/JS/show.js +++ b/JS/show.js @@ -91,7 +91,7 @@ function hideSuggestWords() { mainSearchInput.style.borderBottomLeftRadius = '6px' mainSearchInput.style.borderBottomRightRadius = '6px' suggestMainInput.classList.add('disable') - removeAllSuggestWordBoxes() + suggest.removeAllSuggestWordBoxes() } function hideSelectCountry() { @@ -127,4 +127,16 @@ function resetExtraSearchOptions() { indexTimeLabel.innerHTML = 'Anytime' for(let i = 0; i < 3; i++) document.querySelectorAll('.extra-search-options > div > input')[i].value = '' -} \ No newline at end of file +} + +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') +} diff --git a/JS/sign.js b/JS/sign.js index 5e87db5..1a19887 100644 --- a/JS/sign.js +++ b/JS/sign.js @@ -1,69 +1,69 @@ // /** Google */ -// function onSignIn(googleUser) { -// console.log('Logged in as: ' + JSON.stringify(googleUser.getBasicProfile())) + function onSignIn(googleUser) { + console.log('Logged in as: ' + JSON.stringify(googleUser.getBasicProfile())) -// let profile = googleUser.getBasicProfile() -// // console.log('ID: ' + profile.getId()) // Do not send to your backend! Use an ID token instead. -// // console.log('Name: ' + profile.getName()) -// // console.log('Image URL: ' + profile.getImageUrl()) -// // console.log('Email: ' + profile.getEmail()) -// } + let profile = googleUser.getBasicProfile() + // console.log('ID: ' + profile.getId()) // Do not send to your backend! Use an ID token instead. + // console.log('Name: ' + profile.getName()) + // console.log('Image URL: ' + profile.getImageUrl()) + // console.log('Email: ' + profile.getEmail()) + } -// function onFailure(error) { -// console.log(error) -// } -// var googleUser = {}; -// var startApp = function() { -// gapi.load('auth2', function(){ -// auth2 = gapi.auth2.init({ -// client_id: '571327981909-r5sunoo4l6uqducmqm7vjon1af0tmso1.apps.googleusercontent.com', -// cookiepolicy: 'single_host_origin', -// }); -// attachSignin(document.getElementById('googleBtn')); -// }); -// }; -// function attachSignin(element) { -// auth2.attachClickHandler(element, {}, -// (googleUser) =>{ -// console.log(googleUser.getBasicProfile())}, -// (error) => { -// // alert(JSON.stringify(error, undefined, 2)); -// }); -// } -// startApp() -// function signOut() { -// var auth2 = gapi.auth2.getAuthInstance() -// auth2.signOut().then(function () { -// console.log('User signed out.') -// }) -// } + function onFailure(error) { + console.log(error) + } + var googleUser = {}; + var startApp = function() { + gapi.load('auth2', function(){ + auth2 = gapi.auth2.init({ + client_id: '571327981909-r5sunoo4l6uqducmqm7vjon1af0tmso1.apps.googleusercontent.com', + cookiepolicy: 'single_host_origin', + }); + attachSignin(document.getElementById('googleBtn')); + }); + }; + function attachSignin(element) { + auth2.attachClickHandler(element, {}, + (googleUser) =>{ + console.log(googleUser.getBasicProfile())}, + (error) => { + // alert(JSON.stringify(error, undefined, 2)); + }); + } + startApp() + function signOut() { + var auth2 = gapi.auth2.getAuthInstance() + auth2.signOut().then(function () { + console.log('User signed out.') + }) + } -// /** GitHub */ +/** GitHub */ -// document.getElementById('github-button').addEventListener('click', () => { -// // Initialize with your OAuth.io app public key -// OAuth.initialize('_nPRfzTNGplyDCW0vD9dmek5QAg'); -// // Use popup for oauth -// // Alternative is redirect -// OAuth.popup('github').then(github => { -// console.log('github:', github); -// // Retrieves user data from oauth provider -// // Prompts 'welcome' message with User's email on successful login -// // #me() is a convenient method to retrieve user data without requiring you -// // to know which OAuth provider url to call -// github.me().then(data => { -// console.log('me data:', data); -// // 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 -// // OAuth provider url -// github.get('/user').then(data => { -// console.log('self data:', data); -// }) -// }); -// }) + document.getElementById('github-button').addEventListener('click', () => { + // Initialize with your OAuth.io app public key + OAuth.initialize('_nPRfzTNGplyDCW0vD9dmek5QAg'); + // Use popup for oauth + // Alternative is redirect + OAuth.popup('github').then(github => { + console.log('github:', github); + // Retrieves user data from oauth provider + // Prompts 'welcome' message with User's email on successful login + // #me() is a convenient method to retrieve user data without requiring you + // to know which OAuth provider url to call + github.me().then(data => { + console.log('me data:', data); + // 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 + // OAuth provider url + github.get('/user').then(data => { + console.log('self data:', data); + }) + }); + }) // /** FaceBook */ diff --git a/add-ons/head.php b/add-ons/head.php index 307ee4a..7ef6cdb 100644 --- a/add-ons/head.php +++ b/add-ons/head.php @@ -14,6 +14,7 @@ + diff --git a/add-ons/navigation-bar.php b/add-ons/navigation-bar.php index f815b71..d05f6f8 100644 --- a/add-ons/navigation-bar.php +++ b/add-ons/navigation-bar.php @@ -68,7 +68,7 @@ onclick="mainSearch('extra')">Search -