User:BZPN/RfD.js: Difference between revisions

From Test Wiki
Jump to navigation Jump to search
Content deleted Content added
No edit summary
Tags: Manual revert Mobile edit Mobile web edit
No edit summary
Tags: Mobile edit Mobile web edit
Line 4: Line 4:
// Dodaj przycisk "Nominate for deletion" do paska narzędzi
// Dodaj przycisk "Nominate for deletion" do paska narzędzi
mw.util.addPortletLink(
mw.util.addPortletLink(
'p-cactions',
'p-tb', // Pasek narzędzi
'#',
'#',
'Nominate for deletion',
'Nominate for deletion',
Line 63: Line 63:
'font-size': '14px',
'font-size': '14px',
'color': '#0073e6',
'color': '#0073e6',
'text-decoration': 'underline'
'text-decoration': 'underline',
'display': 'block',
'margin-bottom': '10px'
}).appendTo(popup);
}).appendTo(popup);


// Pole na krótki powód
// Pole na krótki powód
$('<label>').attr('for', 'deletion-short-reason').text('Short reason:').appendTo(popup);
$('<label>').attr('for', 'deletion-short-reason').text('Short reason:').css({
'display': 'block',
'margin-top': '10px'
}).appendTo(popup);
const shortReasonInput = $('<input>').attr({
const shortReasonInput = $('<input>').attr({
'type': 'text',
'type': 'text',
Line 74: Line 79:
}).css({
}).css({
'width': '100%',
'width': '100%',
'padding': '8px',
'padding': '6px',
'margin': '10px 0'
'margin-bottom': '10px'
}).appendTo(popup);
}).appendTo(popup);


// Pole na szczegółowy powód
// Pole na szczegółowy powód
$('<label>').attr('for', 'deletion-detailed-reason').text('Detailed reason for discussion:').appendTo(popup);
$('<label>').attr('for', 'deletion-detailed-reason').text('Detailed reason for discussion:').css({
'display': 'block',
'margin-top': '10px'
}).appendTo(popup);
const detailedReasonInput = $('<textarea>').attr({
const detailedReasonInput = $('<textarea>').attr({
'id': 'deletion-detailed-reason',
'id': 'deletion-detailed-reason',
Line 85: Line 93:
}).css({
}).css({
'width': '100%',
'width': '100%',
'padding': '8px',
'padding': '6px',
'height': '100px',
'height': '80px',
'margin': '10px 0'
'margin-bottom': '10px'
}).appendTo(popup);

// Checkbox potwierdzenia zapoznania się z polityką
const policyCheckbox = $('<input>').attr({
'type': 'checkbox',
'id': 'policy-confirmation'
}).css({
'margin-right': '5px'
});
const policyLabel = $('<label>').attr('for', 'policy-confirmation').text('I have read and understand the deletion policy.');
$('<div>').append(policyCheckbox, policyLabel).css({
'margin-bottom': '15px'
}).appendTo(popup);
}).appendTo(popup);


