تخصيص التخطيط
إنشاء تخطيطات مرئية مخصصة لمهام التعليق التوضيحي باستخدام قوالب HTML وCSS.
تخصيص التخطيط
جديد في الإصدار v2.1.0
يوفر Potato طريقتين لتخصيص تخطيط واجهة التعليق التوضيحي:
- التخطيطات المولّدة تلقائياً: يُنشئ Potato ملف تخطيط HTML يمكنك تحريره
- ملفات تخطيط مخصصة: أنشئ قالب HTML الخاص بك مع تحكم كامل في التنسيق
البداية السريعة
استخدام التخطيطات المولّدة تلقائياً
- شغّل الخادم مرة واحدة — ينشئ Potato الملف
layouts/task_layout.html - حرّر الملف المولّد لتخصيص التنسيق
- تبقى تغييراتك عبر عمليات إعادة تشغيل الخادم (ما لم تعدّل
annotation_schemesفي التهيئة)
استخدام ملفات تخطيط مخصصة
- أنشئ ملف التخطيط الخاص بك (مثلاً
layouts/custom_task_layout.html) - أشر إليه في التهيئة:
task_layout: layouts/custom_task_layout.htmlبنية ملف التخطيط
يجب أن يتضمن ملف التخطيط المخصص:
<style>
/* Your custom CSS */
</style>
<div class="annotation_schema">
<!-- Your annotation forms -->
<form id="schema_name" class="annotation-form radio" data-annotation-id="0">
<fieldset schema="schema_name">
<legend>Question text</legend>
<!-- Input elements -->
</fieldset>
</form>
</div>سمات النموذج المطلوبة
يحتاج كل مخطط تعليق توضيحي إلى:
| السمة | الوصف |
|---|---|
id | يجب أن يتطابق مع name في annotation_schemes في التهيئة |
class | تضمين annotation-form والنوع (مثلاً radio، multiselect) |
data-annotation-id | فهرس تسلسلي (0، 1، 2...) |
schema | سمة على fieldset والمدخلات تتطابق مع اسم المخطط |
سمات المدخلات المطلوبة
<input class="schema_name annotation-input"
type="radio"
name="schema_name"
value="label_value"
schema="schema_name"
label_name="label_value"
onclick="onlyOne(this);registerAnnotation(this);">أمثلة على التخطيطات
يتضمن Potato ثلاثة أمثلة على التخطيطات توضح التخصيص المتقدم:
1. لوحة تحكم إدارة المحتوى
الموقع: project-hub/layout-examples/content-moderation/
يتميز بشريط تحذير رأسي مع بيانات وصفية للمحتوى، وشبكة من عمودين لفئات المخالفات، ومستويات خطورة مرمّزة بالألوان، وسير عمل إشراف احترافي.
python -m potato start project-hub/layout-examples/content-moderation/config.yaml -p 80002. أسئلة وأجوبة حوار خدمة العملاء
الموقع: project-hub/layout-examples/dialogue-qa/
يتميز برأس حالة مع شارات بيانات وصفية، وأقسام تقييم مجمّعة، وتقييمات Likert دائرية، وقائمة مراجعة مشاكل الجودة، ومؤشرات حل مرمّزة بالألوان.
python -m potato start project-hub/layout-examples/dialogue-qa/config.yaml -p 80003. مراجعة الصور الطبية
الموقع: project-hub/layout-examples/medical-review/
يتميز بتنسيق واجهة طبية احترافية، وتخطيط من عمودين للموقع/الخطورة، وأقسام نتائج مجمّعة، وتقارير طبية منظّمة، وبطاقات توصيات مع أوصاف.
python -m potato start project-hub/layout-examples/medical-review/config.yaml -p 8000تقنيات CSS
تخطيطات الشبكة
إنشاء تخطيطات متعددة الأعمدة:
.annotation-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
.full-width {
grid-column: 1 / -1;
}
@media (max-width: 768px) {
.annotation-grid {
grid-template-columns: 1fr;
}
}الخيارات المرمّزة بالألوان
تنسيق أزرار الراديو بألوان الخطورة:
.severity-option input[type="radio"] {
position: absolute;
opacity: 0;
}
.severity-label {
display: block;
padding: 10px;
border-radius: 6px;
border: 2px solid transparent;
cursor: pointer;
transition: all 0.2s;
}
/* Green for "None" */
.severity-none .severity-label {
background: #dcfce7;
color: #166534;
}
.severity-none input:checked + .severity-label {
background: #22c55e;
color: white;
}
/* Red for "Severe" */
.severity-severe .severity-label {
background: #fee2e2;
color: #991b1b;
}
.severity-severe input:checked + .severity-label {
background: #ef4444;
color: white;
}تنسيق الأقسام
إنشاء تجميعات مرئية:
.annotation-section {
background: #f8fafc;
border: 1px solid #e2e8f0;
border-radius: 8px;
padding: 16px;
margin-bottom: 16px;
}
.section-title {
font-size: 13px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.05em;
margin-bottom: 12px;
padding-bottom: 8px;
border-bottom: 2px solid #3b82f6;
}تقييمات Likert الدائرية
.likert-circle {
width: 36px;
height: 36px;
border-radius: 50%;
border: 2px solid #e2e8f0;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
}
.likert-option input:checked + .likert-circle {
background: #8b5cf6;
color: white;
border-color: #7c3aed;
}الدمج مع عرض الحالات
تعمل التخطيطات المخصصة جنباً إلى جنب مع تهيئة instance_display. يُعرض محتوى الحالة (صور، نصوص، حوارات) بشكل منفصل فوق نماذج التعليق التوضيحي.
instance_display:
fields:
- key: image_url
type: image
display_options:
zoomable: true
task_layout: layouts/custom_task_layout.html
annotation_schemes:
- annotation_type: radio
name: category
labels: [A, B, C]أفضل الممارسات
- تطابق أسماء المخططات: يجب أن يتطابق
idالنموذج تماماً معnameفيannotation_schemes - معرّفات التعليق التوضيحي التسلسلية: استخدم 0، 1، 2... لـ
data-annotation-id - تضمين المعالجات المطلوبة: استخدم
onclick="onlyOne(this);registerAnnotation(this);"للراديو، وonclick="registerAnnotation(this);"لمربعات الاختيار - اختبار الاستجابة: استخدم استعلامات الوسائط لدعم الأجهزة المحمولة
- الحفاظ على إمكانية الوصول: استخدم التسميات المناسبة وحافظ على التنقل بلوحة المفاتيح
استكشاف الأخطاء وإصلاحها
التعليقات التوضيحية لا تُحفظ
تحقق من:
- تطابق
idالنموذج معnameمخطط التعليق التوضيحي - وجود سمات
schemaوlabel_nameفي المدخلات - وجود معالجات النقر (
registerAnnotation)
الأنماط لا تُطبّق
- تأكد من أن خصوصية CSS عالية بما يكفي لتجاوز الإعدادات الافتراضية
- تحقق من أن كتلة
<style>داخل ملف التخطيط - استخدم أدوات المطور في المتصفح لفحص الأنماط المطبّقة
التخطيط لا يُحمّل
- تحقق من أن المسار في
task_layoutنسبي لملف التهيئة - تحقق من أخطاء بناء جملة HTML
- راجع سجلات الخادم بحثاً عن رسائل الخطأ
قراءات إضافية
- عرض الحالات - تهيئة المحتوى المعروض
- تهيئة واجهة المستخدم - خيارات تخصيص الواجهة
- مخططات التعليق التوضيحي - أنواع التعليق التوضيحي المتاحة
للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.