<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://noctkj.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMobile.js</id>
	<title>MediaWiki:Mobile.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://noctkj.net/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AMobile.js"/>
	<link rel="alternate" type="text/html" href="https://noctkj.net/index.php?title=MediaWiki:Mobile.js&amp;action=history"/>
	<updated>2026-07-06T09:41:25Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://noctkj.net/index.php?title=MediaWiki:Mobile.js&amp;diff=1270&amp;oldid=prev</id>
		<title>Novy: Enable copy buttons on Minerva/mobile views</title>
		<link rel="alternate" type="text/html" href="https://noctkj.net/index.php?title=MediaWiki:Mobile.js&amp;diff=1270&amp;oldid=prev"/>
		<updated>2026-06-13T02:20:48Z</updated>

		<summary type="html">&lt;p&gt;Enable copy buttons on Minerva/mobile views&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/* Load copy-code enhancement for Minerva/mobile views too */&lt;br /&gt;
(function () {&lt;br /&gt;
function fallbackCopy(text) {&lt;br /&gt;
var textarea = document.createElement(&amp;#039;textarea&amp;#039;);&lt;br /&gt;
textarea.value = text;&lt;br /&gt;
textarea.setAttribute(&amp;#039;readonly&amp;#039;, &amp;#039;readonly&amp;#039;);&lt;br /&gt;
textarea.style.position = &amp;#039;absolute&amp;#039;;&lt;br /&gt;
textarea.style.left = &amp;#039;-9999px&amp;#039;;&lt;br /&gt;
document.body.appendChild(textarea);&lt;br /&gt;
textarea.select();&lt;br /&gt;
try {&lt;br /&gt;
document.execCommand(&amp;#039;copy&amp;#039;);&lt;br /&gt;
} finally {&lt;br /&gt;
document.body.removeChild(textarea);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function copyText(text) {&lt;br /&gt;
if (navigator.clipboard &amp;amp;&amp;amp; window.isSecureContext) {&lt;br /&gt;
return navigator.clipboard.writeText(text);&lt;br /&gt;
}&lt;br /&gt;
return new Promise(function (resolve) {&lt;br /&gt;
fallbackCopy(text);&lt;br /&gt;
resolve();&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function flashButton(button, label) {&lt;br /&gt;
var original = button.getAttribute(&amp;#039;data-original-label&amp;#039;) || &amp;#039;Copy&amp;#039;;&lt;br /&gt;
button.textContent = label;&lt;br /&gt;
window.setTimeout(function () {&lt;br /&gt;
button.textContent = original;&lt;br /&gt;
}, 1400);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function enhanceCodeBlock(container) {&lt;br /&gt;
var pre = container.matches(&amp;#039;pre&amp;#039;) ? container : container.querySelector(&amp;#039;pre&amp;#039;);&lt;br /&gt;
if (!pre || pre.dataset.instantCopyReady === &amp;#039;1&amp;#039;) {&lt;br /&gt;
return;&lt;br /&gt;
}&lt;br /&gt;
pre.dataset.instantCopyReady = &amp;#039;1&amp;#039;;&lt;br /&gt;
var host = container.classList.contains(&amp;#039;mw-highlight&amp;#039;) ? container : pre;&lt;br /&gt;
var wrapper = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
wrapper.className = &amp;#039;oc-copy-wrap&amp;#039;;&lt;br /&gt;
host.parentNode.insertBefore(wrapper, host);&lt;br /&gt;
wrapper.appendChild(host);&lt;br /&gt;
var button = document.createElement(&amp;#039;button&amp;#039;);&lt;br /&gt;
button.type = &amp;#039;button&amp;#039;;&lt;br /&gt;
button.className = &amp;#039;oc-copy-button&amp;#039;;&lt;br /&gt;
button.textContent = &amp;#039;Copy&amp;#039;;&lt;br /&gt;
button.setAttribute(&amp;#039;data-original-label&amp;#039;, &amp;#039;Copy&amp;#039;);&lt;br /&gt;
button.setAttribute(&amp;#039;aria-label&amp;#039;, &amp;#039;Copy code block&amp;#039;);&lt;br /&gt;
button.addEventListener(&amp;#039;click&amp;#039;, function () {&lt;br /&gt;
copyText(pre.innerText || pre.textContent || &amp;#039;&amp;#039;)&lt;br /&gt;
.then(function () { flashButton(button, &amp;#039;Copied&amp;#039;); })&lt;br /&gt;
.catch(function () { flashButton(button, &amp;#039;Failed&amp;#039;); });&lt;br /&gt;
});&lt;br /&gt;
wrapper.appendChild(button);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function initCopyButtons(rootNode) {&lt;br /&gt;
var root = rootNode &amp;amp;&amp;amp; rootNode.querySelectorAll ? rootNode : document;&lt;br /&gt;
var nodes = root.querySelectorAll(&amp;#039;.mw-highlight, pre&amp;#039;);&lt;br /&gt;
nodes.forEach(function (node) {&lt;br /&gt;
if (node.closest(&amp;#039;.oc-copy-wrap&amp;#039;)) {&lt;br /&gt;
return;&lt;br /&gt;
}&lt;br /&gt;
enhanceCodeBlock(node);&lt;br /&gt;
});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
document.addEventListener(&amp;#039;DOMContentLoaded&amp;#039;, function () {&lt;br /&gt;
initCopyButtons(document);&lt;br /&gt;
});&lt;br /&gt;
}());&lt;/div&gt;</summary>
		<author><name>Novy</name></author>
	</entry>
</feed>