Line 102: Line 122:
const shortReason = shortReasonInput.val().trim();
const shortReason = shortReasonInput.val().trim();
const detailedReason = detailedReasonInput.val().trim();
const detailedReason = detailedReasonInput.val().trim();
if (shortReason && detailedReason) {
const policyConfirmed = policyCheckbox.is(':checked');
if (shortReason && detailedReason && policyConfirmed) {
initiateDeletionProcess(shortReason, detailedReason);
initiateDeletionProcess(shortReason, detailedReason);
} else if (!policyConfirmed) {
alert('Please confirm you have read the deletion policy.');
} else {
} else {
alert('Please provide both a short and detailed reason.');
alert('Please provide both a short and detailed reason.');
Line 127: Line 150:
function tagPageForDeletion(reason) {
function tagPageForDeletion(reason) {
const tag = `{{rfd|${reason}}}`;
const tag = `{{rfd|${reason}}}`;
const editSummary = 'Nominating for deletion';
const editSummary = 'Nominating for deletion ([[User:BZPN/RfD.js|RfD]])';


new mw.Api().postWithToken('csrf', {
new mw.Api().postWithToken('csrf', {
Line 151: Line 174:
title: discussionPageTitle,
title: discussionPageTitle,
text: discussionContent,
text: discussionContent,
summary: 'Starting deletion discussion',
summary: 'Starting deletion discussion ([[User:BZPN/RfD.js|RfD]])',
watchlist: 'watch',
watchlist: 'watch',
}).done(function() {
}).done(function() {
Line 168: Line 191:
return {
return {
text: discussionLink + '\n' + revision.content,
text: discussionLink + '\n' + revision.content,
summary: 'Adding new deletion discussion',
summary: 'Adding new deletion discussion ([[User:BZPN/RfD.js|RfD]])',
watchlist: 'watch',
watchlist: 'watch',
};
};
Line 187: Line 210:
title: `User talk:${creator}`,
title: `User talk:${creator}`,
appendtext: '\n' + notification,
appendtext: '\n' + notification,
summary: 'Notifying page creator about deletion nomination',
summary: 'Notifying page creator about deletion nomination ([[User:BZPN/RfD.js|RfD]])',
watchlist: 'watch',
watchlist: 'watch',
}).done(function() {
}).done(function() {

Revision as of 13:44, 1 November 2024

(function() {
    if (mw.config.get('wgNamespaceNumber') < 0 || mw.config.get('wgIsArticle') === false) return;

    // Dodaj przycisk "Nominate for deletion" do paska narzędzi
    mw.util.addPortletLink(
        'p-tb', // Pasek narzędzi
        '#',
        'Nominate for deletion',
        'ca-nominate-deletion',
        'Nominate this page for deletion'
    );

    // Funkcja wywoływana po kliknięciu przycisku nominacji do usunięcia
    $('#ca-nominate-deletion').on('click', function(e) {
        e.preventDefault();
        openDeletionPopup();
    });

    // Tworzenie i otwarcie okna popup dla nominacji do usunięcia
    function openDeletionPopup() {
        // Tworzenie nakładki
        const overlay = $('<div>').attr('id', 'deletion-popup-overlay').css({
            'position': 'fixed',
            'top': '0',
            'left': '0',
            'width': '100%',
            'height': '100%',
            'background-color': 'rgba(0, 0, 0, 0.5)',
            'z-index': '1000',
        }).appendTo('body');

        // Tworzenie okna popup
        const popup = $('<div>').attr('id', 'deletion-popup').css({
            'width': '400px',
            'margin': '10% auto',
            'padding': '20px',
            'background-color': '#fff',
            'border-radius': '8px',
            'box-shadow': '0 4px 8px rgba(0, 0, 0, 0.2)',
            'text-align': 'left',
            'position': 'relative'
        }).appendTo(overlay);

        // Przycisk zamknięcia popup
        $('<span>').text('×').css({
            'position': 'absolute',
            'top': '10px',
            'right': '15px',
            'cursor': 'pointer',
            'font-size': '18px',
            'font-weight': 'bold'
        }).on('click', closeDeletionPopup).appendTo(popup);

        // Tytuł okna
        $('<h3>').text('Nominate for deletion').appendTo(popup);

        // Informacja o zasadach RfD
        $('<p>').text('Before nominating, please read the deletion policy and guidelines on the Wikipedia:Requests for deletion page.').css({
            'font-size': '14px',
            'margin-bottom': '10px'
        }).appendTo(popup);
        $('<a>').attr('href', '/wiki/Wikipedia:Requests_for_deletion').text('Go to Wikipedia:Requests for deletion').css({
            'font-size': '14px',
            'color': '#0073e6',
            'text-decoration': 'underline',
            'display': 'block',
            'margin-bottom': '10px'
        }).appendTo(popup);

        // Pole na krótki powód
        $('<label>').attr('for', 'deletion-short-reason').text('Short reason:').css({
            'display': 'block',
            'margin-top': '10px'
        }).appendTo(popup);
        const shortReasonInput = $('<input>').attr({
            'type': 'text',
            'id': 'deletion-short-reason',
            'placeholder': 'Enter short reason...'
        }).css({
            'width': '100%',
            'padding': '6px',
            'margin-bottom': '10px'
        }).appendTo(popup);

        // Pole na szczegółowy powód
        $('<label>').attr('for', 'deletion-detailed-reason').text('Detailed reason for discussion:').css({
            'display': 'block',
            'margin-top': '10px'
        }).appendTo(popup);
        const detailedReasonInput = $('<textarea>').attr({
            'id': 'deletion-detailed-reason',
            'placeholder': 'Enter detailed reason...'
        }).css({
            'width': '100%',
            'padding': '6px',
            'height': '80px',
            'margin-bottom': '10px'
        }).appendTo(popup);

        // Checkbox potwierdzenia zapoznania się z polityką
        const policyCheckbox = $('<input>').attr({
            'type': 'checkbox',
            'id': 'policy-confirmation'
        }).css({
            'margin-right': '5px'
        });
        const policyLabel = $('<label>').attr('for', 'policy-confirmation').text('I have read and understand the deletion policy.');
        $('<div>').append(policyCheckbox, policyLabel).css({
            'margin-bottom': '15px'
        }).appendTo(popup);

        // Przycisk wyślij
        $('<button>').text('Submit nomination').css({
            'width': '100%',
            'padding': '10px',
            'background-color': '#0073e6',
            'color': '#fff',
            'border': 'none',
            'border-radius': '5px',
            'cursor': 'pointer'
        }).on('click', function() {
            const shortReason = shortReasonInput.val().trim();
            const detailedReason = detailedReasonInput.val().trim();
            const policyConfirmed = policyCheckbox.is(':checked');
            if (shortReason && detailedReason && policyConfirmed) {
                initiateDeletionProcess(shortReason, detailedReason);
            } else if (!policyConfirmed) {
                alert('Please confirm you have read the deletion policy.');
            } else {
                alert('Please provide both a short and detailed reason.');
            }
        }).appendTo(popup);
    }

    // Funkcja zamykająca popup
    function closeDeletionPopup() {
        $('#deletion-popup-overlay').remove();
    }

    // Funkcja inicjująca proces usunięcia
    function initiateDeletionProcess(shortReason, detailedReason) {
        tagPageForDeletion(shortReason);
        createDiscussionPage(detailedReason);
        addToDeletionList();
        notifyPageCreator();
        closeDeletionPopup();
    }

    // Funkcja do oznaczania strony do usunięcia
    function tagPageForDeletion(reason) {
        const tag = `{{rfd|${reason}}}`;
        const editSummary = 'Nominating for deletion ([[User:BZPN/RfD.js|RfD]])';

        new mw.Api().postWithToken('csrf', {
            action: 'edit',
            title: mw.config.get('wgPageName'),
            prependtext: tag + '\n',
            summary: editSummary,
            watchlist: 'watch',
        }).done(function() {
            alert('Page tagged for deletion.');
        }).fail(function() {
            alert('Failed to tag the page for deletion. Please try again.');
        });
    }

    // Funkcja do tworzenia strony dyskusji o usunięciu
    function createDiscussionPage(reason) {
        const discussionPageTitle = `Wikipedia:Requests for deletion/Requests/2024/${mw.config.get('wgPageName')}`;
        const discussionContent = `{{subst:RfD/Preload/Template|deletereason=${reason}}}\n\n==Deletion discussion==\nMore detailed reason why this page should be deleted:\n* ${reason}`;

        new mw.Api().postWithToken('csrf', {
            action: 'edit',
            title: discussionPageTitle,
            text: discussionContent,
            summary: 'Starting deletion discussion ([[User:BZPN/RfD.js|RfD]])',
            watchlist: 'watch',
        }).done(function() {
            alert('Deletion discussion page created.');
        }).fail(function() {
            alert('Failed to create deletion discussion page. Please try again.');
        });
    }

    // Funkcja dodająca dyskusję do listy
    function addToDeletionList() {
        const deletionListTitle = 'Wikipedia:Requests for deletion/Current discussions';
        const discussionLink = `{{Wikipedia:Requests for deletion/Requests/2024/${mw.config.get('wgPageName')}}}`;

        new mw.Api().edit(deletionListTitle, function(revision) {
            return {
                text: discussionLink + '\n' + revision.content,
                summary: 'Adding new deletion discussion ([[User:BZPN/RfD.js|RfD]])',
                watchlist: 'watch',
            };
        }).done(function() {
            alert('Deletion discussion added to the list.');
        }).fail(function() {
            alert('Failed to add the discussion to the deletion list. Please try again.');
        });
    }

    // Funkcja powiadamiająca autora strony
    function notifyPageCreator() {
        const creator = mw.config.get('wgPageContentModel') === 'wikitext' ? mw.config.get('wgPageCreator') : null;
        if (creator) {
            const notification = `{{subst:RFDNote|${mw.config.get('wgPageName')}}} ~~"+"~~`;
            new mw.Api().postWithToken('csrf', {
                action: 'edit',
                title: `User talk:${creator}`,
                appendtext: '\n' + notification,
                summary: 'Notifying page creator about deletion nomination ([[User:BZPN/RfD.js|RfD]])',
                watchlist: 'watch',
            }).done(function() {
                alert('Page creator notified.');
            }).fail(function() {
                alert('Failed to notify the page creator. Please try again.');
            });
        }
    }
})();