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

Change subject: Pass translation unit UI instance alone to translation tools
......................................................................

Pass translation unit UI instance alone to translation tools

The data model and all other context can be accessed from it.
No need to pass them as explicit arguments.

Added methods to remove translation section, destroy the translation tool

Need to find a good naming for this dm class instance and ui class
instances.

Change-Id: I6c5c3c69052e163ad0fa156c2b7ae60d3e2fc028
---
M modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
M modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
M modules/tools/mw.cx.tools.DictionaryTool.js
M modules/tools/mw.cx.tools.InstructionsTool.js
M modules/tools/mw.cx.tools.LinkTool.js
M modules/tools/mw.cx.tools.ReferenceTool.js
M modules/tools/mw.cx.tools.SearchTool.js
M modules/tools/mw.cx.tools.TranslationTool.js
M modules/ui/mw.cx.ui.ToolsColumn.js
M modules/ui/translationunits/mw.cx.ui.TranslationUnit.js
10 files changed, 74 insertions(+), 36 deletions(-)


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

diff --git a/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
index 6f01604..5db688d 100644
--- a/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.SectionTranslationUnit.js
@@ -50,6 +50,7 @@
                        // Keep a map of DOM ids and translation units
                        this.subTranslationUnitModels[ children[ i ].id ] = 
subTranslationUnit;
                        this.translationUnits.push( subTranslationUnit );
+                       subTranslationUnit.setParentTranslationUnit( this );
                }
                // Recursively search for sub translation units.
                this.buildSubTranslationUnits( children[ i ] );
diff --git a/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js 
b/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
index 9aafe05..393b7ea 100644
--- a/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
+++ b/modules/dm/translationunits/mw.cx.dm.TranslationUnit.js
@@ -37,7 +37,7 @@
        this.requestManager = config.requestManager;
        this.sourceLanguage = config.sourceLanguage;
        this.targetLanguage = config.targetLanguage;
-
+       this.parentTranslationUnit = null;
        // Parent constructor
        mw.cx.dm.TranslationUnit.super.call( this );
        this.connect( this, {
@@ -92,6 +92,14 @@
        return this.translationUnits;
 };
 
+mw.cx.dm.TranslationUnit.prototype.getParentTranslationUnit = function () {
+       return this.parentTranslationUnit;
+};
+
+mw.cx.dm.TranslationUnit.prototype.setParentTranslationUnit = function ( 
translationUnit ) {
+       this.parentTranslationUnit = translationUnit;
+};
+
 /**
  * Whether the translation unit is editable
  * @return {boolean}
@@ -101,6 +109,17 @@
 };
 
 /**
+ * Remove the translation unit.
+ */
+mw.cx.dm.TranslationUnit.prototype.remove = function () {
+       if ( this.targetDocument ) {
+               this.targetDocument.remove();
+               this.emit( 'change' );
+               this.emit( 'remove' );
+       }
+};
+
+/**
  * String representation of the translation unit instance. Useful for 
debugging.
  *
  * @return {string} String identified for the instance
diff --git a/modules/tools/mw.cx.tools.DictionaryTool.js 
b/modules/tools/mw.cx.tools.DictionaryTool.js
index bd59780..4403286 100644
--- a/modules/tools/mw.cx.tools.DictionaryTool.js
+++ b/modules/tools/mw.cx.tools.DictionaryTool.js
@@ -4,18 +4,15 @@
  * @class
  * @extends mw.cx.tools.TranslationTool
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationUnit} translationUnit
  * @param {Object} config
  */
-
-mw.cx.tools.DictionaryTool = function CXDictionaryTool( translationUnit, 
translationView, config ) {
+mw.cx.tools.DictionaryTool = function CXDictionaryTool( translationUnit, 
config ) {
        config.order = 3;
        config.title = 'Dictionary';
        this.translationUnit = translationUnit;
-       this.translationView = translationView;
        // Parent constructor
-       mw.cx.tools.DictionaryTool.super.call( this, translationUnit, 
translationView, config );
+       mw.cx.tools.DictionaryTool.super.call( this, translationUnit, config );
 };
 
 /* Inheritance */
diff --git a/modules/tools/mw.cx.tools.InstructionsTool.js 
b/modules/tools/mw.cx.tools.InstructionsTool.js
index 49abfe4..84aa11b 100644
--- a/modules/tools/mw.cx.tools.InstructionsTool.js
+++ b/modules/tools/mw.cx.tools.InstructionsTool.js
@@ -37,14 +37,13 @@
  * @class
  * @extends mw.cx.tools.TranslationTool
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationUnit} translationUnit
  * @param {Object} config
  */
-mw.cx.tools.InstructionsTool = function CXInstructionsTool( translationUnit, 
translationView, config ) {
+mw.cx.tools.InstructionsTool = function CXInstructionsTool( translationUnit, 
config ) {
        config.order = 2;
        // Parent constructor
-       mw.cx.tools.InstructionsTool.super.call( this, translationUnit, 
translationView, config );
+       mw.cx.tools.InstructionsTool.super.call( this, translationUnit, config 
);
 };
 
 /* Inheritance */
diff --git a/modules/tools/mw.cx.tools.LinkTool.js 
b/modules/tools/mw.cx.tools.LinkTool.js
index cb91d3b..3462e96 100644
--- a/modules/tools/mw.cx.tools.LinkTool.js
+++ b/modules/tools/mw.cx.tools.LinkTool.js
@@ -4,19 +4,18 @@
  * @class
  * @extends mw.cx.tools.TranslationTool
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationView} translationUnit
  * @param {Object} config
  */
 
-mw.cx.tools.LinkTool = function CXLinkTool( translationUnit, translationView, 
config ) {
+mw.cx.tools.LinkTool = function CXLinkTool( translationUnit, config ) {
        config.order = 4;
        config.title = 'Link';
        config.language = config.targetLanguage;
        this.sourceTitle = null;
        this.targetTitle = null;
        // Parent constructor
-       mw.cx.tools.LinkTool.super.call( this, translationUnit, 
translationView, config );
+       mw.cx.tools.LinkTool.super.call( this, translationUnit, config );
 };
 
 /* Inheritance */
@@ -40,6 +39,7 @@
                framed: false,
                classes: [ 'cx-tools-link-remove-button' ]
        } );
+
        this.actions = [
                this.addLinkButton,
                this.removeLinkButton
@@ -49,7 +49,7 @@
 
 mw.cx.tools.LinkTool.prototype.getContent = function () {
        var panel, $image, $linkTitle, $linkDesc, $linkInfo;
-       this.targetTitle = this.translationUnit.getTargetTitle();
+       this.targetTitle = this.translationUnitDataModel.getTargetTitle();
        $image = $( '<img>' )
                .addClass( 'cx-tools-link-image cx-tools-link-image-empty' );
 
@@ -59,7 +59,7 @@
                .prop( {
                        target: '_blank',
                        title: this.targetTitle,
-                       href: 
this.translationUnit.config.siteMapper.getPageUrl( 
this.translationUnit.config.targetLanguage, this.targetTitle )
+                       href: 
this.translationUnitDataModel.config.siteMapper.getPageUrl( 
this.translationUnitDataModel.config.targetLanguage, this.targetTitle )
                } );
        $linkDesc = $( '<div>' )
                .addClass( 'cx-tools-link-desc' );
@@ -72,8 +72,8 @@
                padded: false,
                content: [ $image, $linkInfo ]
        } );
-       this.translationUnit.requestManager.getLinkInfo(
-               this.translationUnit.config.targetLanguage, this.targetTitle
+       this.translationUnitDataModel.requestManager.getLinkInfo(
+               this.translationUnitDataModel.config.targetLanguage, 
this.targetTitle
        ).then( function( pageInfo ) {
                $linkDesc.text( pageInfo.description );
                if ( pageInfo.imageUrl ) {
diff --git a/modules/tools/mw.cx.tools.ReferenceTool.js 
b/modules/tools/mw.cx.tools.ReferenceTool.js
index 58bca9b..73ad043 100644
--- a/modules/tools/mw.cx.tools.ReferenceTool.js
+++ b/modules/tools/mw.cx.tools.ReferenceTool.js
@@ -4,17 +4,16 @@
  * @class
  * @extends mw.cx.tools.TranslationTool
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationUnit} translationUnitUI
  * @param {Object} config
  */
-mw.cx.tools.ReferenceTool = function CXReferenceTool( translationUnit, 
translationView, config ) {
+mw.cx.tools.ReferenceTool = function CXReferenceTool( translationUnitUI, 
config ) {
        config.title = mw.msg( 'cx-tools-reference-title' );
        config.name = 'reference';
        config.language = config.targetLanguage;
        config.order = 301;
        // Parent constructor
-       mw.cx.tools.ReferenceTool.super.call( this, translationUnit, 
translationView, config );
+       mw.cx.tools.ReferenceTool.super.call( this, translationUnitUI, config );
 };
 
 /* Inheritance */
@@ -35,11 +34,20 @@
        this.actions = [
                this.removeReferenceButton
        ];
+
        return this.actions;
 };
 
 mw.cx.tools.ReferenceTool.prototype.getContent = function () {
-       return this.translationUnit.getTargetHTMLContent();
+       return this.translationUnitDataModel.getTargetHTMLContent();
+};
+
+/**
+ * Remove the reference
+ */
+mw.cx.tools.ReferenceTool.prototype.removeReference = function () {
+       this.translationUnitUIModel.remove();
+       this.destroy();
 };
 
 /* Register */
diff --git a/modules/tools/mw.cx.tools.SearchTool.js 
b/modules/tools/mw.cx.tools.SearchTool.js
index 7a23f13..5ebcdf1 100644
--- a/modules/tools/mw.cx.tools.SearchTool.js
+++ b/modules/tools/mw.cx.tools.SearchTool.js
@@ -4,17 +4,16 @@
  * @class
  * @extends mw.cx.tools.TranslationTool
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationUnit} translationUnit
  * @param {Object} config
  */
-mw.cx.tools.SearchTool = function CXSearchTool( translationUnit, 
translationView, config ) {
+mw.cx.tools.SearchTool = function CXSearchTool( translationUnit, config ) {
        config.order = 0;
        config.padded = false;
        this.searchTool = null;
        this.config = config;
        // Parent constructor
-       mw.cx.tools.InstructionsTool.super.call( this, translationUnit, 
translationView, config );
+       mw.cx.tools.InstructionsTool.super.call( this, translationUnit, config 
);
 };
 
 /* Inheritance */
diff --git a/modules/tools/mw.cx.tools.TranslationTool.js 
b/modules/tools/mw.cx.tools.TranslationTool.js
index 1d465a4..4f4087a 100644
--- a/modules/tools/mw.cx.tools.TranslationTool.js
+++ b/modules/tools/mw.cx.tools.TranslationTool.js
@@ -4,20 +4,20 @@
  * @class
  * @abstract
  * @constructor
- * @param {mw.cx.dm.TranslationUnit} translationUnit
- * @param {mw.cx.ui.TranslationView} translationView
+ * @param {mw.cx.ui.TranslationUnit} translationUnit
  * @param {Object} config
  * @cfg {string} title The title to be displayed for the tool card. If 
missing, header wont be displayed
  * @cfg {string} language The language name to be displayed in header of tool 
card
  * @cfg {number} order The position of the card in tools column. Cards will be 
arranged in this order.
  */
-mw.cx.tools.TranslationTool = function CXTranslationTool( translationUnit, 
translationView, config ) {
+mw.cx.tools.TranslationTool = function CXTranslationTool( translationUnit, 
config ) {
        this.card = null;
        this.title = config.title;
        this.language = config.language;
        this.order = config.order;
-       this.translationUnit = translationUnit;
-       this.translationView = translationView;
+       this.translationUnitUIModel = translationUnit;
+       this.translationUnitDataModel = translationUnit.translationUnitModel;
+       this.translationView = translationUnit.view;
        this.actions = [];
 };
 
@@ -49,3 +49,10 @@
  * @return {string|jQuery} Content as HTML or jQuery
  */
 mw.cx.tools.TranslationTool.prototype.getContent = null;
+
+mw.cx.tools.TranslationTool.prototype.destroy = function () {
+       if ( this.card ) {
+               this.card.$element.remove();
+               delete this.card;
+       }
+};
diff --git a/modules/ui/mw.cx.ui.ToolsColumn.js 
b/modules/ui/mw.cx.ui.ToolsColumn.js
index f4cdf92..61876d7 100644
--- a/modules/ui/mw.cx.ui.ToolsColumn.js
+++ b/modules/ui/mw.cx.ui.ToolsColumn.js
@@ -59,7 +59,7 @@
  */
 mw.cx.ui.ToolsColumn.prototype.showInstructions = function () {
        var instructions = mw.cx.tools.translationToolFactory.create(
-               'instructions', null, this,     this.config
+               'instructions', this, this.config
        );
 
        this.showTool( instructions );
diff --git a/modules/ui/translationunits/mw.cx.ui.TranslationUnit.js 
b/modules/ui/translationunits/mw.cx.ui.TranslationUnit.js
index 2b52dc3..effad04 100644
--- a/modules/ui/translationunits/mw.cx.ui.TranslationUnit.js
+++ b/modules/ui/translationunits/mw.cx.ui.TranslationUnit.js
@@ -84,8 +84,7 @@
                }
                this.tools.push( mw.cx.tools.translationToolFactory.create(
                        toolNames[ i ],
-                       this.translationUnitModel,
-                       this.view,
+                       this, // The UI model
                        this.config
                ) );
        }
@@ -143,6 +142,15 @@
        this.view.emit( 'change' );
 };
 
+mw.cx.ui.TranslationUnit.prototype.remove = function () {
+       this.translationUnitModel.remove();
+       // TODO: This is not a contenteditable friendly remove operation and 
because of
+       // that undo/redo wont work. Use a contenteditable element removal by 
selecting
+       // the range for this element and remove
+       this.$translationSection.remove();
+       this.view.emit( 'change' );
+};
+
 mw.cx.ui.TranslationUnit.prototype.onParentTranslationStarted = function () {};
 
 mw.cx.ui.TranslationUnit.prototype.setParentTranslationUnit = function ( 
translationUnit ) {

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6c5c3c69052e163ad0fa156c2b7ae60d3e2fc028
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/ContentTranslation
Gerrit-Branch: master
Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to