diff --git a/README.md b/README.md
index 754771e..efe7143 100644
--- a/README.md
+++ b/README.md
@@ -18,9 +18,8 @@ The SQLite database is created automatically in `data/go.sqlite`.
- Feriefridage grant yearly, default `5` days/year.
- Feriefridage must be used before `31 August` and expire before September planning.
- FLEX days use `7.5h` Monday-Thursday and `7h` Friday.
-- Start balances are configured separately from current FLEX hours.
- The planner shows configurable numbers of previous and future months around the current month.
-- Monthly vacation-day corrections can be entered directly in the planner table, e.g. `+1.2` or `-2.6` days.
+- Monthly vacation, feriefridage, and FLEX balances can be corrected directly in the planner table.
- Each date-range entry can individually allow unpaid fallback so only that range is converted to unpaid days if balances are insufficient.
## Data
diff --git a/app.js b/app.js
index 3b71368..09a44df 100644
--- a/app.js
+++ b/app.js
@@ -10,8 +10,7 @@ const state = {
const settingKeys = [
'previous_months', 'future_months',
'vacation_days_per_month', 'feriefridage_per_year', 'feriefridage_expiry_month',
- 'normal_day_hours', 'friday_hours', 'opening_vacation_days',
- 'opening_feriefridage_days', 'opening_flex_hours'
+ 'normal_day_hours', 'friday_hours'
];
const monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
@@ -315,6 +314,25 @@ function renderPlanner() {
document.querySelectorAll('.balance-override-input').forEach((input) => {
input.addEventListener('change', (event) => saveBalanceOverride(event).catch((error) => toast(error.message || String(error))));
});
+ syncPlannerScroll();
+}
+
+function syncPlannerScroll() {
+ const headerWrap = document.querySelector('.planner-column-header.table-wrap');
+ const bodyWrap = document.querySelector('.planner-panel .table-wrap');
+ if (!headerWrap || !bodyWrap) return;
+
+ let syncing = false;
+ const sync = (from, to) => {
+ if (syncing) return;
+ syncing = true;
+ to.scrollLeft = from.scrollLeft;
+ requestAnimationFrame(() => { syncing = false; });
+ };
+
+ headerWrap.addEventListener('scroll', () => sync(headerWrap, bodyWrap), { passive: true });
+ bodyWrap.addEventListener('scroll', () => sync(bodyWrap, headerWrap), { passive: true });
+ headerWrap.scrollLeft = bodyWrap.scrollLeft;
}
function renderMonthRow(month) {
diff --git a/index.html b/index.html
index b3ab702..7279859 100644
--- a/index.html
+++ b/index.html
@@ -120,10 +120,7 @@
-
-
-
-
Start balances are the balances before the first shown month. Monthly vacation, feriefridage, and FLEX balances are edited directly in the planner table.
+
Monthly vacation, feriefridage, and FLEX balances are edited directly in the planner table. Clear a value to return to the calculated balance.