<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinkleimage.js</id>
	<title>MediaWiki:Gadget-twinkleimage.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.endmyopia.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinkleimage.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-twinkleimage.js&amp;action=history"/>
	<updated>2026-05-06T20:00:28Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-twinkleimage.js&amp;diff=8581&amp;oldid=prev</id>
		<title>NottNott: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-twinkleimage.js&amp;diff=8581&amp;oldid=prev"/>
		<updated>2020-06-12T10:46:06Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 10:46, 12 June 2020&lt;/td&gt;
				&lt;/tr&gt;
&lt;!-- diff cache key jakeendmy_mw1720-mwnr_:diff::1.12:old-8580:rev-8581 --&gt;
&lt;/table&gt;</summary>
		<author><name>NottNott</name></author>
	</entry>
	<entry>
		<id>https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-twinkleimage.js&amp;diff=8580&amp;oldid=prev</id>
		<title>en&gt;Amorymeltzer: Repo at f1b0573: Don't assume a replacement was specified (#822)</title>
		<link rel="alternate" type="text/html" href="https://wiki.endmyopia.org/index.php?title=MediaWiki:Gadget-twinkleimage.js&amp;diff=8580&amp;oldid=prev"/>
		<updated>2020-01-27T10:47:21Z</updated>

		<summary type="html">&lt;p&gt;Repo at f1b0573: Don&amp;#039;t assume a replacement was specified (#822)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(function($) {&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 ****************************************&lt;br /&gt;
 *** twinkleimage.js: Image CSD module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;DI&amp;quot;)&lt;br /&gt;
 * Active on:              Local nonredirect file pages (not on Commons)&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.image = function twinkleimage() {&lt;br /&gt;
	if (mw.config.get('wgNamespaceNumber') === 6 &amp;amp;&amp;amp; mw.config.get('wgArticleId') &amp;amp;&amp;amp; !document.getElementById('mw-sharedupload') &amp;amp;&amp;amp; !Morebits.wiki.isPageRedirect()) {&lt;br /&gt;
		Twinkle.addPortletLink(Twinkle.image.callback, 'DI', 'tw-di', 'Nominate file for delayed speedy deletion');&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback = function twinkleimageCallback() {&lt;br /&gt;
	var Window = new Morebits.simpleWindow(600, 330);&lt;br /&gt;
	Window.setTitle('File for dated speedy deletion');&lt;br /&gt;
	Window.setScriptName('Twinkle');&lt;br /&gt;
	Window.addFooterLink('Speedy deletion policy', 'WP:CSD#Files');&lt;br /&gt;
	Window.addFooterLink('Twinkle help', 'WP:TW/DOC#image');&lt;br /&gt;
&lt;br /&gt;
	var form = new Morebits.quickForm(Twinkle.image.callback.evaluate);&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: 'checkbox',&lt;br /&gt;
		list: [&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Notify original uploader',&lt;br /&gt;
				value: 'notify',&lt;br /&gt;
				name: 'notify',&lt;br /&gt;
				tooltip: &amp;quot;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.&amp;quot;,&lt;br /&gt;
				checked: Twinkle.getPref('notifyUserOnDeli')&lt;br /&gt;
			}&lt;br /&gt;
		]&lt;br /&gt;
	}&lt;br /&gt;
	);&lt;br /&gt;
	var field = form.append({&lt;br /&gt;
		type: 'field',&lt;br /&gt;
		label: 'Type of action wanted'&lt;br /&gt;
	});&lt;br /&gt;
	field.append({&lt;br /&gt;
		type: 'radio',&lt;br /&gt;
		name: 'type',&lt;br /&gt;
		event: Twinkle.image.callback.choice,&lt;br /&gt;
		list: [&lt;br /&gt;
			{&lt;br /&gt;
				label: 'No source (CSD F4)',&lt;br /&gt;
				value: 'no source',&lt;br /&gt;
				checked: true,&lt;br /&gt;
				tooltip: 'Image or media has no source information'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'No license (CSD F4)',&lt;br /&gt;
				value: 'no license',&lt;br /&gt;
				tooltip: 'Image or media does not have information on its copyright status'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'No source and no license (CSD F4)',&lt;br /&gt;
				value: 'no source no license',&lt;br /&gt;
				tooltip: 'Image or media has neither information on source nor its copyright status'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Orphaned fair use (CSD F5)',&lt;br /&gt;
				value: 'orphaned fair use',&lt;br /&gt;
				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'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'No fair use rationale (CSD F6)',&lt;br /&gt;
				value: 'no fair use rationale',&lt;br /&gt;
				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'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Disputed fair use rationale (CSD F7)',&lt;br /&gt;
				value: 'disputed fair use rationale',&lt;br /&gt;
				tooltip: 'Image or media has a fair use rationale that is disputed'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'Replaceable fair use (CSD F7)',&lt;br /&gt;
				value: 'replaceable fair use',&lt;br /&gt;
				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'&lt;br /&gt;
			},&lt;br /&gt;
			{&lt;br /&gt;
				label: 'No evidence of permission (CSD F11)',&lt;br /&gt;
				value: 'no permission',&lt;br /&gt;
				tooltip: 'Image or media does not have proof that the author agreed to licence the file'&lt;br /&gt;
			}&lt;br /&gt;
		]&lt;br /&gt;
	});&lt;br /&gt;
	form.append({&lt;br /&gt;
		type: 'div',&lt;br /&gt;
		label: 'Work area',&lt;br /&gt;
		name: 'work_area'&lt;br /&gt;
	});&lt;br /&gt;
	form.append({ type: 'submit' });&lt;br /&gt;
