Nikerabbit has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/355400 )

Change subject: Unbreak image translation units and fix MT for them
......................................................................

Unbreak image translation units and fix MT for them

Apparently I broke some translation unit types when I added MT.
Not fixing all of them in this commit.

Bug: T162110
Change-Id: I6734e74129e5ac56e2bdde08bd751b73d60eb095
---
M modules/dm/translationunits/mw.cx.dm.ImageTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.LinkTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.ReferenceTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.TemplateTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
M modules/ui/translationunits/mw.cx.ui.ImageTranslationUnit.js
7 files changed, 74 insertions(+), 27 deletions(-)


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

diff --git a/modules/dm/translationunits/mw.cx.dm.ImageTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.ImageTranslationUnit.js
index 1118078..585a663 100644
--- a/modules/dm/translationunits/mw.cx.dm.ImageTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.ImageTranslationUnit.js
@@ -26,31 +26,57 @@
 /**
  * @inheritdoc
  */
-mw.cx.dm.ImageTranslationUnit.prototype.adapt = function () {
+mw.cx.dm.ImageTranslationUnit.prototype.adapt = function ( requestedProvider ) 
{
        this.sourceImage = this.sourceDocument.getElementsByTagName( 'img' )[ 0 
];
        this.sourceResource = this.sourceImage.getAttribute( 'resource' );
 
        if ( !this.isCommonsImage( this.sourceImage.getAttribute( 'src' ) ) ) {
                // Create an empty paragraph
                this.targetDocument = document.createElement( 'p' );
-               this.setTargetId();
+               this.setTargetId( this.targetDocument );
                return;
        }
 
-       this.targetDocument = this.sourceDocument.cloneNode( true );
-       this.setTargetId();
-       this.adaptImageAlignment( this.targetDocument );
-       this.targetImage = this.targetDocument.getElementsByTagName( 'img' )[ 0 
];
-       this.targetResource = this.targetImage.getAttribute( 'resource' );
+       mw.cx.dm.ImageTranslationUnit.super.prototype.adapt.call( this, 
requestedProvider );
+};
 
-       return this.requestManager.getNamespaceAlias( this.targetLanguage, 
'File' )
-               .then( function ( namespaceAlias ) {
-                       this.targetResource = this.sourceResource.replace(
-                               /(\.\/)*(.+)(:)/g,
-                               '$1' + namespaceAlias + '$3'
-                       );
-                       this.targetImage.setAttribute( 'resource', 
this.targetResource );
-               }.bind( this ) );
+/**
+ * @inheritdoc
+ */
+mw.cx.dm.ImageTranslationUnit.prototype.updateAfterTranslation = function ( 
document, provider ) {
+       this.targetDocument = document;
+
+       if ( provider === 'scratch' ) {
+               this.targetImage = null;
+               this.targetResource = null;
+               return;
+       }
+
+       this.targetImage = document.getElementsByTagName( 'img' )[ 0 ];
+       // Set default value in case namespace updating fails in 
adaptAfterTranslation
+       this.targetResource = this.targetImage.getAttribute( 'resource' );
+};
+
+/**
+ * @inheritdoc
+ */
+mw.cx.dm.ImageTranslationUnit.prototype.adaptAfterTranslation = function ( 
document, provider ) {
+       if ( provider === 'scratch' ) {
+               return;
+       }
+
+       this.adaptImageAlignment( document );
+
+       return this.requestManager.getNamespaceAlias(
+               this.targetLanguage,
+               'File'
+       ).then( function ( namespaceAlias ) {
+               this.targetResource = this.sourceResource.replace(
+                       /(\.\/)*(.+)(:)/g,
+                       '$1' + namespaceAlias + '$3'
+               );
+               this.targetImage.setAttribute( 'resource', this.targetResource 
);
+       }.bind( this ) );
 };
 
 /**
diff --git a/modules/dm/translationunits/mw.cx.dm.LinkTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.LinkTranslationUnit.js
index e9ead85..a68b40d 100644
--- a/modules/dm/translationunits/mw.cx.dm.LinkTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.LinkTranslationUnit.js
@@ -104,7 +104,7 @@
                        .querySelector( '[id="cx' + this.getSectionId() + '"]' 
);
        } else {
                // Set the id with 'cx' prefix
-               this.setTargetId();
+               this.setTargetId( this.targetDocument );
        }
 
        if ( !this.targetDocument ) {
diff --git a/modules/dm/translationunits/mw.cx.dm.ReferenceTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.ReferenceTranslationUnit.js
index c490447..90091ae 100644
--- a/modules/dm/translationunits/mw.cx.dm.ReferenceTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.ReferenceTranslationUnit.js
@@ -114,9 +114,10 @@
        this.targetDefinition = this.getTargetDefinition();
        this.targetDocument.setAttribute( 'data-mw', JSON.stringify( 
this.targetDefinition ) );
        // Update the target id attributes.
-       this.setTargetId();
+       this.setTargetId( this.targetDocument );
        // TODO: Reference definition can be templates. Adapt that template to 
target language using
        // template translation unit.
+       this.emit( 'adapt', this.targetDocument, 'source' );
 };
 
 mw.cx.dm.modelRegistry.register( mw.cx.dm.ReferenceTranslationUnit );
diff --git a/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
index a11f886..bfa743e 100644
--- a/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
@@ -117,19 +117,39 @@
                // Use the cached version
                if ( this.documentsPerProvider[ requestedProvider ] ) {
                        this.targetDocument = this.documentsPerProvider[ 
requestedProvider ];
+                       this.updateAfterTranslation( this.targetDocument, 
requestedProvider );
                        this.emit( 'adapt', this.targetDocument, 
requestedProvider );
                        return;
                }
        }
 
        this.translate( this.sourceDocument ).then( function ( document ) {
-               this.targetDocument = document;
-               this.setTargetId();
+               this.setTargetId( document );
+               this.updateAfterTranslation( document, this.MTProvider );
+               this.adaptAfterTranslation( document, this.MTProvider );
                // Note that this.MTProvider might have changed from 
requestedProvider
                this.emit( 'adapt', document, this.MTProvider );
        }.bind( this ) );
 };
 
+/**
+ * Do any necessary updates and bookkeping after section contents has been 
filled
+ * with a new or cached default value when changing providers.
+ *
+ * @param {Element} document Translated translation document
+ */
+mw.cx.dm.SectionTranslationUnit.prototype.updateAfterTranslation = function ( 
document ) {
+       this.targetDocument = document;
+};
+
+/**
+ * Do any necessary changes to translated document after it has been filled 
with default
+ * contents. This is not called when restoring a cached version when changing 
providers.
+ *
+ * @param {Element} document Translated translation document
+ */
+mw.cx.dm.SectionTranslationUnit.prototype.adaptAfterTranslation = function () 
{};
+
 mw.cx.dm.SectionTranslationUnit.prototype.getMTProvider = function () {
        if ( this.MTProvider ) {
                return $.Deferred().resolve( this.MTProvider );
diff --git a/modules/dm/translationunits/mw.cx.dm.TemplateTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.TemplateTranslationUnit.js
index c0bf089..ddae154 100644
--- a/modules/dm/translationunits/mw.cx.dm.TemplateTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.TemplateTranslationUnit.js
@@ -37,7 +37,7 @@
 mw.cx.dm.TemplateTranslationUnit.prototype.adapt = function () {
        this.targetDocument = this.translate( this.sourceDocument );
        // Udapte target id attributes
-       this.setTargetId();
+       this.setTargetId( this.targetDocument );
 };
 
 /* Register */
diff --git a/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
index 4b2b305..d2b52ac 100644
--- a/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
@@ -74,12 +74,11 @@
 /**
  * Change the element id of the translation copy. We follow a format where
  * 'cx' is prefixed to the source element id.
+ *
+ * @param {Element} [document] Target section DOM Element
  */
-mw.cx.dm.TranslationUnit.prototype.setTargetId = function () {
-       if ( !this.targetDocument ) {
-               throw new Error( 'Target document not set for translation unit 
: ' + this.toString() );
-       }
-       this.targetDocument.id = this.getTranslationSectionId();
+mw.cx.dm.TranslationUnit.prototype.setTargetId = function ( document ) {
+       document.id = this.getTranslationSectionId();
 };
 
 /**
diff --git a/modules/ui/translationunits/mw.cx.ui.ImageTranslationUnit.js 
b/modules/ui/translationunits/mw.cx.ui.ImageTranslationUnit.js
index 9b1dd22..dede352 100644
--- a/modules/ui/translationunits/mw.cx.ui.ImageTranslationUnit.js
+++ b/modules/ui/translationunits/mw.cx.ui.ImageTranslationUnit.js
@@ -21,10 +21,11 @@
 mw.cx.ui.ImageTranslationUnit.static.tags = [ 'figure' ];
 mw.cx.ui.ImageTranslationUnit.static.matchRdfaTypes = [ 'mw:Image/Thumb' ];
 mw.cx.ui.ImageTranslationUnit.static.highlightClass = 'cx-image-highlight';
-mw.cx.ui.ImageTranslationUnit.static.tools = {};
+mw.cx.ui.ImageTranslationUnit.static.tools = {
+       machinetranslation: [ 'click' ]
+};
 
 mw.cx.ui.ImageTranslationUnit.prototype.adapt = function () {
-       // Adapt in general will be asynchronous operation
        this.model.adapt();
        this.setContent( this.model.targetDocument );
 };

-- 
To view, visit https://gerrit.wikimedia.org/r/355400
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6734e74129e5ac56e2bdde08bd751b73d60eb095
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ContentTranslation
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to