Bikarhêner:Balyozxane/wergerîne.js

Ji Wîkîferhengê

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.
// <nowiki>

//[[Bikarhêner:Balyozxane/sort-werger.js]]
mw.loader.load('//ku.wiktionary.org/w/index.php?title=Bikarhêner:Balyozxane/sort-werger.js&action=raw&ctype=text/javascript');

function getKurdishScriptName(language) {
    // Define special cases where language names need to be replaced with Kurdish translations
    const scriptTranslations = {
        "Bohairic": "Bohaîrî",
        "Sahidic": "Sahîdî",
        "Hebrew": "Îbranî",
        "Jewish Aramaic": "Aramiya cihû",
        "Jewish Babylonian Aramaic": "{{Z|tmr}}",
        "Western Neo-Aramaic": "Neo-aramiya rojavayî",
        "Middle and Late Egyptian": "Misiriya navîn û dereng",
        "Old Egyptian": "Misiriya kevn",
        "Middle Egyptian": "Misiriya navîn",
        "Late Egyptian": "Misiriya dereng",
        "Syriac": "Siryanî",
        "Ancient": "Kevn",
        "Carakan": "Karakanî",
        "Rumi": "Rûmî",
        "Adlam": "Adlamî",
        "Latin": "Latînî",
        "Abjad": "Erebî",
        "Doric": "Dorîk",
        "Föhr": "Föhr",
        "Hallig": "Hallig",
        "Mooring": "Mooring",
        "Mongolian": "Mongolî",
        "Cyrillic": "Kirîlî",
        "Roman": "Latînî",
        "Glagolitic": "Glagolîtîk",
        "Classical": "Klasîk",
        "Gurmukhi": "Gurmuxî",
        "Shahmukhi": "Şahmuxî",
        "Campidanese": "Kampîdanî",
        "Logudorese": "Logudorî",
        // Add more language translations here as needed
    };

    // If the language exists in the translations, return the Kurdish translation
    if (language in scriptTranslations) {
        return {
            script: scriptTranslations[language]
        };
    }

    // If the language is not in the translations, it's not a script name
    // Return the language as it is
    return language;
}

function replaceLanguageNames(inputText) {
    // The regular expression to match lines with language names and W template
    const regex = /\*(:)? (.*?): \{\{W(.*?)\|(.*?)\|/g;

    return inputText.replace(regex, (match, asterixColon, language, WPrefix, langCode) => {
        // Check if the language is Egyptian
        if (language.toLowerCase() === "egyptian") {
            // Always return {{Z|egy}} for Egyptian
            return `*${asterixColon ? asterixColon : ''} {{Z|egy}}: {{W${WPrefix ? WPrefix : ''}|${langCode}|`;
        } else if (language.toLowerCase().includes("cyrillic")) {
            // Handle Cyrillic script names
            const kurdishScript = getKurdishScriptName(language);
            if (kurdishScript.script) {
                return `*: ${kurdishScript.script}: {{W${WPrefix}|${langCode}|`;
            } else {
                return `*${asterixColon ? asterixColon : ''} {{Z|${langCode}}}: {{W${WPrefix ? WPrefix : ''}|${langCode}|`;
            }
        } else if (asterixColon === ":") {
            // Replace the script names with their Kurdish translations
            const scriptNames = language.split(/\s*:\s*/);
            let kurdishScript = "";
            for (const script of scriptNames) {
                const kurdish = getKurdishScriptName(script);
                if (kurdish.script) {
                    kurdishScript += kurdish.script + ", ";
                }
            }
            if (kurdishScript) {
                kurdishScript = kurdishScript.slice(0, -2);
                return `*: ${kurdishScript}: {{W${WPrefix ? WPrefix : ''}|${langCode}|`;
            } else {
                return `*${asterixColon ? asterixColon : ''} {{Z|${langCode}}}: {{W${WPrefix ? WPrefix : ''}|${langCode}|`;
            }
        } else {
            // For regular language names, replace with {{Z|langCode}}
            return `*${asterixColon ? asterixColon : ''} {{Z|${langCode}}}: {{W${WPrefix ? WPrefix : ''}|${langCode}|`;
        }
    });
}

$(document).ready(function() {
    mw.loader.using(['jquery.ui'], function() {
        mw.util.addCSS('#t-wergerîne { font-weight: normal; }');
        $(mw.util.addPortletLink('p-tb', '#', 'Wergerîne', 't-wergerîne', 'Beşa Translation bike Werger')).click(handleButtonClick);
    });


    const languagesArray = [
        "Apache: Apaçî",
        "Arabic: {{Z|ar}}",
        "Aramaic: {{Z|arc}}",
        "Azerbaijani: {{Z|az}}",
        "Berber: Berberî",
        "Coptic: {{Z|cop}}",
        "Chinese: {{Z|zh}}",
        "Cree: {{Z|cr}}",
        "Fula: {{Z|ff}}",
        "Greek: {{Z|el}}",
        "Javanese: {{Z|jv}}",
        "Ladino: {{Z|lad}}",
        "Low German: {{Z|nds}}",
        "Mari: Marî",
        "Mongolian: {{Z|mn}}",
        "North Frisian: {{Z|frr}}",
        "Norwegian: {{Z|no}}",
        "Old Church Slavonic: {{Z|cu}}",
        "Sardinian: {{Z|sc}}",
        "Serbo-Croatian: {{Z|sh}}",
        "Sorbian: Sorbî",
        "Sami: Samî",
        // Add more languages and translations as needed
    ];

    const regex = /\* (.+?):/g;

    function replaceWithKurdishTranslations(inputText) {
        return inputText.replace(regex, (match, language) => {
            const translation = languagesArray.find(item => {
                const [english, kurdish] = item.split(":");
                return english.trim() === language.trim();
            });
            return translation ? `* ${translation.split(":")[1].trim()}:` : match;
        });
    }

    function convertTemplates(content) {

        // Remove lines containing "Kurdish:" or Zazaki (zza)
        const excludedLanguagesRegex = /^.*(Kurdish:|Zazaki).*$/gim;
        content = content.replace(excludedLanguagesRegex, '');


        // Replace en.wiktionary templates with ku.wiktionary templates
        content = content.replace(/\{\{trans-top.*\}\}/g, "{{werger-ser}}");
        content = content.replace(/\{\{trans-bottom\}\}/g, "{{werger-bin}}");
        content = content.replace(/\{\{t-egy\|/g, "{{W-egy|");
        content = content.replace(/\{\{multitrans\|data=/g, "");
        content = content.replace(/<([^\>]+)\>/g, "");
        content = content.replace(/\n\}\}\n/g, "");
        content = content.replace(/\{\{tt?\|/g, "{{W-|");
        content = content.replace(/\{\{l\|/g, "{{W-|");
        content = content.replace(/\{\{t(\+|-)\|/g, "{{W$1|");
        content = content.replace(/\{\{tt(\+|-)\|/g, "{{W$1|");

  //      content = content.replace(/\{\{W(-|\+)\|ko\|([^(]+)\(([^\)]+)\)([^\}]+)?\}\}/g, "{{W$1|ko|$2$4}}, {{W$1|ko|$3}}");
        content = content.replace(/\|\?/g, ""); // ji bo xwestina zayend ? ji rûpelê rake
        content = content.replace(/\|alt=/g, "|cuda=");
        content = content.replace(/(\||\}\})f(\||\}\})/g, '$1mêbike$2');
        content = content.replace(/(\||\}\})n(\||\}\})/g, '$1nêtarbike$2');
        content = content.replace(/(\||\}\})m(\||\}\})/g, '$1nêrbike$2');
        content = content.replace(/(\||\}\})c(\||\}\})/g, '$1g$2');
        content = content.replace(/(\||\}\})s(\||\}\})/g, '$1y$2');
        content = content.replace(/(\||\}\})mêbike(\||\}\})/g, '$1m$2');
        content = content.replace(/(\||\}\})nêtarbike(\||\}\})/g, '$1nt$2');
        content = content.replace(/(\||\}\})nêrbike(\||\}\})/g, '$1n$2');
        content = content.replace(/(\||\}\})f-p(\||\}\})/g, '$1mê-pbike$2');
        content = content.replace(/(\||\}\})n-p(\||\}\})/g, '$1nêtar-pbike$2');
        content = content.replace(/(\||\}\})m-p(\||\}\})/g, '$1nêr-pbike$2');
        content = content.replace(/(\||\}\})mf(\||\}\})/g, '$1mêûnêrbike$2');
        content = content.replace(/(\||\}\})mê-pbike(\||\}\})/g, '$1m-p$2');
        content = content.replace(/(\||\}\})nêtar-pbike(\||\}\})/g, '$1nt-p$2');
        content = content.replace(/(\||\}\})nêr-pbike(\||\}\})/g, '$1n-p$2');
        content = content.replace(/(\||\}\})mêûnêrbike(\||\}\})/g, '$1mn$2');
        
        content = content.replace(/.*?\{\{t-needed\|[^}]*\}\}\n?/g, "");
        content = content.replace(/.*?\{\{attention\|[^}]*\}\}\n?/g, "");
        content = content.replace(/.*?\{\{not used\|[^}]*\}\}\n?/g, "");
        content = content.replace(/.*?\{\{tt?-?\+?check\|[^}]*\}\}\n?/g, "");
        content = content.replace(/\*? [^\:]+:\n\* /g, "* "); // Navê zimanê beyî binzimanan jê bibe
        
                content = content.replace(/\([^\)]+\)/g, "");  //Her tiştê di navbera () jê bibe

        content = content.replace(/\{\{g\|[^\}]+\}\}/g, ""); // şablona {{g| bo zayendê jê bibe
        content = content.replace(/.*?\{\{W(\+|-)\|lki\|(.*?)\}\}\n/g, "");
        content = content.replace(/\{\{q\|[^}]*\}\}/g, "");
        content = content.replace(/\{\{qual\|[^}]*\}\}/g, "");
        content = content.replace(/\{\{qualifier\|[^}]*\}\}/g, "");
        content = content.replace(/\{\{gloss\|[^}]*\}\}/g, "");
        content = content.replace(/\{\{i\|[^}]*\}\}/g, "");
        content = content.replace(/  /g, ' ');
        content = content.replace(/ , /g, ', ');
        content = content.replace(/,,/g, ',');

        // Clean up empty lines
        content = content.replace(/^\s*[\r\n]/gm, '');
        return content;
    }
function getOldId(pageTitle, callback) {
    var apiUrl = `https://en.wiktionary.org/w/api.php?action=query&titles=${encodeURIComponent(pageTitle)}&prop=revisions&rvprop=ids&rvlimit=1&format=json&callback=?`;

    $.getJSON(apiUrl, function(data) {
        var pages = data.query.pages;
        var pageId = Object.keys(pages)[0];
        var revisions = pages[pageId].revisions;
        var oldId;

        if (revisions && revisions.length > 0) {
            oldId = revisions[0].revid;
        }

        callback(oldId); // Call the callback function with the oldId value
    }).fail(function (error) {
        console.error("Error fetching data:", error);
        callback(null); // Call the callback function with null in case of an error
    });
}
    function handleButtonClick() {
        const $textBox = $("#wpTextbox1");
        const $editSummaryBox = $("#wpSummary");
	    var rupelaEn = prompt("Sernavê rûpela inglîzî binivîse");
	    var oldId;
	    var cavkani;
    if (rupelaEn) {
        getOldId(rupelaEn, function(oldId) {

        if ($textBox.length > 0) {
        	cavkani = '\n\n:{{werger çavkanî|en|'+ rupelaEn + '|beş=Ev qismê Wergerê|oldid=' + oldId + '}}\n';

            let content = $textBox.val();
            content = content.replace(/=====?Translations=?====/g, "==== Werger ====");
            const transTopRegex = /\{\{trans-top\b.*?\}\}/g;
            const transBottomRegex = /\{\{trans-bottom\}\}/g;
            const transTopMatch = transTopRegex.exec(content);
            const transBottomMatch = transBottomRegex.exec(content);

            if (transTopMatch && transBottomMatch) {
                // Get the start and end positions of {{trans-top}} and {{trans-bottom}}
                const transTopStart = transTopMatch.index;
                const transTopEnd = transTopRegex.lastIndex;
                const transBottomStart = transBottomMatch.index;
                const transBottomEnd = transBottomRegex.lastIndex;

                // Extract the content between {{trans-top}} and {{trans-bottom}}
                const extractedContent = content.substring(
                    transTopEnd,
                    transBottomStart
                );

                // Process the extracted content using convertTemplates and replaceWithKurdishTranslations
                const processedContent = convertTemplates(extractedContent);
                const translatedContent = replaceWithKurdishTranslations(processedContent);
                const replacedContent = replaceLanguageNames(translatedContent);
		        // Check if rupelaEn starts with "translations" and remove it
		        if (rupelaEn.endsWith("translations")) {
		        	rupelaEn = rupelaEn.replace(/\/translations$/g, '');
		        }

                const sablonaEN = '* {{Z|en}}: {{W|en|' + rupelaEn +  '}}';
                // Replace {{trans-top}} with {{werger-ser}} and {{trans-bottom}} with {{werger-bin}}
                content =
                    content.substring(0, transTopStart) +
                    "{{werger-ser}}\n" +
                    replacedContent +
                    '\n' + sablonaEN +
                    "\n{{werger-bin}}" + cavkani +
                    content.substring(transBottomEnd);

                $textBox.val(content);

                mw.notify("Şablonên inglîzî hatine wergerandin.");
                mw.notify("Bisekine.");
                // Use sortWerger() function here (on another wiki page)
                sortWerger();

                // Set the edit summary to "Werger ji en.wiktê"
                $editSummaryBox.val("[[Bikarhêner:Balyozxane/wergerîne.js|Wergerîne]] ji [[en:"+ rupelaEn +"]]");
            } else {
                mw.notify(
                    "Required templates {{trans-top}} or {{trans-bottom}} not found on page: " +
                    mw.config.get("wgTitle")
                );
            }
        }
        }
    )}
	    
    }


    function escapeRegExp(string) {
        return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
    }
});
// </nowiki>