Commit 810245ff239c7f24fd05358838c10e94ece53b73

Authored by David Guilherme
0 parents
Exists in master

Pre-beta release

.gitignore 0 → 100644
  1 +++ a/.gitignore
@@ -0,0 +1,2 @@ @@ -0,0 +1,2 @@
  1 +VLibrasWeb/Player/*
  2 +*.zip
0 \ No newline at end of file 3 \ No newline at end of file
README.md 0 → 100644
  1 +++ a/README.md
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +VLibras Web
  2 +===========
  3 +
  4 +Instalação
  5 +-------------
  6 +
  7 +1. Adicione o seguinte trecho HTML:
  8 +
  9 +```html
  10 +<div class="vlibras-widget">
  11 + <img class="vw-btn-access" src="VLibrasWeb/Images/acessibilidade-ico.png" />
  12 +
  13 + <div class="vw-player">
  14 + <div class="vw-topbar">
  15 + <span class="vw-btn-side"><</span>
  16 + <span class="vw-btn-close">X</span>
  17 + </div>
  18 +
  19 + <canvas class="vw-canvas emscripten"></canvas>
  20 + </div>
  21 +</div>
  22 +```
  23 +
  24 +2. Adicione os arquivos `.css` e `.js` na página:
  25 +
  26 +```html
  27 +<head>
  28 + <link rel="stylesheet" href="VLibrasWeb/vlibras-web.css" />
  29 +</head>
  30 +<body>
  31 + ...
  32 + <script src="VLibrasWeb/vlibras-web.js"></script>
  33 +</body>
  34 +```
  35 +
  36 +3. Finalmente, inicialize o VLibrasWeb
  37 +
  38 +```js
  39 +// Default: Se a pasta VLibrasWeb estiver na mesma pasta do arquivo index
  40 +VLibrasWeb.init();
  41 +
  42 +// Custom: Passe o caminho da pasta VLibrasWeb
  43 +VLibrasWeb.init('another/path');
  44 +```
  45 +
  46 +** Enjoy **
0 \ No newline at end of file 47 \ No newline at end of file
VLibrasWeb/Images/acessibilidade-ico.jpeg 0 → 100644

11.2 KB

VLibrasWeb/Images/acessibilidade-ico.png 0 → 100644

1.55 KB

VLibrasWeb/Images/close.png 0 → 100644

683 Bytes

VLibrasWeb/Images/fullscreen.png 0 → 100644

241 Bytes

VLibrasWeb/Images/minimize.png 0 → 100644

250 Bytes

VLibrasWeb/Images/play.png 0 → 100644

650 Bytes

VLibrasWeb/Images/subtitle-inactive.png 0 → 100644

385 Bytes

VLibrasWeb/Images/subtitle.png 0 → 100644

377 Bytes

VLibrasWeb/vlibras-player.js 0 → 100644
  1 +++ a/VLibrasWeb/vlibras-player.js
@@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
  1 +(function (window, document) {
  2 + function VLibrasPlayer() {
  3 + this.loaded = false;
  4 + this.glosa = undefined;
  5 + this.canvas = document.querySelector('#vlibras-canvas');
  6 + this.initialized = false;
  7 + }
  8 +
  9 + VLibrasPlayer.prototype.translate = function (text) {
  10 + var self = this;
  11 + text = encodeURI(text);
  12 +
  13 + getGlosa('http://150.165.204.30/glosa?texto=' + text,
  14 + function (status, response) {
  15 + self.glosa = response || decodeURI(text).toUpperCase();
  16 + self.play();
  17 + });
  18 + };
  19 +
  20 + VLibrasPlayer.prototype.play = function () {
  21 + if (this.glosa !== undefined && this.loaded === true) {
  22 + window.SendMessage('PlayerManager', 'catchGlosa', this.glosa);
  23 + }
  24 + };
  25 +
  26 + VLibrasPlayer.prototype.setSpeed = function (speed) {
  27 + window.SendMessage('PlayerManager', 'setSlider', speed);
  28 + };
  29 +
  30 + VLibrasPlayer.prototype.switchSubtitle = function () {
  31 + window.SendMessage('PlayerManager', 'switchSubtitleStatus');
  32 + };
  33 +
  34 + VLibrasPlayer.prototype.addProgressListener = function (callback) {
  35 + this.onprogress = callback;
  36 + };
  37 +
  38 + VLibrasPlayer.prototype.load = function () {
  39 + this.loaded = true;
  40 + this.play();
  41 + };
  42 +
  43 + VLibrasPlayer.prototype.getCanvasElement = function () {
  44 + return this.canvas;
  45 + };
  46 +
  47 + VLibrasPlayer.prototype.getPath = function () {
  48 + return this.path;
  49 + };
  50 +
  51 + VLibrasPlayer.prototype.initialize = function (path, canvas, callback) {
  52 + var noop = function () {};
  53 +
  54 + if (this.initialized) {
  55 + (callback || noop)();
  56 + return;
  57 + }
  58 +
  59 + this.canvas = canvas;
  60 + this.path = path;
  61 +
  62 + var script = document.createElement('script');
  63 + script.src = path + '/Player/Release/Setup.js';
  64 + document.body.appendChild(script);
  65 +
  66 + script.onload = (callback || noop);
  67 +
  68 + this.initialized = true;
  69 + };
  70 +
  71 + window.onLoadPlayer = function () {
  72 + this.VLibrasPlayer.load();
  73 + };
  74 +
  75 + window.updateProgress = function (progress) {
  76 + var noop = function () {};
  77 + (this.VLibrasPlayer.onprogress || noop)(progress);
  78 + };
  79 +
  80 + window.VLibrasPlayer = new VLibrasPlayer();
  81 +
  82 + function getGlosa(url, callback) {
  83 + var xhr = new XMLHttpRequest();
  84 + xhr.open('GET', url, true);
  85 +
  86 + xhr.onreadystatechange = function() {
  87 + if (xhr.readyState != 4) return;
  88 + callback(xhr.status, xhr.responseText);
  89 + };
  90 +
  91 + xhr.send();
  92 + };
  93 +})(window, document);
0 \ No newline at end of file 94 \ No newline at end of file
VLibrasWeb/vlibras-web.css 0 → 100644
  1 +++ a/VLibrasWeb/vlibras-web.css
@@ -0,0 +1,207 @@ @@ -0,0 +1,207 @@
  1 +.vlibras-widget {
  2 + position: fixed;
  3 + right: 0;
  4 + top: 50%;
  5 + margin-top: -225px;
  6 + z-index: 9999;
  7 + display: none;
  8 +}
  9 +
  10 +.vlibras-widget.active {
  11 + display: block;
  12 +}
  13 +
  14 +.vlibras-widget.maximize {
  15 + bottom: 40px;
  16 + margin-top 0;
  17 + top: initial;
  18 + right: 50%;
  19 + margin-right: -275px;
  20 +}
  21 +
  22 +.vlibras-widget.maximize .vw-player {
  23 + height: 550px;
  24 + width: 550px !important;
  25 +}
  26 +
  27 +.vlibras-widget.maximize .vw-canvas-wrapper {
  28 + height: 468px;
  29 +}
  30 +
  31 +.vlibras-widget.left {
  32 + left: 0;
  33 + right: initial;
  34 +}
  35 +
  36 +.vlibras-widget.left .vw-player {
  37 + float: left;
  38 +}
  39 +
  40 +.vlibras-widget .vw-btn-access {
  41 + width: 70px;
  42 + padding: 5px;
  43 + text-align: center;
  44 +
  45 + -webkit-box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  46 + -moz-box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  47 + box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  48 +}
  49 +
  50 +.vw-btn-access img {
  51 + margin-bottom: 5px;
  52 + width: 70px;
  53 + height: 70px;
  54 +}
  55 +
  56 +.vw-btn-access span {
  57 + font-size: 15px;
  58 + color: #004088;
  59 +}
  60 +
  61 +.vlibras-widget .vw-btn-access.inactive {
  62 + display: none;
  63 +}
  64 +
  65 +.vlibras-widget .vw-player {
  66 + display: none;
  67 + width: 0;
  68 + height: 450px;
  69 + float: right;
  70 +
  71 + -webkit-box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  72 + -moz-box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  73 + box-shadow: 0px 0px 9px 0px rgba(0,0,0,0.75);
  74 +}
  75 +
  76 +.vlibras-widget .vw-player.active {
  77 + width: 320px;
  78 + display: block;
  79 +}
  80 +
  81 +.vw-player .vw-canvas-wrapper {
  82 + position: relative;
  83 + width: 100%;
  84 + height: 370px;
  85 + background-color: #ebebeb;
  86 +}
  87 +
  88 +.vw-canvas-wrapper .vw-subtitle {
  89 + position: absolute;
  90 + top: 15px;
  91 + right: 15px;
  92 +}
  93 +
  94 +.vw-subtitle .vw-subtitle-off, .vw-subtitle.active .vw-subtitle-on {
  95 + display: block;
  96 +}
  97 +
  98 +.vw-subtitle .vw-subtitle-on, .vw-subtitle.active .vw-subtitle-off {
  99 + display: none;
  100 +}
  101 +
  102 +.vw-canvas-wrapper .vw-canvas {
  103 + width: 100%;
  104 + height: 100%;
  105 +}
  106 +
  107 +.vw-player .vw-topbar {
  108 + padding: 8.5px 10px;
  109 + height: 20px;
  110 + background-color: #004088;
  111 + color: #fff;
  112 +}
  113 +
  114 +.vw-player .vw-btn-close {
  115 + float: right;
  116 + height: 100%;
  117 +}
  118 +
  119 +.vw-player .vw-btn-side {
  120 + float: left;
  121 + border: 1px solid #fff;
  122 + background-color: #fff;
  123 + width: 2em;
  124 + margin: 0;
  125 +}
  126 +
  127 +.vw-btn-side .vw-arrow {
  128 + background-color: #004088;
  129 + float: right;
  130 + width: 50%;
  131 + text-align: center;
  132 +}
  133 +
  134 +.vw-btn-side .vw-arrow:after {
  135 + content: "<";
  136 +}
  137 +
  138 +.vlibras-widget.left .vw-arrow {
  139 + float: left;
  140 +}
  141 +
  142 +.vlibras-widget.left .vw-arrow:after {
  143 + content: ">";
  144 +}
  145 +
  146 +.vlibras-widget .vw-controls {
  147 + width: 100%;
  148 + padding: 8.5px 10px;
  149 + background-color: #fff;
  150 +
  151 + -webkit-box-sizing: border-box;
  152 + -moz-box-sizing: border-box;
  153 + box-sizing: border-box;
  154 +
  155 + display: -webkit-flex;
  156 + display: flex;
  157 + align-items: center;
  158 +}
  159 +
  160 +.vw-controls .vw-play {
  161 + height: 28px;
  162 +}
  163 +
  164 +.vw-play img {
  165 + height: 100%;
  166 +}
  167 +
  168 +.vw-controls .vw-progressbar {
  169 + margin: 0 13px;
  170 + width: 100%;
  171 + height: 3px;
  172 + background-color: #000;
  173 +}
  174 +
  175 +.vw-progressbar .vw-progress {
  176 + background-color: #ff2323;
  177 + width: 0;
  178 + height: 100%;
  179 +}
  180 +
  181 +.vw-controls .vw-speed {
  182 + padding: 3px;
  183 + margin-right: 10px;
  184 + font-size: 19px;
  185 + font-weight: bold;
  186 + cursor: pointer;
  187 +}
  188 +
  189 +.vw-controls .vw-speed:before {
  190 + content: "x";
  191 +}
  192 +
  193 +.vw-controls .vw-window {
  194 + height: 28px;
  195 +}
  196 +
  197 +.vw-window .vw-maximize, .vw-window.active .vw-minimize {
  198 + display: block;
  199 +}
  200 +
  201 +.vw-window .vw-minimize, .vw-window.active .vw-maximize {
  202 + display: none;
  203 +}
  204 +
  205 +.wc-text:hover, .wc-text.active {
  206 + background-color: rgba(255, 102, 0, 0.5);
  207 +}
0 \ No newline at end of file 208 \ No newline at end of file
VLibrasWeb/vlibras-web.js 0 → 100644
  1 +++ a/VLibrasWeb/vlibras-web.js
@@ -0,0 +1,153 @@ @@ -0,0 +1,153 @@
  1 +(function (window, document) {
  2 + VLibrasWeb = {
  3 + path: 'VLibrasWeb'
  4 + };
  5 +
  6 + VLibrasWeb.init = function (path) {
  7 + if (path) this.path = path + '/VLibrasWeb';
  8 +
  9 + var player = document.createElement('script');
  10 + player.src = this.path + '/vlibras-player.js';
  11 +
  12 + player.onload = function () {
  13 + document.querySelector('.vlibras-widget').classList.add('active');
  14 + VLibrasWeb.run(window.VLibrasPlayer);
  15 + }
  16 +
  17 + document.body.appendChild(player);
  18 + };
  19 +
  20 + VLibrasWeb.loadPlayer = function (canvas, callback) {
  21 + window.VLibrasPlayer.initialize(VLibrasWeb.path, canvas, callback);
  22 + };
  23 +
  24 + VLibrasWeb.run = function (VLibrasPlayer) {
  25 + var vw = document.querySelector('.vlibras-widget');
  26 + var vwAccess = vw.querySelector('.vw-btn-access');
  27 + var vwPlayer = vw.querySelector('.vw-player');
  28 +
  29 + var vwClose = vwPlayer.querySelector('.vw-btn-close');
  30 + var vwSide = vwPlayer.querySelector('.vw-btn-side');
  31 + var vwControls = vwPlayer.querySelector('.vw-controls');
  32 + var vwCanvas = vwPlayer.querySelector('.vw-canvas');
  33 + var vwSubtitle = vwPlayer.querySelector('.vw-subtitle');
  34 +
  35 + var vwProgress = vwControls.querySelector('.vw-progress');
  36 + var vwSpeed = vwControls.querySelector('.vw-speed');
  37 + var vwWindow = vwControls.querySelector('.vw-window');
  38 + var vwPlay = vwControls.querySelector('.vw-play');
  39 +
  40 + VLibrasPlayer.addProgressListener(function (progress) {
  41 + if (progress >= 1) {
  42 + document.querySelector('.wc-text.active').classList.remove('active');
  43 + progress = 0;
  44 + }
  45 +
  46 + vwProgress.style.width = (progress * 100) + '%';
  47 + });
  48 +
  49 + vwPlay.addEventListener('click', function (e) {
  50 + e.preventDefault();
  51 +
  52 + VLibrasPlayer.play();
  53 + });
  54 +
  55 + vwSubtitle.addEventListener('click', function (e) {
  56 + e.preventDefault();
  57 +
  58 + vwSubtitle.classList.toggle('active');
  59 + VLibrasPlayer.switchSubtitle();
  60 + })
  61 +
  62 + vwWindow.addEventListener('click', function (e) {
  63 + e.preventDefault();
  64 +
  65 + vw.classList.toggle('maximize');
  66 + vwWindow.classList.toggle('active');
  67 + });
  68 +
  69 + vwSpeed.addEventListener('click', function (e) {
  70 + e.preventDefault();
  71 +
  72 + var actualSpeed = vwSpeed.innerText;
  73 + var newSpeed = (actualSpeed % 4) + 1;
  74 +
  75 + VLibrasPlayer.setSpeed(newSpeed * 0.5);
  76 + this.innerText = newSpeed;
  77 + });
  78 +
  79 + vwAccess.addEventListener('click', function () {
  80 + vwPlayer.classList.add('active');
  81 + vwAccess.classList.add('inactive');
  82 +
  83 + VLibrasWeb.loadPlayer(vwCanvas, function () {
  84 + getAllNodeTexts(document.body, function (node) {
  85 + if (vw.contains(node)) return;
  86 +
  87 + var span = document.createElement('span');
  88 + span.classList.add('wc-text');
  89 + var parent = node.parentNode;
  90 +
  91 + parent.insertBefore(span, node);
  92 + parent.removeChild(node);
  93 + span.appendChild(node);
  94 +
  95 + span.addEventListener('click', function (e) {
  96 + e.preventDefault();
  97 + window.VLibrasPlayer.translate(this.textContent);
  98 +
  99 + var actives = document.querySelector('.wc-text.active');
  100 + if (actives) {
  101 + actives.classList.remove('active');
  102 + }
  103 +
  104 + this.classList.add('active');
  105 + });
  106 + });
  107 + });
  108 + });
  109 +
  110 + vwClose.addEventListener('click', function () {
  111 + vwPlayer.classList.remove('active');
  112 + vwAccess.classList.remove('inactive');
  113 + vw.classList.remove('left');
  114 +
  115 + minimize();
  116 +
  117 + getAllNodeTexts(document.body, function (node) {
  118 + if (vw.contains(node)) return;
  119 +
  120 + var span = node.parentNode;
  121 + var parent = span.parentNode;
  122 +
  123 + span.removeChild(node);
  124 + parent.insertBefore(node, span);
  125 + parent.removeChild(span);
  126 + });
  127 + });
  128 +
  129 + vwSide.addEventListener('click', function () {
  130 + vw.classList.toggle('left');
  131 +
  132 + minimize();
  133 + });
  134 +
  135 + function getAllNodeTexts(root, callback) {
  136 + var noop = function () {};
  137 + var walk = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null, null);
  138 +
  139 + while (walk.nextNode()) {
  140 + var node = walk.currentNode;
  141 +
  142 + if (node.textContent.trim().length > 0) {
  143 + (callback || noop)(node);
  144 + }
  145 + }
  146 + }
  147 +
  148 + function minimize() {
  149 + vw.classList.remove('maximize');
  150 + vwWindow.classList.remove('active');
  151 + }
  152 + };
  153 +})(window, document);
index.html 0 → 100644
  1 +++ a/index.html
@@ -0,0 +1,54 @@ @@ -0,0 +1,54 @@
  1 +<html>
  2 + <head>
  3 + <link rel="stylesheet" href="VLibrasWeb/vlibras-web.css">
  4 + </head>
  5 + <body>
  6 + <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Explicabo odio ratione, numquam. Quisquam ex, nemo ea necessitatibus laudantium, rem natus officiis dignissimos a repudiandae, quam doloribus voluptatibus commodi sed aperiam.</p>
  7 + <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolorum tempore error molestiae totam provident <a href="">incidunt</a> voluptates iste corrupti sed rerum alias id commodi, suscipit nobis eveniet, possimus consectetur a sapiente?</p>
  8 +
  9 + <div class="vlibras-widget">
  10 + <div class="vw-btn-access">
  11 + <img src="VLibrasWeb/Images/acessibilidade-ico.jpeg" />
  12 + <span class="vw-text-access">
  13 + Acessível em Libras
  14 + </span>
  15 + </div>
  16 + <div class="vw-player">
  17 + <div class="vw-topbar">
  18 + <div class="vw-btn-side">
  19 + <span class="vw-arrow"></span>
  20 + </div>
  21 +
  22 + <img class="vw-btn-close" src="VLibrasWeb/Images/close.png" />
  23 + </div>
  24 +
  25 + <div class="vw-canvas-wrapper">
  26 + <div class="vw-subtitle active">
  27 + <img class="vw-subtitle-on" src="VLibrasWeb/Images/subtitle.png" />
  28 + <img class="vw-subtitle-off" src="VLibrasWeb/Images/subtitle-inactive.png" />
  29 + </div>
  30 + <canvas class="vw-canvas emscripten"></canvas>
  31 + </div>
  32 +
  33 + <div class="vw-controls">
  34 + <div class="vw-play">
  35 + <img src="VLibrasWeb/Images/play.png" />
  36 + </div>
  37 + <div class="vw-progressbar">
  38 + <div class="vw-progress"></div>
  39 + </div>
  40 + <span class="vw-speed">2</span>
  41 + <span class="vw-window">
  42 + <img class="vw-maximize" src="VLibrasWeb/Images/fullscreen.png" />
  43 + <img class="vw-minimize" src="VLibrasWeb/Images/minimize.png" />
  44 + </span>
  45 + </div>
  46 + </div>
  47 + </div>
  48 +
  49 + <script src="VLibrasWeb/vlibras-web.js"></script>
  50 + <script>
  51 + VLibrasWeb.init();
  52 + </script>
  53 + </body>
  54 +</html>
0 \ No newline at end of file 55 \ No newline at end of file