<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bharatpedia.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-vector-homepage.js</id>
	<title>MediaWiki:Gadget-vector-homepage.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://en.bharatpedia.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-vector-homepage.js"/>
	<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-vector-homepage.js&amp;action=history"/>
	<updated>2026-10-28T20:26:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-vector-homepage.js&amp;diff=566095&amp;oldid=prev</id>
		<title>WikiDwarf: Add</title>
		<link rel="alternate" type="text/html" href="https://en.bharatpedia.org/w/index.php?title=MediaWiki:Gadget-vector-homepage.js&amp;diff=566095&amp;oldid=prev"/>
		<updated>2026-10-07T09:02:04Z</updated>

		<summary type="html">&lt;p&gt;Add&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * Bharatpedia Vector main page — auto news, DYK, month events, recent deaths.&lt;br /&gt;
 * MediaWiki 1.43. Vector / Vector 2022 only. Main page only.&lt;br /&gt;
 *&lt;br /&gt;
 * Same sources as BharatpediaNeo homepage.js:&lt;br /&gt;
 *   User:WikiDwarf/sandbox  → .homepagecache-india-news / .homepagecache-india-dyk&lt;br /&gt;
 *   {{CURRENTYEAR}} in India → Events + Deaths&lt;br /&gt;
 *&lt;br /&gt;
 * Install: MediaWiki:Gadget-vector-homepage.js&lt;br /&gt;
 *          (or the bottom of MediaWiki:Vector.js)&lt;br /&gt;
 * Gadget definition: vector-homepage[ResourceLoader|default|targets=desktop]|vector-homepage.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (&lt;br /&gt;
        typeof mw === &amp;#039;undefined&amp;#039; ||&lt;br /&gt;
        !mw.config.get(&amp;#039;wgIsMainPage&amp;#039;)&lt;br /&gt;
    ) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var skin = mw.config.get(&amp;#039;wgSkin&amp;#039;) || &amp;#039;&amp;#039;;&lt;br /&gt;
    if (skin !== &amp;#039;vector&amp;#039; &amp;amp;&amp;amp; skin !== &amp;#039;vector-2022&amp;#039;) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var HOMEPAGECACHE_PAGE = &amp;#039;User:WikiDwarf/sandbox&amp;#039;;&lt;br /&gt;
    var api = new mw.Api();&lt;br /&gt;
&lt;br /&gt;
    function $(id) {&lt;br /&gt;
        return document.getElementById(id);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function localizeWikiLinks(html) {&lt;br /&gt;
        return String(html || &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/(?:https?:)?\/\/en\.wikipedia\.org\/wiki\//gi, &amp;#039;/wiki/&amp;#039;)&lt;br /&gt;
            .replace(/(?:https?:)?\/\/en\.wikipedia\.org\/w\/index\.php\?title=/gi, &amp;#039;/wiki/&amp;#039;)&lt;br /&gt;
            .replace(/href=&amp;quot;\/w\/index\.php\?title=([^&amp;quot;&amp;amp;#]+)/gi, &amp;#039;href=&amp;quot;/wiki/$1&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function istNow() {&lt;br /&gt;
        return new Date(new Date().toLocaleString(&amp;#039;en-US&amp;#039;, { timeZone: &amp;#039;Asia/Kolkata&amp;#039; }));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function wikiToHtml(text) {&lt;br /&gt;
        return String(text || &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;lt;ref[\s\S]*?&amp;lt;\/ref&amp;gt;/gi, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;lt;ref[^&amp;gt;]*\/?&amp;gt;/gi, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/\{\{[^{}]*\}\}/g, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/\[\[([^|\]]+)\|([^\]]+)\]\]/g, function (_, t, l) {&lt;br /&gt;
                return &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(t) + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + l + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            })&lt;br /&gt;
            .replace(/\[\[([^\]]+)\]\]/g, function (_, t) {&lt;br /&gt;
                return &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(t) + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + t + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            })&lt;br /&gt;
            .replace(/&amp;#039;&amp;#039;&amp;#039;(.*?)&amp;#039;&amp;#039;&amp;#039;/g, &amp;#039;&amp;lt;b&amp;gt;$1&amp;lt;/b&amp;gt;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;#039;&amp;#039;(.*?)&amp;#039;&amp;#039;/g, &amp;#039;&amp;lt;i&amp;gt;$1&amp;lt;/i&amp;gt;&amp;#039;)&lt;br /&gt;
            .replace(/\s+/g, &amp;#039; &amp;#039;)&lt;br /&gt;
            .trim();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function splitNewsItems(html) {&lt;br /&gt;
        var tmp = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        tmp.innerHTML = html || &amp;#039;&amp;#039;;&lt;br /&gt;
        var parts = Array.prototype.map.call(tmp.querySelectorAll(&amp;#039;li&amp;#039;), function (n) {&lt;br /&gt;
            return n.innerHTML.trim();&lt;br /&gt;
        }).filter(Boolean);&lt;br /&gt;
        if (parts.length &amp;lt; 2) {&lt;br /&gt;
            parts = String(html || &amp;#039;&amp;#039;)&lt;br /&gt;
                .replace(/&amp;lt;div class=&amp;quot;homepagecache-meta&amp;quot;[^&amp;gt;]*&amp;gt;[\s\S]*$/i, &amp;#039;&amp;#039;)&lt;br /&gt;
                .replace(/Source:[\s\S]*$/i, &amp;#039;&amp;#039;)&lt;br /&gt;
                .split(/(?=\d{1,2}\s+(?:January|February|March|April|May|June|July|August|September|October|November|December)\s+\d{4})/)&lt;br /&gt;
                .map(function (x) { return x.trim(); })&lt;br /&gt;
                .filter(function (x) { return x.length &amp;gt; 30; });&lt;br /&gt;
        }&lt;br /&gt;
        return parts;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function renderSlot(el, title, html, moreHref, moreLabel) {&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (!html) {&lt;br /&gt;
            el.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;Nothing cached yet.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var wrap = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        wrap.innerHTML = html;&lt;br /&gt;
        var metaEl = wrap.querySelector(&amp;#039;.homepagecache-footer, .homepagecache-meta&amp;#039;);&lt;br /&gt;
        var stamp = &amp;#039;&amp;#039;;&lt;br /&gt;
        if (metaEl) {&lt;br /&gt;
            var m = metaEl.textContent.match(/Last updated:\s*(\S+)/i);&lt;br /&gt;
            stamp = m ? m[1] : &amp;#039;&amp;#039;;&lt;br /&gt;
            metaEl.remove();&lt;br /&gt;
        }&lt;br /&gt;
        var items = title === &amp;#039;News&amp;#039; ? splitNewsItems(wrap.innerHTML) : [];&lt;br /&gt;
        var body;&lt;br /&gt;
        if (title === &amp;#039;News&amp;#039; &amp;amp;&amp;amp; items.length) {&lt;br /&gt;
            body = &amp;#039;&amp;lt;ul class=&amp;quot;bp-vec-list&amp;quot;&amp;gt;&amp;#039; + items.map(function (p) {&lt;br /&gt;
                return &amp;#039;&amp;lt;li&amp;gt;&amp;#039; + p + &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
            }).join(&amp;#039;&amp;#039;) + &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039;;&lt;br /&gt;
        } else {&lt;br /&gt;
            body = &amp;#039;&amp;lt;div class=&amp;quot;bp-vec-body&amp;quot;&amp;gt;&amp;#039; + wrap.innerHTML + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
        el.innerHTML =&lt;br /&gt;
            body +&lt;br /&gt;
            &amp;#039;&amp;lt;div class=&amp;quot;bp-vec-foot&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
            (moreHref ? &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + moreHref + &amp;#039;&amp;quot;&amp;gt;&amp;#039; + moreLabel + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) +&lt;br /&gt;
            (stamp ? &amp;#039;&amp;lt;span&amp;gt;Updated &amp;#039; + stamp + &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) +&lt;br /&gt;
            &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function loadHomepageCache() {&lt;br /&gt;
        var res = await api.get({&lt;br /&gt;
            action: &amp;#039;parse&amp;#039;,&lt;br /&gt;
            page: HOMEPAGECACHE_PAGE,&lt;br /&gt;
            prop: &amp;#039;text&amp;#039;,&lt;br /&gt;
            disablelimitreport: 1,&lt;br /&gt;
            disableeditsection: 1,&lt;br /&gt;
            formatversion: 2&lt;br /&gt;
        });&lt;br /&gt;
        var tmp = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        tmp.innerHTML = (res.parse &amp;amp;&amp;amp; res.parse.text) || &amp;#039;&amp;#039;;&lt;br /&gt;
        return {&lt;br /&gt;
            news: localizeWikiLinks(tmp.querySelector(&amp;#039;.homepagecache-india-news&amp;#039;) &amp;amp;&amp;amp; tmp.querySelector(&amp;#039;.homepagecache-india-news&amp;#039;).innerHTML),&lt;br /&gt;
            dyk: localizeWikiLinks(tmp.querySelector(&amp;#039;.homepagecache-india-dyk&amp;#039;) &amp;amp;&amp;amp; tmp.querySelector(&amp;#039;.homepagecache-india-dyk&amp;#039;).innerHTML)&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var monthNames = [&lt;br /&gt;
        &amp;#039;January&amp;#039;, &amp;#039;February&amp;#039;, &amp;#039;March&amp;#039;, &amp;#039;April&amp;#039;, &amp;#039;May&amp;#039;, &amp;#039;June&amp;#039;,&lt;br /&gt;
        &amp;#039;July&amp;#039;, &amp;#039;August&amp;#039;, &amp;#039;September&amp;#039;, &amp;#039;October&amp;#039;, &amp;#039;November&amp;#039;, &amp;#039;December&amp;#039;&lt;br /&gt;
    ];&lt;br /&gt;
&lt;br /&gt;
    async function getYearPage(y) {&lt;br /&gt;
        try {&lt;br /&gt;
            var res = await api.get({&lt;br /&gt;
                action: &amp;#039;parse&amp;#039;,&lt;br /&gt;
                page: y + &amp;#039; in India&amp;#039;,&lt;br /&gt;
                prop: &amp;#039;wikitext&amp;#039;,&lt;br /&gt;
                formatversion: 2&lt;br /&gt;
            });&lt;br /&gt;
            return (res.parse &amp;amp;&amp;amp; res.parse.wikitext) || &amp;#039;&amp;#039;;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            return &amp;#039;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function extractChapter(wikitext, name) {&lt;br /&gt;
        var re = new RegExp(&lt;br /&gt;
            &amp;#039;^==\\s*&amp;#039; + name + &amp;#039;\\s*==\\s*$([\\s\\S]*?)(?=^==\\s*[^=\\n]+\\s*==\\s*$)&amp;#039;,&lt;br /&gt;
            &amp;#039;im&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
        var match = wikitext.match(re);&lt;br /&gt;
        return match ? match[1] : &amp;#039;&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function extractMonthSection(source, monthName, y) {&lt;br /&gt;
        var escaped = monthName.replace(/[.*+?^${}()|[\]\\]/g, &amp;#039;\\$&amp;amp;&amp;#039;);&lt;br /&gt;
        var headingRegex = new RegExp(&lt;br /&gt;
            &amp;#039;^={2,4}\\s*&amp;#039; + escaped + &amp;#039;(?:\\s+&amp;#039; + y + &amp;#039;)?\\s*={2,4}\\s*$&amp;#039;,&lt;br /&gt;
            &amp;#039;im&amp;#039;&lt;br /&gt;
        );&lt;br /&gt;
        var headingMatch = headingRegex.exec(source);&lt;br /&gt;
        if (!headingMatch) {&lt;br /&gt;
            return &amp;#039;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
        var remaining = source.substring(headingMatch.index + headingMatch[0].length);&lt;br /&gt;
        var nextHeading = remaining.search(/^={2,4}\s*[^=\n]+\s*={2,4}\s*$/m);&lt;br /&gt;
        return nextHeading &amp;gt;= 0 ? remaining.substring(0, nextHeading) : remaining;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function parseMonthEvents(wikitext, monthIndex, y) {&lt;br /&gt;
        var section = extractMonthSection(extractChapter(wikitext, &amp;#039;Events&amp;#039;) || wikitext, monthNames[monthIndex], y);&lt;br /&gt;
        if (!section) {&lt;br /&gt;
            return [];&lt;br /&gt;
        }&lt;br /&gt;
        var events = [];&lt;br /&gt;
        var currentDay = null;&lt;br /&gt;
        section.split(/\r?\n/).forEach(function (line) {&lt;br /&gt;
            var dateOnly = line.match(/^\s*\*\s*(\d{1,2})\s+(January|February|March|April|May|June|July|August|September|October|November|December)\s*(?:–|-|—)\s*$/i);&lt;br /&gt;
            var dateWithText = line.match(/^\s*\*\s*(\d{1,2})\s+(January|February|March|April|May|June|July|August|September|October|November|December)\s*(?:–|-|—)\s+(.+)$/i);&lt;br /&gt;
            if (dateOnly) {&lt;br /&gt;
                currentDay = parseInt(dateOnly[1], 10);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (dateWithText) {&lt;br /&gt;
                currentDay = parseInt(dateWithText[1], 10);&lt;br /&gt;
                events.push({ day: currentDay, month: monthIndex, year: y, title: dateWithText[3] });&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (currentDay &amp;amp;&amp;amp; /^\s*\*{2,}\s*\S/.test(line)) {&lt;br /&gt;
                events.push({&lt;br /&gt;
                    day: currentDay,&lt;br /&gt;
                    month: monthIndex,&lt;br /&gt;
                    year: y,&lt;br /&gt;
                    title: line.replace(/^\s*\*+\s*/, &amp;#039;&amp;#039;)&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return events;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function firstLink(text) {&lt;br /&gt;
        var raw = String(text || &amp;#039;&amp;#039;);&lt;br /&gt;
        var match = raw.match(/\[\[([^\[\]]+)\]\]/);&lt;br /&gt;
        if (!match) {&lt;br /&gt;
            return { title: &amp;#039;&amp;#039;, text: &amp;#039;&amp;#039;, after: raw };&lt;br /&gt;
        }&lt;br /&gt;
        var parts = match[1].split(&amp;#039;|&amp;#039;);&lt;br /&gt;
        return {&lt;br /&gt;
            title: (parts[0] || &amp;#039;&amp;#039;).trim(),&lt;br /&gt;
            text: (parts[1] || parts[0] || &amp;#039;&amp;#039;).trim()&lt;br /&gt;
        };&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function cleanPlain(text) {&lt;br /&gt;
        return String(text || &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/\[\[([^|\]]+)\|([^\]]+)\]\]/g, &amp;#039;$2&amp;#039;)&lt;br /&gt;
            .replace(/\[\[([^\]]+)\]\]/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
            .replace(/\{\{[^{}]*\}\}/g, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;lt;ref[\s\S]*?&amp;lt;\/ref&amp;gt;/gi, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;lt;ref[^&amp;gt;]*\/?&amp;gt;/gi, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;#039;&amp;#039;&amp;#039;|&amp;#039;&amp;#039;/g, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/&amp;lt;[^&amp;gt;]+&amp;gt;/g, &amp;#039;&amp;#039;)&lt;br /&gt;
            .replace(/\s+/g, &amp;#039; &amp;#039;)&lt;br /&gt;
            .replace(/\.+$/, &amp;#039;&amp;#039;)&lt;br /&gt;
            .trim();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function parseDeaths(wikitext, year) {&lt;br /&gt;
        var section = extractChapter(wikitext, &amp;#039;Deaths&amp;#039;);&lt;br /&gt;
        if (!section) {&lt;br /&gt;
            return [];&lt;br /&gt;
        }&lt;br /&gt;
        var deaths = [];&lt;br /&gt;
        var current = null;&lt;br /&gt;
        section.split(/\r?\n/).forEach(function (line) {&lt;br /&gt;
            var dateOnly = line.match(/^\s*\*\s*(\d{1,2})\s+(January|February|March|April|May|June|July|August|September|October|November|December)\s*(?:–|-|—)\s*$/i);&lt;br /&gt;
            var dateWithText = line.match(/^\s*\*\s*(\d{1,2})\s+(January|February|March|April|May|June|July|August|September|October|November|December)\s*(?:–|-|—)\s+(.+)$/i);&lt;br /&gt;
            if (dateOnly) {&lt;br /&gt;
                current = { day: parseInt(dateOnly[1], 10), month: monthNames.findIndex(function (m) { return m.toLowerCase() === dateOnly[2].toLowerCase(); }) };&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (dateWithText) {&lt;br /&gt;
                current = { day: parseInt(dateWithText[1], 10), month: monthNames.findIndex(function (m) { return m.toLowerCase() === dateWithText[2].toLowerCase(); }) };&lt;br /&gt;
                deaths.push({ day: current.day, month: current.month, year: year, raw: dateWithText[3] });&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            if (current &amp;amp;&amp;amp; /^\s*\*{2,}\s*\[\[/.test(line)) {&lt;br /&gt;
                deaths.push({ day: current.day, month: current.month, year: year, raw: line.replace(/^\s*\*+\s*/, &amp;#039;&amp;#039;) });&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return deaths.map(function (item) {&lt;br /&gt;
            var link = firstLink(item.raw);&lt;br /&gt;
            var plain = cleanPlain(item.raw);&lt;br /&gt;
            var bits = plain.split(&amp;#039;,&amp;#039;);&lt;br /&gt;
            return {&lt;br /&gt;
                day: item.day,&lt;br /&gt;
                month: item.month,&lt;br /&gt;
                year: item.year,&lt;br /&gt;
                name: link.text || (bits[0] || &amp;#039;&amp;#039;).trim(),&lt;br /&gt;
                detail: bits.slice(1).join(&amp;#039;,&amp;#039;).trim(),&lt;br /&gt;
                url: link.title ? mw.util.getUrl(link.title) : mw.util.getUrl(year + &amp;#039; in India&amp;#039;) + &amp;#039;#Deaths&amp;#039;&lt;br /&gt;
            };&lt;br /&gt;
        }).filter(function (item) { return item.name; });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function injectStyles() {&lt;br /&gt;
        if ($(&amp;#039;bp-vector-home-style&amp;#039;)) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var st = document.createElement(&amp;#039;style&amp;#039;);&lt;br /&gt;
        st.id = &amp;#039;bp-vector-home-style&amp;#039;;&lt;br /&gt;
        st.textContent = [&lt;br /&gt;
            &amp;#039;.bp-vec-list, .bp-vec-events { margin: .4em 0 0; padding-left: 1.2em; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-list li, .bp-vec-events li { margin: .45em 0; line-height: 1.45; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-body { line-height: 1.45; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-body li { margin: .35em 0; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-foot { display: flex; justify-content: space-between; gap: 12px; margin-top: .8em; font-size: 90%; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-foot span { color: #54595d; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-empty, .bp-vec-loading { color: #54595d; font-size: 90%; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-death { display: block; margin: .35em 0; text-decoration: none; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-death small { display: block; color: #54595d; }&amp;#039;,&lt;br /&gt;
            &amp;#039;.bp-vec-date { font-weight: 700; margin-right: .35em; }&amp;#039;&lt;br /&gt;
        ].join(&amp;#039;\n&amp;#039;);&lt;br /&gt;
        document.head.appendChild(st);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function fillNewsDyk() {&lt;br /&gt;
        var newsEl = $(&amp;#039;bp-vector-news&amp;#039;);&lt;br /&gt;
        var dykEl = $(&amp;#039;bp-vector-dyk&amp;#039;);&lt;br /&gt;
        if (!newsEl &amp;amp;&amp;amp; !dykEl) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            var slots = await loadHomepageCache();&lt;br /&gt;
            renderSlot(newsEl, &amp;#039;News&amp;#039;, slots.news, mw.util.getUrl(&amp;#039;Portal:India/News&amp;#039;), &amp;#039;All news&amp;#039;);&lt;br /&gt;
            renderSlot(dykEl, &amp;#039;Did you know&amp;#039;, slots.dyk, mw.util.getUrl(&amp;#039;Portal:India/DYK&amp;#039;), &amp;#039;All did you know&amp;#039;);&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            console.error(&amp;#039;Vector homepage cache failed&amp;#039;, e);&lt;br /&gt;
            if (newsEl) {&lt;br /&gt;
                newsEl.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;News could not be loaded.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
            if (dykEl) {&lt;br /&gt;
                dykEl.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;Did you know could not be loaded.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function fillEvents() {&lt;br /&gt;
        var el = $(&amp;#039;bp-vector-events&amp;#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var today = istNow();&lt;br /&gt;
        var year = today.getFullYear();&lt;br /&gt;
        var month = today.getMonth();&lt;br /&gt;
        var todayDay = today.getDate();&lt;br /&gt;
        try {&lt;br /&gt;
            var wikitext = await getYearPage(year);&lt;br /&gt;
            var events = parseMonthEvents(wikitext, month, year).filter(function (ev) {&lt;br /&gt;
                return ev.day &amp;lt;= todayDay;&lt;br /&gt;
            });&lt;br /&gt;
            events.sort(function (a, b) {&lt;br /&gt;
                return (b.year * 10000 + (b.month + 1) * 100 + b.day) - (a.year * 10000 + (a.month + 1) * 100 + a.day);&lt;br /&gt;
            });&lt;br /&gt;
            if (events.length &amp;lt; 5) {&lt;br /&gt;
                var prevMonth = month - 1;&lt;br /&gt;
                var prevYear = year;&lt;br /&gt;
                var prevText = wikitext;&lt;br /&gt;
                if (prevMonth &amp;lt; 0) {&lt;br /&gt;
                    prevMonth = 11;&lt;br /&gt;
                    prevYear -= 1;&lt;br /&gt;
                    prevText = await getYearPage(prevYear);&lt;br /&gt;
                }&lt;br /&gt;
                events = events.concat(parseMonthEvents(prevText, prevMonth, prevYear));&lt;br /&gt;
                events.sort(function (a, b) {&lt;br /&gt;
                    return (b.year * 10000 + (b.month + 1) * 100 + b.day) - (a.year * 10000 + (a.month + 1) * 100 + a.day);&lt;br /&gt;
                });&lt;br /&gt;
            }&lt;br /&gt;
            events = events.slice(0, 5);&lt;br /&gt;
            if (!events.length) {&lt;br /&gt;
                el.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;No recent events listed on &amp;#039; + year + &amp;#039; in India.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            el.innerHTML =&lt;br /&gt;
                &amp;#039;&amp;lt;ul class=&amp;quot;bp-vec-events&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
                events.map(function (ev) {&lt;br /&gt;
                    return &amp;#039;&amp;lt;li&amp;gt;&amp;lt;span class=&amp;quot;bp-vec-date&amp;quot;&amp;gt;&amp;#039; + String(ev.day).padStart(2, &amp;#039;0&amp;#039;) + &amp;#039; &amp;#039; + monthNames[ev.month] + &amp;#039;&amp;lt;/span&amp;gt; &amp;#039; + wikiToHtml(ev.title) + &amp;#039;&amp;lt;/li&amp;gt;&amp;#039;;&lt;br /&gt;
                }).join(&amp;#039;&amp;#039;) +&lt;br /&gt;
                &amp;#039;&amp;lt;/ul&amp;gt;&amp;#039; +&lt;br /&gt;
                &amp;#039;&amp;lt;div class=&amp;quot;bp-vec-foot&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(year + &amp;#039; in India&amp;#039;) + &amp;#039;#Events&amp;quot;&amp;gt;All events&amp;lt;/a&amp;gt;&amp;lt;span&amp;gt;From &amp;#039; + year + &amp;#039; in India&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            console.error(e);&lt;br /&gt;
            el.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;Events could not be loaded.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async function fillDeaths() {&lt;br /&gt;
        var el = $(&amp;#039;bp-vector-deaths&amp;#039;);&lt;br /&gt;
        if (!el) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var today = istNow();&lt;br /&gt;
        var year = today.getFullYear();&lt;br /&gt;
        try {&lt;br /&gt;
            var wikitext = await getYearPage(year);&lt;br /&gt;
            var todayStamp = year * 10000 + (today.getMonth() + 1) * 100 + today.getDate();&lt;br /&gt;
            var recent = parseDeaths(wikitext, year).filter(function (item) {&lt;br /&gt;
                return item.year * 10000 + (item.month + 1) * 100 + item.day &amp;lt;= todayStamp;&lt;br /&gt;
            }).sort(function (a, b) {&lt;br /&gt;
                return (b.year * 10000 + (b.month + 1) * 100 + b.day) - (a.year * 10000 + (a.month + 1) * 100 + a.day);&lt;br /&gt;
            }).slice(0, 5);&lt;br /&gt;
            if (!recent.length) {&lt;br /&gt;
                el.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;No recent deaths listed.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            el.innerHTML = recent.map(function (item) {&lt;br /&gt;
                var mon = (monthNames[item.month] || &amp;#039;&amp;#039;).substring(0, 3);&lt;br /&gt;
                return &amp;#039;&amp;lt;a class=&amp;quot;bp-vec-death&amp;quot; href=&amp;quot;&amp;#039; + item.url + &amp;#039;&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;bp-vec-date&amp;quot;&amp;gt;&amp;#039; + String(item.day).padStart(2, &amp;#039;0&amp;#039;) + &amp;#039; &amp;#039; + mon + &amp;#039;&amp;lt;/span&amp;gt; &amp;lt;b&amp;gt;&amp;#039; + item.name + &amp;#039;&amp;lt;/b&amp;gt;&amp;#039; +&lt;br /&gt;
                    (item.detail ? &amp;#039;&amp;lt;small&amp;gt;&amp;#039; + item.detail + &amp;#039;&amp;lt;/small&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
            }).join(&amp;#039;&amp;#039;) +&lt;br /&gt;
                &amp;#039;&amp;lt;div class=&amp;quot;bp-vec-foot&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(year + &amp;#039; in India&amp;#039;) + &amp;#039;#Deaths&amp;quot;&amp;gt;All deaths&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            console.error(e);&lt;br /&gt;
            el.innerHTML = &amp;#039;&amp;lt;p class=&amp;quot;bp-vec-empty&amp;quot;&amp;gt;Deaths could not be loaded.&amp;lt;/p&amp;gt;&amp;#039;;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function boot() {&lt;br /&gt;
        injectStyles();&lt;br /&gt;
        fillNewsDyk();&lt;br /&gt;
        fillEvents();&lt;br /&gt;
        fillDeaths();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (document.readyState === &amp;#039;loading&amp;#039;) {&lt;br /&gt;
        document.addEventListener(&amp;#039;DOMContentLoaded&amp;#039;, boot);&lt;br /&gt;
    } else {&lt;br /&gt;
        boot();&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>WikiDwarf</name></author>
	</entry>
</feed>