User:The Earwig/copy-section-link.js

// Fixed version of User:Enterprisey/copy-section-link.js // $.when(   $.ready,    mw.loader.using( [ "mediawiki.util", "oojs-ui-core", "oojs-ui-widgets" ] ) ).then( function  {    $( ".mw-heading" ).each( function  { var popup = null; var heading = $(this.children).filter("h1, h2, h3, h4, h5, h6").first; var target = $(this.children).filter(".mw-editsection").first; if (target.length === 0) { target = heading; }       target.after($( "", { "class": "copy-section-link-pilcrow" } )                .text( "¶" )                .click( function  { if( popup === null ) { var hash = heading.attr( "id" ); var oldid = mw.util.getParamValue( "oldid" ); var popupContent; function makeContent( pageName, id ) { var wikitext = (pageName + "#" + hash).replace( /_/g, " " ); if( !window.copySectionLinkNoSquareBrackets ) { wikitext =  + wikitext + ; }                           return $( ' ', { "class": "copy-section-link-content" } ).append(                                $( " ", { "id": "copy-section-wikilink" + id } ).text( wikitext ),                                $( " " )                                    .text( "Copy" )                                    .css( { "padding": "0.5em", "cursor": "pointer", "margin-left": "0.5em" } )                                    .click( function  { var textField = $( this ).prev; try { navigator.clipboard.writeText( textField.text ); } catch( e ) { textField.select; document.execCommand( "copy" ); }                                   } ),                                $( " " ),                                $( "" )                                	.attr( "href", mw.util.getUrl( pageName ) + "#" + encodeURIComponent( hash ) )                                	.text( "external" )                            ); }

var generalCss = { 'font-size': '0.9rem', 'font-family': 'sans-serif' };

var index; if( oldid ) { popupContent = makeContent( "Special:Permalink/" + oldid ); popupContent.css( generalCss ); popupContent.css( { 'padding-top': '0.5em', 'font-weight': 'normal' } ); } else { var normalPanel = new OO.ui.TabPanelLayout( 'normal', {                               label: 'Link',                                $content: makeContent( mw.config.get( 'wgPageName' ), 'normal' )                            } ); var permalinkPanel = new OO.ui.TabPanelLayout( 'permalink', {                               label: 'Permalink',                                $content: makeContent( 'Special:Permalink/' + mw.config.get( 'wgCurRevisionId' ), 'permalink' )                            } ); index = new OO.ui.IndexLayout; index.addTabPanels( [ normalPanel, permalinkPanel ] ); popupContent = index.$element; }                       popup = new OO.ui.PopupWidget( {                            $content: popupContent,                            $floatableContainer: $( this ),                            padded: true,                            width: 400,                            height: 190,                            align: 'forwards',                        } ); $( this ).after( popup.$element ); if( index ) { index.$menu.find( 'span.oo-ui-labelElement-label' ).css( generalCss ); index.$content.css( generalCss ); }

popup.toggle( true ); } else { popup.toggle; }               } ) );    } );    mw.util.addCSS( ".mw-heading .copy-section-link-pilcrow" + "{ display: none; margin-left: 1em; }" + ".mw-heading:hover .copy-section-link-pilcrow" + "{ display: inline; }" + ".mw-heading .copy-section-link-pilcrow + .oo-ui-widget" + "{ font-weight: normal; }" ); } ); //