MediaWiki:Gadget-twinkleimage.js

Vikipedi, özgür ansiklopedi

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($) {


/*
 ****************************************
 *** twinkleimage.js: Dosya süreli silme modülü
 ****************************************
 * Çağırma modu:           Sekme ("D-sil")
 * Etkin olduğu yerler:    Yönlendirme olmayan (ve Commons üzerinde bulunmayan) dosya sayfaları
 */

Twinkle.image = function twinkleimage() {
	if (mw.config.get('wgNamespaceNumber') === 6 && mw.config.get('wgArticleId') && !document.getElementById('mw-sharedupload') && !Morebits.isPageRedirect()) {
		Twinkle.addPortletLink(Twinkle.image.callback, 'D-sil', 'tw-di', 'Dosyayı gecikmeli hızlı silinme için aday göster');
	}
};

Twinkle.image.callback = function twinkleimageCallback() {
	var Window = new Morebits.simpleWindow(600, 330);
	Window.setTitle('7 gün sonra hızlı silinecek dosyalar');
	Window.setScriptName('Twinkle');
	Window.addFooterLink('Hızlı silme politikası', 'VP:HS#Dosyalar');
	Window.addFooterLink('Resim tercihleri', 'VP/TW/T#image');
	Window.addFooterLink('Twinkle yardımı', 'VP:TW#image');
	//Window.addFooterLink('Give feedback', 'WT:TW');
	
	var form = new Morebits.quickForm(Twinkle.image.callback.evaluate);
	form.append({
		type: 'checkbox',
		list: [
			{
				label: 'Dosyayı ilk yükleyen kullanıcıyı bilgilendir',
				value: 'notify',
				name: 'notify',
				tooltip: "Aynı kullanıcının birden fazla dosyasını etiketleyecekseniz ve mesaj sayfasını çok fazla bildirimle şişirmek istemiyorsanız bu seçimi kaldırın.",
				checked: Twinkle.getPref('notifyUserOnDeli')
			}
		]
	}
	);
	var field = form.append({
		type: 'field',
		label: 'İstenen işlem türü'
	});
	field.append({
		type: 'radio',
		name: 'type',
		event: Twinkle.image.callback.choice,
		list: [
			{
				label: 'Kaynaksız (HS D4)',
				value: 'kaynaksız',
				checked: true,
				tooltip: 'Resim veya ortam dosyasının kaynak bilgisi yok'
			},
			{
				label: 'Lisanssız (HS D4)',
				value: 'lisanssız',
				tooltip: 'Resim veya ortam dosyasının telif hakkı durumuna ilişkin bilgi yok'
			},
			{
				label: 'Kaynaksız ve lisanssız (HS D4)',
				value: 'kaynaksız ve lisanssız',
				tooltip: 'Resim veya ortam dosyasının ne kaynak ne de telif hakkı durum bilgisi var'
			},
			{
				label: 'Kullanılmayan adil kullanım dosyası (HS D5)',
				value: 'kullanılmayan',
				tooltip: 'Resim veya ortam dosyasının Vikipedi\'de kullanıma uygun bir lisansı yok ve yalnızca Adil Kullanım kapsamında kullanılabilir, ancak hiçbir maddede kullanılmıyor'
			},
			{
				label: 'Adil kullanım gerekçesiz (HS D7)',
				value: 'gerekçesiz',
				tooltip: 'Resim veya dosyanın Vikipedi\'nin Adil Kullanım politikası uyarınca kullanıldığı iddia ediliyor, ancak politikanın buna neden izin verdiğine dair hiçbir açıklama yok'
			},
			{
				label: 'Şüpheli (HS D11)',
				value: 'şüpheli',
				tooltip: 'Resim veya ortam dosyasıyla ilgili bilgiler şüpheli görünüyor'
			},
			{
				label: 'Tanımsız (HS D12)',
				value: 'tanımsız',
				tooltip: 'Dosya tanım bilgisi içermiyor ya da konusu veya tanımı net olarak anlaşılamıyor'
			},
			{
				label: 'İçeriği kaynaksız (HS D13)',
				value: 'içeriği kaynaksız',
				tooltip: 'Dosya içeriğindeki basit olmayan grafiğin içeriği konusunda kaynak gösterilmesi gerekiyor'
			}
		]
	});
	form.append({
		type: 'div',
		label: 'Çalışma alanı',
		name: 'work_area'
	});
	form.append({ type: 'submit' });

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

	// We must init the parameters
	var evt = document.createEvent('Event');
	evt.initEvent('change', true, true);
	result.type[0].dispatchEvent(evt);
};

Twinkle.image.callback.choice = function twinkleimageCallbackChoose(event) {
	var value = event.target.values;
	var root = event.target.form;
	var work_area = new Morebits.quickForm.element({
		type: 'div',
		name: 'work_area'
	});

	switch (value) {
		// case 'kaynaksız ve lisanssız':
		// case 'kaynaksız':
		// 	work_area.append({
		// 		type: 'checkbox',
		// 		list: [
		// 			{
		// 				label: 'Adil kullanım',
		// 				name: 'adilkullanım',
		// 				tooltip: 'Dosya adil kullanım kapsamında lisanslanmış'
		// 			}
		// 		]
		// 	}); // Gerek yok
		/* falls through */
		// case 'lisanssız':
		// 	work_area.append({
		// 		type: 'checkbox',
		// 		list: [
		// 			{
		// 				name: 'türev',
		// 				label: 'Barındırdığı eserler için kaynak belirtilmemiş türev eser',
		// 				tooltip: 'Dosya bir veya daha fazla eserden elde edilmiş ama bunların kaynağı belirtilmemiş'
		// 			}
		// 		]
		// 	});
		// 	break; // Gerek yok
		// case 'içeriği kaynaksız':
		// 	work_area.append({
		// 		type: 'input',
		// 		name: 'source',
		// 		label: 'Kaynak:'
		// 	});
		// 	break; // Replaceable vardı burada, o yüzden input kutusu var ama içeriği kaynaksız için gereksiz
		case 'şüpheli':
			work_area.append({
				type: 'textarea',
				name: 'neden',
				label: 'Neden şüpheli buluyorsunuz?'
			});
			break;
		// case 'kullanılmayan':
		// 	work_area.append({
		// 		type: 'input',
		// 		name: 'replacement',
		// 		label: 'Yerine geçecek dosya:',
		// 		tooltip: 'Bu dosyanın yerine geçecek isteğe bağlı dosya. "Dosya:" öneki isteğe bağlıdır.'
		// 	});
		// 	break; // Replacement'tan gelen metin kutusu, gerek yok
		// case 'tanımsız':
		// 	work_area.append({
		// 		type: 'textarea',
		// 		name: 'reason',
		// 		label: 'Gerekçe:'
		// 	});
		// 	break; // Tanımsız'ı yerine geçirdiğimiz arkadaşın bir metin kutusu vardı ek gerekçe için. Gerekirse etkinleştirilebilir ama şu an için gerek yok.
		default:
			break;
	}

	root.replaceChild(work_area.render(), $(root).find('div[name="work_area"]')[0]);
};

Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {

	var input = Morebits.quickForm.getInputData(event.target);
	if (input.replacement) {
		input.replacement = (new RegExp('^' + Morebits.namespaceRegex(6) + ':', 'i').test(input.replacement) ? '' : 'Dosya:') + input.replacement;
	}

	var csdcrit;
	switch (input.type) {
		case 'kaynaksız ve lisanssız':
		case 'kaynaksız':
		case 'lisanssız':
			csdcrit = 'D4';
			break;
		case 'kullanılmayan':
			csdcrit = 'D5';
			break;
		case 'gerekçesiz':
			csdcrit = 'D7';
			break;
		case 'şüpheli':
			csdcrit = 'D11';
			break;
		case 'tanımsız':
			csdcrit = 'D12';
			break;
		case 'içeriği kaynaksız':
			csdcrit = 'D13';
			break;
		default:
			throw new Error('Twinkle.image.callback.evaluate: bilinmeyen ölçüt');
	}

	var lognomination = Twinkle.getPref('logSpeedyNominations') && Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1;
	var templatename = input.türev ? 'türev ' + input.type : input.type;

	var params = $.extend({
		templatename: templatename,
		normalized: csdcrit,
		lognomination: lognomination
	}, input);

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(event.target);

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

	// Tagging image
	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'Dosya, silme etiketiyle etiketleniyor');
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.image.callbacks.taggingImage);

	// Notifying uploader
	if (input.notify) {
		wikipedia_page.lookupCreation(Twinkle.image.callbacks.userNotification);
	} else {
		// add to CSD log if desired
		if (lognomination) {
			Twinkle.image.callbacks.addToLog(params, null);
		}
		// No auto-notification, display what was going to be added.
		var noteData = document.createElement('pre');
		noteData.appendChild(document.createTextNode('{{yk:' + templatename + ' dosya-mesaj|1=' + mw.config.get('wgTitle') + '}} ~~~~'));
		Morebits.status.info('Bildirim', [ 'Aşağıdaki veya buna benzer bilgilerin dosyayı ilk yükleyene gönderilmesi gerekir:', document.createElement('br'), noteData ]);
	}
};

