Santhosh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/55570


Change subject: (Bug 46311) Allow translation in page view
......................................................................

(Bug 46311) Allow translation in page view

* For translation editor, add a beforeSave callback for translation editor

For pagemode translation there is a requirement to highlight translation
when saveing started and removing when done

Change-Id: I98c6012dd71765971c5a45a6cbb4e044f756ecc6
---
M Resources.php
A resources/css/ext.translate.pagemode.css
M resources/js/ext.translate.editor.js
M resources/js/ext.translate.messagetable.js
A resources/js/ext.translate.pagemode.js
5 files changed, 227 insertions(+), 24 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Translate 
refs/changes/70/55570/1

diff --git a/Resources.php b/Resources.php
index 1380aa3..fbaf2d3 100644
--- a/Resources.php
+++ b/Resources.php
@@ -32,10 +32,12 @@
                'resources/js/ext.translate.editor.js',
                'resources/js/ext.translate.editor.helpers.js',
                'resources/js/ext.translate.proofread.js',
+               'resources/js/ext.translate.pagemode.js',
        ),
        'styles' => array(
                'resources/css/ext.translate.editor.css',
                'resources/css/ext.translate.proofread.css',
+               'resources/css/ext.translate.pagemode.css',
        ),
        'dependencies' => array(
                'ext.translate.base',
diff --git a/resources/css/ext.translate.pagemode.css 
b/resources/css/ext.translate.pagemode.css
new file mode 100644
index 0000000..8d72124
--- /dev/null
+++ b/resources/css/ext.translate.pagemode.css
@@ -0,0 +1,109 @@
+.ext-translate-container .tux-messagelist .tux-message-pagemode {
+       height: auto;
+       min-height: 50px;
+       padding: 40px 0;
+       margin: 0 auto;
+       vertical-align: middle;
+       border-bottom: 1px solid #f0f0f0;
+       border-left: 1px solid #DDDDDD;
+       border-right: 1px solid #DDDDDD;
+       max-width: 900px;
+       background: #FFFFFF;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode:hover {
+       background: #FCFCFC;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode:first-child {
+       margin-top: 10px;
+       padding-top: 60px;
+       border-top: 1px solid #DDDDDD;
+}
+
+.ext-translate-container .tux-messagelist .tux-message-pagemode:last-child {
+       margin-bottom: 10px;
+       padding-bottom: 60px;
+       border-bottom: 1px solid #DDDDDD;
+}
+
+.tux-message-pagemode.open .tux-pagemode-status,
+.tux-message-pagemode.open .tux-pagemode-source,
+.tux-message-pagemode.open .tux-pagemode-translation,
+.tux-message-pagemode.open .tux-pagemode-action-block {
+       display: none;
+}
+
+.tux-messagelist .tux-message-pagemode .tux-pagemode-source {
+       color: #555;
+       font-size: 16px;
+       line-height: 1.5em;
+       padding-right: 25px;
+       padding-left: 25px;
+}
+
+.tux-messagelist .tux-message-pagemode .tux-pagemode-translation {
+       color: #252525;
+       font-size: 16px;
+       line-height: 1.5em;
+       padding-left: 20px;
+}
+
+.tux-pagemode-action-block {
+       top: -5px;
+       right: -5px;
+}
+
+.tux-pagemode-status {
+       top: -10px;
+}
+
+.tux-pagemode-status.fuzzy {
+       /* @embed */
+       background: url(../images/outdated.png) left center no-repeat;
+       background-image: -webkit-linear-gradient(transparent, transparent), 
url(../images/outdated.svg);
+       background-image: -moz-linear-gradient(transparent, transparent), 
url(../images/outdated.svg);
+       background-image: linear-gradient(transparent, transparent), 
url(../images/outdated.svg);
+       height: 40px;
+}
+
+.tux-pagemode-status.untranslated {
+       /* @embed */
+       background: url(../images/translate.png) left center no-repeat;
+       background-image: -webkit-linear-gradient(transparent, transparent), 
url(../images/translate.svg);
+       background-image: -moz-linear-gradient(transparent, transparent), 
url(../images/translate.svg);
+       background-image: linear-gradient(transparent, transparent), 
url(../images/translate.svg);
+       height: 40px;
+}
+
+.tux-pagemode-action {
+       /* @embed */
+       background: url(../images/check-sprite.png) right top no-repeat;
+       background-image: -webkit-linear-gradient(transparent, transparent), 
url(../images/check-sprite.svg);
+       background-image: -moz-linear-gradient(transparent, transparent), 
url(../images/check-sprite.svg);
+       background-image: linear-gradient(transparent, transparent), 
url(../images/check-sprite.svg);
+       height: 31px;
+       cursor: pointer;
+}
+
+.tux-pagemode-action:hover {
+       background-position: right -31px;
+}
+
+.tux-pagemode-edit {
+       /* @embed */
+       background-image: url(../images/edit-mark.png);
+       background-image: -webkit-linear-gradient(transparent, transparent), 
url(../images/edit-mark.svg);
+       background-image: -moz-linear-gradient(transparent, transparent), 
url(../images/edit-mark.svg);
+       background-image: linear-gradient(transparent, transparent), 
url(../images/edit-mark.svg);
+       background-repeat: no-repeat;
+       background-position: right center;
+       height: 40px;
+       cursor: pointer;
+       visibility: hidden;
+}
+
+.tux-message-pagemode:hover .tux-pagemode-edit {
+       visibility: visible;
+}
+
diff --git a/resources/js/ext.translate.editor.js 
b/resources/js/ext.translate.editor.js
index 276bc48..d88b06a 100644
--- a/resources/js/ext.translate.editor.js
+++ b/resources/js/ext.translate.editor.js
@@ -120,6 +120,11 @@
 
                        translateEditor.saving = true;
 
+                               // beforeSave callback
+                               if ( translateEditor.options.beforeSave ) {
+                                       translateEditor.options.beforeSave( 
translation );
+                               }
+
                        // For responsiveness and efficiency,
                        // immediately move to the next message.
                        translateEditor.next();
diff --git a/resources/js/ext.translate.messagetable.js 
b/resources/js/ext.translate.messagetable.js
index 7deed81..96c6c64 100644
--- a/resources/js/ext.translate.messagetable.js
+++ b/resources/js/ext.translate.messagetable.js
@@ -243,34 +243,14 @@
                },
 
                addPageModeMessage: function ( message ) {
-                       var $message, targetLanguage, targetLanguageDir, 
sourceLanguage, sourceLanguageDir;
-
-                       sourceLanguage = this.$container.data( 'sourcelangcode' 
);
-                       sourceLanguageDir = $.uls.data.getDir( sourceLanguage );
-                       targetLanguage = this.$container.data( 'targetlangcode' 
);
-                       targetLanguageDir = $.uls.data.getDir( targetLanguage );
+                       var $message;
 
                        $message = $( '<div>' )
-                               .addClass( 'row tux-message-proofread' )
-                               .data( 'message', message )
-                               .append(
-                                       $( '<div>' )
-                                               .addClass( 'six columns 
tux-proofread-source' )
-                                               .attr( {
-                                                       lang: sourceLanguage,
-                                                       dir: sourceLanguageDir
-                                               } )
-                                               .html( 
mw.translate.formatMessageGently( message.definition, message.key ) ),
-                                       $( '<div>' )
-                                               .addClass( 'six columns 
tux-proofread-translation' )
-                                               .attr( {
-                                                       lang: targetLanguage,
-                                                       dir: targetLanguageDir
-                                               } )
-                                               .html( 
mw.translate.formatMessageGently( message.translation || '', message.key ) )
-                               );
+                               .addClass( 'row tux-message 
tux-message-pagemode' )
+                               .data( 'message', message );
 
                        this.$container.append( $message );
+                       $message.pagemode();
                },
 
                /**
@@ -705,3 +685,4 @@
                return value.replace( /[\-\[\]{}()*+?.,\\\^$\|#\s]/g, '\\$&' );
        }
 }( jQuery, mediaWiki ) );
+
diff --git a/resources/js/ext.translate.pagemode.js 
b/resources/js/ext.translate.pagemode.js
new file mode 100644
index 0000000..9e892df
--- /dev/null
+++ b/resources/js/ext.translate.pagemode.js
@@ -0,0 +1,106 @@
+( function ( $, mw ) {
+       'use strict';
+
+       function PageMode( element ) {
+               this.$message = $( element );
+               this.$container = $( '.tux-messagelist' );
+               this.message = this.$message.data( 'message' );
+               this.init();
+               this.listen();
+       }
+
+       PageMode.prototype = {
+
+               /**
+                * Initialize the plugin
+                */
+               init: function () {
+                       var pagemode = this;
+
+                       this.render();
+
+                       pagemode.$message.translateeditor( {
+                               message: pagemode.message,
+                               beforeSave: function ( translation ) {
+                                       pagemode.$message.find( 
'.tux-pagemode-translation' )
+                                               .text( translation )
+                                               .addClass( 'highlight' );
+                               },
+                               onSave: function ( translation ) {
+                                       pagemode.$message.find( 
'.tux-pagemode-translation' )
+                                               .removeClass( 'highlight' )
+                                               .text( translation );
+                                       pagemode.message.translation = 
translation;
+                               }
+                       } );
+
+               },
+
+               render: function () {
+                       var $message, targetLanguage, targetLanguageDir, 
sourceLanguage, sourceLanguageDir,
+                               messageTable = this;
+
+                       sourceLanguage = this.$container.data( 'sourcelangcode' 
);
+                       sourceLanguageDir = $.uls.data.getDir( sourceLanguage );
+                       targetLanguage = this.$container.data( 'targetlangcode' 
);
+                       targetLanguageDir = $.uls.data.getDir( targetLanguage );
+
+                       this.$message.append(
+                               $( '<div>' )
+                                       .addClass( 'one column 
tux-pagemode-status ' + this.message.properties.status ),
+                               $( '<div>' )
+                                       .addClass( 'five columns 
tux-pagemode-source' )
+                                       .attr( {
+                                               lang: sourceLanguage,
+                                               dir: sourceLanguageDir
+                                       } )
+                                       .html( 
mw.translate.formatMessageGently( this.message.definition, this.message.key ) ),
+                               $( '<div>' )
+                                       .addClass( 'five columns 
tux-pagemode-translation' )
+                                       .attr( {
+                                               lang: targetLanguage,
+                                               dir: targetLanguageDir
+                                       } )
+                                       .html( 
mw.translate.formatMessageGently( this.message.translation || '', 
this.message.key ) ),
+                               $( '<div>' )
+                                       .attr( 'title', mw.msg( 
'tux-pagemode-edit-tooltip' ) )
+                                       .addClass( 'tux-pagemode-edit' )
+                       )
+
+                       .addClass( this.message.properties.status );
+               },
+
+               /**
+                * Attach event listeners
+                */
+               listen: function () {
+                       var pagemode = this;
+
+                       this.$message.find( '.tux-pagemode-edit' ).on( 'click', 
function () {
+                               pagemode.$message.data( 'translateeditor' 
).show();
+                               return false;
+                       } );
+               }
+       };
+
+       /*
+        * pagemode PLUGIN DEFINITION
+        */
+       $.fn.pagemode = function ( options ) {
+               return this.each( function () {
+                       var $this = $( this ),
+                               data = $this.data( 'pagemode' );
+
+                       if ( !data ) {
+                               $this.data( 'pagemode',
+                                       ( data = new PageMode( this, options ) )
+                               );
+                       }
+
+               } );
+       };
+
+       $.fn.pagemode.Constructor = PageMode;
+
+}( jQuery, mediaWiki ) );
+

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I98c6012dd71765971c5a45a6cbb4e044f756ecc6
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>

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

Reply via email to