MediaWiki:Gadget-importUtility/inarbeit.js

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
// Setze auf [[Wikipedia:Importwünsche]] Abschnitte "in Arbeit"

(function() {
    'use strict';
    // Stelle sicher, dass dieses Script nur einmal ausgeführt wird
    if (window.iuinarbeitScriptExecuted) {
        return;
    }
    window.iuinarbeitScriptExecuted = true;

    // Überprüfe, ob der Benutzer sich auf der richtigen Seite befindet und die erforderlichen Rechte hat
    const pageName = 'Wikipedia:Importwünsche';
    if (mw.config.get('wgPageName') === pageName && ['sysop', 'import', 'transwiki'].some(group => mw.config.get('wgUserGroups').includes(group))) {
        mw.loader.using(['mediawiki.api', 'mediawiki.util'], function() {

            // Füge "in Arbeit"-Buttons zu allen Überschriften hinzu, die noch nicht entsprechend markiert sind
            $('#bodyContent').find('.mw-heading :header[id], .mw-headline[id]').each(function() {
                if (!$(this).text().includes('(in Arbeit)')) {
                    $(this).after('<button class="iu-inarbeit" style="cursor:pointer; margin-left:1em;" data-heading-id="' + $(this).attr('id') + '">in Arbeit</button>');
                }
            });

            // Event-Handler für Click auf "in Arbeit"-Button
            $('.iu-inarbeit').on('click', function() {
                const currentText	= $('#' + CSS.escape($(this).data('heading-id'))).text();
                const sectionNumber	= parseInt($(this).siblings('.mw-editsection').find('a').attr('href').replace(/^.*?(\d+)$/, '$1'), 10);
                
                if (!currentText.includes("(in Arbeit)")) {
                    const editSummary	= `/* ${currentText} */ in Arbeit`;
                    const userName		= mw.config.get('wgUserName');

                    // Hole den aktuellen Inhalt des Abschnitts
                    new mw.Api().get({
                        action:		'parse',
                        page:		pageName,
                        prop:		'wikitext',
                        section:	sectionNumber
                    }).done(function(data) {
                        const sectionContent	= data.parse.wikitext['*'];
                        const headingMatch		= sectionContent.match(/^(=+[^=\n]+?=+)\s*\n/);
                        
                        if (headingMatch) {
                            // Aktualisiere den Inhalt mit der "In Arbeit"-Vorlage
                            const updatedContent = sectionContent.replace(
                                headingMatch[0],
                                headingMatch[1].replace(/([^=]+)/, '$1(in Arbeit) ') + '\n{{/In Arbeit|' + userName + '|~~' + '~' + '~~}}\n'
                            );

                            // Speichere die Änderungen und lade die Seite neu
                            new mw.Api().postWithToken('csrf', {
                                action:		'edit',
                                title:		pageName,
                                section:	sectionNumber,
                                text:		updatedContent,
                                summary:	editSummary
                            }).done(function() {
                                window.location.reload(true);
                            }).fail(function(error) {
                                mw.notify('Failed to mark section as in progress: ' + error, {type: 'error'});
                            });
                        } else {
                            mw.notify('Failed to find section heading', {type: 'error'});
                        }
                    }).fail(function(error) {
                        mw.notify('Failed to fetch section content: ' + error, {type: 'error'});
                    });
                }
            });
        });
    }
})();