diff --git a/html/search.ejs b/html/search.ejs index 8d9ce2a4..124e95a1 100644 --- a/html/search.ejs +++ b/html/search.ejs @@ -515,22 +515,26 @@ Web - <% - - const query = q.toLowerCase().trim(); + <% + <% +const query = (q || '').toLowerCase().trim(); let answer = ''; -function isMathExpression(query) { - return /^[0-9\s\+\-\*\/\.\x]+$/.test(query); +function isMathExpression(s) { + return /^[0-9\s+\-*/.x]+$/.test(s); } -if (/^[0-9\s+\-*/.x]+$/.test(query)) { - const expr = query.replace(/\s+/g, ''); - answer = expr === '9+10' ? '21' : (() => { - try { return eval(expr); } catch { return 'Invalid Expression'; } - })(); - return answer; +function evaluateMathExpression(src) { + const expr = src.replace(/\s+/g, ''); + if (expr === '9+10') return '21'; + try { + // Safer than eval: no access to local scope; still only for simple arithmetic + const val = Function('"use strict";return (' + expr + ')')(); + return String(val); + } catch { + return 'Invalid Expression'; } +} function getCurrentDate() { const now = new Date(); @@ -538,152 +542,34 @@ function getCurrentDate() { } function getCurrentYear() { - return new Date().getFullYear(); + return String(new Date().getFullYear()); } function getTimeInTimezone(location) { -const tzMap = { - "california": "America/Los_Angeles", - "new york": "America/New_York", - "chicago": "America/Chicago", - "denver": "America/Denver", - "phoenix": "America/Phoenix", - "anchorage": "America/Anchorage", - "honolulu": "Pacific/Honolulu", - "london": "Europe/London", - "paris": "Europe/Paris", - "berlin": "Europe/Berlin", - "madrid": "Europe/Madrid", - "rome": "Europe/Rome", - "moscow": "Europe/Moscow", - "athens": "Europe/Athens", - "sydney": "Australia/Sydney", - "melbourne": "Australia/Melbourne", - "brisbane": "Australia/Brisbane", - "perth": "Australia/Perth", - "tokyo": "Asia/Tokyo", - "osaka": "Asia/Osaka", - "seoul": "Asia/Seoul", - "beijing": "Asia/Shanghai", - "shanghai": "Asia/Shanghai", - "hong kong": "Asia/Hong_Kong", - "taipei": "Asia/Taipei", - "bangkok": "Asia/Bangkok", - "jakarta": "Asia/Jakarta", - "delhi": "Asia/Kolkata", - "mumbai": "Asia/Kolkata", - "karachi": "Asia/Karachi", - "dubai": "Asia/Dubai", - "abu dhabi": "Asia/Dubai", - "riyadh": "Asia/Riyadh", - "johannesburg": "Africa/Johannesburg", - "cairo": "Africa/Cairo", - "nairobi": "Africa/Nairobi", - "lagos": "Africa/Lagos", - "algiers": "Africa/Algiers", - "casablanca": "Africa/Casablanca", - "lisbon": "Europe/Lisbon", - "dublin": "Europe/Dublin", - "zurich": "Europe/Zurich", - "vienna": "Europe/Vienna", - "stockholm": "Europe/Stockholm", - "oslo": "Europe/Oslo", - "helsinki": "Europe/Helsinki", - "prague": "Europe/Prague", - "budapest": "Europe/Budapest", - "warsaw": "Europe/Warsaw", - "bucharest": "Europe/Bucharest", - "sofia": "Europe/Sofia", - "zagreb": "Europe/Zagreb", - "belgrade": "Europe/Belgrade", - "sarajevo": "Europe/Sarajevo", - "podgorica": "Europe/Podgorica", - "ljubljana": "Europe/Ljubljana", - "tirana": "Europe/Tirane", - "valletta": "Europe/Malta", - "andorra la vella": "Europe/Andorra", - "monaco": "Europe/Monaco", - "luxembourg": "Europe/Luxembourg", - "bratislava": "Europe/Bratislava", - "vilnius": "Europe/Vilnius", - "riga": "Europe/Riga", - "tallinn": "Europe/Tallinn", - "istanbul": "Europe/Istanbul", - "jerusalem": "Asia/Jerusalem", - "amman": "Asia/Amman", - "beirut": "Asia/Beirut", - "damascus": "Asia/Damascus", - "baghdad": "Asia/Baghdad", - "tehran": "Asia/Tehran", - "islamabad": "Asia/Karachi", - "kathmandu": "Asia/Kathmandu", - "thimphu": "Asia/Thimphu", - "dhaka": "Asia/Dhaka", - "yangon": "Asia/Yangon", - "hanoi": "Asia/Ho_Chi_Minh", - "ho chi minh city": "Asia/Ho_Chi_Minh", - "manila": "Asia/Manila", - "singapore": "Asia/Singapore", - "kuala lumpur": "Asia/Kuala_Lumpur", - "colombo": "Asia/Colombo", - "bagotville": "America/Montreal", - "toronto": "America/Toronto", - "vancouver": "America/Vancouver", - "mexico city": "America/Mexico_City", - "guadalajara": "America/Mexico_City", - "monterrey": "America/Monterrey", - "sao paulo": "America/Sao_Paulo", - "buenos aires": "America/Argentina/Buenos_Aires", - "santiago": "America/Santiago", - "rio de janeiro": "America/Sao_Paulo", - "caracas": "America/Caracas", - "bogota": "America/Bogota", - "lima": "America/Lima", - "quito": "America/Quito", - "georgetown": "America/Guyana", - "paramaribo": "America/Paramaribo", - "cayenne": "America/Cayenne", - "kingston": "America/Jamaica", - "port_of_spain": "America/Port_of_Spain", - "st johns": "America/St_Johns", - "midway": "Pacific/Midway", - "apia": "Pacific/Apia", - "nuku alofa": "Pacific/Tongatapu", - "tarawa": "Pacific/Tarawa", - "funafuti": "Pacific/Funafuti", - "suva": "Pacific/Fiji", - "chatham": "Pacific/Chatham", - "pitcairn": "Pacific/Pitcairn", - "galapagos": "Pacific/Galapagos", - "easter island": "Pacific/Easter", - "honiara": "Pacific/Guadalcanal", - "port vila": "Pacific/Efate", - "palikir": "Pacific/Pohnpei", - "palau": "Pacific/Palau", - "mcmurdo": "Antarctica/McMurdo", - "rothera": "Antarctica/Rothera", - "troll": "Antarctica/Troll", - "davis": "Antarctica/Davis", - "casey": "Antarctica/Casey", - "mawson": "Antarctica/Mawson", - "vostok": "Antarctica/Vostok", - "syowa": "Antarctica/Syowa", - "gmt": "Etc/GMT", - "utc": "UTC" -}; - + const tzMap = { + "california":"America/Los_Angeles","new york":"America/New_York","chicago":"America/Chicago","denver":"America/Denver","phoenix":"America/Phoenix","anchorage":"America/Anchorage","honolulu":"Pacific/Honolulu", + "london":"Europe/London","paris":"Europe/Paris","berlin":"Europe/Berlin","madrid":"Europe/Madrid","rome":"Europe/Rome","moscow":"Europe/Moscow","athens":"Europe/Athens", + "sydney":"Australia/Sydney","melbourne":"Australia/Melbourne","brisbane":"Australia/Brisbane","perth":"Australia/Perth", + "tokyo":"Asia/Tokyo","osaka":"Asia/Osaka","seoul":"Asia/Seoul","beijing":"Asia/Shanghai","shanghai":"Asia/Shanghai","hong kong":"Asia/Hong_Kong","taipei":"Asia/Taipei","bangkok":"Asia/Bangkok","jakarta":"Asia/Jakarta","delhi":"Asia/Kolkata","mumbai":"Asia/Kolkata","karachi":"Asia/Karachi", + "dubai":"Asia/Dubai","abu dhabi":"Asia/Dubai","riyadh":"Asia/Riyadh", + "johannesburg":"Africa/Johannesburg","cairo":"Africa/Cairo","nairobi":"Africa/Nairobi","lagos":"Africa/Lagos","algiers":"Africa/Algiers","casablanca":"Africa/Casablanca", + "lisbon":"Europe/Lisbon","dublin":"Europe/Dublin","zurich":"Europe/Zurich","vienna":"Europe/Vienna","stockholm":"Europe/Stockholm","oslo":"Europe/Oslo","helsinki":"Europe/Helsinki","prague":"Europe/Prague","budapest":"Europe/Budapest","warsaw":"Europe/Warsaw","bucharest":"Europe/Bucharest","sofia":"Europe/Sofia","zagreb":"Europe/Zagreb","belgrade":"Europe/Belgrade","sarajevo":"Europe/Sarajevo","podgorica":"Europe/Podgorica","ljubljana":"Europe/Ljubljana","tirana":"Europe/Tirane","valletta":"Europe/Malta","andorra la vella":"Europe/Andorra","monaco":"Europe/Monaco","luxembourg":"Europe/Luxembourg","bratislava":"Europe/Bratislava","vilnius":"Europe/Vilnius","riga":"Europe/Riga","tallinn":"Europe/Tallinn","istanbul":"Europe/Istanbul", + "jerusalem":"Asia/Jerusalem","amman":"Asia/Amman","beirut":"Asia/Beirut","damascus":"Asia/Damascus","baghdad":"Asia/Baghdad","tehran":"Asia/Tehran","islamabad":"Asia/Karachi","kathmandu":"Asia/Kathmandu","thimphu":"Asia/Thimphu","dhaka":"Asia/Dhaka","yangon":"Asia/Yangon","hanoi":"Asia/Ho_Chi_Minh","ho chi minh city":"Asia/Ho_Chi_Minh","manila":"Asia/Manila","singapore":"Asia/Singapore","kuala lumpur":"Asia/Kuala_Lumpur","colombo":"Asia/Colombo", + "bagotville":"America/Montreal","toronto":"America/Toronto","vancouver":"America/Vancouver","mexico city":"America/Mexico_City","guadalajara":"America/Mexico_City","monterrey":"America/Monterrey", + "sao paulo":"America/Sao_Paulo","buenos aires":"America/Argentina/Buenos_Aires","santiago":"America/Santiago","rio de janeiro":"America/Sao_Paulo","caracas":"America/Caracas","bogota":"America/Bogota","lima":"America/Lima","quito":"America/Quito","georgetown":"America/Guyana","paramaribo":"America/Paramaribo","cayenne":"America/Cayenne","kingston":"America/Jamaica","port_of_spain":"America/Port_of_Spain","st johns":"America/St_Johns", + "midway":"Pacific/Midway","apia":"Pacific/Apia","nuku alofa":"Pacific/Tongatapu","tarawa":"Pacific/Tarawa","funafuti":"Pacific/Funafuti","suva":"Pacific/Fiji","chatham":"Pacific/Chatham","pitcairn":"Pacific/Pitcairn","galapagos":"Pacific/Galapagos","easter island":"Pacific/Easter","honiara":"Pacific/Guadalcanal","port vila":"Pacific/Efate","palikir":"Pacific/Pohnpei","palau":"Pacific/Palau", + "mcmurdo":"Antarctica/McMurdo","rothera":"Antarctica/Rothera","troll":"Antarctica/Troll","davis":"Antarctica/Davis","casey":"Antarctica/Casey","mawson":"Antarctica/Mawson","vostok":"Antarctica/Vostok","syowa":"Antarctica/Syowa", + "gmt":"Etc/GMT","utc":"UTC" + }; const timezone = tzMap[location.toLowerCase()]; - if (!timezone) { - return null; - } + if (!timezone) return null; const now = new Date(); const options = { timeZone: timezone, timeStyle: 'medium', hour12: false }; return now.toLocaleTimeString('en-US', options); } - function randomCompliment() { const compliments = [ "Youโre an awesome friend.", @@ -706,71 +592,25 @@ function randomEncouragement() { return encourages[Math.floor(Math.random() * encourages.length)]; } -function base64Encode(str) { - return btoa(str); -} - -function base64Decode(str) { - try { - return atob(str); - } catch { - return 'Invalid Base64'; - } -} - -function hexToDec(str) { - return parseInt(str.replace(/^0x/, ''), 16).toString(); -} - -function decToHex(num) { - return Number(num).toString(16); -} - -function textToCharCodes(text) { - return text.split('').map(c => c.charCodeAt(0)).join(' '); -} - -function charCodesToText(codes) { - return String.fromCharCode(...codes.split(/\s+/).map(n => +n)); -} - -function countWords(text) { - return text.trim().split(/\s+/).length; -} - -function titleCase(text) { - return text - .split(' ') - .map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) - .join(' '); -} - -function slugify(text) { - return text - .toLowerCase() - .trim() - .replace(/[^a-z0-9]+/g, '-') - .replace(/^-+|-+$/g, ''); -} +function base64Encode(str) { return btoa(str); } +function base64Decode(str) { try { return atob(str); } catch { return 'Invalid Base64'; } } +function hexToDec(str) { return parseInt(str.replace(/^0x/, ''), 16).toString(); } +function decToHex(num) { return Number(num).toString(16); } +function textToCharCodes(text) { return text.split('').map(c => c.charCodeAt(0)).join(' '); } +function charCodesToText(codes) { return String.fromCharCode(...codes.split(/\s+/).map(n => +n)); } +function countWords(text) { return text.trim().split(/\s+/).length; } +function titleCase(text) { return text.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' '); } +function slugify(text) { return text.toLowerCase().trim().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, ''); } function isPrime(n) { n = Number(n); if (n < 2) return false; - for (let i = 2; i <= Math.sqrt(n); i++) { - if (n % i === 0) return false; - } + for (let i = 2; i <= Math.sqrt(n); i++) if (n % i === 0) return false; return true; } -function gcd(a, b) { - a = Math.abs(a); b = Math.abs(b); - while (b) [a, b] = [b, a % b]; - return a; -} - -function lcm(a, b) { - return Math.abs(a * b) / gcd(a, b); -} +function gcd(a, b) { a = Math.abs(a); b = Math.abs(b); while (b) [a, b] = [b, a % b]; return a; } +function lcm(a, b) { return Math.abs(a * b) / gcd(a, b); } function fibonacci(n) { n = Number(n); @@ -783,9 +623,7 @@ function fibonacci(n) { function generatePassword(length = 8) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()'; let pw = ''; - for (let i = 0; i < length; i++) { - pw += chars.charAt(Math.floor(Math.random() * chars.length)); - } + for (let i = 0; i < length; i++) pw += chars.charAt(Math.floor(Math.random() * chars.length)); return pw; } @@ -793,76 +631,45 @@ function daysUntil(dateStr) { const now = new Date(); const then = new Date(dateStr); const diff = then - now; - return diff > 0 - ? Math.ceil(diff / (1000 * 60 * 60 * 24)) + ' days' - : 'Date passed'; + return diff > 0 ? Math.ceil(diff / (1000 * 60 * 60 * 24)) + ' days' : 'Date passed'; } function generateUUID() { - return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace( - /[018]/g, - c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) + return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => + (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) ); } function generateRandomString(length = 8) { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let s = ''; - for (let i = 0; i < length; i++) { - s += chars.charAt(Math.floor(Math.random() * chars.length)); - } + for (let i = 0; i < length; i++) s += chars.charAt(Math.floor(Math.random() * chars.length)); return s; } - - const emojiMap = { - "grinning face":"๐","grin":"๐","smiley":"๐","smile":"๐","sweat smile":"๐ ", - "joy":"๐","rofl":"๐คฃ","relaxed":"โบ๏ธ","blush":"๐","innocent":"๐", - "slightly_smiling_face":"๐","upside_down":"๐","wink":"๐","relieved":"๐", - "heart eyes":"๐","kissing_heart":"๐","kissing":"๐","kissing_smiling_eyes":"๐", - "kissing_closed_eyes":"๐","yum":"๐","stuck out tongue":"๐","stuck out tongue wink":"๐", - "stuck out tongue closed eyes":"๐","money_mouth":"๐ค","hug":"๐ค","nerd":"๐ค", - "sunglasses":"๐","star_struck":"๐คฉ","thinking":"๐ค","zipper_mouth":"๐ค", - "raised_eyebrow":"๐คจ","neutral":"๐","expressionless":"๐","no_mouth":"๐ถ", - "roll_eyes":"๐","smirk":"๐","persevere":"๐ฃ","disappointed_relieved":"๐ฅ", - "cold_sweat":"๐ฐ","pensive":"๐","confused":"๐","worried":"๐","slightly_frowning":"๐", - "frowning":"โน๏ธ","anguished":"๐ง","open_mouth":"๐ฎ","grimacing":"๐ฌ","hushed":"๐ฏ", - "astonished":"๐ฒ","flushed":"๐ณ","pleading":"๐ฅบ","frowning2":"๐ฆ","anguished2":"๐ง", - "cry":"๐ข","disappointed":"๐","scream":"๐ฑ","fearful":"๐จ","tired_face":"๐ซ", - "weary":"๐ฉ","triumph":"๐ค","angry":"๐ ","rage":"๐ก","poop":"๐ฉ","thumbsup":"๐", - "thumbsdown":"๐","clap":"๐","raised_hands":"๐","pray":"๐","muscle":"๐ช","eyes":"๐", - "ear":"๐","nose":"๐","tongue":"๐ ","lips":"๐","kiss":"๐","crown":"๐","womans hat":"๐", - "eyeglasses":"๐","necktie":"๐","shirt":"๐","jeans":"๐","dress":"๐","kimono":"๐", - "bikini":"๐","sandal":"๐ก","boot":"๐ข","mans shoe":"๐","high heel":"๐ ","sock":"๐งฆ", - "gloves":"๐งค","scarf":"๐งฃ","tophat":"๐ฉ","billed cap":"๐งข","flag us":"๐บ๐ธ","flag gb":"๐ฌ๐ง", - "flag ca":"๐จ๐ฆ","flag de":"๐ฉ๐ช","flag fr":"๐ซ๐ท","flag es":"๐ช๐ธ","flag it":"๐ฎ๐น","flag jp":"๐ฏ๐ต", - "flag cn":"๐จ๐ณ","flag in":"๐ฎ๐ณ","flag br":"๐ง๐ท","flag ru":"๐ท๐บ","flag za":"๐ฟ๐ฆ","flag au":"๐ฆ๐บ", - "flag nz":"๐ณ๐ฟ","flag ng":"๐ณ๐ฌ","flag eg":"๐ช๐ฌ","flag ar":"๐ฆ๐ท","flag mx":"๐ฒ๐ฝ","flag kr":"๐ฐ๐ท", - "flag tr":"๐น๐ท", - - // animals - "dog face":"๐ถ","cat face":"๐ฑ","mouse face":"๐ญ","hamster":"๐น","rabbit":"๐ฐ", - "fox face":"๐ฆ","bear face":"๐ป","koala":"๐จ","tiger face":"๐ฏ","lion face":"๐ฆ", - "cow face":"๐ฎ","pig face":"๐ท","frog face":"๐ธ","octopus":"๐","monkey face":"๐ต", - "chicken":"๐","penguin":"๐ง","bird":"๐ฆ","baby chick":"๐ค","hatching chick":"๐ฃ", - - // nature - "sun":"โ๏ธ","moon":"๐","star":"โญ๏ธ","cloud":"โ๏ธ","umbrella":"โ๏ธ","snowflake":"โ๏ธ", - "fire":"๐ฅ","droplet":"๐ง","ocean":"๐","volcano":"๐","cactus":"๐ต","palm tree":"๐ด", - "evergreen tree":"๐ฒ","deciduous tree":"๐ณ","fallen leaf":"๐","maple leaf":"๐", - "seedling":"๐ฑ","flower":"๐ธ","rose":"๐น","sunflower":"๐ป","blossom":"๐ผ", - - //food - "grapes":"๐","watermelon":"๐","tangerine":"๐","banana":"๐","pineapple":"๐", - "apple":"๐","pear":"๐","peach":"๐","strawberry":"๐","cherries":"๐","mango":"๐ฅญ", - "lemon":"๐","coffee":"โ๏ธ","tea":"๐ต","beer":"๐บ","wine glass":"๐ท","cocktail":"๐ธ", - "tropical drink":"๐น","birthday cake":"๐","pizza":"๐","hamburger":"๐","fries":"๐", - "hot dog":"๐ญ","taco":"๐ฎ","burrito":"๐ฏ","popcorn":"๐ฟ","chocolate bar":"๐ซ", - "candy":"๐ฌ","lollipop":"๐ญ","honey pot":"๐ฏ" +const emojiMap = { + "grinning face":"๐","grin":"๐","smiley":"๐","smile":"๐","sweat smile":"๐ ","joy":"๐","rofl":"๐คฃ","relaxed":"โบ๏ธ","blush":"๐","innocent":"๐", + "slightly_smiling_face":"๐","upside_down":"๐","wink":"๐","relieved":"๐","heart eyes":"๐","kissing_heart":"๐","kissing":"๐","kissing_smiling_eyes":"๐","kissing_closed_eyes":"๐", + "yum":"๐","stuck out tongue":"๐","stuck out tongue wink":"๐","stuck out tongue closed eyes":"๐","money_mouth":"๐ค","hug":"๐ค","nerd":"๐ค","sunglasses":"๐","star_struck":"๐คฉ", + "thinking":"๐ค","zipper_mouth":"๐ค","raised_eyebrow":"๐คจ","neutral":"๐","expressionless":"๐","no_mouth":"๐ถ","roll_eyes":"๐","smirk":"๐","persevere":"๐ฃ","disappointed_relieved":"๐ฅ", + "cold_sweat":"๐ฐ","pensive":"๐","confused":"๐","worried":"๐","slightly_frowning":"๐","frowning":"โน๏ธ","anguished":"๐ง","open_mouth":"๐ฎ","grimacing":"๐ฌ","hushed":"๐ฏ","astonished":"๐ฒ", + "flushed":"๐ณ","pleading":"๐ฅบ","frowning2":"๐ฆ","anguished2":"๐ง","cry":"๐ข","disappointed":"๐","scream":"๐ฑ","fearful":"๐จ","tired_face":"๐ซ","weary":"๐ฉ","triumph":"๐ค", + "angry":"๐ ","rage":"๐ก","poop":"๐ฉ","thumbsup":"๐","thumbsdown":"๐","clap":"๐","raised_hands":"๐","pray":"๐","muscle":"๐ช","eyes":"๐","ear":"๐","nose":"๐","tongue":"๐ ", + "lips":"๐","kiss":"๐","crown":"๐","womans hat":"๐","eyeglasses":"๐","necktie":"๐","shirt":"๐","jeans":"๐","dress":"๐","kimono":"๐","bikini":"๐","sandal":"๐ก","boot":"๐ข", + "mans shoe":"๐","high heel":"๐ ","sock":"๐งฆ","gloves":"๐งค","scarf":"๐งฃ","tophat":"๐ฉ","billed cap":"๐งข","flag us":"๐บ๐ธ","flag gb":"๐ฌ๐ง","flag ca":"๐จ๐ฆ","flag de":"๐ฉ๐ช","flag fr":"๐ซ๐ท", + "flag es":"๐ช๐ธ","flag it":"๐ฎ๐น","flag jp":"๐ฏ๐ต","flag cn":"๐จ๐ณ","flag in":"๐ฎ๐ณ","flag br":"๐ง๐ท","flag ru":"๐ท๐บ","flag za":"๐ฟ๐ฆ","flag au":"๐ฆ๐บ","flag nz":"๐ณ๐ฟ","flag ng":"๐ณ๐ฌ","flag eg":"๐ช๐ฌ", + "flag ar":"๐ฆ๐ท","flag mx":"๐ฒ๐ฝ","flag kr":"๐ฐ๐ท","flag tr":"๐น๐ท", + "dog face":"๐ถ","cat face":"๐ฑ","mouse face":"๐ญ","hamster":"๐น","rabbit":"๐ฐ","fox face":"๐ฆ","bear face":"๐ป","koala":"๐จ","tiger face":"๐ฏ","lion face":"๐ฆ","cow face":"๐ฎ","pig face":"๐ท", + "frog face":"๐ธ","octopus":"๐","monkey face":"๐ต","chicken":"๐","penguin":"๐ง","bird":"๐ฆ","baby chick":"๐ค","hatching chick":"๐ฃ", + "sun":"โ๏ธ","moon":"๐","star":"โญ๏ธ","cloud":"โ๏ธ","umbrella":"โ๏ธ","snowflake":"โ๏ธ","fire":"๐ฅ","droplet":"๐ง","ocean":"๐","volcano":"๐","cactus":"๐ต","palm tree":"๐ด","evergreen tree":"๐ฒ", + "deciduous tree":"๐ณ","fallen leaf":"๐","maple leaf":"๐","seedling":"๐ฑ","flower":"๐ธ","rose":"๐น","sunflower":"๐ป","blossom":"๐ผ", + "grapes":"๐","watermelon":"๐","tangerine":"๐","banana":"๐","pineapple":"๐","apple":"๐","pear":"๐","peach":"๐","strawberry":"๐","cherries":"๐","mango":"๐ฅญ","lemon":"๐", + "coffee":"โ๏ธ","tea":"๐ต","beer":"๐บ","wine glass":"๐ท","cocktail":"๐ธ","tropical drink":"๐น","birthday cake":"๐","pizza":"๐","hamburger":"๐","fries":"๐","hot dog":"๐ญ","taco":"๐ฎ", + "burrito":"๐ฏ","popcorn":"๐ฟ","chocolate bar":"๐ซ","candy":"๐ฌ","lollipop":"๐ญ","honey pot":"๐ฏ" }; - let m; + if (isMathExpression(query)) { answer = evaluateMathExpression(query); } else if (query.includes('date') || query.includes('what date is it')) { @@ -871,7 +678,7 @@ if (isMathExpression(query)) { answer = getCurrentYear(); } else if (query.includes('what time is it in')) { const location = query.split('what time is it in')[1].trim(); - answer = getTimeInTimezone(location); + answer = getTimeInTimezone(location) || 'Unknown location'; } else if (query.includes('what time is it')) { answer = new Date().toLocaleTimeString(); } else if (query.includes('day') || query.includes('what day is it')) { @@ -885,9 +692,7 @@ if (isMathExpression(query)) { } else if (query.includes('am i cute') || query.includes('am i a cutie?')) { answer = "yesh :3 u are "; } else if (query.includes('am i a good girl') || query.includes('am i a good boy?')) { - answer = query.includes('girl') - ? "yesh :3 u are a good girl" - : "yesh :3 u are a good boy"; + answer = query.includes('girl') ? "yesh :3 u are a good girl" : "yesh :3 u are a good boy"; } else if (query.includes('ur hot') || query.includes('you are hot')) { answer = "jrifyehgyerfgu9wdswgfsafgydwgbfwdfge >~< "; } else if (/^(?:emoji\s+(.+)|(.+)\s+emoji)$/.test(query)) { @@ -895,9 +700,7 @@ if (isMathExpression(query)) { let name = (match[1] || match[2]).trim().toLowerCase(); const keySpace = name.replace(/_/g, ' '); const keyUnderscore = name.replace(/\s+/g, '_'); - answer = emojiMap[keySpace] - || emojiMap[keyUnderscore] - || 'Unknown emoji'; + answer = emojiMap[keySpace] || emojiMap[keyUnderscore] || 'Unknown emoji'; } else if (query.includes('compliment')) { answer = randomCompliment(); } else if (query.includes('encouragement') || query.includes('encourage me')) { @@ -908,28 +711,29 @@ if (isMathExpression(query)) { answer = base64Decode(query.slice(14)); } else if ((m = /0x[0-9a-f]+/i.exec(query))) { answer = hexToDec(m[0]); -} else if (query.match(/\d+\s+to\s+hex/i)) { +} else if (/\d+\s+to\s+hex/i.test(query)) { answer = decToHex(query.match(/\d+/)[0]); } else if (query.startsWith('char codes for ')) { answer = textToCharCodes(query.slice(15)); } else if (query.startsWith('text from codes ')) { answer = charCodesToText(query.slice(16)); } else if (query.startsWith('word count of ')) { - answer = countWords(query.slice(14)).toString(); + answer = String(countWords(query.slice(14))); } else if (query.startsWith('titlecase ')) { answer = titleCase(query.slice(10)); } else if (query.startsWith('slugify ')) { answer = slugify(query.slice(8)); -} else if (query.match(/\bprime\b/)) { - answer = isPrime(query.match(/\d+/)[0]) ? 'Yes' : 'No'; +} else if (/\bprime\b/.test(query)) { + const n = query.match(/\d+/); + answer = n ? (isPrime(n[0]) ? 'Yes' : 'No') : 'No'; } else if (query.includes('gcd of ')) { const nums = query.match(/\d+/g); - answer = gcd(nums[0], nums[1]).toString(); + answer = nums ? String(gcd(nums[0], nums[1])) : 'Invalid'; } else if (query.includes('lcm of ')) { const nums = query.match(/\d+/g); - answer = lcm(nums[0], nums[1]).toString(); -} else if (query.match(/fib(?:onacci)?\s*\d+/i)) { - answer = fibonacci(query.match(/\d+/)[0]).toString(); + answer = nums ? String(lcm(nums[0], nums[1])) : 'Invalid'; +} else if (/fib(?:onacci)?\s*\d+/i.test(query)) { + answer = String(fibonacci(query.match(/\d+/)[0])); } else if (query.startsWith('generate password')) { const n = query.match(/\d+/); answer = generatePassword(n ? Number(n[0]) : undefined); @@ -942,7 +746,6 @@ if (isMathExpression(query)) { answer = generateRandomString(n ? Number(n[0]) : undefined); } - const upsellMessages = [ "[new] Try searching 'What's 4+4?'", "[new] Ask 'What's the date today?'", @@ -952,18 +755,22 @@ const upsellMessages = [ ]; const showUpsell = !answer && Math.random() < 0.1; -const randomUpsellMessage = showUpsell ? upsellMessages[Math.floor(Math.random() * upsellMessages.length)] : ''; - +const randomUpsellMessage = showUpsell + ? upsellMessages[Math.floor(Math.random() * upsellMessages.length)] + : ''; function extractQueryFromUpsellMessage(message) { - return message.replace("[new] Try searching '", "") - .replace("[new] Try '", "") - .replace("[new] Ask '", "") - .replace("[new] Try ", "") - .replace("'", "") - .replace("?", "") - .trim(); + return message + .replace("[new] Try searching '", "") + .replace("[new] Try '", "") + .replace("[new] Ask '", "") + .replace("[new] Try ", "") + .replace("'", "") + .replace("?", "") + .trim(); } +%> + %> %> <% if (answer) { %> @@ -982,7 +789,7 @@ function extractQueryFromUpsellMessage(message) { white-space: pre-wrap; word-break: break-word; " - ><%= answer %> + ><%= String(answer || '') %>