מדיה ויקי:Gadget-UserTemplates.js

מתוך ויקיטקסט, מאגר הטקסטים החופשי

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אינטרנט אקספלורר / אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
  • אופרה: ללחוץ על Ctrl-F5.
/* סקריפט להוספת קישורים להוספת תבניות אזהרה שונות למשתמשים, התורמים: Yonidebest, Ofekalef, קיפודנחש, חיים 7 */
$(function() {
    "use strict";
        function save_topage(title, summary, content, wl, next) {
                var param = {action: 'edit', title: title, summary: summary, token: mw.user.tokens.get('csrfToken'), appendtext: content, format: 'json'};
                if (wl)
                        param.watchlist = wl;
                $.post(mw.util.wikiScript('api'), param, function (data) {
                        if (data && data.error)
                                alert('error saving: ' + data.error['info']);
                        else if (data && data.edit && data.edit.result == 'Success' && typeof next == 'function')
                                next();
                });
        }
 
        function activate() {
                var $this = $(this),
                        user = $this.attr('user'),
                        templ = $this.data('templ'),
                        warning = templ.m || templ.t,
                        linkTitle = templ.hasOwnProperty('linkTitle')? templ.linkTitle : true,
                        tw = warning,
                        refPage = $this.attr('refPage').replace(/_/g, ' ');
 
                if (!warning || !user)
                        return;
 
                if (refPage)
                        tw += '|' + refPage;
 
                if (templ.askExtra) {
                        var skipExtra = window.skipAsk64 && window.skipAsk64[templ.m];          
                        if (templ.askExtra.prompt && !skipExtra) {
                                var extra = $.trim(prompt(templ.askExtra.prompt));
                                if (extra)
                                        tw += templ.askExtra.param + extra;
                        }
                        else if (! skipExtra && templ.askExtra.confirm && confirm(templ.askExtra.confirm))
                                tw += templ.askExtra.param;
                }
 
                var text = "{{" + tw + "}} ~~" + "~~\n";
                if (refPage)
                        text = '\n==' + (linkTitle? "[[" + refPage + "]]" : refPage ) + '==\n' + text;
                save_topage("שיחת משתמש:" + user, warning, text, watchOrUnwatch(templ), function() {mw.util.jsMessage(' תבנית "' + warning + '" נוספה לשיחת משתמש:' + user);});
        }
 
        function watchOrUnwatch(templ) {
                var l = window.script64Watch || '';
                return l
                        ? (typeof l == "string"
                                ? l
                                : l[templ.t])
                        : templ.wl;
        }
 
        function getUserLink() {
                return mw.config.get('wgCanonicalSpecialPageName') == 'Block'
                        ? mw.util.$content.find('p a:first')
                        : (mw.config.get('wgAction') == 'rollback'
                                ? $('.mw-userlink:first')
                                : $('#mw-diff-ntitle2 a:first')
                                );
        }
        // main body of function
        var
                link = getUserLink(),
                user = link.text(),
                anon = mw.util.isIPv4Address(user) || mw.util.isIPv6Address(user),
                all = [
                        {t:"אזהרה", m: "אזהרה", tl:"הוספת תבנית אזהרה"},
                        {t:"ניסויים", m: "ניסויים", tl:"הוספת תבנית ניסויים", wl: 'unwatch'},
                        {t:"בוטל",  m: "בוטל", tl:"הוספת תבנית בוטל", askExtra: {prompt: 'סיבת הביטול', param: '|סיבה='}},
                        {t:"חזרה", m: "חזרה על עריכה", tl:"הוספת תבנית חזרה על עריכה"},
                        {t:"העתקה", m: "העתקה", tl:"הוספת אזהרת העתקה", wl: 'unwatch'},
                        anon ? {t:"תודה", m: "תודה", tl:"הוספת תבנית תודה"} : {t:"בה", m: "בה", tl:"הוספת תבנית ברוך בואך", noPage: true}
                ],
                deletedTemplates = [
                        {t:"הבל", m: "הבל", tl:"הוספת אזהרת הבל", linkTitle: false },
                        {t:"נמחק", m: "נמחק", tl:"הוספת תבנית נמחק", linkTitle: false },
                        {t:"נמחק ניסויים", m: "נמחק ניסויים", tl:"הוספת תבנית מחיקה עקב ניסוי יצירת דף", linkTitle: false },
                        {t:"העתקה", m: "העתקה", tl:"הוספת אזהרת העתקה"}
                ],
                youWereBlocked = {t:"נחסמת", m: "נחסמת", tl:"הודעה למשתמש שנחסם", askExtra: {prompt: 'סיבת החסימה', param: '|'}, noPage: true};
 
        function makeSpan(forUser, forDeletePage, paragraph) {
                var container = $(paragraph ? '<p>' : '<span>').text(' (');
                if (forDeletePage) {
                        container.append($('<a>', {href: mw.util.getUrl('User:' + forUser), text: forUser}));
                        container.append(' (');
                        container.append($('<a>', {href: mw.util.getUrl('User Talk:' + forUser), text: 'שיחה'}));
                        container.append(' | ');
                        container.append($('<a>', {href: mw.util.getUrl('Special:Contributions/' + forUser), text: 'תרומות'}));
                        container.append(' | ');
                        container.append($('<a>', {href: mw.util.getUrl('Special:Block/' + forUser), text: 'חסימה'}));
                        container.append(' ) ');
                        all = deletedTemplates.concat([youWereBlocked]);
                }
                for (var i in all) {
                        var templ = all[i];
                        var page = (templ.noPage)
                                ? ''
                                : (($.inArray(mw.config.get('wgNamespaceNumber'), [6, 14]) + 1) ? ':' : '') + mw.config.get('wgPageName').replace(/_/g, " ");
                        var a = $("<a>", {href: '#', user: forUser, refPage: page, title: templ.tl || templ.t})
                                .text(templ.t)
                                .click(activate)
                                .data({templ: templ});
                        container.append(i==0 ? '':' | ').append(a);
                }
                return container.append(')');
        }
 
        var sysop = $.inArray('sysop', mw.config.get('wgUserGroups'))+1;
        if (sysop) {
                if (mw.config.get('wgCanonicalSpecialPageName') == 'Block')
                        all = [];
                all.push(youWereBlocked);
        }
 
        if (user) {
                if ($('#mw-diff-ntitle2').length)
                        $('#mw-diff-ntitle2').append(makeSpan(user, false, true));
                else
                        link.after(makeSpan(user, false));
        }
        else if (sysop && mw.config.get('wgAction') == 'delete' && $('#deleteconfirm').length==0) { //more complex case: we have to use API to get the user.
                $.getJSON(
                        mw.util.wikiScript('api'),
                        {action: 'query', list: 'deletedrevs', drlimit: 20, titles: mw.config.get('wgPageName'), drprop: 'user', format: 'json'},
                        function(data) {
                                var users = {};
                                var content = mw.util.$content;
                                if (data && data.query && data.query.deletedrevs)
                                        $(data.query.deletedrevs).each(function() {
                                                $(this.revisions).each(function() {users[this.user] = true;});
                                        });
                                content.append('<p>', {text: 'את הדף ' + mw.config.get('wgPageName') + ' ערכו העורכים הבאים:'});
                                for (var editor in users)
                                        content.append($('<p>').append(makeSpan(editor, true)));
                        });
                }
});
//