לדלג לתוכן

משתמשת:Neriah/Gadget-DeleteRequest.js

מתוך ויקיפדיה, האנציקלופדיה החופשית

הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
/* הסקריפט מוסיף לשוניות "מחיקה", "הגנה" ו"חסימה" על מנת שאפשר יהיה לבקש מחיקת דפים, הגנת דפים וחסימת משתמשים באמצעות דף בקשות ממפעילים. */
if(mw.config.get('wgNamespaceNumber') + 1)
$(function(){
function openDialog(code1, code2, code3, reasons, req) {
    var styleElement = document.createElement('style');
    styleElement.textContent = `
        .center-align {
            display: flex;
            flex-direction: column;
            align-items: center;
        }

        .full-width .oo-ui-fieldLayout-field {
            width: 100%;
            max-width: 400px;
        }

        .oo-ui-buttonSelectWidget {
            display: flex;
            justify-content: center;
            flex-wrap: wrap;
            gap: 10px;
        }
    `;
    document.head.appendChild(styleElement);

    var $content = $('<div>').css({
        'text-align': 'center',
        'width': '100%',
        'padding': '10px'
    });
    
    var buttonSelect = new OO.ui.ButtonSelectWidget({
        items: reasons.map(function(reason) {
            return new OO.ui.ButtonOptionWidget({
                data: reason,
                label: reason
            });
        }).concat([
            new OO.ui.ButtonOptionWidget({
                data: 'אחר',
                label: 'אחר'
            })
        ])
    });
    
    var input = new OO.ui.TextInputWidget({
        placeholder: 'סיבה אחרת/נוספת',
        visibility: false,
        style: {
            'width': '100%',
            'max-width': '400px'
        }
    });
    
    buttonSelect.on('choose', function(item) {
        input.setVisibility(item.getData() === 'אחר');
    });
    
    var buttonSelectLayout = new OO.ui.FieldLayout(buttonSelect, {
        label: 'סיבה:',
        align: 'top',
        classes: ['center-align', 'full-width']
    });
    
    $content.append(buttonSelectLayout.$element);
    $content.append($('<br>'));
    
    var inputLayout = new OO.ui.FieldLayout(input, {
        label: 'סיבה אחרת/נוספת:',
        align: 'top',
        classes: ['center-align', 'full-width']
    });
    
    $content.append(inputLayout.$element);
    
    var dialog = new OO.ui.MessageDialog({
        size: 'large'
    });
    
    var windowManager = new OO.ui.WindowManager();
    $('body').append(windowManager.$element);
    windowManager.addWindows([dialog]);
    
    var config = {
        title: 'בקשה ל' + req,
        message: $content,
        actions: [
            {
                action: 'submit',
                label: 'ביצוע',
                flags: ['primary', 'progressive']
            },
            {
                action: 'cancel',
                label: 'סגירה',
                flags: 'safe'
            }
        ]
    };
    
    windowManager.openWindow(dialog, config).closed.then(function(data) {
        if (data && data.action === 'submit') {
            var value = input.getValue();
            var selectValue = buttonSelect.findSelectedItem() ? buttonSelect.findSelectedItem().getData() : 'אחר';
            
            if (value === "" && selectValue == "אחר") {
                mw.notify("לא מולאה סיבה", {type: 'error'});
                return;
            }
            if (value !== "" && selectValue == "אחר") code1(value);
            if (value === "" && selectValue != "אחר") code2(selectValue);
            if (value !== "" && selectValue !== "אחר") code3(value, selectValue);
        }
    });
    
    dialog.opened.then(function() {
        input.focus();
    });
    
    input.$input.on('keypress', function(event) {
        if (event.key === "Enter") {
            var value = input.getValue();
            var selectValue = buttonSelect.findSelectedItem() ? buttonSelect.findSelectedItem().getData() : 'אחר';
            
            if (value === "" && selectValue == "אחר") {
                mw.notify("לא מולאה סיבה", {type: 'error'});
                return;
            }
            if (value !== "" && selectValue == "אחר") code1(value);
            if (value === "" && selectValue != "אחר") code2(selectValue);
            if (value !== "" && selectValue !== "אחר") code3(value, selectValue);
            windowManager.closeWindow(dialog);
        }
    });
}

function save(title, summary, content, section, next) {
    var param = {action: 'edit', title: title, summary: summary.replace(/replaceParam/g, mw.config.get("wgPageName").replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName')), token: mw.user.tokens.get('csrfToken'), section: section || '0', appendtext: content, format: 'json', tags:'בקשות_ממפעילים'};
    $.post(mw.util.wikiScript('api'), param, function(data) {
        if (data && data.error)
            mw.notify('שגיאה בשמירה: ' + ( data.error.info || 'שגיאה לא ידועה' ), {type: 'error'});
        else if (data && data.edit && data.edit.result == 'Success' && typeof next == 'function')
            next();
    });
}

function saveDelete(selectValue, message){
    save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', 
            '\n\n* ' + message.replace(/reason/g, selectValue), 1, 
            function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'), {type: 'success'});});
}

function checkAndSaveDelete(selectValue, message){
    new mw.Api().get( {
        action:'query',
        prop: 'linkshere',
        titles: mw.config.get('wgPageName'),
        indexpageids: 1
    }).done(function(d) {
        d = d.query;
        if ( d && d.pageids && d.pageids.length ) {
            d = d.pages[d.pageids[0]];
            if ( d.linkshere && d.linkshere.length > 0 )
            {
                var linkUrl = new mw.Title('מיוחד:דפים_המקושרים_לכאן/' + mw.config.get('wgPageName')).getUrl();
                var $message = $('<div>').append(
                    $('<p>').text('יש ' + d.linkshere.length + ' קישורים לדף.'),
                    $('<p>').append(
                        $('<a>').attr('href', linkUrl).text('לחץ כאן לצפייה בקישורים')
                    ),
                    $('<p>').text('האם הקישורים נבדקו לפני בקשת המחיקה?')
                );
                
                OO.ui.confirm($message, {
                    size: 'medium',
                    actions: [
                        { action: 'accept', label: 'כן, נבדקו', flags: ['primary', 'progressive'] },
                        { action: 'reject', label: 'לא', flags: 'destructive' }
                    ]
                }).done(function(confirmed) {
                    if (confirmed) {
                        saveDelete(selectValue, message);
                    } else {
                        mw.notify('נא לבדוק את הקישורים לפני הבקשה.', {type: 'warning'});
                    }
                });
            } else {
                saveDelete(selectValue, message);
            }
        }
        else {
            saveDelete(selectValue, message);
        }
    });
}

function checkRequestDuplication() {
    var requestChecker = new $.Deferred();
    new mw.Api().get( {
        action:'query',
        prop: 'links',
        titles: 'ויקיפדיה:בקשות ממפעילים',
        pltitles: mw.config.get('wgPageName'),
        indexpageids: 1
    }).done(function(d) {
        d = d.query;
        if ( d && d.pageids && d.pageids.length ) {
            d = d.pages[d.pageids[0]];
            if ( d.links && d.links.length > 0 )
            {
                OO.ui.confirm('הדף כבר מוזכר בבקשות ממפעילים. האם לשלוח בכל זאת את הבקשה?', {
                    size: 'medium'
                }).done(function(confirmed) {
                    if (!confirmed) {
                        requestChecker.reject('הדף כבר מוזכר ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">בקשות ממפעילים</a>. הבקשה לא בוצעה');
                        return;
                    }
                    requestChecker.resolve();
                });
            } else {
                requestChecker.resolve();
            }
        } else {
            requestChecker.resolve();
        }
    });
    return requestChecker;
}

function addMenuItem(caption, tooltip, message, accessKey) {
    var a = mw.util.addPortletLink('p-cactions','#',caption,'',tooltip.replace(/replaceParam/g, mw.config.get("wgPageName").replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName')),(accessKey||''));
    var alreadyClicked;
    $(a).click(function(e) {
        e.preventDefault();
        e.stopPropagation();
        if (alreadyClicked) return;
        alreadyClicked = true;
        checkRequestDuplication().fail(function(err){
            mw.notify($('<span>').html(err), {type: 'error'});
        }).done(function(){
            if (message.match(/reason/)) {message += ' ~~' + '~~'}else{message += ' – reason ~~' + '~~'}
            message = message.replace(/replaceParam/g, mw.config.get('wgPageName').replace(/_/g, " ")).replace(/replaceUser/g, mw.config.get('wgRelevantUserName'));
            switch (caption) {
                case "בקשת מחיקה":
                    openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, value), 1, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(selectValue) { checkAndSaveDelete(selectValue, message); } , function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 1, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, ["הבל", "מילוני/אולטרה קצרמר", "הפניה בדפי שיחה" ,"הפניה בקטגוריה" , "הפניה מיותרת", "הפניה שגויה", "לא אנציקלופדי", "פרסומת", "שגוי/טעות", "לבקשת הכותב", "הועבר למרחב טיוטה", "הועבר למרחב המשתמש", "הועבר למרחב הערכים"], "מחוק את הדף");
                    break;
                case "בקשת חסימה":
                    openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, value), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, selectValue), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', "/* בקשות חסימה / הסרת חסימה */ [[משתמש:replaceUser|replaceUser]] ([[שיחת משתמש:replaceUser|ש]]|[[מיוחד:תרומות/replaceUser|ת]]|[[מיוחד:חסימה/replaceUser|ח]])", '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 2, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_חסימה_/_הסרת_חסימה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, ["השחתה לאחר אזהרה", "קללות או גסויות", "הפרעה", "כניסה למלחמת עריכה", "העלאת הבלים או ערכים חסרי תוכן", "הסרת תוכן מדפים", "שם משתמש לא מקובל", "משחית שנרשם", "לא הגיע לתרום", "העלאת ספאם"], "חסום את המשתמש");
                    break;
                case "בקשת הגנה":
                case "בקשת שינוי הגנה":
                    openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, value), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות הגנה / הסרת הגנה */ [[replaceParam]]', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 3, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_הגנה_/_הסרת_הגנה">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, ["השחתות רבות", "אקטואלי", "טרול/חסום", "מלחמת עריכה"], "הגן על הדף");
                    break;
                case "הסתרת גרסה":
                    openDialog(function(value){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, value), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, selectValue), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, function(value, selectValue){save('ויקיפדיה:בקשות ממפעילים', '/* בקשות מחיקת גרסאות מסוימות */ הסתרת גרסה', '\n\n* ' + message.replace(/reason/g, selectValue + ": " + value), 4, function() { mw.notify($('<span>').html('בקשתך נשמרה ב<a href="/wiki/ויקיפדיה:בקשות_ממפעילים#בקשות_מחיקת_גרסאות_מסוימות">דף הבקשות מהמפעילים</a>'), {type: 'success'});})}, ["תוכן פוגעני", "חשיפת פרטים אישיים", "נאצות/השמצות"], "הסתיר את הגרסה");
                    break;
            }
        });
    });
}
var ca = $.inArray(mw.config.get('wgNamespaceNumber'), [6, 14]) + 1 ?  ':' : '';
var pageName = mw.config.get('wgPageName').replace( /_/g, " " );
var isRedirect = $('.redirectMsg').length || $("#redirectsub").length;
if ($('#t-contributions').length) {
    addMenuItem('בקשת חסימה', 'בקשה לחסום את replaceUser', "{{לחסום|replaceUser}}", "]");
}
var pageLink = isRedirect ? '{{ללא הפניה|replaceParam}}' : '[[' + ca + 'replaceParam]]';
var protectTemplate = isRedirect ? '{{בקשת הגנה|replaceParam|reason|הפניה=כן}}' : '{{בקשת הגנה|replaceParam|reason}}';
if (mw.config.get('wgRestrictionEdit') && mw.config.get('wgRestrictionEdit').length === 0)
    addMenuItem('בקשת הגנה', 'בקשה להגן על הדף replaceParam', protectTemplate, '=');
else
    addMenuItem('בקשת שינוי הגנה', 'בקשה לשנות את ההגנה על הדף replaceParam', protectTemplate, '=');

var deleteTemplate = isRedirect ? '{{בקשת מחיקה|replaceParam|reason|הפניה=כן}}' : '{{בקשת מחיקה|replaceParam|reason}}';
if (!mw.util.getParamValue('redlink'))
    addMenuItem('בקשת מחיקה', 'בקשה למחוק את הדף replaceParam', deleteTemplate,'d');
if (mw.util.getParamValue('oldid') && mw.util.getParamValue('diff'))
    addMenuItem('הסתרת גרסה', 'בקשה להסתיר את הגרסה ' + mw.util.getParamValue('diff') , '{{הבדל|' + mw.config.get('wgPageName') + '|' + mw.util.getParamValue('diff') + '|' + mw.util.getParamValue('oldid') + '|טקסט=גרסה זו}} ב[['+ ca + mw.config.get('wgPageName').replace( /_/g, " " ) +']]', '[');
$( document ).trigger( 'new-portlet-link' );
});