جاوااسکریپت | JavaScript
507 subscribers
654 photos
139 videos
3 files
512 links
کانال @IR_javascript حاوی اطلاعات مفید در حوزه برنامه نویس فرانت که بصورت روزانه بروز می‌شود.
در این کانال شما به:
[1] مطالب تازه
[2] تحلیل‌های عمیق
[3] نکات آموزشی
[4] چالش
[5] ابزار و راهنمایی‌های کاربردی
دسترسی خواهید داشت.

🆔@IR_javascript
Download Telegram
می‌توان از AbortController نه تنها برای لغو درخواست‌های شبکه‌ای، بلکه برای لغو تقریباً هر نوع رویدادی دیگر مانند **setTimeout**، انیمیشن‌ها یا کلیک روی دکمه نیز استفاده کرد.

const abortController = new AbortController();

button.addEventListener(
'click',
() => console.log('clicked'),
{ signal: abortController.signal }
);

abortController.abort();


گاهی اوقات این روش راحت‌تر از استفاده از روش‌های اشتراک و لغو اشتراک (unsubscribe/subscribe) است.

#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍2
ویدیو دوبله شده در مورد Install ESLint Prettier extensions for VSCode [+لینک]

‏ Prettier و ESLint هر دو ابزارهایی برای بهبود کد هستند، اما نقش‌های متفاوتی دارند.
‏Prettier یک فرمت‌کننده کد است که به طور خودکار کد شما را قالب‌بندی می‌کند و آن را مرتب می‌کند تا خواناتر شود. این ابزار بر نحوه نگارش کد تمرکز دارد.
‏ESLint اما یک ابزار تحلیل استاتیک کد است که به شما کمک می‌کند تا خطاهای رایج در کد را شناسایی کنید و همچنین می‌تواند به شما در رعایت قواعد کدنویسی کمک کند.
در واقع، Prettier به ظاهر کد می‌پردازد، در حالی که ESLint به کیفیت و صحت کد. معمولاً از هر دو به صورت مکمل استفاده می‌شود.

🔗https://www.aparat.com/v/mpo29n3
#️⃣#tip #dub
👥@IR_javascript_group
🆔@IR_javascript
🔥3
// useUserService.ts

function isAuthenticated() {
return !!user.value;
}


// کامپوننت A

<script>
const { isAuthenticated } = useUserService();
</script>

<template>
<p v-if="isAuthenticated()">سلام</p>
</template>


توابع در Vue رفتار متفاوتی از توابع معمولی دارند.

در این مثال، تابع isAuthenticated() مانند یک computed عمل می‌کند و هر بار که مقدار user تغییر کند یا کامپوننت A دوباره رندر شود، فراخوانی خواهد شد.

این اتفاق به این دلیل می‌افتد که Vue تمام وابستگی‌های واکنش‌پذیر را درون بدنه‌ی تابع شناسایی کرده و هر زمان که یکی از آن‌ها تغییر کند، کامپوننت را دوباره رندر می‌کند.

بنابراین، تفاوت زیادی در استفاده از یک تابع به جای computed وجود ندارد. اما اگر داخل تابع منطق پیچیده‌تری وجود داشته باشد، بهتر است از computed استفاده کنید، زیرا فقط زمانی که وابستگی‌های آن تغییر کنند، محاسبه مجدد می‌شود، در حالی که تابع در هر رندر اجرا می‌شود.


#️⃣#tip #vue
👥@IR_javascript_group
🆔@IR_javascript
1
This media is not supported in your browser
VIEW IN TELEGRAM
یک کتابخانه جالب از الگوهای هندسی رایگان است.

🔗http://mazeletter.xyz/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
1🙏1
Intl.DurationFormat: زمان تحت کنترل

در برخی موارد، نیاز است که مدت زمان را به شکلی راحت و قابل درک برای کاربر نمایش دهیم. به عنوان مثال، تایمرها، گزارش‌ها یا حتی زمان باقی‌مانده برای بارگذاری. برای چنین مواقعی اکنون یک راه‌حل واقعی در دسترس است — Intl.DurationFormat (اما مراقب باشید - پشتیبانی از آن تنها ۸۲٪ است، و متاسفانه هنوز در Firefox پشتیبانی نمی‌شود).

چطور در عمل به نظر می‌رسد؟

const durationFormatter = new Intl.DurationFormat('fa', {
style: 'long', // می‌تواند 'long'، 'short' یا 'narrow' باشد
});

const duration = { hours: 2, minutes: 5, seconds: 32 };
console.log(durationFormatter.format(duration)); // خروجی: "۲ ساعت ۵ دقیقه ۳۲ ثانیه"


چرا این مفید است:

لکالیزه کردن: پشتیبانی از زبان‌های مختلف، که به‌طور خودکار با قوانین هر منطقه تنظیم می‌شود.
انعطاف‌پذیری: می‌توانید واحدهای مورد نظر خود را تنظیم کنید: اگر می‌خواهید فقط دقیقه و ثانیه نمایش داده شود، به راحتی امکان‌پذیر است!

❗️ برای مطالعه بیشتر: [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat)

Intl مانند یک جعبه اسرار است: هر چقدر هم که مطالعه کنید، همیشه جزئیات جدیدی پیدا می‌شود که شما را شگفت‌زده می‌کند. 🤩

#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍7
Wow.js

یک کتابخانه JavaScript است که انیمیشن‌ها را به عناصر صفحه هنگام اسکرول اضافه می‌کند. این کتابخانه به‌طور خودکار عناصری که وارد ناحیه قابل مشاهده پنجره مرورگر می‌شوند را شناسایی کرده و انیمیشن‌های CSS را به آن‌ها اعمال می‌کند.


🔗 https://www.delac.io/WOW/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
👍5
سایت مفید AngryTools که شامل ابزارهای مختلفی برای توسعه وب است.

به عنوان مثال، ابزارهایی برای ایجاد انیمیشن‌های CSS یا تولیدکننده Flexbox.

🔗https://angrytools.com/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
شهادت امام موسی کاظم (ع)

امام موسی کاظم عليه‌السلام:
سه دسته در روز قيامت، روزى كه سايه و پناهى جز سايه خداوند نيست، در سايه و پناه خدا هستند:
۱. مردى كه زمينه ازدواج برادر مسلمانش را آماده نمايد.
۲. مردى كه خدمتگزارى به برادر مسلمانش بدهد.
۳. كسى كه سرّ برادر مسلمانش را بپوشاند.

#️⃣#event
👥@IR_javascript_group
🆔@IR_javascript
17👎5
همه با *Container size queries* آشنا هستند، اما هنوز بسیاری از افراد از *Container style queries* بی‌خبرند.

هدف از این ویژگی، استایل‌دهی به المان‌ها بر اساس زمینه و ویژگی‌های کانتینر والد است.

این امکان را فراهم می‌آورد تا قوانینی ایجاد شوند که تنها زمانی اعمال شوند که شرایط خاصی در مورد استایل کانتینر برآورده شود.

این ویژگی امکان ایجاد استایل‌های تطبیقی و وابسته به زمینه را فراهم می‌کند و می‌توان المان‌ها را بر اساس محیط اطرافشان استایل‌دهی کرد.

.card {
/* ...استایل‌های کارت... */
}

@container style(--background-color: #333) {
.card {
/* استایل‌ها برای کارت زمانی که پس‌زمینه والد آن تیره باشد */
color: white;
}
}


در برنامه‌ریزی‌ها، پشتیبانی از تابع style() نه تنها برای ویژگی‌های سفارشی CSS بلکه برای ویژگی‌های ساده‌تر مانند style(color: green) نیز در نظر گرفته شده است.

این ویژگی در همه جا پشتیبانی می‌شود، به جز در مرورگر Firefox.

#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
حالت "تصویر در تصویر" (Picture-in-Picture) 🖼

آیا متوجه شده‌اید که گاهی اوقات هنگام تماشای سریال، فیلم یا ویدیو، بین تب‌ها جابه‌جا می‌شوید؟ شاید هم در حال شرکت در یک تماس آنلاین هستید و هنگام جابه‌جایی بین تب‌ها، به‌طور خودکار یک پنجره کوچک از ویدیو باز می‌شود که در دید باقی می‌ماند؟

این همان حالت "تصویر در تصویر" (Picture-in-Picture یا PiP) است. این ویژگی تعامل با محتوای چندرسانه‌ای را بسیار آسان‌تر می‌کند و به شما این امکان را می‌دهد که تماشای ویدیو را با انجام سایر وظایف ترکیب کنید.
امروز می‌خواهم به‌طور عمیق‌تر به این موضوع بپردازم و نحوه عملکرد PiP، چگونگی فعال کردن آن در یک وب‌اپلیکیشن، و نیز نحوه اتوماسیون این فرآیند را بررسی کنم. 😉

حالت "تصویر در تصویر" به شما این امکان را می‌دهد که ویدیو را در یک پنجره جداگانه نمایش دهید که بر روی سایر برنامه‌ها باقی می‌ماند. به عنوان مثال، می‌توانید ویدیو را تماشا کنید در حالی که ایمیل‌های خود را چک می‌کنید یا بین تب‌ها جابه‌جا می‌شوید.

محدودیت‌ها و نکات مهم:

نیاز به حرکت کاربر: درخواست فعال‌سازی PiP باید در حین یک عمل از سوی کاربر انجام شود، مثلاً با کلیک بر روی یک دکمه. این محدودیت به دلیل مسائل امنیتی است.

همه مرورگرها از PiP پشتیبانی نمی‌کنند: اطمینان حاصل کنید که مرورگر شما از این API پشتیبانی می‌کند، با بررسی وجود ویژگی requestPictureInPicture در آن (https://caniuse.com/?search=requestPictureInPicture).

حالت "تصویر در تصویر" یک ابزار عالی برای ایجاد تجربه‌ای راحت‌تر در تعامل با ویدیوها در وب‌سایت‌های شماست. این ویژگی به کاربران اجازه می‌دهد که حتی زمانی که در حال انجام سایر وظایف هستند، به تماشای ویدیو ادامه دهند. 👍


#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍2
یک افزونه مفید دیگر برای VS Code: Pretty TypeScript Errors

این افزونه به شما کمک می‌کند تا خطاهای TypeScript را به صورت زیبا و خوانا نمایش دهید، که باعث می‌شود تشخیص و رفع مشکلات کد بسیار راحت‌تر شود.

🔗https://marketplace.visualstudio.com/items?itemName=yoavbls.pretty-ts-errors
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
عید مبعث خاتم الانبیا،

☀️ رسول خدا صلّي‌الله‌عليه‌وآله فرمودند:
نزدیکترین فرد در روز قیامت به من،
کسی است که بیشتر از همه بر من صلوات فرستاده باشد.
📚 مکارم الاخلاق، ص ۳۱۲

#️⃣#event
👥@IR_javascript_group
🆔@IR_javascript
13👎5
برای کسانی که از انوتیشن‌های نام پارامترهای JetBrains خوششان می‌آید، VS Code افزونه‌ای برای این کار دارد: Inline Parameters for VSCode
(لینک: Inline Parameters for VSCode)

این افزونه به شما امکان می‌دهد که نام پارامترها را به‌صورت inline در کد مشاهده کنید، مشابه آنچه که در محیط‌های توسعه JetBrains وجود دارد. این ویژگی می‌تواند به خوانایی بیشتر کد و فهم بهتر آن کمک کند.


🔗https://marketplace.visualstudio.com/items?itemName=liamhammett.inline-parameters
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
1
Merge vs Rebase: تفاوت‌ها و زمان استفاده از هرکدام

هنگام کار با Git، ما معمولاً با دو دستور پرکاربرد برای مدیریت شاخه‌ها روبه‌رو می‌شویم: merge و rebase. هر دو این دستورات به ما کمک می‌کنند تا تغییرات را از دو شاخه مختلف در یک شاخه ترکیب کنیم، اما نحوه عملکردشان کاملاً متفاوت است. در اینجا تفاوت‌ها را بررسی می‌کنیم و می‌فهمیم که چه زمانی بهتر است هرکدام را استفاده کنیم.

🌀 Merge: ترکیب شاخه‌ها با حفظ تاریخچه
هنگامی که از دستور merge استفاده می‌کنیم، Git یک merge commit ایجاد می‌کند که تاریخچه دو شاخه را با هم ترکیب می‌کند. در این حالت، تمام تاریخچه موجود دست‌نخورده باقی می‌ماند و نتیجه به‌صورت ترکیبی از دو خط موازی به نظر می‌آید.

مثال:
ما یک شاخه به نام main و یک شاخه به نام feature داریم.
تغییراتی در هر دو شاخه انجام می‌دهیم.
هنگامی که در شاخه main قرار داریم و دستور git merge feature را اجرا می‌کنیم، یک merge commit جدید در تاریخچه شاخه main ایجاد می‌شود که هر دو مجموعه تغییرات را با هم ترکیب می‌کند.

💡 کی از merge استفاده کنیم؟
وقتی می‌خواهید تمام تاریخچه کامیت‌ها، از جمله شاخه‌ها، را حفظ کنید؛
وقتی برای شما مهم است که بفهمید تغییرات از کجا آمده‌اند؛
برای کار در تیم‌های بزرگ که شفافیت در روند کاری اهمیت دارد.

مثال بصری پس از merge (ترتیب زمانی از پایین به بالا: ابتدا در شاخه main کار کردیم (۲ کامیت)، سپس به شاخه feature رفتیم (۲ کامیت)، و بعد شاخه feature را به شاخه main وارد کردیم):

                 *   Merge branch 'feature' [merge commit]
|\
| * افزودن ویژگی جدید
| * اصلاح باگ
اصلاح استایل * |
بروزرسانی README * |
[شاخه main] [شاخه feature]


🔀 Rebase: بازنویسی تاریخچه
‏Rebase تغییرات را از یک شاخه به بالای شاخه دیگر منتقل می‌کند، به‌گونه‌ای که انگار این تغییرات ابتدا روی آن شاخه ایجاد شده‌اند. در نتیجه، تاریخچه به‌صورت خطی می‌شود و خبری از merge commit نخواهد بود.

مثال:
ما یک شاخه به نام main و یک شاخه به نام feature داریم.
بعد از اجرای دستور `git rebase main`، تغییرات شاخه feature روی نسخه فعلی شاخه main قرار می‌گیرند، به‌گونه‌ای که انگار شاخه feature قبل از ایجاد تغییرات، مشابه شاخه main بوده است.

💡 کی از rebase استفاده کنیم؟
وقتی می‌خواهید تاریخچه‌ای تمیز و خطی داشته باشید و خبری از merge commit نباشد؛
وقتی در شاخه شخصی خود کار می‌کنید و برای به‌روزرسانی تغییرات خود با آخرین نسخه شاخه اصلی نیاز به «هماهنگ کردن» دارید.

مثال بصری پس از rebase:

* اصلاح باگ
* افزودن ویژگی جدید
* اصلاح استایل
* بروزرسانی README
[شاخه feature]


🔑 نکته:
Merge برای تیم، Rebase برای تمیزی تاریخچه
👀 از merge برای حفظ تاریخچه کامل و منابع/نویسندگان تغییرات در پروژه‌های بزرگ استفاده کنید؛
👀 از rebase در شاخه شخصی/شاخه‌های مربوط به تکالیف استفاده کنید تا تغییرات خود را قبل از ارسال به شاخه اصلی به‌روزرسانی کنید (اما از انجام rebase روی کامیت‌های منتشر شده اجتناب کنید، زیرا ممکن است باعث ایجاد تداخل‌ها و سردرگمی هنگام همکاری شود).

#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍3
API دسترسی به سیستم فایل (File System Access API) 🧐
این API تقریباً در هیچ‌جای دیگری کار نمی‌کند، اما در Chrome امتحانش جالب است! 😁

وقتی اولین بار درباره‌ی File System Access API شنیدم، اولین فکر من این بود: "خب، بالاخره مرورگرها می‌توانند مثل برنامه‌ها روی کامپیوتر با فایل‌ها کار کنند!" و بلافاصله دومین فکر به ذهنم آمد: "آیا اصلاً این کار در جایی کار می‌کند؟"

پاسخ کوتاه: بله، کار می‌کند، اما تقریباً فقط در Chrome و چند مرورگر دیگر مبتنی بر Chromium. (لینک: [caniuse.com](https://caniuse.com/?search=File%20System%20Access%20API)) بنابراین، اگر طرفدار Firefox یا Safari هستید، فعلاً باید فقط در رویاهایتان بماند. 😒 اما برای آزمایشات، این API یک کشف عالی است! بیایید بررسی کنیم که این API چطور کار می‌کند و چه کاربردهایی دارد.

‏**File System Access API** به وب‌اپلیکیشن‌ها اجازه می‌دهد تا مستقیماً با فایل‌های موجود در کامپیوتر کاربر ارتباط برقرار کنند.

مثلاً ویرایشگر متن شما در مرورگر می‌تواند فایل‌ها را باز کرده، تغییرات را ذخیره کند و حتی به طور خودکار آن‌ها را همگام‌سازی کند! همه‌ی این‌ها بدون نیاز به بارگذاری فایل‌ها بر روی سرور.

### امکانات این API:
باز کردن فایل‌ها: آیا می‌خواهید یک سند متنی یا تصویر را مستقیماً در مرورگر بارگذاری کنید؟ به سادگی!

ذخیره تغییرات: این API به شما امکان می‌دهد تا داده‌ها را در فایلی که قبلاً موجود است، بدون ارسال درخواست‌های اضافی ذخیره کنید.

کار با پوشه‌ها: می‌توانید به کل پوشه دسترسی پیدا کرده و همزمان چندین فایل را مدیریت کنید.

پیاده‌سازی ذخیره‌سازی خودکار: دیگر هیچ "اوه، فراموش کردم Ctrl+S بزنم" نخواهید داشت.

### چرا این موضوع جالب است؟ 🤨

‏**File System Access API** موانع اضافی بین کاربر و وب‌اپلیکیشن را از بین می‌برد. این یک روش است برای طبیعی و راحت کردن تعاملات با فایل‌ها.

برای اطلاعات بیشتر می‌توانید به [مستندات Chrome](https://developer.chrome.com/docs/capabilities/web-apis/file-system-access) مراجعه کنید.

توصیه: امتحانش کنید! گاهی اوقات خوب است که چیزی جدید را امتحان کنیم، حتی اگر فقط در چند مرورگر پشتیبانی شود.


#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍2