<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nl">
	<id>https://informatiestandaarden.test-nictiz.nl/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinkleunlink.js</id>
	<title>MediaWiki:Gadget-twinkleunlink.js - Bewerkingsoverzicht</title>
	<link rel="self" type="application/atom+xml" href="https://informatiestandaarden.test-nictiz.nl/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-twinkleunlink.js"/>
	<link rel="alternate" type="text/html" href="https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-twinkleunlink.js&amp;action=history"/>
	<updated>2026-04-23T18:38:39Z</updated>
	<subtitle>Bewerkingsoverzicht voor deze pagina op de wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-twinkleunlink.js&amp;diff=3293&amp;oldid=prev</id>
		<title>Ahenket: 1 versie: Twinkle</title>
		<link rel="alternate" type="text/html" href="https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-twinkleunlink.js&amp;diff=3293&amp;oldid=prev"/>
		<updated>2013-07-19T18:37:38Z</updated>

		<summary type="html">&lt;p&gt;1 versie: Twinkle&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nieuwe pagina&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;
 *** twinkleunlink.js: Unlink module&lt;br /&gt;
 ****************************************&lt;br /&gt;
 * Mode of invocation:     Tab (&amp;quot;Unlink&amp;quot;)&lt;br /&gt;
 * Active on:              Non-special pages&lt;br /&gt;
 * Config directives in:   TwinkleConfig&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink = function twinkleunlink() {&lt;br /&gt;
	if( mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) &amp;lt; 0 ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	Twinkle.addPortletLink( Twinkle.unlink.callback, &amp;quot;Unlink&amp;quot;, &amp;quot;tw-unlink&amp;quot;, &amp;quot;Unlink backlinks&amp;quot; );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.getChecked2 = function twinkleunlinkGetChecked2( nodelist ) {&lt;br /&gt;
	if( !( nodelist instanceof NodeList ) &amp;amp;&amp;amp; !( nodelist instanceof HTMLCollection ) ) {&lt;br /&gt;
		return nodelist.checked ? [ nodelist.values ] : [];&lt;br /&gt;
	}&lt;br /&gt;
	var result = [];&lt;br /&gt;
	for(var i  = 0; i &amp;lt; nodelist.length; ++i ) {&lt;br /&gt;
		if( nodelist[i].checked ) {&lt;br /&gt;
			result.push( nodelist[i].values );&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// the parameter is used when invoking unlink from admin speedy&lt;br /&gt;
Twinkle.unlink.callback = function(presetReason) {&lt;br /&gt;
	var Window = new Morebits.simpleWindow( 800, 400 );&lt;br /&gt;
	Window.setTitle( &amp;quot;Unlink backlinks&amp;quot; + (mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === 6 ? &amp;quot; and file usages&amp;quot; : &amp;quot;&amp;quot;) );&lt;br /&gt;
	Window.setScriptName( &amp;quot;Twinkle&amp;quot; );&lt;br /&gt;
	Window.addFooterLink( &amp;quot;Twinkle help&amp;quot;, &amp;quot;WP:TW/DOC#unlink&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
	var form = new Morebits.quickForm( Twinkle.unlink.callback.evaluate );&lt;br /&gt;
	form.append( {&lt;br /&gt;
		type: &amp;#039;textarea&amp;#039;,&lt;br /&gt;
		name: &amp;#039;reason&amp;#039;,&lt;br /&gt;
		label: &amp;#039;Reason: &amp;#039;,&lt;br /&gt;
		value: (presetReason ? presetReason : &amp;#039;&amp;#039;)&lt;br /&gt;
	} );&lt;br /&gt;
&lt;br /&gt;
	var query;&lt;br /&gt;
	if(mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === 6) {  // File:&lt;br /&gt;
		query = {&lt;br /&gt;
			&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
			&amp;#039;list&amp;#039;: [ &amp;#039;backlinks&amp;#039;, &amp;#039;imageusage&amp;#039; ],&lt;br /&gt;
			&amp;#039;bltitle&amp;#039;: mw.config.get(&amp;#039;wgPageName&amp;#039;),&lt;br /&gt;
			&amp;#039;iutitle&amp;#039;: mw.config.get(&amp;#039;wgPageName&amp;#039;),&lt;br /&gt;
			&amp;#039;bllimit&amp;#039;: Morebits.userIsInGroup( &amp;#039;sysop&amp;#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&amp;#039;iulimit&amp;#039;: Morebits.userIsInGroup( &amp;#039;sysop&amp;#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&amp;#039;blnamespace&amp;#039;: Twinkle.getPref(&amp;#039;unlinkNamespaces&amp;#039;),&lt;br /&gt;
			&amp;#039;iunamespace&amp;#039;: Twinkle.getPref(&amp;#039;unlinkNamespaces&amp;#039;)&lt;br /&gt;
		};&lt;br /&gt;
	} else {&lt;br /&gt;
		query = {&lt;br /&gt;
			&amp;#039;action&amp;#039;: &amp;#039;query&amp;#039;,&lt;br /&gt;
			&amp;#039;list&amp;#039;: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
			&amp;#039;bltitle&amp;#039;: mw.config.get(&amp;#039;wgPageName&amp;#039;),&lt;br /&gt;
			&amp;#039;blfilterredir&amp;#039;: &amp;#039;nonredirects&amp;#039;,&lt;br /&gt;
			&amp;#039;bllimit&amp;#039;: Morebits.userIsInGroup( &amp;#039;sysop&amp;#039; ) ? 5000 : 500, // 500 is max for normal users, 5000 for bots and sysops&lt;br /&gt;
			&amp;#039;blnamespace&amp;#039;: Twinkle.getPref(&amp;#039;unlinkNamespaces&amp;#039;)&lt;br /&gt;
		};&lt;br /&gt;
	}&lt;br /&gt;
	var wikipedia_api = new Morebits.wiki.api( &amp;#039;Grabbing backlinks&amp;#039;, query, Twinkle.unlink.callbacks.display.backlinks );&lt;br /&gt;
	wikipedia_api.params = { form: form, Window: Window, image: mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === 6 };&lt;br /&gt;
	wikipedia_api.post();&lt;br /&gt;
&lt;br /&gt;
	var root = document.createElement( &amp;#039;div&amp;#039; );&lt;br /&gt;
	root.style.padding = &amp;#039;15px&amp;#039;;  // just so it doesn&amp;#039;t look broken&lt;br /&gt;
	Morebits.status.init( root );&lt;br /&gt;
	wikipedia_api.statelem.status( &amp;quot;loading...&amp;quot; );&lt;br /&gt;
	Window.setContent( root );&lt;br /&gt;
	Window.display();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.callback.evaluate = function twinkleunlinkCallbackEvaluate(event) {&lt;br /&gt;
	Twinkle.unlink.backlinksdone = 0;&lt;br /&gt;
	Twinkle.unlink.imageusagedone = 0;&lt;br /&gt;
&lt;br /&gt;
	function processunlink(pages, imageusage) {&lt;br /&gt;
		var statusIndicator = new Morebits.status((imageusage ? &amp;#039;Unlinking instances of file usage&amp;#039; : &amp;#039;Unlinking backlinks&amp;#039;), &amp;#039;0%&amp;#039;);&lt;br /&gt;
		var total = pages.length;  // removing doubling of this number - no apparent reason for it&lt;br /&gt;
&lt;br /&gt;
		Morebits.wiki.addCheckpoint();&lt;br /&gt;
&lt;br /&gt;
		if( !pages.length ) {&lt;br /&gt;
			statusIndicator.info( &amp;#039;100% (completed)&amp;#039; );&lt;br /&gt;
			Morebits.wiki.removeCheckpoint();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// get an edit token&lt;br /&gt;
		var params = { reason: reason, imageusage: imageusage, globalstatus: statusIndicator, current: 0, total: total };&lt;br /&gt;
		for (var i = 0; i &amp;lt; pages.length; ++i)&lt;br /&gt;
		{&lt;br /&gt;
			var myparams = $.extend({}, params);&lt;br /&gt;
			var articlepage = new Morebits.wiki.page(pages[i], &amp;#039;Unlinking in article &amp;quot;&amp;#039; + pages[i] + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
			articlepage.setCallbackParameters(myparams);&lt;br /&gt;
			articlepage.setBotEdit(true);  // unlink considered a floody operation&lt;br /&gt;
			articlepage.load(imageusage ? Twinkle.unlink.callbacks.unlinkImageInstances : Twinkle.unlink.callbacks.unlinkBacklinks);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var reason = event.target.reason.value;&lt;br /&gt;
	if (!reason) {&lt;br /&gt;
		alert(&amp;quot;You must specify a reason for unlinking.&amp;quot;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var backlinks, imageusage;&lt;br /&gt;
	if( event.target.backlinks ) {&lt;br /&gt;
		backlinks = Twinkle.unlink.getChecked2(event.target.backlinks);&lt;br /&gt;
	}&lt;br /&gt;
	if( event.target.imageusage ) {&lt;br /&gt;
		imageusage = Twinkle.unlink.getChecked2(event.target.imageusage);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	Morebits.simpleWindow.setButtonsEnabled( false );&lt;br /&gt;
	Morebits.status.init( event.target );&lt;br /&gt;
	Morebits.wiki.addCheckpoint();&lt;br /&gt;
	if (backlinks) {&lt;br /&gt;
		processunlink(backlinks, false);&lt;br /&gt;
	}&lt;br /&gt;
	if (imageusage) {&lt;br /&gt;
		processunlink(imageusage, true);&lt;br /&gt;
	}&lt;br /&gt;
	Morebits.wiki.removeCheckpoint();&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.backlinksdone = 0;&lt;br /&gt;
Twinkle.unlink.imageusagedone = 0;&lt;br /&gt;
&lt;br /&gt;
Twinkle.unlink.callbacks = {&lt;br /&gt;
	display: {&lt;br /&gt;
		backlinks: function twinkleunlinkCallbackDisplayBacklinks(apiobj) {&lt;br /&gt;
			var xmlDoc = apiobj.responseXML;&lt;br /&gt;
			var havecontent = false;&lt;br /&gt;
			var list, namespaces, i;&lt;br /&gt;
&lt;br /&gt;
			if( apiobj.params.image ) {&lt;br /&gt;
				var imageusage = $(xmlDoc).find(&amp;#039;query imageusage iu&amp;#039;);&lt;br /&gt;
				list = [];&lt;br /&gt;
				for ( i = 0; i &amp;lt; imageusage.length; ++i ) {&lt;br /&gt;
					var usagetitle = imageusage[i].getAttribute(&amp;#039;title&amp;#039;);&lt;br /&gt;
					list.push( { label: usagetitle, value: usagetitle, checked: true } );&lt;br /&gt;
				}&lt;br /&gt;
				if (!list.length)&lt;br /&gt;
				{&lt;br /&gt;
					apiobj.params.form.append( { type: &amp;#039;div&amp;#039;, label: &amp;#039;No instances of file usage found.&amp;#039; } );&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					apiobj.params.form.append( { type:&amp;#039;header&amp;#039;, label: &amp;#039;File usage&amp;#039; } );&lt;br /&gt;
					namespaces = [];&lt;br /&gt;
					$.each(Twinkle.getPref(&amp;#039;unlinkNamespaces&amp;#039;), function(k, v) {&lt;br /&gt;
						namespaces.push(Morebits.wikipedia.namespacesFriendly[v]);&lt;br /&gt;
					});&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &amp;#039;div&amp;#039;,&lt;br /&gt;
						label: &amp;quot;Selected namespaces: &amp;quot; + namespaces.join(&amp;#039;, &amp;#039;),&lt;br /&gt;
						tooltip: &amp;quot;You can change this with your Twinkle preferences, at [[WP:TWPREFS]]&amp;quot;&lt;br /&gt;
					});&lt;br /&gt;
					if ($(xmlDoc).find(&amp;#039;query-continue&amp;#039;).length) {&lt;br /&gt;
						apiobj.params.form.append( {&lt;br /&gt;
							type: &amp;#039;div&amp;#039;,&lt;br /&gt;
							label: &amp;quot;First &amp;quot; + list.length.toString() + &amp;quot; file usages shown.&amp;quot;&lt;br /&gt;
						});&lt;br /&gt;
					}&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &amp;#039;checkbox&amp;#039;,&lt;br /&gt;
						name: &amp;#039;imageusage&amp;#039;,&lt;br /&gt;
						list: list&lt;br /&gt;
					} );&lt;br /&gt;
					havecontent = true;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var backlinks = $(xmlDoc).find(&amp;#039;query backlinks bl&amp;#039;);&lt;br /&gt;
			if( backlinks.length &amp;gt; 0 ) {&lt;br /&gt;
				list = [];&lt;br /&gt;
				for ( i = 0; i &amp;lt; backlinks.length; ++i ) {&lt;br /&gt;
					var title = backlinks[i].getAttribute(&amp;#039;title&amp;#039;);&lt;br /&gt;
					list.push( { label: title, value: title, checked: true } );&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.form.append( { type:&amp;#039;header&amp;#039;, label: &amp;#039;Backlinks&amp;#039; } );&lt;br /&gt;
				namespaces = [];&lt;br /&gt;
				$.each(Twinkle.getPref(&amp;#039;unlinkNamespaces&amp;#039;), function(k, v) {&lt;br /&gt;
					namespaces.push(Morebits.wikipedia.namespacesFriendly[v]);&lt;br /&gt;
				});&lt;br /&gt;
				apiobj.params.form.append( {&lt;br /&gt;
					type: &amp;#039;div&amp;#039;,&lt;br /&gt;
					label: &amp;quot;Selected namespaces: &amp;quot; + namespaces.join(&amp;#039;, &amp;#039;),&lt;br /&gt;
					tooltip: &amp;quot;You can change this with your Twinkle preferences, at [[WP:TWPREFS]]&amp;quot;&lt;br /&gt;
				});&lt;br /&gt;
				if ($(xmlDoc).find(&amp;#039;query-continue&amp;#039;).length) {&lt;br /&gt;
					apiobj.params.form.append( {&lt;br /&gt;
						type: &amp;#039;div&amp;#039;,&lt;br /&gt;
						label: &amp;quot;First &amp;quot; + list.length.toString() + &amp;quot; backlinks shown.&amp;quot;&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
				apiobj.params.form.append( {&lt;br /&gt;
					type: &amp;#039;checkbox&amp;#039;,&lt;br /&gt;
					name: &amp;#039;backlinks&amp;#039;,&lt;br /&gt;
					list: list&lt;br /&gt;
				});&lt;br /&gt;
				havecontent = true;&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				apiobj.params.form.append( { type: &amp;#039;div&amp;#039;, label: &amp;#039;No backlinks found.&amp;#039; } );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if (havecontent) {&lt;br /&gt;
				apiobj.params.form.append( { type:&amp;#039;submit&amp;#039; } );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var result = apiobj.params.form.render();&lt;br /&gt;
			apiobj.params.Window.setContent( result );&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	unlinkBacklinks: function twinkleunlinkCallbackUnlinkBacklinks(pageobj) {&lt;br /&gt;
		var text, oldtext;&lt;br /&gt;
		text = oldtext = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var wikiPage = new Morebits.wikitext.page(text);&lt;br /&gt;
		wikiPage.removeLink(Morebits.pageNameNorm);&lt;br /&gt;
		text = wikiPage.getText();&lt;br /&gt;
		if (text === oldtext) {&lt;br /&gt;
			// Nothing to do, return&lt;br /&gt;
			Twinkle.unlink.callbacks.success(pageobj);&lt;br /&gt;
			Morebits.wiki.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(&amp;quot;Removing link(s) to \&amp;quot;&amp;quot; + Morebits.pageNameNorm + &amp;quot;\&amp;quot;: &amp;quot; + params.reason + &amp;quot;.&amp;quot; + Twinkle.getPref(&amp;#039;summaryAd&amp;#039;));&lt;br /&gt;
		pageobj.setCreateOption(&amp;#039;nocreate&amp;#039;);&lt;br /&gt;
		pageobj.save(Twinkle.unlink.callbacks.success);&lt;br /&gt;
	},&lt;br /&gt;
	unlinkImageInstances: function twinkleunlinkCallbackUnlinkImageInstances(pageobj) {&lt;br /&gt;
		var text, oldtext;&lt;br /&gt;
		text = oldtext = pageobj.getPageText();&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
&lt;br /&gt;
		var wikiPage = new Morebits.wikitext.page(text);&lt;br /&gt;
		wikiPage.commentOutImage(mw.config.get(&amp;#039;wgTitle&amp;#039;), &amp;#039;Commented out&amp;#039;);&lt;br /&gt;
		text = wikiPage.getText();&lt;br /&gt;
		if (text === oldtext) {&lt;br /&gt;
			// Nothing to do, return&lt;br /&gt;
			Twinkle.unlink.callbacks.success(pageobj);&lt;br /&gt;
			Morebits.wiki.actionCompleted();&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		pageobj.setPageText(text);&lt;br /&gt;
		pageobj.setEditSummary(&amp;quot;Commenting out use(s) of file \&amp;quot;&amp;quot; + Morebits.pageNameNorm + &amp;quot;\&amp;quot;: &amp;quot; + params.reason + &amp;quot;.&amp;quot; + Twinkle.getPref(&amp;#039;summaryAd&amp;#039;));&lt;br /&gt;
		pageobj.setCreateOption(&amp;#039;nocreate&amp;#039;);&lt;br /&gt;
		pageobj.save(Twinkle.unlink.callbacks.success);&lt;br /&gt;
	},&lt;br /&gt;
	success: function twinkleunlinkCallbackSuccess(pageobj) {&lt;br /&gt;
		var params = pageobj.getCallbackParameters();&lt;br /&gt;
		var total = params.total;&lt;br /&gt;
		var now = parseInt( 100 * (params.imageusage ? ++(Twinkle.unlink.imageusagedone) : ++(Twinkle.unlink.backlinksdone))/total, 10 ) + &amp;#039;%&amp;#039;;&lt;br /&gt;
		params.globalstatus.update( now );&lt;br /&gt;
		if((params.imageusage ? Twinkle.unlink.imageusagedone : Twinkle.unlink.backlinksdone) &amp;gt;= total) {&lt;br /&gt;
			params.globalstatus.info( now + &amp;#039; (completed)&amp;#039; );&lt;br /&gt;
			Morebits.wiki.removeCheckpoint();&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>Ahenket</name></author>
	</entry>
</feed>