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