Alex Monk has uploaded a new change for review.
https://gerrit.wikimedia.org/r/247485
Change subject: [WIP] Dialog for switching between wikitext and visual editing
......................................................................
[WIP] Dialog for switching between wikitext and visual editing
Change-Id: I7046ffbe318d046b4baee11f4148ab77fc2af7fd
---
M VisualEditor.hooks.php
M extension.json
M modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
M modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js
4 files changed, 80 insertions(+), 38 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor
refs/changes/85/247485/1
diff --git a/VisualEditor.hooks.php b/VisualEditor.hooks.php
index 9e351ec..777b24a 100644
--- a/VisualEditor.hooks.php
+++ b/VisualEditor.hooks.php
@@ -45,6 +45,9 @@
'ext.visualEditor.desktopArticleTarget.init',
'ext.visualEditor.targetLoader'
) );
+ if ( in_array( Action::getActionName( RequestContext::getMain()
), array( 'edit', 'submit' ) ) ) {
+ $output->addModules( 'ext.visualEditor.switching' );
+ }
$output->addModuleStyles( array(
'ext.visualEditor.desktopArticleTarget.noscript' ) );
// add scroll offset js variable to output
$veConfig = ConfigFactory::getDefaultInstance()->makeConfig(
'visualeditor' );
diff --git a/extension.json b/extension.json
index a3194a3..fe17405 100644
--- a/extension.json
+++ b/extension.json
@@ -950,6 +950,24 @@
"mobile"
]
},
+ "ext.visualEditor.switching": {
+ "scripts": [
+
"modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js"
+ ],
+ "dependencies": [
+ "oojs",
+ "oojs-ui",
+ "ext.visualEditor.core"
+ ],
+ "messages": [
+ "visualeditor-mweditmodesource-title",
+ "visualeditor-mweditmodesource-tool",
+ "visualeditor-mweditmodesource-warning",
+ "visualeditor-mweditmodesource-warning-cancel",
+ "visualeditor-mweditmodesource-warning-switch",
+
"visualeditor-mweditmodesource-warning-switch-discard"
+ ]
+ },
"ext.visualEditor.mwcore": {
"scripts": [
"modules/ve-mw/dm/nodes/ve.dm.MWEntityNode.js",
@@ -974,7 +992,6 @@
"modules/ve-mw/ui/dialogs/ve.ui.MWWelcomeDialog.js",
"modules/ve-mw/ui/dialogs/ve.ui.MWCommandHelpDialog.js",
"modules/ve-mw/ui/dialogs/ve.ui.MWCancelConfirmDialog.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",
"modules/ve-mw/ui/inspectors/ve.ui.MWExtensionInspector.js",
@@ -999,7 +1016,8 @@
"jquery.byteLimit",
"mediawiki.skinning.content.parsoid",
"mediawiki.language.specialCharacters",
- "mediawiki.widgets"
+ "mediawiki.widgets",
+ "ext.visualEditor.switching"
],
"messages": [
"visualeditor-beta-label",
@@ -1017,12 +1035,6 @@
"visualeditor-help-label",
"visualeditor-help-link",
"visualeditor-help-title",
- "visualeditor-mweditmodesource-title",
- "visualeditor-mweditmodesource-tool",
- "visualeditor-mweditmodesource-warning",
- "visualeditor-mweditmodesource-warning-cancel",
- "visualeditor-mweditmodesource-warning-switch",
-
"visualeditor-mweditmodesource-warning-switch-discard",
"visualeditor-pagemenu-tooltip",
"visualeditor-pagetranslationwarning",
"visualeditor-savedialog-error-badtoken",
diff --git a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
index cabc729..8e3220d 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.DesktopArticleTarget.init.js
@@ -18,7 +18,7 @@
* @singleton
*/
( function () {
- var conf, tabMessages, uri, pageExists, viewUri, veEditUri, isViewPage,
+ var conf, tabMessages, uri, pageExists, viewUri, veEditUri, isViewPage,
pageCanLoadVE,
init, support, targetPromise, enable, tempdisable, autodisable,
userPrefEnabled,
active = false,
progressStep = 0,
@@ -143,6 +143,25 @@
return targetPromise;
}
+ function activatePageTarget() {
+ trackActivateStart( { type: 'page', mechanism: 'click' } );
+
+ if ( !active ) {
+ if ( history.pushState ) {
+ // Replace the current state with one that is
tagged as ours, to prevent the
+ // back button from breaking when used to exit
VE. FIXME: there should be a better
+ // way to do this. See also similar code in the
DesktopArticleTarget constructor.
+ history.replaceState( { tag: 'visualeditor' },
document.title, uri );
+ // Set veaction to edit
+ history.pushState( { tag: 'visualeditor' },
document.title, veEditUri );
+ }
+
+ // Update mw.Uri instance
+ uri = veEditUri;
+
+ activateTarget();
+ }
+ }
/**
* Load and activate the target.
*
@@ -203,16 +222,15 @@
uri = new mw.Uri();
pageExists = !!mw.config.get( 'wgRelevantArticleId' );
viewUri = new mw.Uri( mw.util.getUrl( mw.config.get(
'wgRelevantPageName' ) ) );
- isViewPage = (
- mw.config.get( 'wgIsArticle' ) &&
- !( 'diff' in uri.query )
- ) || (
+ isViewPage = mw.config.get( 'wgIsArticle' ) && !( 'diff' in uri.query );
+ pageCanLoadVE = (
+ isViewPage ||
mw.config.get( 'wgAction' ) === 'edit' ||
mw.config.get( 'wgAction' ) === 'submit'
);
// On a view page, extend the current URI so parameters like oldid are
carried over
// On a non-view page, use viewUri
- veEditUri = ( isViewPage ? uri : viewUri ).clone().extend( { veaction:
'edit' } );
+ veEditUri = ( pageCanLoadVE ? uri : viewUri ).clone().extend( {
veaction: 'edit' } );
support = {
es5: !!(
@@ -326,7 +344,7 @@
// Use url instead of '#'.
// So that 1) one can always
open it in a new tab, even when
// onEditTabClick is bound.
- // 2) when onEditTabClick is
not bound (!isViewPage) it will
+ // 2) when onEditTabClick is
not bound (!pageCanLoadVE) it will
// just work.
veEditUri,
tabMessages[ action ] !== null
? mw.msg( tabMessages[ action ] ) : $caEditLink.text(),
@@ -396,7 +414,7 @@
);
}
- if ( isViewPage ) {
+ if ( pageCanLoadVE ) {
// Allow instant switching to edit mode,
without refresh
$caVeEdit.click( init.onEditTabClick );
}
@@ -470,7 +488,7 @@
);
}
- if ( isViewPage ) {
+ if ( pageCanLoadVE ) {
// Only init without refresh if we're on a view
page. Though section edit links
// are rarely shown on non-view pages, they
appear in one other case, namely
// when on a diff against the latest version of
a page. In that case we mustn't
@@ -484,6 +502,10 @@
},
onEditTabClick: function ( e ) {
+ var wikitextModified = true, // TODO: This.
+ windowManager = new OO.ui.WindowManager,
+ switchWindow;
+
// Default mouse button is normalised by jQuery to key
code 1.
// Only do our handling if no keys are pressed, mouse
button is 1
// (e.g. not middle click or right click) and no
modifier keys
@@ -492,22 +514,27 @@
return;
}
- trackActivateStart( { type: 'page', mechanism: 'click'
} );
+ if ( !isViewPage && ( mw.config.get( 'wgAction' ) ===
'submit' || wikitextModified ) ) {
+ // Prompt if either we're on action=submit (the
user has previewed) or
+ // the wikitext hash is different to the value
observed upon page load.
- if ( !active ) {
- if ( history.pushState ) {
- // Replace the current state with one
that is tagged as ours, to prevent the
- // back button from breaking when used
to exit VE. FIXME: there should be a better
- // way to do this. See also similar
code in the DesktopArticleTarget constructor.
- history.replaceState( { tag:
'visualeditor' }, document.title, uri );
- // Set veaction to edit
- history.pushState( { tag:
'visualeditor' }, document.title, veEditUri );
- }
-
- // Update mw.Uri instance
- uri = veEditUri;
-
- activateTarget();
+ $( 'body' ).append( windowManager.$element );
+ switchWindow = new
ve.ui.MWWikitextSwitchConfirmDialog;
+ windowManager.addWindows( [ switchWindow ] );
+ windowManager.openWindow( switchWindow ).done(
function ( opened ) {
+ opened.done( function ( closing ) {
+ closing.done( function ( data )
{
+ if ( data &&
data.action === 'keep' ) {
+
activatePageTarget();
+ } else if ( data &&
data.action === 'discard' ) {
+ // TODO:
Probably some improvements to be made around the way this works.
+ location.href =
veEditUri;
+ }
+ } );
+ } );
+ } );
+ } else {
+ activatePageTarget();
}
e.preventDefault();
@@ -608,7 +635,7 @@
isSection;
if ( init.isAvailable ) {
- if ( isViewPage && uri.query.veaction === 'edit' ) {
+ if ( pageCanLoadVE && uri.query.veaction === 'edit' ) {
isSection = uri.query.vesection !== undefined;
trackActivateStart( { type: isSection ?
'section' : 'page', mechanism: 'url' } );
diff --git a/modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js
b/modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js
index 2bf9f6d..3f098c6 100644
--- a/modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js
+++ b/modules/ve-mw/ui/dialogs/ve.ui.MWWikitextSwitchConfirmDialog.js
@@ -34,24 +34,24 @@
ve.ui.MWWikitextSwitchConfirmDialog.static.icon = 'help';
ve.ui.MWWikitextSwitchConfirmDialog.static.title =
- OO.ui.deferMsg( 'visualeditor-mweditmodesource-title' );
+ mw.msg( 'visualeditor-mweditmodesource-title' );
ve.ui.MWWikitextSwitchConfirmDialog.static.message =
- OO.ui.deferMsg( 'visualeditor-mweditmodesource-warning' );
+ mw.msg( 'visualeditor-mweditmodesource-warning' );
ve.ui.MWWikitextSwitchConfirmDialog.static.actions = [
{
- label: OO.ui.deferMsg(
'visualeditor-mweditmodesource-warning-cancel' ),
+ label: mw.msg( 'visualeditor-mweditmodesource-warning-cancel' ),
flags: [ 'safe', 'back' ]
},
{
action: 'keep',
- label: OO.ui.deferMsg(
'visualeditor-mweditmodesource-warning-switch' ),
+ label: mw.msg( 'visualeditor-mweditmodesource-warning-switch' ),
flags: [ 'progressive', 'primary' ]
},
{
action: 'discard',
- label: OO.ui.deferMsg(
'visualeditor-mweditmodesource-warning-switch-discard' ),
+ label: mw.msg(
'visualeditor-mweditmodesource-warning-switch-discard' ),
flags: 'destructive'
}
];
--
To view, visit https://gerrit.wikimedia.org/r/247485
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7046ffbe318d046b4baee11f4148ab77fc2af7fd
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Alex Monk <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits