mw.messagePoster: Support foreign wikis
[lhc/web/wiklou.git] / resources / src / mediawiki.messagePoster / mediawiki.messagePoster.WikitextMessagePoster.js
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 }
17
18 OO.inheritClass(
19 WikitextMessagePoster,
20 mw.messagePoster.MessagePoster
21 );
22
23 /**
24 * @inheritdoc
25 */
26 WikitextMessagePoster.prototype.post = function ( subject, body ) {
27 mw.messagePoster.WikitextMessagePoster.parent.prototype.post.call( this, subject, body );
28
29 // Add signature if needed
30 if ( body.indexOf( '~~~' ) === -1 ) {
31 body += '\n\n~~~~';
32 }
33
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 };
51
52 mw.messagePoster.factory.register( 'wikitext', WikitextMessagePoster );
53 mw.messagePoster.WikitextMessagePoster = WikitextMessagePoster;
54 }( mediaWiki, jQuery ) );