Zum Inhalt springen

MediaWiki:Gadget-NSUpload.js

Aus Matrix of Time

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
( function () {
    'use strict';

    if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'UploadWizard' ) {
        return;
    }

    var namespaces = [
        { label: '— Kein Namensraum (öffentlich) —', value: '' },
        { label: 'Library',  value: 'Library' },
        { label: 'Rezept',   value: 'Rezept' },
        { label: 'Private',  value: 'Private' },
        { label: 'Notes',    value: 'Notes' },
        { label: 'FSK18',    value: 'FSK18' }
    ];

    function stripPrefix( val ) {
        namespaces.forEach( function ( ns ) {
            if ( ns.value && val.indexOf( ns.value + ':' ) === 0 ) {
                val = val.slice( ns.value.length + 1 );
            }
        } );
        return val;
    }

    function hasPrefix( val ) {
        var found = false;
        namespaces.forEach( function ( ns ) {
            if ( ns.value && val.indexOf( ns.value + ':' ) === 0 ) {
                found = true;
            }
        } );
        return found;
    }

    function getNsPrefix() {
        return $( '#ns-upload-selector' ).val() || '';
    }

    function buildSelector() {
        var $wrapper = $( '<div>' ).attr( 'id', 'ns-upload-wrapper' ).css( {
            'margin': '0 0 12px 0',
            'padding': '8px 12px',
            'background': '#f8f9fa',
            'border': '1px solid #a2a9b1',
            'font-size': '1em'
        } );

        var $label = $( '<label>' )
            .attr( 'for', 'ns-upload-selector' )
            .text( 'Namensraum für Upload: ' )
            .css( 'font-weight', 'bold' );

        var $select = $( '<select>' )
            .attr( 'id', 'ns-upload-selector' )
            .css( 'margin-left', '8px' );

        namespaces.forEach( function ( ns ) {
            $( '<option>' ).val( ns.value ).text( ns.label ).appendTo( $select );
        } );

        $select.on( 'change', function () {
            var nsPrefix = $( this ).val();
            var $dest = $( '#wpDestFile' );
            if ( $dest.length ) {
                var val = stripPrefix( $dest.val() );
                $dest.val( nsPrefix ? nsPrefix + ':' + val : val );
            }
            $( '.mwe-upwiz-titleDetailsWidget-title input.oo-ui-inputWidget-input' ).each( function () {
                var tval = stripPrefix( $( this ).val() );
                $( this ).val( nsPrefix ? nsPrefix + ':' + tval : tval ).trigger( 'change' );
            } );
        } );

        return $wrapper.append( $label, $select );
    }

    var lastDestVal = '';
    var lastTitleVals = {};

    function applyPrefixToField( $field, idx ) {
        var nsPrefix = getNsPrefix();
        if ( !nsPrefix ) return;
        var val = $field.val();
        if ( val === '' ) return;
        var key = idx !== undefined ? idx : 0;
        if ( val === lastTitleVals[ key ] ) return;
        if ( !hasPrefix( val ) ) {
            lastTitleVals[ key ] = nsPrefix + ':' + val;
            $field.val( nsPrefix + ':' + val ).trigger( 'change' );
        }
    }

    setInterval( function () {
        // Wrapper neu injizieren falls verschwunden
        if ( !$( '#ns-upload-wrapper' ).length ) {
            var $container = $( '#mwe-upwiz-content' );
            if ( $container.length ) {
                $container.prepend( buildSelector() );
            }
        }

        // wpDestFile beobachten
        var $dest = $( '#wpDestFile' );
        if ( $dest.length ) {
            var destVal = $dest.val();
            if ( destVal !== lastDestVal ) {
                lastDestVal = destVal;
                var nsPrefix = getNsPrefix();
                if ( nsPrefix && destVal !== '' && !hasPrefix( destVal ) ) {
                    lastDestVal = nsPrefix + ':' + destVal;
                    $dest.val( nsPrefix + ':' + destVal );
                }
            }
        }

        // Titelfelder beobachten
        $( '.mwe-upwiz-titleDetailsWidget-title input.oo-ui-inputWidget-input' ).each( function ( i ) {
            applyPrefixToField( $( this ), i );
        } );

    }, 300 );

}() );