PageSourceSearch

https://www.footballtransfers.com/js/timeago.js?v=36015551535-190

js footballtransfers.com collected 2026-09-24 20:47:48 UTC 2,965 bytes, 79 lines download raw bytes

1
2// Using an existing one is too large for our purposes, let's create a small vanilla js version
3// instead as we are also aiming to remove reliance on jQuery eventually
4(function () {
5    const locales = {
6        en: {
7            justNow: 'just now',
8            seconds: 'seconds ago',
9            minute: 'a minute ago',
10            minutes: '%d minutes ago',
11            hour: 'an hour ago',
12            hours: '%d hours ago',
13        },
14        us: {
15            justNow: 'just now',
16            seconds: 'seconds ago',
17            minute: 'a minute ago',
18            minutes: '%d minutes ago',
19            hour: 'an hour ago',
20            hours: '%d hours ago',
21        },
22        nl: {
23            justNow: 'zojuist',
24            seconds: 'seconden geleden',
25            minute: 'een minuut geleden',
26            minutes: '%d minuten geleden',
27            hour: 'een uur geleden',
28            hours: '%d uur geleden',
29        }
30    };
31
32    function getLocale(code) {
33        code = (code || '').toLowerCase();
34        if (code.startsWith('nl')) return 'nl';
35        if (code.startsWith('en')) return 'en';
36        if (code.startsWith('us')) return 'us';
37        return 'en';
38    }
39
40    function formatDate(date, locale) {
41        const d = new Date(date);
42        if (locale === 'nl') {
43            const months = ['jan.', 'feb.', 'mrt.', 'apr.', 'mei', 'jun.', 'jul.', 'aug.', 'sep.', 'okt.', 'nov.', 'dec.'];
44            return `${d.getDate()} ${months[d.getMonth()]} ${d.getFullYear()}`;
45        } else {
46            const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
47            return `${months[d.getMonth()]} ${d.getDate()}, ${d.getFullYear()}`;
48        }
49    }
50
51    function formatTimeAgo(date, locale) {
52        const now = Date.now();
53        const seconds = Math.floor((now - date) / 1000);
54        const l = locales[locale] || locales['en'];
55        if (seconds < 10) return l.justNow;
56        if (seconds < 60) return l.seconds;
57        if (seconds < 120) return l.minute;
58        if (seconds < 3600) return l.minutes.replace('%d', Math.floor(seconds / 60));
59        if (seconds < 7200) return l.hour;
60        if (seconds < 86400) return l.hours.replace('%d', Math.floor(seconds / 3600));
61        // If more than 24 hours, show date
62        return formatDate(date, locale);
63    }
64
65    function updateTimeAgo() {
66        document.querySelectorAll('[data-time-ago]').forEach(function (el) {
67            const timestamp = parseInt(el.getAttribute('data-time-ago'), 10) * 1000;
68            const locale = getLocale(el.getAttribute('data-time-locale'));
69            el.textContent = formatTimeAgo(timestamp, locale);
70        });
71    }
72
73    // Initial update
74    document.addEventListener('DOMContentLoaded', updateTimeAgo);
75    // Update every 60 seconds
76    setInterval(updateTimeAgo, 60000);
77    // Also update on page load (in case script loads after DOMContentLoaded)
78    updateTimeAgo();
79})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.