Interactive Roadmap Maker JavaScript, HTML, CSS
👤 Sharing: AI
```javascript
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive Roadmap Maker</title>
<style>
body {
font-family: sans-serif;
margin: 0;
padding: 0;
background-color: #f4f4f4;
}
#roadmap-container {
width: 80%;
margin: 20px auto;
background-color: #fff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
#roadmap {
display: flex;
flex-wrap: wrap;
justify-content: flex-start;
align-items: flex-start;
gap: 20px;
padding-bottom: 20px;
border-bottom: 1px solid #ddd;
}
.roadmap-item {
background-color: #e9ecef;
padding: 15px;
border-radius: 5px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
width: 200px; /* Adjust width as needed */
min-height: 100px;
text-align: center;
cursor: pointer;
transition: background-color 0.2s ease;
position: relative;
}
.roadmap-item:hover {
background-color: #dee2e6;
}
.roadmap-item .delete-button {
position: absolute;
top: 5px;
right: 5px;
background-color: rgba(255, 0, 0, 0.7);
color: white;
border: none;
padding: 2px 5px;
border-radius: 3px;
cursor: pointer;
font-size: 0.8em;
opacity: 0;
transition: opacity 0.2s ease;
}
.roadmap-item:hover .delete-button {
opacity: 1;
}
#input-section {
margin-top: 20px;
display: flex;
flex-direction: column;
gap: 10px;
}
#input-section input[type="text"] {
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1em;
}
#input-section button {
padding: 10px 15px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
transition: background-color 0.2s ease;
}
#input-section button:hover {
background-color: #0056b3;
}
#modal {
display: none;
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
z-index: 1;
}
#modal-content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: white;
padding: 20px;
border-radius: 5px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
width: 400px;
max-width: 90%;
}
#modal-content h2 {
margin-top: 0;
}
#modal-content textarea {
width: 100%;
padding: 8px;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1em;
resize: vertical;
min-height: 100px;
}
#modal-content button {
padding: 10px 15px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 1em;
transition: background-color 0.2s ease;
margin-right: 10px; /* Space between buttons */
}
#modal-content button:hover {
background-color: #0056b3;
}
#modal-content .close-button {
background-color: #dc3545; /* Red color for close button */
}
#modal-content .close-button:hover {
background-color: #c82333;
}
</style>
</head>
<body>
<div id="roadmap-container">
<h1>Interactive Roadmap Maker</h1>
<div id="roadmap">
<!-- Roadmap items will be added here -->
</div>
<div id="input-section">
<input type="text" id="newItemText" placeholder="Enter roadmap item title">
<button onclick="addRoadmapItem()">Add Item</button>
</div>
</div>
<div id="modal">
<div id="modal-content">
<h2>Item Details</h2>
<textarea id="itemDetails" placeholder="Enter details about this roadmap item"></textarea>
<button onclick="saveItemDetails()">Save</button>
<button onclick="closeModal()" class="close-button">Close</button>
</div>
</div>
<script>
const roadmapContainer = document.getElementById('roadmap');
const newItemText = document.getElementById('newItemText');
const modal = document.getElementById('modal');
const itemDetails = document.getElementById('itemDetails');
let selectedItem = null;
function addRoadmapItem() {
const text = newItemText.value.trim();
if (text !== "") {
const item = createRoadmapItem(text);
roadmapContainer.appendChild(item);
newItemText.value = "";
}
}
function createRoadmapItem(text) {
const item = document.createElement('div');
item.classList.add('roadmap-item');
item.textContent = text;
const deleteButton = document.createElement('button');
deleteButton.classList.add('delete-button');
deleteButton.textContent = 'X';
deleteButton.onclick = (event) => {
event.stopPropagation(); // Prevent item click when deleting
item.remove();
};
item.appendChild(deleteButton);
item.addEventListener('click', () => {
selectedItem = item;
itemDetails.value = item.details || ''; // Load existing details
openModal();
});
return item;
}
function openModal() {
modal.style.display = 'block';
}
function closeModal() {
modal.style.display = 'none';
selectedItem = null;
}
function saveItemDetails() {
if (selectedItem) {
selectedItem.details = itemDetails.value;
}
closeModal();
}
window.onclick = function(event) {
if (event.target == modal) {
closeModal();
}
}
// Sample roadmap items (optional)
const initialItems = ["Plan the Project", "Design the UI", "Develop Features", "Test Thoroughly", "Deploy to Production"];
initialItems.forEach(itemText => {
const item = createRoadmapItem(itemText);
roadmapContainer.appendChild(item);
});
</script>
</body>
</html>
```
👁️ Viewed: 21
Comments