[MediaWiki-commits] [Gerrit] mediawiki...ContentTranslation[master]: Restore translations - enhancements
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
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' + } + } + }, +