MediaWiki:Common.js: Difference between revisions
Appearance
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
/* Any JavaScript here will be loaded for all users on every page load. */ | /* Any JavaScript here will be loaded for all users on every page load. */ | ||
$(document).ready(function() { | |||
if ($('#p-navigation').length && !$('#custom-lang-selector').length) { | |||
// Lista de idiomas suportados | |||
var languages = [ | |||
{ code: 'en', name: 'English' }, | |||
{ code: 'pt', name: 'Portuguese' }, | |||
{ code: 'es', name: 'Spanish' }, | |||
{ code: 'fr', name: 'French' }, | |||
{ code: 'de', name: 'German' }, | |||
{ code: 'it', name: 'Italian' }, | |||
{ code: 'nl', name: 'Dutch' }, | |||
{ code: 'pl', name: 'Polish' }, | |||
{ code: 'ja', name: 'Japanese' } | |||
]; | |||
// Identificar idioma atual pela cookie do GTranslate (ou 'en' por defeito) | |||
var currentLangCode = (document.cookie.match(/googtrans=\/en\/([a-z]{2})/) || [])[1] || 'en'; | |||
var currentLangObj = languages.find(l => l.code === currentLangCode) || languages[0]; | |||
// Construir HTML do Dropdown Customizado | |||
var optionsHtml = ''; | |||
languages.forEach(function(lang) { | |||
var isSelected = lang.code === currentLangObj.code ? ' selected' : ''; | |||
optionsHtml += '<div class="custom-lang-option' + isSelected + '" data-code="' + lang.code + '">' + lang.name + '</div>'; | |||
}); | |||
var dropdownHtml = | |||
'<div class="gtranslate_wrapper" id="custom-lang-selector">' + | |||
'<div class="custom-lang-trigger">' + | |||
'<span class="custom-lang-current">' + currentLangObj.name + '</span>' + | |||
'<span class="custom-lang-arrow"></span>' + | |||
'</div>' + | |||
'<div class="custom-lang-menu">' + optionsHtml + '</div>' + | |||
'<div id="google_translate_element" style="display:none;"></div>' + | |||
'</div>'; | |||
$('#p-navigation').prepend(dropdownHtml); | |||
// Carregar o Widget Google Translate Base | |||
window.googleTranslateElementInit = function() { | |||
new google.translate.TranslateElement({pageLanguage: 'en'}, 'google_translate_element'); | |||
}; | |||
$.getScript('//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit'); | |||
// Eventos de Abrir/Fechar e Selecionar | |||
var $wrapper = $('#custom-lang-selector'); | |||
var $trigger = $wrapper.find('.custom-lang-trigger'); | |||
var $menu = $wrapper.find('.custom-lang-menu'); | |||
$trigger.on('click', function(e) { | |||
e.stopPropagation(); | |||
$wrapper.toggleClass('open'); | |||
}); | |||
$(document).on('click', function() { | |||
$wrapper.removeClass('open'); | |||
}); | |||
$wrapper.on('click', '.custom-lang-option', function() { | |||
var code = $(this).data('code'); | |||
var name = $(this).text(); | |||
$('.custom-lang-option').removeClass('selected'); | |||
$(this).addClass('selected'); | |||
$('.custom-lang-current').text(name); | |||
$wrapper.removeClass('open'); | |||
// Aplicar tradução | |||
document.cookie = "googtrans=/en/" + code + "; path=/; domain=" + location.hostname; | |||
document.cookie = "googtrans=/en/" + code + "; path=/;"; | |||
location.reload(); | |||
}); | |||
} | |||
}); | |||
/* Widget de Tradução GTranslate */ | /* Widget de Tradução GTranslate */ | ||