Twinkle.image.callbacks = {
	taggingImage: function(pageobj) {
		var text = pageobj.getPageText();
		var params = pageobj.getCallbackParameters();

		// 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|wikimedia commons'a taşı|commons'a taşı)[^}]*\}\}/gi, '');

		var tag = '{{' + params.templatename + ' dosya-tarih|gün={{yk:#time:j}}|ay={{yk:#time:F}}|yıl={{yk:#time:Y}}';
		switch (params.type) {
			// case 'kaynaksız ve lisanssız':
			// case 'kaynaksız':
			// 	tag += params.adilkullanım ? '|adilkullanım=evet' : '';
			// 	break; // Gerek yok
			// case 'içeriği kaynaksız':
			// 	tag += params.kaynak ? '|kaynak=' + params.kaynak : '';
			// 	break; // Gerek yok
			case 'şüpheli':
				tag += params.neden ? '|neden=' + params.neden : '';
				break;
			// case 'kullanılmayan':
			// 	tag += params.ikame ? '|ikame=' + params.ikame : '';
			// 	break; // Gerek yok
			// case 'tanımsız':
			// 	tag += params.neden ? '|1=' + params.neden : '';
			// 	break; // Gerek yok
			default:
				break;  // doesn't matter
		}
		tag += '}}\n'; // Buradaki şablon kapanışı öncesinde |help=off parametresi vardı, şu an için gerekli değil.

		pageobj.setPageText(tag + text);
		pageobj.setEditSummary('Bu ' + params.type + ' dosya, [[VP:HS#' + params.normalized + '|VP:HS ' + params.normalized + ']] uyarınca hızlı silinmeye adaydır.');
		pageobj.setChangeTags(Twinkle.changeTags);
		pageobj.setWatchlist(Twinkle.getPref('deliWatchPage'));
		pageobj.setCreateOption('nocreate');
		pageobj.save();
	},
	userNotification: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var initialContrib = pageobj.getCreator();

		// disallow warning yourself
		if (initialContrib === mw.config.get('wgUserName')) {
			pageobj.getStatusElement().warn('Bu sayfayı siz (' + initialContrib + ') oluşturdunuz; kullanıcı bilgilendirme atlanıyor');
		} else {
			var usertalkpage = new Morebits.wiki.page('Kullanıcı mesaj:' + initialContrib, 'İlk katkı sahibi (' + initialContrib + ') bilgilendiriliyor');
			var notifytext = '\n{{yk:' + params.templatename + ' dosya-mesaj|1=' + mw.config.get('wgTitle');
			if (params.type === 'içeriği kaynaksız') {
				notifytext += params.kaynak ? '|kaynak=' + params.kaynak : '';
			}
			notifytext += '}} ~~~~';
			usertalkpage.setAppendText(notifytext);
			usertalkpage.setEditSummary('Bildirim: [[:' + Morebits.pageNameNorm + ']] adlı dosyanın silinmek üzere etiketlenmesi.');
			usertalkpage.setChangeTags(Twinkle.changeTags);
			usertalkpage.setCreateOption('recreate');
			usertalkpage.setWatchlist(Twinkle.getPref('deliWatchUser'));
			usertalkpage.setFollowRedirect(true, false);
			usertalkpage.append();
		}

		// add this nomination to the user's userspace log, if the user has enabled it
		if (params.lognomination) {
			Twinkle.image.callbacks.addToLog(params, initialContrib);
		}
	},
	addToLog: function(params, initialContrib) {
		var usl = new Morebits.userspaceLogger(Twinkle.getPref('speedyLogPageName'));
		usl.initialText =
			"This is a log of all [[WP:CSD|speedy deletion]] nominations made by this user using [[WP:TW|Twinkle]]'s CSD module.\n\n" +
			'If you no longer wish to keep this log, you can turn it off using the [[Wikipedia:Twinkle/Preferences|preferences panel]], and ' +
			'nominate this page for speedy deletion under [[WP:CSD#U1|CSD U1]].' +
			(Morebits.userIsSysop ? '\n\nThis log does not track outright speedy deletions made using Twinkle.' : '');

		var formatParamLog = function(normalize, csdparam, input) {
			if (normalize === 'F5' && csdparam === 'replacement') {
				input = '[[:' + 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 = ' ([{{fullurl:Special:Log|page=' + mw.util.wikiUrlencode(mw.config.get('wgPageName')) + '}} log])';

		var appendText = '# [[:' + Morebits.pageNameNorm + ']]' + fileLogLink + ': DI [[WP:CSD#' + params.normalized.toUpperCase() + '|CSD ' + params.normalized.toUpperCase() + ']] ({{tl|di-' + params.templatename + '}})';

		['reason', 'replacement', 'source'].forEach(function(item) {
			if (params[item]) {
				extraInfo += formatParamLog(params.normalized.toUpperCase(), item, params[item]);
				return false;
			}
		});

		if (extraInfo) {
			appendText += '; additional information:' + extraInfo;
		}
		if (initialContrib) {
			appendText += '; notified {{user|1=' + initialContrib + '}}';
		}
		appendText += ' ~~~~~\n';

		var editsummary = 'Logging speedy deletion nomination of [[:' + Morebits.pageNameNorm + ']].';

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

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


//  </nowiki>