&lt;br /&gt;
	var result = form.render();&lt;br /&gt;
	Window.setContent(result);&lt;br /&gt;
	Window.display();&lt;br /&gt;
&lt;br /&gt;
	// We must init the parameters&lt;br /&gt;
	var evt = document.createEvent('Event');&lt;br /&gt;
	evt.initEvent('change', true, true);&lt;br /&gt;
	result.type[0].dispatchEvent(evt);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback.choice = function twinkleimageCallbackChoose(event) {&lt;br /&gt;
	var value = event.target.values;&lt;br /&gt;
	var root = event.target.form;&lt;br /&gt;
	var work_area = new Morebits.quickForm.element({&lt;br /&gt;
		type: 'div',&lt;br /&gt;
		name: 'work_area'&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
	switch (value) {&lt;br /&gt;
		case 'no source no license':&lt;br /&gt;
		case 'no source':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				name: 'non_free',&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: 'Non-free',&lt;br /&gt;
						tooltip: 'File is licensed under a fair use claim'&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			});&lt;br /&gt;
		/* falls through */&lt;br /&gt;
		case 'no license':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'checkbox',&lt;br /&gt;
				name: 'derivative',&lt;br /&gt;
				list: [&lt;br /&gt;
					{&lt;br /&gt;
						label: 'Derivative work which lacks a source for incorporated works',&lt;br /&gt;
						tooltip: 'File is a derivative of one or more other works whose source is not specified'&lt;br /&gt;
					}&lt;br /&gt;
				]&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case 'no permission':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'input',&lt;br /&gt;
				name: 'source',&lt;br /&gt;
				label: 'Source: '&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case 'disputed fair use rationale':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'textarea',&lt;br /&gt;
				name: 'reason',&lt;br /&gt;
				label: 'Concern: '&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case 'orphaned fair use':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'input',&lt;br /&gt;
				name: 'replacement',&lt;br /&gt;
				label: 'Replacement: ',&lt;br /&gt;
				tooltip: 'Optional file that replaces this one.  The &amp;quot;File:&amp;quot; prefix is optional.'&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		case 'replaceable fair use':&lt;br /&gt;
			work_area.append({&lt;br /&gt;
				type: 'textarea',&lt;br /&gt;
				name: 'reason',&lt;br /&gt;
				label: 'Reason: '&lt;br /&gt;
			});&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	root.replaceChild(work_area.render(), $(root).find('div[name=&amp;quot;work_area&amp;quot;]')[0]);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callback.evaluate = function twinkleimageCallbackEvaluate(event) {&lt;br /&gt;
	var type, non_free, source, reason, replacement, derivative;&lt;br /&gt;
&lt;br /&gt;
	var notify = event.target.notify.checked;&lt;br /&gt;
	var types = event.target.type;&lt;br /&gt;
	for (var i = 0; i &amp;lt; types.length; ++i) {&lt;br /&gt;
		if (types[i].checked) {&lt;br /&gt;
			type = types[i].values;&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if (event.target.non_free) {&lt;br /&gt;
		non_free = event.target.non_free.checked;&lt;br /&gt;
	}&lt;br /&gt;
	if (event.target.source) {&lt;br /&gt;
		source = event.target.source.value;&lt;br /&gt;
	}&lt;br /&gt;
	if (event.target.reason) {&lt;br /&gt;
		reason = event.target.reason.value;&lt;br /&gt;
	}&lt;br /&gt;
	if (event.target.replacement &amp;amp;&amp;amp; event.target.replacement.value.trim()) {&lt;br /&gt;
		replacement = event.target.replacement.value;&lt;br /&gt;
		replacement = /^\s*(Image|File):/i.test(replacement) ? replacement : 'File:' + replacement;&lt;br /&gt;
	}&lt;br /&gt;
	if (event.target.derivative) {&lt;br /&gt;
		derivative = event.target.derivative.checked;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var csdcrit;&lt;br /&gt;
	switch (type) {&lt;br /&gt;
		case 'no source no license':&lt;br /&gt;
		case 'no source':&lt;br /&gt;
		case 'no license':&lt;br /&gt;
			csdcrit = 'F4';&lt;br /&gt;
			break;&lt;br /&gt;
		case 'orphaned fair use':&lt;br /&gt;
			csdcrit = 'F5';&lt;br /&gt;
			break;&lt;br /&gt;
		case 'no fair use rationale':&lt;br /&gt;
			csdcrit = 'F6';&lt;br /&gt;
			break;&lt;br /&gt;
		case 'disputed fair use rationale':&lt;br /&gt;
		case 'replaceable fair use':&lt;br /&gt;
			csdcrit = 'F7';&lt;br /&gt;
			break;&lt;br /&gt;
		case 'no permission':&lt;br /&gt;
			csdcrit = 'F11';&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			throw new Error('Twinkle.image.callback.evaluate: unknown criterion');&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var lognomination = Twinkle.getPref('logSpeedyNominations') &amp;amp;&amp;amp; Twinkle.getPref('noLogOnSpeedyNomination').indexOf(csdcrit.toLowerCase()) === -1;&lt;br /&gt;
	var templatename = derivative ? 'dw ' + type : type;&lt;br /&gt;
&lt;br /&gt;
	var params = {&lt;br /&gt;
		'type': type,&lt;br /&gt;
		'templatename': templatename,&lt;br /&gt;
		'normalized': csdcrit,&lt;br /&gt;
		'non_free': non_free,&lt;br /&gt;
		'source': source,&lt;br /&gt;
		'reason': reason,&lt;br /&gt;
		'replacement': replacement,&lt;br /&gt;
		'lognomination': lognomination&lt;br /&gt;
	};&lt;br /&gt;
	Morebits.simpleWindow.setButtonsEnabled(false);&lt;br /&gt;
	Morebits.status.init(event.target);&lt;br /&gt;
&lt;br /&gt;
	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');&lt;br /&gt;
	Morebits.wiki.actionCompleted.notice = 'Tagging complete';&lt;br /&gt;
&lt;br /&gt;
	// Tagging image&lt;br /&gt;
	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'Tagging file with deletion tag');&lt;br /&gt;
	wikipedia_page.setCallbackParameters(params);&lt;br /&gt;
	wikipedia_page.load(Twinkle.image.callbacks.taggingImage);&lt;br /&gt;
&lt;br /&gt;
	// Notifying uploader&lt;br /&gt;
	if (notify) {&lt;br /&gt;
		wikipedia_page.lookupCreation(Twinkle.image.callbacks.userNotification);&lt;br /&gt;
	} else {&lt;br /&gt;
		// add to CSD log if desired&lt;br /&gt;
		if (lognomination) {&lt;br /&gt;
			params.fromDI = true;&lt;br /&gt;
			Twinkle.speedy.callbacks.user.addToLog(params, null);&lt;br /&gt;
		}&lt;br /&gt;
		// No auto-notification, display what was going to be added.&lt;br /&gt;
		var noteData = document.createElement('pre');&lt;br /&gt;
		noteData.appendChild(document.createTextNode('{{subst:di-' + templatename + '-notice|1=' + mw.config.get('wgTitle') + '}} ~~~~'));&lt;br /&gt;
		Morebits.status.info('Notification', [ 'Following/similar data should be posted to the original uploader:', document.createElement('br'), noteData ]);&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.image.callbacks = {&lt;br /&gt;
	taggingImage: function(pageobj) {&lt;br /&gt;
		var text = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		// remove &amp;quot;move to Commons&amp;quot; tag - deletion-tagged files cannot be moved to Commons&lt;br /&gt;
		text = text.replace(/\{\{(mtc|(copy |move )?to ?commons|move to wikimedia commons|copy to wikimedia commons)[^}]*\}\}/gi, '');&lt;br /&gt;
&lt;br /&gt;
		var tag = '{{di-' + params.templatename + '|date={{subst:#time:j F Y}}';&lt;br /&gt;
		switch (params.type) {&lt;br /&gt;
			case 'no source no license':&lt;br /&gt;
			case 'no source':&lt;br /&gt;
				tag += params.non_free ? '|non-free=yes' : '';&lt;br /&gt;
				break;&lt;br /&gt;
			case 'no permission':&lt;br /&gt;
				tag += params.source ? '|source=' + params.source : '';&lt;br /&gt;
				break;&lt;br /&gt;
			case 'disputed fair use rationale':&lt;br /&gt;
				tag += params.reason ? '|concern=' + params.reason : '';&lt;br /&gt;
				break;&lt;br /&gt;
			case 'orphaned fair use':&lt;br /&gt;
				tag += params.replacement ? '|replacement=' + params.replacement : '';&lt;br /&gt;
				break;&lt;br /&gt;
			case 'replaceable fair use':&lt;br /&gt;
				tag += params.reason ? '|1=' + params.reason : '';&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				break;  // doesn't matter&lt;br /&gt;
		}&lt;br /&gt;
		tag += '|help=off}}\n';&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(tag + text);&lt;br /&gt;
		pageobj.setEditSummary('This file is up for deletion, per [[WP:CSD#' + params.normalized + '|CSD ' + params.normalized + ']] (' + params.type + ').' + Twinkle.getPref('summaryAd'));&lt;br /&gt;
		switch (Twinkle.getPref('deliWatchPage')) {&lt;br /&gt;
			case 'yes':&lt;br /&gt;
				pageobj.setWatchlist(true);&lt;br /&gt;
				break;&lt;br /&gt;
			case 'no':&lt;br /&gt;
				pageobj.setWatchlistFromPreferences(false);&lt;br /&gt;
				break;&lt;br /&gt;
			default:&lt;br /&gt;
				pageobj.setWatchlistFromPreferences(true);&lt;br /&gt;
				break;&lt;br /&gt;
		}&lt;br /&gt;
		pageobj.setCreateOption('nocreate');&lt;br /&gt;
		pageobj.save();&lt;br /&gt;
	},&lt;br /&gt;
	userNotification: function(pageobj) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var initialContrib = pageobj.getCreator();&lt;br /&gt;
&lt;br /&gt;
		// disallow warning yourself&lt;br /&gt;
		if (initialContrib === mw.config.get('wgUserName')) {&lt;br /&gt;
			pageobj.getStatusElement().warn('You (' + initialContrib + ') created this page; skipping user notification');&lt;br /&gt;
		} else {&lt;br /&gt;
			var usertalkpage = new Morebits.wiki.page('User talk:' + initialContrib, 'Notifying initial contributor (' + initialContrib + ')');&lt;br /&gt;
			var notifytext = '\n{{subst:di-' + params.templatename + '-notice|1=' + mw.config.get('wgTitle');&lt;br /&gt;
			if (params.type === 'no permission') {&lt;br /&gt;
				notifytext += params.source ? '|source=' + params.source : '';&lt;br /&gt;
			}&lt;br /&gt;
			notifytext += '}} ~~~~';&lt;br /&gt;
			usertalkpage.setAppendText(notifytext);&lt;br /&gt;
			usertalkpage.setEditSummary('Notification: tagging for deletion of [[:' + Morebits.pageNameNorm + ']].' + Twinkle.getPref('summaryAd'));&lt;br /&gt;
			usertalkpage.setCreateOption('recreate');&lt;br /&gt;
			switch (Twinkle.getPref('deliWatchUser')) {&lt;br /&gt;
				case 'yes':&lt;br /&gt;
					usertalkpage.setWatchlist(true);&lt;br /&gt;
					break;&lt;br /&gt;
				case 'no':&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(false);&lt;br /&gt;
					break;&lt;br /&gt;
				default:&lt;br /&gt;
					usertalkpage.setWatchlistFromPreferences(true);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
			usertalkpage.setFollowRedirect(true);&lt;br /&gt;
			usertalkpage.append();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// add this nomination to the user's userspace log, if the user has enabled it&lt;br /&gt;
		if (params.lognomination) {&lt;br /&gt;
			params.fromDI = true;&lt;br /&gt;
			Twinkle.speedy.callbacks.user.addToLog(params, initialContrib);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
})(jQuery);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>en&gt;Amorymeltzer</name></author>
	</entry>
</feed>