Download layouts/custom_task_layout.html from Blablablab/content-moderation: direct link, hf CLI and curl.
- Browser
- Download file 21.6 kB
-
https://huggingface.co/spaces/Blablablab/content-moderation/resolve/main/layouts/custom_task_layout.html
- Command line
-
hf download hf://spaces/Blablablab/content-moderation/layouts/custom_task_layout.html
-
curl -L -o custom_task_layout.html https://huggingface.co/spaces/Blablablab/content-moderation/resolve/main/layouts/custom_task_layout.html
21.6 kB
| <!-- Content Moderation Dashboard - Custom Layout --> | |
| <!-- | |
| This layout demonstrates: | |
| - Warning banner header with content ID | |
| - 2-column grid for violation categories | |
| - Color-coded severity levels (green/yellow/red) | |
| - Visual grouping of related assessments | |
| - Professional moderation workflow UI | |
| --> | |
| <style> | |
| /* ======================================== | |
| CONTENT MODERATION DASHBOARD STYLES | |
| ======================================== */ | |
| /* Main container */ | |
| .moderation-dashboard { | |
| max-width: 100%; | |
| margin: 0 auto; | |
| } | |
| /* Warning banner at top */ | |
| .moderation-header { | |
| background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); | |
| border: 2px solid #f59e0b; | |
| border-radius: 8px; | |
| padding: 12px 20px; | |
| margin-bottom: 20px; | |
| display: flex; | |
| align-items: center; | |
| justify-content: space-between; | |
| } | |
| .moderation-header-left { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| } | |
| .warning-icon { | |
| font-size: 24px; | |
| color: #d97706; | |
| } | |
| .moderation-title { | |
| font-weight: 700; | |
| font-size: 16px; | |
| color: #92400e; | |
| margin: 0; | |
| } | |
| .content-id { | |
| font-size: 13px; | |
| color: #b45309; | |
| font-family: monospace; | |
| } | |
| /* Metadata toggle button */ | |
| .metadata-toggle { | |
| background: #fff; | |
| border: 1px solid #d97706; | |
| border-radius: 6px; | |
| padding: 6px 12px; | |
| font-size: 12px; | |
| color: #92400e; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| } | |
| .metadata-toggle:hover { | |
| background: #fef3c7; | |
| } | |
| /* Section styling */ | |
| .moderation-section { | |
| background: #f8fafc; | |
| border: 1px solid #e2e8f0; | |
| border-radius: 8px; | |
| padding: 16px; | |
| margin-bottom: 16px; | |
| } | |
| .section-title { | |
| font-size: 13px; | |
| font-weight: 600; | |
| color: #475569; | |
| text-transform: uppercase; | |
| letter-spacing: 0.05em; | |
| margin-bottom: 16px; | |
| padding-bottom: 8px; | |
| border-bottom: 2px solid #64748b; | |
| } | |
| /* 2-column violation grid */ | |
| .violation-grid { | |
| display: grid; | |
| grid-template-columns: repeat(2, 1fr); | |
| gap: 16px; | |
| } | |
| @media (max-width: 768px) { | |
| .violation-grid { | |
| grid-template-columns: 1fr; | |
| } | |
| } | |
| /* Individual violation card */ | |
| .violation-card { | |
| background: #ffffff; | |
| border: 1px solid #e2e8f0; | |
| border-radius: 8px; | |
| padding: 14px; | |
| } | |
| .violation-card-title { | |
| font-size: 14px; | |
| font-weight: 600; | |
| color: #334155; | |
| margin-bottom: 12px; | |
| display: flex; | |
| align-items: center; | |
| gap: 8px; | |
| } | |
| .violation-icon { | |
| width: 20px; | |
| height: 20px; | |
| display: inline-flex; | |
| align-items: center; | |
| justify-content: center; | |
| border-radius: 4px; | |
| font-size: 12px; | |
| } | |
| .icon-violence { background: #fee2e2; color: #dc2626; } | |
| .icon-adult { background: #fce7f3; color: #db2777; } | |
| .icon-hate { background: #fef3c7; color: #d97706; } | |
| .icon-misinfo { background: #dbeafe; color: #2563eb; } | |
| /* Severity radio buttons - horizontal with color coding */ | |
| .severity-options { | |
| display: flex; | |
| gap: 8px; | |
| } | |
| .severity-option { | |
| flex: 1; | |
| position: relative; | |
| } | |
| .severity-option input[type="radio"] { | |
| position: absolute; | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .severity-label { | |
| display: block; | |
| text-align: center; | |
| padding: 10px 8px; | |
| border-radius: 6px; | |
| font-size: 12px; | |
| font-weight: 500; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| border: 2px solid transparent; | |
| } | |
| /* None - Green */ | |
| .severity-none .severity-label { | |
| background: #dcfce7; | |
| color: #166534; | |
| border-color: #bbf7d0; | |
| } | |
| .severity-none input:checked + .severity-label { | |
| background: #22c55e; | |
| color: white; | |
| border-color: #16a34a; | |
| box-shadow: 0 2px 4px rgba(34, 197, 94, 0.3); | |
| } | |
| .severity-none:hover .severity-label { | |
| border-color: #22c55e; | |
| } | |
| /* Mild - Yellow/Orange */ | |
| .severity-mild .severity-label { | |
| background: #fef3c7; | |
| color: #92400e; | |
| border-color: #fde68a; | |
| } | |
| .severity-mild input:checked + .severity-label { | |
| background: #f59e0b; | |
| color: white; | |
| border-color: #d97706; | |
| box-shadow: 0 2px 4px rgba(245, 158, 11, 0.3); | |
| } | |
| .severity-mild:hover .severity-label { | |
| border-color: #f59e0b; | |
| } | |
| /* Severe - Red */ | |
| .severity-severe .severity-label { | |
| background: #fee2e2; | |
| color: #991b1b; | |
| border-color: #fecaca; | |
| } | |
| .severity-severe input:checked + .severity-label { | |
| background: #ef4444; | |
| color: white; | |
| border-color: #dc2626; | |
| box-shadow: 0 2px 4px rgba(239, 68, 68, 0.3); | |
| } | |
| .severity-severe:hover .severity-label { | |
| border-color: #ef4444; | |
| } | |
| /* Decision section */ | |
| .decision-section { | |
| background: #f1f5f9; | |
| border: 2px solid #cbd5e1; | |
| } | |
| .decision-section .section-title { | |
| border-bottom-color: #3b82f6; | |
| color: #1e40af; | |
| } | |
| .decision-options { | |
| display: flex; | |
| gap: 12px; | |
| flex-wrap: wrap; | |
| } | |
| .decision-option { | |
| flex: 1; | |
| min-width: 140px; | |
| position: relative; | |
| } | |
| .decision-option input[type="radio"] { | |
| position: absolute; | |
| opacity: 0; | |
| width: 0; | |
| height: 0; | |
| } | |
| .decision-label { | |
| display: block; | |
| text-align: center; | |
| padding: 14px 16px; | |
| border-radius: 8px; | |
| font-size: 14px; | |
| font-weight: 600; | |
| cursor: pointer; | |
| transition: all 0.2s; | |
| border: 2px solid transparent; | |
| } | |
| /* Approve - Green */ | |
| .decision-approve .decision-label { | |
| background: #dcfce7; | |
| color: #166534; | |
| border-color: #bbf7d0; | |
| } | |
| .decision-approve input:checked + .decision-label { | |
| background: #22c55e; | |
| color: white; | |
| border-color: #16a34a; | |
| box-shadow: 0 4px 6px rgba(34, 197, 94, 0.3); | |
| transform: translateY(-1px); | |
| } | |
| .decision-approve:hover .decision-label { | |
| border-color: #22c55e; | |
| } | |
| /* Flag for Review - Yellow */ | |
| .decision-flag .decision-label { | |
| background: #fef3c7; | |
| color: #92400e; | |
| border-color: #fde68a; | |
| } | |
| .decision-flag input:checked + .decision-label { | |
| background: #f59e0b; | |
| color: white; | |
| border-color: #d97706; | |
| box-shadow: 0 4px 6px rgba(245, 158, 11, 0.3); | |
| transform: translateY(-1px); | |
| } | |
| .decision-flag:hover .decision-label { | |
| border-color: #f59e0b; | |
| } | |
| /* Remove - Red */ | |
| .decision-remove .decision-label { | |
| background: #fee2e2; | |
| color: #991b1b; | |
| border-color: #fecaca; | |
| } | |
| .decision-remove input:checked + .decision-label { | |
| background: #ef4444; | |
| color: white; | |
| border-color: #dc2626; | |
| box-shadow: 0 4px 6px rgba(239, 68, 68, 0.3); | |
| transform: translateY(-1px); | |
| } | |
| .decision-remove:hover .decision-label { | |
| border-color: #ef4444; | |
| } | |
| /* Notes section */ | |
| .notes-section textarea { | |
| width: 100%; | |
| border: 1px solid #e2e8f0; | |
| border-radius: 6px; | |
| padding: 12px; | |
| font-size: 14px; | |
| resize: vertical; | |
| min-height: 80px; | |
| } | |
| .notes-section textarea:focus { | |
| outline: none; | |
| border-color: #3b82f6; | |
| box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1); | |
| } | |
| /* Hide default form styling */ | |
| .moderation-dashboard .annotation-form { | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .moderation-dashboard fieldset { | |
| border: none; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| .moderation-dashboard legend { | |
| display: none; | |
| } | |
| </style> | |
| <div class="annotation_schema moderation-dashboard"> | |
| <!-- Warning Banner Header --> | |
| <div class="moderation-header"> | |
| <div class="moderation-header-left"> | |
| <span class="warning-icon">⚠</span> | |
| <div> | |
| <h3 class="moderation-title">CONTENT REVIEW</h3> | |
| <div class="content-id">Review pending content for policy compliance</div> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Violation Assessment Section --> | |
| <div class="moderation-section"> | |
| <div class="section-title">Violation Assessment</div> | |
| <div class="violation-grid"> | |
| <!-- Violence/Gore Card --> | |
| <div class="violation-card"> | |
| <div class="violation-card-title"> | |
| <span class="violation-icon icon-violence">☠</span> | |
| Violence / Gore | |
| </div> | |
| <form id="violence" class="annotation-form radio" action="/action_page.php" data-annotation-id="0"> | |
| <fieldset schema="violence"> | |
| <legend>Violence severity</legend> | |
| <div class="severity-options"> | |
| <div class="severity-option severity-none"> | |
| <input class="violence annotation-input" type="radio" | |
| id="violence_none" name="violence" value="none" | |
| selection_constraint="single" schema="violence" label_name="none" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="violence_none" class="severity-label">None</label> | |
| </div> | |
| <div class="severity-option severity-mild"> | |
| <input class="violence annotation-input" type="radio" | |
| id="violence_mild" name="violence" value="mild" | |
| selection_constraint="single" schema="violence" label_name="mild" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="violence_mild" class="severity-label">Mild</label> | |
| </div> | |
| <div class="severity-option severity-severe"> | |
| <input class="violence annotation-input" type="radio" | |
| id="violence_severe" name="violence" value="severe" | |
| selection_constraint="single" schema="violence" label_name="severe" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="violence_severe" class="severity-label">Severe</label> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| <!-- Adult Content Card --> | |
| <div class="violation-card"> | |
| <div class="violation-card-title"> | |
| <span class="violation-icon icon-adult">♥</span> | |
| Adult Content | |
| </div> | |
| <form id="adult_content" class="annotation-form radio" action="/action_page.php" data-annotation-id="1"> | |
| <fieldset schema="adult_content"> | |
| <legend>Adult content severity</legend> | |
| <div class="severity-options"> | |
| <div class="severity-option severity-none"> | |
| <input class="adult_content annotation-input" type="radio" | |
| id="adult_content_none" name="adult_content" value="none" | |
| selection_constraint="single" schema="adult_content" label_name="none" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="adult_content_none" class="severity-label">None</label> | |
| </div> | |
| <div class="severity-option severity-mild"> | |
| <input class="adult_content annotation-input" type="radio" | |
| id="adult_content_mild" name="adult_content" value="mild" | |
| selection_constraint="single" schema="adult_content" label_name="mild" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="adult_content_mild" class="severity-label">Mild</label> | |
| </div> | |
| <div class="severity-option severity-severe"> | |
| <input class="adult_content annotation-input" type="radio" | |
| id="adult_content_severe" name="adult_content" value="severe" | |
| selection_constraint="single" schema="adult_content" label_name="severe" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="adult_content_severe" class="severity-label">Severe</label> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| <!-- Hate Speech Card --> | |
| <div class="violation-card"> | |
| <div class="violation-card-title"> | |
| <span class="violation-icon icon-hate">✘</span> | |
| Hate Speech | |
| </div> | |
| <form id="hate_speech" class="annotation-form radio" action="/action_page.php" data-annotation-id="2"> | |
| <fieldset schema="hate_speech"> | |
| <legend>Hate speech severity</legend> | |
| <div class="severity-options"> | |
| <div class="severity-option severity-none"> | |
| <input class="hate_speech annotation-input" type="radio" | |
| id="hate_speech_none" name="hate_speech" value="none" | |
| selection_constraint="single" schema="hate_speech" label_name="none" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="hate_speech_none" class="severity-label">None</label> | |
| </div> | |
| <div class="severity-option severity-mild"> | |
| <input class="hate_speech annotation-input" type="radio" | |
| id="hate_speech_mild" name="hate_speech" value="mild" | |
| selection_constraint="single" schema="hate_speech" label_name="mild" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="hate_speech_mild" class="severity-label">Mild</label> | |
| </div> | |
| <div class="severity-option severity-severe"> | |
| <input class="hate_speech annotation-input" type="radio" | |
| id="hate_speech_severe" name="hate_speech" value="severe" | |
| selection_constraint="single" schema="hate_speech" label_name="severe" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="hate_speech_severe" class="severity-label">Severe</label> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| <!-- Misinformation Card --> | |
| <div class="violation-card"> | |
| <div class="violation-card-title"> | |
| <span class="violation-icon icon-misinfo">ℹ</span> | |
| Misinformation | |
| </div> | |
| <form id="misinformation" class="annotation-form radio" action="/action_page.php" data-annotation-id="3"> | |
| <fieldset schema="misinformation"> | |
| <legend>Misinformation severity</legend> | |
| <div class="severity-options"> | |
| <div class="severity-option severity-none"> | |
| <input class="misinformation annotation-input" type="radio" | |
| id="misinformation_none" name="misinformation" value="none" | |
| selection_constraint="single" schema="misinformation" label_name="none" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="misinformation_none" class="severity-label">None</label> | |
| </div> | |
| <div class="severity-option severity-mild"> | |
| <input class="misinformation annotation-input" type="radio" | |
| id="misinformation_mild" name="misinformation" value="mild" | |
| selection_constraint="single" schema="misinformation" label_name="mild" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="misinformation_mild" class="severity-label">Mild</label> | |
| </div> | |
| <div class="severity-option severity-severe"> | |
| <input class="misinformation annotation-input" type="radio" | |
| id="misinformation_severe" name="misinformation" value="severe" | |
| selection_constraint="single" schema="misinformation" label_name="severe" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="misinformation_severe" class="severity-label">Severe</label> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Final Decision Section --> | |
| <div class="moderation-section decision-section"> | |
| <div class="section-title">Final Decision</div> | |
| <form id="decision" class="annotation-form radio" action="/action_page.php" data-annotation-id="4"> | |
| <fieldset schema="decision"> | |
| <legend>Final moderation decision</legend> | |
| <div class="decision-options"> | |
| <div class="decision-option decision-approve"> | |
| <input class="decision annotation-input" type="radio" | |
| id="decision_approve" name="decision" value="approve" | |
| selection_constraint="single" schema="decision" label_name="approve" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="decision_approve" class="decision-label">✓ Approve</label> | |
| </div> | |
| <div class="decision-option decision-flag"> | |
| <input class="decision annotation-input" type="radio" | |
| id="decision_flag_review" name="decision" value="flag_review" | |
| selection_constraint="single" schema="decision" label_name="flag_review" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="decision_flag_review" class="decision-label">⚑ Flag for Review</label> | |
| </div> | |
| <div class="decision-option decision-remove"> | |
| <input class="decision annotation-input" type="radio" | |
| id="decision_remove" name="decision" value="remove" | |
| selection_constraint="single" schema="decision" label_name="remove" | |
| onclick="onlyOne(this);registerAnnotation(this);"> | |
| <label for="decision_remove" class="decision-label">✗ Remove</label> | |
| </div> | |
| </div> | |
| </fieldset> | |
| </form> | |
| </div> | |
| <!-- Notes Section --> | |
| <div class="moderation-section notes-section"> | |
| <div class="section-title">Moderator Notes</div> | |
| <form id="moderator_notes" class="annotation-form text" action="/action_page.php" data-annotation-id="5"> | |
| <fieldset schema="moderator_notes"> | |
| <legend>Additional notes</legend> | |
| <textarea class="moderator_notes annotation-input" | |
| id="moderator_notes_textarea" | |
| name="moderator_notes" | |
| schema="moderator_notes" | |
| label_name="notes" | |
| rows="3" | |
| placeholder="Document reasoning, edge cases, or additional context for the moderation log..." | |
| oninput="registerTextAnnotation(this);"></textarea> | |
| </fieldset> | |
| </form> | |
| </div> | |
| </div> | |