mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
synced 2024-09-25 03:08:42 +00:00
Merge "Offer to retain changes when switching to the wikitext editor"
This commit is contained in:
commit
87663c99e0
|
@ -660,6 +660,7 @@ $wgResourceModules += array(
|
|||
'modules/ve-mw/ui/dialogs/ve.ui.MWSaveDialog.js',
|
||||
'modules/ve-mw/ui/dialogs/ve.ui.MWBetaWelcomeDialog.js',
|
||||
'modules/ve-mw/ui/dialogs/ve.ui.MWCommandHelpDialog.js',
|
||||
'modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js',
|
||||
|
||||
'modules/ve-mw/ui/tools/ve.ui.MWEditModeTool.js',
|
||||
'modules/ve-mw/ui/tools/ve.ui.MWPopupTool.js',
|
||||
|
@ -707,6 +708,7 @@ $wgResourceModules += array(
|
|||
'visualeditor-mweditmodesource-title',
|
||||
'visualeditor-mweditmodesource-warning',
|
||||
'visualeditor-mweditmodesource-warning-switch',
|
||||
'visualeditor-mweditmodesource-warning-switch-discard',
|
||||
'visualeditor-mweditmodesource-warning-cancel',
|
||||
'visualeditor-pagemenu-tooltip',
|
||||
'visualeditor-pagetranslationwarning',
|
||||
|
|
|
@ -184,9 +184,10 @@
|
|||
"visualeditor-meta-tool": "Options",
|
||||
"visualeditor-mwalienextensioninspector-title": "MediaWiki extension",
|
||||
"visualeditor-mweditmodesource-title": "Switch to source editing",
|
||||
"visualeditor-mweditmodesource-warning": "You are about to switch to source editing.\nAny changes you've made to this document will be kept, but you will not be able switch back to VisualEditor without saving or reloading the page.\nDo you want to continue?",
|
||||
"visualeditor-mweditmodesource-warning-switch": "Yes, switch",
|
||||
"visualeditor-mweditmodesource-warning-cancel": "No, cancel",
|
||||
"visualeditor-mweditmodesource-warning": "You are about to switch to source editing.\nAny changes you've made to this document can be kept, but you will not be able switch back to VisualEditor without saving or reloading the page.\nDo you want to continue?",
|
||||
"visualeditor-mweditmodesource-warning-switch": "Keep changes",
|
||||
"visualeditor-mweditmodesource-warning-switch-discard": "Discard changes",
|
||||
"visualeditor-mweditmodesource-warning-cancel": "Cancel",
|
||||
"visualeditor-mwgalleryinspector-placeholder": "Example.jpg|Caption for image",
|
||||
"visualeditor-mwgalleryinspector-title": "Gallery",
|
||||
"visualeditor-pagemenu-tooltip": "Page options",
|
||||
|
|
|
@ -190,7 +190,8 @@
|
|||
"visualeditor-mwalienextensioninspector-title": "Used as title for unknown MediaWiki extensions.\n{{Identical|MediaWiki extension}}",
|
||||
"visualeditor-mweditmodesource-title": "Label for changing edit mode to source editing.",
|
||||
"visualeditor-mweditmodesource-warning": "Warning message show before changing edit mode to source editing.",
|
||||
"visualeditor-mweditmodesource-warning-switch": "Label for the OK button on the confirmation dialog for switching to source editing.",
|
||||
"visualeditor-mweditmodesource-warning-switch": "Label for the keep changes button on the confirmation dialog for switching to source editing.",
|
||||
"visualeditor-mweditmodesource-warning-switch-discard": "Label for the discard changes button on the confirmation dialog for switching to source editing.",
|
||||
"visualeditor-mweditmodesource-warning-cancel": "Label for the cancel button on the confirmation dialog for switching to source editing.",
|
||||
"visualeditor-mwgalleryinspector-placeholder": "Placeholder text for the gallery inspector demonstrating how gallery syntax works.",
|
||||
"visualeditor-mwgalleryinspector-title": "Used as title for the gallery inspector.\n{{Identical|Gallery}}",
|
||||
|
|
|
@ -892,25 +892,34 @@ ve.init.mw.ViewPageTarget.prototype.saveDocument = function ( saveDeferred ) {
|
|||
* @method
|
||||
*/
|
||||
ve.init.mw.ViewPageTarget.prototype.editSource = function () {
|
||||
var confirmDialog = this.surface.dialogs.getWindow( 'confirm' ),
|
||||
$documentNode = this.surface.getView().getDocument().getDocumentNode().$element,
|
||||
var $documentNode = this.surface.getView().getDocument().getDocumentNode().$element,
|
||||
target = this;
|
||||
|
||||
$documentNode.css( 'opacity', 0.5 );
|
||||
|
||||
confirmDialog.open( {
|
||||
'prompt': ve.msg( 'visualeditor-mweditmodesource-warning' ),
|
||||
'okLabel': ve.msg( 'visualeditor-mweditmodesource-warning-switch' ),
|
||||
'okFlags': [ 'primary' ],
|
||||
'cancelLabel': ve.msg( 'visualeditor-mweditmodesource-warning-cancel' ),
|
||||
'cancelFlags': []
|
||||
} ).then( function ( closingPromise ) {
|
||||
closingPromise.then( function () {
|
||||
// Get Wikitext from the DOM
|
||||
target.serialize(
|
||||
target.docToSave || ve.dm.converter.getDomFromModel( target.surface.getModel().getDocument() ),
|
||||
ve.bind( target.submitWithSaveFields, target, { 'wpDiff': 1, 'veswitched': 1 } )
|
||||
);
|
||||
this.surface.dialogs.getWindow( 'wikitextswitchconfirm' ).open().then( function ( closingPromise ) {
|
||||
closingPromise.then( function ( result ) {
|
||||
if ( result.action === 'switch' ) {
|
||||
// Get Wikitext from the DOM
|
||||
target.serialize(
|
||||
target.docToSave || ve.dm.converter.getDomFromModel( target.surface.getModel().getDocument() ),
|
||||
ve.bind( target.submitWithSaveFields, target, { 'wpDiff': 1, 'veswitched': 1 } )
|
||||
);
|
||||
} else if ( result.action === 'discard' ) {
|
||||
target.submitting = true;
|
||||
$( '<form method="get" style="display: none;"></form>' ).append(
|
||||
$( '<input>' ).attr( {
|
||||
'name': 'action',
|
||||
'value': 'edit',
|
||||
'type': 'hidden'
|
||||
} ),
|
||||
$( '<input>' ).attr( {
|
||||
'name': 'veswitched',
|
||||
'value': 1,
|
||||
'type': 'hidden'
|
||||
} )
|
||||
).appendTo( 'body' ).submit();
|
||||
}
|
||||
}, function () {
|
||||
// Undo the opacity change
|
||||
$documentNode.css( 'opacity', 1 );
|
||||
|
@ -1081,10 +1090,16 @@ ve.init.mw.ViewPageTarget.prototype.tearDownSurface = function () {
|
|||
* @method
|
||||
*/
|
||||
ve.init.mw.ViewPageTarget.prototype.setupSkinTabs = function () {
|
||||
var viewPageTarget = this;
|
||||
if ( this.isViewPage ) {
|
||||
// Allow instant switching back to view mode, without refresh
|
||||
$( '#ca-view a, #ca-nstab-visualeditor a' )
|
||||
.click( ve.bind( this.onViewTabClick, this ) );
|
||||
|
||||
$( '#ca-viewsource, #ca-edit' ).click( function ( e ) {
|
||||
viewPageTarget.editSource();
|
||||
e.preventDefault();
|
||||
} );
|
||||
}
|
||||
|
||||
mw.hook( 've.skinTabSetupComplete' ).fire();
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* Dialog for showing a confirmation/warning message.
|
||||
*
|
||||
* @class
|
||||
* @extends ve.ui.Dialog
|
||||
*
|
||||
* @constructor
|
||||
* @param {Object} [config] Configuration options
|
||||
*/
|
||||
ve.ui.MWWikitextSwitchConfirmDialog = function VeUiMWWikitextSwitchConfirmDialog( config ) {
|
||||
// Configuration initialization
|
||||
config = $.extend( { 'size': 'small' }, config );
|
||||
|
||||
// Parent constructor
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.super.call( this, config );
|
||||
};
|
||||
|
||||
/* Inheritance */
|
||||
|
||||
OO.inheritClass( ve.ui.MWWikitextSwitchConfirmDialog, OO.ui.Dialog );
|
||||
|
||||
/* Static Properties */
|
||||
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.static.name = 'wikitextswitchconfirm';
|
||||
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.static.icon = 'help';
|
||||
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.static.title = OO.ui.deferMsg( 'ooui-dialog-confirm-title' );
|
||||
|
||||
/* Methods */
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.prototype.initialize = function () {
|
||||
// Parent method
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.super.prototype.initialize.call( this );
|
||||
|
||||
// Set up the layout
|
||||
var contentLayout = new OO.ui.PanelLayout( {
|
||||
'$': this.$,
|
||||
'padded': true
|
||||
} );
|
||||
|
||||
this.$promptContainer = this.$( '<div>' )
|
||||
.addClass( 'oo-ui-dialog-confirm-promptContainer' )
|
||||
.text( ve.msg( 'visualeditor-mweditmodesource-warning' ) );
|
||||
|
||||
this.cancelButton = new OO.ui.ButtonWidget( {
|
||||
'label': ve.msg( 'visualeditor-mweditmodesource-warning-cancel' )
|
||||
} );
|
||||
this.cancelButton.connect( this, { 'click': [ 'close', { 'action': 'cancel' } ] } );
|
||||
|
||||
this.keepChangesButton = new OO.ui.ButtonWidget( {
|
||||
'flags': 'primary',
|
||||
'label': ve.msg( 'visualeditor-mweditmodesource-warning-switch' )
|
||||
} );
|
||||
this.keepChangesButton.connect( this, { 'click': [ 'close', { 'action': 'switch' } ] } );
|
||||
|
||||
this.forgetChangesButton = new OO.ui.ButtonWidget( {
|
||||
'flags': 'destructive',
|
||||
'label': ve.msg( 'visualeditor-mweditmodesource-warning-switch-discard' )
|
||||
} );
|
||||
this.forgetChangesButton.connect( this, { 'click': [ 'close', { 'action': 'discard' } ] } );
|
||||
|
||||
// Make the buttons
|
||||
contentLayout.$element.append( this.$promptContainer );
|
||||
this.$body.append( contentLayout.$element );
|
||||
|
||||
this.$foot.append(
|
||||
this.keepChangesButton.$element,
|
||||
this.forgetChangesButton.$element,
|
||||
this.cancelButton.$element
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
ve.ui.MWWikitextSwitchConfirmDialog.prototype.getTeardownProcess = function ( data ) {
|
||||
// Parent method
|
||||
return ve.ui.MWWikitextSwitchConfirmDialog.super.prototype.getTeardownProcess.call( this, data )
|
||||
.first( function () {
|
||||
if ( data.action === 'switch' || data.action === 'discard' ) {
|
||||
this.opened.resolve( data );
|
||||
} else {
|
||||
this.opened.reject();
|
||||
}
|
||||
}, this );
|
||||
};
|
||||
|
||||
/* Registration */
|
||||
|
||||
ve.ui.windowFactory.register( ve.ui.MWWikitextSwitchConfirmDialog );
|
Loading…
Reference in a new issue