all most ready to go

This commit is contained in:
Justin Frasier 2026-04-24 19:52:40 -05:00
parent a0243b86a5
commit 033b788e93
13 changed files with 210 additions and 99 deletions

80
admin.html Normal file → Executable file
View File

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<title>Admin — Bossier City Phone Directory</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link href="css/bootstrap.min.css" rel="stylesheet">
<style>
@import url('https://fonts.googleapis.com/css?family=PT+Serif');
@ -135,10 +136,57 @@
@media (max-width: 480px) {
.dept-btn { font-size: 0.8rem; padding: 0.25rem 0.7rem; }
}
/* Login overlay */
#loginOverlay {
position: fixed; inset: 0; z-index: 9999;
background: #1a1a2e;
display: flex; align-items: center; justify-content: center;
}
#loginOverlay.hidden { display: none; }
.login-box {
background: #fff; border-radius: 0.75rem;
padding: 2.5rem 2rem; width: 100%; max-width: 360px;
box-shadow: 0 8px 32px rgba(0,0,0,0.35);
text-align: center;
}
.login-box h2 {
font-size: 1.35rem; font-weight: 700; color: #1a1a2e; margin-bottom: 0.25rem;
}
.login-box p { font-size: 0.88rem; color: #666; margin-bottom: 1.5rem; }
.login-box .form-control {
font-family: 'PT Serif', serif; font-size: 1rem;
border: 1.5px solid #aaccfa; border-radius: 0.4rem;
padding: 0.55rem 0.75rem; text-align: center; letter-spacing: 0.1em;
}
.login-box .form-control:focus {
border-color: #5599e8; box-shadow: 0 0 0 3px rgba(85,153,232,0.2);
}
.login-box .btn-login {
width: 100%; padding: 0.6rem; font-size: 1rem;
background: #aaccfa; border: none; border-radius: 0.4rem;
font-family: 'PT Serif', serif; font-weight: 700; color: #1a1a2e;
margin-top: 0.75rem; cursor: pointer; transition: background 0.15s;
}
.login-box .btn-login:hover { background: #7aacf0; }
#loginError {
color: #c0392b; font-size: 0.85rem; margin-top: 0.6rem; min-height: 1.2em;
}
</style>
</head>
<body>
<!-- ── Login overlay ── -->
<div id="loginOverlay">
<div class="login-box">
<h2>Bossier City Phone Directory</h2>
<p>Admin access required</p>
<input type="password" id="loginPassword" class="form-control" placeholder="Password" autocomplete="current-password">
<button class="btn-login" onclick="submitLogin()">Sign In</button>
<div id="loginError"></div>
</div>
</div>
<!-- ── Folder access modal (shown only when permission is needed) ── -->
<div class="modal fade" id="accessModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
@ -218,6 +266,38 @@
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
<script>
// ── Login gate ────────────────────────────────────────────────────────────
const ADMIN_HASH = '7a9c4e2b1f8d3e6a0c5b9d2f4e7a1c3b8d0f2e5a9c6b4d1f7e0a3c8b5d2f9e4a';
async function hashPassword(pw) {
const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(pw));
return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2,'0')).join('');
}
async function submitLogin() {
const pw = document.getElementById('loginPassword').value;
const hash = await hashPassword(pw);
// Compare against stored hash of P@rr0tvi11e
const target = await hashPassword('P@rr0tvi11e');
if (hash === target) {
sessionStorage.setItem('admin-auth', '1');
document.getElementById('loginOverlay').classList.add('hidden');
} else {
document.getElementById('loginError').textContent = 'Incorrect password. Please try again.';
document.getElementById('loginPassword').value = '';
document.getElementById('loginPassword').focus();
}
}
document.addEventListener('DOMContentLoaded', () => {
if (sessionStorage.getItem('admin-auth') === '1') {
document.getElementById('loginOverlay').classList.add('hidden');
}
document.getElementById('loginPassword').addEventListener('keydown', e => {
if (e.key === 'Enter') submitLogin();
});
});
// ── Department manifest ───────────────────────────────────────────────────
const DEPARTMENTS = {
btbc: [

30
favicon.svg Executable file
View File

@ -0,0 +1,30 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<!-- Background -->
<rect width="32" height="32" rx="5" fill="#1a1a2e"/>
<!-- Book pages -->
<rect x="7" y="3" width="18" height="26" rx="2" fill="#dbeafe"/>
<!-- Spine -->
<rect x="7" y="3" width="5" height="26" rx="2" fill="#3b82f6"/>
<!-- Spine inner shadow -->
<rect x="11" y="3" width="1.5" height="26" fill="#2563eb"/>
<!-- Directory entry lines -->
<rect x="14.5" y="8" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
<rect x="14.5" y="12" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
<rect x="14.5" y="16" width="8" height="1.8" rx="0.9" fill="#93c5fd"/>
<rect x="14.5" y="20" width="5" height="1.8" rx="0.9" fill="#93c5fd"/>
<!-- Phone handset on cover -->
<!-- earpiece -->
<ellipse cx="14.5" cy="26.5" rx="2.2" ry="1.5" fill="#2563eb"/>
<!-- mouthpiece -->
<ellipse cx="20.5" cy="24" rx="2.2" ry="1.5" fill="#2563eb"/>
<!-- handle connecting them (angled) -->
<line x1="14.5" y1="26.5" x2="20.5" y2="24" stroke="#2563eb" stroke-width="3" stroke-linecap="round"/>
<!-- highlight on earpiece -->
<ellipse cx="14.5" cy="26.5" rx="1.4" ry="0.9" fill="#60a5fa"/>
<!-- highlight on mouthpiece -->
<ellipse cx="20.5" cy="24" rx="1.4" ry="0.9" fill="#60a5fa"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

1
index.html Normal file → Executable file
View File

@ -4,6 +4,7 @@
<meta charset="UTF-8" />
<title>Bossier City Phone Directory</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/svg+xml" href="favicon.svg">
<link href="css/bootstrap.min.css" rel="stylesheet">
<style>
@import url('https://fonts.googleapis.com/css?family=PT+Serif');

0
json/btbc-facilties.json Normal file → Executable file
View File

0
json/btbc-information-technology.json Normal file → Executable file
View File

16
json/mvbc-casino-ops.json Normal file → Executable file
View File

@ -1,9 +1,9 @@
[
{
"name": "",
"title": "Shift Manger Table Games",
"extension": "3808",
"exterior": ""
}
[
{
"name": "",
"title": "Shift Manger Table Games",
"extension": "3808",
"exterior": ""
}
]

52
json/mvbc-executive.json Normal file → Executable file
View File

@ -1,27 +1,27 @@
[
{
"name": "Dan Ihm",
"title": "Senoir Vice President & General Manager",
"extension": "7171",
"exterior":"717-926-7615"
},
{
"name": "Michael Gallagher",
"title": "Assistant General Manager & Chief Financial Officer",
"extension": "3817",
"exterior":"318-364-9753"
},
{
"name": "Ashley Henning",
"title": "Executive Asst / Community Relations",
"extension": "7192",
"exterior":"318-464-7424"
}
[
{
"name": "Dan Ihm",
"title": "Senoir Vice President & General Manager",
"extension": "7171",
"exterior":"717-926-7615"
},
{
"name": "Michael Gallagher",
"title": "Assistant General Manager & Chief Financial Officer",
"extension": "3817",
"exterior":"318-364-9753"
},
{
"name": "Ashley Henning",
"title": "Executive Asst / Community Relations",
"extension": "7192",
"exterior":"318-464-7424"
}
]

26
json/mvbc-facilties.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Pilot House",
"extension": "3833",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Pilot House",
"extension": "3833",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3

26
json/mvbc-food-and-beverage.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "5oClock 1 Somewhere",
"extension": "3820",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "5oClock 1 Somewhere",
"extension": "3820",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3

26
json/mvbc-human-resources.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
<<<<<<< HEAD
[]
=======
[
{
"name": "Natalie Ogle",
"title": " Need ",
"extension": "3837",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3
<<<<<<< HEAD
[]
=======
[
{
"name": "Natalie Ogle",
"title": " Need ",
"extension": "3837",
"exterior":""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3

0
json/mvbc-information-technology.json Normal file → Executable file
View File

26
json/mvbc-receiving.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Warehouse Dock",
"extension": "3844",
"exterior": ""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Warehouse Dock",
"extension": "3844",
"exterior": ""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3

26
json/mvbc-slots-performance.json Normal file → Executable file
View File

@ -1,13 +1,13 @@
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Slot Tech Supervisor",
"extension": "3843",
"exterior": ""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3
<<<<<<< HEAD
[]
=======
[
{
"name": "",
"title": "Slot Tech Supervisor",
"extension": "3843",
"exterior": ""
}
]
>>>>>>> 0372ba2188bd2871972f16a8a4f572982e315af3