lrcReader[typing-tube.net]

Add buttons to load the .lrc format file on the edit screen on typing-tube.net.

当前为 2019-10-13 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name lrcReader[typing-tube.net]
  3. // @namespace http://tampermonkey.net/lrcReader
  4. // @version 0.2
  5. // @description Add buttons to load the .lrc format file on the edit screen on typing-tube.net.
  6. // @author Spacia
  7. // @match https://typing-tube.net/movie/edit?videoid=*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11.  
  12. //This is the Entry point.
  13. (function() {
  14. 'use strict';
  15.  
  16. AddLrcReaderElements();
  17.  
  18. })();
  19.  
  20.  
  21. function AddLrcReaderElements(){
  22.  
  23. // Add a div element to be container to the bottom of the navigation menu "edit".
  24. var elDiv = document.createElement("div");
  25. elDiv.classList.add('row');
  26. elDiv.classList.add('ml-2');
  27. elDiv.classList.add('w-100');
  28. elDiv.id = "ContainerOflrcReader";
  29. var elEdit = document.getElementById("edit");
  30. elEdit.appendChild(elDiv);
  31. var elDevId = document.getElementById("ContainerOflrcReader");
  32.  
  33. // Add a button for uploading .lrc format file in container created by former code.
  34. var elTextDiv = document.createElement("div");
  35. elTextDiv.classList.add("col-2");
  36. elTextDiv.innerHTML = "lrcファイルを参照";
  37. elDevId.appendChild(elTextDiv);
  38.  
  39. var elForm = document.createElement("form");
  40. elForm.classList.add("col-6");
  41. elForm.innerHTML = "<div><input name='lrcFile' type='file' accept='.lrc'></div>";
  42. elForm.addEventListener('change', onLoadLrc);
  43. elDevId.appendChild(elForm);
  44.  
  45. // Add radio buttons to select English or Kana.
  46. var elForm2 = document.createElement("form");
  47. elForm2.classList.add("col-4");
  48. elForm2.innerHTML = "<span style='padding-right:20px;'><label><input id='lrcConverTypeKana' name='lrcConvertType' type='radio' value='kana' checked>かな </label></span><span><label><input name='lrcConvertType' type='radio' value='eng'>英語</label></span>";
  49. elDevId.appendChild(elForm2);
  50.  
  51. }
  52.  
  53.  
  54. function onLoadLrc(event){
  55. var _file = event.target.files[0];
  56. if(_file){
  57. var fr = new FileReader();
  58. fr.onload = function(e) {
  59.  
  60. // A file was loaded.
  61. GetLinesOfLyrics(fr.result.split('\n'));
  62.  
  63. }
  64. fr.readAsText(_file);
  65. }else{
  66. alert("Failed to load file formated .lrc");
  67. }
  68. }
  69.  
  70.  
  71. var isKanaMode; //load mode of kana or english
  72. function GetLinesOfLyrics(lines) {
  73.  
  74. isKanaMode = document.getElementById('lrcConverTypeKana').checked;
  75.  
  76. var i = 0;
  77. let promise = new Promise((resolve, reject) => { // #1
  78. resolve(true)
  79. })
  80.  
  81. sub(promise, lines, i);
  82. }
  83.  
  84. function sub(promise , lines, i){
  85. promise.then((msg) => { // #2
  86. msg = true;
  87. var line = lines[i++];
  88.  
  89. var time;
  90. var editedLine;
  91.  
  92. //if empty line then don't execute the rest of code.
  93. var ptnOfTimeTag = /\[\d\d:\d\d:\d\d\]/g;
  94. if(ptnOfTimeTag.test(line) == false){
  95. msg = false;
  96. }
  97.  
  98. if(msg == true){
  99. //get time for this line.
  100. var ptnOfTwoDigidTime = /\d\d/g;
  101. var timesStr = line.match(ptnOfTwoDigidTime);
  102. var minute = parseFloat(timesStr[0]);
  103. var second = parseFloat(timesStr[1]);
  104. var centiSec = parseFloat(timesStr[2]);
  105. time = minute * 60 + second + centiSec * 0.01;
  106. //console.log(time);
  107.  
  108. //get line of text.
  109. editedLine = line.replace(ptnOfTimeTag,"").trim();
  110. //console.log(editedLine);
  111.  
  112. //Add time and lineLyrics to the timeline Table in the navigation menu "edit".
  113. document.getElementById("time").value = time;
  114. document.getElementById("words").value = editedLine;
  115. }
  116. return msg;
  117. }).then((msg) => {
  118. if(msg == true){
  119. if(isKanaMode){
  120. command_kakasi();
  121. }else{
  122. command_kakasi_en();
  123. }
  124. return new Promise((resolve, reject) => {
  125. setTimeout(() => {
  126. resolve(msg)
  127. }, 1000)
  128. })
  129. }
  130. return msg;
  131. }).then((msg) => {
  132. command_add();
  133. if(msg == true){
  134. }
  135. return msg;
  136. }).then((msg) => {
  137. if(i < lines.length){
  138. sub(promise , lines, i);
  139. }
  140. return msg;
  141. });
  142. }
  143.  
  144.