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); //