mirror of
https://github.com/ghndrx/webos.git
synced 2026-02-10 06:45:00 +00:00
Add working Start menu with app launcher
This commit is contained in:
@@ -312,10 +312,105 @@ body {
|
|||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.start-button.active {
|
||||||
|
background: rgba(255, 255, 255, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
.start-button i {
|
.start-button i {
|
||||||
color: var(--accent);
|
color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Start Menu */
|
||||||
|
.start-menu {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 55px;
|
||||||
|
left: 10px;
|
||||||
|
width: 280px;
|
||||||
|
background: rgba(15, 15, 35, 0.98);
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
border-radius: 12px;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
|
||||||
|
display: none;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu.open {
|
||||||
|
display: block;
|
||||||
|
animation: slideUp 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideUp {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(10px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-header {
|
||||||
|
padding: 20px;
|
||||||
|
background: linear-gradient(135deg, var(--accent) 0%, var(--accent-secondary) 100%);
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-header i {
|
||||||
|
font-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-header span {
|
||||||
|
font-weight: 600;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-items {
|
||||||
|
padding: 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-item {
|
||||||
|
padding: 12px 20px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 12px;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-item:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-item i {
|
||||||
|
width: 20px;
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-footer {
|
||||||
|
padding: 15px 20px;
|
||||||
|
border-top: 1px solid var(--border);
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-footer a {
|
||||||
|
color: var(--text-secondary);
|
||||||
|
text-decoration: none;
|
||||||
|
font-size: 13px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.start-menu-footer a:hover {
|
||||||
|
color: var(--accent);
|
||||||
|
}
|
||||||
|
|
||||||
.taskbar-items {
|
.taskbar-items {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
17
index.html
17
index.html
@@ -42,6 +42,23 @@
|
|||||||
<i class="fas fa-circle"></i>
|
<i class="fas fa-circle"></i>
|
||||||
<span>Start</span>
|
<span>Start</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="start-menu" id="start-menu">
|
||||||
|
<div class="start-menu-header">
|
||||||
|
<i class="fas fa-user-circle"></i>
|
||||||
|
<span>Greg Hendrickson</span>
|
||||||
|
</div>
|
||||||
|
<div class="start-menu-items">
|
||||||
|
<div class="start-menu-item" data-window="about"><i class="fas fa-user"></i> About Me</div>
|
||||||
|
<div class="start-menu-item" data-window="projects"><i class="fas fa-folder"></i> Projects</div>
|
||||||
|
<div class="start-menu-item" data-window="resume"><i class="fas fa-file-alt"></i> Resume</div>
|
||||||
|
<div class="start-menu-item" data-window="contact"><i class="fas fa-envelope"></i> Contact</div>
|
||||||
|
<div class="start-menu-item" data-window="terminal"><i class="fas fa-terminal"></i> Terminal</div>
|
||||||
|
</div>
|
||||||
|
<div class="start-menu-footer">
|
||||||
|
<a href="https://github.com/ghndrx" target="_blank"><i class="fab fa-github"></i> GitHub</a>
|
||||||
|
<a href="https://linkedin.com" target="_blank"><i class="fab fa-linkedin"></i> LinkedIn</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="taskbar-items"></div>
|
<div class="taskbar-items"></div>
|
||||||
<div class="system-tray">
|
<div class="system-tray">
|
||||||
<span class="clock"></span>
|
<span class="clock"></span>
|
||||||
|
|||||||
30
js/app.js
30
js/app.js
@@ -12,6 +12,7 @@ class GregOS {
|
|||||||
this.bindIconClicks();
|
this.bindIconClicks();
|
||||||
this.startClock();
|
this.startClock();
|
||||||
this.setupTerminal();
|
this.setupTerminal();
|
||||||
|
this.setupStartMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
bindIconClicks() {
|
bindIconClicks() {
|
||||||
@@ -211,6 +212,35 @@ class GregOS {
|
|||||||
setInterval(updateClock, 1000);
|
setInterval(updateClock, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupStartMenu() {
|
||||||
|
const startButton = document.querySelector('.start-button');
|
||||||
|
const startMenu = document.getElementById('start-menu');
|
||||||
|
|
||||||
|
startButton.addEventListener('click', (e) => {
|
||||||
|
e.stopPropagation();
|
||||||
|
startMenu.classList.toggle('open');
|
||||||
|
startButton.classList.toggle('active');
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close menu when clicking elsewhere
|
||||||
|
document.addEventListener('click', (e) => {
|
||||||
|
if (!startMenu.contains(e.target) && !startButton.contains(e.target)) {
|
||||||
|
startMenu.classList.remove('open');
|
||||||
|
startButton.classList.remove('active');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Start menu item clicks
|
||||||
|
document.querySelectorAll('.start-menu-item').forEach(item => {
|
||||||
|
item.addEventListener('click', () => {
|
||||||
|
const windowId = item.dataset.window;
|
||||||
|
this.openWindow(windowId);
|
||||||
|
startMenu.classList.remove('open');
|
||||||
|
startButton.classList.remove('active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
setupTerminal() {
|
setupTerminal() {
|
||||||
document.addEventListener('keydown', (e) => {
|
document.addEventListener('keydown', (e) => {
|
||||||
const input = document.getElementById('terminal-input');
|
const input = document.getElementById('terminal-input');
|
||||||
|
|||||||
Reference in New Issue
Block a user