/
TranslationTool.js
115 lines (95 loc) · 3.33 KB
/
TranslationTool.js
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
var currentLanguage;
var phrases = [];
function replaceTranslationColumnWithLabel($tr) {
$td = $tr.find('td.translation');
var translation = $td.find('input[type=text]').val();
$td.html('');
$('<p></p>').text(translation).appendTo($td);
}
function sendSuggestion() {
var $tr = $(this).parents('tr');
var id = $tr.data('id')
var translation = $tr.find('input[type=text]').val();
var args = {
text: translation
};
if (translation.length > 0) {
showLoadingBar();
$.post('/languages/' + currentLanguage + '/translations/' + id, args, function() {
hideLoadingBar();
if (!(is_admin || isUserLeaderOfCurrentLang())) {
replaceTranslationColumnWithLabel($tr);
}
});
}
}
function isUserLeaderOfCurrentLang() {
return my_langs.indexOf(currentLanguage) !== -1;
}
function createTableRow(item) {
var tr = $('<tr></tr>').data('id', item.id);
var td1 = $('<td></td').attr('class', 'original').text(item.original);
var td2 = $('<td></td').attr('class', 'translation');
if (is_admin || isUserLeaderOfCurrentLang()) {
$('<input type="text" />').val(item.translation).appendTo(td2);
$('<input type="submit" />').val("Send suggestion").click(sendSuggestion).appendTo(td2);
} else {
$('<p></p>').text(item.translation).appendTo(td2);
}
td1.appendTo(tr);
td2.appendTo(tr);
return tr;
}
function updateMailLink() {
var subject = 'I want to be a translator for ' + currentLanguage;
var body = "My user id: " + my_user_id + " My user email: " + my_user_email;
$('#applyLink').attr('href', 'mailto:youtify@youtify.com?subject=' + subject + '&body=' + body);
}
function loadLanguage() {
currentLanguage = $('#language').val(); // global
updateMailLink(currentLanguage);
$('#applyLink').show();
function loadLeaders() {
$("#leaders").html('');
$.getJSON('/languages/' + currentLanguage + '/leaders', function(data) {
var names = [];
$.each(data, function(i, item) {
names.push(item.name);
if (item.name === my_user_email) {
$('#applyLink').hide();
}
});
$('#leaders').text(names.join(', '));
});
}
function loadTranslations() {
showLoadingBar();
$.getJSON('/languages/' + currentLanguage + '/translations', function(data) {
hideLoadingBar();
var $tbody = $('<tbody></tbody>');
phrases = data; // global
$.each(data, function(i, item) {
createTableRow(item).appendTo($tbody);
});
$('tbody').replaceWith($tbody);
});
}
loadLeaders();
loadTranslations();
history.pushState(null, null, '/translations/' + currentLanguage);
}
$(document).ready(function() {
$('#language').change(loadLanguage);
var path = window.location.pathname.split('/');
if (path.length === 3) { // e.g. /translations/sv_SE
$.each($('#language option'), function(i, elem) {
if ($(elem).attr('value') === path[2]) {
$(elem).attr('selected', 'selected');
$('#language').change();
return false;
}
});
} else {
$('#language').change();
}
});