<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.rvlt.gg/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AAjaxSubmit.js</id>
	<title>MediaWiki:AjaxSubmit.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.rvlt.gg/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AAjaxSubmit.js"/>
	<link rel="alternate" type="text/html" href="https://wiki.rvlt.gg/index.php?title=MediaWiki:AjaxSubmit.js&amp;action=history"/>
	<updated>2026-05-05T09:53:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.rvlt.gg/index.php?title=MediaWiki:AjaxSubmit.js&amp;diff=359&amp;oldid=prev</id>
		<title>Insert: Created page with &quot;// ajaxSubmit //   Submit a form through Ajax. Doesn&#039;t handle file uploads yet. // // Parameters: //   form                 DOM element   The form to submit //   button      optional DOM element   If set and a submit button of &#039;form&#039;, is added to the //                                      form arguments sent //   func        optional Function      Function to call once the call has been made or the //                                      result has arrived, if want_resu...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.rvlt.gg/index.php?title=MediaWiki:AjaxSubmit.js&amp;diff=359&amp;oldid=prev"/>
		<updated>2023-01-06T18:18:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;// ajaxSubmit //   Submit a form through Ajax. Doesn&amp;#039;t handle file uploads yet. // // Parameters: //   form                 DOM element   The form to submit //   button      optional DOM element   If set and a submit button of &amp;#039;form&amp;#039;, is added to the //                                      form arguments sent //   func        optional Function      Function to call once the call has been made or the //                                      result has arrived, if want_resu...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Páàjì titun&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// ajaxSubmit&lt;br /&gt;
