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 Wikipedia:Teahouse/Questions

*/

//

(function($,mw) {

mw.teahouse = {

'questionform' : ' \

\

Write out your question in the textbox below.
Please be specific in your question rather than general.
If it\'s about a particular Wikipedia page, please name it.

\

\

\

\

\

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 ) {

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

$('.wp-teahouse-ask')

.empty()

.addClass('mw-ajax-loader');

var api = new mw.Api();

api.postWithEditToken({

'action' : 'edit',

'title' : 'Wikipedia:Teahouse',

'section' : 'new',

'sectiontitle' : title,

'text' : text,

}).done(function() {

location.reload();

});

}

};

$(function() {

mw.loader.using( ['jquery.ui', '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' ) {

(function($,mw) {

$(function() {

mw.loader.using( ['jquery.ui', '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.postWithToken( 'csrf',

{

'action' : 'edit',

'section' : section,

'title' : 'Wikipedia:Teahouse',

'appendtext' : wikitext,

'summary' : '/* ' + headline + ' */' + ' response'

}).done (

function() {location.reload();}

);

}

var headers = $('h2:gt(0)').find('.mw-editsection:first');

var $a, k, matches;

headers.each(function(k) {

$a = $(this).find('a');

if( !$a ) { return; }

$a.each(function(){

matches = $(this).attr( 'href' ).match( /&(?:ve|)section=(\d+)/ );

if( matches ) {

k = matches[1];

return false;

}

});

$(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, 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);

}

//