MediaWiki:Gadget-commentr.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. |

* |_____________________________________________________________________________|

*

* Quick comments form, intended for use on help pages

* Based on Teahouse "Ask a question" feature (MediaWiki:Gadget-teahouse.js) by Andrew Garrett

*/

//

(function($,mw) {

mw.commentr = {

addComment : function( sourcePage, text, targetPage ) {

var editSummary = "New comment from " + sourcePage + "";

var wikitext = "\n\n== Comment from " + sourcePage + " ==\n" + text;

if ( (/~~~~\s*$/).test(wikitext) ) {

wikitext += " \n"; // if they signed already

} else {

wikitext += " -- ~~~~ \n"; // else add a sig for them

}

$('#wp-commentr-form-save').button({disabled : true });

$('#wp-commentr-form-save .ui-button-text').html('Saving...');

$('#wp-commentr-link')

.find('.selflink')

.empty()

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

var api = new mw.Api();

api.get( {

'action' : 'query',

'titles' : targetPage,

'prop' : 'revisions',

'meta': 'tokens',

'type' : 'csrf',

'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 + wikitext;

api.post(

{

'action' : 'edit',

'title' : targetPage,

'text' : newText,

'summary' : editSummary,

'token' : result.tokens.csrftoken

},

{

'ok' : function() {window.location.reload();}

}

);

}

});

}

};

$(function() {

mw.loader.using( ['jquery.ui', 'mediawiki.api'], function() {

if ( !$('#wp-commentr-link').length ) { // if there's no link on the page, we're done here.

return;

}

var $link = $('#wp-commentr-link');

var $form = $('#wp-commentr-form');

var $saveButton = $form.find('#wp-commentr-form-save');

var targetPage = $form.find('#wp-commentr-form-targetpage').html();

// Add a real textarea, and remove the placeholder

var $textArea = $('');

$('#wp-commentr-form-textplaceholder').after($textArea).remove();

// Prevent flash

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

// Set up position

setTimeout( function() {

var pos = $link.position();

var hCenter = ( $link.parent().width() / 2 );

$form.css( 'top', pos.top + $link.height() + 'px' );

$form.css( 'left', (hCenter - ($form.width()) / 2) + 'px' );

$form.hide();

}, 0);

$saveButton

.button({

disabled : true // disable until they type something

})

.click( function(e) {

e.preventDefault();

var sourcePage = mw.config.get('wgPageName');

var text = $textArea.val();

if ( text ) { // only submit if something there

mw.commentr.addComment( sourcePage, text, targetPage );

}

})

$textArea.keypress( function(e) {

var $textbox = $(this);

setTimeout( function() {

if ( $textbox.val() !== '' ) {

$saveButton.button( 'option','disabled', false );

} else {

$saveButton.button( 'option','disabled', true );

}

}, 0 );

} );

$link.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-commentr-form *') && ! $target.is('#wp-commentr-link *') ) {

$form.fadeOut();

}

} );

$(document).keydown( function(e) {

if ( e.keyCode === 27 ) { // ESC

$form.fadeOut();

}

});

} );

} );

} )(jQuery,mediaWiki);

//