schedule
by DeadByElpy
HTML
<h1>Daily Schedule</h1>
<div>
<label>Action Time (HH:MM):</label>
<input type="time" id="time" value="08:00" />
<label>Description:</label>
<input type="text" id="desc" placeholder="Wake up" />
<label>Fixed:</label>
<input type="checkbox" id="fixed" />
<button onclick="addOrEditAction()">Add/Save</button>
</div>
<ul id="schedule"></ul>
<div>
<label>Real Start Time (HH:MM):</label>
<input type="time" id="realStart" value="09:13" />
<button onclick="applyShift()">Apply</button>
</div>
<ul id="shifted"></ul>
JavaScript
let actions = [];
let editIndex = -1;
function parseTime(t) {
const [h, m] = t.split(':').map(Number);
return h * 60 + m;
}
function formatTime(minutes) {
let h = Math.floor(minutes / 60)
.toString()
.padStart(2, '0');
if ( h > 24 ) {
h %= 24;
}
const m = (minutes % 60).toString().padStart(2, '0');
return `${h}:${m}`;
}
function loadActions() {
const saved = localStorage.getItem('scheduleActions');
if (saved) {
actions = JSON.parse(saved);
renderSchedule();
}
}
function saveActions() {
localStorage.setItem('scheduleActions', JSON.stringify(actions));
}
function addOrEditAction() {
const timeStr = document.getElementById('time').value;
const desc = document.getElementById('desc').value;
const fixed = document.getElementById('fixed').checked;
if (timeStr && desc) {
const time = parseTime(timeStr);
if (editIndex === -1) {
actions.push({ time, desc, fixed });
} else {
actions[editIndex] = { time, desc, fixed };
editIndex = -1;
}
actions.sort((a, b) => a.time - b.time);
renderSchedule();
saveActions();
clearInputs();
}
}
function editAction(index) {
const a = actions[index];
document.getElementById('time').value = formatTime(a.time);
document.getElementById('desc').value = a.desc;
document.getElementById('fixed').checked = a.fixed;
editIndex = index;
}
function deleteAction(index) {
actions.splice(index, 1);
renderSchedule();
saveActions();
}
function clearInputs() {
document.getElementById('time').value = '';
document.getElementById('desc').value = '';
document.getElementById('fixed').checked = false;
}
function renderSchedule() {
const ul = document.getElementById('schedule');
ul.innerHTML = '';
actions.forEach((a, index) => {
const li = document.createElement('li');
li.textContent = `${formatTime(a.time)} - ${a.desc} ${a.fixed ? '(fixed)' :...