2a48ee6439b3064a74b40b154be8eac1540825b0
2 * Scripts for pre-emptive edit preparing on action=edit
6 var idleTimeout
= 3000,
9 $form
= $( '#editform' ),
10 $text
= $form
.find( '#wpTextbox1' ),
11 $summary
= $form
.find( '#wpSummary' ),
15 // Send a request to stash the edit to the API.
16 // If a request is in progress, abort it since its payload is stale and the API
17 // may limit concurrent stash parses.
18 function stashEdit() {
23 api
.getToken( 'csrf' ).then( function ( token
) {
24 data
= $form
.serializeObject();
29 title
: mw
.config
.get( 'wgPageName' ),
30 section
: data
.wpSection
,
32 text
: data
.wpTextbox1
,
33 summary
: data
.wpSummary
,
34 contentmodel
: data
.model
,
35 contentformat
: data
.format
,
36 baserevid
: data
.parentRevId
41 // Check if edit body text changed since the last stashEdit() call or if no edit
42 // stash calls have yet been made
43 function isChanged() {
44 // Normalize line endings to CRLF, like $.fn.serializeObject does.
45 var newText
= $text
.val().replace( /\r?\n/g, '\r\n' );
46 return newText
!== data
.wpTextbox1
;
49 function onTextChanged() {
57 function onTextKeyPress( e
) {
58 // Ignore keystrokes that don't modify text, like cursor movements.
59 // See <http://stackoverflow.com/q/2284844>.
60 if ( e
.which
=== 0 ) {
64 clearTimeout( timer
);
70 timer
= setTimeout( onTextChanged
, idleTimeout
);
73 function onFormLoaded() {
74 // Reverts may involve use (undo) links; stash as they review the diff.
75 // Since the form has a pre-filled summary, stash the edit immediately.
76 if ( mw
.util
.getParamValue( 'undo' ) !== null ) {
81 // We don't attempt to stash new section edits because in such cases
82 // the parser output varies on the edit summary (since it determines
83 // the new section's name).
84 if ( $form
.find( 'input[name=wpSection]' ).val() === 'new' ) {
88 $text
.on( { change
: onTextChanged
, keypress
: onTextKeyPress
} );
89 $summary
.on( { focus
: onTextChanged
} );
93 }( mediaWiki
, jQuery
) );