MediaWiki:Gadget-teahouse/content.js

/* _____________________________________________________________________________ * |                                                                             | * |                    === WARNING: GLOBAL GADGET FILE ===                      | * |                 Changes to this page affect many users. | * | Please discuss changes on the talk page or on WT:Gadget before editing. | * |_____________________________________________________________________________| * * Teahouse "Ask a question" feature, used by the Wikimedia Foundation's Teahouse project, see Teahouse/Questions */ // (function($,mw) {	mw.teahouse = {		'questionform' : ' \		 \			 Write out your question in the textbox below. \			 Short summary of your question: \			 \			 \			 \			 On Wikipedia, you should sign all of your non-article posts by ending them with four tildes (~) \			Ask my question \			 \			 \			 (Note: this question submission form will not work without them.) \			 \		 \		',

addQuestion : function( title, text ) { var wikitext = '==' + title + "==\n" + text + "\n";

$('.wp-teahouse-question-form').hide;

$('.wp-teahouse-ask') .find('.selflink') .empty .addClass('mw-ajax-loader');

var api = new mw.Api;

api.get( {				'action' : 'query',				'titles' : 'Wikipedia:Teahouse/Questions',				'prop'  : 'revisions|info',				'intoken' : 'edit',				'rvprop' : 'content',				'indexpageids' : 1			}, {				'ok' : function(result) {					result = result.query;					var page = result.pages[result.pageids[0]];					var oldText = page.revisions[0]['*'];					var newText = oldText.replace( /^==/m, wikitext+"==" );

api.post(						{							'action' : 'edit',							'title' : 'Wikipedia:Teahouse/Questions',							'text' : newText,							'summary' : '/'+'* '+title+' *'+'/ new section',							'token' : page.edittoken						},						{							'ok' : function {window.location.reload;}						}					); }			});		}	};

$(function {		mw.loader.using( ['jquery.ui.button', 'mediawiki.api'], function { if ( !$('.wp-teahouse-ask').length ) { return; }

var $form = $(mw.teahouse.questionform); $('.wp-teahouse-ask').after($form);

// Prevent flash $form.css( 'left', '-10000px' );

// Set up position setTimeout( function {				var $trigger = $('.wp-teahouse-ask');				var pos = $trigger.position;				var hCenter = ( $trigger.parent.width / 2 );				$form.css( 'top', pos.top + $trigger.height + 'px' );				$form.css( 'left', (hCenter - ($form.width) / 2) + 'px' );				$form.hide;			}, 0);

$form.find('#wp-th-question-ask') .button({					disabled : true				}) .click( function(e) {					e.preventDefault;

var title = $form.find('#wp-th-question-title').val; var text = $form.find('#wp-th-question-text').val;

if ( title && /~\s*$/.test(text) ) { mw.teahouse.addQuestion( title, text ); }				})				.end				.find('#wp-th-question-text')					.keypress( function(e) { var $textbox = $(this); setTimeout( function {							if ( (/~\s*$/).test($textbox.val) ) {								$form.find('#wp-th-question-ask')									.button( 'option','disabled', false );							} else {								$form.find('#wp-th-question-ask')									.button( 'option','disabled', true );							}						}, 0 ); } );

$('.wp-teahouse-ask').click(function(e) {				$form.toggle('fast');				e.cancelBubble = true; // for IE				if (e.stopPropagation) {					e.stopPropagation;					e.preventDefault;				}			});

$(document).click( function(e) {				var $target = $(e.target);				if ( ! $target.is('.wp-teahouse-question-form *') && ! $target.is('.wp-teahouse-ask *') ) {					$('.wp-teahouse-question-form').fadeOut;				}			} );

$(document).keydown( function(e) {				if ( e.keyCode == 27 ) {// ESC					$('.wp-teahouse-question-form').fadeOut;				}			}); } );	} ); } )(jQuery,mediaWiki);

if ( mw.config.get("wgPageName") == 'Wikipedia:Teahouse/Questions' ) { (function($,mw) {	$(function { mw.loader.using( ['jquery.ui.button', 'mediawiki.api'], function {		function addResponse( section, headline, text ) {			var wikitext = '\n\n:' + text;			$('.wp-teahouse-respond-form').hide;			$('.wp-teahouse-respond')				.find('.selflink')				.empty				.addClass('mw-ajax-loader');			var api = new mw.Api;			api.get( { 'action' : 'query', 'titles' : 'Wikipedia:Teahouse/Questions', 'prop'  : 'revisions|info', 'intoken' : 'edit', 'rvprop' : 'content', 'indexpageids' : 1 }, {				'ok' : function(result) { result = result.query; var page = result.pages[result.pageids[0]]; api.post(						{							'action' : 'edit',							'section' : section,							'title' : 'Wikipedia:Teahouse/Questions',							'appendtext' : wikitext,							'summary' : '/* ' + headline + ' */' + ' response',							'token' : page.edittoken						},						{							'ok' : function {window.location.reload;}						}					); }			});		}			var headers = $('h2:gt(0)').find('.mw-editsection:first'); 			var k;			var header;       			headers.each(function(k) { $(this).prepend(" «  Join this discussion     "); var formCode = 	' You can type your response below.  On Wikipedia, you should sign all of your posts by ending them with four tildes (~) Add my response '; var rLink = $('#wp-teahouse-respond-' + k); rLink.after(formCode); var rForm = $('#wp-teahouse-respond-form-' + k); var rText = $('#wp-th-respond-text-' + k); var rButton = $('#wp-th-respond-' + k); var headline = $(this).parents('h2').find('span.mw-headline').html; headline = headline.replace(/ [\d]*<\/span> /, ''); // Prevent flash rForm.css( 'left', '-10000px' ); // Set up position setTimeout( function {					var pos = rLink.position;					var hCenter = ( $(window).width / 2 );					rForm.css( 'top', pos.top + 20 + 'px' );					rForm.css( 'left', (hCenter - (rForm.width) /2) + 'px' );					rForm.hide;				}, 0); rButton.button({disabled : true}).click( function(e) {					e.preventDefault;					var text = rText.val;						addResponse( k+1, headline, text );				}).end rText.keypress( function(e) {						var $textbox = $(this);						setTimeout( function { if ( (/~\s*$/).test($textbox.val) ) { rButton.button( 'option','disabled', false ); } else { rButton.button( 'option','disabled', true ); }						}, 0 );					} );				rLink.click(function(e) {					rForm.toggle('fast');					e.cancelBubble = true; // for IE					if (e.stopPropagation) {						e.stopPropagation;						e.preventDefault;					}				}); $(document).click( function(e) {				var $target = $(e.target);				if ( ! $target.is('.wp-teahouse-respond-form *') && ! $target.is('.wp-teahouse-respond *') ) {					$('.wp-teahouse-respond-form').fadeOut;				}			} ); $(document).keydown( function(e) {					if ( e.keyCode == 27 ) {// ESC						rForm.fadeOut;					}				});  //after loop }); 		});	} ); } )(jQuery,mediaWiki); } //