(function (window, document) {
VLibrasWeb = {
path: 'VLibrasWeb',
lastTextElement: undefined
};
VLibrasWeb.init = function (path) {
if (path) this.path = path + '/VLibrasWeb';
var player = document.createElement('script');
player.src = this.path + '/vlibras-player.js';
player.onload = function () {
document.querySelector('.vlibras-widget').classList.add('active');
VLibrasWeb.run(window.VLibrasPlayer);
}
document.body.appendChild(player);
};
VLibrasWeb.loadPlayer = function (canvas) {
window.VLibrasPlayer.initialize(VLibrasWeb.path, canvas);
};
VLibrasWeb.run = function (VLibrasPlayer) {
var vw = document.querySelector('.vlibras-widget');
var vwAccess = vw.querySelector('.vw-btn-access');
var vwPlayer = vw.querySelector('.vw-player');
var vwClose = vwPlayer.querySelector('.vw-btn-close');
var vwSide = vwPlayer.querySelector('.vw-btn-side');
var vwControls = vwPlayer.querySelector('.vw-controls');
var vwLinks = vwPlayer.querySelector('.vw-links');
var vwCanvas = vwPlayer.querySelector('.vw-canvas-wrapper');
var vwSubtitle = vwPlayer.querySelector('.vw-subtitle');
var vwLoading = vwPlayer.querySelector('.vw-loading');
var vwProgress = vwControls.querySelector('.vw-progress');
var vwSpeed = vwControls.querySelector('.vw-speed');
var vwWindow = vwControls.querySelector('.vw-window');
var vwPlay = vwControls.querySelector('.vw-play');
VLibrasPlayer.addProgressListener(function (progress) {
if (progress >= 1) {
deactivateAll()
progress = 0;
}
vwProgress.style.width = (progress * 100) + '%';
});
VLibrasPlayer.addTranslateStartListener(function () {
vwLoading.classList.add('active');
});
VLibrasPlayer.addLoadListener(function () {
vwLoading.classList.remove('active');
vwCanvas.querySelector('.vw-canvas').classList.add('active');
vwPlayer.classList.add('loaded');
if (vwPlayer.classList.contains('active')) {
addTagsTexts();
}
VLibrasPlayer.play('SELECIONAR TEXTO TRADUZIR');
});
VLibrasPlayer.addTranslateEndListener(function () {
vwLoading.classList.remove('active');
});
VLibrasPlayer.addErrorListener(function (err) {
var vwError = vwCanvas.querySelector('.vw-error');
vwPlayer.classList.add('error');
switch(err) {
case 'unsupported':
vwError.innerHTML = 'O seu navegador não é compatível com este widget.';
break;
case 'broken':
vwError.innerHTML = 'Reinicie o navegador após a instalação.';
break;
case 'missing':
vwError.innerHTML = 'Por favor, instale o Unity WebPlayer.';
break;
default:
vwError.innerHTML = 'Ocorreu um erro. Por favor, entre em contato com o administrador da página.'
}
});
vwPlay.addEventListener('click', function (e) {
e.preventDefault();
if (VLibrasWeb.lastTextElement) {
var span = VLibrasWeb.lastTextElement.querySelector('span');
span.classList.add('vw-text-active');
vwProgress.style.width = 0;
}
VLibrasPlayer.play();
});
vwSubtitle.addEventListener('click', function (e) {
e.preventDefault();
vwSubtitle.classList.toggle('active');
VLibrasPlayer.switchSubtitle();
})
vwWindow.addEventListener('click', function (e) {
e.preventDefault();
vw.classList.toggle('maximize');
vwWindow.classList.toggle('active');
});
vwSpeed.addEventListener('click', function (e) {
e.preventDefault();
var actualSpeed = vwSpeed.textContent;
var newSpeed = (actualSpeed % 4) + 1;
VLibrasPlayer.setSpeed(newSpeed * 0.5);
this.textContent = newSpeed;
});
vwAccess.addEventListener('click', function () {
vwPlayer.classList.add('active');
vwAccess.classList.add('inactive');
if (VLibrasPlayer.isLoaded()) {
addTagsTexts();
} else {
VLibrasWeb.loadPlayer(vwCanvas);
}
});
vwClose.addEventListener('click', function () {
vwPlayer.classList.remove('active');
vwAccess.classList.remove('inactive');
vw.classList.remove('left');
minimize();
close();
});
vwSide.addEventListener('click', function () {
vw.classList.toggle('left');
minimize();
});
function hasParent(el, fn) {
var node = el.parentNode;
while ( node != null ) {
if (fn(node)) return node;
node = node.parentNode;
}
return false;
}
function showLinks(content) {
var links = Array.prototype.slice.call(content.querySelectorAll('a'));
var linksList = vwLinks.querySelector('ul');
var link = hasParent(content, function (parent) { return parent.tagName == 'A'; });
if (link) {
links.push(link);
}
linksList.innerHTML = '';
for(var i = 0; i < links.length; i++) {
var link = links[i];
var li = document.createElement('li');
li.innerHTML = '' + link.textContent + '';
linksList.appendChild(li);
}
if (links.length > 0) {
vwLinks.classList.add('active');
} else {
vwLinks.classList.remove('active');
}
}
function addTagsTexts() {
getAllNodeTexts(document.body, function (node) {
if (vw.contains(node)) return;
node.innerHTML = '' + node.innerHTML + '';
var span = node.querySelector('span');
span.classList.add('vw-text');
span.addEventListener('click', function (e) {
e.preventDefault();
vwProgress.style.width = 0;
VLibrasWeb.lastTextElement = this.parentNode;
showLinks(this);
window.VLibrasPlayer.stop();
window.VLibrasPlayer.translate(this.textContent);
deactivateAll();
this.classList.add('vw-text-active');
});
});
}
function removeTagsTexts() {
var tagsTexts = document.querySelectorAll('.vw-text');
for (var i = 0; i < tagsTexts.length; i++) {
var parent = tagsTexts[i].parentNode;
parent.innerHTML = tagsTexts[i].innerHTML;
}
}
function getAllNodeTexts(root, callback) {
var noop = function () {};
var headElements = ['SCRIPT', 'TITLE', 'META', 'STYLE', 'LINK', 'BASE'];
for(var i = 0; i < root.childNodes.length; i++) {
var node = root.childNodes[i];
var anyText = false;
if (headElements.indexOf(node.tagName) != -1) {
continue;
}
for(var j = 0; j < node.childNodes.length; j++) {
var child = node.childNodes[j];
if (child.nodeType == Node.TEXT_NODE && child.nodeValue.trim() != '') {
anyText = true;
break;
}
}
if (anyText) {
(callback || noop)(node);
} else {
getAllNodeTexts(node, callback);
}
}
}
function minimize() {
vw.classList.remove('maximize');
vwWindow.classList.remove('active');
}
function close() {
removeTagsTexts();
VLibrasPlayer.stop();
vwProgress.style.width = 0;
}
function deactivateAll() {
var active = document.querySelector('.vw-text.vw-text-active');
if (active) {
active.classList.remove('vw-text-active');
}
}
};
})(window, document);