1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
/**
* @typedef {Object} mw.Api.WatchedPage
* @property {string} title Full page name
* @property {boolean} watched Whether the page is now watched (true) or unwatched (false)
*/
( function () {
/**
* @private
*
* @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
* array thereof. If an array is passed, the return value passed to the promise will also be an
* array of appropriate objects.
* @param {Object} [addParams]
* @return {jQuery.Promise<mw.Api.WatchedPage|mw.Api.WatchedPage[]>}
*/
function doWatchInternal( pages, addParams ) {
// XXX: Parameter addParams is undocumented because we inherit this
// documentation in the public method...
const apiPromise = this.postWithToken( 'watch',
Object.assign(
{
formatversion: 2,
action: 'watch',
titles: Array.isArray( pages ) ? pages : String( pages )
},
addParams
)
);
return apiPromise
.then(
// If a single page was given (not an array) respond with a single item as well.
( data ) => Array.isArray( pages ) ? data.watch : data.watch[ 0 ]
)
.promise( { abort: apiPromise.abort } );
}
Object.assign( mw.Api.prototype, /** @lends mw.Api.prototype */ {
/**
* Convenience method for `action=watch`.
*
* @method
* @since 1.35 - expiry parameter can be passed when
* Watchlist Expiry is enabled
* @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
* array thereof. If an array is passed, the return value passed to the promise will also be an
* array of appropriate objects.
* @param {string} [expiry] When the page should expire from the watchlist. If omitted, the
* page will not expire.
* @return {jQuery.Promise<mw.Api.WatchedPage|mw.Api.WatchedPage[]>} A promise that resolves
* with an object (or array of objects) describing each page that was passed in and its
* current watched/unwatched status.
*/
watch: function ( pages, expiry ) {
return doWatchInternal.call( this, pages, { expiry: expiry } );
},
/**
* Convenience method for `action=watch&unwatch=1`.
*
* @method
* @param {string|mw.Title|string[]|mw.Title[]} pages Full page name or instance of mw.Title, or an
* array thereof. If an array is passed, the return value passed to the promise will also be an
* array of appropriate objects.
* @return {jQuery.Promise<mw.Api.WatchedPage|mw.Api.WatchedPage[]>} A promise that resolves
* with an object (or array of objects) describing each page that was passed in and its
* current watched/unwatched status.
*/
unwatch: function ( pages ) {
return doWatchInternal.call( this, pages, { unwatch: 1 } );
}
} );
}() );
|