<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://dev.vanisource.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AVerseDrawer.js</id>
	<title>MediaWiki:VerseDrawer.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://dev.vanisource.org/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AVerseDrawer.js"/>
	<link rel="alternate" type="text/html" href="https://dev.vanisource.org/w/index.php?title=MediaWiki:VerseDrawer.js&amp;action=history"/>
	<updated>2026-10-22T11:41:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://dev.vanisource.org/w/index.php?title=MediaWiki:VerseDrawer.js&amp;diff=793410&amp;oldid=prev</id>
		<title>Kashya: Created page with &quot;/* File 02: Vanisource verse drawer — BG 2.13 dev pilot */ (function () {     &#039;use strict&#039;;      if (location.hostname !== &#039;dev.vanisource.org&#039;) return;     if (mw.config.get(&#039;wgPageName&#039;) !== &#039;BG_2.13&#039;) return;     if (mw.config.get(&#039;wgAction&#039;) !== &#039;view&#039;) return;      mw.loader.using([         &#039;mediawiki.api&#039;,         &#039;mediawiki.util&#039;     ]).then(function () {         mw.hook(&#039;wikipage.content&#039;).add(function ($content) {             var verse = $content[0].querySelec...&quot;</title>
		<link rel="alternate" type="text/html" href="https://dev.vanisource.org/w/index.php?title=MediaWiki:VerseDrawer.js&amp;diff=793410&amp;oldid=prev"/>
		<updated>2026-10-18T04:20:29Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;span class=&quot;autocomment&quot;&gt;File 02: Vanisource verse drawer — BG 2.13 dev pilot: &lt;/span&gt; (function () {     &amp;#039;use strict&amp;#039;;      if (location.hostname !== &amp;#039;dev.vanisource.org&amp;#039;) return;     if (mw.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;BG_2.13&amp;#039;) return;     if (mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) return;      mw.loader.using([         &amp;#039;mediawiki.api&amp;#039;,         &amp;#039;mediawiki.util&amp;#039;     ]).then(function () {         mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ($content) {             var verse = $content[0].querySelec...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* File 02: Vanisource verse drawer — BG 2.13 dev pilot */&lt;br /&gt;
(function () {&lt;br /&gt;
    &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    if (location.hostname !== &amp;#039;dev.vanisource.org&amp;#039;) return;&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgPageName&amp;#039;) !== &amp;#039;BG_2.13&amp;#039;) return;&lt;br /&gt;
    if (mw.config.get(&amp;#039;wgAction&amp;#039;) !== &amp;#039;view&amp;#039;) return;&lt;br /&gt;
&lt;br /&gt;
    mw.loader.using([&lt;br /&gt;
        &amp;#039;mediawiki.api&amp;#039;,&lt;br /&gt;
        &amp;#039;mediawiki.util&amp;#039;&lt;br /&gt;
    ]).then(function () {&lt;br /&gt;
        mw.hook(&amp;#039;wikipage.content&amp;#039;).add(function ($content) {&lt;br /&gt;
            var verse = $content[0].querySelector(&amp;#039;.verse&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            if (!verse || document.getElementById(&amp;#039;vsd-open&amp;#039;)) return;&lt;br /&gt;
&lt;br /&gt;
            var api = new mw.Api();&lt;br /&gt;
            var loaded = false;&lt;br /&gt;
            var busy = false;&lt;br /&gt;
            var continuation = null;&lt;br /&gt;
            var scanned = 0;&lt;br /&gt;
            var matches = new Map();&lt;br /&gt;
            var requestId = 0;&lt;br /&gt;
&lt;br /&gt;
            var style = document.createElement(&amp;#039;style&amp;#039;);&lt;br /&gt;
            style.textContent = `&lt;br /&gt;
                #vsd-open,&lt;br /&gt;
                .vsd button {&lt;br /&gt;
                    font: inherit;&lt;br /&gt;
                    cursor: pointer;&lt;br /&gt;
                    border: 1px solid #9d7860;&lt;br /&gt;
                    border-radius: 6px;&lt;br /&gt;
                    padding: 8px 12px;&lt;br /&gt;
                    background: white;&lt;br /&gt;
                    color: #51331f;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                #vsd-open {&lt;br /&gt;
                    margin: 10px 0 18px;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd[hidden] {&lt;br /&gt;
                    display: none !important;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd {&lt;br /&gt;
                    position: fixed;&lt;br /&gt;
                    inset: 0 0 0 auto;&lt;br /&gt;
                    width: min(520px, 95vw);&lt;br /&gt;
                    background: #fffdf8;&lt;br /&gt;
                    color: #29231d;&lt;br /&gt;
                    box-shadow: -5px 0 24px #0003;&lt;br /&gt;
                    z-index: 10001;&lt;br /&gt;
                    display: flex;&lt;br /&gt;
                    flex-direction: column;&lt;br /&gt;
                    font: 16px/1.6 sans-serif;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd header {&lt;br /&gt;
                    display: flex;&lt;br /&gt;
                    gap: 14px;&lt;br /&gt;
                    align-items: center;&lt;br /&gt;
                    padding: 18px 20px;&lt;br /&gt;
                    border-bottom: 1px solid #ddcdbb;&lt;br /&gt;
                    background: #f5ebdf;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd h2 {&lt;br /&gt;
                    font-size: 21px;&lt;br /&gt;
                    margin: 0;&lt;br /&gt;
                    flex: 1;&lt;br /&gt;
                    color: #51331f;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-main {&lt;br /&gt;
                    overflow: auto;&lt;br /&gt;
                    padding: 20px;&lt;br /&gt;
                    flex: 1;&lt;br /&gt;
                    min-height: 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-note {&lt;br /&gt;
                    font-size: 13px;&lt;br /&gt;
                    color: #655b50;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-card {&lt;br /&gt;
                    border-bottom: 1px solid #ddcdbb;&lt;br /&gt;
                    padding: 16px 0;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-card button {&lt;br /&gt;
                    text-align: left;&lt;br /&gt;
                    width: 100%;&lt;br /&gt;
                    margin-bottom: 8px;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd a {&lt;br /&gt;
                    color: #754325;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-text {&lt;br /&gt;
                    white-space: pre-wrap;&lt;br /&gt;
                    font-family: Georgia, serif;&lt;br /&gt;
                    line-height: 1.8;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-tools {&lt;br /&gt;
                    display: flex;&lt;br /&gt;
                    flex-wrap: wrap;&lt;br /&gt;
                    gap: 12px;&lt;br /&gt;
                    margin-bottom: 18px;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                .vsd-selected {&lt;br /&gt;
                    outline: 2px solid #9d7860;&lt;br /&gt;
                    outline-offset: 7px;&lt;br /&gt;
                    cursor: pointer;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                @media (min-width: 1200px) {&lt;br /&gt;
                    body.vsd-is-open {&lt;br /&gt;
                        padding-right: 520px;&lt;br /&gt;
                        box-sizing: border-box;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            `;&lt;br /&gt;
            document.head.appendChild(style);&lt;br /&gt;
&lt;br /&gt;
            function element(tag, text, className) {&lt;br /&gt;
                var node = document.createElement(tag);&lt;br /&gt;
&lt;br /&gt;
                if (text !== undefined) node.textContent = text;&lt;br /&gt;
                if (className) node.className = className;&lt;br /&gt;
&lt;br /&gt;
                return node;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var openButton = element(&lt;br /&gt;
                &amp;#039;button&amp;#039;,&lt;br /&gt;
                &amp;#039;Lectures citing BG 2.13&amp;#039;&lt;br /&gt;
            );&lt;br /&gt;
            openButton.id = &amp;#039;vsd-open&amp;#039;;&lt;br /&gt;
            openButton.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
            openButton.setAttribute(&amp;#039;aria-expanded&amp;#039;, &amp;#039;false&amp;#039;);&lt;br /&gt;
            openButton.setAttribute(&amp;#039;aria-controls&amp;#039;, &amp;#039;vsd-panel&amp;#039;);&lt;br /&gt;
            verse.after(openButton);&lt;br /&gt;
&lt;br /&gt;
            verse.title = &amp;#039;Explore lectures citing BG 2.13&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var panel = element(&amp;#039;aside&amp;#039;, undefined, &amp;#039;vsd&amp;#039;);&lt;br /&gt;
            panel.id = &amp;#039;vsd-panel&amp;#039;;&lt;br /&gt;
            panel.hidden = true;&lt;br /&gt;
            panel.setAttribute(&amp;#039;aria-labelledby&amp;#039;, &amp;#039;vsd-title&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            var header = element(&amp;#039;header&amp;#039;);&lt;br /&gt;
            var heading = element(&amp;#039;h2&amp;#039;, &amp;#039;BG 2.13 · Lectures&amp;#039;);&lt;br /&gt;
            heading.id = &amp;#039;vsd-title&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var closeButton = element(&amp;#039;button&amp;#039;, &amp;#039;Close&amp;#039;);&lt;br /&gt;
            closeButton.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
            var main = element(&amp;#039;div&amp;#039;, undefined, &amp;#039;vsd-main&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            header.append(heading, closeButton);&lt;br /&gt;
            panel.append(header, main);&lt;br /&gt;
            document.body.append(panel);&lt;br /&gt;
&lt;br /&gt;
            function hide() {&lt;br /&gt;
                panel.hidden = true;&lt;br /&gt;
                document.body.classList.remove(&amp;#039;vsd-is-open&amp;#039;);&lt;br /&gt;
                verse.classList.remove(&amp;#039;vsd-selected&amp;#039;);&lt;br /&gt;
                openButton.setAttribute(&amp;#039;aria-expanded&amp;#039;, &amp;#039;false&amp;#039;);&lt;br /&gt;
                openButton.focus();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            closeButton.onclick = hide;&lt;br /&gt;
&lt;br /&gt;
            document.addEventListener(&amp;#039;keydown&amp;#039;, function (event) {&lt;br /&gt;
                if (event.key === &amp;#039;Escape&amp;#039; &amp;amp;&amp;amp; !panel.hidden) hide();&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            function show() {&lt;br /&gt;
                panel.hidden = false;&lt;br /&gt;
                document.body.classList.add(&amp;#039;vsd-is-open&amp;#039;);&lt;br /&gt;
                verse.classList.add(&amp;#039;vsd-selected&amp;#039;);&lt;br /&gt;
                openButton.setAttribute(&amp;#039;aria-expanded&amp;#039;, &amp;#039;true&amp;#039;);&lt;br /&gt;
                closeButton.focus();&lt;br /&gt;
&lt;br /&gt;
                if (!loaded &amp;amp;&amp;amp; !busy) load();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            openButton.onclick = show;&lt;br /&gt;
&lt;br /&gt;
            verse.addEventListener(&amp;#039;click&amp;#039;, function (event) {&lt;br /&gt;
                if (&lt;br /&gt;
                    !event.target.closest(&amp;#039;a&amp;#039;) &amp;amp;&amp;amp;&lt;br /&gt;
                    !window.getSelection().toString()&lt;br /&gt;
                ) {&lt;br /&gt;
                    show();&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
&lt;br /&gt;
            function sourceLink(title) {&lt;br /&gt;
                var link = element(&amp;#039;a&amp;#039;, &amp;#039;Open full page&amp;#039;);&lt;br /&gt;
                link.href = mw.util.getUrl(title);&lt;br /&gt;
                link.target = &amp;#039;_blank&amp;#039;;&lt;br /&gt;
                link.rel = &amp;#039;noopener&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
                return link;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            function render(message) {&lt;br /&gt;
                requestId++;&lt;br /&gt;
                heading.textContent = &amp;#039;BG 2.13 · Lectures&amp;#039;;&lt;br /&gt;
                main.replaceChildren();&lt;br /&gt;
&lt;br /&gt;
                main.append(element(&lt;br /&gt;
                    &amp;#039;p&amp;#039;,&lt;br /&gt;
                    &amp;#039;Pilot: existing links filtered by lecture titles &amp;#039; +&lt;br /&gt;
                    &amp;#039;and categories. Unlinked quotations are not included.&amp;#039;,&lt;br /&gt;
                    &amp;#039;vsd-note&amp;#039;&lt;br /&gt;
                ));&lt;br /&gt;
&lt;br /&gt;
                main.append(element(&lt;br /&gt;
                    &amp;#039;p&amp;#039;,&lt;br /&gt;
                    matches.size + &amp;#039; lecture pages found · &amp;#039; +&lt;br /&gt;
                    scanned + &amp;#039; linked pages checked.&amp;#039;,&lt;br /&gt;
                    &amp;#039;vsd-note&amp;#039;&lt;br /&gt;
                ));&lt;br /&gt;
&lt;br /&gt;
                if (message) main.append(element(&amp;#039;p&amp;#039;, message));&lt;br /&gt;
&lt;br /&gt;
                Array.from(matches.values())&lt;br /&gt;
                    .sort(function (a, b) {&lt;br /&gt;
                        return a.title.localeCompare(b.title);&lt;br /&gt;
                    })&lt;br /&gt;
                    .forEach(function (page) {&lt;br /&gt;
                        var card = element(&lt;br /&gt;
                            &amp;#039;div&amp;#039;,&lt;br /&gt;
                            undefined,&lt;br /&gt;
                            &amp;#039;vsd-card&amp;#039;&lt;br /&gt;
                        );&lt;br /&gt;
&lt;br /&gt;
                        var readButton = element(&amp;#039;button&amp;#039;, page.title);&lt;br /&gt;
                        readButton.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
                        readButton.onclick = function () {&lt;br /&gt;
                            transcript(page.title);&lt;br /&gt;
                        };&lt;br /&gt;
&lt;br /&gt;
                        card.append(readButton, sourceLink(page.title));&lt;br /&gt;
                        main.append(card);&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                if (!busy &amp;amp;&amp;amp; (!loaded || continuation)) {&lt;br /&gt;
                    var moreButton = element(&lt;br /&gt;
                        &amp;#039;button&amp;#039;,&lt;br /&gt;
                        loaded ? &amp;#039;Check more linked pages&amp;#039; : &amp;#039;Retry&amp;#039;&lt;br /&gt;
                    );&lt;br /&gt;
                    moreButton.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
                    moreButton.onclick = load;&lt;br /&gt;
                    main.append(moreButton);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                if (loaded &amp;amp;&amp;amp; !continuation &amp;amp;&amp;amp; !matches.size) {&lt;br /&gt;
                    main.append(element(&lt;br /&gt;
                        &amp;#039;p&amp;#039;,&lt;br /&gt;
                        &amp;#039;No lecture pages were identified through these &amp;#039; +&lt;br /&gt;
                        &amp;#039;links. This does not mean the verse was never cited.&amp;#039;&lt;br /&gt;
                    ));&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            async function load() {&lt;br /&gt;
                if (busy) return;&lt;br /&gt;
&lt;br /&gt;
                busy = true;&lt;br /&gt;
                render(&amp;#039;Checking linked pages…&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
                var parameters = {&lt;br /&gt;
                    action: &amp;#039;query&amp;#039;,&lt;br /&gt;
                    formatversion: 2,&lt;br /&gt;
                    generator: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
                    gbltitle: &amp;#039;BG 2.13&amp;#039;,&lt;br /&gt;
                    gblnamespace: 0,&lt;br /&gt;
                    gbllimit: 50,&lt;br /&gt;
                    prop: &amp;#039;categories&amp;#039;,&lt;br /&gt;
                    cllimit: &amp;#039;max&amp;#039;&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                var next = continuation;&lt;br /&gt;
                var pending = new Map();&lt;br /&gt;
&lt;br /&gt;
                try {&lt;br /&gt;
                    do {&lt;br /&gt;
                        var data = await api.get(&lt;br /&gt;
                            Object.assign({}, parameters, next || {})&lt;br /&gt;
                        );&lt;br /&gt;
&lt;br /&gt;
                        var pages = (&lt;br /&gt;
                            data.query &amp;amp;&amp;amp; data.query.pages&lt;br /&gt;
                        ) || [];&lt;br /&gt;
&lt;br /&gt;
                        pages.forEach(function (page) {&lt;br /&gt;
                            var previous = pending.get(page.pageid);&lt;br /&gt;
&lt;br /&gt;
                            if (previous) {&lt;br /&gt;
                                page.categories = (&lt;br /&gt;
                                    previous.categories || []&lt;br /&gt;
                                ).concat(page.categories || []);&lt;br /&gt;
                            }&lt;br /&gt;
&lt;br /&gt;
                            pending.set(page.pageid, page);&lt;br /&gt;
                        });&lt;br /&gt;
&lt;br /&gt;
                        next = data.continue || null;&lt;br /&gt;
                    } while (next &amp;amp;&amp;amp; next.clcontinue);&lt;br /&gt;
&lt;br /&gt;
                    pending.forEach(function (page) {&lt;br /&gt;
                        var isLecture = /\blecture\b/i.test(page.title);&lt;br /&gt;
&lt;br /&gt;
                        if (!isLecture) {&lt;br /&gt;
                            isLecture = (page.categories || []).some(&lt;br /&gt;
                                function (category) {&lt;br /&gt;
                                    return /\blectures?\b/i.test(&lt;br /&gt;
                                        category.title&lt;br /&gt;
                                    );&lt;br /&gt;
                                }&lt;br /&gt;
                            );&lt;br /&gt;
                        }&lt;br /&gt;
&lt;br /&gt;
                        if (isLecture &amp;amp;&amp;amp; !page.redirect) {&lt;br /&gt;
                            matches.set(page.pageid, page);&lt;br /&gt;
                        }&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                    scanned += pending.size;&lt;br /&gt;
                    continuation = next;&lt;br /&gt;
                    loaded = true;&lt;br /&gt;
                    busy = false;&lt;br /&gt;
                    render();&lt;br /&gt;
                } catch (error) {&lt;br /&gt;
                    busy = false;&lt;br /&gt;
                    render(&amp;#039;The API request failed. Please retry.&amp;#039;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            async function transcript(title) {&lt;br /&gt;
                var ownRequest = ++requestId;&lt;br /&gt;
&lt;br /&gt;
                heading.textContent = &amp;#039;Lecture&amp;#039;;&lt;br /&gt;
                main.replaceChildren();&lt;br /&gt;
                main.scrollTop = 0;&lt;br /&gt;
&lt;br /&gt;
                var tools = element(&amp;#039;div&amp;#039;, undefined, &amp;#039;vsd-tools&amp;#039;);&lt;br /&gt;
                var backButton = element(&lt;br /&gt;
                    &amp;#039;button&amp;#039;,&lt;br /&gt;
                    &amp;#039;Back to lecture list&amp;#039;&lt;br /&gt;
                );&lt;br /&gt;
                backButton.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
                backButton.onclick = function () {&lt;br /&gt;
                    render();&lt;br /&gt;
                };&lt;br /&gt;
&lt;br /&gt;
                tools.append(backButton, sourceLink(title));&lt;br /&gt;
                main.append(tools, element(&amp;#039;h3&amp;#039;, title));&lt;br /&gt;
&lt;br /&gt;
                var status = element(&amp;#039;p&amp;#039;, &amp;#039;Loading transcript…&amp;#039;);&lt;br /&gt;
                main.append(status);&lt;br /&gt;
&lt;br /&gt;
                try {&lt;br /&gt;
                    var data = await api.get({&lt;br /&gt;
                        action: &amp;#039;parse&amp;#039;,&lt;br /&gt;
                        page: title,&lt;br /&gt;
                        prop: &amp;#039;text&amp;#039;,&lt;br /&gt;
                        formatversion: 2,&lt;br /&gt;
                        disableeditsection: 1&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                    if (ownRequest !== requestId) return;&lt;br /&gt;
&lt;br /&gt;
                    var doc = new DOMParser().parseFromString(&lt;br /&gt;
                        data.parse.text,&lt;br /&gt;
                        &amp;#039;text/html&amp;#039;&lt;br /&gt;
                    );&lt;br /&gt;
&lt;br /&gt;
                    doc.querySelectorAll(&lt;br /&gt;
                        &amp;#039;script,style,iframe,nav,&amp;#039; +&lt;br /&gt;
                        &amp;#039;.mw-editsection,.printfooter&amp;#039;&lt;br /&gt;
                    ).forEach(function (node) {&lt;br /&gt;
                        node.remove();&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                    var root = (&lt;br /&gt;
                        doc.querySelector(&amp;#039;.mw-parser-output&amp;#039;) ||&lt;br /&gt;
                        doc.body&lt;br /&gt;
                    );&lt;br /&gt;
&lt;br /&gt;
                    root.querySelectorAll(&lt;br /&gt;
                        &amp;#039;p,div,h2,h3,h4,li,br&amp;#039;&lt;br /&gt;
                    ).forEach(function (node) {&lt;br /&gt;
                        node.appendChild(doc.createTextNode(&amp;#039;\n&amp;#039;));&lt;br /&gt;
                    });&lt;br /&gt;
&lt;br /&gt;
                    var text = root.textContent&lt;br /&gt;
                        .replace(/\n[ \t]+/g, &amp;#039;\n&amp;#039;)&lt;br /&gt;
                        .replace(/\n{3,}/g, &amp;#039;\n\n&amp;#039;)&lt;br /&gt;
                        .trim();&lt;br /&gt;
&lt;br /&gt;
                    status.remove();&lt;br /&gt;
&lt;br /&gt;
                    var box = element(&lt;br /&gt;
                        &amp;#039;div&amp;#039;,&lt;br /&gt;
                        undefined,&lt;br /&gt;
                        &amp;#039;vsd-text&amp;#039;&lt;br /&gt;
                    );&lt;br /&gt;
&lt;br /&gt;
                    var index = text.toLowerCase().search(&lt;br /&gt;
                        /dehino|bg\s*2\.13/&lt;br /&gt;
                    );&lt;br /&gt;
&lt;br /&gt;
                    if (index &amp;gt;= 0) {&lt;br /&gt;
                        var start = Math.max(0, index - 180);&lt;br /&gt;
                        var end = Math.min(text.length, index + 600);&lt;br /&gt;
&lt;br /&gt;
                        box.append(document.createTextNode(&lt;br /&gt;
                            text.slice(0, start)&lt;br /&gt;
                        ));&lt;br /&gt;
&lt;br /&gt;
                        var mark = element(&lt;br /&gt;
                            &amp;#039;mark&amp;#039;,&lt;br /&gt;
                            text.slice(start, end)&lt;br /&gt;
                        );&lt;br /&gt;
&lt;br /&gt;
                        box.append(&lt;br /&gt;
                            mark,&lt;br /&gt;
                            document.createTextNode(text.slice(end))&lt;br /&gt;
                        );&lt;br /&gt;
                        main.append(box);&lt;br /&gt;
&lt;br /&gt;
                        requestAnimationFrame(function () {&lt;br /&gt;
                            if (ownRequest !== requestId) return;&lt;br /&gt;
&lt;br /&gt;
                            var offset = (&lt;br /&gt;
                                mark.getBoundingClientRect().top -&lt;br /&gt;
                                main.getBoundingClientRect().top&lt;br /&gt;
                            );&lt;br /&gt;
&lt;br /&gt;
                            main.scrollTop += offset - 100;&lt;br /&gt;
                        });&lt;br /&gt;
                    } else {&lt;br /&gt;
                        box.textContent = text;&lt;br /&gt;
                        main.append(box);&lt;br /&gt;
                    }&lt;br /&gt;
                } catch (error) {&lt;br /&gt;
                    if (ownRequest === requestId) {&lt;br /&gt;
                        status.textContent =&lt;br /&gt;
                            &amp;#039;Could not load the transcript. &amp;#039; +&lt;br /&gt;
                            &amp;#039;Use Open full page.&amp;#039;;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Kashya</name></author>
	</entry>
</feed>