1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
( function ( $, mw ) {
'use strict';
/**
* Page mode plugin
*
* Prepare the page mode UI with all the required actions
* for a translation unit (message).
* This is mainly used with the messagetable plugin in page mode,
* but it is independent of messagetable.
* Example usage:
*
* $( 'div.pagemode' ).pagemode( {
* message: messageObject, // Mandatory message object
* sourcelangcode: 'en', // Mandatory source language code
* targetlangcode: 'hi' // Mandatory target language code
* } );
*/
function PageMode( element, options ) {
this.$message = $( element );
this.options = options;
this.message = this.options.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' )
.html( mw.translate.formatMessageGently( translation || '', pagemode.message.key ) )
.addClass( 'highlight' );
},
onSave: function ( translation ) {
pagemode.$message.find( '.tux-pagemode-translation' )
.removeClass( 'highlight' );
pagemode.message.translation = translation;
}
} );
},
render: function () {
var targetLangAttrib, targetLangDir,
sourceLangDir = $.uls.data.getDir( this.options.sourcelangcode );
if ( this.options.targetlangcode ===
mw.config.get( 'wgTranslateDocumentationLanguageCode' )
) {
targetLangAttrib = mw.config.get( 'wgContentLanguage' );
} else {
targetLangAttrib = this.options.targetlangcode;
}
targetLangDir = $.uls.data.getDir( targetLangAttrib );
this.$message.append(
$( '<div>' )
.addClass( 'row tux-message-item-compact message ' + this.message.properties.status )
.append(
$( '<div>' )
.addClass( 'one column tux-pagemode-status ' + this.message.properties.status ),
$( '<div>' )
.addClass( 'five columns tux-pagemode-source' )
.attr( {
lang: this.options.sourcelangcode,
dir: sourceLangDir
} )
.html( mw.translate.formatMessageGently( this.message.definition, this.message.key ) ),
$( '<div>' )
.addClass( 'five columns tux-pagemode-translation' )
.attr( {
lang: targetLangAttrib,
dir: targetLangDir
} )
.html( mw.translate.formatMessageGently( this.message.translation || '', this.message.key ) ),
$( '<div>' )
.attr( 'title', mw.msg( 'translate-edit-title', this.message.key ) )
.addClass( 'tux-pagemode-edit' )
)
)
.addClass( this.message.properties.status );
},
/**
* Attach event listeners
*/
listen: function () {
var pagemode = this;
this.$message.children( '.message' ).on( 'click', function ( e ) {
pagemode.$message.data( 'translateeditor' ).show();
e.preventDefault();
} );
}
};
/*
* 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 ) );
|