📌Hoisting
✅یک رفتار پیش فرض جاوا اسکریپت در زمینه ی declaration ها است. بر اساس این قابلیت، جاوا اسکریپت تمام declaration های متغیرها را به بالای سورس کد انتقال می دهد. بنابراین می توان قبل از تعریف یک متغیر از آن استفاده کرد. بحث Hoisting برای توابع هم کاربرد دارد؛ اگر در تابعی از یک متغیر استفاده کنید سپس آن را تعریف کنید، جاوا اسکریپت آن را به ابتدای تابع می برد.
✅در بحث Hoisting حتما به این نکات توجه کنید که:
❗️متغیرهایی که با let یا const تعریف شده باشند، شامل Hoisting نمی شوند.
❗️جاوا اسکریپت declaration ها را Hoist می کند اما initialization ها را نه.
https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
@alithecodeguy
✅یک رفتار پیش فرض جاوا اسکریپت در زمینه ی declaration ها است. بر اساس این قابلیت، جاوا اسکریپت تمام declaration های متغیرها را به بالای سورس کد انتقال می دهد. بنابراین می توان قبل از تعریف یک متغیر از آن استفاده کرد. بحث Hoisting برای توابع هم کاربرد دارد؛ اگر در تابعی از یک متغیر استفاده کنید سپس آن را تعریف کنید، جاوا اسکریپت آن را به ابتدای تابع می برد.
✅در بحث Hoisting حتما به این نکات توجه کنید که:
❗️متغیرهایی که با let یا const تعریف شده باشند، شامل Hoisting نمی شوند.
❗️جاوا اسکریپت declaration ها را Hoist می کند اما initialization ها را نه.
https://developer.mozilla.org/en-US/docs/Glossary/Hoisting
@alithecodeguy
📌Constructor
✅در جاوااسکریپت constructor ها توابعی هستند که طرح کلی و ساختار اشیاء را تعیین می کنند. بنابراین اشیاء ای که با یک constructor ساخته شوند از یک نوع خواهند بود. از روش های توصیه شده برای نامگذاری constructor ها، بزرگ کردن حرف اولشان است. برای ساختن اشیاء باید constructor را با کلیدواژه ی new صدا بزنید.
https://javanoscript.info/constructor-new
@alithecodeguy
✅در جاوااسکریپت constructor ها توابعی هستند که طرح کلی و ساختار اشیاء را تعیین می کنند. بنابراین اشیاء ای که با یک constructor ساخته شوند از یک نوع خواهند بود. از روش های توصیه شده برای نامگذاری constructor ها، بزرگ کردن حرف اولشان است. برای ساختن اشیاء باید constructor را با کلیدواژه ی new صدا بزنید.
https://javanoscript.info/constructor-new
@alithecodeguy
Media is too big
VIEW IN TELEGRAM
📌افزونه GoFullPage برای chrome
✅زمانیکه در حال دیزاین یک وبسایت برای کارفرما باشید یا اینکه به یک پیج با طراحی زیبا برخورد کرده باشید که قصد دارید آن را ذخیره کنید. قطعا گرفتن یک اسکرینشات از تمام آن صفحه گزینه مناسبی است که این افزونه کمک میکند تا به راحتی از وبسایت مورد نظر اسکرینشات گرفته و آن را به تصویر و یا PDF تبدیل کنید.
@alithecodeguy
✅زمانیکه در حال دیزاین یک وبسایت برای کارفرما باشید یا اینکه به یک پیج با طراحی زیبا برخورد کرده باشید که قصد دارید آن را ذخیره کنید. قطعا گرفتن یک اسکرینشات از تمام آن صفحه گزینه مناسبی است که این افزونه کمک میکند تا به راحتی از وبسایت مورد نظر اسکرینشات گرفته و آن را به تصویر و یا PDF تبدیل کنید.
@alithecodeguy
📌متد ()map در آرایهها
✅در جاوا اسکریپت میتوانیم تابعی ایجاد کنیم که با استفاده از یک حلقه تمام آیتمهای آرایه را براساس تابع Callback ای که مشخص کردیم، تغییر دهد.اما اگر مجبور باشیم تابع را برای چندین برنامهی متفاوت بنویسیم کاری زمانبر و خستهکننده است. بنابراین برای جلوگیری از این تکرار میتوانیم از متد map بر روی آرایه ها استفاده کنیم که دقیقا همین عملیات را برای ما انجام میدهد. به عبارتی تابع Callback را روی تمام آیتمهای آرایهی داده شده اعمال میکند و نتیجه را که یک آرایه جدید است، برمی گرداند.
✅این تابع هیچ اثری بر روی آرایهای که بر روی آن اجرا شده نمیگذارد و فقط یک آرایه جدید میسازد و آن را برمیگرداند.
@alithecodeguy
✅در جاوا اسکریپت میتوانیم تابعی ایجاد کنیم که با استفاده از یک حلقه تمام آیتمهای آرایه را براساس تابع Callback ای که مشخص کردیم، تغییر دهد.اما اگر مجبور باشیم تابع را برای چندین برنامهی متفاوت بنویسیم کاری زمانبر و خستهکننده است. بنابراین برای جلوگیری از این تکرار میتوانیم از متد map بر روی آرایه ها استفاده کنیم که دقیقا همین عملیات را برای ما انجام میدهد. به عبارتی تابع Callback را روی تمام آیتمهای آرایهی داده شده اعمال میکند و نتیجه را که یک آرایه جدید است، برمی گرداند.
✅این تابع هیچ اثری بر روی آرایهای که بر روی آن اجرا شده نمیگذارد و فقط یک آرایه جدید میسازد و آن را برمیگرداند.
@alithecodeguy
رقصنده با کد
برای دورهمی آنلاین پنج شنبه هفته آینده یا دو هفته آینده ، چه موضوعی مطرح بشه بهتره؟
دورهمی tailwind3 ایز کامینگ!
بنرش رو به زودی میذارم
بنرش رو به زودی میذارم
📌Arrow function
✅یک روش برای تعریف توابع در جاوااسکریپت است. این ویژگی بعد از معرفی ES6 در اختیار برنامه نویسان قرار گرفته است و اجازه میدهد که به راحتی یک تابع به همراه پارامتر یا بدون پارامتر ایجاد کنید. همچنین بدون استفاده از کلمات کلیدی function و return یک تابع بسازید.
✅در arrow function اگر از this استفاده شود، مقدار آن خارج از lifecycle آن تابع است و به نزدیکترین تابع non-arrow مربوط میشود.
✅توابع معمولی میتوان فراخوانی کرد و از construct استفاده کرد و میشه از new برای آن ها استفاده کرد. ولی arrow function تنها میتونن فراخونی شوند و نمیشه شیء جدیدی از آنها ساخت.
✅برای آشنایی با دیگر تفاوتهای arrow function و توابع معمولی پیشنهاد میشود لینک زیر را مطالعه کنید.
https://dmitripavlutin.com/differences-between-arrow-and-regular-functions/
@alithecodeguy
✅یک روش برای تعریف توابع در جاوااسکریپت است. این ویژگی بعد از معرفی ES6 در اختیار برنامه نویسان قرار گرفته است و اجازه میدهد که به راحتی یک تابع به همراه پارامتر یا بدون پارامتر ایجاد کنید. همچنین بدون استفاده از کلمات کلیدی function و return یک تابع بسازید.
✅در arrow function اگر از this استفاده شود، مقدار آن خارج از lifecycle آن تابع است و به نزدیکترین تابع non-arrow مربوط میشود.
✅توابع معمولی میتوان فراخوانی کرد و از construct استفاده کرد و میشه از new برای آن ها استفاده کرد. ولی arrow function تنها میتونن فراخونی شوند و نمیشه شیء جدیدی از آنها ساخت.
✅برای آشنایی با دیگر تفاوتهای arrow function و توابع معمولی پیشنهاد میشود لینک زیر را مطالعه کنید.
https://dmitripavlutin.com/differences-between-arrow-and-regular-functions/
@alithecodeguy
📌متد :nth-child(n) در css
✅این متد جزو pseudo کلاسهای css هست و عنصری را انتخاب میکند که nامین فرزند یک المان خاص است.
✅این متد را میتوانید برای تمام المانهای html استفاده کنید.
https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child
@alithecodeguy
✅این متد جزو pseudo کلاسهای css هست و عنصری را انتخاب میکند که nامین فرزند یک المان خاص است.
✅این متد را میتوانید برای تمام المانهای html استفاده کنید.
https://developer.mozilla.org/en-US/docs/Web/CSS/:nth-child
@alithecodeguy
This media is not supported in your browser
VIEW IN TELEGRAM
📌Webpack
و✅ب پک (webpack) یک ماژول باندلر قدرتمند برای برنامه های کاربردی مدرن جاوااسکریپت است ابزاری است که در نرم افزارهای بسیاری استفاده میشود. منظور از باندل کردن این هست که تمامی فایلهای جاوااسکریپت پروژه شما در یک فایل قرار خواهد گرفت تا در هنگام لود شدن صفحات وب، فقط از یک فایل استفاده شود. علاوه بر آن فایلهایی که از preprocessor ها و superset ها استفاده میکنند (مثل sass و typenoscript) به کدهای قابل درک برای مرورگر مثل (مثل js و css) تبدیل میکند.
✅به زبان ساده ابزاری برای مجتمع کردن فایل ها و در دسترس قرار دادن آنها است، به این صورت که ابتدا یک فایلی به وب پک داده می شود، وابستگیها در وب پک بررسی و در یک باندلر جمع آوری و پک و در نهایت تحویل داده میشود.
البته کاربرد وب پک تنها به جاوااسکریپت محدود نمیشود و میتواند در عکس، فونت، سی اس اس ها نیز استفاده شود.
✅برای آشنایی به نحوه کار با webpack ویدئو را مشاهده کنید و همچنین برای دستیابی به اطلاعات بیشتر webpack به آدرس وبسایت زیر مراجعه کنید.
https://webpack.js.org/
@alithecodeguy
و✅ب پک (webpack) یک ماژول باندلر قدرتمند برای برنامه های کاربردی مدرن جاوااسکریپت است ابزاری است که در نرم افزارهای بسیاری استفاده میشود. منظور از باندل کردن این هست که تمامی فایلهای جاوااسکریپت پروژه شما در یک فایل قرار خواهد گرفت تا در هنگام لود شدن صفحات وب، فقط از یک فایل استفاده شود. علاوه بر آن فایلهایی که از preprocessor ها و superset ها استفاده میکنند (مثل sass و typenoscript) به کدهای قابل درک برای مرورگر مثل (مثل js و css) تبدیل میکند.
✅به زبان ساده ابزاری برای مجتمع کردن فایل ها و در دسترس قرار دادن آنها است، به این صورت که ابتدا یک فایلی به وب پک داده می شود، وابستگیها در وب پک بررسی و در یک باندلر جمع آوری و پک و در نهایت تحویل داده میشود.
البته کاربرد وب پک تنها به جاوااسکریپت محدود نمیشود و میتواند در عکس، فونت، سی اس اس ها نیز استفاده شود.
✅برای آشنایی به نحوه کار با webpack ویدئو را مشاهده کنید و همچنین برای دستیابی به اطلاعات بیشتر webpack به آدرس وبسایت زیر مراجعه کنید.
https://webpack.js.org/
@alithecodeguy
📌متد reduce() در آرایه ها
✅متد reduce در مواردی استفاده میشود که میخواهیم یک آرایه را بر اساس تابع Callbackتعریف شده در آن به یک مقدار واحد کاهش دهیم.
✅تابع Callback استفاده شده در متد reduce دو پارامتر دارد. اولین پارامتر به طور پیش فرض اولین آیتم آرایه است. دومین پارامتر آیتم جاری در آرایه است.
✅این متد آرگومان اختیاری دومی میگیرد که با استفاده از آن میتوان مشخص کرد عملیات را در تابع Callback با چه مقدار اولیه در آرایه میخواهیم شروع شود.
https://www.w3schools.com/jsref/jsref_reduce.asp
@alitehcodeguy
✅متد reduce در مواردی استفاده میشود که میخواهیم یک آرایه را بر اساس تابع Callbackتعریف شده در آن به یک مقدار واحد کاهش دهیم.
✅تابع Callback استفاده شده در متد reduce دو پارامتر دارد. اولین پارامتر به طور پیش فرض اولین آیتم آرایه است. دومین پارامتر آیتم جاری در آرایه است.
✅این متد آرگومان اختیاری دومی میگیرد که با استفاده از آن میتوان مشخص کرد عملیات را در تابع Callback با چه مقدار اولیه در آرایه میخواهیم شروع شود.
https://www.w3schools.com/jsref/jsref_reduce.asp
@alitehcodeguy
Media is too big
VIEW IN TELEGRAM
📌افزونه Marmoset
✅هر کدی که داشته باشید با این افزونه میتوانید به عکس تبدیل کنید و در همان برنامه تنظیمات مختلفی روی عکس انجام دهید. این افزونه مناسب این است که عکسهای جالبی از کدهای خود تهیه کنید و در پست ها و وبسایتهای خود از آنها استفاده کنید.
@alithecodeguy
✅هر کدی که داشته باشید با این افزونه میتوانید به عکس تبدیل کنید و در همان برنامه تنظیمات مختلفی روی عکس انجام دهید. این افزونه مناسب این است که عکسهای جالبی از کدهای خود تهیه کنید و در پست ها و وبسایتهای خود از آنها استفاده کنید.
@alithecodeguy
📌Scope
✅در جاوااسکریپت scope به معنای محدوده استفاده از هر متغیر است که مشخص می کند هر متغیر در چه محدوده ای قابل استفاده است.
✅در جاوا اسکریپت سه نوع scope داریم:
🔹block scope
به فضای بین دو براکت، بلاک میگوییم. متغیرهایی که با let و const داخل یک بلاک تعریف میشوند فقط در همان بلاک قابل دسترسی هستند. اما برای var اینطور نیست. متغیری که با var داخل یک بلاک تعریف شود، بیرون بلاک هم قابل دسترسی است.
🔹global scope
به بیرونیترین قسمت یک برنامه جاوااسکریپتی global scope میگوییم. متغیرهایی که توی این اسکوپ تعریف میشوند، همه جای برنامه قابل دسترسی هستند.
🔹function scope
متغیرهایی که توی یک تابع تعریف میشوند، اسکوپ local دارن و فقط درون خود تابع قابل دسترسی هستند.
https://www.w3schools.com/js/js_scope.asp
@alithecodeguy
✅در جاوااسکریپت scope به معنای محدوده استفاده از هر متغیر است که مشخص می کند هر متغیر در چه محدوده ای قابل استفاده است.
✅در جاوا اسکریپت سه نوع scope داریم:
🔹block scope
به فضای بین دو براکت، بلاک میگوییم. متغیرهایی که با let و const داخل یک بلاک تعریف میشوند فقط در همان بلاک قابل دسترسی هستند. اما برای var اینطور نیست. متغیری که با var داخل یک بلاک تعریف شود، بیرون بلاک هم قابل دسترسی است.
🔹global scope
به بیرونیترین قسمت یک برنامه جاوااسکریپتی global scope میگوییم. متغیرهایی که توی این اسکوپ تعریف میشوند، همه جای برنامه قابل دسترسی هستند.
🔹function scope
متغیرهایی که توی یک تابع تعریف میشوند، اسکوپ local دارن و فقط درون خود تابع قابل دسترسی هستند.
https://www.w3schools.com/js/js_scope.asp
@alithecodeguy
W3Schools
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
📌closure
✅در جاوااسکریپت closure تابعی است که به scope بیرونی تعریف شده خود دسترسی دارد. بنابراین می تواند به مقادیر خارج از scope دسترسی پیدا کند، حتی اگر تابع terminated شده باشد. در حالت کلی Closure تابعی است که داخل یک تابع دیگر تعریف و return میشود. همانطور که گفته شده است, وقتی در زبان برنامه نویسی متغیری تعریف می کنید، آن متغیر در یک ناحیه مشخص و معین قابل استفاده است و خارج از محدوده تعیین شده نمی شود از آن متغیر استفاده کرد، حتی برای نمایش محتوای متغیر. بنابراین با استفاده از closure میتوانیم محدوده دسترسی به متغیر را مدیریت کنیم و از ایجاد برخی باگها جلوگیری کنیم.
✅برای درک بهتر closure به مثال بالا توجه کنید. مثال اول بدون استفاده از closure میباشد که باعث شده است هدف درست تابع اجرا نشود و پاسخ اشتباه به دست بیاید. اما در مثال دوم با استفاده از closure هدف درست تابع اجرا شده است.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
@alithecodeguy
✅در جاوااسکریپت closure تابعی است که به scope بیرونی تعریف شده خود دسترسی دارد. بنابراین می تواند به مقادیر خارج از scope دسترسی پیدا کند، حتی اگر تابع terminated شده باشد. در حالت کلی Closure تابعی است که داخل یک تابع دیگر تعریف و return میشود. همانطور که گفته شده است, وقتی در زبان برنامه نویسی متغیری تعریف می کنید، آن متغیر در یک ناحیه مشخص و معین قابل استفاده است و خارج از محدوده تعیین شده نمی شود از آن متغیر استفاده کرد، حتی برای نمایش محتوای متغیر. بنابراین با استفاده از closure میتوانیم محدوده دسترسی به متغیر را مدیریت کنیم و از ایجاد برخی باگها جلوگیری کنیم.
✅برای درک بهتر closure به مثال بالا توجه کنید. مثال اول بدون استفاده از closure میباشد که باعث شده است هدف درست تابع اجرا نشود و پاسخ اشتباه به دست بیاید. اما در مثال دوم با استفاده از closure هدف درست تابع اجرا شده است.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures
@alithecodeguy
📌pop-up javanoscript
✅جاوا اسکریپت سه نوع پنجره یا دیالوگ pop-up دارد:
🔹Alert box
🔹Confirm box
🔹Prompt box
✅Alert Box
از این پنجره برای نمایش هشدار به کاربر در جاوا اسکریپت یا نمایش پیغام استفاده می شود.
✅Confirm Box
این پنجره زمانی استفاده می شود که می خواهید از کاربر تاییدیه بگیرید.اگر کاربر OK را انتخاب کند، مقدار true و اگر Cancel را انتخاب کند مقدار false را بر می گرداند.
✅Prompt Box
از این پنجره معمولا برای گرفتن ورودی از کاربر قبل از وارد شدن به صفحه استفاده می شود.اگر کاربر OK را انتخاب کند، مقدار ورودی را بر می گرداند و اگر کاربر Cancel را انتخاب کند، null بر می گرداند.
@alithecodeguy
✅جاوا اسکریپت سه نوع پنجره یا دیالوگ pop-up دارد:
🔹Alert box
🔹Confirm box
🔹Prompt box
✅Alert Box
از این پنجره برای نمایش هشدار به کاربر در جاوا اسکریپت یا نمایش پیغام استفاده می شود.
✅Confirm Box
این پنجره زمانی استفاده می شود که می خواهید از کاربر تاییدیه بگیرید.اگر کاربر OK را انتخاب کند، مقدار true و اگر Cancel را انتخاب کند مقدار false را بر می گرداند.
✅Prompt Box
از این پنجره معمولا برای گرفتن ورودی از کاربر قبل از وارد شدن به صفحه استفاده می شود.اگر کاربر OK را انتخاب کند، مقدار ورودی را بر می گرداند و اگر کاربر Cancel را انتخاب کند، null بر می گرداند.
@alithecodeguy
مقاله سوم بنده در Medium
https://medium.com/@alithecodeguy/how-make-noscript-files-more-usable-for-reactjs-e6bf60b3e5a8
#react #medium #noscript @alithecodeguy
https://medium.com/@alithecodeguy/how-make-noscript-files-more-usable-for-reactjs-e6bf60b3e5a8
#react #medium #noscript @alithecodeguy
Medium
How make SVG files more usable for ReactJs
There are a few ways to use SVG files in your React projects , based on the framework you are using. These are some of them :
یه مقاله عالی روی medium
https://itnext.io/frontend-interview-cheatsheet-that-helped-me-to-get-offer-on-amazon-and-linkedin-cba9584e33c7#21a5
https://itnext.io/frontend-interview-cheatsheet-that-helped-me-to-get-offer-on-amazon-and-linkedin-cba9584e33c7#21a5
Medium
🔥 Frontend Interview Cheatsheet That Helped Me Get Offers From Amazon & LinkedIn
If you are preparing for a frontend interview & want to quickly refresh your domain knowledge, this cheatsheet will save you a lot of time.
شاید فکرکنید اونور خیلی گل و بلبله ولی این آماریه که از ۱۵ تا آگهی استخدام ریکت توی استک اورفلو درآوردم.
عملا باید بک اند و سرور هم بلد
باشید.
پاورقی : برای سمت سنیور
#react #job #alithecodeguy #stackoverflow #frontend
عملا باید بک اند و سرور هم بلد
باشید.
پاورقی : برای سمت سنیور
#react #job #alithecodeguy #stackoverflow #frontend
This media is not supported in your browser
VIEW IN TELEGRAM
📌رویداد های زمانی یا Timing Events
✅در جاوا اسکریت کدها می توانند در فاصله های زمانی معینی اجرا شوند. که به این فواصل زمانی را Timing Events میگویند.
✅دو متد یا تابع اصلی برای این کار وجود دارد:
🔷(setTimeout(function, milliseconds
تابع را بعد از اتمام زمان مشخص شده اجرا می کند
🔷(setInterval(function, milliseconds
مانند setTimeout عمل می کند اما تابع را تکرار می کند.
@alithecodeguy
✅در جاوا اسکریت کدها می توانند در فاصله های زمانی معینی اجرا شوند. که به این فواصل زمانی را Timing Events میگویند.
✅دو متد یا تابع اصلی برای این کار وجود دارد:
🔷(setTimeout(function, milliseconds
تابع را بعد از اتمام زمان مشخص شده اجرا می کند
🔷(setInterval(function, milliseconds
مانند setTimeout عمل می کند اما تابع را تکرار می کند.
@alithecodeguy
📌متد ()some
✅ متد some یک تابع Callback میگیرد و اگر حداقل یک عنصر از آرایه که تابع Callback برای آن فراخوانی شده، شرط تابع صدق کند مقدار true را برمیگرداند. در غیر این صورت مقدار false برمیگرداند.
📌متد ()every
✅ این متد دقیقا عملکردی متضاد با متد some را دارد. به این صورت که این متد نیز یک تابع Callback میگیرد و در صورتی که شرط تابع Callback برای تمام آیتمهای آرایه برقرارباشد، مقدار true برمیگرداند و در غیر این صورت مقدار false برمیگرداند.
@alithecodeguy
✅ متد some یک تابع Callback میگیرد و اگر حداقل یک عنصر از آرایه که تابع Callback برای آن فراخوانی شده، شرط تابع صدق کند مقدار true را برمیگرداند. در غیر این صورت مقدار false برمیگرداند.
📌متد ()every
✅ این متد دقیقا عملکردی متضاد با متد some را دارد. به این صورت که این متد نیز یک تابع Callback میگیرد و در صورتی که شرط تابع Callback برای تمام آیتمهای آرایه برقرارباشد، مقدار true برمیگرداند و در غیر این صورت مقدار false برمیگرداند.
@alithecodeguy
This media is not supported in your browser
VIEW IN TELEGRAM
📌تگ map در HTML
✅ با استفاده از این تگ میتوانیم یک فضای قابل کلیک کردن بر روی یک عکس ایجاد کنیم. با ایجاد این فضا برای یک عکس این امکان برای کاربر فراهم میشود که با کلیک بر روی تصویر مورد نظر به یک صفحه دیگر هدایت شود و همینطور دستورات جاوااسکریپتی برای تصویر تعریف شود.
✅ با این تگ میتوان برای تصاویر فضای قابل کلیک به صورت دایره، مستطیل و چند ضلعی ایجاد کرد.
https://www.w3schools.com/html/html_images_imagemap.asp
@alithecodeguy
✅ با استفاده از این تگ میتوانیم یک فضای قابل کلیک کردن بر روی یک عکس ایجاد کنیم. با ایجاد این فضا برای یک عکس این امکان برای کاربر فراهم میشود که با کلیک بر روی تصویر مورد نظر به یک صفحه دیگر هدایت شود و همینطور دستورات جاوااسکریپتی برای تصویر تعریف شود.
✅ با این تگ میتوان برای تصاویر فضای قابل کلیک به صورت دایره، مستطیل و چند ضلعی ایجاد کرد.
https://www.w3schools.com/html/html_images_imagemap.asp
@alithecodeguy