Nota: dopo aver salvato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tenere premuto il tasto delle maiuscole e fare clic su Ricarica, oppure premere Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premere Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer: tenere premuto il tasto Ctrl mentre si fa clic su Refresh, oppure premere Ctrl-F5
  • Opera: svuotare completamente la cache dal menu Strumenti → Preferenze
// <nowiki>   (function($) {   /*  ****************************************  *** twinkleimage.js: Image CSD module  ****************************************  * Mode of invocation:     Tab ("DI")  * Active on:              Local nonredirect file pages (not on Commons)  */  Twinkle.image = function twinkleimage() { 	if (mw.config.get('wgNamespaceNumber') === 6 && mw.config.get('wgArticleId') && !document.getElementById('mw-sharedupload') && !Morebits.wiki.isPageRedirect()) { 		Twinkle.addPortletLink(Twinkle.image.callback, 'DI', 'tw-di', 'Nominate file for delayed speedy deletion'); 	} };  Twinkle.image.callback = function twinkleimageCallback() { 	var Window = new Morebits.simpleWindow(600, 330); 	Window.setTitle('File for dated speedy deletion'); 	Window.setScriptName('Twinkle'); 	Window.addFooterLink('Speedy deletion policy', 'WP:CSD#Files'); 	Window.addFooterLink('Twinkle help', 'WP:TW/DOC#image');  	var form = new Morebits.quickForm(Twinkle.image.callback.evaluate); 	form.append({ 		type: 'checkbox', 		list: [ 			{ 				label: 'Notify original uploader', 				value: 'notify', 				name: 'notify', 				tooltip: "Uncheck this if you are planning to make multiple nominations from the same user, and don't want to overload their talk page with too many notifications.", 				checked: Twinkle.getPref('notifyUserOnDeli') 			} 		] 	} 	); 	var field = form.append({ 		type: 'field', 		label: 'Type of action wanted' 	}); 	field.append({ 		type: 'radio', 		name: 'type', 		event: Twinkle.image.callback.choice, 		list: [ 			{ 				label: 'No source (CSD F4)', 				value: 'no source', 				checked: true, 				tooltip: 'Image or media has no source information' 			}, 			{ 				label: 'No license (CSD F4)', 				value: 'no license', 				tooltip: 'Image or media does not have information on its copyright status' 			}, 			{ 				label: 'No source and no license (CSD F4)', 				value: 'no source no license', 				tooltip: 'Image or media has neither information on source nor its copyright status' 			}, 			{ 				label: 'Orphaned fair use (CSD F5)', 				value: 'orphaned fair use', 				tooltip: 'Image or media is unlicensed for use on Wikipedia and allowed only under a claim of fair use per Wikipedia:Non-free content, but it is not used in any articles' 			}, 			{ 				label: 'No fair use rationale (CSD F6)', 				value: 'no fair use rationale', 				tooltip: 'Image or media is claimed to be used under Wikipedia\'s fair use policy but has no explanation as to why it is permitted under the policy' 			}, 			{ 				label: 'Disputed fair use rationale (CSD F7)', 				value: 'disputed fair use rationale', 				tooltip: 'Image or media has a fair use rationale that is disputed' 			}, 			{ 				label: 'Replaceable fair use (CSD F7)', 				value: 'replaceable fair use', 				tooltip: 'Image or media may fail Wikipedia\'s first non-free content criterion ([[WP:NFCC#1]]) in that it illustrates a subject for which a free image might reasonably be found or created that adequately provides the same information' 			}, 			{ 				label: 'No evidence of permission (CSD F11)', 				value: 'no permission', 				tooltip: 'Image or media does not have proof that the author agreed to licence the file' 			} 		] 	}); 	form.append({ 		type: 'div', 		label: 'Work area', 		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 'no source no license': 		case 'no source': 			work_area.append({ 				type: 'checkbox', 				name: 'non_free', 				list: [ 					{ 						label: 'Non-free', 						tooltip: 'File is licensed under a fair use claim' 					} 				] 			}); 		/* falls through */ 		case 'no license': 			work_area.append({ 				type: 'checkbox', 				name: 'derivative', 				list: [ 					{ 						label: 'Derivative work which lacks a source for incorporated works', 						tooltip: 'File is a derivative of one or more other works whose source is not specified' 					} 				] 			}); 			break; 		case 'no permission': 			work_area.append({ 				type: 'input', 				name: 'source', 				label: 'Source: ' 			}); 			break; 		case 'disputed fair use rationale': 			work_area.append({ 				type: 'textarea', 				name: 'reason', 				label: 'Concern: ' 			}); 			break; 		case 'orphaned fair use': 			work_area.append({ 				type: 'input', 				name: 'replacement', 				label: 'Replacement: ', 				tooltip: 'Optional file that replaces this one.  The "File:" prefix is optional.' 			}); 			break; 		case 'replaceable fair use': 			work_area.append({ 				type: 'textarea', 				name: 'reason', 				label: 'Reason: ' 			}); 			break; 		default: 			break; 	}  	root.replaceChild(work_area.render(), $(root).find('div[name="work_area"]')[0]); };  Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) { 	var type, non_free, source, reason, replacement, derivative;  	var notify = event.target.notify.checked; 	var types = event.target.type; 	for (var i = 0; i < types.length; ++i) { 		if (types[i].checked) { 			type = types[i].values; 			break; 		} 	} 	if (event.target.non_free) { 		non_free = event.target.non_free.checked; 	} 	if (event.target.source) { 		source = event.target.source.value; 	} 	if (event.target.reason) { 		reason = event.target.reason.value; 	} 	if (event.target.replacement && event.target.replacement.value.trim()) { 		replacement = event.target.replacement.value; 		replacement = /^\s*(Image|File):/i.test(replacement) ? replacement : 'File:' + replacement; 	} 	if (event.target.derivative) { 		derivative = event.target.derivative.checked; 	}  	var csdcrit; 	switch (type) { 		case 'no source no license': 		case 'no source': 		case 'no license': 			csdcrit = 'F4'; 			break; 		case 'orphaned fair use': 			csdcrit = 'F5'; 			break; 		case 'no fair use rationale': 			csdcrit = 'F6'; 			break; 		case 'disputed fair use rationale': 		case 'replaceable fair use': 			csdcrit = 'F7'; 			break; 		case 'no permission': 			csdcrit = 'F11'; 			break; 		default: 			throw new Error('Twinkle.image.callback.evaluate: unknown criterion'); 	}  	var lognomination = Twinkle.getPref('logSpeedyNominations') && Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1; 	var templatename = derivative ? 'dw ' + type : type;  	var params = { 		'type': type, 		'templatename': templatename, 		'normalized': csdcrit, 		'non_free': non_free, 		'source': source, 		'reason': reason, 		'replacement': replacement, 		'lognomination': lognomination 	}; 	Morebits.simpleWindow.setButtonsEnabled(false); 	Morebits.status.init(event.target);  	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName'); 	Morebits.wiki.actionCompleted.notice = 'Tagging complete';  	// Tagging image 	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'Tagging file with deletion tag'); 	wikipedia_page.setCallbackParameters(params); 	wikipedia_page.load(Twinkle.image.callbacks.taggingImage);  	// Notifying uploader 	if (notify) { 		wikipedia_page.lookupCreation(Twinkle.image.callbacks.userNotification); 	} else { 		// add to CSD log if desired 		if (lognomination) { 			params.fromDI = true; 			Twinkle.speedy.callbacks.user.addToLog(params, null); 		} 		// No auto-notification, display what was going to be added. 		var noteData = document.createElement('pre'); 		noteData.appendChild(document.createTextNode('{{subst:di-' + templatename + '-notice|1=' + mw.config.get('wgTitle') + '}} ~~~~')); 		Morebits.status.info('Notification', [ 'Following/similar data should be posted to the original uploader:', 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)[^}]*\}\}/gi, '');  		var tag = '{{di-' + params.templatename + '|date={{subst:#time:j F Y}}'; 		switch (params.type) { 			case 'no source no license': 			case 'no source': 				tag += params.non_free ? '|non-free=yes' : ''; 				break; 			case 'no permission': 				tag += params.source ? '|source=' + params.source : ''; 				break; 			case 'disputed fair use rationale': 				tag += params.reason ? '|concern=' + params.reason : ''; 				break; 			case 'orphaned fair use': 				tag += params.replacement ? '|replacement=' + params.replacement : ''; 				break; 			case 'replaceable fair use': 				tag += params.reason ? '|1=' + params.reason : ''; 				break; 			default: 				break;  // doesn't matter 		} 		tag += '|help=off}}\n';  		pageobj.setPageText(tag + text); 		pageobj.setEditSummary('This file is up for deletion, per [[WP:CSD#' + params.normalized + '|CSD ' + params.normalized + ']] (' + params.type + ').' + Twinkle.getPref('summaryAd')); 		switch (Twinkle.getPref('deliWatchPage')) { 			case 'yes': 				pageobj.setWatchlist(true); 				break; 			case 'no': 				pageobj.setWatchlistFromPreferences(false); 				break; 			default: 				pageobj.setWatchlistFromPreferences(true); 				break; 		} 		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('You (' + initialContrib + ') created this page; skipping user notification'); 		} else { 			var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, 'Notifying initial contributor (' + initialContrib + ')'); 			var notifytext = '\n{{subst:di-' + params.templatename + '-notice|1=' + mw.config.get('wgTitle'); 			if (params.type === 'no permission') { 				notifytext += params.source ? '|source=' + params.source : ''; 			} 			notifytext += '}} ~~~~'; 			usertalkpage.setAppendText(notifytext); 			usertalkpage.setEditSummary('Notification: tagging for deletion of [[:' + Morebits.pageNameNorm + ']].' + Twinkle.getPref('summaryAd')); 			usertalkpage.setCreateOption('recreate'); 			switch (Twinkle.getPref('deliWatchUser')) { 				case 'yes': 					usertalkpage.setWatchlist(true); 					break; 				case 'no': 					usertalkpage.setWatchlistFromPreferences(false); 					break; 				default: 					usertalkpage.setWatchlistFromPreferences(true); 					break; 			} 			usertalkpage.setFollowRedirect(true); 			usertalkpage.append(); 		}  		// add this nomination to the user's userspace log, if the user has enabled it 		if (params.lognomination) { 			params.fromDI = true; 			Twinkle.speedy.callbacks.user.addToLog(params, initialContrib); 		} 	} }; })(jQuery);   // </nowiki>