Bikarhêner:Balyozxane/skrîpt/js/get-redir.js

Ji Wîkîpediya, ensîklopediya azad.

Zanibe: Piştî weşandinê, ji bo dîtina guhartinan dibe ku hewce be "cache"ya geroka xwe paqij bikî.

  • Firefox / Safari: Pê li Shift û Reload bike an jî Ctrl-F5 an Ctrl-R bike (ji bo Mac: ⌘-R)
  • Google Chrome: Pê li Ctrl-Shift-R (ji bo Mac: ⌘-Shift-R) bike
  • Internet Explorer / Edge: Pê li Ctrl û Refresh bike, an jî Ctrl-F5 bike
  • Opera: Pê li Ctrl-F5 bike.
$(document).ready(function() {

    mw.loader.using("mediawiki.api").done(function() {
		var pageTitle = mw.config.get('wgPageName');

	if (mw.config.get('wgNamespaceNumber') === 10 ){
        var targetContainer = mw.config.get('skin') === 'vector-2022' ? 'p-cactions' : 'p-tb';

        var link = mw.util.addPortletLink(targetContainer, '#', 'Get redirects', 't-getRedirects', 'Get redirects');
	}

        function getCSRFToken() {

            // Make a GET request to retrieve the CSRF token
            return $.ajax({
                url: "https://ku.wikipedia.org/w/api.php",
                data: {
                    action: "query",
                    meta: "tokens",
                    type: "csrf",
                    format: "json"
                },
                dataType: "json"
            }).then(function(response) {
                mw.notify("CSRF token response:", response);
                return response.query.tokens.csrftoken;
            }).fail(function(jqXHR, textStatus, errorThrown) {
                console.error("Error fetching CSRF token:", textStatus, errorThrown);
                return null;
            });
        }

        // Function to get redirects for a page
        function getRedirectsForPage(pageTitle, csrfToken) {
            mw.notify("Fetching redirects for page:", pageTitle);

            // Make a POST request to the Wikipedia API with CSRF token included
            return $.ajax({
                url: "https://ku.wikipedia.org/w/api.php",
                method: "POST",
                data: {
                    action: "query",
                    format: "json",
                    titles: pageTitle,
                    redirects: "",
                    prop: "redirects",
                    rdlimit: "max",
                    token: csrfToken
                },
                dataType: "json"
            }).then(function(response) {
                mw.notify("Redirects response:", response);

                // Extract redirects from the response
                var redirects = [];
                if (response && response.query && response.query.pages) {
                    var pageId = Object.keys(response.query.pages)[0];
                    if (response.query.pages[pageId].redirects) {
                        redirects = response.query.pages[pageId].redirects.map(function(redirect) {
                            return redirect.title;
                        });
                    }
                }
                return { redirects: redirects };
            }).fail(function(jqXHR, textStatus, errorThrown) {
                console.error("Error fetching redirects:", textStatus, errorThrown);
                return { redirects: [] };
            });
        }

        function formatRedirects(redirects) {
            if (redirects.length === 0) return '';
            
		    var formattedRedirects = redirects.map(function(redirect) {
		        // Remove "Şablon:" prefix from the redirect
		        var cleanRedirect = redirect.replace(/^Şablon:/, '');
		        return '{{tl|' + cleanRedirect + '}}';
		    }).join(', ');
            var cleanTemplateName = pageTitle.replace(/^Şablon:/, '');
            cleanTemplateName = cleanTemplateName.replace(/_/, ' ');
            if (redirects.length === 1) {
                return "* " + formattedRedirects + " → '''{{tl|"+ cleanTemplateName + "}}'''";
            } else {
                return "* " + formattedRedirects + " → '''{{tl|"+ cleanTemplateName + "}}'''";
            }
        }

        function appendToTemplateRedirectsPage(redirectInfo, csrfToken) {
            var formattedText = formatRedirects(redirectInfo.redirects);
            var editSummary = "Beralîkirinên [["+ pageTitle + "]] lê hat zêdekirin";

            var apiUrl = "https://ku.wikipedia.org/w/api.php";
            var editParams = {
                action: "edit",
                title: "Wîkîpediya:AutoWikiBrowser/Template redirects",
                //title: "Bikarhêner:Balyozxane/ceribandin",
                token: csrfToken,
                appendtext: "\n" + formattedText,
                summary: editSummary,
                format: "json"
            };

            return $.ajax({
                url: apiUrl,
                method: "POST",
                data: editParams,
                dataType: "json"
            }).then(function(response) {
                mw.notify("Edit response:", response);
            }).fail(function(jqXHR, textStatus, errorThrown) {
                console.error("Error appending to template redirects page:", textStatus, errorThrown);
            });
        }
        
        // Add click event listener to the link
        $(link).on('click', function(event) {
            mw.notify("Link clicked");
            event.preventDefault(); // Prevent default link behavior

            // Get the page title of the current page
            
            mw.notify("Current page title:", pageTitle);

            // Get CSRF token and fetch redirects
            getCSRFToken().then(function(csrfToken) {
                if (csrfToken) {
                    getRedirectsForPage(pageTitle, csrfToken).then(function(result) {
                        // Handle redirects
                        var redirects = result.redirects;
                        mw.notify("Redirects for current page:", redirects);
                        appendToTemplateRedirectsPage({ redirects: redirects }, csrfToken);
                    });
                } else {
                    console.error("CSRF token not available");
                }
            });
        });

    });
});