<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ABetterUpload.js</id>
	<title>MediaWiki:BetterUpload.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mbwiki.stairwaygames.work/w/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ABetterUpload.js"/>
	<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=MediaWiki:BetterUpload.js&amp;action=history"/>
	<updated>2026-04-07T17:11:05Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>https://mbwiki.stairwaygames.work/w/index.php?title=MediaWiki:BetterUpload.js&amp;diff=23351&amp;oldid=prev</id>
		<title>Mikevoir: Created page with &quot;$(function() { 	(window.dev = window.dev || {}).BetterUpload = window.dev.BetterUpload || { 		&#039;default&#039;: &#039;==Licensing==\n{{Fairuse}}&#039; 	}; 	 	// Double load protection 	if (window.dev.BetterUpload._LOADED) { return; } 	     // Load dependencies and cache 	var api = new mw.Api(); 	var config = mw.config.get([&#039;wgAction&#039;, &#039;wgCanonicalSpecialPageName&#039;, &#039;wgUserName&#039;]); 	 	// Main class 	var betterUpload = { 		init: function(curr) { 			// Add custom form submitapi 			document.q...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mbwiki.stairwaygames.work/w/index.php?title=MediaWiki:BetterUpload.js&amp;diff=23351&amp;oldid=prev"/>
		<updated>2024-07-10T03:51:33Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;$(function() { 	(window.dev = window.dev || {}).BetterUpload = window.dev.BetterUpload || { 		&amp;#039;default&amp;#039;: &amp;#039;==Licensing==\n{{Fairuse}}&amp;#039; 	}; 	 	// Double load protection 	if (window.dev.BetterUpload._LOADED) { return; } 	     // Load dependencies and cache 	var api = new mw.Api(); 	var config = mw.config.get([&amp;#039;wgAction&amp;#039;, &amp;#039;wgCanonicalSpecialPageName&amp;#039;, &amp;#039;wgUserName&amp;#039;]); 	 	// Main class 	var betterUpload = { 		init: function(curr) { 			// Add custom form submitapi 			document.q...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;$(function() {&lt;br /&gt;
	(window.dev = window.dev || {}).BetterUpload = window.dev.BetterUpload || {&lt;br /&gt;
		&amp;#039;default&amp;#039;: &amp;#039;==Licensing==\n{{Fairuse}}&amp;#039;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Double load protection&lt;br /&gt;
	if (window.dev.BetterUpload._LOADED) { return; }&lt;br /&gt;
	&lt;br /&gt;
    // Load dependencies and cache&lt;br /&gt;
	var api = new mw.Api();&lt;br /&gt;
	var config = mw.config.get([&amp;#039;wgAction&amp;#039;, &amp;#039;wgCanonicalSpecialPageName&amp;#039;, &amp;#039;wgUserName&amp;#039;]);&lt;br /&gt;
	&lt;br /&gt;
	// Main class&lt;br /&gt;
	var betterUpload = {&lt;br /&gt;
		init: function(curr) {&lt;br /&gt;
			// Add custom form submitapi&lt;br /&gt;
			document.querySelector(&amp;#039;.mw-htmlform-submit&amp;#039;).value = &amp;#039;Upload file with preload&amp;#039;;&lt;br /&gt;
			document.querySelector(&amp;#039;form#mw-upload-form&amp;#039;).addEventListener(&amp;quot;submit&amp;quot;, function (event) {&lt;br /&gt;
			  event.preventDefault();&lt;br /&gt;
			  betterUpload.saveEdit();&lt;br /&gt;
			  betterUpload.attemptUpload();&lt;br /&gt;
			});&lt;br /&gt;
			if (!document.querySelector(&amp;#039;.mw-htmlform-field-HTMLTextAreaField&amp;#039;)) { // Special render for reupload&lt;br /&gt;
				document.querySelector(&amp;#039;label[for=&amp;quot;wpUploadDescription&amp;quot;]&amp;#039;).innerHTML = &amp;#039;Upload summary:&amp;#039;;&lt;br /&gt;
				document.querySelector(&amp;#039;label[for=&amp;quot;wpUploadDescription&amp;quot;]&amp;#039;).setAttribute(&amp;#039;for&amp;#039;, &amp;#039;wpUploadSummary&amp;#039;);&lt;br /&gt;
				document.querySelector(&amp;#039;input#wpUploadDescription&amp;#039;).setAttribute(&amp;#039;name&amp;#039;, &amp;#039;wpUploadSummary&amp;#039;);&lt;br /&gt;
				document.querySelector(&amp;#039;input#wpUploadDescription&amp;#039;).setAttribute(&amp;#039;id&amp;#039;, &amp;#039;wpUploadSummary&amp;#039;);&lt;br /&gt;
				var tar = document.querySelector(&amp;#039;.mw-htmlform-field-HTMLTextField + .mw-htmlform-field-HTMLTextField&amp;#039;);&lt;br /&gt;
				var ren = document.createElement(&amp;#039;tr&amp;#039;);&lt;br /&gt;
				ren.classList.add(&amp;#039;mw-htmlform-field-HTMLTextAreaField&amp;#039;);&lt;br /&gt;
				ren.innerHTML =&lt;br /&gt;
				&amp;#039;&amp;lt;td class=&amp;quot;mw-label&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
					&amp;#039;&amp;lt;label for=&amp;quot;wpUploadDescription&amp;quot;&amp;gt;Page content:&amp;lt;/label&amp;gt;&amp;#039;+&lt;br /&gt;
				&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;+&lt;br /&gt;
				&amp;#039;&amp;lt;td class=&amp;quot;mw-input&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
					&amp;#039;&amp;lt;textarea id=&amp;quot;wpUploadDescription&amp;quot; cols=&amp;quot;80&amp;quot; rows=&amp;quot;8&amp;quot; name=&amp;quot;wpUploadDescription&amp;quot; style=&amp;quot;font-family: Consolas, Eupheima UCAS, Ayuthaya, Menlo, monospace;&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;#039;+&lt;br /&gt;
				&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
				tar.parentNode.insertBefore(&lt;br /&gt;
					ren,&lt;br /&gt;
					tar.nextSibling&lt;br /&gt;
				);&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			// Page default changes&lt;br /&gt;
			document.querySelector(&amp;#039;#wpWatchthis&amp;#039;).closest(&amp;#039;fieldset&amp;#039;).remove();&lt;br /&gt;
			document.querySelector(&amp;#039;.mw-htmlform-field-HTMLTextAreaField label[for=&amp;quot;wpUploadDescription&amp;quot;]&amp;#039;).innerHTML = &amp;#039;Page content:&amp;#039;;&lt;br /&gt;
			document.querySelector(&amp;#039;.mw-htmlform-field-HTMLTextAreaField textarea#wpUploadDescription&amp;#039;).addEventListener(&amp;#039;change&amp;#039;, betterUpload.renderPreview);&lt;br /&gt;
			document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).style[&amp;#039;font-family&amp;#039;] = &amp;#039;Consolas, Eupheima UCAS, Ayuthaya, Menlo, monospace&amp;#039;;&lt;br /&gt;
			document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).value = (curr!==null &amp;amp;&amp;amp; curr!==undefined) ? curr : (window.dev.BetterUpload.default || &amp;#039;&amp;#039;);&lt;br /&gt;
			if (document.querySelector(&amp;#039;tr.mw-htmlform-field-Licenses&amp;#039;)) { document.querySelector(&amp;#039;tr.mw-htmlform-field-Licenses&amp;#039;).remove(); }&lt;br /&gt;
			if (document.querySelector(&amp;#039;p.mw-upload-editlicenses&amp;#039;)) { document.querySelector(&amp;#039;p.mw-upload-editlicenses&amp;#039;).remove(); }&lt;br /&gt;
			&lt;br /&gt;
			betterUpload.renderPreview();&lt;br /&gt;
			betterUpload.genPreloads();&lt;br /&gt;
		},&lt;br /&gt;
		genPreloads: function() {&lt;br /&gt;
			// console.log(window.dev.BetterUpload); // debug&lt;br /&gt;
			if (Array.isArray(window.dev.BetterUpload.preloads) &amp;amp;&amp;amp; window.dev.BetterUpload.preloads.length&amp;gt;0) {&lt;br /&gt;
				if (document.querySelector(&amp;#039;#mw-htmlform-description tbody tr.mw-htmlform-field-HTMLTextAreaField + .wpPreloadRow&amp;#039;)) {&lt;br /&gt;
					document.querySelector(&amp;#039;#mw-htmlform-description tbody tr.mw-htmlform-field-HTMLTextAreaField + .wpPreloadRow&amp;#039;).remove();&lt;br /&gt;
				}&lt;br /&gt;
				var preloads_row = document.createElement(&amp;#039;tr&amp;#039;);&lt;br /&gt;
				preloads_row.classList.add(&amp;#039;wpPreloadRow&amp;#039;);&lt;br /&gt;
				preloads_row.innerHTML = &lt;br /&gt;
					&amp;#039;&amp;lt;td class=&amp;quot;mw-label&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
						&amp;#039;&amp;lt;label for=&amp;quot;wpPreload&amp;quot;&amp;gt;Preloads:&amp;lt;/label&amp;gt;&amp;#039;+&lt;br /&gt;
					&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;+&lt;br /&gt;
					&amp;#039;&amp;lt;td class=&amp;quot;mw-input&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
						&amp;#039;&amp;lt;select name=&amp;quot;wpPreload&amp;quot; id=&amp;quot;wpPreload&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
							&amp;#039;&amp;lt;option value=&amp;quot;None&amp;quot; title=&amp;quot;None&amp;quot;&amp;gt;None selected&amp;lt;/option&amp;gt;&amp;#039;+&lt;br /&gt;
						&amp;#039;&amp;lt;/select&amp;gt;&amp;#039;+&lt;br /&gt;
					&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
				document.querySelector(&amp;#039;#mw-htmlform-description tbody .mw-htmlform-field-HTMLTextAreaField&amp;#039;).after(preloads_row);&lt;br /&gt;
				var preloads_list = document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpPreload&amp;#039;);&lt;br /&gt;
				var preloadOpts = preloads_list;&lt;br /&gt;
				window.dev.BetterUpload.preloads.forEach(function(setting, num){&lt;br /&gt;
					if (setting._group===&amp;#039;0&amp;#039;) {&lt;br /&gt;
						preloadOpts = preloads_list;&lt;br /&gt;
					} else if (setting._group) {&lt;br /&gt;
						preloadOpts = document.createElement(&amp;#039;optgroup&amp;#039;);&lt;br /&gt;
						preloadOpts.setAttribute(&amp;#039;label&amp;#039;, setting._group);&lt;br /&gt;
						preloads_list.append(preloadOpts);&lt;br /&gt;
					} else if (setting.name &amp;amp;&amp;amp; (setting.preload || setting.header)) {&lt;br /&gt;
						var option = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
						if (setting.header) {&lt;br /&gt;
							option.setAttribute(&amp;#039;disabled&amp;#039;, &amp;#039;disabled&amp;#039;);&lt;br /&gt;
							option.style.color = &amp;#039;GrayText&amp;#039;;&lt;br /&gt;
						} else if (setting.preload) {&lt;br /&gt;
							option.setAttribute(&amp;#039;value&amp;#039;, setting.name);&lt;br /&gt;
							option.setAttribute(&amp;#039;title&amp;#039;, setting.name);&lt;br /&gt;
						}&lt;br /&gt;
						option.innerHTML = setting.description || setting.name;&lt;br /&gt;
						option.setAttribute(&amp;#039;numref&amp;#039;, num);&lt;br /&gt;
						preloadOpts.append(option);&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
				document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpPreload&amp;#039;).addEventListener(&amp;#039;change&amp;#039;, function(event){&lt;br /&gt;
					var num = document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpPreload&amp;#039;).selectedOptions[0].getAttribute(&amp;#039;numref&amp;#039;);&lt;br /&gt;
					var settings = window.dev.BetterUpload.preloads[num];&lt;br /&gt;
					if (settings &amp;amp;&amp;amp; settings.preload) {&lt;br /&gt;
						var preload =  settings.preload;&lt;br /&gt;
						document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).value=preload;&lt;br /&gt;
						if (document.querySelector(&amp;#039;#mw-htmlform-description tbody .wpFillinRow&amp;#039;)) {&lt;br /&gt;
							document.querySelector(&amp;#039;#mw-htmlform-description tbody .wpFillinRow&amp;#039;).remove();&lt;br /&gt;
						}&lt;br /&gt;
						if (settings.fillin &amp;amp;&amp;amp; /\$\(1\)\$/.test(preload)) {&lt;br /&gt;
							var fillin_row = document.createElement(&amp;#039;tr&amp;#039;);&lt;br /&gt;
							fillin_row.classList.add(&amp;#039;wpFillinRow&amp;#039;);&lt;br /&gt;
							fillin_row.innerHTML = &lt;br /&gt;
								&amp;#039;&amp;lt;td class=&amp;quot;mw-label&amp;quot; style=&amp;quot;vertical-align:top&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
									&amp;#039;&amp;lt;label for=&amp;quot;wpFillin&amp;quot;&amp;gt;Values:&amp;lt;/label&amp;gt;&amp;#039;+&lt;br /&gt;
								&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;+&lt;br /&gt;
								&amp;#039;&amp;lt;td class=&amp;quot;mw-input&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
									&amp;#039;&amp;lt;select name=&amp;quot;wpFillin&amp;quot; id=&amp;quot;wpFillin&amp;quot;&amp;gt;&amp;#039;+&lt;br /&gt;
										&amp;#039;&amp;lt;option value=&amp;quot;None&amp;quot; title=&amp;quot;None&amp;quot;&amp;gt;None selected&amp;lt;/option&amp;gt;&amp;#039;+&lt;br /&gt;
									&amp;#039;&amp;lt;/select&amp;gt;&amp;#039;+&lt;br /&gt;
								&amp;#039;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
							document.querySelector(&amp;#039;#mw-htmlform-description tbody .wpPreloadRow&amp;#039;).after(fillin_row);&lt;br /&gt;
							var fillin_list = document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpFillin&amp;#039;);&lt;br /&gt;
							var options = fillin_list;&lt;br /&gt;
							settings.fillin.forEach(function(fillin, index){&lt;br /&gt;
								if (fillin._group===&amp;#039;0&amp;#039;) {&lt;br /&gt;
									options = fillin_list;&lt;br /&gt;
								} else if (fillin._group) {&lt;br /&gt;
									options = document.createElement(&amp;#039;optgroup&amp;#039;);&lt;br /&gt;
									options.setAttribute(&amp;#039;label&amp;#039;, fillin._group);&lt;br /&gt;
									fillin_list.append(options);&lt;br /&gt;
								} else {&lt;br /&gt;
									var option = document.createElement(&amp;#039;option&amp;#039;);&lt;br /&gt;
									var name = fillin.name || fillin.values.join(&amp;#039;, &amp;#039;);&lt;br /&gt;
									if (fillin.header) {&lt;br /&gt;
											option.setAttribute(&amp;#039;disabled&amp;#039;, &amp;#039;disabled&amp;#039;);&lt;br /&gt;
											option.style.color = &amp;#039;GrayText&amp;#039;;&lt;br /&gt;
									} else if (fillin.preload) {&lt;br /&gt;
										option.setAttribute(&amp;#039;value&amp;#039;, name);&lt;br /&gt;
										option.setAttribute(&amp;#039;title&amp;#039;, name);&lt;br /&gt;
									}&lt;br /&gt;
									option.innerHTML = name;&lt;br /&gt;
									option.setAttribute(&amp;#039;numref&amp;#039;, index);&lt;br /&gt;
									options.append(option);&lt;br /&gt;
								}&lt;br /&gt;
							});&lt;br /&gt;
							document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpFillin&amp;#039;).addEventListener(&amp;#039;change&amp;#039;, function(event2){&lt;br /&gt;
								var preloadNum = document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpPreload&amp;#039;).selectedOptions[0].getAttribute(&amp;#039;numref&amp;#039;);&lt;br /&gt;
								var preloadSettings = window.dev.BetterUpload.preloads[preloadNum];&lt;br /&gt;
								var valnum = document.querySelector(&amp;#039;#mw-htmlform-description tbody select#wpFillin&amp;#039;).selectedOptions[0].getAttribute(&amp;#039;numref&amp;#039;);&lt;br /&gt;
								var valsettings = preloadSettings.fillin[valnum];&lt;br /&gt;
								var newpreload = preloadSettings.preload;&lt;br /&gt;
								valsettings.values.forEach(function(rep, ind){&lt;br /&gt;
									var regex = new RegExp(/\$\(/.source+(ind+1)+/\)\$/.source, &amp;#039;g&amp;#039;);&lt;br /&gt;
									if (regex.test(newpreload)) {&lt;br /&gt;
										newpreload = newpreload.replace(regex, rep);&lt;br /&gt;
									}&lt;br /&gt;
								});&lt;br /&gt;
								if (document.querySelector(&amp;#039;#mw-htmlform-description tbody .wpFillinRow .mw-input .refPreview&amp;#039;)) {&lt;br /&gt;
									document.querySelector(&amp;#039;#mw-htmlform-description tbody .wpFillinRow .mw-input .refPreview&amp;#039;).remove();&lt;br /&gt;
								}&lt;br /&gt;
								if (valsettings.reference) {&lt;br /&gt;
									var refPreview =  document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
									refPreview.classList.add(&amp;#039;refPreview&amp;#039;);&lt;br /&gt;
									api.get({&lt;br /&gt;
										action: &amp;#039;parse&amp;#039;,&lt;br /&gt;
										text: valsettings.reference,&lt;br /&gt;
										prop: &amp;#039;text&amp;#039;,&lt;br /&gt;
										disablelimitreport: true,&lt;br /&gt;
										contentmodel: &amp;#039;wikitext&amp;#039;&lt;br /&gt;
									}).then(function(data){&lt;br /&gt;
										if (data &amp;amp;&amp;amp; data.parse &amp;amp;&amp;amp; data.parse.text &amp;amp;&amp;amp; data.parse.text[&amp;#039;*&amp;#039;]) {&lt;br /&gt;
											refPreview.innerHTML = data.parse.text[&amp;#039;*&amp;#039;];&lt;br /&gt;
											document.querySelector(&amp;#039;tr.wpFillinRow .mw-input&amp;#039;).append(refPreview);&lt;br /&gt;
										}&lt;br /&gt;
									});&lt;br /&gt;
								}&lt;br /&gt;
								document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).value = newpreload;&lt;br /&gt;
								betterUpload.renderPreview();&lt;br /&gt;
							});&lt;br /&gt;
						}&lt;br /&gt;
						document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).value = preload;&lt;br /&gt;
						betterUpload.renderPreview();&lt;br /&gt;
					} else { alert(&amp;#039;Invalid option.&amp;#039;); }&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		renderPreview: function() {&lt;br /&gt;
			var filename = document.querySelector(&amp;#039;#wpDestFile&amp;#039;).value;&lt;br /&gt;
			var text = document.querySelector(&amp;#039;textarea#wpUploadDescription&amp;#039;).value;&lt;br /&gt;
			var params = {&lt;br /&gt;
				action: &amp;#039;parse&amp;#039;,&lt;br /&gt;
				text: text,&lt;br /&gt;
				prop: &amp;#039;text&amp;#039;,&lt;br /&gt;
				disablelimitreport: true,&lt;br /&gt;
				contentmodel: &amp;#039;wikitext&amp;#039;&lt;br /&gt;
			};&lt;br /&gt;
			if (filename.length&amp;gt;0) {&lt;br /&gt;
				params.title = &amp;#039;File:&amp;#039; + filename;&lt;br /&gt;
			}&lt;br /&gt;
			if (text.length&amp;gt;0) {&lt;br /&gt;
				api.get(params).then(function(data){&lt;br /&gt;
					if (data &amp;amp;&amp;amp; data.parse &amp;amp;&amp;amp; data.parse.text &amp;amp;&amp;amp; data.parse.text[&amp;#039;*&amp;#039;]) {&lt;br /&gt;
						if (document.querySelector(&amp;#039;#pagePreview&amp;#039;)) {document.querySelector(&amp;#039;#pagePreview&amp;#039;).remove();}&lt;br /&gt;
						var preview = document.createElement(&amp;#039;tr&amp;#039;);&lt;br /&gt;
						document.querySelector(&amp;#039;#mw-htmlform-description tbody&amp;#039;).append(preview);&lt;br /&gt;
						preview.id = &amp;#039;pagePreview&amp;#039;;&lt;br /&gt;
						preview.innerHTML = &amp;#039;&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;h1&amp;gt;Page Preview&amp;lt;/h1&amp;gt;&amp;lt;hr /&amp;gt;&amp;lt;div&amp;gt;&amp;#039;+data.parse.text[&amp;#039;*&amp;#039;]+&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/td&amp;gt;&amp;#039;;&lt;br /&gt;
					}&lt;br /&gt;
				}).fail(console.log);&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		saveEdit: function() {&lt;br /&gt;
			if (document.querySelector(&amp;#039;input#wpUploadSummary&amp;#039;)) {&lt;br /&gt;
				var filename = document.querySelector(&amp;#039;#wpDestFile&amp;#039;).value;&lt;br /&gt;
				var summary = document.querySelector(&amp;#039;input#wpUploadSummary&amp;#039;);&lt;br /&gt;
				var params = {&lt;br /&gt;
					action: &amp;#039;edit&amp;#039;,&lt;br /&gt;
					title: &amp;#039;File:&amp;#039;+filename,&lt;br /&gt;
					ignorewarnings: &amp;#039;1&amp;#039;,&lt;br /&gt;
					format: &amp;#039;json&amp;#039;,&lt;br /&gt;
					text: document.querySelector(&amp;#039;#wpUploadDescription&amp;#039;).value,&lt;br /&gt;
					recreate: 1,&lt;br /&gt;
					token: mw.user.tokens.get(&amp;#039;csrfToken&amp;#039;)&lt;br /&gt;
				};&lt;br /&gt;
				if (summary &amp;amp;&amp;amp; summary.value.length&amp;gt;0) {&lt;br /&gt;
					params.summary = summary.value;&lt;br /&gt;
				}&lt;br /&gt;
				if (filename &amp;amp;&amp;amp; filename.length&amp;gt;0) {&lt;br /&gt;
					api.post(params);&lt;br /&gt;
				} else { alert(&amp;#039;Missing file or file name. Could not save page content.&amp;#039;); }&lt;br /&gt;
			} else {return;}&lt;br /&gt;
		},&lt;br /&gt;
		attemptUpload: function() {&lt;br /&gt;
			var filename = document.querySelector(&amp;#039;#wpDestFile&amp;#039;).value;&lt;br /&gt;
			var file = document.querySelector(&amp;#039;#wpUploadFile&amp;#039;).files[0];&lt;br /&gt;
			var comment = document.querySelector(&amp;#039;input#wpUploadSummary&amp;#039;);&lt;br /&gt;
			var params = {&lt;br /&gt;
                token: mw.user.tokens.get(&amp;#039;csrfToken&amp;#039;),&lt;br /&gt;
                filename: filename,&lt;br /&gt;
                ignorewarnings: &amp;#039;1&amp;#039;,&lt;br /&gt;
                format: &amp;#039;json&amp;#039;,&lt;br /&gt;
                text: document.querySelector(&amp;#039;#wpUploadDescription&amp;#039;).value&lt;br /&gt;
            };&lt;br /&gt;
            if (comment &amp;amp;&amp;amp; comment.value.length&amp;gt;0) {&lt;br /&gt;
            	params.comment = comment.value;&lt;br /&gt;
            }&lt;br /&gt;
			if (file &amp;amp;&amp;amp; filename &amp;amp;&amp;amp; filename.length&amp;gt;0) {&lt;br /&gt;
				var handleResponse = function(a, b) {&lt;br /&gt;
					var data = (typeof b === &amp;#039;object&amp;#039; &amp;amp;&amp;amp; !Array.isArray(b) &amp;amp;&amp;amp; b !== null &amp;amp;&amp;amp; (b.error || b.upload)) ? b : a;&lt;br /&gt;
					if (!data) {&lt;br /&gt;
						console.log(&amp;#039;a&amp;#039;, a);&lt;br /&gt;
						console.log(&amp;#039;b&amp;#039;, b);&lt;br /&gt;
					}&lt;br /&gt;
					if (data.error) {&lt;br /&gt;
						console.log(&amp;#039;data&amp;#039;, data);&lt;br /&gt;
						var cont = document.querySelector(&amp;#039;.mw-message-box-error&amp;#039;);&lt;br /&gt;
						if (!cont) {&lt;br /&gt;
							var _temp = $(&amp;#039;&amp;lt;h2 class=&amp;quot;mw-message-box-error-header&amp;quot;&amp;gt;Upload Warning&amp;lt;/h2&amp;gt;&amp;lt;div class=&amp;quot;mw-message-box-error mw-message-box&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;);&lt;br /&gt;
							$(&amp;#039;#uploadtext&amp;#039;).after(_temp);&lt;br /&gt;
							cont = _temp[1];&lt;br /&gt;
						}&lt;br /&gt;
						cont.innerHTML = (data.error.info &amp;amp;&amp;amp; data.error.info.length&amp;gt;0) ? data.error.info : &amp;#039;Unknown error during upload.&amp;#039;;&lt;br /&gt;
					} else if (data.upload &amp;amp;&amp;amp; data.upload.result == &amp;#039;Success&amp;#039;) {&lt;br /&gt;
						window.open(&lt;br /&gt;
							mw.config.get(&amp;#039;wgServer&amp;#039;)+&amp;#039;/wiki/File:&amp;#039;+encodeURIComponent(filename), // URI encoding required&lt;br /&gt;
							&amp;#039;_self&amp;#039; // load in current tab&lt;br /&gt;
						);&lt;br /&gt;
					} else {&lt;br /&gt;
						console.log(&amp;#039;data&amp;#039;, data);&lt;br /&gt;
						alert(&amp;#039;Unknown error on upload!&amp;#039;);&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				api.upload(file, params).then(handleResponse, handleResponse);&lt;br /&gt;
			} else { alert(&amp;#039;Missing file or file name. Could not upload file.&amp;#039;); }&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	// Start when API and LIB are loaded&lt;br /&gt;
	mw.loader.using(&amp;#039;mediawiki.api&amp;#039;).then(function(){&lt;br /&gt;
		// Check we&amp;#039;re in Special:Upload&lt;br /&gt;
		if (config.wgCanonicalSpecialPageName == &amp;#039;Upload&amp;#039;) {&lt;br /&gt;
			var titles = [&lt;br /&gt;
				&amp;#039;MediaWiki:Gadget-BetterUpload.json&amp;#039;,			// Site-wide settings on MediaWiki json page&lt;br /&gt;
				&amp;#039;User:&amp;#039;+config.wgUserName+&amp;#039;/BetterUpload.json&amp;#039;	// User settings if any in &amp;quot;User:NAME/BetterUpload.json&amp;quot;&lt;br /&gt;
			];&lt;br /&gt;
			if (document.querySelector(&amp;#039;#wpDestFile&amp;#039;) &amp;amp;&amp;amp; document.querySelector(&amp;#039;#wpDestFile&amp;#039;).value.length&amp;gt;0) {&lt;br /&gt;
				titles.push(&amp;#039;File:&amp;#039;+document.querySelector(&amp;#039;#wpDestFile&amp;#039;).value);&lt;br /&gt;
			}&lt;br /&gt;
			api.get({&lt;br /&gt;
				action: &amp;#039;query&amp;#039;,&lt;br /&gt;
				prop: &amp;#039;revisions&amp;#039;,&lt;br /&gt;
				titles: titles,&lt;br /&gt;
				rvprop: &amp;#039;content&amp;#039;,&lt;br /&gt;
				rvslots: &amp;#039;*&amp;#039;&lt;br /&gt;
			}).then(function(data){&lt;br /&gt;
				var page = {user: -1, site: -1, curr: null};&lt;br /&gt;
				Object.keys(data.query.pages).forEach(function(id){&lt;br /&gt;
					if (data.query.pages[id].ns == 8 &amp;amp;&amp;amp; data.query.pages[id].missing!==&amp;quot;&amp;quot;) {&lt;br /&gt;
						page.site = id;&lt;br /&gt;
					} else if (data.query.pages[id].ns == 2 &amp;amp;&amp;amp; data.query.pages[id].missing!==&amp;quot;&amp;quot;) {&lt;br /&gt;
						page.user = id;&lt;br /&gt;
					} else if (data.query.pages[id].ns == 6 &amp;amp;&amp;amp; data.query.pages[id].missing!==&amp;quot;&amp;quot;) {&lt;br /&gt;
						page.curr = data.query.pages[id].revisions[0].slots.main[&amp;#039;*&amp;#039;];&lt;br /&gt;
					}&lt;br /&gt;
				});&lt;br /&gt;
				if (page.user !== -1) {&lt;br /&gt;
					window.dev.BetterUpload = JSON.parse(data.query.pages[page.user].revisions[0].slots.main[&amp;#039;*&amp;#039;]);&lt;br /&gt;
				} else if (page.site !== -1) {&lt;br /&gt;
					window.dev.BetterUpload = JSON.parse(data.query.pages[page.site].revisions[0].slots.main[&amp;#039;*&amp;#039;]);&lt;br /&gt;
				}&lt;br /&gt;
				window.dev.BetterUpload._LOADED = true;&lt;br /&gt;
				var setInit = function() {&lt;br /&gt;
					if (/wpForReUpload/.test(window.location.href)) { // Special:Upload?wpForReUpload=1&lt;br /&gt;
						betterUpload.init(page.curr);&lt;br /&gt;
					} else { // Special:Upload&lt;br /&gt;
						betterUpload.init();&lt;br /&gt;
					}&lt;br /&gt;
				};&lt;br /&gt;
				if (document.querySelector(&amp;#039;#wpUploadDescription&amp;#039;)) {&lt;br /&gt;
					setInit();&lt;br /&gt;
				} else {&lt;br /&gt;
					// set up the mutation observer&lt;br /&gt;
					var observer = new MutationObserver(function (mutations, me) {&lt;br /&gt;
						// mutations is an array of mutations that occurred&lt;br /&gt;
						// me is the MutationObserver instance&lt;br /&gt;
						var targetNode = document.querySelector(&amp;#039;#wpUploadDescription&amp;#039;);&lt;br /&gt;
						if (targetNode) {&lt;br /&gt;
							me.disconnect(); // stop observing&lt;br /&gt;
							betterUpload.init();&lt;br /&gt;
						}&lt;br /&gt;
					});&lt;br /&gt;
					// start observing&lt;br /&gt;
					observer.observe(document, {&lt;br /&gt;
					  childList: true,&lt;br /&gt;
					  subtree: true&lt;br /&gt;
					});&lt;br /&gt;
				}&lt;br /&gt;
			});&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Mikevoir</name></author>
	</entry>
</feed>