Files
node_task_2a/views/index.html
T
2025-08-12 17:41:06 +01:00

262 lines
9.0 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dashboard</title>
<!-- <script src="
https://cdn.jsdelivr.net/npm/tailwindcss@4.1.11/dist/lib.min.js
"></script> -->
<!-- <script src="https://cdn.jsdelivr.net/npm/tailwindcss@latest"></script>`` -->
<link rel="stylesheet" href="/stylesheets/output.css" />
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/ol@v7.4.0/ol.css"
/>
<script src="https://cdn.jsdelivr.net/npm/ol@v7.4.0/dist/ol.js"></script>
</head>
<body>
<div
class="min-h-screen bg-sky-400 flex flex-col items-center justify-center p-8"
>
<div class="grid grid-cols-5 gap-8 bg-inherit">
<!-- Weather Card -->
<div
id="weather-widget"
class="flex flex-col items-center bg-white rounded-lg shadow-md p-6 row-span-2"
>
<img
class="weather-icon w-24 h-24 mb-2"
src="https://cdn-icons-png.flaticon.com/512/869/869869.png"
alt="Weather"
/>
<div class="weather-temp text-3xl font-semibold mt-2">34 &deg;C</div>
</div>
<!-- Dropdown -->
<div
class="col-span-1 flex items-center justify-center bg-white rounded-lg shadow-md p-4 relative"
>
<input
type="text"
placeholder="Dropdown autocomplete of airport"
class="w-full outline-none"
/>
<span class="ml-2 font-bold text-lg">&#9660;</span>
</div>
<!-- Nigeria Time -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center"
>
<div class="text-sm font-medium text-gray-500">Nigeria Time</div>
<div class="text-3xl font-mono mt-2" id="nigeria-clock">23:01:05</div>
</div>
<!-- London Time -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center"
>
<div class="text-sm font-medium text-gray-500">London Time</div>
<div class="text-3xl font-mono mt-2" id="london-clock">23:01:05</div>
</div>
<!-- EST Time -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center"
>
<div class="text-sm font-medium text-gray-500">EST Time</div>
<div class="text-3xl font-mono mt-2" id="est-clock">23:01:05</div>
</div>
<!-- Click Counter -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center mt-8"
>
<div class="text-xs text-gray-500 mb-1">Number of Clicks</div>
<div class="text-4xl font-bold" id="click-counter-widget">0</div>
</div>
<!-- Export XML -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center mt-8"
>
<div class="text-xs text-gray-500 mb-2">Export XML</div>
<button class="bg-sky-400 text-white font-semibold px-8 py-2 rounded">
Export
</button>
</div>
<!-- Import XML -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center mt-8"
>
<div class="text-xs text-gray-500 mb-2">Import XML</div>
<input
type="file"
id="import-xml-input"
accept=".xml,text/xml,application/xml"
class="mb-2 text-xs"
/>
<button
id="import-xml-btn"
class="bg-green-400 text-white font-semibold px-8 py-2 rounded"
>
Import
</button>
<div id="import-status" class="text-xs mt-2"></div>
</div>
<!-- Map -->
<div
class="row-span-2 bg-white rounded-lg shadow-md p-2 flex items-center justify-center"
>
<div id="map-widget" class="w-full h-full"></div>
</div>
<!-- Distance -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center mt-8"
>
<div class="text-xs text-gray-500 mb-1">Distance from Arctic</div>
<div class="text-4xl font-bold" id="distance-widget">N/A</div>
</div>
<!-- Pakistan Time -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center"
>
<div class="text-sm font-medium text-gray-500">Pakistan Time</div>
<div class="text-3xl font-mono mt-2" id="pakistan-clock">
23:01:05
</div>
</div>
<!-- News List -->
<div
class="row-span-2 bg-white rounded-lg shadow-md p-4 flex flex-col justify-between"
>
<div class="text-xs font-semibold mb-2">News</div>
<div class="overflow-y-auto h-full max-h-[300px]">
<div id="news-widget" class="h-max"></div>
</div>
</div>
<!-- Coin Calculator -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center"
>
<div class="text-xs text-gray-500 mb-1">Count # of coins</div>
<input
type="number"
step="0.01"
min="0"
placeholder="Enter amount for coin calculator"
class="mb-2 p-2 border rounded w-full text-center"
/>
<button
class="bg-sky-400 text-white font-semibold px-8 py-2 rounded mt-2"
>
Calculate
</button>
<ul
id="coin-result-list"
class="text-xs list-disc list-inside mt-2"
></ul>
</div>
<!-- Upload -->
<div
class="bg-white rounded-lg shadow-md p-6 flex flex-col items-center justify-center mt-8"
>
<img
id="upload-preview"
src=""
alt="Latest upload"
class="w-24 h-24 object-cover rounded mb-2"
style="display: none"
/>
<input type="file" id="upload-input" accept="image/*" class="mb-2" />
<button
id="upload-btn"
class="bg-sky-400 text-white font-semibold px-8 py-2 rounded"
>
Upload
</button>
<span id="upload-error" class="text-xs text-red-500 mt-2"></span>
</div>
</div>
</div>
<!-- 2FA Modal -->
<div
id="2fa-modal"
class="fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 hidden"
>
<div class="bg-white rounded-lg p-8 max-w-md w-full mx-4">
<h2 class="text-2xl font-bold mb-4 text-center">
Two-Factor Authentication
</h2>
<div id="2fa-setup" class="hidden">
<p class="text-gray-600 mb-4 text-center">
Scan this QR code with your authenticator app:
</p>
<div id="qr-code" class="flex justify-center mb-4"></div>
<div class="flex gap-2 mb-4">
<button
id="download-qr"
class="flex-1 bg-purple-500 text-white py-2 px-4 rounded hover:bg-purple-600 text-sm"
>
Download QR
</button>
<button
id="copy-secret"
class="flex-1 bg-gray-500 text-white py-2 px-4 rounded hover:bg-gray-600 text-sm"
>
Copy Secret
</button>
</div>
<p class="text-xs text-gray-500 mb-4 text-center">
Or manually enter this secret:
<span
id="secret-key"
class="font-mono bg-gray-100 px-2 py-1 rounded"
></span>
</p>
<button
id="generate-2fa"
class="w-full bg-blue-500 text-white py-2 px-4 rounded hover:bg-blue-600 mb-4"
>
Generate New Secret
</button>
<button
id="proceed-to-verify"
class="w-full bg-green-500 text-white py-2 px-4 rounded hover:bg-green-600"
>
I've Added the Code, Verify Now
</button>
</div>
<div id="2fa-verify" class="hidden">
<p class="text-gray-600 mb-4 text-center">
Enter the 6-digit code from your authenticator app:
</p>
<input
type="text"
id="2fa-token"
placeholder="000000"
maxlength="6"
class="w-full text-center text-2xl font-mono border border-gray-300 rounded px-4 py-2 mb-4 focus:outline-none focus:ring-2 focus:ring-blue-500"
/>
<button
id="verify-2fa"
class="w-full bg-green-500 text-white py-2 px-4 rounded hover:bg-green-600 mb-2"
>
Verify
</button>
<button
id="back-to-setup"
class="w-full bg-gray-500 text-white py-2 px-4 rounded hover:bg-gray-600"
>
Back to Setup
</button>
</div>
<div id="2fa-loading" class="text-center">
<p class="text-gray-600 mb-4">Loading 2FA...</p>
</div>
</div>
</div>
<script src="/main.js"></script>
</body>
</html>