1var final_transcript = ''; 2var recognizing = false; 3var ignore_onend; 4var recognition; 5var dataStruct; 6var arrayFinal = []; 7var delimiters = []; 8 9var globalStruct= [['dynamicMenuForm:tasks', 'ordem do dia', 'button'], 10 ['dynamicMenuForm:inbox', 'email', 'button'], 11 ['dynamicMenuForm:register', 'registos', 'button'], 12 ['dynamicMenuForm:documents', 'documentos', 'button'], 13 ['dynamicMenuForm:home', 'inicio', 'button'], 14 ['dynamicMenuForm:management', 'gestão', 'button'], 15 ['dynamicMenuForm:configurations', 'configurações', 'button'], 16 ['messagesLink', 'mensagens', 'button'], 17 ['searchForm:searchInput##document.getElementById(\'searchForm:navBarSearchBtn\').click();', 'pesquisar', 'input+action']]; 18 19//['var msg = new SpeechSynthesisUtterance(\'?\');window.speechSynthesis.speak(msg);', 'repetir', 'select'] 20 21function speechHandler(){ 22 if (!('webkitSpeechRecognition' in window)) { 23 console.log('Reconhecimento não é suportado por este browser, pf fazer o upgrade (chrome +25).'); 24 } else { 25 console.log('teste...'); 26 recognition = new webkitSpeechRecognition(); 27 recognition.continuous = true; 28 recognition.interimResults = false; 29 30 recognition.onstart = function () { 31 recognizing = true; 32 var div = document.getElementById('speechResult'); 33 div.innerHTML = '<b>'+'Por favor seja claro.'+'</b>'; 34 35 console.log('Pode começar a falar...'); 36 }; 37 38 recognition.onerror = function (event) { 39 var div = document.getElementById('speechResult'); 40 41 if (event.error === 'no-speech') { 42 div.innerHTML = '<b>'+'Não foi detetada qualquer fala.'+'</b>'; 43 ignore_onend = true; 44 } 45 if (event.error === 'audio-capture') { 46 div.innerHTML = '<b>'+'Não foi detetado micro.'+'</b>'; 47 ignore_onend = true; 48 } 49 if (event.error === 'not-allowed') { 50 div.innerHTML = '<b>'+'Verifique a ligação do micro...'+'</b>'; 51 ignore_onend = true; 52 } 53 54 enableRepeat(); 55 }; 56 57 recognition.onend = function () { 58 recognizing = false; 59 var div = document.getElementById('speechResult'); 60 div.innerHTML = '<b>'+'O processo terminou.'+'</b>'; 61 62 enableRepeat(); 63 64 if (ignore_onend) { 65 return; 66 } 67 if (!final_transcript) { 68 console.log('terminou...'); 69 return; 70 } 71 console.log(''); 72 if (window.getSelection) { 73 //window.getSelection().removeAllRanges(); 74 //var range = document.createRange(); 75 //range.selectNode(document.getElementById('final_span')); 76 //window.getSelection().addRange(range); 77 } 78 }; 79 80 recognition.onresult = function (event) { 81 82 console.log('Obteve resultado.'); 83 final_transcript = ''; 84 arrayFinal = []; 85 86 var interim_transcript = ''; 87 for (var i = event.resultIndex; i < event.results.length; ++i) { 88 if (event.results[i].isFinal) { 89 final_transcript += event.results[i][0].transcript; 90 } else { 91 interim_transcript += event.results[i][0].transcript; 92 } 93 } 94 95 var div = document.getElementById('speechResult'); 96 div.innerHTML = '<b>
96'+final_transcript+'</b>'; 97 98 console.log('Valor final:' + final_transcript); 99 console.log('Valor temporário' + interim_transcript); 100 101 //if (final_transcript) { 102 run(final_transcript); 103 104 //Limpar elementos 105 final_transcript = ''; 106 arrayFinal = []; 107 //} 108 }; 109 } 110} 111 112 113function enableRepeat(){ 114 document.getElementById('compositeSpeech:pausa').style.display='none'; 115 document.getElementById('compositeSpeech:repetir').style.display='inline'; 116 document.getElementById('divImage2').style.display='block'; 117 document.getElementById('divImage1').style.display='none'; 118} 119 120function cleanInputFocus() { 121 var elemInFocus = findFocusId(); 122 dataStruct[elemInFocus][0] = ''; 123 document.activeElement.value = ''; 124} 125 126function findFocusId() { 127 for (var count = 0; count < globalStruct.length; count++) { 128 if (document.activeElement.id === globalStruct[count][0]) 129 return count; 130 } 131 return -1; 132} 133 134function startButton(struct) { 135 136 console.log("Valor:"+recognition); 137 138 if(recognition===null || recognition === undefined) 139 speechHandler(); 140 141 142 if (recognizing) { 143 recognition.stop(); 144 return; 145 } 146 147 final_transcript = ''; 148 149 globalStruct=globalStruct.concat(struct); 150 //initDataStruct(globalStruct.length); 151 152 for (var count = 0; count < globalStruct.length; count++) { 153 delimiters.push(globalStruct[count][1]); 154 } 155 156 final_transcript = ''; 157 recognition.lang = 'pt-PT'; 158 recognition.start(); 159 ignore_onend = false; 160} 161 162function endButton(){ 163 164 recognition.stop(); 165 enableRepeat(); 166 167} 168 169 170function nextDelimiter(value) { 171 172 if (value === null || value === undefined || value === '') 173 return null; 174 175 var res = new Array(); 176 var min = 1000; 177 var delimiterName; 178 179 for (var i = 0; i < delimiters.length; i++) { 180 var delimiter = value.search(delimiters[i]); 181 if (delimiter >= 0) { 182 newMin = Math.min(min, delimiter); 183 if (min > newMin) { 184 min = newMin; 185 delimiterName = delimiters[i]; 186 } 187 } 188 } 189 190 if (min < 1000) { 191 res.push(delimiterName); 192 res.push(min); 193 return res; 194 } 195 else 196 return null; 197} 198 199function nextValue(value) { 200 var res = nextDelimiter(value); 201 if (res !== null) 202 return value.substring(res[1], value.length); 203 else 204 return null; 205} 206 207function splitByMultipleDelimiters(value) { 208 209 var delimiter = nextDelimiter(value); 210 211 if (delimiter === null) { 212 if (value === null) 213 return 0; 214 else 215 return value.length; 216 } 217 else { 218 var initial = delimiter[1] + delimiter[0].length + 1; 219 var newValue = value.substring(initial, value.length); 220 221 arrayFinal.push([delimiter[0], value.substring(initial, initial + splitByMultipleDelimiters(newValue))]); 222 223 return delimiter[1]; 224 } 225} 226 227function getDataByToken(token) { 228 229 for (var count = 0; count < globalStruct.length; count++) { 230 if (globalStruct[count][1] === token) 231 return globalStruct[count]; 232 } 233 234 return null; 235} 236 237function run(value) { 238 239 var initial = splitByMultipleDelimiters(value); 240 241 if (initial >= 0) 242 document.activeElement.value = document.activeElement.value + value.substring(0, initial); 243 244 arrayFinal.reverse(); 245 246 for (var count = 0; count < arrayFinal.length; count++) { 247 var data = getDataByToken(arrayFinal[count][0]); 248 249 switch (data[2]) { 250 case 'button': 251 button(data[0]); 252 break; 253 case 'action': 254 action(data[0]); 255 break; 256 case 'input': 257 input(data[0],arrayFinal[count][1]); 258 break; 259 case 'select': 260 select(arrayFinal[count][1],data[0]); 261 break; 262 case 'input+action': 263 var tuple=data[0].split('##'); 264 if(tuple.length===2){ 265 input(tuple[0],arrayFinal[count][1]); 266 action(tuple[1]); 267 } 268 break; 269 case 'action+select+action': 270 var tuple=data[0].split('##'); 271 272 if(tuple.length===3){ 273 action(tuple[0]); 274 select(arrayFinal[count][1],tuple[1]); 275 action(tuple[2]); 276 } 277 break; 278 case 'select+action': 279 var tuple=data[0].split('##'); 280 281 if(tuple.length===2){ 282 select(arrayFinal[count][1],tuple[0]); 283 action(tuple[1]); 284 } 285 break; 286 } 287 } 288} 289 290function select(initialValue,value){ 291 var num=decode(initialValue); 292 293 if(num!==null){ 294 var finalValue = replace(value, num); 295 eval(finalValue); 296 } 297} 298 299function button(value){ 300 document.getElementById(value).click(); 301} 302 303function input(id, value){ 304 document.getElementById(id).focus(); 305 //document.activeElement.value + 306 document.activeElement.value = value; 307} 308 309function action(value){ 310 eval(value); 311} 312 313function decode(value){ 314 315 if(/^\d+$/.test(value)) 316 return value - 1; 317 318 switch (value) { 319 case 'primeira': 320 case 'primeiro': 321 case 'um': 322 return 0; 323 case 'um dia': 324 case 'segunda': 325 case 'segundo': 326 case 'dois': 327 return 1; 328 case 'dois dias': 329 case 'terceiro': 330 case 'terceira': 331 case 'três': 332 return 2; 333 case 'três dias': 334 case 'quarto': 335 case 'quarta': 336 case 'quatro': 337 return 3; 338 case 'quatro dias': 339 case 'quinto': 340 case 'quinta': 341 case 'cinco': 342 return 4; 343 case 'cinco dias': 344 case 'sexto': 345 case 'sexta': 346 case 'seis': 347 return 5; 348 case 'seis dias': 349 case 'sétima': 350 case 'sétimo': 351 case 'sete': 352 return 6; 353 case 'sete dias': 354 case 'oitavo': 355 case 'oitava': 356 case 'oito': 357 return 7; 358 } 359 360 return value; 361} 362 363function replace(content, newValue){ 364 return content.replace('?',newValue); 365}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.