// 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
🔗http://mazeletter.xyz/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
❤1🙏1
Intl.DurationFormat: زمان تحت کنترل ⏳
در برخی موارد، نیاز است که مدت زمان را به شکلی راحت و قابل درک برای کاربر نمایش دهیم. به عنوان مثال، تایمرها، گزارشها یا حتی زمان باقیمانده برای بارگذاری. برای چنین مواقعی اکنون یک راهحل واقعی در دسترس است — Intl.DurationFormat (اما مراقب باشید - پشتیبانی از آن تنها ۸۲٪ است، و متاسفانه هنوز در Firefox پشتیبانی نمیشود).
چطور در عمل به نظر میرسد؟
چرا این مفید است:
✅ لکالیزه کردن: پشتیبانی از زبانهای مختلف، که بهطور خودکار با قوانین هر منطقه تنظیم میشود.
✅ انعطافپذیری: میتوانید واحدهای مورد نظر خود را تنظیم کنید: اگر میخواهید فقط دقیقه و ثانیه نمایش داده شود، به راحتی امکانپذیر است!
❗️ برای مطالعه بیشتر: [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat)
Intl مانند یک جعبه اسرار است: هر چقدر هم که مطالعه کنید، همیشه جزئیات جدیدی پیدا میشود که شما را شگفتزده میکند. 🤩
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
در برخی موارد، نیاز است که مدت زمان را به شکلی راحت و قابل درک برای کاربر نمایش دهیم. به عنوان مثال، تایمرها، گزارشها یا حتی زمان باقیمانده برای بارگذاری. برای چنین مواقعی اکنون یک راهحل واقعی در دسترس است — 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
MDN Web Docs
Intl.DurationFormat - JavaScript | MDN
The Intl.DurationFormat object enables language-sensitive duration formatting.
👍7
Wow.js
یک کتابخانه JavaScript است که انیمیشنها را به عناصر صفحه هنگام اسکرول اضافه میکند. این کتابخانه بهطور خودکار عناصری که وارد ناحیه قابل مشاهده پنجره مرورگر میشوند را شناسایی کرده و انیمیشنهای CSS را به آنها اعمال میکند.
🔗 https://www.delac.io/WOW/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
یک کتابخانه JavaScript است که انیمیشنها را به عناصر صفحه هنگام اسکرول اضافه میکند. این کتابخانه بهطور خودکار عناصری که وارد ناحیه قابل مشاهده پنجره مرورگر میشوند را شناسایی کرده و انیمیشنهای CSS را به آنها اعمال میکند.
🔗 https://www.delac.io/WOW/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
👍5
جاوااسکریپت | JavaScript
برگههای تقلب برای توسعهدهندگان مجموعهای گسترده از برگههای تقلب کاربردی برای توسعهدهندگان، شامل موضوعاتی مانند جاوااسکریپت، HTML و CSS، برای افزایش بهرهوری و یادگیری سریع در حین کار. 🔗https://cheatsheets.zip/ #️⃣#tool 👥@IR_javascript_group 🆔@IR_javascript
This media is not supported in your browser
VIEW IN TELEGRAM
پسزمینهی پیکسلی در حال درخشش که هنگام حرکت موس روی عنصر فعال میشود
🔗https://codepen.io/hexagoncircle/pen/KwPpdBZ
#️⃣#code
👥@IR_javascript_group
🆔@IR_javascript
🔗https://codepen.io/hexagoncircle/pen/KwPpdBZ
#️⃣#code
👥@IR_javascript_group
🆔@IR_javascript
🔥1
سایت مفید AngryTools که شامل ابزارهای مختلفی برای توسعه وب است.
به عنوان مثال، ابزارهایی برای ایجاد انیمیشنهای CSS یا تولیدکننده Flexbox.
🔗https://angrytools.com/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
به عنوان مثال، ابزارهایی برای ایجاد انیمیشنهای 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
امام موسی کاظم عليهالسلام:
سه دسته در روز قيامت، روزى كه سايه و پناهى جز سايه خداوند نيست، در سايه و پناه خدا هستند:
۱. مردى كه زمينه ازدواج برادر مسلمانش را آماده نمايد.
۲. مردى كه خدمتگزارى به برادر مسلمانش بدهد.
۳. كسى كه سرّ برادر مسلمانش را بپوشاند.
#️⃣#event
👥@IR_javascript_group
🆔@IR_javascript
❤17👎5
همه با *Container size queries* آشنا هستند، اما هنوز بسیاری از افراد از *Container style queries* بیخبرند.
هدف از این ویژگی، استایلدهی به المانها بر اساس زمینه و ویژگیهای کانتینر والد است.
این امکان را فراهم میآورد تا قوانینی ایجاد شوند که تنها زمانی اعمال شوند که شرایط خاصی در مورد استایل کانتینر برآورده شود.
این ویژگی امکان ایجاد استایلهای تطبیقی و وابسته به زمینه را فراهم میکند و میتوان المانها را بر اساس محیط اطرافشان استایلدهی کرد.
در برنامهریزیها، پشتیبانی از تابع
این ویژگی در همه جا پشتیبانی میشود، به جز در مرورگر Firefox.
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
هدف از این ویژگی، استایلدهی به المانها بر اساس زمینه و ویژگیهای کانتینر والد است.
این امکان را فراهم میآورد تا قوانینی ایجاد شوند که تنها زمانی اعمال شوند که شرایط خاصی در مورد استایل کانتینر برآورده شود.
این ویژگی امکان ایجاد استایلهای تطبیقی و وابسته به زمینه را فراهم میکند و میتوان المانها را بر اساس محیط اطرافشان استایلدهی کرد.
.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
آیا متوجه شدهاید که گاهی اوقات هنگام تماشای سریال، فیلم یا ویدیو، بین تبها جابهجا میشوید؟ شاید هم در حال شرکت در یک تماس آنلاین هستید و هنگام جابهجایی بین تبها، بهطور خودکار یک پنجره کوچک از ویدیو باز میشود که در دید باقی میماند؟
این همان حالت "تصویر در تصویر" (Picture-in-Picture یا PiP) است. این ویژگی تعامل با محتوای چندرسانهای را بسیار آسانتر میکند و به شما این امکان را میدهد که تماشای ویدیو را با انجام سایر وظایف ترکیب کنید.
امروز میخواهم بهطور عمیقتر به این موضوع بپردازم و نحوه عملکرد PiP، چگونگی فعال کردن آن در یک وباپلیکیشن، و نیز نحوه اتوماسیون این فرآیند را بررسی کنم. 😉
حالت "تصویر در تصویر" به شما این امکان را میدهد که ویدیو را در یک پنجره جداگانه نمایش دهید که بر روی سایر برنامهها باقی میماند. به عنوان مثال، میتوانید ویدیو را تماشا کنید در حالی که ایمیلهای خود را چک میکنید یا بین تبها جابهجا میشوید.
محدودیتها و نکات مهم:
✅ نیاز به حرکت کاربر: درخواست فعالسازی PiP باید در حین یک عمل از سوی کاربر انجام شود، مثلاً با کلیک بر روی یک دکمه. این محدودیت به دلیل مسائل امنیتی است.
✅ همه مرورگرها از PiP پشتیبانی نمیکنند: اطمینان حاصل کنید که مرورگر شما از این API پشتیبانی میکند، با بررسی وجود ویژگی requestPictureInPicture در آن (https://caniuse.com/?search=requestPictureInPicture).
حالت "تصویر در تصویر" یک ابزار عالی برای ایجاد تجربهای راحتتر در تعامل با ویدیوها در وبسایتهای شماست. این ویژگی به کاربران اجازه میدهد که حتی زمانی که در حال انجام سایر وظایف هستند، به تماشای ویدیو ادامه دهند. 👍
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
Caniuse
"requestPictureInPicture" | Can I use... Support tables for HTML5, CSS3, etc
"Can I use" provides up-to-date browser support tables for support of front-end web technologies on desktop and mobile web browsers.
👍2
یک افزونه مفید دیگر برای VS Code: Pretty TypeScript Errors
این افزونه به شما کمک میکند تا خطاهای TypeScript را به صورت زیبا و خوانا نمایش دهید، که باعث میشود تشخیص و رفع مشکلات کد بسیار راحتتر شود.
🔗https://marketplace.visualstudio.com/items?itemName=yoavbls.pretty-ts-errors
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
این افزونه به شما کمک میکند تا خطاهای 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
☀️ رسول خدا صلّياللهعليهوآله فرمودند:
نزدیکترین فرد در روز قیامت به من،
کسی است که بیشتر از همه بر من صلوات فرستاده باشد.
📚 مکارم الاخلاق، ص ۳۱۲
#️⃣#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
(لینک: 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 قرار داریم و دستور
💡 کی از merge استفاده کنیم؟
✅ وقتی میخواهید تمام تاریخچه کامیتها، از جمله شاخهها، را حفظ کنید؛
✅ وقتی برای شما مهم است که بفهمید تغییرات از کجا آمدهاند؛
✅ برای کار در تیمهای بزرگ که شفافیت در روند کاری اهمیت دارد.
مثال بصری پس از merge (ترتیب زمانی از پایین به بالا: ابتدا در شاخه main کار کردیم (۲ کامیت)، سپس به شاخه feature رفتیم (۲ کامیت)، و بعد شاخه feature را به شاخه main وارد کردیم):
🔀 Rebase: بازنویسی تاریخچه
Rebase تغییرات را از یک شاخه به بالای شاخه دیگر منتقل میکند، بهگونهای که انگار این تغییرات ابتدا روی آن شاخه ایجاد شدهاند. در نتیجه، تاریخچه بهصورت خطی میشود و خبری از merge commit نخواهد بود.
مثال:
ما یک شاخه به نام main و یک شاخه به نام feature داریم.
بعد از اجرای دستور `git rebase main`، تغییرات شاخه feature روی نسخه فعلی شاخه main قرار میگیرند، بهگونهای که انگار شاخه feature قبل از ایجاد تغییرات، مشابه شاخه main بوده است.
💡 کی از rebase استفاده کنیم؟
✅ وقتی میخواهید تاریخچهای تمیز و خطی داشته باشید و خبری از merge commit نباشد؛
✅ وقتی در شاخه شخصی خود کار میکنید و برای بهروزرسانی تغییرات خود با آخرین نسخه شاخه اصلی نیاز به «هماهنگ کردن» دارید.
مثال بصری پس از rebase:
🔑 نکته:
Merge برای تیم، Rebase برای تمیزی تاریخچه
👀 از merge برای حفظ تاریخچه کامل و منابع/نویسندگان تغییرات در پروژههای بزرگ استفاده کنید؛
👀 از rebase در شاخه شخصی/شاخههای مربوط به تکالیف استفاده کنید تا تغییرات خود را قبل از ارسال به شاخه اصلی بهروزرسانی کنید (اما از انجام rebase روی کامیتهای منتشر شده اجتناب کنید، زیرا ممکن است باعث ایجاد تداخلها و سردرگمی هنگام همکاری شود).
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
هنگام کار با 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
این 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
Caniuse
"File System Access API" | Can I use... Support tables for HTML5, CSS3, etc
"Can I use" provides up-to-date browser support tables for support of front-end web technologies on desktop and mobile web browsers.
👍2
اسکرول بیپایان مقابل اسکرول مجازی
اسکرول بیپایان
محتوای اضافی به محض اسکرول کردن صفحه بارگذاری میشود. از روشهایی مانند AJAX برای بارگذاری دادهها از سرور و افزودن آنها به انتهای لیست استفاده میشود، به طوری که وقتی کاربر به انتهای صفحه میرسد، دادهها به طور خودکار بارگذاری میشوند.
کاربران بدون نیاز به فشردن دکمه "بارگذاری بیشتر" یا رفتن به صفحه دیگر، محتوای جدید را مشاهده میکنند. این امر تجربهای روان و پیوسته از مشاهده محتوا را فراهم میکند.
با افزایش حجم دادهها در DOM، کارایی کاهش مییابد، زیرا تمام دادهها به طور همزمان رندر میشوند.
اسکرول مجازی
عملکرد لیستهای بزرگ با رندر کردن فقط قسمتهای قابل مشاهده دادهها بهبود مییابد. تعداد مشخصی از عناصر در DOM نگه داشته میشود و محتوای آنها بسته به موقعیت اسکرول به طور دینامیک بهروزرسانی میشود.
کاربران همچنین لیست را اسکرول میکنند، اما فقط عناصر قابل مشاهده رندر میشوند، که این باعث بهبود عملکرد بهویژه برای لیستهای بسیار بزرگ میشود. این روش فشار بر حافظه را کاهش میدهد و روانی اسکرول را بهبود میبخشد.
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
اسکرول بیپایان
محتوای اضافی به محض اسکرول کردن صفحه بارگذاری میشود. از روشهایی مانند AJAX برای بارگذاری دادهها از سرور و افزودن آنها به انتهای لیست استفاده میشود، به طوری که وقتی کاربر به انتهای صفحه میرسد، دادهها به طور خودکار بارگذاری میشوند.
کاربران بدون نیاز به فشردن دکمه "بارگذاری بیشتر" یا رفتن به صفحه دیگر، محتوای جدید را مشاهده میکنند. این امر تجربهای روان و پیوسته از مشاهده محتوا را فراهم میکند.
با افزایش حجم دادهها در DOM، کارایی کاهش مییابد، زیرا تمام دادهها به طور همزمان رندر میشوند.
اسکرول مجازی
عملکرد لیستهای بزرگ با رندر کردن فقط قسمتهای قابل مشاهده دادهها بهبود مییابد. تعداد مشخصی از عناصر در DOM نگه داشته میشود و محتوای آنها بسته به موقعیت اسکرول به طور دینامیک بهروزرسانی میشود.
کاربران همچنین لیست را اسکرول میکنند، اما فقط عناصر قابل مشاهده رندر میشوند، که این باعث بهبود عملکرد بهویژه برای لیستهای بسیار بزرگ میشود. این روش فشار بر حافظه را کاهش میدهد و روانی اسکرول را بهبود میبخشد.
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
👍4
پلاگین vite-plugin-json-md
این پلاگین در فایلهای JSON/JSON5 مارکداون را با HTML تبدیلشده جایگزین میکند.
این ابزار به خصوص برای i18n (بینالمللیسازی) مفید است، زمانی که متن ترجمه در فایلهای JSON قرار دارد، اما گاهی اوقات فرمتبندی پیچیدهای در صفحه وجود دارد و تقسیمبندی متن به صورت کلید-مقدار خیلی شلوغ میشود. در چنین مواقعی میتوان متن را از طریق مارکداون نوشت.
این پلاگین هم پشتیبانی از گنجاندن مارکداون به صورت اینلاین و هم لینک به فایلهای مارکداون خارجی را ارائه میدهد.
🔗 https://www.npmjs.com/package/vite-plugin-json-md
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
این پلاگین در فایلهای JSON/JSON5 مارکداون را با HTML تبدیلشده جایگزین میکند.
این ابزار به خصوص برای i18n (بینالمللیسازی) مفید است، زمانی که متن ترجمه در فایلهای JSON قرار دارد، اما گاهی اوقات فرمتبندی پیچیدهای در صفحه وجود دارد و تقسیمبندی متن به صورت کلید-مقدار خیلی شلوغ میشود. در چنین مواقعی میتوان متن را از طریق مارکداون نوشت.
این پلاگین هم پشتیبانی از گنجاندن مارکداون به صورت اینلاین و هم لینک به فایلهای مارکداون خارجی را ارائه میدهد.
🔗 https://www.npmjs.com/package/vite-plugin-json-md
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
npm
npm: vite-plugin-json-md
Vite plugin for processing markdown in JSON files. Latest version: 0.7.2, last published: 3 months ago. Start using vite-plugin-json-md in your project by running `npm i vite-plugin-json-md`. There is 1 other project in the npm registry using vite-plugin…