Skip to content

Commit eb8c985

Browse files
pjleducclaude
andcommitted
Merge upstream PR fatihak#651: configurable number of days in calendar view
Adds a "Number of Days" setting to the calendar plugin's timeGridWeek view, allowing users to display 1-30 days instead of a fixed 7. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 73c21a1 commit eb8c985

3 files changed

Lines changed: 14 additions & 3 deletions

File tree

src/plugins/calendar/calendar.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,16 @@ def generate_image(self, settings, device_config):
5151
if not events:
5252
logger.warning("No events found for ics url")
5353

54-
if view == 'timeGridWeek' and settings.get("displayPreviousDays") != "true":
54+
initial_date = None
55+
if view == 'timeGridWeek':
5556
view = 'timeGrid'
57+
initial_date = start.strftime("%Y-%m-%d")
5658

5759
template_params = {
5860
"view": view,
5961
"events": events,
6062
"current_dt": current_dt.replace(minute=0, second=0, microsecond=0).isoformat(),
63+
"initial_date": initial_date,
6164
"timezone": timezone,
6265
"plugin_settings": settings,
6366
"time_format": time_format,
@@ -105,7 +108,7 @@ def get_view_range(self, view, current_dt, settings):
105108
offset = (current_dt.weekday() - python_week_start) % 7
106109
start = current_dt - timedelta(days=offset)
107110
start = datetime(start.year, start.month, start.day)
108-
end = start + timedelta(days=7)
111+
end = start + timedelta(days=int(settings.get("numDays") or 7))
109112
elif view == "dayGrid":
110113
start = current_dt - timedelta(weeks=1)
111114
end = current_dt + timedelta(weeks=int(settings.get("displayWeeks") or 4))

src/plugins/calendar/render/calendar.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
const calendar = new FullCalendar.Calendar(calendarEl, {
3535
initialView: '{{ view }}',
36+
{% if initial_date %}initialDate: '{{ initial_date }}',{% endif %}
3637
events: events,
3738
now: '{{ current_dt }}',
3839
timeZone: '{{ timezone }}',
@@ -49,7 +50,7 @@
4950
weekends: {{ (plugin_settings.displayWeekends == "true") | tojson}},
5051
nowIndicator: {{ (plugin_settings.displayNowIndicator == "true") | tojson}},
5152
fixedWeekCount: false,
52-
{% if view == 'timeGrid' %}duration: {days : 7 },{% endif %}
53+
{% if view == 'timeGrid' %}duration: {days : {{ plugin_settings.numDays | default(7) | int }} },{% endif %}
5354
{% if view == 'dayGrid' %}duration: {weeks : "{{ plugin_settings.displayWeeks or 4}}" },{% endif %}
5455
headerToolbar: {
5556
left: '',

src/plugins/calendar/settings.html

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@
7777
<input type="number" id="endTimeInterval" name="endTimeInterval" class="form-input" min="0" max="24" placeholder="24">
7878
</div>
7979

80+
<div class="form-group nowrap" data-visible-modes="timeGridWeek">
81+
<label for="numDays">Number of Days:</label>
82+
<input type="number" id="numDays" name="numDays" class="form-input" min="1" max="30" placeholder="7" value="7">
83+
</div>
84+
8085
<div class="form-group nowrap" data-visible-modes="dayGrid">
8186
<label for="interval">Display Weeks:</label>
8287
<input type="number" id="displayWeeks" name="displayWeeks" class="form-input" min="1" max="52" placeholder="4">
@@ -201,6 +206,8 @@
201206
document.getElementById("endTimeInterval").value = pluginSettings.endTimeInterval;
202207

203208
document.getElementById("displayWeeks").value = pluginSettings.displayWeeks;
209+
210+
document.getElementById("numDays").value = pluginSettings.numDays || 7;
204211

205212
if (pluginSettings["calendarURLs[]"]) {
206213
calendars = pluginSettings["calendarURLs[]"].map((url, i) => ({

0 commit comments

Comments
 (0)