Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2993,6 +2993,21 @@ <h2>Built it because the data should stay reachable.</h2>
return d.toLocaleDateString(undefined, { day: 'numeric', month: 'long', year: 'numeric' });
};

var normalizeReleaseDate = function (value) {
if (typeof value !== 'string') { return null; }
var calendarDate = value.slice(0, 10);
if (!/^\d{4}-\d{2}-\d{2}$/.test(calendarDate)) { return null; }
var isDateOnly = value === calendarDate;
var isTimestamp = value.charAt(10) === 'T' && !isNaN(Date.parse(value));
if (!isDateOnly && !isTimestamp) { return null; }
var parts = calendarDate.split('-').map(Number);
var date = new Date(parts[0], parts[1] - 1, parts[2]);
if (date.getFullYear() !== parts[0] || date.getMonth() !== parts[1] - 1 || date.getDate() !== parts[2]) {
return null;
}
return date;
};

var tick = function (target) {
var diff = Math.max(0, target.getTime() - Date.now());
var days = Math.floor(diff / 86400000);
Expand Down Expand Up @@ -3031,10 +3046,8 @@ <h2>Built it because the data should stay reachable.</h2>
var item = json && json.total > 0 && json.data && json.data[0];
if (!item) { return; }

// Parsing a bare 'YYYY-MM-DD' string yields UTC midnight, which in a
// UTC-negative timezone renders as the previous day — appending a
// local-time component gets local midnight instead.
var releaseDate = new Date(item.release_date + 'T00:00:00');
var releaseDate = normalizeReleaseDate(item.release_date);
if (!releaseDate) { return; }

if (item.cover_url) {
img.src = item.cover_url;
Expand Down
5 changes: 2 additions & 3 deletions mcuapi-title-detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -354,8 +354,7 @@
badge lines up across every card in a row instead of floating at whatever
height that card's own text happens to end. */
.cast-tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:3px}
.cast-first{font-family:var(--mono);font-size:10.5px;color:var(--muted);text-decoration:none;border-bottom:1px dashed var(--border-ui);align-self:flex-start}
.cast-first:hover{color:var(--fg);border-color:var(--fg)}
.cast-first{align-self:flex-start}
.cast-empty,.pcs-empty{
font-family:var(--mono);font-size:12.5px;color:var(--muted);
padding:20px;border:1px dashed var(--border);border-radius:3px;background:var(--surface);
Expand Down Expand Up @@ -886,7 +885,7 @@ <h2>Raw response</h2>
var firstId = c.first_appearance_movie_id || c.first_appearance_tvshow_id;
var crossRef = '';
if (firstType && !(firstType === currentType && firstId === currentId)) {
crossRef = '<button type="button" class="cast-first" data-type="' + firstType + '" data-id="' + firstId + '">First seen elsewhere →</button>';
crossRef = '<button type="button" class="chip cast-first" data-type="' + firstType + '" data-id="' + firstId + '">First seen elsewhere →</button>';
}
var variantHtml = c.variant_of
? '<span class="cast-variant" data-slot="variant-' + idx + '">Variant of…</span>' : '';
Expand Down
Loading