mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-25 11:16:51 +00:00
Merge "Cleanup getDocToSave API and use in source mode"
This commit is contained in:
commit
8ff3ea60ec
|
@ -641,7 +641,6 @@ ve.init.mw.DesktopArticleTarget.prototype.cancel = function ( trackMechanism ) {
|
|||
}
|
||||
|
||||
target.clearState();
|
||||
target.docToSave = null;
|
||||
target.initialEditSummary = new mw.Uri().query.summary;
|
||||
|
||||
target.deactivating = false;
|
||||
|
@ -1550,7 +1549,7 @@ ve.init.mw.DesktopArticleTarget.prototype.switchToWikitextEditor = function ( di
|
|||
} );
|
||||
} else {
|
||||
this.serialize(
|
||||
this.docToSave || this.getSurface().getDom(),
|
||||
this.getDocToSave(),
|
||||
function ( wikitext ) {
|
||||
ve.track( 'mwedit.abort', { type: 'switchwith', mechanism: 'navigate' } );
|
||||
target.submitWithSaveFields( { wpDiff: 1, wpAutoSummary: '' }, wikitext );
|
||||
|
|
|
@ -47,7 +47,7 @@ ve.init.mw.DesktopWikitextArticleTarget.prototype.switchToWikitextEditor = funct
|
|||
var dataPromise,
|
||||
target = this;
|
||||
|
||||
this.serialize( this.docToSave || this.getSurface().getDom() );
|
||||
this.serialize( this.getDocToSave() );
|
||||
dataPromise = this.serializing.then( function ( response ) {
|
||||
// HACK
|
||||
var data = response.visualeditor;
|
||||
|
@ -71,16 +71,16 @@ ve.init.mw.DesktopWikitextArticleTarget.prototype.switchToWikitextEditor = funct
|
|||
ve.init.mw.DesktopWikitextArticleTarget.prototype.switchToVisualEditor = function () {
|
||||
var dataPromise;
|
||||
|
||||
this.setMode( 'visual' );
|
||||
|
||||
dataPromise = mw.libs.ve.targetLoader.requestParsoidData(
|
||||
this.pageName,
|
||||
this.revid,
|
||||
this.constructor.name,
|
||||
this.edited,
|
||||
this.getWikitextFromDocument( this.getSurface().getDom() )
|
||||
this.getDocToSave()
|
||||
);
|
||||
|
||||
this.setMode( 'visual' );
|
||||
|
||||
this.reloadSurface( dataPromise );
|
||||
};
|
||||
|
||||
|
@ -259,33 +259,47 @@ ve.init.mw.DesktopWikitextArticleTarget.prototype.prepareCacheKey = function ()
|
|||
// else: No need, just wikitext
|
||||
};
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
ve.init.mw.DesktopWikitextArticleTarget.prototype.createDocToSave = function () {
|
||||
var i, l, text, data;
|
||||
|
||||
if ( this.mode !== 'source' ) {
|
||||
// Parent method
|
||||
return ve.init.mw.DesktopWikitextArticleTarget.super.prototype.createDocToSave.apply( this, arguments );
|
||||
}
|
||||
|
||||
text = '';
|
||||
data = this.getSurface().getModel().getDocument().data.data;
|
||||
for ( i = 0, l = data.length; i < l; i++ ) {
|
||||
if ( data[ i ].type === '/paragraph' && data[ i + 1 ].type === 'paragraph' ) {
|
||||
text += '\n';
|
||||
} else if ( !data[ i ].type ) {
|
||||
text += data[ i ];
|
||||
}
|
||||
}
|
||||
|
||||
return text;
|
||||
};
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
ve.init.mw.DesktopWikitextArticleTarget.prototype.tryWithPreparedCacheKey = function ( doc, options ) {
|
||||
var data;
|
||||
if ( this.mode === 'source' ) {
|
||||
data = ve.extendObject( {}, options, { format: 'json' } );
|
||||
|
||||
data.wikitext = this.getWikitextFromDocument( doc );
|
||||
|
||||
return new mw.Api().post( data, { contentType: 'multipart/form-data' } );
|
||||
return new mw.Api().post( ve.extendObject( {}, options, {
|
||||
wikitext: doc,
|
||||
format: 'json'
|
||||
} ),
|
||||
{ contentType: 'multipart/form-data' }
|
||||
);
|
||||
} else {
|
||||
// Parent method
|
||||
return ve.init.mw.DesktopWikitextArticleTarget.super.prototype.tryWithPreparedCacheKey.apply( this, arguments );
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Get wikitext for the whole document
|
||||
*
|
||||
* @param {ve.dm.Document} doc Document
|
||||
* @return {string} Wikitext
|
||||
*/
|
||||
ve.init.mw.DesktopWikitextArticleTarget.prototype.getWikitextFromDocument = function ( doc ) {
|
||||
return Array.prototype.map.call( doc.body.children, function ( p ) { return p.innerText; } ).join( '\n' );
|
||||
};
|
||||
|
||||
/* Registration */
|
||||
|
||||
ve.init.mw.targetFactory.register( ve.init.mw.DesktopWikitextArticleTarget );
|
||||
|
|
|
@ -893,9 +893,9 @@ ve.init.mw.ArticleTarget.prototype.onSaveDialogReview = function () {
|
|||
this.saveDialog.pushPending();
|
||||
if ( this.pageExists ) {
|
||||
// Has no callback, handled via target.showChangesDiff
|
||||
this.showChanges( this.docToSave );
|
||||
this.showChanges( this.getDocToSave() );
|
||||
} else {
|
||||
this.serialize( this.docToSave, this.onSaveDialogReviewComplete.bind( this ) );
|
||||
this.serialize( this.getDocToSave(), this.onSaveDialogReviewComplete.bind( this ) );
|
||||
}
|
||||
} else {
|
||||
this.saveDialog.swapPanel( 'review' );
|
||||
|
@ -924,7 +924,7 @@ ve.init.mw.ArticleTarget.prototype.onSaveDialogReviewComplete = function ( wikit
|
|||
ve.init.mw.ArticleTarget.prototype.onSaveDialogResolveConflict = function () {
|
||||
// Get Wikitext from the DOM, and set up a submit call when it's done
|
||||
this.serialize(
|
||||
this.docToSave,
|
||||
this.getDocToSave(),
|
||||
this.submitWithSaveFields.bind( this, { wpSave: 1 } )
|
||||
);
|
||||
};
|
||||
|
@ -946,21 +946,6 @@ ve.init.mw.ArticleTarget.prototype.onSaveDialogRetry = function () {
|
|||
* @fires saveWorkflowEnd
|
||||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.onSaveDialogClose = function () {
|
||||
var target = this;
|
||||
|
||||
function clear() {
|
||||
target.docToSave = null;
|
||||
target.clearPreparedCacheKey();
|
||||
}
|
||||
|
||||
// Clear the cached HTML and cache key once the document changes
|
||||
if ( this.getSurface() ) {
|
||||
this.getSurface().getModel().getDocument().once( 'transact', clear );
|
||||
this.getSurface().once( 'destroy', clear );
|
||||
} else {
|
||||
clear();
|
||||
}
|
||||
|
||||
this.emit( 'saveWorkflowEnd' );
|
||||
};
|
||||
|
||||
|
@ -1036,6 +1021,43 @@ ve.init.mw.ArticleTarget.prototype.clearState = function () {
|
|||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.editSource = null;
|
||||
|
||||
/**
|
||||
* Get a document to save, cached until the surface is modified
|
||||
*
|
||||
* The default implementation returns an HTMLDocument, but other targets
|
||||
* may use a different document model (e.g. plain text for source mode).
|
||||
*
|
||||
* @return {Object} Document to save
|
||||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.getDocToSave = function () {
|
||||
var surface;
|
||||
if ( !this.docToSave ) {
|
||||
this.docToSave = this.createDocToSave();
|
||||
// Cache clearing events
|
||||
surface = this.getSurface();
|
||||
surface.getModel().getDocument().once( 'transact', this.clearDocToSave.bind( this ) );
|
||||
surface.once( 'destroy', this.clearDocToSave.bind( this ) );
|
||||
}
|
||||
return this.docToSave;
|
||||
};
|
||||
|
||||
/**
|
||||
* Create a document to save
|
||||
*
|
||||
* @return {Object} Document to save
|
||||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.createDocToSave = function () {
|
||||
return this.getSurface().getDom();
|
||||
};
|
||||
|
||||
/**
|
||||
* Clear the document to save from the cache
|
||||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.clearDocToSave = function () {
|
||||
this.docToSave = null;
|
||||
this.clearPreparedCacheKey();
|
||||
};
|
||||
|
||||
/**
|
||||
* Serialize the current document and store the result in the serialization cache on the server.
|
||||
*
|
||||
|
@ -1278,10 +1300,7 @@ ve.init.mw.ArticleTarget.prototype.onSaveDialogSave = function ( saveDeferred )
|
|||
* @param {Object} saveOptions Save options
|
||||
*/
|
||||
ve.init.mw.ArticleTarget.prototype.startSave = function ( saveOptions ) {
|
||||
if ( !this.docToSave ) {
|
||||
this.docToSave = this.getSurface().getDom();
|
||||
}
|
||||
this.save( this.docToSave, saveOptions );
|
||||
this.save( this.getDocToSave(), saveOptions );
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -1606,10 +1625,7 @@ ve.init.mw.ArticleTarget.prototype.showSaveDialog = function () {
|
|||
this.emit( 'saveWorkflowBegin' );
|
||||
|
||||
// Preload the serialization
|
||||
if ( !this.docToSave ) {
|
||||
this.docToSave = this.getSurface().getDom();
|
||||
}
|
||||
this.prepareCacheKey( this.docToSave );
|
||||
this.prepareCacheKey( this.getDocToSave() );
|
||||
|
||||
// Connect events to save dialog
|
||||
this.getSurface().getDialogs().getWindow( 'mwSave' ).done( function ( win ) {
|
||||
|
|
Loading…
Reference in a new issue