ApiSandbox: Visual separation of fields
[mediawiki.git] / resources / src / mediawiki.messagePoster / mediawiki.messagePoster.WikitextMessagePoster.js
blob862454d88bcd23b67cc01a9796b5d496747f6fb4
1 /*global OO*/
2 ( function ( mw, $ ) {
3         /**
4          * This is an implementation of MessagePoster for wikitext talk pages.
5          *
6          * @class mw.messagePoster.WikitextMessagePoster
7          * @extends mw.messagePoster.MessagePoster
8          *
9          * @constructor
10          * @param {mw.Title} title Wikitext page in a talk namespace, to post to
11          * @param {mw.Api} api mw.Api object to use
12          */
13         function WikitextMessagePoster( title, api ) {
14                 this.api = api;
15                 this.title = title;
16         }
18         OO.inheritClass(
19                 WikitextMessagePoster,
20                 mw.messagePoster.MessagePoster
21         );
23         /**
24          * @inheritdoc
25          */
26         WikitextMessagePoster.prototype.post = function ( subject, body ) {
27                 mw.messagePoster.WikitextMessagePoster.parent.prototype.post.call( this, subject, body );
29                 // Add signature if needed
30                 if ( body.indexOf( '~~~' ) === -1 ) {
31                         body += '\n\n~~~~';
32                 }
34                 return this.api.newSection(
35                         this.title,
36                         subject,
37                         body,
38                         { redirect: true }
39                 ).then( function ( resp, jqXHR ) {
40                         if ( resp.edit.result === 'Success' ) {
41                                 return $.Deferred().resolve( resp, jqXHR );
42                         } else {
43                                 // mw.Api checks for response error.  Are there actually cases where the
44                                 // request fails, but it's not caught there?
45                                 return $.Deferred().reject( 'api-unexpected' );
46                         }
47                 }, function ( code, details ) {
48                         return $.Deferred().reject( 'api-fail', code, details );
49                 } ).promise();
50         };
52         mw.messagePoster.factory.register( 'wikitext', WikitextMessagePoster );
53         mw.messagePoster.WikitextMessagePoster = WikitextMessagePoster;
54 }( mediaWiki, jQuery ) );