مدیاویکی:Gadget-EPMessages.js

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/**
 * This gadget is a rewrite of the UserMessages gadget, which was influenced by
 * [[n:en:MediaWiki:Gadget-UserMessages.js]] and [[n:MediaWiki:Gadget-UserMessages.js]]
 * 
 * Unlike the previous version, this uses jquery.ui dialogs and accept parameters for
 * the messages that are being posted on the user's talk page.
 *
 * The mw.util.addPortletLink() function is adopted from Twinkle. See
 * https://github.com/azatoth/twinkle for copyright information.
 */

( function ( window, document, $, undefined ) { // Wrapper for anonymous function

var UserMessages = {};
window.UserMessages = UserMessages; // global acecss

UserMessages.addNewSection = function( summary, content ) {
    api = new mw.Api();
    api.get( {
        action : 'query',
        titles : mw.config.get( 'wgPageName' ),
        prop   : 'revisions',
        rvprop : 'content'
    } ).done( function( data ) {
        pages = data.query.pages;
        page_id = Object.keys(pages)[0];
        if( page_id == -1 ) {
            wikitext = content;
        } else {
            wikitext = pages[page_id].revisions[0]["*"] + '\n\n' + content;
        }
        api.post( {
            action  : 'edit',
            title   : mw.config.get( 'wgPageName' ),
            summary : summary,
            text    : wikitext,
            token   : mw.user.tokens.get('csrfToken')
        } ).done ( function( data ) {
            mw.log( "Saved successfully" );
            location.reload();
        } ).fail( function( code, result ) {
            if ( code === "http" ) {
                mw.log( "HTTP error: " + result.textStatus );
            } else if ( code === "ok-but-empty" ) {
                mw.log( "Got an empty response from the server" );
            } else {
                mw.log( "API error: " + code );
            } 
        } );
    } );
}

UserMessages.dialog = null;

UserMessages.addTemplate = function( template, param ) {
    summary = 'افزودن الگوی «' + template + '» به بحث کاربر'
    content = '{{subst:' + template + param + '}}\n~~' + '~~';
    UserMessages.addNewSection( summary, content );
    return true;
}

UserMessages.prepareTemplate = function( template, param_array ){
    param_str = '';
    if( param_array ) {
        UserMessages.dialog = new Morebits.simpleWindow( 600, 400 );
        UserMessages.dialog.setTitle( 'افزودن الگوی {{' + template + '}} با پارامتر' );
        var form = new Morebits.quickForm( function(){
            param_str = '';
            for( i=0; i < param_array.length; i++ ) {
                p = param_array[i];
                param_str += '|' + p.param + '=';
                param_str += $(UserMessages.dialog.content).find('[name=' + p.param + ']').val();
            }
            UserMessages.addTemplate( template, param_str );
        });
        form.append({
            type: 'div',
            name: 'what-to-do',
            label: 'مقدار پارامترهای زیر را وارد کنید.',
        });
        for( i=0; i < param_array.length; i++ ) {
            p = param_array[i];
            form.append({
                type: 'input',
                name: p.param,
                label: p.label + ': '
            });
        }
        form.append({
            type: 'div',
            name: 'preview-what-to-do',
            label: 'اگر می‌خواهید پیش‌نمایشی از نتیجه را ببینید روی دکمهٔ پیش‌نمایش کلیک کنید:',
        });
        form.append({
            type: 'button',
            name: 'preview-btn',
            label: 'پیش‌نمایش',
            event: function(){
                param_str = '';
                for( i=0; i < param_array.length; i++ ) {
                    p = param_array[i];
                    param_str += '|' + p.param + '=';
                    param_str += $(UserMessages.dialog.content).find('[name=' + p.param + ']').val();
                }
                api = new mw.Api();
                api.get({
                    action: 'parse',
                    text: '{{subst:' + template + param_str + '}}',
                    pst: true
                }).done(function( data ){
                    $('[name=preview-warn]').html(data.parse.text['*']);
                });
            }
        });
        form.append({
            type: 'div',
            name: 'preview-warn',
            label: ''
        });
        form.append( { type:'submit' } );
            var result = form.render();
        UserMessages.dialog.setContent( result );
        UserMessages.dialog.display();

        return false;
    }
}

UserMessages.messages = [
    [{
        tpl     : 'دعوت دانشجویان برنامه آموزشی',
        params  : [{param : 1, label : 'پیام تکمیلی'}],
        label   : 'دعوت کاربر',
        id      : 'p-warn-invite',
    },
    {
        tpl     : 'آغازیدن مقاله آموزشی',
        params  : [{param : 1, label : 'پیام تکمیلی'}],
        label   : 'درخواست آغازیدن مقاله',
        id      : 'p-warn-start-article',
    },
    {
        tpl     : 'ویرایش دانشجویی',
        params  : [{param : 1, label : 'پیام تکمیلی'}],
        label   : 'مقاله: ویرایش دانشجویی',
        id      : 'p-warn-student',
    },
    {
        tpl     : 'حداقل‌های مقاله',
        params  : false,
        label   : 'مقاله: حداقل‌ها',
        id      : 'p-warn-minimum-req',
    }]
];

if( mw.config.get( 'wgUserGroups' ).indexOf( 'sysop' ) > -1) {
    UserMessages.messages.push([]);
}
UserMessages.addPortletLink = function( tpl, params, text, id, tooltip ) {
    var link = mw.util.addPortletLink( 'p-warn' , "#", text, id, tooltip );

    $( link ).click( function( ev ) {
        ev.preventDefault();
        UserMessages.addTemplate(tpl, '');
    });

    if( params ) {
        $( link ).find( 'a' ).append( '<a href="#" id="' + id + '-parametric" class="p-warn-param"><small>+ پارامتر</small></a>' );
        $( link ).find( '.p-warn-param' ).click( function( evt ) {
            evt.stopPropagation();
            evt.preventDefault();
            UserMessages.prepareTemplate(tpl, params);
            return false;
        });
    }
};

UserMessages.load = function () {
    if( mw.config.get('wgNamespaceNumber') != 3) return false;

    $('#p-views').after('<div id="p-warn" class="vectorMenu"><h3><span><a href="#"></a>برنامه</span></h3><div class="menu"><ul></ul></div></div>');

    for( g=0; g < UserMessages.messages.length; g++ ) {
        for( i=0; i < UserMessages.messages[g].length; i++ ) {
            m = UserMessages.messages[g][i];
            UserMessages.addPortletLink( m.tpl, m.params, m.label, m.id, 'افزودن {{' + m.tpl + '}} با امضای شما' );
        }
        if( g != UserMessages.messages.length - 1 ) {
            $('#p-warn .menu ul').append('<li class="sep"><hr /></li>');
        }
    }
};

$(UserMessages.load);

} ( window, document, jQuery )); // End wrapper for anonymous function