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

از ایران پدیا
پرش به ناوبری پرش به جستجو

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

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
/*global jQuery, mediaWiki */
(function($, mw) {
    'use strict';
    var windowManager;
    var archiveSection;
    var commentInSection;
    var archiveSectionOptions = {
        install: function() {
            if ($.inArray(mw.config.get("wgNamespaceNumber"), [1, 3, 4, 5, 7, 9, 11, 13, 15]) > -1) {
                $('.mw-editsection').each(function() {
                    var span = $('<span>', {
                        class: 'mw-editsection mw-archivesection'
                    }).insertBefore(this);
                    span.append($('<span>', {
                        class: 'mw-editsection-bracket',
                        text: '['
                    }));
                    span.append($('<a>', {
                        href: '#',
                        title: 'ثبت نظر (موافق/مخالف/شد/...)',
                        style: 'font-size: smaller;',
                        text: 'ثبت نظر',
                    }).click(function(e) {
                        e.preventDefault();
                        var section = e.target;
                        mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
                            archiveSectionOptions.createCommentWindow(section);
                        });
                    }));
                    span.append($('<span>', {
                        class: 'mw-editsection-bracket',
                        text: ' / '
                    }));
                    span.append($('<a>', {
                        href: '#',
                        title: 'جمع‌بندی این بخش',
                        style: 'font-size: smaller;',
                        text: 'جمع‌بندی',
                    }).click(function(e) {
                        e.preventDefault();
                        var section = e.target;
                        mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']).done(function() {
                            archiveSectionOptions.createArchiveWindow(section);
                        });
                    }));
                    span.append($('<span>', {
                        class: 'mw-editsection-bracket',
                        text: ']'
                    }));
                    // Late pre-loading
                    mw.loader.load(['oojs-ui-core', 'oojs-ui-widgets', 'oojs-ui-windows']);
                });
            }
        },
        createArchiveWindow: function(section) {
            var query = archiveSectionOptions.getQuery(section);
            archiveSectionOptions.currentSectionId = query.section;

            function ArchiveSection(config) {
                ArchiveSection.super.call(this, config);
            }
            OO.inheritClass(ArchiveSection, OO.ui.ProcessDialog);
            ArchiveSection.static.name = 'archive';
            ArchiveSection.static.title = 'جمع‌بندی بخش';
            ArchiveSection.static.actions = [{
                action: 'archive',
                label: 'جمع‌بندی',
                flags: 'primary'
            }, {
                label: 'لغو',
                flags: 'safe'
            }];
            ArchiveSection.prototype.initialize = function() {
                var fieldset = [];
                ArchiveSection.super.prototype.initialize.apply(this, arguments);
                this.panel = new OO.ui.PanelLayout({
                    padded: true,
                    expanded: false
                });
                this.content = new OO.ui.FieldsetLayout();
                archiveSectionOptions.switchTop = new OO.ui.ToggleSwitchWidget({
                    label: 'جمع‌بندی بالای متن باشد',
                    value: true,
                });
                archiveSectionOptions.switchSuccess = new OO.ui.ToggleSwitchWidget({
                    label: 'بحث در رسیدن به اجماع موفق بود',
                    value: true,
                });
                archiveSectionOptions.switchBold = new OO.ui.ToggleSwitchWidget({
                    label: 'متن جمع‌بندی ضخیم نمایش داده شود',
                    value: false,
                });
                archiveSectionOptions.textSummary = new OO.ui.TextInputWidget({
                    placeholder: 'متن جمع‌بندی را وارد کنید',
                });
                //archiveSectionOptions.textSummary.setRTL(true);
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchTop, {
                    label: 'جمع‌بندی بالای متن باشد',
                    align: 'inline',
                }));
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchSuccess, {
                    label: 'بحث در رسیدن به اجماع موفق بود',
                    align: 'inline',
                }));
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.switchBold, {
                    label: 'متن جمع‌بندی ضخیم نمایش داده شود',
                    align: 'inline',
                }));
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textSummary, {
                    label: 'جمع‌بندی:',
                    align: 'top'
                }));
                this.content.addItems(fieldset);
                this.panel.$element.append(this.content.$element);
                this.$body.append(this.panel.$element);
            };
            ArchiveSection.prototype.getActionProcess = function(action) {
                var dialog = this;
                if (action === 'archive') {
                    archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
                }
                return ArchiveSection.super.prototype.getActionProcess.call(this, action);
            };
            if (!windowManager) {
                windowManager = new OO.ui.WindowManager();
                $('body').append(windowManager.$element);
            }
            if (!archiveSection) {
                archiveSection = new ArchiveSection({
                    size: 'medium'
                });
                windowManager.addWindows([archiveSection]);
            }
            windowManager.openWindow(archiveSection);
        },
        createCommentWindow: function(section) {
            var query = archiveSectionOptions.getQuery(section);
            archiveSectionOptions.currentSectionId = query.section;

            function CommentInSection(config) {
                CommentInSection.super.call(this, config);
            }
            OO.inheritClass(CommentInSection, OO.ui.ProcessDialog);
            CommentInSection.static.name = 'comment';
            CommentInSection.static.title = 'ثبت نظر';
            CommentInSection.static.actions = [{
                action: 'comment',
                label: 'ثبت نظر',
                flags: 'primary'
            }, {
                label: 'لغو',
                flags: 'safe'
            }];
            CommentInSection.prototype.initialize = function() {
                var fieldset = [];
                CommentInSection.super.prototype.initialize.apply(this, arguments);
                this.panel = new OO.ui.PanelLayout({
                    padded: true,
                    expanded: false
                });
                this.content = new OO.ui.FieldsetLayout();
                archiveSectionOptions.pinguser = new OO.ui.ToggleSwitchWidget({
                    label: 'آخرین کاربر پینگ شود؟',
                    value: false,
                });

                //archiveSectionOptions.pinguser.on( 'change', function () {
                //	alert(archiveSectionOptions.setPingUser(current2))		
                //});

                archiveSectionOptions.radioComment = new OO.ui.RadioOptionWidget({
                    label: 'پیام',
                });
                archiveSectionOptions.radioDone = new OO.ui.RadioOptionWidget({
                    label: 'شد',
                });
                archiveSectionOptions.radioReject = new OO.ui.RadioOptionWidget({
                    label: 'نشد',
                });
                archiveSectionOptions.radioSupport = new OO.ui.RadioOptionWidget({
                    label: 'موافق',
                });
                archiveSectionOptions.radioOppose = new OO.ui.RadioOptionWidget({
                    label: 'مخالف',
                });
                archiveSectionOptions.radioDelete = new OO.ui.RadioOptionWidget({
                    label: 'حذف',
                });
                archiveSectionOptions.radioKeep = new OO.ui.RadioOptionWidget({
                    label: 'بماند',
                });
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.pinguser, {
                    label: 'آخرین کاربر پینگ شود؟',
                    align: 'inline',
                }));
                archiveSectionOptions.radioCommentType = new OO.ui.RadioSelectWidget({
                    items: [
                        archiveSectionOptions.radioComment,
                        archiveSectionOptions.radioDone,
                        archiveSectionOptions.radioReject,
                        archiveSectionOptions.radioSupport,
                        archiveSectionOptions.radioOppose,
                        archiveSectionOptions.radioDelete,
                        archiveSectionOptions.radioKeep
                    ]
                });
                archiveSectionOptions.radioCommentType.selectItem(archiveSectionOptions.radioComment);
                archiveSectionOptions.textComment = new OO.ui.TextInputWidget({
                    placeholder: 'متن نظر را وارد کنید',
                });
                //archiveSectionOptions.textComment.setRTL(true);
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.radioCommentType, {
                    label: 'برچسب قبل از نظر',
                    align: 'top'
                }));
                fieldset.push(new OO.ui.FieldLayout(archiveSectionOptions.textComment, {
                    label: 'متن نظر:',
                    align: 'top'
                }));
                this.content.addItems(fieldset);
                this.panel.$element.append(this.content.$element);
                this.$body.append(this.panel.$element);
            };
            CommentInSection.prototype.getActionProcess = function(action) {
                var dialog = this;
                if (action === 'comment') {
                    archiveSectionOptions.doEdit(archiveSectionOptions.currentSectionId, action);
                }
                return CommentInSection.super.prototype.getActionProcess.call(this, action);
            };
            if (!windowManager) {
                windowManager = new OO.ui.WindowManager();
                $('body').append(windowManager.$element);
            }
            if (!commentInSection) {
                commentInSection = new CommentInSection({
                    size: 'medium'
                });
                windowManager.addWindows([commentInSection]);
            }
            windowManager.openWindow(commentInSection);
        },
        getQuery: function(section) {
            var href = $(section).parent().next().find('a').attr('href');
            var query = new mw.Uri(href).query;
            return query;
        },
        setPingUser: function(text) {
            var Plines = text.replace('\r', '').split('\n');
            var Plastline = Plines[Plines.length - 1];
            var PingUsers = Plastline.match(/\[\[(?:بحث[_ ]کاربر|[Uu]ser[_ ][tT]alk)\:([^\]]+)\]\]/i)[1].split('|')[0]
            return '{{پینگ|' + PingUsers + '}}'
        },
        setIndentation: function(text, newText) {
            text = text.replace('\r', '')
            var lines = text.split('\n');
            var lastline = lines[lines.length - 1];
            var colons = lastline.match('^:*')[0].length;
            var indentation = '';
            for (var i = 0; i < colons + 1; i++) {
                indentation += ':';
            }
            text = text + '\n' + indentation + newText.trim();
            return text
        },
        doEdit: function(sectionId, action) {
            (new mw.Api()).get({
                format: 'json',
                action: 'query',
                titles: mw.config.get("wgPageName"),
                rvsection: sectionId,
                prop: 'revisions',
                rvprop: 'content',
            }).then(function(data) {
                var page = data.query.pages[Object.keys(data.query.pages)[0]];
                var current = page.revisions[0]['*'];
                var header = current.substr(0, current.indexOf('\n'));
                var content = current.substr(current.indexOf('\n') + 1);
                var newText = '';
                var pingtxt = '';
                var section_title = (current.match(/^(=+)[^=]*?(\1)$/m) || [''])[0];
                section_title = section_title.replace(/\=/g, '');
                var editSummary = '/' + '*' + section_title + '*' + '/ ';
                if (action == 'archive') {
                    editSummary += 'جمع‌بندی: ';
                    editSummary += archiveSectionOptions.textSummary.getValue();
                    newText = header + '\n';
                    // Per Special:Diff/18468612
                    if (mw.config.get("wgPageName") == "ویکی‌پدیا:درخواست_انتقال") {
                        if (archiveSectionOptions.switchSuccess.getValue()) {
                            content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|شد}}');
                        } else {
                            content = content.replace(/\{\{وضعیت\|?\}\}/, '{{وضعیت|نشد}}');
                        }
                    }
                    newText += '{{بسته';
                    if (archiveSectionOptions.switchSuccess.getValue()) {
                        newText += '}}\n';
                    } else {
                        newText += '|ناموفق=بله}}\n';
                    }
                    var summaryText = '';
                    if (archiveSectionOptions.textSummary.getValue()) {
                        if (archiveSectionOptions.switchBold.getValue()) {
                            summaryText += "'''";
                        }
                        summaryText += archiveSectionOptions.textSummary.getValue();
                        if (archiveSectionOptions.switchBold.getValue()) {
                            summaryText += "'''";
                        }
                        summaryText += ' ~~' + '~~\n';
                    }
                    if (archiveSectionOptions.switchTop.getValue()) {
                        if (archiveSectionOptions.textSummary.getValue()) {
                            newText += ':' + summaryText;
                        }
                        newText += content;
                        if (newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
                    } else {
                        if (archiveSectionOptions.textSummary.getValue()) {
                            newText = archiveSectionOptions.setIndentation(newText + content, summaryText);
                        } else {
                            newText = newText + content;
                        }
                        if (newText.indexOf('{{بسته') > -1) newText += '\n{{پایان بسته}}';
                    }
                    return (new mw.Api()).post({
                        format: 'json',
                        action: 'edit',
                        title: mw.config.get("wgPageName"),
                        section: sectionId,
                        summary: editSummary,
                        text: newText,
                        token: mw.user.tokens.get('editToken')
                    });
                } else {
                    // editSummary += archiveSectionOptions.textComment.getValue();
                    var currentTxt = current.replace('\r', '')
                    var prefix = '';
                    if (currentTxt.search('\n*') > 0) {
                        prefix = '* ';
                    } else if (currentTxt.search('\n#') > 0) {
                        prefix = '# ';
                    } else {
                        prefix = '* ';
                    }
                    if (archiveSectionOptions.pinguser.getValue()) {
                        var Pingtxt = archiveSectionOptions.setPingUser(currentTxt)
                    } else {
                        var Pingtxt = ''
                    }
                    if (archiveSectionOptions.radioDone.isSelected()) {
                        newText = Pingtxt + '{{شد}} ';
                        editSummary += 'انجام شد';
                    } else if (archiveSectionOptions.radioComment.isSelected()) {
                        newText = Pingtxt + '';
                        editSummary += 'پیام';
                    } else if (archiveSectionOptions.radioReject.isSelected()) {
                        newText = Pingtxt + '{{نشد}} ';
                        editSummary += 'انجام نشد';
                    } else if (archiveSectionOptions.radioKeep.isSelected()) {
                        newText = prefix + Pingtxt + ' {{بماند}} ';
                        editSummary += 'ثبت نظر بماند';
                    } else if (archiveSectionOptions.radioDelete.isSelected()) {
                        newText = prefix + Pingtxt + ' {{حذف}} ';
                        editSummary += 'ثبت نظر حذف شود';
                    } else if (archiveSectionOptions.radioSupport.isSelected()) {
                        newText = prefix + Pingtxt + ' {{موافق}} ';
                        editSummary += 'ثبت نظر موافق';
                    } else {
                        newText = prefix + Pingtxt + ' {{مخالف}} ';
                        editSummary += 'ثبت نظر مخالف';
                    }
                    newText += archiveSectionOptions.textComment.getValue();
                    newText += ' ~~' + '~~';
                    if (archiveSectionOptions.radioSupport.isSelected() ||
                        archiveSectionOptions.radioOppose.isSelected() ||
                        archiveSectionOptions.radioDelete.isSelected() ||
                        archiveSectionOptions.radioKeep.isSelected()) {
                        newText = current + '\n' + newText;
                    } else {
                        newText = archiveSectionOptions.setIndentation(current, newText);
                    }

                    return (new mw.Api()).post({
                        format: 'json',
                        action: 'edit',
                        title: mw.config.get("wgPageName"),
                        section: sectionId,
                        summary: editSummary,
                        text: newText,
                        token: mw.user.tokens.get('editToken')
                    });
                }
            }).then(function() {
                if (action == 'archive') {
                    mw.notify('در حال ثبت جمع‌بندی شما ...');
                } else {
                    mw.notify('در حال ثبت نظر شما ...');
                }
                location.hash = $('.mw-headline')[sectionId - 1].id;
                location.reload(true);
            }, function(error) {
                mw.notify('ثبت نظر یا جمع‌بندی ناموفق بود: ' + error, {
                    type: 'error'
                });
            })
        },
        currentSectionId: -1,
    };
    if (mw.config.get('wgNamespaceNumber') >= 0) {
        $(archiveSectionOptions.install);
    }
})(jQuery, mediaWiki);