<?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-Twinkle.js</id>
	<title>MediaWiki:Gadget-Twinkle.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-Twinkle.js"/>
	<link rel="alternate" type="text/html" href="https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;action=history"/>
	<updated>2026-04-08T17:23:43Z</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-Twinkle.js&amp;diff=3277&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-Twinkle.js&amp;diff=3277&amp;oldid=prev"/>
		<updated>2013-07-19T18:37:37Z</updated>

		<summary type="html">&lt;p&gt;1 versie: Twinkle&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;nl&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Oudere versie&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Versie van 19 jul 2013 18:37&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;nl&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(geen verschil)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Ahenket</name></author>
	</entry>
	<entry>
		<id>https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=2145&amp;oldid=prev</id>
		<title>Maarten Ligtvoet: Nieuwe pagina aangemaakt met &#039;/**  * +-------------------------------------------------------------------------+  * |                  === WARNING: GLOBAL GADGET FILE ===                    |  *...&#039;</title>
		<link rel="alternate" type="text/html" href="https://informatiestandaarden.test-nictiz.nl/index.php?title=MediaWiki:Gadget-Twinkle.js&amp;diff=2145&amp;oldid=prev"/>
		<updated>2013-07-18T08:19:53Z</updated>

		<summary type="html">&lt;p&gt;Nieuwe pagina aangemaakt met &amp;#039;/**  * +-------------------------------------------------------------------------+  * |                  === WARNING: GLOBAL GADGET FILE ===                    |  *...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nieuwe pagina&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 * |                  === WARNING: GLOBAL GADGET FILE ===                    |&lt;br /&gt;
 * |                Changes to this page affect many users.                  |&lt;br /&gt;
 * |           Please discuss changes at [[WT:TW]] before editing.           |&lt;br /&gt;
 * +-------------------------------------------------------------------------+&lt;br /&gt;
 *&lt;br /&gt;
 * Imported from github [https://github.com/azatoth/twinkle].&lt;br /&gt;
 * All changes should be made in the repository, otherwise they will be lost.&lt;br /&gt;
 *&lt;br /&gt;
 * To update this script from github, you must have a local repository set up. Then&lt;br /&gt;
 * follow the instructions at [https://github.com/azatoth/twinkle/blob/master/README.md].&lt;br /&gt;
 *&lt;br /&gt;
 * ----------&lt;br /&gt;
 *&lt;br /&gt;
 * This is AzaToth&amp;#039;s Twinkle, the popular script sidekick for newbies, admins, and&lt;br /&gt;
 * every Wikipedian in between. Visit [[WP:TW]] for more information.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
//&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
( function ( window, document, $, undefined ) { // Wrap with anonymous function&lt;br /&gt;
&lt;br /&gt;
var Twinkle = {};&lt;br /&gt;
window.Twinkle = Twinkle;  // allow global access&lt;br /&gt;
&lt;br /&gt;
// Check if account is experienced enough to use Twinkle&lt;br /&gt;
Twinkle.userAuthorized = Morebits.userIsInGroup( &amp;quot;autoconfirmed&amp;quot; ) || Morebits.userIsInGroup( &amp;quot;confirmed&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
// for use by custom modules (normally empty)&lt;br /&gt;
Twinkle.initCallbacks = [];&lt;br /&gt;
Twinkle.addInitCallback = function twinkleAddInitCallback( func ) {&lt;br /&gt;
	Twinkle.initCallbacks.push( func );&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.defaultConfig = {};&lt;br /&gt;
/**&lt;br /&gt;
 * Twinkle.defaultConfig.twinkle and Twinkle.defaultConfig.friendly&lt;br /&gt;
 *&lt;br /&gt;
 * This holds the default set of preferences used by Twinkle. (The |friendly| object holds preferences stored in the FriendlyConfig object.)&lt;br /&gt;
 * It is important that all new preferences added here, especially admin-only ones, are also added to&lt;br /&gt;
 * |Twinkle.config.sections| in twinkleconfig.js, so they are configurable via the Twinkle preferences panel.&lt;br /&gt;
 * For help on the actual preferences, see the comments in twinkleconfig.js.&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.defaultConfig.twinkle = {&lt;br /&gt;
	 // General&lt;br /&gt;
	summaryAd: &amp;quot; ([[WP:TW|TW]])&amp;quot;,&lt;br /&gt;
	deletionSummaryAd: &amp;quot; ([[WP:TW|TW]])&amp;quot;,&lt;br /&gt;
	protectionSummaryAd: &amp;quot; ([[WP:TW|TW]])&amp;quot;,&lt;br /&gt;
	userTalkPageMode: &amp;quot;window&amp;quot;,&lt;br /&gt;
	dialogLargeFont: false,&lt;br /&gt;
	 // Fluff (revert and rollback)&lt;br /&gt;
	openTalkPage: [ &amp;quot;agf&amp;quot;, &amp;quot;norm&amp;quot;, &amp;quot;vand&amp;quot; ],&lt;br /&gt;
	openTalkPageOnAutoRevert: false,&lt;br /&gt;
	markRevertedPagesAsMinor: [ &amp;quot;vand&amp;quot; ],&lt;br /&gt;
	watchRevertedPages: [ &amp;quot;agf&amp;quot;, &amp;quot;norm&amp;quot;, &amp;quot;vand&amp;quot;, &amp;quot;torev&amp;quot; ],&lt;br /&gt;
	offerReasonOnNormalRevert: true,&lt;br /&gt;
	confirmOnFluff: false,&lt;br /&gt;
	showRollbackLinks: [ &amp;quot;diff&amp;quot;, &amp;quot;others&amp;quot; ],&lt;br /&gt;
	 // DI (twinkleimage)&lt;br /&gt;
	notifyUserOnDeli: true,&lt;br /&gt;
	deliWatchPage: &amp;quot;default&amp;quot;,&lt;br /&gt;
	deliWatchUser: &amp;quot;default&amp;quot;,&lt;br /&gt;
	 // PROD&lt;br /&gt;
	watchProdPages: true,&lt;br /&gt;
	prodReasonDefault: &amp;quot;&amp;quot;,&lt;br /&gt;
	logProdPages: false,&lt;br /&gt;
	prodLogPageName: &amp;quot;PROD log&amp;quot;,&lt;br /&gt;
	 // CSD&lt;br /&gt;
	speedySelectionStyle: &amp;quot;buttonClick&amp;quot;,&lt;br /&gt;
	speedyPromptOnG7: false,&lt;br /&gt;
	watchSpeedyPages: [ &amp;quot;g3&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot; ],&lt;br /&gt;
	markSpeedyPagesAsPatrolled: true,&lt;br /&gt;
	// these next two should probably be identical by default&lt;br /&gt;
	notifyUserOnSpeedyDeletionNomination:    [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;g13&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	welcomeUserOnSpeedyDeletionNotification: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;g13&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f1&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	promptForSpeedyDeletionSummary: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g6&amp;quot;, &amp;quot;g7&amp;quot;, &amp;quot;g8&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a2&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a5&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f2&amp;quot;, &amp;quot;f4&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f8&amp;quot;, &amp;quot;f10&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;t3&amp;quot;, &amp;quot;p1&amp;quot;, &amp;quot;p2&amp;quot; ],&lt;br /&gt;
	openUserTalkPageOnSpeedyDelete: [ &amp;quot;db&amp;quot;, &amp;quot;g1&amp;quot;, &amp;quot;g2&amp;quot;, &amp;quot;g3&amp;quot;, &amp;quot;g4&amp;quot;, &amp;quot;g5&amp;quot;, &amp;quot;g10&amp;quot;, &amp;quot;g11&amp;quot;, &amp;quot;g12&amp;quot;, &amp;quot;a1&amp;quot;, &amp;quot;a3&amp;quot;, &amp;quot;a7&amp;quot;, &amp;quot;a9&amp;quot;, &amp;quot;a10&amp;quot;, &amp;quot;f3&amp;quot;, &amp;quot;f7&amp;quot;, &amp;quot;f9&amp;quot;, &amp;quot;u3&amp;quot;, &amp;quot;t2&amp;quot;, &amp;quot;p1&amp;quot; ],&lt;br /&gt;
	deleteTalkPageOnDelete: false,&lt;br /&gt;
	deleteRedirectsOnDelete: true,&lt;br /&gt;
	deleteSysopDefaultToTag: false,&lt;br /&gt;
	speedyWindowHeight: 500,&lt;br /&gt;
	speedyWindowWidth: 800,&lt;br /&gt;
	logSpeedyNominations: false,&lt;br /&gt;
	speedyLogPageName: &amp;quot;CSD log&amp;quot;,&lt;br /&gt;
	noLogOnSpeedyNomination: [ &amp;quot;u1&amp;quot; ],&lt;br /&gt;
	 // Unlink&lt;br /&gt;
	unlinkNamespaces: [ &amp;quot;0&amp;quot;, &amp;quot;100&amp;quot; ],&lt;br /&gt;
	 // Warn&lt;br /&gt;
	defaultWarningGroup: &amp;quot;1&amp;quot;,&lt;br /&gt;
	showSharedIPNotice: true,&lt;br /&gt;
	watchWarnings: true,&lt;br /&gt;
	blankTalkpageOnIndefBlock: false,&lt;br /&gt;
	customWarningList: [],&lt;br /&gt;
	 // XfD&lt;br /&gt;
	xfdWatchDiscussion: &amp;quot;default&amp;quot;,&lt;br /&gt;
	xfdWatchList: &amp;quot;no&amp;quot;,&lt;br /&gt;
	xfdWatchPage: &amp;quot;default&amp;quot;,&lt;br /&gt;
	xfdWatchUser: &amp;quot;default&amp;quot;,&lt;br /&gt;
	 // Hidden preferences&lt;br /&gt;
	revertMaxRevisions: 50,&lt;br /&gt;
	batchdeleteChunks: 50,&lt;br /&gt;
	batchDeleteMinCutOff: 5,&lt;br /&gt;
	batchMax: 5000,&lt;br /&gt;
	batchProtectChunks: 50,&lt;br /&gt;
	batchProtectMinCutOff: 5,&lt;br /&gt;
	batchundeleteChunks: 50,&lt;br /&gt;
	batchUndeleteMinCutOff: 5,&lt;br /&gt;
	deliChunks: 500,&lt;br /&gt;
	deliMax: 5000,&lt;br /&gt;
	proddeleteChunks: 50&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
// now some skin dependent config.&lt;br /&gt;
if ( mw.config.get( &amp;quot;skin&amp;quot; ) === &amp;quot;vector&amp;quot; ) {&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletArea = &amp;quot;right-navigation&amp;quot;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletId   = &amp;quot;p-twinkle&amp;quot;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletName = &amp;quot;TW&amp;quot;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletType = &amp;quot;menu&amp;quot;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletNext = &amp;quot;p-search&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletArea =  null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletId   = &amp;quot;p-cactions&amp;quot;;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletName = null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletType = null;&lt;br /&gt;
	Twinkle.defaultConfig.twinkle.portletNext = null;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Twinkle.defaultConfig.friendly = {&lt;br /&gt;
	 // Tag&lt;br /&gt;
	groupByDefault: true,&lt;br /&gt;
	watchTaggedPages: true,&lt;br /&gt;
	watchMergeDiscussions: true,&lt;br /&gt;
	markTaggedPagesAsMinor: false,&lt;br /&gt;
	markTaggedPagesAsPatrolled: true,&lt;br /&gt;
	tagArticleSortOrder: &amp;quot;cat&amp;quot;,&lt;br /&gt;
	customTagList: [],&lt;br /&gt;
	 // Welcome&lt;br /&gt;
	topWelcomes: false,&lt;br /&gt;
	watchWelcomes: true,&lt;br /&gt;
	welcomeHeading: &amp;quot;Welcome&amp;quot;,&lt;br /&gt;
	insertHeadings: true,&lt;br /&gt;
	insertUsername: true,&lt;br /&gt;
	insertSignature: true,  // sign welcome templates, where appropriate&lt;br /&gt;
	quickWelcomeMode: &amp;quot;norm&amp;quot;,&lt;br /&gt;
	quickWelcomeTemplate: &amp;quot;welcome&amp;quot;,&lt;br /&gt;
	customWelcomeList: [],&lt;br /&gt;
	customWelcomeSignature: true,&lt;br /&gt;
	 // Talkback&lt;br /&gt;
	markTalkbackAsMinor: true,&lt;br /&gt;
	insertTalkbackSignature: true,  // always sign talkback templates&lt;br /&gt;
	talkbackHeading: &amp;quot;Talkback&amp;quot;,&lt;br /&gt;
	adminNoticeHeading: &amp;quot;Notice&amp;quot;,&lt;br /&gt;
	mailHeading: &amp;quot;You&amp;#039;ve got mail!&amp;quot;,&lt;br /&gt;
	 // Shared&lt;br /&gt;
	markSharedIPAsMinor: true&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.getPref = function twinkleGetPref( name ) {&lt;br /&gt;
	var result;&lt;br /&gt;
	if ( typeof Twinkle.prefs === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof Twinkle.prefs.twinkle === &amp;quot;object&amp;quot; ) {&lt;br /&gt;
		// look in Twinkle.prefs (twinkleoptions.js)&lt;br /&gt;
		result = Twinkle.prefs.twinkle[name];&lt;br /&gt;
	} else if ( typeof window.TwinkleConfig === &amp;quot;object&amp;quot; ) {&lt;br /&gt;
		// look in TwinkleConfig&lt;br /&gt;
		result = window.TwinkleConfig[name];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( result === undefined ) {&lt;br /&gt;
		return Twinkle.defaultConfig.twinkle[name];&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
Twinkle.getFriendlyPref = function twinkleGetFriendlyPref(name) {&lt;br /&gt;
	var result;&lt;br /&gt;
	if ( typeof Twinkle.prefs === &amp;quot;object&amp;quot; &amp;amp;&amp;amp; typeof Twinkle.prefs.friendly === &amp;quot;object&amp;quot; ) {&lt;br /&gt;
		// look in Twinkle.prefs (twinkleoptions.js)&lt;br /&gt;
		result = Twinkle.prefs.friendly[ name ];&lt;br /&gt;
	} else if ( typeof window.FriendlyConfig === &amp;quot;object&amp;quot; ) {&lt;br /&gt;
		// look in FriendlyConfig&lt;br /&gt;
		result = window.FriendlyConfig[ name ];&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( result === undefined ) {&lt;br /&gt;
		return Twinkle.defaultConfig.friendly[ name ];&lt;br /&gt;
	}&lt;br /&gt;
	return result;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** Twinkle.addPortlet() ****************&lt;br /&gt;
 *&lt;br /&gt;
 * Adds a portlet menu to one of the navigation areas on the page.&lt;br /&gt;
 * This is necessarily quite a hack since skins, navigation areas, and&lt;br /&gt;
 * portlet menu types all work slightly different.&lt;br /&gt;
 *&lt;br /&gt;
 * Available navigation areas depend on the skin used.&lt;br /&gt;
 * Monobook:&lt;br /&gt;
 *  &amp;quot;column-one&amp;quot;, outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets: &amp;quot;p-cactions&amp;quot;, &amp;quot;p-personal&amp;quot;, &amp;quot;p-logo&amp;quot;, &amp;quot;p-navigation&amp;quot;, &amp;quot;p-search&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *  Special layout of p-cactions and p-personal through specialized styles.&lt;br /&gt;
 * Vector:&lt;br /&gt;
 *  &amp;quot;mw-panel&amp;quot;, outer div class &amp;quot;portal&amp;quot;, inner div class &amp;quot;body&amp;quot;. Existing portlets/elements: &amp;quot;p-logo&amp;quot;, &amp;quot;p-navigation&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *  &amp;quot;left-navigation&amp;quot;, outer div class &amp;quot;vectorTabs&amp;quot; or &amp;quot;vectorMenu&amp;quot;, inner div class &amp;quot;&amp;quot; or &amp;quot;menu&amp;quot;. Existing portlets: &amp;quot;p-namespaces&amp;quot;, &amp;quot;p-variants&amp;quot; (menu)&lt;br /&gt;
 *  &amp;quot;right-navigation&amp;quot;, outer div class &amp;quot;vectorTabs&amp;quot; or &amp;quot;vectorMenu&amp;quot;, inner div class &amp;quot;&amp;quot; or &amp;quot;menu&amp;quot;. Existing portlets: &amp;quot;p-views&amp;quot;, &amp;quot;p-cactions&amp;quot; (menu), &amp;quot;p-search&amp;quot;&lt;br /&gt;
 *  Special layout of p-personal portlet (part of &amp;quot;head&amp;quot;) through specialized styles.&lt;br /&gt;
 * Modern:&lt;br /&gt;
 *  &amp;quot;mw_contentwrapper&amp;quot; (top nav), outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets or elements: &amp;quot;p-cactions&amp;quot;, &amp;quot;mw_content&amp;quot;&lt;br /&gt;
 *  &amp;quot;mw_portlets&amp;quot; (sidebar), outer div class &amp;quot;portlet&amp;quot;, inner div class &amp;quot;pBody&amp;quot;. Existing portlets: &amp;quot;p-navigation&amp;quot;, &amp;quot;p-search&amp;quot;, &amp;quot;p-interaction&amp;quot;, &amp;quot;p-tb&amp;quot;, &amp;quot;p-coll-print_export&amp;quot;&lt;br /&gt;
 *&lt;br /&gt;
 * @param String navigation -- id of the target navigation area (skin dependant, on vector either of &amp;quot;left-navigation&amp;quot;, &amp;quot;right-navigation&amp;quot;, or &amp;quot;mw-panel&amp;quot;)&lt;br /&gt;
 * @param String id -- id of the portlet menu to create, preferably start with &amp;quot;p-&amp;quot;.&lt;br /&gt;
 * @param String text -- name of the portlet menu to create. Visibility depends on the class used.&lt;br /&gt;
 * @param String type -- type of portlet. Currently only used for the vector non-sidebar portlets, pass &amp;quot;menu&amp;quot; to make this portlet a drop down menu.&lt;br /&gt;
 * @param Node nextnodeid -- the id of the node before which the new item should be added, should be another item in the same list, or undefined to place it at the end.&lt;br /&gt;
 *&lt;br /&gt;
 * @return Node -- the DOM node of the new item (a DIV element) or null&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.addPortlet = function( navigation, id, text, type, nextnodeid )&lt;br /&gt;
{&lt;br /&gt;
	//sanity checks, and get required DOM nodes&lt;br /&gt;
	var root = document.getElementById( navigation );&lt;br /&gt;
	if ( !root ) {&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var item = document.getElementById( id );&lt;br /&gt;
	if ( item ) {&lt;br /&gt;
		if ( item.parentNode &amp;amp;&amp;amp; item.parentNode === root ) {&lt;br /&gt;
			return item;&lt;br /&gt;
		}&lt;br /&gt;
		return null;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var nextnode;&lt;br /&gt;
	if ( nextnodeid ) {&lt;br /&gt;
		nextnode = document.getElementById(nextnodeid);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//verify/normalize input&lt;br /&gt;
	type = ( skin === &amp;quot;vector&amp;quot; &amp;amp;&amp;amp; type === &amp;quot;menu&amp;quot; &amp;amp;&amp;amp; ( navigation === &amp;quot;left-navigation&amp;quot; || navigation === &amp;quot;right-navigation&amp;quot; )) ? &amp;quot;menu&amp;quot; : &amp;quot;&amp;quot;;&lt;br /&gt;
	var outerDivClass;&lt;br /&gt;
	var innerDivClass;&lt;br /&gt;
	switch ( skin )&lt;br /&gt;
	{&lt;br /&gt;
		case &amp;quot;vector&amp;quot;:&lt;br /&gt;
			if ( navigation !== &amp;quot;portal&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;left-navigation&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;right-navigation&amp;quot; ) {&lt;br /&gt;
				navigation = &amp;quot;mw-panel&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			outerDivClass = ( navigation === &amp;quot;mw-panel&amp;quot; ) ? &amp;quot;portal&amp;quot; : ( type === &amp;quot;menu&amp;quot; ? &amp;quot;vectorMenu extraMenu&amp;quot; : &amp;quot;vectorTabs extraMenu&amp;quot; );&lt;br /&gt;
			innerDivClass = ( navigation === &amp;quot;mw-panel&amp;quot; ) ? &amp;quot;body&amp;quot; : ( type === &amp;quot;menu&amp;quot; ? &amp;quot;menu&amp;quot; : &amp;quot;&amp;quot; );&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;quot;modern&amp;quot;:&lt;br /&gt;
			if ( navigation !== &amp;quot;mw_portlets&amp;quot; &amp;amp;&amp;amp; navigation !== &amp;quot;mw_contentwrapper&amp;quot; ) {&lt;br /&gt;
				navigation = &amp;quot;mw_portlets&amp;quot;;&lt;br /&gt;
			}&lt;br /&gt;
			outerDivClass = &amp;quot;portlet&amp;quot;;&lt;br /&gt;
			innerDivClass = &amp;quot;pBody&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
		default:&lt;br /&gt;
			navigation = &amp;quot;column-one&amp;quot;;&lt;br /&gt;
			outerDivClass = &amp;quot;portlet&amp;quot;;&lt;br /&gt;
			innerDivClass = &amp;quot;pBody&amp;quot;;&lt;br /&gt;
			break;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Build the DOM elements.&lt;br /&gt;
	var outerDiv = document.createElement( &amp;quot;div&amp;quot; );&lt;br /&gt;
	outerDiv.className = outerDivClass + &amp;quot; emptyPortlet&amp;quot;;&lt;br /&gt;
	outerDiv.id = id;&lt;br /&gt;
	if ( type === &amp;quot;menu&amp;quot; ) {&lt;br /&gt;
		// Fix drop-down arrow image in Vector skin&lt;br /&gt;
		outerDiv.style.backgroundImage = &amp;#039;url(&amp;quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAQCAMAAAAlM38UAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFsbGxmpqa3d3deXl58/n79CzHcQAAAAV0Uk5T/////wD7tg5TAAAAMklEQVR42mJgwQoYBkqYiZEZAhiZUFRDxWGicEPA4nBRhNlAcYQokpVMDEwD6kuAAAMAyGMFQVv5ldcAAAAASUVORK5CYII=&amp;quot;)&amp;#039;;&lt;br /&gt;
		outerDiv.style.backgroundPosition = &amp;quot;right 60%&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	if ( nextnode &amp;amp;&amp;amp; nextnode.parentNode === root ) {&lt;br /&gt;
		root.insertBefore( outerDiv, nextnode );&lt;br /&gt;
	} else {&lt;br /&gt;
		root.appendChild( outerDiv );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var h5 = document.createElement( &amp;quot;h3&amp;quot; );&lt;br /&gt;
	if ( type === &amp;quot;menu&amp;quot; ) {&lt;br /&gt;
		var span = document.createElement( &amp;quot;span&amp;quot; );&lt;br /&gt;
		span.appendChild( document.createTextNode( text ) );&lt;br /&gt;
		h5.appendChild( span );&lt;br /&gt;
&lt;br /&gt;
		var a = document.createElement( &amp;quot;a&amp;quot; );&lt;br /&gt;
		a.href = &amp;quot;#&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		$( a ).click(function ( e ) {&lt;br /&gt;
			e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
			if ( !Twinkle.userAuthorized ) {&lt;br /&gt;
				alert(&amp;quot;Sorry, your account is too new to use Twinkle.&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
		span = document.createElement( &amp;quot;span&amp;quot; );&lt;br /&gt;
		span.appendChild( document.createTextNode( text ) );&lt;br /&gt;
		a.appendChild( span );&lt;br /&gt;
		h5.appendChild( a );&lt;br /&gt;
	} else {&lt;br /&gt;
		h5.appendChild( document.createTextNode( text ) );&lt;br /&gt;
	}&lt;br /&gt;
	outerDiv.appendChild( h5 );&lt;br /&gt;
&lt;br /&gt;
	var innerDiv = document.createElement( &amp;quot;div&amp;quot; ); // Not strictly necessary with type vectorTabs, or other skins.&lt;br /&gt;
	innerDiv.className = innerDivClass;&lt;br /&gt;
	outerDiv.appendChild(innerDiv);&lt;br /&gt;
&lt;br /&gt;
	var ul = document.createElement( &amp;quot;ul&amp;quot; );&lt;br /&gt;
	innerDiv.appendChild( ul );&lt;br /&gt;
&lt;br /&gt;
	return outerDiv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** Twinkle.addPortletLink() ****************&lt;br /&gt;
 * Builds a portlet menu if it doesn&amp;#039;t exist yet, and add the portlet link.&lt;br /&gt;
 * @param task: Either a URL for the portlet link or a function to execute.&lt;br /&gt;
 */&lt;br /&gt;
Twinkle.addPortletLink = function( task, text, id, tooltip )&lt;br /&gt;
{&lt;br /&gt;
	if ( Twinkle.getPref(&amp;quot;portletArea&amp;quot;) !== null ) {&lt;br /&gt;
		Twinkle.addPortlet( Twinkle.getPref( &amp;quot;portletArea&amp;quot; ), Twinkle.getPref( &amp;quot;portletId&amp;quot; ), Twinkle.getPref( &amp;quot;portletName&amp;quot; ), Twinkle.getPref( &amp;quot;portletType&amp;quot; ), Twinkle.getPref( &amp;quot;portletNext&amp;quot; ));&lt;br /&gt;
	}&lt;br /&gt;
	var link = mw.util.addPortletLink( Twinkle.getPref( &amp;quot;portletId&amp;quot; ), typeof task === &amp;quot;string&amp;quot; ? task : &amp;quot;#&amp;quot;, text, id, tooltip );&lt;br /&gt;
	if ( $.isFunction( task ) ) {&lt;br /&gt;
		$( link ).click(function ( ev ) {&lt;br /&gt;
			task();&lt;br /&gt;
			ev.preventDefault();&lt;br /&gt;
		});&lt;br /&gt;
	}&lt;br /&gt;
	return link;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * **************** General initialization code ****************&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
var scriptpathbefore = mw.util.wikiScript( &amp;quot;index&amp;quot; ) + &amp;quot;?title=&amp;quot;,&lt;br /&gt;
    scriptpathafter = &amp;quot;&amp;amp;action=raw&amp;amp;ctype=text/javascript&amp;amp;happy=yes&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Retrieve the user&amp;#039;s Twinkle preferences&lt;br /&gt;
$.ajax({&lt;br /&gt;
	url: scriptpathbefore + &amp;quot;User:&amp;quot; + encodeURIComponent( mw.config.get(&amp;quot;wgUserName&amp;quot;)) + &amp;quot;/twinkleoptions.js&amp;quot; + scriptpathafter,&lt;br /&gt;
	dataType: &amp;quot;text&amp;quot;&lt;br /&gt;
})&lt;br /&gt;
	.fail(function () {	mw.util.jsMessage( &amp;quot;Could not load twinkleoptions.js&amp;quot; ); })&lt;br /&gt;
	.done(function ( optionsText ) {&lt;br /&gt;
&lt;br /&gt;
		// Quick pass if user has no options&lt;br /&gt;
		if ( optionsText === &amp;quot;&amp;quot; ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Twinkle options are basically a JSON object with some comments. Strip those:&lt;br /&gt;
		optionsText = optionsText.replace( /(?:^(?:\/\/[^\n]*\n)*\n*|(?:\/\/[^\n]*(?:\n|$))*$)/g, &amp;quot;&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		// First version of options had some boilerplate code to make it eval-able -- strip that too. This part may become obsolete down the line.&lt;br /&gt;
		if ( optionsText.lastIndexOf( &amp;quot;window.Twinkle.prefs = &amp;quot;, 0 ) === 0 ) {&lt;br /&gt;
			optionsText = optionsText.replace( /(?:^window.Twinkle.prefs = |;\n*$)/g, &amp;quot;&amp;quot; );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		try {&lt;br /&gt;
			var options = $.parseJSON( optionsText );&lt;br /&gt;
&lt;br /&gt;
			// Assuming that our options evolve, we will want to transform older versions:&lt;br /&gt;
			//if ( options.optionsVersion === undefined ) {&lt;br /&gt;
			// ...&lt;br /&gt;
			// options.optionsVersion = 1;&lt;br /&gt;
			//}&lt;br /&gt;
			//if ( options.optionsVersion === 1 ) {&lt;br /&gt;
			// ...&lt;br /&gt;
			// options.optionsVersion = 2;&lt;br /&gt;
			//}&lt;br /&gt;
			// At the same time, twinkleconfig.js needs to be adapted to write a higher version number into the options.&lt;br /&gt;
&lt;br /&gt;
			if ( options ) {&lt;br /&gt;
				Twinkle.prefs = options;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		catch ( e ) {&lt;br /&gt;
			mw.util.jsMessage(&amp;quot;Could not parse twinkleoptions.js&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
	.always(function () {&lt;br /&gt;
		$( Twinkle.load );&lt;br /&gt;
	});&lt;br /&gt;
&lt;br /&gt;
// Developers: you can import custom Twinkle modules here&lt;br /&gt;
// For example, mw.loader.load(scriptpathbefore + &amp;quot;User:UncleDouggie/morebits-test.js&amp;quot; + scriptpathafter);&lt;br /&gt;
&lt;br /&gt;
Twinkle.load = function () {&lt;br /&gt;
	    // Don&amp;#039;t activate on special pages other than &amp;quot;Contributions&amp;quot; so that they load faster, especially the watchlist.&lt;br /&gt;
	var isSpecialPage = ( mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;) === -1&lt;br /&gt;
	    	&amp;amp;&amp;amp; mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) !== &amp;quot;Contributions&amp;quot;&lt;br /&gt;
	    	&amp;amp;&amp;amp; mw.config.get(&amp;#039;wgCanonicalSpecialPageName&amp;#039;) !== &amp;quot;Prefixindex&amp;quot; ),&lt;br /&gt;
&lt;br /&gt;
	    // Also, Twinkle is incompatible with Internet Explorer versions 8 or lower, so don&amp;#039;t load there either.&lt;br /&gt;
	    isOldIE = ( $.client.profile().name === &amp;#039;msie&amp;#039; &amp;amp;&amp;amp; $.client.profile().versionNumber &amp;lt; 9 );&lt;br /&gt;
&lt;br /&gt;
    // Prevent users that are not autoconfirmed from loading Twinkle as well.&lt;br /&gt;
	if ( isSpecialPage || isOldIE || !Twinkle.userAuthorized ) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Load the modules in the order that the tabs should appears&lt;br /&gt;
	// User/user talk-related&lt;br /&gt;
	Twinkle.arv();&lt;br /&gt;
	Twinkle.warn();&lt;br /&gt;
	Twinkle.welcome();&lt;br /&gt;
	Twinkle.shared();&lt;br /&gt;
	Twinkle.talkback();&lt;br /&gt;
	// Deletion&lt;br /&gt;
	Twinkle.speedy();&lt;br /&gt;
	Twinkle.prod();&lt;br /&gt;
	Twinkle.xfd();&lt;br /&gt;
	Twinkle.image();&lt;br /&gt;
	// Maintenance&lt;br /&gt;
	Twinkle.protect();&lt;br /&gt;
	Twinkle.tag();&lt;br /&gt;
	// Misc. ones last&lt;br /&gt;
	Twinkle.diff();&lt;br /&gt;
	Twinkle.unlink();&lt;br /&gt;
	Twinkle.config.init();&lt;br /&gt;
	Twinkle.fluff.init();&lt;br /&gt;
	if ( Morebits.userIsInGroup(&amp;#039;sysop&amp;#039;) ) {&lt;br /&gt;
		Twinkle.delimages();&lt;br /&gt;
		Twinkle.deprod();&lt;br /&gt;
		Twinkle.batchdelete();&lt;br /&gt;
		Twinkle.batchprotect();&lt;br /&gt;
		Twinkle.batchundelete();&lt;br /&gt;
	}&lt;br /&gt;
	// Run the initialization callbacks for any custom modules&lt;br /&gt;
	$( Twinkle.initCallbacks ).each(function ( k, v ) { v(); });&lt;br /&gt;
	Twinkle.addInitCallback = function ( func ) { func(); };&lt;br /&gt;
&lt;br /&gt;
	// Increases text size in Twinkle dialogs, if so configured&lt;br /&gt;
	if ( Twinkle.getPref( &amp;quot;dialogLargeFont&amp;quot; ) ) {&lt;br /&gt;
		mw.util.addCSS( &amp;quot;.morebits-dialog-content, .morebits-dialog-footerlinks { font-size: 100% !important; } &amp;quot; +&lt;br /&gt;
			&amp;quot;.morebits-dialog input, .morebits-dialog select, .morebits-dialog-content button { font-size: inherit !important; }&amp;quot; );&lt;br /&gt;
	}&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
} ( window, document, jQuery )); // End wrap with anonymous function&lt;br /&gt;
&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maarten Ligtvoet</name></author>
	</entry>
</feed>