WME TTS test

Play TTS

当前为 2016-09-14 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME TTS test
  3. // @description Play TTS
  4. // @version 0.1
  5. // @author Vinkoy
  6. // @include https://www.waze.com/editor/*
  7. // @include https://www.waze.com/*/editor/*
  8. // @include https://editor-beta.waze.com/editor/*
  9. // @include https://editor-beta.waze.com/*/editor/*
  10. // @namespace https://greasyfork.org/en/scripts/23202-wme-tts-test
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. function TTStest_bootstrap()
  15. {
  16. Waze.selectionManager.events.register("selectionchanged", null, addBtns);
  17. }
  18.  
  19. function addBtns()
  20. {
  21. if(!document.getElementById("WME-test-tts"))
  22. {
  23. var btnSection = document.createElement('div');
  24. btnSection.id = "WME-test-tts";
  25. var userTabs = document.getElementById('edit-panel');
  26. var navTabs = getElementsByClassName('nav-tabs', userTabs)[0];
  27. if (typeof navTabs !== "undefined")
  28. {
  29. var tabContent = getElementsByClassName('tab-content', userTabs)[0];
  30.  
  31. if (typeof tabContent !== "undefined")
  32. {
  33. newtab = document.createElement('li');
  34. newtab.innerHTML = '<a href="#WME-test-tts" id="wmettstest" data-toggle="tab">TTS</a>';
  35. navTabs.appendChild(newtab);
  36.  
  37. var class_style_turn = 'class="btn btn-default" style="font-size:18px; width:40px; padding:0px; background-color: #4CC600;" ';
  38. var class_style_keep = 'class="btn btn-default" style="font-size:18px; width:40px; padding:0px; background-color: #CBFF84;" ';
  39. var class_style_exit = 'class="btn btn-default" style="font-size:18px; width:40px; padding:0px; background-color: #6CB5FF;" ';
  40. var class_style_roundabout = 'class="btn btn-default" style="font-size:24px; width:40px; padding:0px;" ';
  41.  
  42. btnSection.innerHTML = /*'<hr>'+*/
  43. '<div class="form-group">'+
  44. '<div class="controls-container">' +
  45. '<label class="control-label">Поверните...</label>' +
  46. '<button id="wmettsTL" '+class_style_turn+' title="Поверните налево">←</button>&nbsp;' +
  47. '<button id="wmettsTR" '+class_style_turn+' title="Поверните направо">→</button>&nbsp;' +
  48. '</br></br>' +
  49. '<label class="control-label">Держитесь...</label>' +
  50. '<button id="wmettsKL" '+class_style_keep+' title="Держитесь левее">↖</button>&nbsp;' +
  51. '<button id="wmettsKR" '+class_style_keep+' title="Держитесь правее">↗</button>&nbsp;' +
  52. '</br></br>' +
  53. '<label class="control-label">Съезд...</label>' +
  54. '<button id="wmettsEL" '+class_style_exit+' title="Съезд слева на">↖</button>&nbsp;' +
  55. '<button id="wmettsER" '+class_style_exit+' title="Съезд справа на">↗</button>&nbsp;' +
  56. '</br></br>' +
  57. '<label class="control-label">Съезд на кольце...</label>' +
  58. '<button id="wmettsRND" '+class_style_roundabout+' title="На кольце первый съезд на">☼</button>&nbsp;' +
  59. '</div></div>';
  60.  
  61. btnSection.className = "tab-pane";
  62. tabContent.appendChild(btnSection);
  63. }
  64. else
  65. btnSection.id='';
  66. }
  67. else
  68. btnSection.id='';
  69. }
  70.  
  71. document.getElementById('wmettsTL').onclick = playTTS;
  72. document.getElementById('wmettsTR').onclick = playTTS;
  73. document.getElementById('wmettsKL').onclick = playTTS;
  74. document.getElementById('wmettsKR').onclick = playTTS;
  75. document.getElementById('wmettsEL').onclick = playTTS;
  76. document.getElementById('wmettsER').onclick = playTTS;
  77. document.getElementById('wmettsRND').onclick = playTTS;
  78. }
  79.  
  80. function playTTS()
  81. {
  82. if (Waze.selectionManager.selectedItems.length != 1)
  83. {
  84. alert('Выберите только один сегмент');
  85. return;
  86. }
  87.  
  88. var street = Waze.model.streets.get(Waze.selectionManager.selectedItems[0].model.attributes.primaryStreetID);
  89. if (typeof street !== "undefined")
  90. {
  91. streetname=street.name;
  92. if (street.name === null)
  93. {
  94. alert('Безымянный сегмент');
  95. return;
  96. }
  97. }
  98. else
  99. {
  100. console.log('WME_TTS undefined street');
  101. return;
  102. }
  103.  
  104. var preText = '';
  105. switch (this.id)
  106. {
  107. case 'wmettsTL':
  108. preText = 'Поверните налево на ';
  109. break;
  110. case 'wmettsTR':
  111. preText = 'Поверните направо на ';
  112. break;
  113. case 'wmettsKL':
  114. preText = 'Держитесь левее на ';
  115. break;
  116. case 'wmettsKR':
  117. preText = 'Держитесь правее на ';
  118. break;
  119. case 'wmettsEL':
  120. preText = 'Съезд слева на ';
  121. break;
  122. case 'wmettsER':
  123. preText = 'Съезд справа на ';
  124. break;
  125. case 'wmettsRND':
  126. preText = 'На кольце первый съезд на ';
  127. break;
  128. default:
  129. alert("Unknown error");
  130. }
  131.  
  132. if (preText !== '')
  133. {
  134. new Audio('https://ttsgw.world.waze.com/TTSGateway/Text2SpeechServlet?text='+preText+street.name+'&lang=ru-RU&lon=0&lat=0&version=6&protocol=2&sessionid=12345654321&content_type=audio%2Fmpeg&type=street&validate_data=positive&skipCache=true').play();
  135. }
  136. }
  137.  
  138. function getElementsByClassName(classname, node) {
  139. if(!node)
  140. node = document.getElementsByTagName("body")[0];
  141. var a = [];
  142. var re = new RegExp('\\b' + classname + '\\b');
  143. var els = node.getElementsByTagName("*");
  144. for (var i=0,j=els.length; i<j; i++)
  145. if (re.test(els[i].className)) a.push(els[i]);
  146. return a;
  147. }
  148.  
  149. TTStest_bootstrap();