//   Submit a form through Ajax. Doesn&amp;#039;t handle file uploads yet.&lt;br /&gt;
//&lt;br /&gt;
// Parameters:&lt;br /&gt;
//   form                 DOM element   The form to submit&lt;br /&gt;
//   button      optional DOM element   If set and a submit button of &amp;#039;form&amp;#039;, is added to the&lt;br /&gt;
//                                      form arguments sent&lt;br /&gt;
//   func        optional Function      Function to call once the call has been made or the&lt;br /&gt;
//                                      result has arrived, if want_result === true&lt;br /&gt;
//   want_result optional Boolean       If true, call func with the result of the submit once&lt;br /&gt;
//                                      it has arrived. Otherwise, call func as soon as the&lt;br /&gt;
//                                      submit request has been received by the server, and&lt;br /&gt;
//                                      ignore any result of the submit.&lt;br /&gt;
//&lt;br /&gt;
// Notes:&lt;br /&gt;
//   Func should be a function (request). If func is not defined,&lt;br /&gt;
//   ajaxSubmit just submits the form and ignores any result.&lt;br /&gt;
/*global mw*/&lt;br /&gt;
function ajaxSubmit(form, button, func, want_result) {&lt;br /&gt;
&amp;quot;use strict&amp;quot;;&lt;br /&gt;
	if (want_result &amp;amp;&amp;amp; (!func || typeof(func) != &amp;#039;function&amp;#039; || func.length &amp;lt; 1)) {&lt;br /&gt;
		/**** TODO: improve error handling: should throw an exception! */&lt;br /&gt;
		alert(&amp;#039;Logic error in ajaxSubmit: func must be function (request).&amp;#039;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
	if (func &amp;amp;&amp;amp; typeof(func) != &amp;#039;function&amp;#039;) {&lt;br /&gt;
		/**** TODO: improve error handling: should throw an exception! */&lt;br /&gt;
		alert(&amp;#039;Error in ajaxSubmit: func must be a function, found a &amp;#039; + typeof(func) + &amp;#039;.&amp;#039;);&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var is_simple = false;&lt;br /&gt;
	// True if it&amp;#039;s a GET request, or if the form is &amp;#039;application/x-www-form-urlencoded&amp;#039;&lt;br /&gt;
	var boundary = null;&lt;br /&gt;
	// Otherwise, it&amp;#039;s &amp;#039;multipart/form-data&amp;#039;, and the multipart delimiter is &amp;#039;boundary&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	function encode_entry(name, value) {&lt;br /&gt;
		if (!name || !name.length || !value || !value.length)&lt;br /&gt;
			return null;&lt;br /&gt;
		if (!boundary)&lt;br /&gt;
			return name + &amp;#039;=&amp;#039; + encodeURIComponent(value);&lt;br /&gt;
		else&lt;br /&gt;
			return boundary + &amp;#039;\r\n&amp;#039; +&lt;br /&gt;
			 &amp;#039;Content-Disposition: form-data; name=&amp;quot;&amp;#039; + name + &amp;#039;&amp;quot;\r\n&amp;#039; +&lt;br /&gt;
			 &amp;#039;\r\n&amp;#039; +&lt;br /&gt;
			 value.replace(/\r?\n/g, &amp;#039;\r\n&amp;#039;) + &amp;#039;\r\n&amp;#039;; // RFC 2046: newlines always must be represented as CR-LF&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function encode_field(element) {&lt;br /&gt;
		var name = element.name;&lt;br /&gt;
		if (!name || !name.length)&lt;br /&gt;
			name = element.id;&lt;br /&gt;
		return encode_entry(name, element.value);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function form_add_argument(args, field) {&lt;br /&gt;
		if (!field || !field.length)&lt;br /&gt;
			return args;&lt;br /&gt;
		if (!args || !args.length)&lt;br /&gt;
			return field;&lt;br /&gt;
		if (is_simple)&lt;br /&gt;
			return args + &amp;#039;&amp;amp;&amp;#039; + field;&lt;br /&gt;
		else&lt;br /&gt;
			return args + field;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var request;&lt;br /&gt;
	if (window.LAPI &amp;amp;&amp;amp; window.LAPI.Ajax &amp;amp;&amp;amp; window.LAPI.Ajax.getRequest) {&lt;br /&gt;
		request = window.LAPI.Ajax.getRequest();&lt;br /&gt;
	} else {&lt;br /&gt;
		try {&lt;br /&gt;
			request = new window.XMLHttpRequest();&lt;br /&gt;
		} catch (anything) {&lt;br /&gt;
			if (window.ActiveXObject)&lt;br /&gt;
				request = new window.ActiveXObject(&amp;#039;Microsoft.XMLHTTP&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	var method = form.getAttribute(&amp;#039;method&amp;#039;).toUpperCase();&lt;br /&gt;
	var uri = form.getAttribute(&amp;#039;action&amp;#039;);&lt;br /&gt;
	if (uri.length &amp;gt;= 2 &amp;amp;&amp;amp; uri.substring(0, 2) === &amp;#039;//&amp;#039;) {&lt;br /&gt;
		// Protocol-relative URI; can cause trouble on IE7&lt;br /&gt;
		uri = document.location.protocol + uri;&lt;br /&gt;
	} else if (uri[0] === &amp;#039;/&amp;#039;) {&lt;br /&gt;
		// Some browsers already expand the action URI (e.g. Opera 9.26)&lt;br /&gt;
		uri = mw.config.get(&amp;#039;wgServer&amp;#039;) + uri;&lt;br /&gt;
		if (uri.length &amp;gt;= 2 &amp;amp;&amp;amp; uri.substring(0, 2) === &amp;#039;//&amp;#039;)&lt;br /&gt;
			uri = document.location.protocol + uri;&lt;br /&gt;
	}&lt;br /&gt;
	// Encode the field values&lt;br /&gt;
&lt;br /&gt;
	var is_get = method === &amp;#039;GET&amp;#039;;&lt;br /&gt;
	var encoding = form.getAttribute(&amp;#039;enctype&amp;#039;);&lt;br /&gt;
	if (encoding) {&lt;br /&gt;
		encoding = encoding.toLowerCase();&lt;br /&gt;
		if (!encoding.length)&lt;br /&gt;
			encoding = null;&lt;br /&gt;
	}&lt;br /&gt;
	is_simple =&lt;br /&gt;
		is_get || !encoding || encoding === &amp;#039;application/x-www-form-urlencoded&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	var args = &amp;#039;&amp;#039;;&lt;br /&gt;
	var boundary_string = &amp;#039;----&amp;#039; + mw.config.get(&amp;#039;wgArticleId&amp;#039;) + mw.config.get(&amp;#039;wgCurRevisionId&amp;#039;) + &amp;#039;auto_submit_by_lupo&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	boundary = null;&lt;br /&gt;
&lt;br /&gt;
	if (!is_simple)&lt;br /&gt;
		boundary = &amp;#039;--&amp;#039; + boundary_string;&lt;br /&gt;
&lt;br /&gt;
	for (var i = 0; i &amp;lt; form.elements.length; i++) {&lt;br /&gt;
		var element = form.elements[i];&lt;br /&gt;
		var single_select = false;&lt;br /&gt;
		switch (element.type) {&lt;br /&gt;
		case &amp;#039;checkbox&amp;#039;:&lt;br /&gt;
		case &amp;#039;radio&amp;#039;:&lt;br /&gt;
			if (!element.checked)&lt;br /&gt;
				break;&lt;br /&gt;
			else if (element.id === &amp;#039;wpWatchthis&amp;#039; &amp;amp;&amp;amp; document.getElementById(&amp;#039;ca-unwatch&amp;#039;)) {&lt;br /&gt;
				args = form_add_argument(args, encode_entry(&amp;#039;wpWatchthis&amp;#039;, &amp;#039;1&amp;#039;));&lt;br /&gt;
				break;&lt;br /&gt;
			}&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		case &amp;#039;hidden&amp;#039;:&lt;br /&gt;
		case &amp;#039;text&amp;#039;:&lt;br /&gt;
		case &amp;#039;password&amp;#039;:&lt;br /&gt;
		case &amp;#039;textarea&amp;#039;:&lt;br /&gt;
			args = form_add_argument(args, encode_field(element));&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;select-one&amp;#039;:&lt;br /&gt;
			single_select = true;&lt;br /&gt;
			/* falls through */&lt;br /&gt;
		case &amp;#039;select-multiple&amp;#039;:&lt;br /&gt;
			var name = element.name || element.id || &amp;#039;&amp;#039;;&lt;br /&gt;
			if (!name.length)&lt;br /&gt;
				break;&lt;br /&gt;
			for (var j = 0; j &amp;lt; element.length; j++) {&lt;br /&gt;
				if (element[j].selected) {&lt;br /&gt;
					var value = element[j].value || element[j].text;&lt;br /&gt;
					args = form_add_argument(args, encode_entry(name, value));&lt;br /&gt;
					if (single_select)&lt;br /&gt;
						break; // No need to scan the rest&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			break;&lt;br /&gt;
		case &amp;#039;file&amp;#039;:&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	if (button &amp;amp;&amp;amp; button.form === form &amp;amp;&amp;amp; button.type === &amp;#039;submit&amp;#039;)&lt;br /&gt;
		args = form_add_argument(args, encode_field(button));&lt;br /&gt;
&lt;br /&gt;
	// Close the multipart request&lt;br /&gt;
	if (!is_simple &amp;amp;&amp;amp; args.length &amp;gt; 0)&lt;br /&gt;
		args += boundary;&lt;br /&gt;
&lt;br /&gt;
	if (method === &amp;#039;GET&amp;#039;) {&lt;br /&gt;
		uri += (uri.indexOf(&amp;#039;?&amp;#039;) &amp;lt; 0 ? &amp;#039;?&amp;#039; : &amp;#039;&amp;amp;&amp;#039;) + args;&lt;br /&gt;
		args = null;&lt;br /&gt;
	}&lt;br /&gt;
	// Make the request&lt;br /&gt;
	request.open(method, uri, true);&lt;br /&gt;
	if (want_result &amp;amp;&amp;amp; request.overrideMimeType)&lt;br /&gt;
		request.overrideMimeType(&amp;#039;application/xml&amp;#039;);&lt;br /&gt;
	request.setRequestHeader(&amp;#039;Pragma&amp;#039;, &amp;#039;cache=no&amp;#039;);&lt;br /&gt;
	request.setRequestHeader(&amp;#039;Cache-Control&amp;#039;, &amp;#039;no-transform&amp;#039;);&lt;br /&gt;
	if (method === &amp;#039;POST&amp;#039;) {&lt;br /&gt;
		if (!encoding)&lt;br /&gt;
			encoding = &amp;#039;application/x-www-form-urlencoded&amp;#039;;&lt;br /&gt;
		if (!is_simple) {&lt;br /&gt;
			request.setRequestHeader(&lt;br /&gt;
				&amp;#039;Content-type&amp;#039;, encoding + &amp;#039;; charset=UTF-8; boundary=&amp;quot;&amp;#039; + boundary_string + &amp;#039;&amp;quot;&amp;#039;);&lt;br /&gt;
		} else {&lt;br /&gt;
			request.setRequestHeader(&amp;#039;Content-type&amp;#039;, encoding);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	request.onreadystatechange =&lt;br /&gt;
	function () {&lt;br /&gt;
		if (want_result) {&lt;br /&gt;
			if (request.readyState &amp;lt; 4)&lt;br /&gt;
				return;&lt;br /&gt;
			func(request);&lt;br /&gt;
		} else {&lt;br /&gt;
			// Call func as soon as the request has been sent and we start getting the result.&lt;br /&gt;
			if (request.readyState === 3 &amp;amp;&amp;amp; func)&lt;br /&gt;
				func(request);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
	request.send(args);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// submitAndClose&lt;br /&gt;
//   Submit a form and close the window containing it as soon as the request has been&lt;br /&gt;
//   received by the server&lt;br /&gt;
//&lt;br /&gt;
// Parameters:&lt;br /&gt;
//   form   DOM element   The form to submit.&lt;br /&gt;
function submitAndClose(form) {&lt;br /&gt;
	ajaxSubmit(form, null, function () {&lt;br /&gt;
		window.close();&lt;br /&gt;
	});&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Insert</name></author>
	</entry>
</feed>