This media is not supported in your browser
VIEW IN TELEGRAM
روشی خشن و متفاوت برای فعال کردن حالت تاریک در سایت
با انیمیشن بومی و قابل تنظیم.
فقط با دو خط JavaScript و کمی CSS:
🔗 theme-toggle.rdsx.dev
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
با انیمیشن بومی و قابل تنظیم.
فقط با دو خط JavaScript و کمی CSS:
🔗 theme-toggle.rdsx.dev
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
👍2
دنو (deno) محیط اجرای محبوب JavaScript، حالا امکان تبدیل پروژههای JavaScript و TypeScript به اپلیکیشنهای دسکتاپ برای Windows، macOS و Linux را فراهم کرده است.
میتوانید بین استفاده از WebView سیستمعامل یا موتور داخلی Chromium انتخاب کنید. علاوه بر این، فریمورکهایی مانند Next.js و SvelteKit نیز بهصورت پیشفرض پشتیبانی میشوند.
🔗 مستندات Deno Desktop
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
میتوانید بین استفاده از WebView سیستمعامل یا موتور داخلی Chromium انتخاب کنید. علاوه بر این، فریمورکهایی مانند Next.js و SvelteKit نیز بهصورت پیشفرض پشتیبانی میشوند.
🔗 مستندات Deno Desktop
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
قابلیت
این قابلیت از دسامبر دو هزار و بیستوسه در تمام مرورگرهای اصلی پشتیبانی میشود و در بیشتر موارد میتوان با خیال راحت از آن استفاده کرد.
اگر برای تعداد زیادی رشته که URL نیستند، تابعی مانند
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
URL.canParse() — حالا بخشی از قابلیتهای Baseline Widely Available است.این قابلیت از دسامبر دو هزار و بیستوسه در تمام مرورگرهای اصلی پشتیبانی میشود و در بیشتر موارد میتوان با خیال راحت از آن استفاده کرد.
اگر برای تعداد زیادی رشته که URL نیستند، تابعی مانند
isValidUrl() را اجرا میکنید، استفاده از URL.canParse() میتواند عملکرد را بهطور محسوسی بهبود دهد؛ زیرا دیگر لازم نیست برای کنترل جریان اجرای برنامه، به ایجاد و مدیریت خطاها متکی باشید.#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
This media is not supported in your browser
VIEW IN TELEGRAM
ویژگی
این ویژگی به شما اجازه میدهد اسکرول را در فاصلهای مشخص از لبهٔ کانتینر متوقف کنید.
میتوانید از ویژگی کوتاهشدهٔ
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
scroll-paddingاین ویژگی به شما اجازه میدهد اسکرول را در فاصلهای مشخص از لبهٔ کانتینر متوقف کنید.
میتوانید از ویژگی کوتاهشدهٔ
scroll-padding یا ویژگیهای دقیقتر و جایگزین آن، یعنی scroll-padding-*، استفاده کنید.#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
This media is not supported in your browser
VIEW IN TELEGRAM
یک کتابخانهٔ عالی JavaScript برای ساخت اسلایدر و کاروسل که شما را از پیادهسازی همهچیز از صفر بینیاز میکند.
جایگزینی سبک و کاربردی برای Swiper 👍
🔗Splide.js
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
جایگزینی سبک و کاربردی برای Swiper 👍
🔗Splide.js
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
👍3
شاید ندانید که روشی برای جلوگیری از پردازش خودکار بکاسلشها در رشتهها وجود دارد.
از
بهعبارت دیگر،
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
از
String.raw استفاده کنید. این قابلیت رشته را همانطور که نوشته شده برمیگرداند و دنبالههای escape مانند \t و \n را پردازش نمیکند.بهعبارت دیگر،
\ و t را بهعنوان دو کاراکتر مجزا در نظر میگیرد و بکاسلش را در رشتهٔ خروجی بهصورت خودکار حفظ میکند.#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
Media is too big
VIEW IN TELEGRAM
ماژول Blossom یک سیستم متنباز برای ساخت کاروسلهاست که مجموعهٔ بزرگی از الگوهای زیبا و نمونههای آماده را در اختیار شما قرار میدهد.
همچنین مجموعهای از Skillها برای عاملهای هوش مصنوعی ارائه میکند و از React، Vue، Svelte و Web Components نیز پشتیبانی میکند.
🔗github.com/jespervos/blossom-carousel
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
همچنین مجموعهای از Skillها برای عاملهای هوش مصنوعی ارائه میکند و از React، Vue، Svelte و Web Components نیز پشتیبانی میکند.
🔗github.com/jespervos/blossom-carousel
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
❤1
درک مفاهیم گیت برای همه چندان ساده نیست. بعضیها خیلی سریع آن را یاد میگیرند، بعضی دیگر میان شاخهها و برگهای مستندات گم میشوند و با زحمت راه خود را پیدا میکنند. عدهای هم کلاً بیخیال همهچیز میشوند، از رابط کاربری محبوب IDE خود استفاده میکنند و هیچچیز پیچیدهتر از
اما اگر یک شبیهساز وجود داشت که آنچه در پشت صحنه اتفاق میافتد را نشان میداد، کار چقدر سادهتر میشد. جالب اینجاست که چنین ابزاری واقعاً وجود دارد!
نام آن git-sim است؛ دقیقاً همینقدر ساده و مستقیم.
میخواهید یک
راستی، لینک نمونههایی که سازندگان منتشر کردهاند (شامل ویدئوها و تصاویر آموزشی فراوان):
🔗https://initialcommit.com/tools/git-sim
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
git pull origin master را مدیریت نمیکنند.اما اگر یک شبیهساز وجود داشت که آنچه در پشت صحنه اتفاق میافتد را نشان میداد، کار چقدر سادهتر میشد. جالب اینجاست که چنین ابزاری واقعاً وجود دارد!
نام آن git-sim است؛ دقیقاً همینقدر ساده و مستقیم.
میخواهید یک
cherry-pick همراه با تداخل را مدیریت کنید؟ چند شاخه را با هم ادغام کنید؟ پیامدهای reset، stash یا rebase را ببینید؟ بهراحتی امکانپذیر است! فقط کافی است به جای git دستور موردنظر را با git-sim اجرا کنید و از نتیجه لذت ببرید.راستی، لینک نمونههایی که سازندگان منتشر کردهاند (شامل ویدئوها و تصاویر آموزشی فراوان):
🔗https://initialcommit.com/tools/git-sim
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
Drydock: تفاوت بستههای npm را پیش از انتشار بررسی کنید
ابزاری از یکی از اعضای تیم اصلی Preact که بستههای ساختهشدهی npm (
سپس میتواند انتشار در فرایند GitHub Actions را کنترل کند یا جریان جدید انتشار مرحلهای npm را زیر نظر بگیرد.
🔗https://drydock.org/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
ابزاری از یکی از اعضای تیم اصلی Preact که بستههای ساختهشدهی npm (
npm tarballs) را با آخرین نسخهی منتشرشده مقایسه میکند و مواردی مانند اسکریپتهای نصب، دسترسیهای شبکه و باینریهای جدید را علامتگذاری میکند.سپس میتواند انتشار در فرایند GitHub Actions را کنترل کند یا جریان جدید انتشار مرحلهای npm را زیر نظر بگیرد.
🔗https://drydock.org/
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
Vanilla Disintegrate — انیمیشنهای مدرن و چشمنواز برای وب
چه نوع انیمیشنهایی معمولاً در وب دیده میشوند؟ ظاهر شدن، ناپدید شدن، جابهجاییهای کوچک و تغییر مقیاس. این انیمیشنها لزوماً بد نیستند؛ در بیشتر مواقع، رابط کاربری واقعاً به چیزی پیچیدهتر از اینها نیاز ندارد. گاهی بهترین تصمیم این است که اصلاً هیچ انیمیشنی اضافه نکنیم. به این ترتیب، رابط کاربری سریع، قابلدرک و متمرکز بر هدف اصلی باقی میماند.
اما گاهی دوست داریم یک لحظهی کوچک را بهیادماندنی کنیم. نه یک صفحهی آغازین طولانی و نه یک جلوهی ویژهی سنگین برای تمام صفحه؛ بلکه یک واکنش کوتاه به تعامل کاربر. کمتر از یک ثانیه کافی است تا حذف یک کارت، ظاهر شدن یک عنصر یا لغو یک عملیات، کاملاً حس متفاوتی پیدا کند.
🔗https://disintegrate.uvarov.tech/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
چه نوع انیمیشنهایی معمولاً در وب دیده میشوند؟ ظاهر شدن، ناپدید شدن، جابهجاییهای کوچک و تغییر مقیاس. این انیمیشنها لزوماً بد نیستند؛ در بیشتر مواقع، رابط کاربری واقعاً به چیزی پیچیدهتر از اینها نیاز ندارد. گاهی بهترین تصمیم این است که اصلاً هیچ انیمیشنی اضافه نکنیم. به این ترتیب، رابط کاربری سریع، قابلدرک و متمرکز بر هدف اصلی باقی میماند.
اما گاهی دوست داریم یک لحظهی کوچک را بهیادماندنی کنیم. نه یک صفحهی آغازین طولانی و نه یک جلوهی ویژهی سنگین برای تمام صفحه؛ بلکه یک واکنش کوتاه به تعامل کاربر. کمتر از یک ثانیه کافی است تا حذف یک کارت، ظاهر شدن یک عنصر یا لغو یک عملیات، کاملاً حس متفاوتی پیدا کند.
🔗https://disintegrate.uvarov.tech/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
👍4
کاربر اندازهی فونت را در تنظیمات سیستمعامل افزایش میدهد، برنامهها این ترجیح را دریافت و اعمال میکنند، اما مرورگرها توجهی به آن ندارند.
در اندروید، فایرفاکس مقیاس متن سیستم را در نظر میگیرد، اما کروم این کار را انجام نمیدهد؛ در iOS نیز قابلیت Dynamic Type برای صفحات معمولی وب در سافاری اعمال نمیشود. در نتیجه، ممکن است یک وبسایت با تنظیمات پیشفرض کاملاً مناسب به نظر برسد، اما برای کاربری که به افزایش اندازهی متن سیستم متکی است، تقریباً غیرقابلاستفاده باشد.
قرار است راهی در اختیار صفحه قرار دهد تا بهصورت صریح از این ترجیح کاربر پشتیبانی کند. مرورگر ضریب مقیاس متن انتخابشده توسط کاربر را در اندازهی پایهی فونت وارد میکند و سپس این مقیاس بهصورت طبیعی از طریق CSS گسترش پیدا میکند: واحد
🔗https://drafts.csswg.org/css-fonts-۵/#text-scale-meta
🔗https://www.matuzo.at/blog/2026/text-scaling-meta-tag
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript`
در اندروید، فایرفاکس مقیاس متن سیستم را در نظر میگیرد، اما کروم این کار را انجام نمیدهد؛ در iOS نیز قابلیت Dynamic Type برای صفحات معمولی وب در سافاری اعمال نمیشود. در نتیجه، ممکن است یک وبسایت با تنظیمات پیشفرض کاملاً مناسب به نظر برسد، اما برای کاربری که به افزایش اندازهی متن سیستم متکی است، تقریباً غیرقابلاستفاده باشد.
<meta name="text-scale" content="scale">قرار است راهی در اختیار صفحه قرار دهد تا بهصورت صریح از این ترجیح کاربر پشتیبانی کند. مرورگر ضریب مقیاس متن انتخابشده توسط کاربر را در اندازهی پایهی فونت وارد میکند و سپس این مقیاس بهصورت طبیعی از طریق CSS گسترش پیدا میکند: واحد
rem از اندازهی پایهی جدید پیروی میکند، در حالی که px همچنان ثابت باقی میماند.🔗https://drafts.csswg.org/css-fonts-۵/#text-scale-meta
🔗https://www.matuzo.at/blog/2026/text-scaling-meta-tag
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript`
👍2
CSS بالاخره امکان انیمیشن دادن به عناصر هنگام اولین نمایش آنها را فراهم کرد
پیش از این،
حالا میتوان حالت اولیهی عنصر را مستقیماً با CSS خالص تعریف کرد. ساده، قدرتمند و قابلیتی که مدتها جای آن خالی بود 💪
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript`
@starting-style اکنون بخشی از Baseline محسوب میشود و از اوت دو هزار و بیستوچهار در دسترس قرار گرفته است. در حال حاضر حدود نود درصد پوشش جهانی دارد!پیش از این،
transition هنگام اولین تغییر استایل یک عنصر اجرا نمیشد و مجبور بودیم با ترفندهای مختلف در جاوااسکریپت این مشکل را دور بزنیم.حالا میتوان حالت اولیهی عنصر را مستقیماً با CSS خالص تعریف کرد. ساده، قدرتمند و قابلیتی که مدتها جای آن خالی بود 💪
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript`
👌2❤1
This media is not supported in your browser
VIEW IN TELEGRAM
با اعمال
اما یک مشکل وجود دارد: هنگام اسکرول، آخرین ردیف جدول زیر همین سربرگ مخفی میشود و ظاهر چندان خوبی ندارد؛ مخصوصاً زمانی که جدول فقط شامل متن ساده نیست و مواردی مانند شرایط مقایسه، تصاویر و موارد مشابه در آن وجود دارد.
اما راهحل ساده است!
کافی است به
توجه کنید که
البته جمع کردن مار با طوطی را که همیشه بلد بودیم!
بله، شاید در نگاه اول چندان بدیهی نباشد، اما نتیجه این است که جدول حالا ظاهر فوقالعادهای پیدا میکند:
🔗https://codepen.io/alinaki/pen/JojeGMY?editors=0100
#️⃣#tip #css #code
👥@IR_javascript_group
🆔@IR_javascript`
position: sticky روی سربرگ جدول، میتوان یک پیادهسازی زیبا و قابلفهم از هدر چسبان (Sticky Header) داشت.اما یک مشکل وجود دارد: هنگام اسکرول، آخرین ردیف جدول زیر همین سربرگ مخفی میشود و ظاهر چندان خوبی ندارد؛ مخصوصاً زمانی که جدول فقط شامل متن ساده نیست و مواردی مانند شرایط مقایسه، تصاویر و موارد مشابه در آن وجود دارد.
اما راهحل ساده است!
کافی است به
thead یک margin-bottom به اندازهی ارتفاع کامل یک ردیف اضافه کنیم:margin-bottom: calc(1lh + 20px);
توجه کنید که
1lh یک واحد اندازهگیری واقعی در CSS است که اجازه میدهد به مقدار line-height یا همان ارتفاع خط دسترسی داشته باشیم.البته جمع کردن مار با طوطی را که همیشه بلد بودیم!
بله، شاید در نگاه اول چندان بدیهی نباشد، اما نتیجه این است که جدول حالا ظاهر فوقالعادهای پیدا میکند:
🔗https://codepen.io/alinaki/pen/JojeGMY?editors=0100
#️⃣#tip #css #code
👥@IR_javascript_group
🆔@IR_javascript`
👍3
واژهٔ «مدل» این روزها معمولاً چیزی با هفت تا هفتاد میلیارد پارامتر و دهها گیگابایت وزن را در ذهن تداعی میکند. اما مدل اصلاً مجبور نیست چنین ابعادی داشته باشد.
کتابخانهای به نام gpu-lexer ساخته شده است؛ یک کتابخانه برای هایلایت کردن کد که بهجای مجموعهای از گرامرها، از یک مدل آموزشدیده با تنها چهلویک هزار و سیصد و بیستویک پارامتر استفاده میکند.
وزنهای مدل با دقت ششبیتی فشرده شدهاند و کل بستهٔ مورد استفاده در مرورگر، در حالت فشرده، تنها بیستوهفت ممیز چهار کیلوبایت حجم دارد.
این کتابخانه از طریق WebGPU اجرا میشود.
برای مقایسه، نویسنده حجم تقریبی صد و شصتودو کیلوبایت برای Prism، دویستوچهل کیلوبایت برای Highlight.js و نهصد و نودودو کیلوبایت برای مجموعهٔ کامل Shiki را ذکر میکند.
البته این رویکرد اساساً مبتنی بر یادگیری ماشین است؛ بنابراین نتیجه مانند روشهای مبتنی بر قواعد، قطعی و تضمینشده نیست. خروجی آن با Shiki در حدود هشتادوهشت تا نود درصد توکنها مطابقت دارد.
🔗https://gpu-lexer.vercel.app/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
کتابخانهای به نام gpu-lexer ساخته شده است؛ یک کتابخانه برای هایلایت کردن کد که بهجای مجموعهای از گرامرها، از یک مدل آموزشدیده با تنها چهلویک هزار و سیصد و بیستویک پارامتر استفاده میکند.
وزنهای مدل با دقت ششبیتی فشرده شدهاند و کل بستهٔ مورد استفاده در مرورگر، در حالت فشرده، تنها بیستوهفت ممیز چهار کیلوبایت حجم دارد.
این کتابخانه از طریق WebGPU اجرا میشود.
برای مقایسه، نویسنده حجم تقریبی صد و شصتودو کیلوبایت برای Prism، دویستوچهل کیلوبایت برای Highlight.js و نهصد و نودودو کیلوبایت برای مجموعهٔ کامل Shiki را ذکر میکند.
البته این رویکرد اساساً مبتنی بر یادگیری ماشین است؛ بنابراین نتیجه مانند روشهای مبتنی بر قواعد، قطعی و تضمینشده نیست. خروجی آن با Shiki در حدود هشتادوهشت تا نود درصد توکنها مطابقت دارد.
🔗https://gpu-lexer.vercel.app/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
❤1
مثلاً
این فایل کمک میکند مشخص کنیم با فایلهای مختلف چه رفتاری داشته باشیم. مثلاً استراتژی ادغام: به Git میگوید اگر هنگام merge تعارضی در
و تمام؛ مسئله به شکل موردنظر حل میشود. یا فرض کنید دارید برای چند پلتفرم مختلف توسعه میدهید:
اهمیت خطوط بالا برای خود Git این است که Git باید بتواند تشخیص دهد تغییرات یک فایل واقعاً تغییر محتوایی بوده یا فقط بهخاطر تفاوت سیستمعامل، پایان خطها عوض شده است.
مثلاً فرض کن روی ویندوز فایل اینطور باشد:
و روی Linux همان فایل:
از دید انسان، هیچ تفاوت محتوایی وجود ندارد؛ اما اگر Git این موضوع را درست مدیریت نکند، ممکن است تغییر پایان خطها را به شکل یک تغییر بزرگ ببیند.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
gitignore. که دیگر کاملاً مشخص است. اما gitattributes. چطور؟این فایل کمک میکند مشخص کنیم با فایلهای مختلف چه رفتاری داشته باشیم. مثلاً استراتژی ادغام: به Git میگوید اگر هنگام merge تعارضی در
package-lock.json ایجاد شد، نسخهٔ شاخهٔ فعلی (ours) را نگه دارpackage-lock.json merge=ours
و تمام؛ مسئله به شکل موردنظر حل میشود. یا فرض کنید دارید برای چند پلتفرم مختلف توسعه میدهید:
*.sh text eol=lf
*.bat text eol=crlf
اهمیت خطوط بالا برای خود Git این است که Git باید بتواند تشخیص دهد تغییرات یک فایل واقعاً تغییر محتوایی بوده یا فقط بهخاطر تفاوت سیستمعامل، پایان خطها عوض شده است.
مثلاً فرض کن روی ویندوز فایل اینطور باشد:
line 1\r\n
line 2\r\n
line 3\r\n
و روی Linux همان فایل:
line 1\n
line 2\n
line 3\n
از دید انسان، هیچ تفاوت محتوایی وجود ندارد؛ اما اگر Git این موضوع را درست مدیریت نکند، ممکن است تغییر پایان خطها را به شکل یک تغییر بزرگ ببیند.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
❤2
فرض کن یک نفر در طول زمان با چند ایمیل مختلف commit زده:
از نظر Git اینها سه هویت متفاوت به نظر میرسند.
اما میخواهی Git همه را به این هویت نسبت بدهد:
در
یعنی:
هر commit قدیمی که با
ثبت شده، در گزارشهای Git با
نمایش داده شود.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
Ali Ahmadi <ali@gmail.com>
Ali Ahmadi <ali@company.com>
A. Ahmadi <ali@old-company.com>
از نظر Git اینها سه هویت متفاوت به نظر میرسند.
اما میخواهی Git همه را به این هویت نسبت بدهد:
Ali Ahmadi <ali@company.com>
در
.mailmap میتوانی بنویسی:Ali Ahmadi <ali@company.com> <ali@gmail.com>
Ali Ahmadi <ali@company.com> <ali@old-company.com>
یعنی:
هر commit قدیمی که با
ali@gmail.comثبت شده، در گزارشهای Git با
Ali Ahmadi <ali@company.com>نمایش داده شود.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
فرض کن در پروژهتان میخواهید همهٔ اعضای تیم پیام Commit را یکشکل بنویسند.
مثلاً بهجای اینکه هرکس هر چیزی بنویسد:
میخواهید ساختار مشخصی داشته باشید:
اول یک فایل قالب میسازی
مثلاً:
داخلش:
بعد به Git میگویی از این فایل بهعنوان قالب Commit استفاده کند:
حالا وقتی بزنی:
ویرایشگر Git با این قالب باز میشود:
مثلاً آن را کامل میکنی:
بعد فایل را ذخیره میکنی و Commit ساخته میشود.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
مثلاً بهجای اینکه هرکس هر چیزی بنویسد:
fix login
login bug
update
تغییرات لاگین
fix stuff
میخواهید ساختار مشخصی داشته باشید:
نوع: عنوان کوتاه
توضیحات:
- چه چیزی تغییر کرد؟
- چرا تغییر کرد؟
اول یک فایل قالب میسازی
مثلاً:
.gitmessage
داخلش:
<type>: <short description>
Why:
-
What:
-
بعد به Git میگویی از این فایل بهعنوان قالب Commit استفاده کند:
git config --global commit.template ~/.gitmessage
حالا وقتی بزنی:
git commit
ویرایشگر Git با این قالب باز میشود:
feat: <short description>
Why:
-
What:
-
مثلاً آن را کامل میکنی:
feat: add inactivity logout
Why:
- Automatically logout inactive users after 15 minutes.
What:
- Added inactivity monitor
- Added activity tracking to API requests
- Added automatic redirect to login
بعد فایل را ذخیره میکنی و Commit ساخته میشود.
#️⃣#tool
👥@IR_javascript_group
🆔@IR_javascript
👍2👎1
<mermaid-element>
یک کتابخانهٔ کاربردی دیگر. براموس یک عنصر سفارشی (Custom Element) توسعه داده است که میتوان سینتکس نمودارهای Mermaid را درون آن قرار داد و نمودار بهصورت خودکار در صفحه رندر میشود.
اگر با Mermaid آشنایی ندارید، باید گفت که Mermaid ابزاری است که سینتکس متنی مانند
را به یک نمودار توالی (Sequence Diagram) تبدیل میکند.
علاوه بر نمودارهای توالی، بیش از سی نوع نمودار مختلف را نیز پشتیبانی میکند؛ نمودارهایی که میتوان از آنها در مستندسازی و فرایندهای کاری مختلف استفاده کرد.
🔗https://www.bram.us/2026/09/10/introducing-mermaid-element-a-custom-element-to-display-mermaid-diagrams/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
یک کتابخانهٔ کاربردی دیگر. براموس یک عنصر سفارشی (Custom Element) توسعه داده است که میتوان سینتکس نمودارهای Mermaid را درون آن قرار داد و نمودار بهصورت خودکار در صفحه رندر میشود.
اگر با Mermaid آشنایی ندارید، باید گفت که Mermaid ابزاری است که سینتکس متنی مانند
sequenceDiagram
Alice->>John: Hello John, how are you?
John-->>Alice: Great!
Alice-)John: See you later!
را به یک نمودار توالی (Sequence Diagram) تبدیل میکند.
علاوه بر نمودارهای توالی، بیش از سی نوع نمودار مختلف را نیز پشتیبانی میکند؛ نمودارهایی که میتوان از آنها در مستندسازی و فرایندهای کاری مختلف استفاده کرد.
🔗https://www.bram.us/2026/09/10/introducing-mermaid-element-a-custom-element-to-display-mermaid-diagrams/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
Bram.us
Introducing <mermaid-element>, a custom element to display Mermaid diagrams
Today I learned that CodePen supports Mermaid diagrams — Chris Coyier has a a whole collection with examples here — and I also learned that there is no custom element to easily include these in your markup … so I built one.
❤1👍1
MicroLighter
اول اینکه بر پایهٔ TextMate کار میکند؛ بنابراین اگر به گرامر خاصی نیاز داشته باشید، اضافه کردن آن نسبتاً ساده است.
دوم اینکه حجم آن تنها دو کیلوبایت بهصورت gzip است که واقعاً کم محسوب میشود. کتابخانههای دیگری که من میشناسم، معمولاً چیزی بین هفت تا سیصد کیلوبایت حجم دارند.
سوم اینکه در HTML شما «دستکاری اضافه» ایجاد نمیکند. دلیلش این است که در پشت صحنه از Custom Highlight API استفاده میکند؛ یعنی برای نشانهگذاری بخشهای مختلف کد، تعداد زیادی
احتمالاً در اینجا دوباره میگویید: «پس حتماً بهجز Chrome و آن هم پشت یک فلگ، جای دیگری کار نمیکند!» من هم تا همین امروز صبح همین تصور را داشتم. اما ظاهراً از مارس سال دو هزار و بیستوشش این API در تمام مرورگرهای اصلی بهطور کامل قابل استفاده است.
بنابراین میتوانید یک راهکار بارگذاری هوشمند داشته باشید؛ به این صورت که برای مرورگرهای مدرن از MicroLighter استفاده کنید و برای مرورگرهای قدیمیتر یک هایلایتر جایگزین در نظر بگیرید. یا اگر هایلایت کردن کد در برنامهٔ شما بیشتر یک قابلیت جانبی و تکمیلی است، میتوانید فقط MicroLighter را بارگذاری کنید و کار را ساده نگه دارید
🔗https://davatron5000.github.io/microlighter/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
اول اینکه بر پایهٔ TextMate کار میکند؛ بنابراین اگر به گرامر خاصی نیاز داشته باشید، اضافه کردن آن نسبتاً ساده است.
دوم اینکه حجم آن تنها دو کیلوبایت بهصورت gzip است که واقعاً کم محسوب میشود. کتابخانههای دیگری که من میشناسم، معمولاً چیزی بین هفت تا سیصد کیلوبایت حجم دارند.
سوم اینکه در HTML شما «دستکاری اضافه» ایجاد نمیکند. دلیلش این است که در پشت صحنه از Custom Highlight API استفاده میکند؛ یعنی برای نشانهگذاری بخشهای مختلف کد، تعداد زیادی
span و div به ساختار HTML اضافه نمیکند، بلکه از قابلیتهای داخلی مرورگر استفاده میکند تا بعداً بتواند با ::highlight(token) در CSS، استایل مناسب را روی بخشهای مختلف اعمال کند.احتمالاً در اینجا دوباره میگویید: «پس حتماً بهجز Chrome و آن هم پشت یک فلگ، جای دیگری کار نمیکند!» من هم تا همین امروز صبح همین تصور را داشتم. اما ظاهراً از مارس سال دو هزار و بیستوشش این API در تمام مرورگرهای اصلی بهطور کامل قابل استفاده است.
بنابراین میتوانید یک راهکار بارگذاری هوشمند داشته باشید؛ به این صورت که برای مرورگرهای مدرن از MicroLighter استفاده کنید و برای مرورگرهای قدیمیتر یک هایلایتر جایگزین در نظر بگیرید. یا اگر هایلایت کردن کد در برنامهٔ شما بیشتر یک قابلیت جانبی و تکمیلی است، میتوانید فقط MicroLighter را بارگذاری کنید و کار را ساده نگه دارید
🔗https://davatron5000.github.io/microlighter/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
Uppy شش: آپلودکنندهٔ ماژولار فایل برای جاوااسکریپت
امکان آپلود قابلادامه از دیسک، دراپباکس یا گوگلدرایو، همراه با بستههای سازگار برای React، Vue، Svelte و Angular. تمرکز این نسخه بر سادهسازی و پاکسازی ساختار است؛ از جمله بازنویسی افزونهٔ S3 و کاهش تعداد بستههایی که باید مدیریت شوند.
🔗https://uppy.io/blog/uppy-6.0/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
امکان آپلود قابلادامه از دیسک، دراپباکس یا گوگلدرایو، همراه با بستههای سازگار برای React، Vue، Svelte و Angular. تمرکز این نسخه بر سادهسازی و پاکسازی ساختار است؛ از جمله بازنویسی افزونهٔ S3 و کاهش تعداد بستههایی که باید مدیریت شوند.
🔗https://uppy.io/blog/uppy-6.0/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript`
uppy.io
Uppy by Transloadit - Open source JavaScript file uploader
The open source JavaScript file uploader. Resumable uploads from disk, Dropbox or Google Drive, for React, Next.js, Vue, Svelte and Angular.
❤1
دیگر به initial-scale نیازی ندارید
احتمالاً در جایی از کدهای رابط کاربریتان، عبارت
اما نکته اینجاست که میتوانید
پس میتوانیم چند بایت از حجم کد را هم صرفهجویی کنیم.
🔗https://quirksmode.org/quirksblog/2026/0902-initial.html
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript`
احتمالاً در جایی از کدهای رابط کاربریتان، عبارت
<meta name="viewport" content="width=device-width,initial-scale=1"> وجود دارد. تقریباً همه این مورد را دارند؛ چون Emmet آن را بهصورت خودکار اضافه میکند و قالبهای مختلف Bootstrap هم همین کار را انجام میدهند.اما نکته اینجاست که میتوانید
initial-scale را حذف کنید. این ویژگی در گذشته لازم بود تا چرخاندن صفحه در آیفون رفتاری مشابه سایر گوشیهای هوشمند داشته باشد. اما اپل مدتهاست این ناسازگاری را برطرف کرده است.پس میتوانیم چند بایت از حجم کد را هم صرفهجویی کنیم.
🔗https://quirksmode.org/quirksblog/2026/0902-initial.html
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript`
quirksmode.org
initial-scale no longer needed
Fifteen years ago I helped popularise the meta viewport width=device-width,initial-scale=1. Today I found out the second bit is no longer necessary. A retrospective.
👍3