PageSourceSearch

https://mediaewiki.de/w/extensions/ReaderFeedback/readerfeedback.js?1&303

js mediaewiki.de collected 2026-10-08 06:24:10 UTC 4,187 bytes, 140 lines download raw bytes

1/* -- (c) Aaron Schulz 2008 */
2
3/* Every time you change this JS please bump $wgFeedbackStyleVersion in ReaderFeedback.php */
4
5/*
6* Update colors when select changes (Opera already does this).
7*/
8function updateFeedbackForm() {
9	var allzero = true;
10	var ratingform = document.getElementById('mw-feedbackselects');
11	if( !ratingform ) return;
12	for( tag in wgFeedbackParams.tags ) {
13		var controlName = "wp" + tag;
14		var levels = document.getElementsByName(controlName);
15		var selectedlevel = 2; // default
16		if( levels[0].nodeName == 'SELECT' ) {
17			selectedlevel = levels[0].selectedIndex;
18			// Update color. Opera does this already, and doing so
19			// seems to kill custom pretty opera skin form styling.
20			if( navigator.appName != 'Opera') {
21				levels[0].className = 'rfb-rating-option-' + (4 - selectedlevel);
22			}
23			if( selectedlevel <= 4 ) {
24				allzero = false;
25			}
26		}
27	}
28	var submit = document.getElementById('submitfeedback');
29	submit.disabled = allzero ? 'disabled' : '';
30}
31
32addOnloadHook(updateFeedbackForm);
33
34// dependencies:
35// * ajax.js:
36  /*extern sajax_init_object, sajax_do_call */
37// * wikibits.js:
38  /*extern hookEvent, jsMsg */
39
40// These should have been initialized in the generated js
41if( typeof wgAjaxFeedback === "undefined" || !wgAjaxFeedback ) {
42	wgAjaxFeedback = {
43		sendingMsg: "Submitting...",
44		sentMsg: "Thank you!"
45	};
46}
47
48wgAjaxFeedback.supported = true; // supported on current page and by browser
49wgAjaxFeedback.inprogress = false; // ajax request in progress
50wgAjaxFeedback.timeoutID = null; // see wgAjaxFeedback.ajaxCall
51
52wgAjaxFeedback.ajaxCall = function() {
53	if( !wgAjaxFeedback.supported ) {
54		return true;
55	} else if( wgAjaxFeedback.inprogress ) {
56		return false;
57	}
58	if( !wfSupportsAjax() ) {
59		// Lazy initialization so we don't toss up
60		// ActiveX warnings on initial page load
61		// for IE 6 users with security settings.
62		wgAjaxFeedback.supported = false;
63		return true;
64	}
65	var form = document.getElementById("mw-feedbackform");
66	var submit = document.getElementById("submitfeedback");
67	if( !form || !submit ) {
68		return false;
69	}
70	wgAjaxFeedback.inprogress = true;
71	submit.disabled = "disabled";
72	submit.value = wgAjaxFeedback.sendingMsg;
73	// Build up arguments
74	var args = [];
75	var inputs = form.getElementsByTagName("input");
76	for( var i=0; i < inputs.length; i++) {
77		// Ignore some useless items...
78		if( inputs[i].name != "title" && inputs[i].type != "submit" ) {
79			args.push( inputs[i].name + "|" + inputs[i].value );
80		}
81	}
82	var selects = form.getElementsByTagName("select");
83	for( var i=0; i < selects.length; i++) {
84		// Get the selected tag level...
85		if( selects[i].selectedIndex >= 0 ) {
86			var soption = selects[i].getElementsByTagName("option")[selects[i].selectedIndex];
87			args.push( selects[i].name + "|" + soption.value );
88		}
89		selects[i].disabled = "disabled";
90	}
91	// Send!
92	sajax_do_call( "ReaderFeedbackPage::AjaxReview", args, wgAjaxFeedback.processResult );
93	// If the request isn't done in 10 seconds, allow user to try again
94	wgAjaxFeedback.timeoutID = window.setTimeout(
95		function() { wgAjaxFeedback.inprogress = false; wgAjaxFeedback.unlockForm(); },
96		10000
97	);
98	return false;
99};
100
101wgAjaxFeedback.unlockForm = function() {
102	var form = document.getElementById("mw-feedbackform");
103	var submit = document.getElementById("submitfeedback");
104	if( !form || !submit ) {
105		return false;
106	}
107	submit.disabled = "";
108	var selects = form.getElementsByTagName("select");
109	for( var i=0; i < selects.length; i++) {
110		selects[i].disabled = "";
111	}
112};
113
114wgAjaxFeedback.processResult = function(request) {
115	if( !wgAjaxFeedback.supported ) {
116		return;
117	}
118	var response = request.responseText;
119	if( msg = response.substr(6) ) {
120		jsMsg( msg, 'feedback' );
121		window.scroll(0,0);
122	}
123	wgAjaxFeedback.inprogress = false;
124	if( wgAjaxFeedback.timeoutID ) {
125		window.clearTimeout(wgAjaxFeedback.timeoutID);
126	}
127	var submit = document.getElementById("submitfeedback");
128	if( submit ) {
129		submit.value = wgAjaxFeedback.sentMsg;
130	}
131};
132
133wgAjaxFeedback.onLoad = function() {
134	var submit = document.getElementById("submitfeedback");
135	if( submit ) {
136		submit.onclick = wgAjaxFeedback.ajaxCall;
137	}
138};
139
140hookEvent("load", wgAjaxFeedback.onLoad);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.