[MediaWiki-commits] [Gerrit] mediawiki...ContentTranslation[master]: Restore translations - enhancements

2017-11-03 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/388429 )

Change subject: Restore translations - enhancements
..


Restore translations - enhancements

* Restore CX1 translation
* Restore even if section order changed - section numbers
  not matching but parsoid generated ids matching.

Bug: T176843
Change-Id: I1595eefe485398cdc4aa8b880fab5f868aaf3c58
---
M modules/dm/mw.cx.dm.Translation.js
M tests/qunit/dm/mw.cx.dm.Translation.test.js
2 files changed, 115 insertions(+), 4 deletions(-)

Approvals:
  Catrope: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/dm/mw.cx.dm.Translation.js 
b/modules/dm/mw.cx.dm.Translation.js
index 09ac712..bc458f6 100644
--- a/modules/dm/mw.cx.dm.Translation.js
+++ b/modules/dm/mw.cx.dm.Translation.js
@@ -143,12 +143,42 @@
 mw.cx.dm.Translation.static.getSavedSection = function (
savedTranslationUnits, sourceSectionNode, sectionNumber
 ) {
+   var savedSection, translationUnitId, parsoidId, 
$savedTranslationUnitSource, savedSectionParsoidId;
+
if ( !savedTranslationUnits ) {
return;
}
-   // TODO: Port CX1 section restoring logic to here
-   // See ContentTranslationLoader#restore in ext.cx.translation.loader.js
-   return savedTranslationUnits[ sectionNumber ];
+
+   savedSection = savedTranslationUnits[ sectionNumber ];
+
+   if ( savedSection ) {
+   return savedSection;
+   }
+   // CX1 translations use parsoid generated Id attribute values in
+   // section content instead of numerical section numbers
+   parsoidId = sourceSectionNode.firstChild && 
sourceSectionNode.firstChild.id;
+   savedSection = savedTranslationUnits[ parsoidId ];
+
+   if ( savedSection ) {
+   return savedSection;
+   }
+
+   // Even if source section number changed, try locating matching id in 
content
+   for ( translationUnitId in savedTranslationUnits ) {
+   $savedTranslationUnitSource = $( savedTranslationUnits[ 
translationUnitId ].source.content );
+   if ( $savedTranslationUnitSource.is( 'section' ) ) {
+   // CX2 saved translation
+   savedSectionParsoidId = 
$savedTranslationUnitSource.children().attr( 'id' );
+   } else {
+   // CX1 saved translation
+   savedSectionParsoidId = 
$savedTranslationUnitSource.attr( 'id' );
+   }
+
+   if ( parsoidId === savedSectionParsoidId || sectionNumber === 
savedSectionParsoidId ) {
+   return savedTranslationUnits[ translationUnitId ];
+   }
+   }
+
 };
 
 /**
diff --git a/tests/qunit/dm/mw.cx.dm.Translation.test.js 
b/tests/qunit/dm/mw.cx.dm.Translation.test.js
index 339ab88..2947bc2 100644
--- a/tests/qunit/dm/mw.cx.dm.Translation.test.js
+++ b/tests/qunit/dm/mw.cx.dm.Translation.test.js
@@ -6,7 +6,8 @@
 ( function ( $, mw ) {
'use strict';
 
-   var testDataPath = mw.config.get( 'wgExtensionAssetsPath' ) +
+   var restoreTestData,
+   testDataPath = mw.config.get( 'wgExtensionAssetsPath' ) +

'/ContentTranslation/tests/qunit/data/dm-translation-source-article.html';
 
QUnit.module( 'mw.cx.dm.Translation', QUnit.newMwEnvironment() );
@@ -33,4 +34,84 @@
} );
} );
 
+   restoreTestData = {
+   savedTranslationUnits: {
+   12: {
+   source: {
+   content: 'Content'
+   },
+   user: {
+   content: 'Translated content'
+   }
+   },
+   mwAz: {
+   source: {
+   content: 'Content'
+   },
+   user: {
+   content: 'Translated 
content'
+   }
+   },
+   16: {
+   source: {
+   content: 'Content mwAp'
+   },
+   user: {
+   content: 'Translated content mwAp'
+   }
+   },
+   17: {
+   source: {
+   content: 'Content mwAr'
+   },
+   user: {
+   content: 'Translated 
content mwAr'
+   }
+   }
+   },
+   sourceSections: {
+  

[MediaWiki-commits] [Gerrit] mediawiki...ContentTranslation[master]: Restore translations - enhancements

2017-11-03 Thread Santhosh (Code Review)
Santhosh has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/388429 )

Change subject: Restore translations - enhancements
..

Restore translations - enhancements

* Restore CX1 translation
* Restore even if section order changed - section numbers
  not matching but parsoid generated ids matching.

Bug: T176843
Change-Id: I1595eefe485398cdc4aa8b880fab5f868aaf3c58
---
M modules/dm/mw.cx.dm.Translation.js
M tests/qunit/dm/mw.cx.dm.Translation.test.js
2 files changed, 114 insertions(+), 4 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ContentTranslation 
refs/changes/29/388429/1

diff --git a/modules/dm/mw.cx.dm.Translation.js 
b/modules/dm/mw.cx.dm.Translation.js
index 09ac712..bc458f6 100644
--- a/modules/dm/mw.cx.dm.Translation.js
+++ b/modules/dm/mw.cx.dm.Translation.js
@@ -143,12 +143,42 @@
 mw.cx.dm.Translation.static.getSavedSection = function (
savedTranslationUnits, sourceSectionNode, sectionNumber
 ) {
+   var savedSection, translationUnitId, parsoidId, 
$savedTranslationUnitSource, savedSectionParsoidId;
+
if ( !savedTranslationUnits ) {
return;
}
-   // TODO: Port CX1 section restoring logic to here
-   // See ContentTranslationLoader#restore in ext.cx.translation.loader.js
-   return savedTranslationUnits[ sectionNumber ];
+
+   savedSection = savedTranslationUnits[ sectionNumber ];
+
+   if ( savedSection ) {
+   return savedSection;
+   }
+   // CX1 translations use parsoid generated Id attribute values in
+   // section content instead of numerical section numbers
+   parsoidId = sourceSectionNode.firstChild && 
sourceSectionNode.firstChild.id;
+   savedSection = savedTranslationUnits[ parsoidId ];
+
+   if ( savedSection ) {
+   return savedSection;
+   }
+
+   // Even if source section number changed, try locating matching id in 
content
+   for ( translationUnitId in savedTranslationUnits ) {
+   $savedTranslationUnitSource = $( savedTranslationUnits[ 
translationUnitId ].source.content );
+   if ( $savedTranslationUnitSource.is( 'section' ) ) {
+   // CX2 saved translation
+   savedSectionParsoidId = 
$savedTranslationUnitSource.children().attr( 'id' );
+   } else {
+   // CX1 saved translation
+   savedSectionParsoidId = 
$savedTranslationUnitSource.attr( 'id' );
+   }
+
+   if ( parsoidId === savedSectionParsoidId || sectionNumber === 
savedSectionParsoidId ) {
+   return savedTranslationUnits[ translationUnitId ];
+   }
+   }
+
 };
 
 /**
diff --git a/tests/qunit/dm/mw.cx.dm.Translation.test.js 
b/tests/qunit/dm/mw.cx.dm.Translation.test.js
index 339ab88..fc861f6 100644
--- a/tests/qunit/dm/mw.cx.dm.Translation.test.js
+++ b/tests/qunit/dm/mw.cx.dm.Translation.test.js
@@ -6,7 +6,8 @@
 ( function ( $, mw ) {
'use strict';
 
-   var testDataPath = mw.config.get( 'wgExtensionAssetsPath' ) +
+   var restoreTestData,
+   testDataPath = mw.config.get( 'wgExtensionAssetsPath' ) +

'/ContentTranslation/tests/qunit/data/dm-translation-source-article.html';
 
QUnit.module( 'mw.cx.dm.Translation', QUnit.newMwEnvironment() );
@@ -33,4 +34,83 @@
} );
} );
 
+   restoreTestData = {
+   savedTranslationUnits: {
+   12: {
+   source: {
+   content: 'Content'
+   },
+   user: {
+   content: 'Translated content'
+   }
+   },
+   mwAz: {
+   source: {
+   content: 'Content'
+   },
+   user: {
+   content: 'Translated 
content'
+   }
+   },
+   16: {
+   source: {
+   content: 'Content mwAp'
+   },
+   user: {
+   content: 'Translated content mwAp'
+   }
+   },
+   17: {
+   source: {
+   content: 'Content mwAr'
+   },
+   user: {
+   content: 'Translated 
content mwAr'
+   }
+   }
+   },
+