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