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
-