jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/365644 )
Change subject: Move historical diff loading to DiffLoader util
......................................................................
Move historical diff loading to DiffLoader util
Change-Id: I318752ede2e5c90f9d0ecd26b39e997fff2d60bd
---
M extension.json
A modules/ve-mw/init/ve.init.mw.DiffLoader.js
M modules/ve-mw/init/ve.init.mw.DiffPage.init.js
3 files changed, 105 insertions(+), 36 deletions(-)
Approvals:
Bartosz Dziewoński: Looks good to me, approved
jenkins-bot: Verified
Jforrester: Looks good to me, but someone else must approve
diff --git a/extension.json b/extension.json
index 40426ac..623375b 100644
--- a/extension.json
+++ b/extension.json
@@ -1870,11 +1870,20 @@
"modules/ve-mw/init/styles/ve.init.mw.DiffPage.less"
]
},
+ "ext.visualEditor.diffLoader": {
+ "scripts": [
+ "modules/ve-mw/init/ve.init.mw.DiffLoader.js"
+ ],
+ "dependencies": [
+ "ext.visualEditor.targetLoader"
+ ]
+ },
"ext.visualEditor.diffPage.init": {
"scripts": [
"modules/ve-mw/init/ve.init.mw.DiffPage.init.js"
],
"dependencies": [
+ "ext.visualEditor.diffLoader",
"oojs-ui",
"oojs-ui.styles.icons-alerts",
"oojs-ui.styles.icons-editing-advanced",
diff --git a/modules/ve-mw/init/ve.init.mw.DiffLoader.js
b/modules/ve-mw/init/ve.init.mw.DiffLoader.js
new file mode 100644
index 0000000..00aa243
--- /dev/null
+++ b/modules/ve-mw/init/ve.init.mw.DiffLoader.js
@@ -0,0 +1,92 @@
+/*!
+ * VisualEditor MediaWiki DiffLoader.
+ *
+ * @copyright 2011-2017 VisualEditor Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+
+/**
+ * Diff loader.
+ *
+ * @class mw.libs.ve.diffLoader
+ * @singleton
+ */
+( function () {
+ var revCache = {};
+
+ mw.libs.ve = mw.libs.ve || {};
+
+ mw.libs.ve.diffLoader = {
+
+ /**
+ * Get a ve.dm.Document model from a Parsoid response
+ *
+ * @param {Object} response Parsoid response from the
VisualEditor API
+ * @return {ve.dm.Document|null} Document, or null if an
invalid response
+ */
+ getModelFromResponse: function ( response ) {
+ var doc,
+ targetClass = ve.init.mw.DesktopArticleTarget,
+ data = response ? ( response.visualeditor ||
response.visualeditoredit ) : null;
+ if ( data && typeof data.content === 'string' ) {
+ doc = targetClass.static.parseDocument(
data.content, 'visual' );
+ return targetClass.static.createModelFromDom(
doc, 'visual' );
+ }
+ return null;
+ },
+
+ /**
+ * Fetch a specific revision from Parsoid as a DM document, and
cache in memory
+ *
+ * @param {number} revId Revision ID
+ * @param {string} [pageName] Page name, defaults to
wgRelevantPageName
+ * @param {jQuery.Promise} [parseDocumentModulePromise] Promise
which resolves when Target#parseDocument is available
+ * @return {jQuery.Promise} Promise which resolves with a
document model
+ */
+ fetchRevision: function ( revId, pageName,
parseDocumentModulePromise ) {
+ parseDocumentModulePromise = parseDocumentModulePromise
|| $.Deferred().resolve().promise();
+ pageName = pageName || mw.config.get(
'wgRelevantPageName' );
+
+ revCache[ pageName ] = revCache[ pageName ] || {};
+ revCache[ pageName ][ revId ] =
+ revCache[ pageName ][ revId ] ||
+ mw.libs.ve.targetLoader.requestParsoidData(
pageName, revId, 'diff' ).then( function ( response ) {
+ return parseDocumentModulePromise.then(
function () {
+ return
mw.libs.ve.diffLoader.getModelFromResponse( response );
+ } );
+ } );
+
+ return revCache[ pageName ][ revId ];
+ },
+
+ /**
+ * Get a visual diff generator promise
+ *
+ * @param {number|jQuery.Promise} oldIdOrPromise Old revision
ID, or document model promise
+ * @param {number|jQuery.Promise} newIdOrPromise New revision
ID, or document model promise
+ * @param {jQuery.Promise} [parseDocumentModulePromise] Promise
which resolves when Target#parseDocument is available
+ * @param {string} [oldPageName] Old revision's page name,
defaults to wgRelevantPageName
+ * @param {string} [newPageName] New revision's page name,
defaults to oldPageName
+ * @return {jQuery.Promise} Promise which resolves with a
ve.dm.VisualDiff generator function
+ */
+ getVisualDiffGeneratorPromise: function ( oldIdOrPromise,
newIdOrPromise, parseDocumentModulePromise, oldPageName, newPageName ) {
+ var oldRevPromise, newRevPromise;
+
+ parseDocumentModulePromise = parseDocumentModulePromise
|| $.Deferred().resolve().promise();
+ oldPageName = oldPageName || mw.config.get(
'wgRelevantPageName' );
+
+ oldRevPromise = typeof oldIdOrPromise === 'number' ?
this.fetchRevision( oldIdOrPromise, oldPageName, parseDocumentModulePromise ) :
oldIdOrPromise;
+ newRevPromise = typeof newIdOrPromise === 'number' ?
this.fetchRevision( newIdOrPromise, newPageName, parseDocumentModulePromise ) :
newIdOrPromise;
+
+ return $.when( oldRevPromise, newRevPromise,
parseDocumentModulePromise ).then( function ( oldDoc, newDoc ) {
+ // TODO: Differ expects newDoc to be derived
from oldDoc and contain all its store data.
+ // We may want to remove that assumption from
the differ?
+ newDoc.getStore().merge( oldDoc.getStore() );
+ return function () {
+ return new ve.dm.VisualDiff( oldDoc,
newDoc );
+ };
+ } );
+ }
+
+ };
+}() );
diff --git a/modules/ve-mw/init/ve.init.mw.DiffPage.init.js
b/modules/ve-mw/init/ve.init.mw.DiffPage.init.js
index 18c7f07..a4ed1da 100644
--- a/modules/ve-mw/init/ve.init.mw.DiffPage.init.js
+++ b/modules/ve-mw/init/ve.init.mw.DiffPage.init.js
@@ -8,34 +8,13 @@
( function () {
var $visualDiff,
reviewModeButtonSelect,
- revCache = {},
uri = new mw.Uri(),
mode = uri.query.diffmode || 'source',
conf = mw.config.get( 'wgVisualEditorConfig' ),
pluginModules = conf.pluginModules.filter( mw.loader.getState );
- function getModelFromResponse( response ) {
- var doc,
- targetClass = ve.init.mw.DesktopArticleTarget,
- data = response ? ( response.visualeditor ||
response.visualeditoredit ) : null;
- if ( data && typeof data.content === 'string' ) {
- doc = targetClass.static.parseDocument( data.content,
'visual' );
- return targetClass.static.createModelFromDom( doc,
'visual' );
- }
- return null;
- }
-
- function fetchRevision( pageName, revId ) {
- revCache[ pageName ] = revCache[ pageName ] || {};
- if ( !revCache[ pageName ][ revId ] ) {
- revCache[ pageName ][ revId ] =
mw.libs.ve.targetLoader.requestParsoidData( pageName, revId, 'diff' );
- }
- return revCache[ pageName ][ revId ];
- }
-
function onReviewModeButtonSelectSelect( item ) {
- var oldRevPromise, newRevPromise, modulePromise, progress,
- oldPageName, newPageName,
+ var modulePromise, progress, oldPageName, newPageName,
$revSlider = $( '.mw-revslider-container' ),
$wikitextDiff = $( 'table.diff[data-mw="interface"]' ),
oldId = mw.config.get( 'wgDiffOldId' ),
@@ -52,22 +31,11 @@
if ( mode === 'visual' ) {
progress = new OO.ui.ProgressBarWidget( { classes: [
've-init-mw-diffPage-loading' ] } );
- $wikitextDiff.addClass( 'oo-ui-element-hidden' );
- $wikitextDiff.before( progress.$element );
- oldRevPromise = fetchRevision( oldPageName, oldId );
- newRevPromise = fetchRevision( newPageName, newId );
+ $wikitextDiff.addClass( 'oo-ui-element-hidden'
).before( progress.$element );
// TODO: Load a smaller subset of VE for computing the
visual diff
modulePromise = mw.loader.using( [
'ext.visualEditor.desktopArticleTarget' ].concat( pluginModules ) );
- $.when( oldRevPromise, newRevPromise, modulePromise
).then( function ( oldResponse, newResponse ) {
- var visualDiff, diffElement,
- oldDoc = getModelFromResponse(
oldResponse ),
- newDoc = getModelFromResponse(
newResponse );
-
- // TODO: Differ expects newDoc to be derived
from oldDoc and contain all its store data.
- // We may want to remove that assumption from
the differ?
- newDoc.getStore().merge( oldDoc.getStore() );
- visualDiff = new ve.dm.VisualDiff( oldDoc,
newDoc );
- diffElement = new ve.ui.DiffElement(
visualDiff, { classes: [ 've-init-mw-diffPage-diff' ] } );
+ mw.libs.ve.diffLoader.getVisualDiffGeneratorPromise(
oldId, newId, modulePromise, oldPageName, newPageName ).then( function (
visualDiffGenerator ) {
+ var diffElement = new ve.ui.DiffElement(
visualDiffGenerator(), { classes: [ 've-init-mw-diffPage-diff' ] } );
progress.$element.remove();
$wikitextDiff.before( diffElement.$element );
--
To view, visit https://gerrit.wikimedia.org/r/365644
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I318752ede2e5c90f9d0ecd26b39e997fff2d60bd
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Esanders <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: DLynch <[email protected]>
Gerrit-Reviewer: Jforrester <[email protected]>
Gerrit-Reviewer: Tchanders <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits