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 || '') %>