User:Qwerfjkl/scripts/sectionLink.js

mw.config.get('wgNamespaceNumber') >= 0 &&

$.when($.ready, mw.loader.using('mediawiki.util')).then(function copySectLink() {

let handler = e => {

e.preventDefault();

let text = (e.data ? '#' + e.data.replace(

/[\[\]\{\|\}]/g,

s => '&#' + s.codePointAt(0) + ';'

) : '').replace(/_/g, ' ');

text = text.replace(/#/, '');

navigator.clipboard.writeText(text).then(() => {

mw.notify(`Copied "${text}"`);

}, () => {

let $input = $('', {

type: 'text',

value: text,

readonly: '',

style: 'position:absolute;left:-999px'

}).appendTo(document.body);

$input[0].select();

document.execCommand('copy');

$input.remove();

mw.notify(`Probably copied "${text}"`);

});

};

let isMobile = mw.config.get('skin') === 'minerva';

if (isMobile) {

mw.loader.addStyleTag(`.copysectlink::before{background-image:url("data:image/svg+xml,%3Csvg width='20' height='20' version='1.1' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%2354595d'%3E%3Cpath d='M16 0H5v2h11v14h2V2a2 2 0 0 0-2-2z'/%3E%3Cpath d='m4 20h9c1.1 0 2-0.9 2-2v-13c0-1.1-0.9-2-2-2h-9c-1.1 0-2 0.9-2 2v13c0 1.1 0.9 2 2 2zm0-15h9v13h-9z'/%3E%3C/g%3E%3C/svg%3E")} .collapsible-heading:not(.open-block) .copysectlink{visibility:hidden} .mw-editsection{white-space:nowrap}`);

}

let addButton = function () {

let isFirst = this.tagName === 'H1';

let hn = isFirst ? this : this.parentElement;

if (hn.querySelector('.copysectlink')) return;

let $button = $('', {

class: 'copysectlink',

href: mw.util.getUrl() + (isFirst ? '' : '#' + this.id),

role: 'button',

text: 'copy'

}).click(!isFirst && this.id, handler);

if (isMobile) {

$button.addClass('mw-ui-icon mw-ui-icon-element').attr('title', 'Copy');

let wrapper = hn.querySelector('.mw-editsection');

if (wrapper) {

$button.prependTo(wrapper);

} else {

$button.appendTo(hn);

}

} else {

let bracket = hn.querySelector('.mw-editsection-bracket:last-child');

if (bracket) {

bracket.insertAdjacentText('beforebegin', ' | ');

} else {

bracket = $('').addClass('mw-editsection').append(

$('', { class: 'mw-editsection-bracket', text: '[' }),

$('', { class: 'mw-editsection-bracket', text: ']' })

).appendTo(hn).children()[1];

}

$button.insertBefore(bracket);

}

};

addButton.call(document.querySelector('h1'));

if (mw.config.get('wgAction') !== 'view') return;

mw.hook('wikipage.content').add($content => {

$content.find('.mw-headline').each(addButton);

});

});