پرش به محتوا

کاربر:Jeeputer/moveCategory.js

از ویکی‌پدیا، دانشنامهٔ آزاد
نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید ⇧ Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.
$.when(
    mw.loader.using(['mediawiki.Title', 'ext.gadget.morebits-2022']),
    $.ready
).then(function(){
	if (mw.config.get('wgUserGroups').indexOf('bot') === -1 && mw.config.get('wgNamespaceNumber') !== 14) {
		return;
	}
	
	var ad = ' ([[کاربر:Jeeputer/moveCategory|اسکریپت انتقال رده]])';
	var link =  mw.util.addPortletLink( 'p-cactions', '#', 'انتقال رده', 'ca-move-cat', 'انتقال صفحهٔ رده و تمام صفحه‌های موجود در آن' );
	link.addEventListener('click', callback);
	
	var api = new mw.Api();
	
    function callback(e) {
        if (e) e.preventDefault();
        var Window = new Morebits.simpleWindow(400, 200);
        Window.setScriptName('انتقال رده');
        Window.setTitle("انتقال رده و صفحه‌های موجود در آن");
        
        var form = new Morebits.quickForm(evaluate);
        
        form.append({
        	type: 'input',
            label: 'عنوان جدید',
            name: 'destination',
        	tooltip: 'به‌منظور تسهیل اصلاح غلط‌های املایی، عنوان کنونی صفحه از پیش در این جعبه وارد شده است. ' +
        	'در صورتی که می‌خواهید عنوان را به‌طور کلی تغییر دهید، متن موجود را حذف کنید و عنوان جدید را وارد کنید.',
        	value: mw.config.get('wgTitle').replace(/\_/g, ' ')
        });
        form.append({
        	type: 'input',
            label: 'دلیل انتقال',
            name: 'reason',
        	tooltip: 'وارد کردن دلیل به‌منظور ثبت در سیاهه الزامی است',
            required: true
        });
        
        form.append({
            type: 'checkbox',
            name: 'options',
            list: [{
	                label: 'انتقال صفحهٔ بحث',
	                name: 'movetalk',
	                checked: true,
        		}, {
	                label: 'برجای گذاشتن تغییرمسیر',
	                name: 'redirect',
	                checked: false,
	                tooltip: 'برجای گذاشتن صفحه‌ای حاوی الگوی «رده بهتر» در عنوان کنونی؛ این گزینه زمانی ' +
	                'کاربرد دارد که عنوان کنونی حاوی غلط املایی نباشد و مفهوم و گسترهٔ تحت پوشش رده را به خوبی منتقل کند.'
        		}],
        });
        form.append({
            type: 'submit',
            label: 'تأیید'
        });
        
        var result = form.render();
        Window.setContent(result);
        Window.display();
    }
    function evaluate(e) {
        var form = e.target;
        
        var params = {
        	destination: '',
        	reason: '',
        	movetalk: true,
        	redirect: false
        };
        
        params.destination = form.destination.value;
        if (params.destionation === '') {
        	alert('لطفاً عنوان صفحهٔ مقصد را وارد کنید!');
        	return;
        } else if (params.destination === mw.config.get('wgTitle')) {
        	alert('عنوان وارد شده برای صفحهٔ هدف با عنوان کنونی صفحه یکسان است. انتقال امکان‌پذیر نیست.');
        	return;
    	} else if ((params.destination).substr(0, 4) === 'رده:') {
        	params.destination = (params.destination).substr(4, params.destination.length);
        }
        
        params.reason = form.reason.value;
        
        if (!form.movetalk.checked) params.movetalk = false;
        if (form.redirect.checked) params.redirect = true;
        
		var currPage = new Morebits.wiki.page(mw.config.get('wgPageName'), 'در حال انتقال رده به عنوان تازه');
		
		Morebits.simpleWindow.setButtonsEnabled(false);
        Morebits.status.init(form);
        Morebits.wiki.api.setApiUserAgent('[[w:User:Jeeputer/Easy-Merge.js]]');
    	Morebits.wiki.actionCompleted.notice = 'صفحهٔ رده منتقل شد';
        
		currPage.setMoveDestination('رده:' + params.destination);
		currPage.setMoveTalkPage(params.movetalk);
		currPage.setMoveSuppressRedirect(!params.redirect);
		currPage.setEditSummary(params.reason + ad);
        currPage.setBotEdit(true);
		currPage.move(moveMembers);
    }
    
    function moveMembers(e) {
    	var oldTitle = e.query.from.replace(/\_/g, ' '),
    		newTitle = e.query.to;
    		
        api.get({
        	action: 'query',
        	list: 'categorymembers',
        	cmtitle: oldTitle,
        	cmprop: 'title',
        	cmnamespace: '*',
        	cmlimit: 'max'
        }).done(function(data) {
        	data.query.categorymembers.forEach(function(item) {
        		var page = new Morebits.wiki.page(item.title, 'در حال ویرایش صفحهٔ ' + item.title);
        		page.load(function(page) {
        			var newText = page.getPageText().replace(oldTitle, newTitle);
	                page.setBotEdit(true);
	                page.setPageText(newText);
	                page.setEditSummary('انتقال از [[' + oldTitle + ']] به [[' + newTitle + ']]' + ad);
	                page.setCreateOption('nocreate');
                	page.save();
        		});
        	});
        });
    }
});