Skip to content

Commit cbe1b1f

Browse files
hhkaosclaude
andcommitted
Group series/multipart cards by default, release 0.3.0
The card view showed every occurrence of a recurring event as its own tile, cluttering the grid. Upgrade the <ote-events> embed to v0.4.0 and add a default-on "Agrupar series" toggle next to the card view button (visible only in card view, since group-events is cards-only) that collapses same-partOf.id events into one stacked card. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 6043043 commit cbe1b1f

6 files changed

Lines changed: 57 additions & 4 deletions

File tree

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
# OTE Reader changelog
22

3+
## 0.3.0 - 2026-08-13
4+
5+
### Added
6+
7+
- An "Agrupar series" toggle next to the card view button that collapses
8+
events sharing the same `partOf.id` into a single stacked card, enabled
9+
by default. Only shown in card view, since grouping only applies there.
10+
11+
### Changed
12+
13+
- Upgraded the `<ote-events>` embed to
14+
[v0.4.0](https://github.com/OpenTechEvents/ote-tools/releases/tag/embed-v0.4.0),
15+
which adds the `group-events` attribute the series toggle relies on.
16+
317
## 0.2.0 - 2026-08-12
418

519
### Fixed

CLAUDE.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# OTE Reader
2+
3+
Attendee-facing PWA for subscribing to OpenTechEvents feeds. Vanilla JS
4+
(`app.js`), no build step — `<ote-events>` is loaded from a versioned CDN
5+
URL in `index.html`, not vendored.
6+
7+
## Release checklist
8+
9+
Whenever a change is user-facing (new feature, fix, behavior change),
10+
update these together before considering the task done:
11+
12+
1. Add an entry to `CHANGELOG.md` under a new version heading (date =
13+
today, semver: patch for fixes, minor for features, major for breaking
14+
changes).
15+
2. Bump the version to match in both `package.json` (`version`) and
16+
`app.js` (`APP_VERSION` constant, near the top). `APP_VERSION` is what
17+
renders in the Ajustes modal (`#app-version` in `index.html`) — no
18+
separate manual edit needed there.
19+
20+
Internal/invisible changes (refactors, tooling, comments) don't need a
21+
version bump or changelog entry.

app.js

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
(function () {
22
'use strict';
33

4-
var APP_VERSION = '0.2.0';
4+
var APP_VERSION = '0.3.0';
55
var DEMO_MODE = new URLSearchParams(location.search).get('demo') === '1' || location.pathname.replace(/\/+$/, '').endsWith('/demo');
66
var STORAGE = DEMO_MODE ? 'ote-reader-demo-state-v1' : 'ote-reader-state-v1';
77
var INSTALL_DISMISSED = 'ote-reader-install-dismissed-v1';
@@ -28,7 +28,8 @@
2828
filters: { q: '', mode: '', language: '', country: '', cfp: false, future: true },
2929
savedFilters: [],
3030
savedEvents: [],
31-
view: 'cards'
31+
view: 'cards',
32+
groupSeries: true
3233
};
3334
var feedCache = new Map();
3435
var adopterCache = null;
@@ -395,6 +396,8 @@
395396
button.classList.toggle('is-active', button.dataset.view === state.view);
396397
button.setAttribute('aria-pressed', String(button.dataset.view === state.view));
397398
});
399+
$('group-series-wrap').hidden = state.view !== 'cards';
400+
$('group-series').checked = state.groupSeries;
398401
}
399402

400403
function renderLibrary() {
@@ -1114,6 +1117,11 @@
11141117
return;
11151118
}
11161119
widget.setAttribute('layout', state.view === 'feed' ? 'list' : state.view);
1120+
if (state.view === 'cards' && state.groupSeries) {
1121+
widget.setAttribute('group-events', 'series,multipart');
1122+
} else {
1123+
widget.removeAttribute('group-events');
1124+
}
11171125
widget.setAttribute('theme', document.documentElement.dataset.theme || 'light');
11181126
widget.setAttribute('fields', 'image,when,location,attendance,description,price,tags,organizer');
11191127
widget.setAttribute('show-past', 'true');
@@ -1603,6 +1611,11 @@
16031611
render();
16041612
});
16051613
});
1614+
$('group-series').addEventListener('change', function () {
1615+
state.groupSeries = this.checked;
1616+
persist();
1617+
render();
1618+
});
16061619
$('refresh').addEventListener('click', function () {
16071620
state.feeds.forEach(loadFeed);
16081621
});

index.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,10 @@ <h2>Colecciones</h2>
125125
<span>Calendario</span>
126126
</button>
127127
</div>
128+
<label class="check" id="group-series-wrap" hidden>
129+
<input id="group-series" type="checkbox" checked>
130+
Agrupar series
131+
</label>
128132
</div>
129133
</div>
130134
</section>
@@ -242,7 +246,7 @@ <h3>Instalación</h3>
242246
</section>
243247
</dialog>
244248

245-
<script type="module" src="https://tools.opentechevents.org/embed/v0.3.1/ote-events.js"></script>
249+
<script type="module" src="https://tools.opentechevents.org/embed/v0.4.0/ote-events.js"></script>
246250
<script src="app.js"></script>
247251
</body>
248252
</html>

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ote-reader",
3-
"version": "0.2.0",
3+
"version": "0.3.0",
44
"private": true,
55
"type": "module",
66
"description": "Attendee-facing PWA for subscribing to OpenTechEvents feeds.",

styles.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ label {
319319
white-space: nowrap;
320320
}
321321
.check input { width: 18px; min-height: 18px; }
322+
.check[hidden] { display: none; }
322323

323324
.workspace {
324325
display: grid;

0 commit comments

Comments
 (0)