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)' :...