MediaWiki:Gadget-twinklespeedy.js

Not: Sayfayı kaydettikten sonra değişiklikleri görebilmek için tarayıcınızın önbelleğinizi temizlemeniz gerekir. Google Chrome, Firefox, Microsoft Edge ve Safari: ⇧ Shift tuşuna basılı tutun ve Yeniden Yükle araç çubuğu düğmesine tıklayın. Ayrıntılar ve diğer tarayıcılara yönelik yönergeler için Vikipedi:Önbelleğinizi atlayın sayfasını inceleyin.

// <nowiki>


(function($) {


    /*
     ****************************************
     *** twinklespeedy.js: HS modülü
     ****************************************
     * Çağırma modu:           Sekme ("H-sil")
     * Etkin olduğu yerler:    Özel sayfalar dışındaki var olan tüm sayfalar
     *
     * GELİŞTİRİCİLER İÇİN NOT:
     *   Yeni bir ölçüt ekleyeceğiniz zaman, twinkleconfig.js sayfasının tepesindeki
     *   uygun yere de ekleme yapın. Ayrıca twinkle.js sayfasındaki HS tercihlerinin
     *   varsayılan değerlerini kontrol edin ve yeni ölçütü yararlı olacağını düşündüğünüz
     *   seçeneklere ekleyin.
     */

    Twinkle.speedy = function twinklespeedy() {
        // Disable on:
        // * special pages
        // * non-existent pages
        if (mw.config.get('wgNamespaceNumber') < 0 || !mw.config.get('wgArticleId')) {
            return;
        }

        Twinkle.addPortletLink(Twinkle.speedy.callback, 'HS', 'tw-csd', Morebits.userIsSysop ? 'VP\:HS uyarınca sayfayı hızlı silin' : 'VP\:HS uyarınca sayfanın hızlı silinmesini talep edin');
    };

    // This function is run when the CSD tab/header link is clicked
    Twinkle.speedy.callback = function twinklespeedyCallback() {
        Twinkle.speedy.initDialog(Morebits.userIsSysop ? Twinkle.speedy.callback.evaluateSysop : Twinkle.speedy.callback.evaluateUser, true);
    };

    // Used by unlink feature
    Twinkle.speedy.dialog = null;
    // Used throughout
    Twinkle.speedy.hasCSD = !!$('#delete-reason').length;

    // Prepares the speedy deletion dialog and displays it
    Twinkle.speedy.initDialog = function twinklespeedyInitDialog(callbackfunc) {
        var dialog;
        Twinkle.speedy.dialog = new Morebits.simpleWindow(Twinkle.getPref('speedyWindowWidth'), Twinkle.getPref('speedyWindowHeight'));
        dialog = Twinkle.speedy.dialog;
        dialog.setTitle('Hızlı silmek için kriter seçin');
        dialog.setScriptName('Twinkle');
        dialog.addFooterLink('Hızlı silme politikası', 'VP:HS');
        dialog.addFooterLink('Silme politikası', 'VP:SP');
        dialog.addFooterLink('HS tercihleri', 'WP:TW/PREF#speedy');
        dialog.addFooterLink('Twinkle yardımı', 'VT:TW');
        //dialog.addFooterLink('Give feedback', 'WT:TW');

        var form = new Morebits.quickForm(callbackfunc, Twinkle.getPref('speedySelectionStyle') === 'radioClick' ? 'change' : null);
        if (Morebits.userIsSysop) {
            form.append({
                type: 'checkbox',
                list: [{
                    label: 'Sayfayı silmek yerine etiketle',
                    value: 'tag_only',
                    name: 'tag_only',
                    tooltip: 'Sayfayı silmek yerine etiketlemek istiyorsanız',
                    checked: !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
                    event: function(event) {
                        var cForm = event.target.form;
                        var cChecked = event.target.checked;
                        // enable talk page checkbox
                        if (cForm.talkpage) {
                            cForm.talkpage.checked = !cChecked && Twinkle.getPref('deleteTalkPageOnDelete');
                        }
                        // enable redirects checkbox
                        cForm.redirects.checked = !cChecked;
                        // enable delete multiple
                        cForm.delmultiple.checked = false;
                        // enable notify checkbox
                        cForm.notify.checked = cChecked;
                        // enable deletion notification checkbox
                        cForm.warnusertalk.checked = !cChecked && !Twinkle.speedy.hasCSD;
                        // enable multiple
                        cForm.multiple.checked = false;
                        // enable requesting creation protection
                        cForm.salting.checked = false;
                        Twinkle.speedy.callback.modeChanged(cForm);
                        event.stopPropagation();
                    }
                }]
            });

            var deleteOptions = form.append({
                type: 'div',
                name: 'delete_options'
            });
            deleteOptions.append({
                type: 'header',
                label: 'Silmeyle alakalı seçenekler'
            });
            if (mw.config.get('wgNamespaceNumber') % 2 === 0 && (mw.config.get('wgNamespaceNumber') !== 2 || (/\//).test(mw.config.get('wgTitle')))) { // hide option for user pages, to avoid accidentally deleting user talk page
                deleteOptions.append({
                    type: 'checkbox',
                    list: [{
                        label: 'Tartışma sayfasını da sil',
                        value: 'talkpage',
                        name: 'talkpage',
                        tooltip: "Bu seçenek sayfanın tartışma sayfasını da siler. D1 (Commons'a taşındı) kriterini seçerseniz, bu seçenek yok sayılır ve tartışma sayfası *silinmez*.",
                        checked: Twinkle.getPref('deleteTalkPageOnDelete'),
                        event: function(event) {
                            event.stopPropagation();
                        }
                    }]
                });
            }
            deleteOptions.append({
                type: 'checkbox',
                list: [{
                        label: 'Tüm yönlendirmeleri de sil',
                        value: 'redirects',
                        name: 'redirects',
                        tooltip: 'Bu seçenek gelen tüm yönlendirmeleri de siler. Taşıma ve birleştirme için yapılan silme işlemleri için bu seçeneği kullanmaktan kaçının.',
                        checked: Twinkle.getPref('deleteRedirectsOnDelete'),
                        event: function(event) {
                            event.stopPropagation();
                        }
                    },
                    {
                        label: 'Birden çok kriter uyarınca sil',
                        value: 'delmultiple',
                        name: 'delmultiple',
                        tooltip: 'Seçildiğinde, sayfa için geçerli olan birkaç kriter seçebilirsiniz.',
                        event: function(event) {
                            Twinkle.speedy.callback.modeChanged(event.target.form);
                            event.stopPropagation();
                        }
                    },
                    {
                        label: 'Sayfayı oluşturan kullanıcıyı silme işlemi hakkında bilgilendir',
                        value: 'warnusertalk',
                        name: 'warnusertalk',
                        tooltip: 'Twinkle tercihlerinizde seçilen kriter için bildirim göndermeyi seçtiyseniz VE ' +
                            'bu kutu işaretliyse, sayfayı oluşturan kullanıcının mesaj sayfasına bir bildirim şablonu gönderilecektir.',
                        checked: !Twinkle.speedy.hasCSD,
                        event: function(event) {
                            event.stopPropagation();
                        }
                    }
                ]
            });
        }

        var tagOptions = form.append({
            type: 'div',
            name: 'tag_options'
        });

        if (Morebits.userIsSysop) {
            tagOptions.append({
                type: 'header',
                label: 'Etiket ayarları'
            });
        }

        tagOptions.append({
            type: 'checkbox',
            list: [{
                    label: 'Mümkünse sayfayı oluşturan kullanıcıyı bilgilendir',
                    value: 'notify',
                    name: 'notify',
                    tooltip: 'Twinkle tercihlerinizde seçilen kriter için bildirim göndermeyi seçtiyseniz VE ' +
                        'bu kutu işaretliyse, sayfayı oluşturan kullanıcının mesaj sayfasına bir bildirim şablonu gönderilecektir.',
                    checked: !Morebits.userIsSysop || !(Twinkle.speedy.hasCSD || Twinkle.getPref('deleteSysopDefaultToDelete')),
                    event: function(event) {
                        event.stopPropagation();
                    }
                },
                {
                    label: 'Yeniden oluşturmaya karşı koru',
                    value: 'salting',
                    name: 'salting',
                    tooltip: 'Seçildiğinde, hızlı silme etiketine hizmetliden oluşturma koruması uygulamasını isteyen bir {{salt}} etiketi eklenir. Yalnızca bu sayfa ısrarla oluşturuluyorsa seçin.',
                    event: function(event) {
                        event.stopPropagation();
                    }
                },
                {
                    label: 'Birden çok kritere sahip etiket',
                    value: 'multiple',
                    name: 'multiple',
                    tooltip: 'Seçildiğinde, sayfa için geçerli olan birkaç kriter seçebilirsiniz.',
                    event: function(event) {
                        Twinkle.speedy.callback.modeChanged(event.target.form);
                        event.stopPropagation();
                    }
                }
            ]
        });

        form.append({
            type: 'div',
            id: 'prior-deletion-count',
            style: 'font-style: italic'
        });

        form.append({
            type: 'div',
            name: 'work_area',
            label: 'Hızlı silme modülü başlatılamadı. Lütfen tekrar deneyin veya sorunu Twinkle geliştiricilerine bildirin.'
        });

        if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
            form.append({ type: 'submit', className: 'tw-speedy-submit' }); // Renamed in modeChanged
        }

        var result = form.render();
        dialog.setContent(result);
        dialog.display();

        Twinkle.speedy.callback.modeChanged(result);

        // Check for prior deletions.  Just once, upon init
        Twinkle.speedy.callback.priorDeletionCount();
    };

    Twinkle.speedy.callback.modeChanged = function twinklespeedyCallbackModeChanged(form) {
        var namespace = mw.config.get('wgNamespaceNumber');

        // first figure out what mode we're in
        var mode = {
            isSysop: !!form.tag_only && !form.tag_only.checked,
            isMultiple: form.tag_only && !form.tag_only.checked ? form.delmultiple.checked : form.multiple.checked,
            isRadioClick: Twinkle.getPref('speedySelectionStyle') === 'radioClick'
        };

        if (mode.isSysop) {
            $('[name=delete_options]').show();
            $('[name=tag_options]').hide();
            $('button.tw-speedy-submit').text('Sayfayı sil');
        } else {
            $('[name=delete_options]').hide();
            $('[name=tag_options]').show();
            $('button.tw-speedy-submit').text('Sayfayı etiketle');
        }

        var work_area = new Morebits.quickForm.element({
            type: 'div',
            name: 'work_area'
        });

        if (mode.isMultiple && mode.isRadioClick) {
            var evaluateType = mode.isSysop ? 'evaluateSysop' : 'evaluateUser';

            work_area.append({
                type: 'div',
                label: 'Kriter seçmeyi bitirdiğinizde, tıklayın:'
            });
            work_area.append({
                type: 'button',
                name: 'submit-multiple',
                label: mode.isSysop ? 'Sayfayı sil' : 'Sayfayı etiketle',
                event: function(event) {
                    Twinkle.speedy.callback[evaluateType](event);
                    event.stopPropagation();
                }
            });
        }

        var appendList = function(headerLabel, csdList) {
            work_area.append({ type: 'header', label: headerLabel });
            work_area.append({ type: mode.isMultiple ? 'checkbox' : 'radio', name: 'csd', list: Twinkle.speedy.generateCsdList(csdList, mode) });
        };

        if (mode.isSysop && !mode.isMultiple) {
            appendList('Özel gerekçe', Twinkle.speedy.customRationale);
        }

        if (namespace % 2 === 1 && namespace !== 3) {
            // show db-talk on talk pages, but not user talk pages
            appendList('Tartışma sayfaları', Twinkle.speedy.talkList);
        }

        if (!Morebits.isPageRedirect()) {
            switch (namespace) {
                case 0: // article
                case 1: // talk
                    appendList('Maddeler', Twinkle.speedy.articleList);
                    break;

                case 2: // user
                case 3: // user talk
                    appendList('Kullanıcı sayfaları', Twinkle.speedy.userList);
                    break;

                case 6: // file
                case 7: // file talk
                    appendList('Dosyalar', Twinkle.speedy.fileList);
                    if (!mode.isSysop) {
                        work_area.append({ type: 'div', label: 'Tagging for CSD F4 (no license), F5 (orphaned fair use), F6 (no fair use rationale), and F11 (no permission) can be done using Twinkle\'s "DI" tab.' });
                    }
                    break;

                case 14: // category
                case 15: // category talk
                    appendList('Kategoriler', Twinkle.speedy.categoryList);
                    break;

                case 100: // portal
                case 101: // portal talk
                    appendList('Portaller', Twinkle.speedy.portalList);
                    break;

                default:
                    break;
            }
        } else {
            if (namespace === 2 || namespace === 3) {
                appendList('Kullanıcı sayfaları', Twinkle.speedy.userList);
            }
            appendList('Yönlendirmeler', Twinkle.speedy.redirectList);
        }

        var generalCriteria = Twinkle.speedy.generalList;

        // custom rationale lives under general criteria when tagging
        if (!mode.isSysop) {
            generalCriteria = Twinkle.speedy.customRationale.concat(generalCriteria);
        }
        appendList('Genel', generalCriteria);

        var old_area = Morebits.quickForm.getElements(form, 'work_area')[0];
        form.replaceChild(work_area.render(), old_area);

        // if sysop, check if CSD is already on the page and fill in custom rationale
        if (mode.isSysop && Twinkle.speedy.hasCSD) {
            var customOption = $('input[name=csd][value=reason]')[0];
            if (customOption) {
                if (Twinkle.getPref('speedySelectionStyle') !== 'radioClick') {
                    // force listeners to re-init
                    customOption.click();
                    customOption.parentNode.appendChild(customOption.subgroup);
                }
                customOption.subgroup.querySelector('input').value = decodeURIComponent($('#delete-reason').text()).replace(/\+/g, ' ');
            }
        }
    };

    Twinkle.speedy.callback.priorDeletionCount = function() {
        var query = {
            action: 'query',
            format: 'json',
            list: 'logevents',
            letype: 'delete',
            leaction: 'delete/delete', // Just pure page deletion, no redirect overwrites or revdel
            letitle: mw.config.get('wgPageName'),
            leprop: '', // We're just counting we don't actually care about the entries
            lelimit: 5 // A little bit goes a long way
        };

        new Morebits.wiki.api('Checking for past deletions', query, function(apiobj) {
            var response = apiobj.getResponse();
            var delCount = response.query.logevents.length;
            if (delCount) {
                var message = 'Bu sayfa daha önce ' + delCount + ' veya daha fazla kez silindi.';
                if (delCount > 1) {
                    /*message += '';
                    if (response.continue) {
                    	message = 'Bu sayfa daha önce ' + message;
                    } */ //Türkçeye uyarlanırken bu kısım atıldı.

                    // 3+ seems problematic
                    if (delCount >= 3) {
                        $('#prior-deletion-count').css('color', 'red');
                    }
                }

                // Provide a link to page logs (CSD templates have one for sysops)
                var link = Morebits.htmlNode('a', '(günlükler)');
                link.setAttribute('href', mw.util.getUrl('Özel:Günlük', { page: mw.config.get('wgPageName') }));
                link.setAttribute('target', '_blank');

                $('#prior-deletion-count').text(message + ' '); // Space before log link
                $('#prior-deletion-count').append(link);
            }
        }).post();
    };


    Twinkle.speedy.generateCsdList = function twinklespeedyGenerateCsdList(list, mode) {

        var pageNamespace = mw.config.get('wgNamespaceNumber');

        var openSubgroupHandler = function(e) {
            $(e.target.form).find('input').prop('disabled', true);
            $(e.target.form).children().css('color', 'gray');
            $(e.target).parent().css('color', 'black').find('input').prop('disabled', false);
            $(e.target).parent().find('input:text')[0].focus();
            e.stopPropagation();
        };
        var submitSubgroupHandler = function(e) {
            var evaluateType = mode.isSysop ? 'evaluateSysop' : 'evaluateUser';
            Twinkle.speedy.callback[evaluateType](e);
            e.stopPropagation();
        };

        return $.map(list, function(critElement) {
            var criterion = $.extend({}, critElement);

            if (mode.isMultiple) {
                if (criterion.hideWhenMultiple) {
                    return null;
                }
                if (criterion.hideSubgroupWhenMultiple) {
                    criterion.subgroup = null;
                }
            } else {
                if (criterion.hideWhenSingle) {
                    return null;
                }
                if (criterion.hideSubgroupWhenSingle) {
                    criterion.subgroup = null;
                }
            }

            if (mode.isSysop) {
                if (criterion.hideWhenSysop) {
                    return null;
                }
                if (criterion.hideSubgroupWhenSysop) {
                    criterion.subgroup = null;
                }
            } else {
                if (criterion.hideWhenUser) {
                    return null;
                }
                if (criterion.hideSubgroupWhenUser) {
                    criterion.subgroup = null;
                }
            }

            if (Morebits.isPageRedirect() && criterion.hideWhenRedirect) {
                return null;
            }

            if (criterion.showInNamespaces && criterion.showInNamespaces.indexOf(pageNamespace) < 0) {
                return null;
            }
            if (criterion.hideInNamespaces && criterion.hideInNamespaces.indexOf(pageNamespace) > -1) {
                return null;
            }

            if (criterion.subgroup && !mode.isMultiple && mode.isRadioClick) {
                if (Array.isArray(criterion.subgroup)) {
                    criterion.subgroup = criterion.subgroup.concat({
                        type: 'button',
                        name: 'submit',
                        label: mode.isSysop ? 'Sayfayı sil' : 'Sayfayı etiketle',
                        event: submitSubgroupHandler
                    });
                } else {
                    criterion.subgroup = [
                        criterion.subgroup,
                        {
                            type: 'button',
                            name: 'submit', // ends up being called "csd.submit" so this is OK
                            label: mode.isSysop ? 'Sayfayı sil' : 'Sayfayı etiketle',
                            event: submitSubgroupHandler
                        }
                    ];
                }
                // FIXME: does this do anything?
                criterion.event = openSubgroupHandler;
            }

            return criterion;
        });
    };

    Twinkle.speedy.customRationale = [{
        label: 'Özel gerekçe' + (Morebits.userIsSysop ? ' (özel silme gerekçesi)' : ''),
        value: 'reason',
        tooltip: 'Diğer silme kriterlerinden en az biri sayfa için geçerli olmalı ve bunu gerekçenizde belirtmelisiniz.',
        subgroup: {
            name: 'reason_1',
            type: 'input',
            label: 'Gerekçe:',
            size: 60
        },
        hideWhenMultiple: true
    }];

    Twinkle.speedy.talkList = [{
        label: 'G8: Talk pages with no corresponding subject page',
        value: 'talk',
        tooltip: 'This excludes any page that is useful to the project - in particular, user talk pages, talk page archives, and talk pages for files that exist on Wikimedia Commons.'
    }];

    Twinkle.speedy.fileList = [ //Dosya silme nedenleri
        {
            label: 'D1: Çift kopya dosyalardan birisi silinebilir.',
            value: 'Çift kopya dosya',
            tooltip: 'Dosya, Vikipedi\'de veya Wikimedia Commons\'ta hâli hazırda bulunan bir dosyanın aynısı/kopyası ise, dosya formatı aynı, çözünürlüğü ise aynı veya daha düşükse, bu kopya silinir. Commons üzerinden yüklenen dosyaların Vikipedi üzerinde açılan sayfaları, dosyalar seçkin statüsüne sahip değilse silinebilir.',
            subgroup: {
                name: 'redundantimage_filename',
                type: 'input',
                label: 'Bu dosya ile aynı: ',
                tooltip: '"Dosya:" eki yazılmayabilir.'
            }
        },
        {
            label: 'D2: Bozuk, boş veya taşınmış dosyalar silinebilir.',
            value: 'Bozuk/boş dosya',
            tooltip: 'Bozuk, boş veya taşınmış dosyalar silinebilir.'
        },
        {
            label: 'D3: Uygunsuz lisanslı dosyalar silinebilir.',
            value: 'Uygunsuz lisanslı dosya',
            tooltip: 'Adil kullanım politikası dâhilinde kullanılabilecekler hariç "sadece ticari olmayan kullanıma açık", "izne tabi" veya "resmin değiştirilmesi sınırlandırılmış" dosyalar Vikipedi\'nin telif politikaları açısından uygunsuzdur.'
        },
        {
            label: 'D4: Lisans ve kaynak bilgisi eksik olan dosyalar silinebilir.',
            value: 'Lisans ve kaynak bilgisi eksik olan dosya',
            tooltip: 'Yüklenen her dosyanın lisans ve kaynak bilgisi olmalıdır. Lisansı veya kaynağı belirtilmemiş dosyalar, belirsizliği işaretlendikten sonra, 7 gün içinde netliğe kavuşmadığı takdirde silinir. Lisansı belirsiz olan dosyalar için {{yk:Lisanssız dosya}}, kaynağı olmayan dosyalar için {{kopyala:Kaynaksız dosya}} şablonlarını kullanınız.'
        },
        {
            label: 'D5: Kullanılmayan adil kullanım dosyaları silinebilir.',
            value: 'Kullanılmayan adil kullanım dosya',
            tooltip: 'Serbest bir lisans veya kamu malı kapsamında olmayan telif hakkı saklı (adil kullanım vb.) dosyalar, herhangi bir maddede kullanılmadığı takdirde işaretlendikten 7 gün sonra silinebilir. Bu dosyalar için {{yk:Kullanılmayan dosya}} şablonunu kullanınız.'
        },
        {
            label: 'D6: Adil kullanımı hatalı belirtilmiş dosyalar silinebilir.',
            value: 'Adil kullanımı hatalı belirtilmiş dosya',
            tooltip: 'Yanlış adil kullanım etiketine sahip (herhangi bir maskot resmi için {{Logo}} etiketi gibi) dosyalar ile içerikte kullanımı adil kullanım politikasına uymayan dosyalar, yükleyen kullanıcıya haber verildikten 48 saat sonra silinebilir.'
        },
        {
            label: 'D7: Kullanımı gerekçelendirilmemiş dosyalar silinebilir.',
            value: 'Kullanımı gerekçelendirilmemiş dosya',
            tooltip: '1 Ekim 2008 tarihinden sonra yüklenen özgür olmayan dosyalar adil kullanıma giriyor olmasına rağmen kullanım gerekçelendirilmesi yapılmamışsa, işaretlendikten bir hafta sonra silinirler. Bu dosyalar için {{yk:Gerekçesiz dosya}} şablonunu kullanabilirsiniz.'
        },
        {
            label: 'D8: Herhangi bir sayfada kullanılmayan ansiklopedik açıdan değersiz dosyalar silinebilir.',
            value: 'Ansiklopedik açıdan değersiz dosya',
            tooltip: 'Özgür lisanslı olmalarına rağmen ansiklopedik değer taşımayan ve (kullanıcı sayfaları da dâhil olmak üzere) herhangi bir sayfada kullanılmayan her türlü dosya silinebilir. Eğer dosyanın ansiklopedik değeri tartışmalıysa hızlı sil ile silinemez.'
        },
        {
            label: 'D9: Kullanışsız dosyalar silinebilir.',
            value: 'Kullanışsız dosya',
            tooltip: 'Resim, video ve ses dosyaları dışında kalan dosyalar (Örn: .doc, .pdf veya .xls dosyaları) herhangi bir maddede kullanılmıyor ve ansiklopedik kullanımı olmadığı düşünülüyorsa silinebilirler.'
        },
        {
            label: 'D10: SVG ya da diğer vektörel dosyalar silinebilir.',
            value: 'Vektörel dosya',
            tooltip: 'SVG gibi vektörel dosyalar VP:AKP#SVG ve diğer vektörel formatlar gereği eğer serbest kullanıma izin vermiyorlarsa silinebilirler.'
        },
        {
            label: 'D11: Şüpheli dosyalar silinebilir.',
            value: 'Şüpheli dosya',
            tooltip: 'Şüpheli olarak işaretlenmiş bir dosya bir telif inceleme elemanı tarafından incelendikten sonra, sonuçsuz etiketiyle etiketlenirse, görüntünün durumunun netleştirilmesi için 7 gün beklenilir. Eğer 7 gün sonunda herhangi bir ek bilgi veya kanıt gelmezse, görüntü silinebilir.'
        },
        {
            label: 'D12: Tanımlanamayan dosyalar silinebilir.',
            value: 'Tanımlanamayan dosya',
            tooltip: 'Bir görüntü herhangi bir tanım bilgisi içermiyorsa ve görüntünün kendisinden de konusu ve tanımı net olarak belli olmuyorsa, {{yk:Tanımsız dosya}} etiketi ile işaretlenir. Eğer bu etiket eklendikten sonra 7 gün içerisinde gerekli tanım bilgisi eklenmezse, görüntü silinebilir.'
        },
        {
            label: 'D13: İçeriği kaynaklandırılmamış dosyalar silinebilir.',
            value: 'İçeriği kaynaklandırılamayan dosya',
            tooltip: 'Bir görüntü içeriği kaynaksız bir grafikse (basit grafikler hariç) {{yk:İçeriği kaynaksız dosya}} etiketi ile etiketlenir. Etiket eklendikten sonra 7 gün içerisinde gerekli kaynak bilgisi verilmezse, görüntü silinebilir.'
        }
    ];

    Twinkle.speedy.articleList = [ //Madde silme nedenleri
        {
            label: 'M1: Çok az bilgi taşıyan ya da hiç bilgi taşımayan kısa içerikli sayfalar silinebilir.',
            value: 'Taslak kriterlerini sağlamayan madde',
            tooltip: 'Örneğin: “Fabrikası olan garip bir adamdı.” Maddenin taslak madde kriterlerini sağlayan, bütünsel anlatımlı bir içeriğe sahip olması durumunda, madde yetersiz içerik gerekçesiyle silinemez.'
        },
        {
            label: 'M2: Yabancı dilde yazılmış maddeler silinebilir.',
            value: 'Farklı bir dildeki madde',
            tooltip: 'Yabancı dilde yazılmış maddeler silinebilir.'
        },
        {
            label: 'M3: İçeriğe sahip olmayan maddeler silinebilir.',
            value: 'İçeriksiz madde',
            tooltip: 'İçerik olarak sadece dış bağlantı, Göz at, Ayrıca bakınız, şablon veya başlığın tekrarını içeren maddeler.'
        },
        {
            label: 'M4: Başka bir Wikimedia projesine aktarılmış maddeler silinebilir.',
            value: 'Başka bir Wikimedia projesine aktarılan madde',
            tooltip: 'Başka bir Wikimedia projesine aktarıma dair şablonlardan birini içeren veya silmeye aday olduktan sonra, oylama ile başka bir projeye aktarılmasına karar verilen ve aktarılan maddeler, işlem başarıyla yapıldıktan ve maddenin yazarı aktarımdan haberdar edildikten sonra silinebilir.'
        },
        {
            label: 'M6: Kayda değer olmayan kurgusal veya gerçek kişi, grup, kurum, ürün, eser veya internet içerikleri ile ilgili sayfalar silinebilir.',
            value: 'Kayda değer olmayan konulu madde',
            tooltip: 'Genel olarak kayda değerlik ana yönergesi ve alt-yönergelerinin sunduğu kıstaslara bariz bir şekilde uymayan maddeler için bu kural kullanılabilir. Bununla birlikte dikkatli bir şekilde kullanılmalı; kayda değerlik kıstasları ile uyumsuzluğun bariz olmadığı, tartışmalı olduğu durumlarda hızlı silme uygulanmamalıdır. Bunun yerine kayda değerlik tartışması açılabilir veya kayda değerlik sorunu nedeniyle {{kopyala:Bekletmeli sil}} şablonu konulabilir.'
        },
        {
            label: 'M8: Düzen ve ansiklopediklik açısından uygunsuz maddeler, aşağıda belirtilen kriterlere uyuyorsa silinebilir.',
            value: 'Düzen ve ansiklopediklik açısından uygunsuz madde',
            tooltip: 'Eğer bir madde,Çalışma var şablonu barındırmıyorsa, ve,İçeriğinin büyük bir kısmında viki işaret dili kodu bulundurmuyorsa, ve,Taraflı veya yanlış bir içerik barındırıyorsa veya içeriğinin en az % 30\'luk kısmı Türkçe dışındaki bir dilde ise,hızlı sil ile silinebilir. Bununla birlikte, eğer madde kayıtlı bir kullanıcı tarafından yaratılmışsa, silme işleminden önce veya sonra, kullanıcı ilgili Hızlı Silme kriterinden haberdar edilmelidir. IP numarasıyla katılan anonim bir kullanıcı tarafından yaratılmışsa, maddenin ilgili yazarına haber verilmesine gerek yoktur.'
        },
        {
            label: 'M9: Niteliksiz makine çevirileriyle oluşturulmuş maddeler silinebilir.',
            value: 'Niteliksiz makine çevirisiyle oluşturulmuş madde',
            tooltip: 'Oluşturulan maddede önemli anlam bozukları yaratan, çeşitli makine çevirisi araçlarıyla yapılıp önemli bir düzeltme geçirmeden eklendiği belirlenen maddeler silinebilir.'
        }
    ];

    Twinkle.speedy.categoryList = [ //Kategori silme nedenleri
        {
            label: 'K1: Boş kategoriler silinebilir.',
            value: 'Boş kategori',
            tooltip: 'En azından 4 gün süresince sayfa veya alt kategori içermeyen, tek içeriği üst kategoriye bağlantı olan kategoriler hızlı silme ile silinebilir. Eğer söz konusu kategori silmeye aday ise, hızlı silme uygulanamaz.<BR>Kategorinin bir kategori tartışması sonucunda silinmesine karar verilmesi durumunda o kategori hızlı silinebilir. (Örneğin; Kategori:Bruce Willis)'
        },
        {
            label: 'K2: İsmi düzeltilen kategoriler silinebilir.',
            value: 'Yeniden isimlendirme kategorisi',
            tooltip: 'Yeniden adlandırılıp, içeriği boşaltılmış hızlı silinebilecek kategoriler için örnekler:<BR>Yazım hatası düzeltmeleri: Kitpalar -> Kitaplar.<BR>Büyük harf düzeltmeleri: orta Dünya karakterleri -> Orta Dünya karakterleri<BR>Tekil kelimelerin çoğul yapılması: Roman -> Romanlar<BR>Ülke ismi kısaltmalarının açılması: ABD -> Amerika Birleşik Devletleri<BR>İsmin kategori tartışması sonucu düzeltilmesi: Kategori:Nazi karşıtı hareketleri'
        },
        {
            label: 'K3: Şablon kategorileri silinebilir.',
            value: 'Şablon kategorisi',
            tooltip: 'Şablon silindikten veya kategorileri değiştirildikten sonra kalan kategoriler.'
        }
    ];

    Twinkle.speedy.userList = [ //Kullanıcı sayfaları silme nedenleri
        {
            label: 'KS2: Var olmayan kullanıcıların kullanıcı sayfaları silinebilir.',
            value: 'Var olmayan kullanıcı',
            tooltip: 'Oturum açmamış olan anonim kullanıcıların tartışma sayfaları, yazılmış mesajlar geçerli olmadığı zaman silinir. Böylece aynı IP numarasıyla değişiklik yapan yeni anonim kullanıcıların aklı karışmaz.'
        },
        {
            label: 'KS3: Adil kullanım galerileri silinebilir.',
            value: 'Adil kullanım galerisi',
            tooltip: 'Kullanıcı alanlarında bulunan ve çoğunlukla adil kullanım kaynaklı resimler barındıran galeriler silinebilir.'
        },
        {
            label: 'KS4: Vikipedi\'yi yalnızca kişisel sayfa olarak kullananların kullanıcı sayfaları silinebilir.',
            value: 'Vikipedi\'nin kişisel sayfa olarak kullanımı',
            tooltip: 'Vikipedi\'nin hedefleriyle yakından ilgili olmayan yazı, bilgi, tartışma ve/veya etkinliklerinden oluşan kullanıcı sayfaları silinebilir. Bu ölçütün VP:KS kapsamında tanımlanmış istisnaları bulunmaktadır.'
        }
    ];

    Twinkle.speedy.templateList = [ //Şablon silme nedenleri
        {
            label: 'Ş1: Bölücü ve kışkırtıcı şablonlar silinebilir.',
            value: 'Kışkırtıcı/bölücü şablon',
            tooltip: 'Bölücü ve kışkırtıcı şablonlar silinebilir.'
        },
        {
            label: 'Ş2: Kullanılmayan şablonlar silinebilir.',
            value: 'Kullanılmayan şablon',
            tooltip: '"kopyala:" komutuyla kullanılması gereken şablonlar da kullanılmayan şablonlar arasında listelenebileceği için, bu tür şablonlar sadece ihtiyaç duyulmaması durumunda silinmelidir.'
        },
    ];

    Twinkle.speedy.portalList = [ //Portal silme nedenleri
        {
            label: 'P1: Madde kriterlerine uymayan portal sayfaları silinebilir.',
            value: 'Madde olarak silinebilecek portal',
            tooltip: 'Madde kriterlerine uymayan portal sayfaları silinebilir.'
        },
        {
            label: 'P2: Sadece Taslak hâlinde bulunan bir maddeye dayanan veya portalın başlığı altında gösterilmeye uygun, konuyu detaylandıran, taslaklar hariç en az üç maddeye sahip olmayan portaller silinebilir.',
            value: 'Kriterleri sağlamayan portal',
            tooltip: 'Sadece Taslak hâlinde bulunan bir maddeye dayanan veya portalın başlığı altında gösterilmeye uygun, konuyu detaylandıran, taslaklar hariç en az üç maddeye sahip olmayan portaller silinebilir.'
        }
    ];

    Twinkle.speedy.generalList = [ //Genel silme nedenleri
        {
            label: 'G1: Anlamsız karakter dizilerinden ibaret olan sayfalar silinebilir.',
            value: 'Anlamsız',
            tooltip: 'Örneğin: “nafnşew359cşs.ndc30” veya “traa laa laaa”. Buna: Vandalizm, kısa veya kaynaksız içerik, kötü yazım, partizan nutuklar, imkansız teoriler ve kötü bir tercümeye sahip içerikler dâhil değildir.'
        },
        {
            label: 'G2: Deneme yapılmış sayfalar silinebilir.',
            value: 'Deneme',
            tooltip: 'Örneğin: “Gerçekten bir sayfada değişiklik yapabilir miyim?!” \'\'\'Kalın yazı\'\'\'[[Dosya:]]'
        },
        {
            label: 'G3: Vandalizm yapılmış sayfalar silinebilir.',
            value: 'Vandalizm',
            tooltip: 'Ad değiştirme vandalizmi sonucu oluşan yönlendirme sayfaları da buna dâhildir.'
        },
        {
            label: 'G4: Daha önce silinmiş içeriğin büyük ölçüde aynısına sahip sayfalar silinebilir.',
            value: 'Önceden silinmiş metin',
            tooltip: 'SAS tartışması sonucunda veya hızlı silme ile silinen herhangi bir sayfayla büyük ölçüde benzerlik taşıyan herhangi bir isimdeki sayfalar, SAS kararı emsal kabul edilerek silinebilir. Tekrar silinmeden önce, hizmetlinin, içeriğin büyük ölçüde aynı olduğundan ve aynı konuda yeni bir madde olmadığından emin olması gerekmektedir.',
            subgroup: {
                name: 'repost_1',
                type: 'input',
                label: 'SAS tartışmasının bulunduğu sayfa: ',
                tooltip: '"Vikipedi:" ile başlamak zorunda.',
                size: 60
            }
        },
        {
            label: 'G6: Kullanıcının isteğiyle silinebilir.',
            value: 'Kullanıcı talebi',
            tooltip: 'Eğer bir sayfayı oluşturan kişi, yazdığı sayfa başka hiçbir kişi tarafından değişikliğe uğramamışsa ve/veya kullanıcı tarafından yanlışlıkla açılmışsa, sayfanın silinmesini isteyebilir. Bu istek sebebiyle söz konusu sayfa silinir.'
        },
        {
            label: 'G7: Silinen sayfaların tartışma sayfaları da silinebilir.',
            value: 'Silinmiş sayfanın tartışması',
            tooltip: 'Eğer sayfanın niçin silindiğine dair bir tartışma içermiyorsa hızlı silme ile silinebilir.',
            hideWhenMultiple: true
        },
        {
            label: 'G8: Temizlik amacıyla silinebilir.',
            value: 'Temizlik işlemi',
            tooltip: 'Tartışma yaratmayacak bakım ve temizlik işlemleri, sayfa geçmişlerini birleştirme, bir isim değişikliği işlemini geri alma ve sadece tek bir maddeye bağlantı veren bir anlam ayrımı sayfasını silme amacıyla sayfalar silinebilir.'
        },
        {
            label: 'G9: Telif hakkı ihlali oluşturan sayfalar silinebilir.',
            value: 'Telif ihlali',
            tooltip: 'Telif hakları saklı bir kaynaktan alındığı kesin olarak belirlenen ya da bu konuda ciddi şüpheler bulunan her türlü içerik için hızlı silme işlemi uygulanabilir. Eğer telif hakkı ihlali taşıyan içerik küçük bir kısımsa veya sayfanın belirli bir kısmına eklenmişse, sayfanın hızlı sil ile silinmesinden ziyade ilgili kısımların çıkarılması tavsiye edilebilir.',
            subgroup: [{
                name: 'copyvio_url',
                type: 'input',
                label: 'Bağlantı (mümkünse): ',
                tooltip: 'Eğer içerik internet üzerinden bir yerden kopyalandı ise içeriğin linkini burada belirtiriz. Eğer link karalistede ise boş bırakabilirsiniz.',
                size: 60
            }]
        },
        {
            label: 'G10: Saldırı içeren sayfalar ve dosyalar silinebilir.',
            value: 'Saldırı',
            tooltip: 'Saldırı, hakaret dışında bir amaca hizmet etmeyen içeriğe sahip sayfa ve dosyalar (örneğin "... bir salaktır" benzeri bir içerik barındıran bir madde) silinebilir. Herhangi bir şahsa, topluluğa, kuruma ya da fikre yoğun biçimde saldırı niteliği taşıyan ve geri alınacak tarafsız bir sürümü bulunmayan sayfalar buna dâhildir. Parodi amaçlı resim veya medya bu kapsama girmez.'
        },
        {
            label: 'G11: Yoğun reklam içeren sayfalar silinebilir.',
            value: 'Reklam',
            tooltip: 'Yalnızca bir şirketin, ürünün, grubun veya hizmetin reklamını yapan ve ansiklopedik olabilmesi için baştan yazılması gereken sayfalar silinebilir. Unutmayınız ki herhangi bir madde, konusu sırf bir şirket, ürün, grup veya hizmeti içeriyor diye bu kriterin uygulanabileceği bir durum yaratmaz: Yoğun şekilde reklam içeren bir maddenin uygunsuz içerik de barındırması gerekmektedir. Eğer herhangi bir madde daha önce silinme prosedürüne dâhil edilmiş, fakat sonuç olarak silinmemiş ise, bu kriter ile hızlı silinmesi mümkün değildir.'
        },
        {
            label: 'G12: İçeriği geliştirmeye yönelik olmayan tartışma sayfaları silinebilir.',
            value: 'İçeriği geliştirmeye yönelik olmayan tartışma',
            tooltip: 'Tartışma sayfası tamamen bu tür yorumlardan oluşmadıkça silme işlemi yapılamaz. Geliştirme amaçlı yorumlar mevcutsa sayfa silinmez, sadece ilgisiz yorumlar çıkartılır.'
        }
    ];

    Twinkle.speedy.redirectList = [ //Yönlendirme sayfaları için
        {
            label: 'Y1: Var olmayan sayfalara olan yönlendirmeler silinebilir.',
            value: 'Boşa yönlendirme',
            tooltip: 'Eğer mümkünse söz konusu yönlendirme, uygun ve var olan bir başka maddeye yönlendirilmeli, yoksa hızlı sil ile silinebilir.'
        },
        {
            label: 'Y2: Büyük bir yazım hatası içeren veya uygunluk açısından hatalı oluşturulmuş yönlendirmeler silinebilir.',
            value: 'Kötü yönlendirme',
            tooltip: 'Eğer söz konusu yazım hatası sıklıkla yapılan bir hataysa yönlendirmenin kalmasında sakınca yoktur.'
        },
        {
            label: 'Y3: Farklı isim alanları arasındaki yönlendirmeler silinebilir.',
            value: 'Farklı isimalanları arasında yönlendirme',
            tooltip: 'Örn: Vikipedi → Şablon, Şablon → Madde, Madde → Kullanıcı. VP ve KAT gibi kısayol kısaltmaları bu kapsama dahil değildir.'
        }
    ];

    Twinkle.speedy.normalizeHash = { //Değişilik özetine yazılacak silme nedeni kodları --Mavrikant 23 Şubat
        'Özel': 'db',
        'Anlamsız': 'G1',
        'Deneme': 'G2',
        'Vandalizm': 'G3',
        'Önceden silinmiş metin': 'G4',
        'Kullanıcı talebi': 'G6',
        'Silinmiş sayfanın tartışması': 'G7',
        'Temizlik işlemi': 'G8',
        'Telif ihlali': 'G9',
        'Saldırı': 'G10',
        'Reklam': 'G11',
        'İçeriği geliştirmeye yönelik olmayan tartışma': 'G12',
        'Taslak kriterlerini sağlamayan madde': 'M1',
        'Farklı bir dildeki madde': 'M2',
        'İçeriksiz madde': 'M3',
        'Başka bir Wikimedia projesine aktarılan madde': 'M4',
        'Kayda değer olmayan konulu madde': 'M6',
        'Düzen ve ansiklopediklik açısından uygunsuz madde': 'M8',
        'Niteliksiz makine çevirisiyle oluşturulmuş madde': 'M9',
        'Boşa yönlendirme': 'Y1',
        'Kötü yönlendirme': 'Y2',
        'Farklı isimalanları arasında yönlendirme': 'Y3',
        'Çift kopya dosya': 'D1',
        'Bozuk/boş dosya': 'D2',
        'Uygunsuz lisanslı dosya': 'D3',
        'Lisans ve kaynak bilgisi eksik olan dosya': 'D4',
        'Kullanılmayan adil kullanım dosya': 'D5',
        'Adil kullanımı hatalı belirtilmiş dosya': 'D6',
        'Kullanımı gerekçelendirilmemiş dosya': 'D7',
        'Ansiklopedik açıdan değersiz dosya': 'D8',
        'Kullanışsız dosya': 'D9',
        'Vektörel dosya': 'D10',
        'Şüpheli dosya': 'D11',
        'Tanımlanamayan dosya': 'D12',
        'İçeriği kaynaklandırılamayan dosya': 'D13',
        'Boş kategori': 'K1',
        'Yeniden isimlendirme kategorisi': 'K2',
        'Şablon kategorisi': 'K3',
        'Var olmayan kullanıcı': 'KS2',
        'Adil kullanım galerisi': 'KS3',
        'Vikipedi\'nin kişisel sayfa olarak kullanımı': 'KS4',
        'Kışkırtıcı/bölücü şablon': 'Ş1',
        'Kullanılmayan şablon': 'Ş2',
        'Madde olarak silinebilecek portal': 'P1',
        'Kriterleri sağlamayan portal': 'P2'
    };

    Twinkle.speedy.callbacks = {
        getTemplateCodeAndParams: function(params) {
            var code, parameters, i;
            if (params.normalizeds.length > 1) {
                code = "{{Sil|";
                params.utparams = {};
                $.each(params.normalizeds, function(index, norm) {
                    code += '+' + norm.toUpperCase();
                    parameters = params.templateParams[index] || [];
                    for (var i in parameters) {
                        if (typeof parameters[i] === 'string' && !parseInt(i, 10)) { // skip numeric parameters - {{db-multiple}} doesn't understand them
                            code += '+' + i + '=' + parameters[i];
                        }
                    }
                    $.extend(params.utparams, Twinkle.speedy.getUserTalkParameters(norm, parameters));
                });
                code += '}}';
            } else {
                parameters = params.templateParams[0] || [];
                code = '{{Sil|' + params.values[0];
                for (i in parameters) {
                    if (typeof parameters[i] === 'string') {
                        code += '|' + i + '=' + parameters[i];
                    }
                }
                if (params.usertalk) {
                    code += '|help=off';
                }
                code += '}}';
                params.utparams = Twinkle.speedy.getUserTalkParameters(params.normalizeds[0], parameters);
            }

            return [code, params.utparams];
        },

        parseWikitext: function(wikitext, callback) {
            var query = {
                action: 'parse',
                prop: 'text',
                pst: 'true',
                text: wikitext,
                contentmodel: 'wikitext',
                title: mw.config.get('wgPageName'),
                disablelimitreport: true,
                format: 'json'
            };

            var statusIndicator = new Morebits.status('Silme özeti oluşturuluyor');
            var api = new Morebits.wiki.api('Silme şablonu ayrıştırılıyor', query, function(apiobj) {
                var reason = decodeURIComponent($(apiobj.getResponse().parse.text).find('#delete-reason').text()).replace(/\+/g, ' ');
                if (!reason) {
                    statusIndicator.warn('Silme şablonundan özet oluşturulamıyor');
                } else {
                    statusIndicator.info('tamamlandı');
                }
                callback(reason);
            }, statusIndicator);
            api.post();
        },

        noteToCreator: function(pageobj) {
            var params = pageobj.getCallbackParameters();
            var initialContrib = pageobj.getCreator();

            // disallow notifying yourself
            if (initialContrib === mw.config.get('wgUserName')) {
                Morebits.status.warn("Bu sayfayı (" + initialContrib + ") siz oluşturdunuz, oluşturan kullanıcıya bildirim gönderme es geçiliyor");
                initialContrib = null;

                // don't notify users when their user talk page is nominated/deleted
            } else if (initialContrib === mw.config.get('wgTitle') && mw.config.get('wgNamespaceNumber') === 3) {
                Morebits.status.warn('İlk katılımcı bilgilendiriliyor: bu kullanıcı kendi kullanıcı konuşma sayfasını oluşturdu; bildirimi atlama');
                initialContrib = null;

                // quick hack to prevent excessive unwanted notifications, per request. Should actually be configurable on recipient page...
            } else if ((initialContrib === 'Cyberbot I' || initialContrib === 'SoxBot') && params.normalizeds[0] === 'f2') {
                Morebits.status.warn('İlk katılımcı bilgilendiriliyor: bot tarafından prosedürel olarak oluşturulan sayfa; bildirimi atlama');
                initialContrib = null;

                // Check for already existing tags
            } else if (Twinkle.speedy.hasCSD && params.warnUser && !confirm('Sayfa silme ile ilgili bir etikete sahiptir ve bu nedenle oluşturucu büyük olasılıkla bildirilmiştir.  Bu silme için de onlara bildirmek istiyor musunuz?')) {
                Morebits.status.info('İlk katılımcı bilgilendiriliyor', 'kullanıcı tarafından iptal edildi; bildirim atlanıyor.');
                initialContrib = null;
            }

            if (initialContrib) {

                var usertalkpage = new Morebits.wiki.page('Kullanıcı mesaj:' + initialContrib, 'İlk katılımcı bilgilendiriliyor (' + initialContrib + ')'),
                    notifytext, i, editsummary;

                // Eğer her silme nedeni için ayrıca mesaj şablonu kullanacaksak
                // special cases: "db" and "db-multiple"
                /*if (params.normalizeds.length > 1) {
                    notifytext = '\n{{yk:db-' + (params.warnUser ? 'deleted' : 'notice') + '-multiple|1=' + Morebits.pageNameNorm;
                    var count = 2;
                    $.each(params.normalizeds, function(index, norm) {
                        notifytext += '|' + count++ + '=' + norm.toUpperCase();
                    });
                } else if (params.templateParams[0]['1']) {
                    notifytext = '\n{{yk:db-reason-' + (params.warnUser ? 'deleted' : 'notice') + '|1=' + Morebits.pageNameNorm;
                } else {
                    notifytext = '\n{{yk:db-csd-' + (params.warnUser ? 'deleted' : 'notice') + '-custom|1=';
                    if (params.values[0] === 'copypaste') {
                        notifytext += params.templateParams[0].sourcepage;
                    } else {
                        notifytext += Morebits.pageNameNorm;
                    }
                    notifytext += '|2=' + params.values[0];
                }

                for (i in params.utparams) {
                    if (typeof params.utparams[i] === 'string') {
                        notifytext += '|' + i + '=' + params.utparams[i];
                    }
                }
                notifytext += (params.welcomeuser ? '' : '|nowelcome=yes') + '}} ~~~~';
                */

                notifytext = "\n{{subst:HS-Bildirim|1=" + Morebits.pageNameNorm + "|2=" + params.values[0] + "}}";
                editsummary = "Bildirim: [[" + Morebits.pageNameNorm + "]] sayfasının hızlı silinmesi.";
                if (params.normalizeds.indexOf('g10') === -1) { // no article name in summary for G10 taggings
                    editsummary = "Bildirim: [[" + Morebits.pageNameNorm + "]] sayfasının hızlı silinmesi.";
                } else {
                    editsummary = "Bildirim: [[" + Morebits.pageNameNorm + "]] sayfasının hızlı silinmesi.";
                }

                usertalkpage.setAppendText(notifytext);
                usertalkpage.setEditSummary(editsummary);
                usertalkpage.setChangeTags(Twinkle.changeTags);
                usertalkpage.setCreateOption('recreate');
                usertalkpage.setWatchlist(Twinkle.getPref('watchSpeedyUser'));
                usertalkpage.setFollowRedirect(true, false);
                usertalkpage.append(function onNotifySuccess() {
                    // add this nomination to the user's userspace log, if the user has enabled it
                    if (params.lognomination) {
                        Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);

                    }
                }, function onNotifyError() {
                    // if user could not be notified, log nomination without mentioning that notification was sent
                    if (params.lognomination) {
                        Twinkle.speedy.callbacks.user.addToLog(params, null);
                        alert(2)
                    }
                });
            } else if (params.lognomination) {
                // log nomination even if the user notification wasn't sent
                Twinkle.speedy.callbacks.user.addToLog(params, null);
                alert(3)
            }
        },

        sysop: {
            /* Bütün sorun burada gelmesi gereken reason değişkeninin boş gelitor olması 
            1030. satırda herhangi bir değer gitmiyor, mesela Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
            olarak değiştirilirse silme işlemi yapıyor ama değişken olunca yapmıyor, çünkü reason değişkeni boş gidiyor */

            main: function(params) {
                var reason = "([[VP:HS|VP:HS#" + params.values[0] + "]])";
                //params.templateParams[0]['1']
                if (params.templateParams[0]['1']) {
                    reason = '"' + params.templateParams[0]['1'] + '" nedeni ile silindi.';
                    Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
                } else {
                    if (params.promptForSummary) {
                        //reason = prompt('Enter the deletion summary to use, or press OK to accept the automatically generated one.', reason);
                        reason = prompt("Kullanılacak silme özetini girin veya otomatik olarak oluşturulmuş olanı kabul etmek için tamama basın.", reason);
                    }
                    Twinkle.speedy.callbacks.sysop.deletePage(reason, params);
                }
            },
            //Bu kısım alternatif şablondan sebep üretmek istersen eğer.
            /*main: function(params) {
                var reason;
                if (!params.normalizeds.length && params.normalizeds[0] === 'db') {
                    reason = prompt("Silme günlüğü için silme nedenini girin:", "");
                    Twinkle.speedy.callbacks.sysop.deletePage('a', params);
                } else {
                    var code = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params)[0];
                    var presetReason = "([[VP:HS|VP:HS#" + params.values[0] + "]])";
                    Twinkle.speedy.callbacks.parseWikitext(code, function(reason) {
                        if (params.promptForSummary) {
                            //reason = prompt('Enter the deletion summary to use, or press OK to accept the automatically generated one.', reason);
                            reason = prompt("Kullanılacak silme özetini girin veya otomatik olarak oluşturulmuş olanı kabul etmek için tamama basın.", presetReason);
                        }
                        Twinkle.speedy.callbacks.sysop.deletePage(presetReason, params);
                        console.log(reason);
                        console.log(params.normalizeds);
                    });
                }
            },*/
            deletePage: function(reason, params) {
                var thispage = new Morebits.wiki.page(mw.config.get('wgPageName'), 'Sayfa siliniyor');

                if (reason === null) {
                    return Morebits.status.error("Sebep soruluyor", "Kullanıcı iptal etti");
                } else if (!reason || !reason.replace(/^\s*/, '').replace(/\s*$/, '')) {
                    return Morebits.status.error("Sebep soruluyor", "bir tane vermedin.  Bilmiyorum... hizmetlilerden ne yapmasını istiyorsun... iptal ediyorum...");
                }

                var deleteMain = function(callback) {
                    thispage.setEditSummary(reason);
                    thispage.setChangeTags(Twinkle.changeTags);
                    thispage.setWatchlist(params.watch);
                    thispage.deletePage(function() {
                        thispage.getStatusElement().info('done');
                        typeof callback === 'function' && callback();
                        Twinkle.speedy.callbacks.sysop.deleteTalk(params);
                    });
                };

                // look up initial contributor. If prompting user for deletion reason, just display a link.
                // Otherwise open the talk page directly
                if (params.warnUser) {
                    thispage.setCallbackParameters(params);
                    thispage.lookupCreation(function(pageobj) {
                        deleteMain(function() {
                            Twinkle.speedy.callbacks.noteToCreator(pageobj);
                        });
                    });
                } else {
                    deleteMain();
                }
            },
            deleteTalk: function(params) {
                // delete talk page
                if (params.deleteTalkPage &&
                    params.normalized !== 'f8' &&
                    !document.getElementById('ca-talk').classList.contains('new')) {
                    var talkpage = new Morebits.wiki.page(mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceNumber') + 1] + ':' + mw.config.get('wgTitle'), 'Tartışma sayfası siliniyor');
                    talkpage.setEditSummary('[[VP:HS#G8|G8]]: Silinen sayfanın tartışma sayfası "' + Morebits.pageNameNorm + '"');
                    talkpage.setChangeTags(Twinkle.changeTags);
                    talkpage.deletePage();
                    // this is ugly, but because of the architecture of wiki.api, it is needed
                    // (otherwise success/failure messages for the previous action would be suppressed)
                    window.setTimeout(function() {
                        Twinkle.speedy.callbacks.sysop.deleteRedirects(params);
                    }, 1800);
                } else {
                    Twinkle.speedy.callbacks.sysop.deleteRedirects(params);
                }
            },
            deleteRedirects: function(params) {
                // delete redirects
                if (params.deleteRedirects) {
                    var query = {
                        action: 'query',
                        titles: mw.config.get('wgPageName'),
                        prop: 'redirects',
                        rdlimit: 'max', // 500 is max for normal users, 5000 for bots and sysops
                        format: 'json'
                    };
                    var wikipedia_api = new Morebits.wiki.api('yönlendirme listesi alınıyor...', query, Twinkle.speedy.callbacks.sysop.deleteRedirectsMain,
                        new Morebits.status('Yönlendirmeler siliniyor'));
                    wikipedia_api.params = params;
                    wikipedia_api.post();
                }

                // promote Unlink tool
                var $link, $bigtext;
                if (mw.config.get('wgNamespaceNumber') === 6 && params.normalized !== 'f8') {
                    $link = $('<a/>', {
                        href: '#',
                        text: 'Bağlantı aracını açmak için buraya tıklayın',
                        css: { fontSize: '130%', fontWeight: 'bold' },
                        click: function() {
                            Morebits.wiki.actionCompleted.redirect = null;
                            Twinkle.speedy.dialog.close();
                            Twinkle.unlink.callback('Removing usages of and/or links to deleted file ' + Morebits.pageNameNorm);
                        }
                    });
                    $bigtext = $('<span/>', {
                        text: 'Sayfaya veya dosyaya verilen bağlantıları kaldırmak için',
                        css: { fontSize: '130%', fontWeight: 'bold' }
                    });
                    Morebits.status.info($bigtext[0], $link[0]);
                } else if (params.normalized !== 'f8') {
                    $link = $('<a/>', {
                        href: '#',
                        text: 'Bağlantı aracını açmak için buraya tıklayın',
                        css: { fontSize: '130%', fontWeight: 'bold' },
                        click: function() {
                            Morebits.wiki.actionCompleted.redirect = null;
                            Twinkle.speedy.dialog.close();
                            Twinkle.unlink.callback('Silinen sayfa için bağlantılar kaldırılıyor ' + Morebits.pageNameNorm);
                        }
                    });
                    $bigtext = $('<span/>', {
                        text: 'Sayfaya verilen bağlantıları kaldırmak için',
                        css: { fontSize: '130%', fontWeight: 'bold' }
                    });
                    Morebits.status.info($bigtext[0], $link[0]);
                }
            },
            deleteRedirectsMain: function(apiobj) {
                var response = apiobj.getResponse();
                var snapshot = response.query.pages[0].redirects || [];
                var total = snapshot.length;
                var statusIndicator = apiobj.statelem;

                if (!total) {
                    statusIndicator.status('yönlendirme bulunmadı');
                    return;
                }

                statusIndicator.status('0%');

                var current = 0;
                var onsuccess = function(apiobjInner) {
                    var now = parseInt(100 * ++current / total, 10) + '%';
                    statusIndicator.update(now);
                    apiobjInner.statelem.unlink();
                    if (current >= total) {
                        statusIndicator.info(now + ' (tamamlandı)');
                        Morebits.wiki.removeCheckpoint();
                    }
                };

                Morebits.wiki.addCheckpoint();

                snapshot.forEach(function(value) {
                    var title = value.title;
                    var page = new Morebits.wiki.page(title, 'Yönlendirme siliniyor "' + title + '"');
                    page.setEditSummary('[[VP:HS#G8|G8]]: Silinen sayfaya yapılan yönlendirme "' + Morebits.pageNameNorm + '"');
                    page.setChangeTags(Twinkle.changeTags);
                    page.deletePage(onsuccess);
                });
            }
        },

        user: {
            main: function(pageobj) {
                var statelem = pageobj.getStatusElement();

                if (!pageobj.exists()) {
                    statelem.error("Görünüşe göre sayfa mevcut değil; belki zaten silinmiştir");
                    return;
                }

                var params = pageobj.getCallbackParameters();

                // given the params, builds the template and also adds the user talk page parameters to the params that were passed in
                // returns => [<string> wikitext, <object> utparams]
                var buildData = Twinkle.speedy.callbacks.getTemplateCodeAndParams(params),
                    code = buildData[0];
                params.utparams = buildData[1];

                // Set the correct value for |ts= parameter in {{db-g13}}
                if (params.normalizeds.indexOf('g13') !== -1) {
                    code = code.replace('$TIMESTAMP', pageobj.getLastEditTime());
                }

                // Tag if possible, post on talk if not
                if (pageobj.canEdit() && ['wikitext', 'Scribunto', 'javascript', 'css', 'sanitized-css'].indexOf(pageobj.getContentModel()) !== -1) {
                    var text = pageobj.getPageText();

                    statelem.status('Etiketler kontrol ediliyor...');

                    // check for existing deletion tags
                    var tag = /(?:\{\{\s*(db|delete|[Ss]il|db-.*?|speedy deletion-.*?)(?:\s*\||\s*\}\}))/.exec(text);
                    // This won't make use of the db-multiple template but it probably should
                    if (tag && !confirm('Sayfada silme ile ilgili {{' + tag[1] + '}} şablonu bulundu. Yine de bir hızlı sil şablonu eklemek istiyor musunuz?')) {
                        return;
                    }

                    var xfd = /(?:\{\{([rsaiftcm]fd|md1|proposed deletion)[^{}]*?\}\})/i.exec(text);
                    if (xfd && !confirm("Sayfada silme ile ilgili {{" + xfd[1] + "}} şablonu bulundu. Yine de bir hızlı sil şablonu eklemek istiyor musunuz?")) {
                        return;
                    }

                    // Kontrol edildi olarak işaretle
                    if (Twinkle.getPref('markSpeedyPagesAsPatrolled')) {
                        pageobj.triage();
                        console.log('Çalışıyor: Kontrol edildi olarak işaretleme')
                    }

                    // Wrap SD template in noinclude tags if we are in template space.
                    // Won't work with userboxes in userspace, or any other transcluded page outside template space
                    if (mw.config.get('wgNamespaceNumber') === 10) { // Template:
                        code = '<noinclude>' + code + '</noinclude>';
                    }

                    // Remove tags that become superfluous with this action
                    text = text.replace(/\{\{\s*([Uu]serspace draft)\s*(\|(?:\{\{[^{}]*\}\}|[^{}])*)?\}\}\s*/g, '');
                    if (mw.config.get('wgNamespaceNumber') === 6) {
                        // remove "move to Commons" tag - deletion-tagged files cannot be moved to Commons
                        text = text.replace(/\{\{(mtc|(copy |move )?to ?commons|move to wikimedia commons|copy to wikimedia commons)[^}]*\}\}/gi, '');
                    }

                    if (params.requestsalt) {
                        if (params.normalizeds.indexOf('g10') === -1) {
                            code += '\n{{salt}}';
                        } else {
                            code = '{{salt}}\n' + code;
                        }
                    }

                    if (mw.config.get('wgPageContentModel') === 'Scribunto') {
                        // Scribunto isn't parsed like wikitext, so CSD templates on modules need special handling to work
                        var equals = '';
                        while (code.indexOf(']' + equals + ']') !== -1) {
                            equals += '=';
                        }
                        code = "require('Module:Module wikitext')._addText([" + equals + '[' + code + ']' + equals + ']);';
                    } else if (['javascript', 'css', 'sanitized-css'].indexOf(mw.config.get('wgPageContentModel')) !== -1) {
                        // Likewise for JS/CSS pages
                        code = '/* ' + code + ' */';
                    }

                    // Generate edit summary for edit
                    var editsummary;
                    if (params.normalizeds.length > 1) {
                        editsummary = 'Hızlı silme isteği gönderiliyor (';
                        $.each(params.normalizeds, function(index, norm) {
                            editsummary += '[[VP:HS#' + norm.toUpperCase() + '|VP:HS#' + norm.toUpperCase() + ']], ';
                        });
                        editsummary = editsummary.substr(0, editsummary.length - 2); // remove trailing comma
                        editsummary += ').';
                    } else if (params.templateParams[0]['1']) {
                        editsummary = params.templateParams[0]['1'] + ' nedeni ile [[VP:HS|hızlı silme]] talep ediliyor.';
                    } else {
                        editsummary = 'Hızlı silme isteği gönderiliyor ([[VP:HS#' + params.normalizeds[0].toUpperCase() + '|VP:HS#' + params.normalizeds[0].toUpperCase() + ']]).';
                    }

                    // Blank attack pages
                    if (params.normalizeds.indexOf('g10') !== -1) {
                        text = code;
                    } else {
                        // Insert tag after short description or any hatnotes
                        var wikipage = new Morebits.wikitext.page(text);
                        text = wikipage.insertAfterTemplates(code + '\n', Twinkle.hatnoteRegex).getText();
                    }


                    pageobj.setPageText(text);
                    pageobj.setEditSummary(editsummary);
                    pageobj.setWatchlist(params.watch);
                    pageobj.save(Twinkle.speedy.callbacks.user.tagComplete);
                } else { // Attempt to place on talk page
                    var talkName = new mw.Title(pageobj.getPageName()).getTalkPage().toText();
                    if (talkName !== pageobj.getPageName()) {
                        if (params.requestsalt) {
                            code += '\n{{salt}}';
                        }

                        pageobj.getStatusElement().warn('Sayfa değiştirilemiyor, tartışma sayfasına etiket yerleştiriliyor');

                        var talk_page = new Morebits.wiki.page(talkName, 'Tartışma sayfasına otomatik olarak etiket yerleştiriliyor');
                        talk_page.setNewSectionTitle(pageobj.getPageName() + ' hızlı silinmeye aday gösterildi');
                        talk_page.setNewSectionText(code + '\n\n' + pageobj.getPageName() + ' sayfasını etiketleyemedim, bu yüzden lütfen silin. . ~~~~');
                        talk_page.setCreateOption('recreate');
                        talk_page.setFollowRedirect(true);
                        talk_page.setWatchlist(params.watch);
                        talk_page.setChangeTags(Twinkle.changeTags);
                        talk_page.setCallbackParameters(params);
                        talk_page.newSection(Twinkle.speedy.callbacks.user.tagComplete);
                    } else {
                        pageobj.getStatusElement().error('Sayfa koruma altında ve değişiklik isteği eklemek için hiçbir yer yok, iptal ediliyor');
                    }
                }
            },

            tagComplete: function(pageobj) {
                var params = pageobj.getCallbackParameters();

                // Notification to first contributor, will also log nomination to the user's userspace log
                if (params.usertalk) {
                    var thispage = new Morebits.wiki.page(Morebits.pageNameNorm);
                    thispage.setCallbackParameters(params);
                    thispage.lookupCreation(Twinkle.speedy.callbacks.noteToCreator);
                    // or, if not notifying, add this nomination to the user's userspace log without the initial contributor's name
                } else if (params.lognomination) {
                    Twinkle.speedy.callbacks.user.addToLog(params, null);
                }
            },

            addToLog: function(params, initialContrib) {
                var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
                usl.initialText =
                    "Bu, [[VP:TW|Twinkle]]'ın [[VP:HS|hızlı silme]] modülünü kullanarak bu kullanıcı tarafından yapılan tüm hızlı silme adaylıklarının bir günlüğüdür.\n\n" +
                    'Artık bu günlüğü tutmak istemiyorsanız, [[Wikipedia:Twinkle/Preferences|tercihler paneli]]\'ni kullanarak kapatabilir ve ' +
                    'hızlı silinmesi için bu sayfayı aday gösterebilirsiniz.' +
                    (Morebits.userIsSysop ? '\n\nBu günlük Twinkle kullanılarak yapılan silme işlemlerinin günlüğünü tutmaz.' : '');

                var formatParamLog = function(normalize, csdparam, input) {
                    if ((normalize === 'G4' && csdparam === 'xfd') ||
                        (normalize === 'G6' && csdparam === 'page') ||
                        (normalize === 'G6' && csdparam === 'fullvotepage') ||
                        (normalize === 'G6' && csdparam === 'sourcepage') ||
                        (normalize === 'A2' && csdparam === 'source') ||
                        (normalize === 'A10' && csdparam === 'article') ||
                        (normalize === 'F1' && csdparam === 'filename')) {
                        input = '[[:' + input + ']]';
                    } else if (normalize === 'G5' && csdparam === 'user') {
                        input = '[[:Kullanıcı:' + input + ']]';
                    } else if (normalize === 'G12' && csdparam.lastIndexOf('url', 0) === 0 && input.lastIndexOf('http', 0) === 0) {
                        input = '[' + input + ' ' + input + ']';
                    } else if (normalize === 'F8' && csdparam === 'filename') {
                        input = '[[commons:' + input + ']]';
                    } else if (normalize === 'P1' && csdparam === 'criterion') {
                        input = '[[VP:HS#' + input + ']]';
                    }
                    return ' {' + normalize + ' ' + csdparam + ': ' + input + '}';
                };

                var extraInfo = '';

                // If a logged file is deleted but exists on commons, the wikilink will be blue, so provide a link to the log
                var fileLogLink = mw.config.get('wgNamespaceNumber') === 6 ? ' ([{{fullurl:Special:Log|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} log])' : '';

                var editsummary = '';
                var appendText = '# [[:' + Morebits.pageNameNorm;

                if (params.normalizeds.indexOf('g10') === -1) { // no article name in log for G10 taggings
                    appendText += ']]' + fileLogLink + ': ';
                    editsummary += '[[:' + Morebits.pageNameNorm + ']] sayfasının hızlı silme adaylığının günlük kaydı tutuluyor.';
                } else {
                    appendText += '|This]] attack page' + fileLogLink + ': ';
                    editsummary += ' of an attack page.';
                }
                if (params.normalizeds.length > 1) {
                    appendText += 'Silinme nedenleri: (';
                    $.each(params.normalizeds, function(index, norm) {
                        appendText += '[[VP:HS#' + norm.toUpperCase() + '|' + norm.toUpperCase() + ']], ';
                    });
                    appendText = appendText.substr(0, appendText.length - 2); // remove trailing comma
                    appendText += ')';
                } else if (params.templateParams[0]['1']) {
                    appendText = '# [[:' + Morebits.pageNameNorm + ']]' + ' sayfası için "' + params.templateParams[0]['1'] + '" nedeni ile [[VP:HS|hızlı silme]] talep ediliyor.';

                } else {
                    appendText += "[[VP:HS#" + params.normalizeds[0].toUpperCase() + '|VP:HS#' + params.normalizeds[0].toUpperCase() + "]] (" + params.values[0] + ")";
                }

                // If params is "empty" it will still be full of empty arrays, but ask anyway
                /*if (params.templateParams) {
                    // Treat custom rationale individually
                    if (params.normalizeds[0] && params.normalizeds[0] === 'db') {
                        extraInfo += formatParamLog('Custom', 'rationale', params.templateParams[0]['1']);
                    } else {
                        params.templateParams.forEach(function(item, index) {
                            var keys = Object.keys(item);
                            if (keys[0] !== undefined && keys[0].length > 0) {
                                // Second loop required since some items (G12, F9) may have multiple keys
                                keys.forEach(function(key, keyIndex) {
                                    if (keys[keyIndex] === 'blanked' || keys[keyIndex] === 'ts') {
                                        return true; // Not worth logging
                                    }
                                    extraInfo += formatParamLog(params.normalizeds[index].toUpperCase(), keys[keyIndex], item[key]);
                                });
                            }
                        });
                    }
                }*/

                if (params.requestsalt) {
                    appendText += '; oluşturmaya karşı ([[VP:OLUŞTURMA|koruma]]) isteniyor';
                }
                if (extraInfo) {
                    appendText += '; ek bilgi:' + extraInfo;
                }
                if (initialContrib) {
                    appendText += '; {{user|1=' + initialContrib + '}} uyarıldı.';
                }
                appendText += ' ~~~~~\n';

                usl.changeTags = Twinkle.changeTags;
                usl.log(appendText, editsummary);
            }
        }
    };

    // validate subgroups in the form passed into the speedy deletion tag
    Twinkle.speedy.getParameters = function twinklespeedyGetParameters(form, values) {
        var parameters = [];

        $.each(values, function(index, value) {
            var currentParams = [];
            switch (value) {
                case 'reason':
                    if (form['csd.reason_1']) {
                        var dbrationale = form['csd.reason_1'].value;
                        if (!dbrationale || !dbrationale.trim()) {
                            alert('Özel gerekçe:  Lütfen bir gerekçe belirtin.');
                            parameters = null;
                            return false;
                        }
                        currentParams['1'] = dbrationale;
                    }
                    break;

                case 'userreq': // U1
                    if (form['csd.userreq_rationale']) {
                        var u1rationale = form['csd.userreq_rationale'].value;
                        if (mw.config.get('wgNamespaceNumber') === 3 && !(/\//).test(mw.config.get('wgTitle')) &&
                            (!u1rationale || !u1rationale.trim())) {
                            alert('CSD U1:  Please specify a rationale when nominating user talk pages.');
                            parameters = null;
                            return false;
                        }
                        currentParams.rationale = u1rationale;
                    }
                    break;

                case 'Önceden silinmiş metin': // G4
                    if (form['csd.repost_xfd']) {
                        var deldisc = form['csd.repost_xfd'].value;
                        if (deldisc) {
                            currentParams.xfd = deldisc;
                        }
                    }
                    break;

                case 'banned': // G5
                    if (form['csd.banned_user'] && form['csd.banned_user'].value) {
                        currentParams.user = form['csd.banned_user'].value.replace(/^\s*User:/i, '');
                    }
                    break;

                case 'move': // G6
                    if (form['csd.move_page'] && form['csd.move_reason']) {
                        var movepage = form['csd.move_page'].value,
                            movereason = form['csd.move_reason'].value;
                        if (!movepage || !movepage.trim()) {
                            alert('CSD G6 (move):  Please specify the page to be moved here.');
                            parameters = null;
                            return false;
                        }
                        if (!movereason || !movereason.trim()) {
                            alert('CSD G6 (move):  Please specify the reason for the move.');
                            parameters = null;
                            return false;
                        }
                        currentParams.page = movepage;
                        currentParams.reason = movereason;
                    }
                    break;

                case 'xfd': // G6
                    if (form['csd.xfd_fullvotepage']) {
                        var xfd = form['csd.xfd_fullvotepage'].value;
                        if (xfd) {
                            currentParams.fullvotepage = xfd;
                        }
                    }
                    break;

                case 'copypaste': // G6
                    if (form['csd.copypaste_sourcepage']) {
                        var copypaste = form['csd.copypaste_sourcepage'].value;
                        if (!copypaste || !copypaste.trim()) {
                            alert('CSD G6 (copypaste):  Please specify the source page name.');
                            parameters = null;
                            return false;
                        }
                        currentParams.sourcepage = copypaste;
                    }
                    break;

                case 'g6': // G6
                    if (form['csd.g6_rationale'] && form['csd.g6_rationale'].value) {
                        currentParams.rationale = form['csd.g6_rationale'].value;
                    }
                    break;

                case 'author': // G7
                    if (form['csd.author_rationale'] && form['csd.author_rationale'].value) {
                        currentParams.rationale = form['csd.author_rationale'].value;
                    }
                    break;

                case 'g8': // G8
                    if (form['csd.g8_rationale'] && form['csd.g8_rationale'].value) {
                        currentParams.rationale = form['csd.g8_rationale'].value;
                    }
                    break;

                case 'templatecat': // G8
                    if (form['csd.templatecat_rationale'] && form['csd.templatecat_rationale'].value) {
                        currentParams.rationale = form['csd.templatecat_rationale'].value;
                    }
                    break;

                case 'attack': // G10
                    currentParams.blanked = 'yes';
                    // it is actually blanked elsewhere in code, but setting the flag here
                    break;

                case 'Telif ihlali': // Telif ihlali oluşturan sayfa
                    if (form['csd.copyvio_url'] && form['csd.copyvio_url'].value) {
                        currentParams.url = form['csd.copyvio_url'].value;
                    }
                    if (form['csd.copyvio_url2'] && form['csd.copyvio_url2'].value) {
                        currentParams.url2 = form['csd.copyvio_url2'].value;
                    }
                    if (form['csd.copyvio_url3'] && form['csd.copyvio_url3'].value) {
                        currentParams.url3 = form['csd.copyvio_url3'].value;
                    }
                    break;

                case 'afc': // G13
                    currentParams.ts = '$TIMESTAMP'; // to be replaced by the last revision timestamp when page is saved
                    break;

                case 'redundantimage': // F1
                    if (form['csd.redundantimage_filename']) {
                        var redimage = form['csd.redundantimage_filename'].value;
                        if (!redimage || !redimage.trim()) {
                            alert('CSD F1:  Please specify the filename of the other file.');
                            parameters = null;
                            return false;
                        }
                        currentParams.filename = new RegExp('^\\s*' + Morebits.namespaceRegex(6) + ':', 'i').test(redimage) ? redimage : 'File:' + redimage;
                    }
                    break;

                case 'badfairuse': // F7
                    if (form['csd.badfairuse_rationale'] && form['csd.badfairuse_rationale'].value) {
                        currentParams.rationale = form['csd.badfairuse_rationale'].value;
                    }
                    break;

                case 'commons': // F8
                    if (form['csd.commons_filename']) {
                        var filename = form['csd.commons_filename'].value;
                        if (filename && filename.trim() && filename !== Morebits.pageNameNorm) {
                            currentParams.filename = new RegExp('^\\s*' + Morebits.namespaceRegex(6) + ':', 'i').test(filename) ? filename : 'File:' + filename;
                        }
                    }
                    break;

                case 'imgcopyvio': // F9
                    if (form['csd.imgcopyvio_url'] && form['csd.imgcopyvio_rationale']) {
                        var f9url = form['csd.imgcopyvio_url'].value;
                        var f9rationale = form['csd.imgcopyvio_rationale'].value;
                        if ((!f9url || !f9url.trim()) && (!f9rationale || !f9rationale.trim())) {
                            alert('CSD F9: You must enter a url or reason (or both) when nominating a file under F9.');
                            parameters = null;
                            return false;
                        }
                        if (form['csd.imgcopyvio_url'].value) {
                            currentParams.url = f9url;
                        }
                        if (form['csd.imgcopyvio_rationale'].value) {
                            currentParams.rationale = f9rationale;
                        }
                    }
                    break;

                case 'foreign': // A2
                    if (form['csd.foreign_source']) {
                        var foreignlink = form['csd.foreign_source'].value;
                        if (!foreignlink || !foreignlink.trim()) {
                            alert('CSD A2:  Please specify an interwiki link to the article of which this is a copy.');
                            parameters = null;
                            return false;
                        }
                        currentParams.source = foreignlink;
                    }
                    break;

                case 'transwiki': // A5
                    if (form['csd.transwiki_location'] && form['csd.transwiki_location'].value) {
                        currentParams.location = form['csd.transwiki_location'].value;
                    }
                    break;

                case 'a10': // A10
                    if (form['csd.a10_article']) {
                        var duptitle = form['csd.a10_article'].value;
                        if (!duptitle || !duptitle.trim()) {
                            alert('CSD A10:  Please specify the name of the article which is duplicated.');
                            parameters = null;
                            return false;
                        }
                        currentParams.article = duptitle;
                    }
                    break;

                case 'p1': // P1
                    if (form['csd.p1_criterion']) {
                        var criterion = form['csd.p1_criterion'].value;
                        if (!criterion || !criterion.trim()) {
                            alert('CSD P1:  Please specify a single criterion.');
                            parameters = null;
                            return false;
                        }
                        currentParams.criterion = criterion;
                    }
                    break;

                default:
                    break;
            }
            parameters.push(currentParams);
        });
        return parameters;
    };

    // Function for processing talk page notification template parameters
    // key1/value1: for {{db-criterion-[notice|deleted]}} (via {{db-csd-[notice|deleted]-custom}})
    // utparams.param: for {{db-[notice|deleted]-multiple}}
    Twinkle.speedy.getUserTalkParameters = function twinklespeedyGetUserTalkParameters(normalized, parameters) {
        var utparams = [];

        // Special cases
        if (normalized === 'db') {
            utparams['2'] = parameters['1'];
        } else if (normalized === 'g6') {
            utparams.key1 = 'to';
            utparams.value1 = Morebits.pageNameNorm;
        } else if (normalized === 'g12') {
            ['url', 'url2', 'url3'].forEach(function(item, idx) {
                if (parameters[item]) {
                    idx++;
                    utparams['key' + idx] = item;
                    utparams['value' + idx] = utparams[item] = parameters[item];
                }
            });
        } else {
            // Handle the rest
            var param;
            switch (normalized) {
                case 'g4':
                    param = 'xfd';
                    break;
                case 'a2':
                    param = 'source';
                    break;
                case 'a5':
                    param = 'location';
                    break;
                case 'a10':
                    param = 'article';
                    break;
                case 'f9':
                    param = 'url';
                    break;
                case 'p1':
                    param = 'criterion';
                    break;
                default:
                    break;
            }
            // No harm in providing a usertalk template with the others' parameters
            if (param && parameters[param]) {
                utparams.key1 = param;
                utparams.value1 = utparams[param] = parameters[param];
            }
        }
        return utparams;
    };

    /**
     * @param {Event} e
     * @returns {Array}
     */
    Twinkle.speedy.resolveCsdValues = function twinklespeedyResolveCsdValues(e) {
        var values = (e.target.form ? e.target.form : e.target).getChecked('csd');
        if (values.length === 0) {
            alert('Lütfen bir kriter seçin!');
            return null;
        }
        return values;
    };

    Twinkle.speedy.callback.evaluateSysop = function twinklespeedyCallbackEvaluateSysop(e) {
        var form = e.target.form ? e.target.form : e.target;

        if (e.target.type === 'checkbox' || e.target.type === 'text' ||
            e.target.type === 'select') {
            return;
        }

        var tag_only = form.tag_only;
        if (tag_only && tag_only.checked) {
            Twinkle.speedy.callback.evaluateUser(e);
            return;
        }

        var values = Twinkle.speedy.resolveCsdValues(e);
        if (!values) {
            return;
        }
        var templateParams = Twinkle.speedy.getParameters(form, values);
        if (!templateParams) {
            return;
        }

        var normalizeds = values.map(function(value) {
            return Twinkle.speedy.normalizeHash[value];
        });

        // analyse each criterion to determine whether to watch the page, prompt for summary, or notify the creator
        var watchPage, promptForSummary;
        normalizeds.forEach(function(norm) {
            if (Twinkle.getPref('watchSpeedyPages').indexOf(norm) !== -1) {
                watchPage = Twinkle.getPref('watchSpeedyExpiry');
            }
            if (Twinkle.getPref('promptForSpeedyDeletionSummary').indexOf(norm) !== -1) {
                promptForSummary = true;
            }
        });

        var warnusertalk = form.warnusertalk.checked && normalizeds.some(function(norm, index) {
            return Twinkle.getPref('warnUserOnSpeedyDelete').indexOf(norm) !== -1 &&
                !(norm === 'g6' && values[index] !== 'copypaste');
        });

        var welcomeuser = warnusertalk && normalizeds.some(function(norm) {
            return Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1;
        });

        var params = {
            values: values,
            normalizeds: normalizeds,
            watch: watchPage,
            deleteTalkPage: form.talkpage && form.talkpage.checked,
            deleteRedirects: form.redirects.checked,
            warnUser: warnusertalk,
            welcomeuser: welcomeuser,
            promptForSummary: promptForSummary,
            templateParams: templateParams
        };

        Morebits.simpleWindow.setButtonsEnabled(false);
        Morebits.status.init(form);

        Twinkle.speedy.callbacks.sysop.main(params);
    };

    Twinkle.speedy.callback.evaluateUser = function twinklespeedyCallbackEvaluateUser(e) {
        var form = e.target.form ? e.target.form : e.target;

        if (e.target.type === 'checkbox' || e.target.type === 'text' ||
            e.target.type === 'select') {
            return;
        }

        var values = Twinkle.speedy.resolveCsdValues(e);
        if (!values) {
            return;
        }
        var templateParams = Twinkle.speedy.getParameters(form, values);
        if (!templateParams) {
            return;
        }

        // var multiple = form.multiple.checked;

        var normalizeds = values.map(function(value) {
            return Twinkle.speedy.normalizeHash[value];
        });

        // analyse each criterion to determine whether to watch the page/notify the creator
        var watchPage = normalizeds.some(function(csdCriteria) {
			return Twinkle.getPref('watchSpeedyPages').indexOf(csdCriteria) !== -1;
		}) && Twinkle.getPref('watchSpeedyExpiry');
	
        var notifyuser = form.notify.checked && normalizeds.some(function(norm, index) {
            return Twinkle.getPref('notifyUserOnSpeedyDeletionNomination').indexOf(norm) !== -1 &&
                !(norm === 'G9' && values[index] !== 'Telif ihlali');
        });
        var welcomeuser = notifyuser && normalizeds.some(function(norm) {
            return Twinkle.getPref('welcomeUserOnSpeedyDeletionNotification').indexOf(norm) !== -1;
        });
        var csdlog = Twinkle.getPref('logSpeedyNominations') && normalizeds.some(function(norm) {
            return Twinkle.getPref('noLogOnSpeedyNomination').indexOf(norm) === -1;
        });

        var params = {
            values: values,
            normalizeds: normalizeds,
            watch: watchPage,
            usertalk: notifyuser,
            welcomeuser: welcomeuser,
            lognomination: csdlog,
            requestsalt: form.salting.checked,
            templateParams: templateParams
        };

        Morebits.simpleWindow.setButtonsEnabled(false);
        Morebits.status.init(form);

        Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
        Morebits.wiki.actionCompleted.notice = 'İşlem tamamlandı';

        var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'Etiketleniyor');
        wikipedia_page.setChangeTags(Twinkle.changeTags); // Here to apply to triage
        wikipedia_page.setCallbackParameters(params);
        wikipedia_page.load(Twinkle.speedy.callbacks.user.main);
    };

    Twinkle.addInitCallback(Twinkle.speedy, 'speedy');
})(jQuery);


// </nowiki>