<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://interfaces3.hunter.cryptograss.live/index.php?action=history&amp;feed=atom&amp;title=User%3AMagent%2FCommon.js_after_131</id>
	<title>User:Magent/Common.js after 131 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://interfaces3.hunter.cryptograss.live/index.php?action=history&amp;feed=atom&amp;title=User%3AMagent%2FCommon.js_after_131"/>
	<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=User:Magent/Common.js_after_131&amp;action=history"/>
	<updated>2026-11-15T07:44:26Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>https://interfaces3.hunter.cryptograss.live/index.php?title=User:Magent/Common.js_after_131&amp;diff=9318&amp;oldid=prev</id>
		<title>Magent: The Common.js that should remain once pickipedia#131 is deployed: zine styling only, with a header saying where the rest went</title>
		<link rel="alternate" type="text/html" href="https://interfaces3.hunter.cryptograss.live/index.php?title=User:Magent/Common.js_after_131&amp;diff=9318&amp;oldid=prev"/>
		<updated>2026-10-08T19:06:28Z</updated>

		<summary type="html">&lt;p&gt;The Common.js that should remain once pickipedia#131 is deployed: zine styling only, with a header saying where the rest went&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * What used to be here now ships with the PickiPediaReleases extension.&lt;br /&gt;
 *&lt;br /&gt;
 *   the HLS video player   -&amp;gt; ext.pickipediaReleases.videoPlayer.js    (#124)&lt;br /&gt;
 *   Blue Railroad date picker -&amp;gt; ext.pickipediaReleases.blueRailroadDate.js (#131)&lt;br /&gt;
 *   &amp;quot;X blocks ago&amp;quot;         -&amp;gt; ext.pickipediaReleases.blocksAgo.js      (#131)&lt;br /&gt;
 *   Instrument form checks -&amp;gt; ext.pickipediaReleases.instrumentForm.js (#131)&lt;br /&gt;
 *&lt;br /&gt;
 * All four load on every page from the extension&amp;#039;s BeforePageDisplay hook,&lt;br /&gt;
 * exactly as they did from here, and each does nothing unless the form or&lt;br /&gt;
 * element it cares about is on the page being shown. Changing any of them is&lt;br /&gt;
 * a pull request now: reviewed, syntax-checked by CI, deployed by Jenkins —&lt;br /&gt;
 * rather than several hundred lines pasted into this box, which is how the&lt;br /&gt;
 * whole of this file went down for 23 minutes on 15 September 2026.&lt;br /&gt;
 *&lt;br /&gt;
 * What remains below is the user-subpage zine styling. It stays because it is&lt;br /&gt;
 * bound to classes defined in MediaWiki:Common.css, and moving the script&lt;br /&gt;
 * without its stylesheet would split one feature across two homes. It goes&lt;br /&gt;
 * next, with the CSS, after which this page can be empty.&lt;br /&gt;
 *&lt;br /&gt;
 * See cryptograss/pickipedia#124 and #131.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* ============================================================&lt;br /&gt;
 * Pickipedia — User-subpage zine/Substack styling&lt;br /&gt;
 *&lt;br /&gt;
 * Layout:&lt;br /&gt;
 *   - corner logo (absolute-positioned upper-left of viewport,&lt;br /&gt;
 *     OUTSIDE all wiki wrappers — does not push content down)&lt;br /&gt;
 *   - non-sticky topbar (just nav) at top of body&lt;br /&gt;
 *   - hero block with title (top), then USER:Username kicker below,&lt;br /&gt;
 *     optional dek + meta&lt;br /&gt;
 *   - light/dark mode toggle (persisted in localStorage)&lt;br /&gt;
 *&lt;br /&gt;
 * Variant from HTML comment marker `pickipedia:variant=letter|masthead`&lt;br /&gt;
 * or category membership; default letter.&lt;br /&gt;
 * ============================================================ */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  if (typeof mw === &amp;#039;undefined&amp;#039; || !mw.config) return;&lt;br /&gt;
&lt;br /&gt;
  var nsNumber = mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;);&lt;br /&gt;
  var pageName = mw.config.get(&amp;#039;wgPageName&amp;#039;) || &amp;#039;&amp;#039;;&lt;br /&gt;
  var title    = mw.config.get(&amp;#039;wgTitle&amp;#039;) || &amp;#039;&amp;#039;;&lt;br /&gt;
  var action   = mw.config.get(&amp;#039;wgAction&amp;#039;) || &amp;#039;view&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  if (nsNumber !== 2) return;&lt;br /&gt;
  if (action !== &amp;#039;view&amp;#039;) return;&lt;br /&gt;
  if (title.indexOf(&amp;#039;/&amp;#039;) === -1) return;&lt;br /&gt;
&lt;br /&gt;
  var slash    = title.indexOf(&amp;#039;/&amp;#039;);&lt;br /&gt;
  var username = title.slice(0, slash).replace(/_/g, &amp;#039; &amp;#039;);&lt;br /&gt;
  var subpage  = title.slice(slash + 1).replace(/_/g, &amp;#039; &amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  var body = document.body;&lt;br /&gt;
  body.classList.add(&amp;#039;pickipedia-userpost&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  var variant = &amp;#039;letter&amp;#039;;&lt;br /&gt;
  var content = document.querySelector(&amp;#039;.mw-parser-output&amp;#039;);&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var html = content.innerHTML || &amp;#039;&amp;#039;;&lt;br /&gt;
    var m = html.match(/pickipedia:variant\s*=\s*(letter|masthead)/i);&lt;br /&gt;
    if (m) variant = m[1].toLowerCase();&lt;br /&gt;
  }&lt;br /&gt;
  var cats = mw.config.get(&amp;#039;wgCategories&amp;#039;) || [];&lt;br /&gt;
  if (cats.indexOf(&amp;#039;Masthead style&amp;#039;) !== -1) variant = &amp;#039;masthead&amp;#039;;&lt;br /&gt;
  if (cats.indexOf(&amp;#039;Letter style&amp;#039;) !== -1) variant = &amp;#039;letter&amp;#039;;&lt;br /&gt;
  body.classList.add(&amp;#039;pickipedia-variant-&amp;#039; + variant);&lt;br /&gt;
&lt;br /&gt;
  var STORAGE_KEY = &amp;#039;pickipedia-mode&amp;#039;;&lt;br /&gt;
  var saved = null;&lt;br /&gt;
  try { saved = localStorage.getItem(STORAGE_KEY); } catch (e) {}&lt;br /&gt;
  if (saved === &amp;#039;dark&amp;#039;) body.classList.add(&amp;#039;pickipedia-dark&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
  var LOGO_URL = &amp;#039;/images/thumb/8/80/Pickipedia-quarter-transparent.png/400px-Pickipedia-quarter-transparent.png&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  // ---------- Corner logo: stand-alone body child, absolute-positioned. ----------&lt;br /&gt;
  var cornerLogo = document.createElement(&amp;#039;a&amp;#039;);&lt;br /&gt;
  cornerLogo.className = &amp;#039;pp-corner-logo&amp;#039;;&lt;br /&gt;
  cornerLogo.href = &amp;#039;/wiki/Main_Page&amp;#039;;&lt;br /&gt;
  cornerLogo.title = &amp;#039;PickiPedia home&amp;#039;;&lt;br /&gt;
  cornerLogo.innerHTML = &amp;#039;&amp;lt;img src=&amp;quot;&amp;#039; + LOGO_URL + &amp;#039;&amp;quot; alt=&amp;quot;PickiPedia&amp;quot;&amp;gt;&amp;#039;;&lt;br /&gt;
  document.body.insertBefore(cornerLogo, document.body.firstChild);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Topbar (nav only) ----------&lt;br /&gt;
  var topbar = document.createElement(&amp;#039;header&amp;#039;);&lt;br /&gt;
  topbar.className = &amp;#039;pickipedia-topbar&amp;#039;;&lt;br /&gt;
  topbar.innerHTML =&lt;br /&gt;
    &amp;#039;&amp;lt;nav class=&amp;quot;pickipedia-topbar-nav&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(pageName, { action: &amp;#039;edit&amp;#039; }) + &amp;#039;&amp;quot;&amp;gt;edit&amp;lt;/a&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(pageName, { action: &amp;#039;history&amp;#039; }) + &amp;#039;&amp;quot;&amp;gt;history&amp;lt;/a&amp;gt;&amp;#039; +&lt;br /&gt;
      &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(&amp;#039;Talk:&amp;#039; + pageName) + &amp;#039;&amp;quot;&amp;gt;talk&amp;lt;/a&amp;gt;&amp;#039; +&lt;br /&gt;
    &amp;#039;&amp;lt;/nav&amp;gt;&amp;#039;;&lt;br /&gt;
  document.body.insertBefore(topbar, cornerLogo.nextSibling);&lt;br /&gt;
&lt;br /&gt;
  // ---------- Hero ----------&lt;br /&gt;
  if (content) {&lt;br /&gt;
    var dek = &amp;#039;&amp;#039;;&lt;br /&gt;
    var dekEl = content.querySelector(&amp;#039;.pp-dek-source&amp;#039;);&lt;br /&gt;
    if (dekEl) {&lt;br /&gt;
      dek = dekEl.innerHTML;&lt;br /&gt;
      dekEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var kickerHtml = &amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; + mw.util.getUrl(&amp;#039;User:&amp;#039; + username.replace(/ /g, &amp;#039;_&amp;#039;)) +&lt;br /&gt;
                     &amp;#039;&amp;quot;&amp;gt;User:&amp;#039; + escapeHtml(username) + &amp;#039;&amp;lt;/a&amp;gt;&amp;#039;;&lt;br /&gt;
    var kickerEl = content.querySelector(&amp;#039;.pp-kicker-source&amp;#039;);&lt;br /&gt;
    if (kickerEl) {&lt;br /&gt;
      kickerHtml = escapeHtml(kickerEl.textContent.trim());&lt;br /&gt;
      kickerEl.remove();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    var lastMod = &amp;#039;&amp;#039;;&lt;br /&gt;
    var lastModEl = document.getElementById(&amp;#039;footer-info-lastmod&amp;#039;);&lt;br /&gt;
    if (lastModEl) lastMod = lastModEl.textContent.replace(/^\s*This page was last (edited|modified) on\s*/i, &amp;#039;&amp;#039;).trim();&lt;br /&gt;
&lt;br /&gt;
    var hero = document.createElement(&amp;#039;header&amp;#039;);&lt;br /&gt;
    hero.className = &amp;#039;pickipedia-hero&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    if (variant === &amp;#039;masthead&amp;#039;) {&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &amp;#039;&amp;lt;div class=&amp;quot;pp-topbar&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
          &amp;#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&amp;#039; + kickerHtml + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
          &amp;#039;&amp;lt;div class=&amp;quot;pp-topbar-rule&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
          (lastMod ? &amp;#039;&amp;lt;div class=&amp;quot;pp-topbar-vol&amp;quot;&amp;gt;&amp;#039; + escapeHtml(lastMod) + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) +&lt;br /&gt;
        &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
        &amp;#039;&amp;lt;div class=&amp;quot;pp-titlewrap&amp;quot;&amp;gt;&amp;#039; +&lt;br /&gt;
          &amp;#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&amp;#039; + escapeHtml(subpage) + &amp;#039;&amp;lt;/h1&amp;gt;&amp;#039; +&lt;br /&gt;
          (dek ? &amp;#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&amp;#039; + dek + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) +&lt;br /&gt;
        &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
    } else {&lt;br /&gt;
      // Letter variant: title first, then kicker, then optional dek/meta.&lt;br /&gt;
      hero.innerHTML =&lt;br /&gt;
        &amp;#039;&amp;lt;h1 class=&amp;quot;pp-title&amp;quot;&amp;gt;&amp;#039; + escapeHtml(subpage) + &amp;#039;&amp;lt;/h1&amp;gt;&amp;#039; +&lt;br /&gt;
        &amp;#039;&amp;lt;div class=&amp;quot;pp-kicker&amp;quot;&amp;gt;&amp;#039; + kickerHtml + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; +&lt;br /&gt;
        (dek ? &amp;#039;&amp;lt;p class=&amp;quot;pp-dek&amp;quot;&amp;gt;&amp;#039; + dek + &amp;#039;&amp;lt;/p&amp;gt;&amp;#039; : &amp;#039;&amp;#039;) +&lt;br /&gt;
        (lastMod ? &amp;#039;&amp;lt;div class=&amp;quot;pp-meta&amp;quot;&amp;gt;Last edited &amp;#039; + escapeHtml(lastMod) + &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; : &amp;#039;&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
    content.parentNode.insertBefore(hero, content);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // ---------- Light/dark toggle ----------&lt;br /&gt;
  var toggle = document.createElement(&amp;#039;button&amp;#039;);&lt;br /&gt;
  toggle.className = &amp;#039;pickipedia-mode&amp;#039;;&lt;br /&gt;
  toggle.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
  toggle.textContent = body.classList.contains(&amp;#039;pickipedia-dark&amp;#039;) ? &amp;#039;☼ Light&amp;#039; : &amp;#039;☾ Dark&amp;#039;;&lt;br /&gt;
  toggle.addEventListener(&amp;#039;click&amp;#039;, function () {&lt;br /&gt;
    var dark = body.classList.toggle(&amp;#039;pickipedia-dark&amp;#039;);&lt;br /&gt;
    toggle.textContent = dark ? &amp;#039;☼ Light&amp;#039; : &amp;#039;☾ Dark&amp;#039;;&lt;br /&gt;
    try { localStorage.setItem(STORAGE_KEY, dark ? &amp;#039;dark&amp;#039; : &amp;#039;light&amp;#039;); } catch (e) {}&lt;br /&gt;
  });&lt;br /&gt;
  document.body.appendChild(toggle);&lt;br /&gt;
&lt;br /&gt;
  function escapeHtml(s) {&lt;br /&gt;
    return String(s == null ? &amp;#039;&amp;#039; : s)&lt;br /&gt;
      .replace(/&amp;amp;/g, &amp;#039;&amp;amp;amp;&amp;#039;)&lt;br /&gt;
      .replace(/&amp;lt;/g, &amp;#039;&amp;amp;lt;&amp;#039;)&lt;br /&gt;
      .replace(/&amp;gt;/g, &amp;#039;&amp;amp;gt;&amp;#039;)&lt;br /&gt;
      .replace(/&amp;quot;/g, &amp;#039;&amp;amp;quot;&amp;#039;);&lt;br /&gt;
    }&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Magent</name></author>
	</entry>
</feed>