شما HTML را نمیشناسید:time و data
در HTML دو عنصر نسبتاً نادر وجود دارد: <time> و <data>. عنصر <time> گاهی در صفحاتی دیده میشود که به معناشناسی توجه دارند، اما <data> تقریباً هیچگاه در طبیعت وب مشاهده نمیشود. ویژگی مشترک هر دو عنصر، قابلیت افزودن دادههای machine-readable است.
عنصر <time> برای نشانهگذاری تاریخ، زمان، منطقهٔ زمانی و مدتزمان بر اساس استاندارد بینالمللی ISO 8601 طراحی شده است؛ استانداردی که بسیاری از سیستمها و سرویسها میتوانند آن را مستقیماً پردازش کنند. برای مثال:
استاندارد HTML تصریح میکند که محتوای داخل <time> باید مطابق فرمت معتبر (در اصل مطابق ISO 8601) باشد. اگر متن قابلنمایش این فرمت را رعایت نکند، مقدار معتبر باید در ویژگی datetime درج شود تا امکان پردازش ماشینی فراهم شود:
ویژگی datetime این امکان را میدهد که دادهٔ دقیق و قابلخواندن برای ماشین ذخیره شود (برای موتورهای جستوجو، هوش مصنوعی، پردازشگرها و …)، در حالیکه به کاربر یک نسخهٔ کاملاً انسانخوان مانند «دیروز»، «پنج دقیقه پیش» یا «هفتهٔ گذشته» نمایش داده شود.
عنصر <data> کاربردی مشابه دارد: ارائهٔ یک مقدار انسانخوان همراه با یک مقدار machine-readable. تفاوت مهم این است که <data> برخلاف <time> به هیچ استاندارد خاصی مانند ISO 8601 وابسته نیست و میتواند هر دادهای را بپذیرد.
مقدار قابلنمایش داخل عنصر قرار میگیرد و نسخهٔ ماشینی در ویژگی value نوشته میشود:
شاید در آینده پشتیبانی فناوریهای کمکی از عناصر معناشناختی سطح متن (Text-level semantics) بهبود یابد و <time> و <data> بتوانند زمینهٔ معنایی بیشتری منتقل کنند.
اما اکنون، فایدهٔ آنها بیشتر تئوریک است. با این حال:
برای پردازش سمتکلاینت در JavaScript
برای هوش مصنوعی و پارسرها
برای موتورهای جستوجو
این عناصر میتوانند دادهها را کمی شفافتر و قابلتشخیصتر کنند—و این دقیقاً همان چیزی است که باعث میشود ارزش استفاده داشته باشند.
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
در HTML دو عنصر نسبتاً نادر وجود دارد: <time> و <data>. عنصر <time> گاهی در صفحاتی دیده میشود که به معناشناسی توجه دارند، اما <data> تقریباً هیچگاه در طبیعت وب مشاهده نمیشود. ویژگی مشترک هر دو عنصر، قابلیت افزودن دادههای machine-readable است.
عنصر <time> برای نشانهگذاری تاریخ، زمان، منطقهٔ زمانی و مدتزمان بر اساس استاندارد بینالمللی ISO 8601 طراحی شده است؛ استانداردی که بسیاری از سیستمها و سرویسها میتوانند آن را مستقیماً پردازش کنند. برای مثال:
<!-- تاریخ با سال -->
<time>2025-11-14</time>
<!-- ماه و روز بدون سال -->
<time>11-14</time>
<!-- زمان بدون ثانیه -->
<time>17:03</time>
<!-- تاریخ و زمان با ثانیه -->
<time>2025-11-14T17:03</time>
<!-- منطقهٔ زمانی -->
<time>+0300</time>
<!-- مدتزمان -->
<time>2h 13m 42s</time>
استاندارد HTML تصریح میکند که محتوای داخل <time> باید مطابق فرمت معتبر (در اصل مطابق ISO 8601) باشد. اگر متن قابلنمایش این فرمت را رعایت نکند، مقدار معتبر باید در ویژگی datetime درج شود تا امکان پردازش ماشینی فراهم شود:
<!-- رشتهٔ معتبر مطابق ISO 8601 -->
<time>2025-11-14 17:03</time>
<!-- رشتهٔ نامعتبر، اما مقدار صحیح در ویژگی datetime -->
<time datetime="2025-11-14 17:03">
پنجشنبه، چهاردهم نوامبر، ساعت هفده و سه دقیقه
</time>
ویژگی datetime این امکان را میدهد که دادهٔ دقیق و قابلخواندن برای ماشین ذخیره شود (برای موتورهای جستوجو، هوش مصنوعی، پردازشگرها و …)، در حالیکه به کاربر یک نسخهٔ کاملاً انسانخوان مانند «دیروز»، «پنج دقیقه پیش» یا «هفتهٔ گذشته» نمایش داده شود.
عنصر <data> کاربردی مشابه دارد: ارائهٔ یک مقدار انسانخوان همراه با یک مقدار machine-readable. تفاوت مهم این است که <data> برخلاف <time> به هیچ استاندارد خاصی مانند ISO 8601 وابسته نیست و میتواند هر دادهای را بپذیرد.
مقدار قابلنمایش داخل عنصر قرار میگیرد و نسخهٔ ماشینی در ویژگی value نوشته میشود:
<!-- تاریخ ممکن است، اما برای تاریخها بهتر است از <time> استفاده شود -->
<p>
تاریخ انتشار:
<data value="2025-11-14">
پنجشنبه، چهاردهم نوامبر 2025
</data>
</p>
<!-- شناسه، مدل، SKU، کد کالا یا URL handle -->
<h2>
<data value="GA-B419SWGL">
یخچال LG GA-B419SQGL
</data>
</h2>
<!-- کد ارز (ISO 4217) و قیمت بدون قالببندی -->
<p>
Price:
<data value="USD">$</data>
<data value="119999">1.199,99</data>
</p>
شاید در آینده پشتیبانی فناوریهای کمکی از عناصر معناشناختی سطح متن (Text-level semantics) بهبود یابد و <time> و <data> بتوانند زمینهٔ معنایی بیشتری منتقل کنند.
اما اکنون، فایدهٔ آنها بیشتر تئوریک است. با این حال:
برای پردازش سمتکلاینت در JavaScript
برای هوش مصنوعی و پارسرها
برای موتورهای جستوجو
این عناصر میتوانند دادهها را کمی شفافتر و قابلتشخیصتر کنند—و این دقیقاً همان چیزی است که باعث میشود ارزش استفاده داشته باشند.
#️⃣#tip
👥@IR_javascript_group
🆔@IR_javascript
❤1
یک کتابخانهٔ متنباز از کامپوننتهای Vue ۳ برای بصریسازی داده که کاربران را توانمند میکند و برای روایت بیانی، روان و مؤثرِ دادهها طراحی شده است.
🔗https://vue-data-ui.graphieros.com/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
🔗https://vue-data-ui.graphieros.com/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
❤1🔥1👏1
یک ماژول برای برنامههای Nuxt.
وظیفهٔ آن این است که به توسعهدهنده کمک کند تا نکات و هشدارهای مرتبط با عملکرد، دسترسپذیری (A11Y)، امنیت و دیگر جنبههای مهم برنامه را مشاهده کند.
این ماژول در DevTools مربوط به Nuxt ادغام میشود و یک پنل بصری ارائه میدهد که در آن میتوان دید چه چیزی ضعیف عمل میکند، کجا کندی وجود دارد، بار روی کدام بخش است و موارد مشابه.
🔗https://github.com/nuxt/hints
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
وظیفهٔ آن این است که به توسعهدهنده کمک کند تا نکات و هشدارهای مرتبط با عملکرد، دسترسپذیری (A11Y)، امنیت و دیگر جنبههای مهم برنامه را مشاهده کند.
این ماژول در DevTools مربوط به Nuxt ادغام میشود و یک پنل بصری ارائه میدهد که در آن میتوان دید چه چیزی ضعیف عمل میکند، کجا کندی وجود دارد، بار روی کدام بخش است و موارد مشابه.
🔗https://github.com/nuxt/hints
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
یک چیز پیدا کردم که واقعاً شگفتانگیز است. باز هم یک شاهکار دیگر با Shadow DOM — این بار یک فرازبانی برای توصیف الگوها.
خلاصه اینکه میتوان پسزمینههای فوقالعاده ساخت، بدون آنکه خود را به قابلیتهای گرادیانتهای معمول محدود کنید.
اسم این ابزار <css-doodle/> است.
در آن میتوانید الگوی دلخواهتان را با استفاده از قوانین CSS و یکسری توابع ساده مثل flip، reverse، shape، random و غیره توصیف کنید؛ یک زبان کاملاً اعلامی و قدرتمند.
نمونههای بسیار زیاد، جامعهٔ بزرگ. مثلاً خود نویسنده توضیح داده چطور میتوان یک نقش کلاسیک چینی را فقط با توابع flip–invert–reverse ساخت.
در کل، ابزار واقعاً شگفتانگیزی است.
🔗https://css-doodle.com/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
خلاصه اینکه میتوان پسزمینههای فوقالعاده ساخت، بدون آنکه خود را به قابلیتهای گرادیانتهای معمول محدود کنید.
اسم این ابزار <css-doodle/> است.
در آن میتوانید الگوی دلخواهتان را با استفاده از قوانین CSS و یکسری توابع ساده مثل flip، reverse، shape، random و غیره توصیف کنید؛ یک زبان کاملاً اعلامی و قدرتمند.
نمونههای بسیار زیاد، جامعهٔ بزرگ. مثلاً خود نویسنده توضیح داده چطور میتوان یک نقش کلاسیک چینی را فقط با توابع flip–invert–reverse ساخت.
در کل، ابزار واقعاً شگفتانگیزی است.
🔗https://css-doodle.com/
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
اگر یک جدول را از مرورگر کپی کنید، میتوانید آن را مستقیم در Excel یا Google Sheets جایگذاری کنید و همه چیز مثل یک محدودهٔ واقعی کار خواهد کرد.
اما مسیر برعکس کار نمیکند: اگر دادهای را از Google Sheets کپی کنید و بخواهید در مرورگر بچسبانید، جدول به متن ساده تبدیل میشود و همهٔ ساختارش از بین میرود.
این موضوع گاهی مشکلساز است، مخصوصاً وقتی:
یک فرم با چندین فیلد دارید که شبیه جدول است،
دادههای شما در Google Sheets هستند،
و تنها هدف شما این است که بدون تایپ کردن تکتک خانهها، همهٔ دادهها را وارد فرم کنید.
راهحل: شنود رویداد جایگذاری و توزیع خودکار دادهها
میتوان با جاوااسکریپت یک listener روی رویداد paste اضافه کرد و دادههای کپیشده را از کلیپبورد خواند، سپس آنها را به ترتیب در فیلدهای فرم قرار داد. نمونهٔ ساده:
نتیجهٔ کار
با این کد:
میتوانید یک محدوده از Google Sheets را کپی کنید،
سپس با Ctrl+V در مرورگر بچسبانید،
و دادهها بهصورت خودکار در فیلدهای فرم پخش میشوند، درست مانند کاری که Excel انجام میدهد.
به عبارتی، تجربهٔ کاربر مثل تجربهٔ Excel یا Sheets خواهد بود و نیازی به وارد کردن تکتک سلولها نیست.
نمونه عملی
میتوانید نمونهٔ آماده را اینجا مشاهده کنید:
🔗https://codepen.io/alinaki/pen/KwzvEeX
#️⃣#code
👥@IR_javascript_group
🆔@IR_javascript
اما مسیر برعکس کار نمیکند: اگر دادهای را از Google Sheets کپی کنید و بخواهید در مرورگر بچسبانید، جدول به متن ساده تبدیل میشود و همهٔ ساختارش از بین میرود.
این موضوع گاهی مشکلساز است، مخصوصاً وقتی:
یک فرم با چندین فیلد دارید که شبیه جدول است،
دادههای شما در Google Sheets هستند،
و تنها هدف شما این است که بدون تایپ کردن تکتک خانهها، همهٔ دادهها را وارد فرم کنید.
راهحل: شنود رویداد جایگذاری و توزیع خودکار دادهها
میتوان با جاوااسکریپت یک listener روی رویداد paste اضافه کرد و دادههای کپیشده را از کلیپبورد خواند، سپس آنها را به ترتیب در فیلدهای فرم قرار داد. نمونهٔ ساده:
document.addEventListener("paste", function (e) {
// گرفتن دادهها از کلیپبورد
const text = e.clipboardData.getData("text");
// تبدیل متن به آرایهٔ دو بعدی: سطرها و ستونها
const rows = text.trim().split(/\r?\n/).map(r => r.split("\t"));
// گرفتن همهٔ inputهای فرم
const inputs = [...document.querySelectorAll("input")];
let index = 0;
// پر کردن inputها به ترتیب دادهها
for (const row of rows) {
for (const cell of row) {
if (inputs[index]) {
inputs[index].value = cell;
index++;
}
}
}
// جلوگیری از رفتار پیشفرض مرورگر
e.preventDefault();
});
نتیجهٔ کار
با این کد:
میتوانید یک محدوده از Google Sheets را کپی کنید،
سپس با Ctrl+V در مرورگر بچسبانید،
و دادهها بهصورت خودکار در فیلدهای فرم پخش میشوند، درست مانند کاری که Excel انجام میدهد.
به عبارتی، تجربهٔ کاربر مثل تجربهٔ Excel یا Sheets خواهد بود و نیازی به وارد کردن تکتک سلولها نیست.
نمونه عملی
میتوانید نمونهٔ آماده را اینجا مشاهده کنید:
🔗https://codepen.io/alinaki/pen/KwzvEeX
#️⃣#code
👥@IR_javascript_group
🆔@IR_javascript
codepen.io
Copy and paste to a table
...
Perspective 4.0
مولفه تحلیل داده و تجسم داده با عملکرد بالا
(وبسایت رسمی: https://perspective-dev.github.io/)
در ابتدا توسط شرکت جیپی مورگان ساخته شده، این مولفه تجسم داده که با زبان ++C توسعه یافته و به WebAssembly کامپایل شده، برای مجموعهدادههای بزرگ و جریانی در زمان واقعی بسیار مناسب است. در نسخهی نمایشی صفحهی اصلی، میتوانید انواع تجسم را با سرعت تا ۱۰۰۰ تغییر در ثانیه آزمایش کنید.
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
مولفه تحلیل داده و تجسم داده با عملکرد بالا
(وبسایت رسمی: https://perspective-dev.github.io/)
در ابتدا توسط شرکت جیپی مورگان ساخته شده، این مولفه تجسم داده که با زبان ++C توسعه یافته و به WebAssembly کامپایل شده، برای مجموعهدادههای بزرگ و جریانی در زمان واقعی بسیار مناسب است. در نسخهی نمایشی صفحهی اصلی، میتوانید انواع تجسم را با سرعت تا ۱۰۰۰ تغییر در ثانیه آزمایش کنید.
#️⃣#npm_module
👥@IR_javascript_group
🆔@IR_javascript
«نفرتانگیزترین» قابلیتها در CSS
بر اساس نتایج نظرسنجی State of CSS دو هزار و بیستوپنج، توابع مثلثاتی در بخش Most Hated اول شدند. تنها نهویکدهم درصد از شرکتکنندگان اعلام کردند که این قابلیت را واقعاً دوست ندارند، اما همین مقدار کافی بود تا به صدر جدول برسد.
خوان دیِگو رودریگس به همین مناسبت مجموعهای مقاله نوشت و با دموی کاربردی نشان داد که مثلثات در بخشهای خاصی از رابط کاربری میتواند بسیار مفید واقع شود.
این ویژگیها اکنون Baseline Widely Available هستند؛ یعنی نه قابلیتهای تازهمتولدشده یا ناکارآمد، بلکه امکاناتی پایدار و قابل اتکا.
🔗https://css-tricks.com/the-most-hated-css-feature-cos-and-sin/
🔗https://css-tricks.com/the-most-hated-css-feature-tan/
🔗https://css-tricks.com/the-most-hated-css-feature-asin-acos-atan-and-atan2/
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript
بر اساس نتایج نظرسنجی State of CSS دو هزار و بیستوپنج، توابع مثلثاتی در بخش Most Hated اول شدند. تنها نهویکدهم درصد از شرکتکنندگان اعلام کردند که این قابلیت را واقعاً دوست ندارند، اما همین مقدار کافی بود تا به صدر جدول برسد.
خوان دیِگو رودریگس به همین مناسبت مجموعهای مقاله نوشت و با دموی کاربردی نشان داد که مثلثات در بخشهای خاصی از رابط کاربری میتواند بسیار مفید واقع شود.
این ویژگیها اکنون Baseline Widely Available هستند؛ یعنی نه قابلیتهای تازهمتولدشده یا ناکارآمد، بلکه امکاناتی پایدار و قابل اتکا.
🔗https://css-tricks.com/the-most-hated-css-feature-cos-and-sin/
🔗https://css-tricks.com/the-most-hated-css-feature-tan/
🔗https://css-tricks.com/the-most-hated-css-feature-asin-acos-atan-and-atan2/
#️⃣#tip #css
👥@IR_javascript_group
🆔@IR_javascript