לדלג לתוכן

משתמש:ממוני גבך/בקשת העברת דף.js

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

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

  • פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
  • גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
  • אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
$(function () {
    // מניעת הרצה בדפים מיוחדים
    if (mw.config.get('wgNamespaceNumber') < 0) {
        return;
    }

    // הוספת הקישור לתפריט הכלים
    mw.loader.using(['mediawiki.util'], function () {
        var link = mw.util.addPortletLink(
            'p-tb',
            '#',
            'בקשת העברה',
            't-req-move',
            'שליחת בקשה להעברת הדף הנוכחי למפעילי המערכת'
        );

        // חסימת הקישור מיד לאחר היצירה כדי למנוע # בכתובת
        $(link).find('a').on('click', function (e) {
            e.preventDefault();
            e.stopPropagation();
            
            mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows', 'mediawiki.api'], function () {
                if (!window.RequestMoveDialog) {
                    defineDialogClass();
                }
                openMoveRequestDialog();
            });
            return false;
        });
    });

    function defineDialogClass() {
        window.RequestMoveDialog = function(config) {
            window.RequestMoveDialog.super.call(this, config);
        };
        OO.inheritClass(window.RequestMoveDialog, OO.ui.ProcessDialog);

        window.RequestMoveDialog.static.name = 'requestMoveDialog';
        window.RequestMoveDialog.static.title = 'בקשת העברת דף';
        window.RequestMoveDialog.static.actions = [
            { action: 'save', label: 'שליחת בקשה', flags: ['primary', 'progressive'] },
            { label: 'ביטול', flags: 'safe' }
        ];

        window.RequestMoveDialog.prototype.initialize = function () {
            window.RequestMoveDialog.super.prototype.initialize.apply(this, arguments);
            this.panel = new OO.ui.PanelLayout({ padded: true, expanded: false });

            this.sourceInput = new OO.ui.TextInputWidget({ value: mw.config.get('wgPageName').replace(/_/g, ' '), disabled: true });
            this.targetInput = new OO.ui.TextInputWidget({ placeholder: 'הזינו את השם החדש המבוקש לדף', required: true });
            this.reasonSelect = new OO.ui.DropdownInputWidget({
                options: [
                    { data: 'משמעות ראשית', label: 'משמעות ראשית' },
                    { data: 'שינוי שם לשם המקובל', label: 'שינוי שם לשם המקובל' },
                    { data: 'תיקון שגיאת כתיב', label: 'תיקון שגיאת כתיב' },
                    { data: 'אחר', label: 'אחר' }
                ]
            });
            this.detailsInput = new OO.ui.MultilineTextInputWidget({ placeholder: 'פירוט נוסף...', rows: 3 });

            this.panel.$element.append(
                new OO.ui.FieldLayout(this.sourceInput, { label: 'דף מקור:', align: 'top' }).$element,
                new OO.ui.FieldLayout(this.targetInput, { label: 'דף יעד:', align: 'top' }).$element,
                new OO.ui.FieldLayout(this.reasonSelect, { label: 'סיבה:', align: 'top' }).$element,
                new OO.ui.FieldLayout(this.detailsInput, { label: 'פירוט נוסף:', align: 'top' }).$element
            );
            this.$body.append(this.panel.$element);
        };

        window.RequestMoveDialog.prototype.getActionProcess = function (action) {
            if (action === 'save') {
                var target = this.targetInput.getValue().trim();
                var reason = this.reasonSelect.getValue();
                var details = this.detailsInput.getValue().trim();

                if (!target) return new OO.ui.Process(function() { mw.notify('נא להזין דף יעד'); });

                return new OO.ui.Process(function () {
                    var api = new mw.Api();
                    var sourcePage = mw.config.get('wgPageName').replace(/_/g, ' ');
                    var finalReason = details ? reason + ' - ' + details : reason;
                    var requestLine = '\n* {{בקשת העברה|' + sourcePage + '|' + target + '|' + finalReason + '}} [[מש:ממוני גבך|ממוני גבך]] • [[שיחת משתמש:ממוני גבך|בואו נשוחח]] • ד' Sivan ה'תשפ"ו •  00:59, 20 במאי 2026 (IDT)';

                    return api.get({ action: 'parse', page: 'המכלול:בקשות ממפעילים', prop: 'sections' })
                    .then(function (secData) {
                        var sectionIndex = -1;
                        secData.parse.sections.forEach(function(s) {
                            if (s.line.indexOf('העברת דף') !== -1) sectionIndex = s.index;
                        });
                        if (sectionIndex === -1) return $.Deferred().reject('לא נמצאה הפסקה המתאימה.');
                        
                        return api.postWithEditToken({
                            action: 'edit',
                            title: 'המכלול:בקשות ממפעילים',
                            section: sectionIndex,
                            appendtext: requestLine,
                            summary: 'בקשת העברת דף: [[' + sourcePage + ']] ← [[' + target + ']]'
                        });
                    }).then(function () { mw.notify('הבקשה נשלחה!'); });
                });
            }
            return window.RequestMoveDialog.super.prototype.getActionProcess.call(this, action);
        };
    }

    function openMoveRequestDialog() {
        var windowManager = new OO.ui.WindowManager();
        $('body').append(windowManager.$element);
        var dialog = new window.RequestMoveDialog({ size: 'medium' });
        windowManager.addWindows([dialog]);
        windowManager.openWindow(dialog);
    }
});