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.