fe / index.html
3v324v23's picture
Enhance internationalization support by updating translations and adding language change confirmation modal
2ae473d
<!DOCTYPE html>
<html lang="en" translate="no">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>News Verification</title>
<link rel="stylesheet" href="styles.css" />
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script
type="text/javascript"
src="https://unpkg.com/mediainfo.js"
></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
</head>
<body>
<div class="container">
<header class="header-face-check">
<div class="header-placeholder"></div>
<h1 class="title-header-face-check" data-i18n="pageTitle">News Verification</h1>
<div class="header-actions">
<div class="language-switcher">
<label class="language-label" for="language-select" data-i18n="languageLabel">Language</label>
<div id="language-dropdown" class="language-dropdown">
<button
id="language-toggle"
type="button"
class="language-toggle"
aria-haspopup="listbox"
aria-expanded="false"
>
<span id="language-selected-label">English</span>
<span class="language-chevron" aria-hidden="true"></span>
</button>
<ul
id="language-options"
class="language-options"
role="listbox"
aria-labelledby="language-toggle"
>
<li class="language-option" data-lang="ja" role="option">
<span data-i18n="languageJapanese">日本語</span>
</li>
<li class="language-option" data-lang="en" role="option">
<span data-i18n="languageEnglish">English</span>
</li>
<li class="language-option" data-lang="vi" role="option">
<span data-i18n="languageVietnamese">Tiếng Việt</span>
</li>
</ul>
</div>
<select id="language-select" class="language-select sr-only">
<option value="ja" data-i18n="languageJapanese">日本語</option>
<option value="en" data-i18n="languageEnglish" selected>English</option>
<option value="vi" data-i18n="languageVietnamese">Tiếng Việt</option>
</select>
</div>
<button id="btn-logout" class="btn btn-logout btn-logoutbtn-logout" data-i18n="logoutButton">Log out</button>
</div>
</header>
<main class="main-content">
<section class="upload-section">
<div class="wrapper-upload-box scroll-box">
<div class="upload-box">
<p>
<span data-i18n="uploadMediaLabel">Upload media files</span>
<span class="required">*</span>
</p>
<label for="file-input" class="drop-zone">
<div
id="wrapper-upload-face-check-media"
class="wrapper-upload"
>
<svg
class="drop-zone-icon"
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke-width="1.5"
stroke="currentColor"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5m-13.5-9L12 3m0 0l4.5 4.5M12 3v13.5"
/>
</svg>
<p data-i18n-target="html" data-i18n="uploadHint">
<span class="primary-1">Click here</span> to upload your
files or drag.
</p>
<p data-i18n="supportedFormats">
Supported Format: PNG, JPG, JPEG, GIF, WEBP, SVG, MOV, MP4
</p>
</div>
</label>
<input
type="file"
id="file-input"
class="display-none"
multiple
accept=".png,.jpg,.jpeg,.gif,.webp,.svg,.mov,.mp4"
required
/>
</div>
<div
id="wrapper-files-face-check"
class="display-none list-file"
></div>
<div class="line"></div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="additionalInformation"
>
Additional Information
</div>
</label>
<textarea
id="text-input-additional"
class="feedback-textarea"
name="text-input-additional"
rows="2"
data-i18n-placeholder="placeholderAdditionalText"
placeholder="Enter text here..."
></textarea>
</div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="socialMediaPostUrl"
>
Social Media Post URL
</div>
</label>
<input
id="input-social"
class="feedback-textarea"
name="input-social"
type="url"
data-i18n-placeholder="placeholderSocialUrl"
placeholder="Enter URL here..."
/>
</div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="titleNewsArticle"
>
Title of the News Article
</div>
</label>
<input
id="input-title"
class="feedback-textarea"
name="input-title"
type="text"
data-i18n-placeholder="placeholderNewsTitle"
placeholder="Enter title here..."
/>
</div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="locationLabel"
>
Location where the news took place
</div>
</label>
<input
id="input-location"
class="feedback-textarea"
name="input-location"
type="text"
data-i18n-placeholder="placeholderLocation"
placeholder="Enter location here..."
/>
</div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="categoryLabel"
>
Category of the News (e.g., Politics, Health, Technology)
</div>
</label>
<input
id="input-category"
class="feedback-textarea"
name="input-category"
type="text"
data-i18n-placeholder="placeholderCategory"
placeholder="Enter category here..."
/>
</div>
<div class="upload-box">
<label>
<div
id="wrapper-upload-face-check-text"
class="label"
data-i18n="violenceLevelLabel"
>
Violence Level
</div>
</label>
<input
id="input-violence"
class="feedback-textarea"
name="input-violence"
type="text"
data-i18n-placeholder="placeholderViolence"
placeholder="Enter violence level here..."
/>
</div>
</div>
<div class="button-group">
<button
id="btn-clear-face-check"
class="btn btn-clear"
data-i18n="clearButton"
>
Clear
</button>
<button
id="btn-submit-face-check"
class="btn btn-submit"
data-i18n="submitButton"
data-i18n-dynamic="true"
>
Submit
</button>
</div>
</section>
<section class="output-section">
<div id="menu-1762855257376" class="menu">
<div
onclick="changeTab('case_summary', this)"
class="item active"
data-i18n="caseSummaryTab"
>
Case Summary
</div>
<div
onclick="changeTab('content_classification', this)"
class="item"
data-i18n="contentClassificationTab"
>
Content Classification
</div>
<div
onclick="changeTab('verified_evidence', this)"
class="item"
data-i18n="verifiedEvidenceTab"
>
Verified Evidence
</div>
<div
onclick="changeTab('forensic_analysis', this)"
class="item"
data-i18n="forensicAnalysisTab"
>
Forensic Analysis
</div>
<div
id="other_evidence-1763023210526"
onclick="changeTab('other_evidence', this)"
class="item"
data-i18n="otherEvidenceTab"
>
Other Evidence & Findings
</div>
</div>
<div class="output-wrapper">
<div id="output-area" class="output-face-check scroll-box">
<p
class="opacity-50"
data-i18n="verificationPlaceholder"
data-i18n-dynamic="true"
>
Verification result comes here...
</p>
</div>
<div
id="status-face-check"
class="wrapper-status-face-check display-none"
></div>
</div>
<div class="wrapper-btn-save">
<button
id="btn-save-face-check"
class="btn btn-save"
data-i18n="saveButton"
>
Save
</button>
</div>
</section>
<section id="feedback-1765253515534" class="feedback display-none">
<div class="header-feedback">
<p
class="content-header-feedback"
data-i18n="feedbackHeader"
>
Help us improve!
</p>
<div id="close-feedback-1765253515534" class="close-feedback">
<svg
width="40"
height="40"
viewBox="0 0 40 40"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M14 26L26 14M14 14L26 26"
stroke="#38393E"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</svg>
</div>
</div>
<div class="content-feedback">
<div id="block-question-1765336324468" class="flex flex-col gap-6">
<!-- <div class="question" id="q0">
<div class="q-title">How accurate was the conclusion?</div>
<div class="options-stars">
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="star"></div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="star"></div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="star"></div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="star"></div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="star"></div>
</label>
</div>
</div>
</div> -->
<!-- 2.1 -->
<div class="flex flex-col gap-2">
<div>
<h3
class="section-title"
data-i18n="sectionGeneralQuestions"
>
1. General Questions
</h3>
</div>
<div class="flex flex-col gap-3 pl-4">
<div class="question" id="q0">
<div class="q-title" data-i18n="q0Title">
1.1 What is your profession?
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="radio"></div>
<div class="option-text" data-i18n="q0Option1">
Journalist / Fact Checker
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="radio"></div>
<div class="option-text" data-i18n="q0Option2">
Researcher / Student
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="radio"></div>
<div class="option-text" data-i18n="q0Option3">
Law Enforcement / OSINT
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q0" />
<div class="radio"></div>
<div class="option-text" data-i18n="q0Option4">
General User
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q1">
<div class="q-title">
<span data-i18n="q1Title">
1.2 How accurate was the conclusion?
</span>
<span class="required">*</span>
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q1" />
<div class="radio"></div>
<div class="option-text" data-i18n="q1Option1">
Spot on
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q1" />
<div class="radio"></div>
<div class="option-text" data-i18n="q1Option2">
Mostly correct
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q1" />
<div class="radio"></div>
<div class="option-text" data-i18n="q1Option3">
Mixed results
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q1" />
<div class="radio"></div>
<div class="option-text" data-i18n="q1Option4">
Missed key context
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q1" />
<div class="radio"></div>
<div class="option-text" data-i18n="q1Option5">
Completely wrong
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q2">
<div class="q-title">
<span data-i18n="q2Title">
1.3 Did the algorithm correctly classify this content?
</span>
<span class="required">*</span>
</div>
<div class="options links-list">
<div class="option">
<label class="opt">
<input type="radio" name="q2" />
<div class="radio"></div>
<div class="option-text" data-i18n="yesOption">
Yes
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q2" />
<div class="radio"></div>
<div class="option-text" data-i18n="q2Option2">
No - It was actually Real
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input class="radio" type="radio" name="q2" />
<div class="radio"></div>
<div class="option-text" data-i18n="q2Option3">
No - It was actually AI-Generated
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q3">
<div class="q-title" data-i18n="q3Title">
1.4 Were the provided links relevant?
</div>
<div class="options links-list">
<div class="option">
<label class="opt">
<input type="radio" name="q3" />
<div class="radio"></div>
<div class="option-text" data-i18n="q3Option1">
All links worked and were relevant
</div></label
>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q3" />
<div class="radio"></div>
<div class="option-text" data-i18n="q3Option2">
Some links were broken/dead
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input class="radio" type="radio" name="q3" />
<div class="radio"></div>
<div class="option-text" data-i18n="q3Option3">
Links were unrelated to the topic
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q4">
<div class="q-title" data-i18n="q4Title">
1.5 Did the report contain any hallucinations (made-up
facts)?
</div>
<div class="options links-list">
<div class="option">
<label class="opt">
<input type="radio" name="q4" />
<div class="radio"></div>
<div class="option-text" data-i18n="q4Option1">
No issues
</div></label
>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q4" />
<div class="radio"></div>
<div class="option-text" data-i18n="q4Option2">
Invented dates/times
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input class="radio" type="radio" name="q4" />
<div class="radio"></div>
<div class="option-text" data-i18n="q4Option3">
Invented people/names
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input class="radio" type="radio" name="q4" />
<div class="radio"></div>
<div class="option-text" data-i18n="q4Option4">
Citations that don't exist
</div>
</label>
</div>
</div>
</div>
</div>
</div>
<div class="flex flex-col gap-2">
<div>
<h3
class="section-title"
data-i18n="sectionDetailedQuestions"
>
2. Detailed Questions
</h3>
</div>
<div class="flex flex-col gap-3 pl-4">
<div class="question" id="q5">
<div class="q-title" data-i18n="q5Title">
2.1 Did the app clearly identify the main people,
organizations, or sources involved in the news item?
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q5" />
<div class="radio"></div>
<div class="option-text" data-i18n="veryClear">
Very Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q5" />
<div class="radio"></div>
<div class="option-text" data-i18n="clearOption">
Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q5" />
<div class="radio"></div>
<div class="option-text" data-i18n="moderatelyClear">
Moderately Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q5" />
<div class="radio"></div>
<div class="option-text" data-i18n="slightlyClear">
Slightly Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q5" />
<div class="radio"></div>
<div class="option-text" data-i18n="notClear">
Not Clear
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q6">
<div class="q-title" data-i18n="q6Title">
2.2 Did the app correctly identify the central claim or
action of the news story?
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q6" />
<div class="radio"></div>
<div class="option-text" data-i18n="yesOption">
Yes
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q6" />
<div class="radio"></div>
<div class="option-text" data-i18n="partially">
Partially
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q6" />
<div class="radio"></div>
<div class="option-text" data-i18n="noOption">
No
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q7">
<div class="q-title" data-i18n="q7Title">
2.3 Did the app clearly show when the original
event/information was first published or occurred?
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q7" />
<div class="radio"></div>
<div class="option-text" data-i18n="veryClear">
Very Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q7" />
<div class="radio"></div>
<div class="option-text" data-i18n="clearOption">
Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q7" />
<div class="radio"></div>
<div class="option-text" data-i18n="moderatelyClear">
Moderately Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q7" />
<div class="radio"></div>
<div class="option-text" data-i18n="slightlyClear">
Slightly Clear
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q7" />
<div class="radio"></div>
<div class="option-text" data-i18n="notClear">
Not Clear
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q8">
<div class="q-title" data-i18n="q8Title">
2.4 Was the location of the event ("Where") specified and
verified by the app's output?
</div>
<div class="options links-list">
<div class="option">
<label class="opt">
<input type="radio" name="q8" />
<div class="radio"></div>
<div class="option-text" data-i18n="yesOption">
Yes
</div></label
>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q8" />
<div class="radio"></div>
<div class="option-text" data-i18n="notApplicable">
Not Applicable
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input class="radio" type="radio" name="q8" />
<div class="radio"></div>
<div class="option-text" data-i18n="noOption">
No
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q9">
<div class="q-title" data-i18n="q9Title">
2.5 How well did the app explain the motive or purpose
behind the original claim (e.g., persuasion, profit,
error)?
</div>
<div class="options">
<div class="option">
<label class="opt">
<input type="radio" name="q9" />
<div class="radio"></div>
<div class="option-text" data-i18n="clearlyExplained">
Clearly Explained
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q9" />
<div class="radio"></div>
<div class="option-text" data-i18n="wellExplained">
Well Explained
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q9" />
<div class="radio"></div>
<div class="option-text" data-i18n="moderatelyExplained">
Moderately Explained
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q9" />
<div class="radio"></div>
<div class="option-text" data-i18n="poorlyExplained">
Poorly Explained
</div>
</label>
</div>
<div class="option">
<label class="opt">
<input type="radio" name="q9" />
<div class="radio"></div>
<div class="option-text" data-i18n="notExplained">
Not Explained
</div>
</label>
</div>
</div>
</div>
<div class="question" id="q10">
<label class="textarea">
<span
class="textarea-label"
data-i18n="q10Title"
>
2.6 Help us improve. If the verification failed, what
did we miss?
</span>
</label>
<textarea
id="feedback-q10-comments"
class="feedback-textarea"
name="q10_comments"
rows="4"
data-i18n-placeholder="q10Placeholder"
placeholder="Text value"
></textarea>
</div>
</div>
</div>
</div>
<div
id="block-notification-1765336324468"
class="display-none"
></div>
</div>
<div id="footer-feedback-1765336324468" class="footer-feedback">
<button
id="btn-feedback-face-check"
class="btn btn-feedback"
data-i18n="sendButton"
data-i18n-dynamic="true"
>
Send
</button>
</div>
</section>
</main>
</div>
<div id="wrapper-modal-1760410479496" class="wrapper-modal">
<div id="model-1760410479496" class="modal"></div>
</div>
<div id="live-chat-1765253515534" class="live-chat">
<div>
<svg
width="32"
height="32"
viewBox="0 0 32 32"
fill="none"
xmlns="http://www.w3.org/2000/svg"
focusable="false"
aria-hidden="true"
>
<path
d="M18.96 28.84C17.3867 28.84 15.16 27.7333 13.4 22.44L12.44 19.56L9.56001 18.6C4.28001 16.84 3.17334 14.6133 3.17334 13.04C3.17334 11.48 4.28001 9.23997 9.56001 7.46664L20.88 3.69331C23.7067 2.74664 26.0667 3.02664 27.52 4.46664C28.9733 5.90664 29.2533 8.27997 28.3067 11.1066L24.5333 22.4266C22.76 27.7333 20.5333 28.84 18.96 28.84ZM10.1867 9.37331C6.48001 10.6133 5.16001 12.08 5.16001 13.04C5.16001 14 6.48001 15.4666 10.1867 16.6933L13.5467 17.8133C13.84 17.9066 14.08 18.1466 14.1733 18.44L15.2933 21.8C16.52 25.5066 18 26.8266 18.96 26.8266C19.92 26.8266 21.3867 25.5066 22.6267 21.8L26.4 10.48C27.08 8.42664 26.96 6.74664 26.0933 5.87997C25.2267 5.01331 23.5467 4.90664 21.5067 5.58664L10.1867 9.37331Z"
fill="#ffffff"
></path>
<path
d="M13.48 19.2C13.2267 19.2 12.9733 19.1066 12.7733 18.9066C12.3867 18.52 12.3867 17.88 12.7733 17.4933L17.5467 12.7066C17.9333 12.32 18.5733 12.32 18.96 12.7066C19.3467 13.0933 19.3467 13.7333 18.96 14.12L14.1867 18.9066C14 19.1066 13.7333 19.2 13.48 19.2Z"
fill="#ffffff"
></path>
</svg>
</div>
<div class="live-chat-text" data-i18n="liveChatText">
Send your feedback
</div>
</div>
<script type="module" src="constants.js"></script>
<script type="module" src="main.js"></script>
<script type="module" src="serverSentEvents.js"></script>
<script type="module" src="feedback.js"></script>
</body>
</html>