Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.79 KB | None | 0 0
  1. var kana = {
  2. 'hsingle' :
  3. { 'あ': 'a', 'い': 'i', 'う': 'u', 'え': 'e', 'お': 'o'},
  4. 'hk':
  5. { 'か': 'ka', 'き': 'ki', 'く': 'ku', 'け': 'ke', 'こ': 'ko'},
  6. 'hs':
  7. { 'さ': 'sa', 'し': 'shi', 'す': 'su', 'せ': 'se', 'そ': 'so'},
  8. 'ht':
  9. { 'た': 'ta', 'ち': 'chi', 'つ': 'tsu', 'て': 'te', 'と': 'to'},
  10. 'hn':
  11. { 'な': 'na', 'に': 'ni', 'ぬ': 'nu', 'ね': 'ne', 'の': 'no'},
  12. 'hh':
  13. { 'は': 'ha', 'ひ': 'hi', 'ふ': 'fu', 'へ': 'he', 'ほ': 'ho'},
  14. 'hm':
  15. { 'ま': 'ma', 'み': 'mi', 'む': 'mu', 'め': 'me', 'も': 'mo'},
  16. 'hy':
  17. { 'や': 'ya', 'ゆ': 'yu', 'よ': 'yo'},
  18. 'hr':
  19. { 'ら': 'ra', 'り': 'ri', 'る': 'ru', 'れ': 're', 'ろ': 'ro'},
  20. 'hw':
  21. { 'わ': 'wa', 'を': 'o'},
  22. 'hn1':
  23. { 'ん': 'n'},
  24. 'hg':
  25. { 'が': 'ga', 'ぎ': 'gi', 'ぐ': 'gu', 'げ': 'ge', 'ご': 'go'},
  26. 'hz':
  27. { 'ざ': 'za', 'じ': 'ji', 'ず': 'zu', 'ぜ': 'ze', 'ぞ': 'zo'},
  28. 'hd':
  29. { 'だ': 'da', 'ぢ': 'ji', 'づ': 'zu', 'で': 'de', 'ど': 'do'},
  30. 'hb':
  31. { 'ば': 'ba', 'び': 'bi', 'ぶ': 'bu', 'べ': 'be', 'ぼ': 'bo'},
  32. 'hp':
  33. { 'ぱ': 'pa', 'ぴ': 'pi', 'ぷ': 'pu', 'ぺ': 'pe', 'ぽ': 'po'},
  34.  
  35. 'hdk':
  36. { 'きゃ': 'kya', 'きゅ': 'kyu', 'きょ': 'kyo'},
  37. 'hds':
  38. { 'しゃ': 'sha', 'しゅ': 'shu', 'しょ': 'sho'},
  39. 'hdc':
  40. { 'ちゃ': 'cha', 'ちゅ': 'chu', 'ちょ': 'cho'},
  41. 'hdn':
  42. { 'にゃ': 'nya', 'にゅ': 'nyu', 'にょ': 'nyo'},
  43. 'hdh':
  44. { 'ひゃ': 'hya', 'ひゅ': 'hyu', 'ひょ': 'hyo'},
  45. 'hdm':
  46. { 'みゃ': 'mya', 'みゅ': 'myu', 'みょ': 'myo'},
  47. 'hdr':
  48. { 'りゃ': 'rya', 'りゅ': 'ryu', 'りょ': 'ryo'},
  49. 'hdg':
  50. { 'ぎゃ': 'gya', 'ぎゅ': 'gyu', 'ぎょ': 'gyo'},
  51. 'hdj':
  52. { 'じゃ': 'ja', 'じゅ': 'ju', 'じょ': 'jo'},
  53. 'hdj2':
  54. { 'ぢゃ': 'ja', 'ぢゅ': 'ju', 'ぢょ': 'jo'},
  55. 'hdb':
  56. { 'びゃ': 'bya', 'びゅ': 'byu', 'びょ': 'byo'},
  57. 'hdp':
  58. { 'ぴゃ': 'pya', 'ぴゅ': 'pyu', 'ぴょ': 'pyo'},
  59.  
  60.  
  61. 'ksingle' :
  62. { 'ア': 'a', 'イ': 'i', 'ウ': 'u', 'エ': 'e', 'オ': 'o'},
  63. 'kk':
  64. { 'カ': 'ka', 'キ': 'ki', 'ク': 'ku', 'ケ': 'ke', 'コ': 'ko'},
  65. 'ks':
  66. { 'サ': 'sa', 'シ': 'shi', 'ス': 'su', 'セ': 'se', 'ソ': 'so'},
  67. 'kt':
  68. { 'タ': 'ta', 'チ': 'chi', 'ツ': 'tsu', 'テ': 'te', 'ト': 'to'},
  69. 'kn':
  70. { 'ナ': 'na', 'ニ': 'ni', 'ヌ': 'nu', 'ネ': 'ne', 'ノ': 'no'},
  71. 'kh':
  72. { 'ハ': 'ha', 'ヒ': 'hi', 'フ': 'fu', 'ヘ': 'he', 'ホ': 'ho'},
  73. 'km':
  74. { 'マ': 'ma', 'ミ': 'mi', 'ム': 'mu', 'メ': 'me', 'モ': 'mo'},
  75. 'ky':
  76. { 'ヤ': 'ya', 'ユ': 'yu', 'ヨ': 'yo'},
  77. 'kr':
  78. { 'ラ': 'ra', 'リ': 'ri', 'ル': 'ru', 'レ': 're', 'ロ': 'ro'},
  79. 'kw':
  80. { 'ワ': 'wa', 'ヲ': 'o'},
  81. 'kn1':
  82. { 'ン': 'n'},
  83. 'kg':
  84. { 'ガ': 'ga', 'ギ': 'gi', 'グ': 'gu', 'ゲ': 'ge', 'ゴ': 'go'},
  85. 'kz':
  86. { 'ザ': 'za', 'ジ': 'ji', 'ズ': 'zu', 'ゼ': 'ze', 'ゾ': 'zo'},
  87. 'kd':
  88. { 'ダ': 'da', 'ヂ': 'ji', 'ヅ': 'zu', 'デ': 'de', 'ド': 'do'},
  89. 'kb':
  90. { 'バ': 'ba', 'ビ': 'bi', 'ブ': 'bu', 'ベ': 'be', 'ボ': 'bo'},
  91. 'kp':
  92. { 'パ': 'pa', 'ピ': 'pi', 'プ': 'pu', 'ペ': 'pe', 'ポ': 'po'},
  93.  
  94. 'kdk':
  95. { 'キャ': 'kya', 'キュ': 'kyu', 'キョ': 'kyo'},
  96. 'kds':
  97. { 'シャ': 'sha', 'シュ': 'shu', 'ショ': 'sho'},
  98. 'kdc':
  99. { 'チャ': 'cha', 'チュ': 'chu', 'チョ': 'cho'},
  100. 'kdn':
  101. { 'ニャ': 'nya', 'ニュ': 'nyu', 'ニョ': 'nyo'},
  102. 'kdh':
  103. { 'ヒャ': 'hya', 'ヒュ': 'hyu', 'ヒョ': 'hyo'},
  104. 'kdm':
  105. { 'ミャ': 'mya', 'ミュ': 'myu', 'ミョ': 'myo'},
  106. 'kdr':
  107. { 'リャ': 'rya', 'リュ': 'ryu', 'リョ': 'ryo'},
  108. 'kdg':
  109. { 'ギャ': 'gya', 'ギュ': 'gyu', 'ギョ': 'gyo'},
  110. 'kdj':
  111. { 'ジャ': 'ja', 'ジュ': 'ju', 'ジョ': 'jo'},
  112. 'kdj2':
  113. { 'ヂャ': 'ja', 'ヂュ': 'ju', 'ヂョ': 'jo'},
  114. 'kdb':
  115. { 'ビャ': 'bya', 'ビュ': 'byu', 'ビョ': 'byo'},
  116. 'kdp':
  117. { 'ピャ': 'pya', 'ピュ': 'pyu', 'ピョ': 'pyo'},
  118. }
  119.  
  120. var show_tools = ['あ', 'い', 'う', 'え', 'お', 'か', 'き', 'く', 'け', 'こ', 'さ', 'し', 'す', 'せ', 'そ', 'た', 'ち', 'つ', 'て', 'と', 'な', 'に', 'ぬ', 'ね', 'の', 'は', 'ひ', 'ふ', 'へ', 'ほ', 'ま', 'み', 'む', 'め', 'も', 'や', 'ゆ', 'よ', 'ら', 'り', 'る', 'れ', 'ろ', 'わ', 'を', 'ん', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ヲ', 'ン'];
  121.  
  122. var replacements = {
  123. 'o': ['wo'],
  124. 'chi': ['ci'],
  125. 'shi': ['si'],
  126. 'tsu': ['tu'],
  127. 'zu': ['du'],
  128. 'ji': ['di', 'zi'],
  129. 'fu': ['hu'],
  130. 'ja': ['dya'],
  131. 'jo': ['dyo'],
  132. 'ju': ['dyu']
  133. };
  134.  
  135. var active = [];
  136. var shuffled = [];
  137. var fonts = [];
  138.  
  139. var cur_kana;
  140. var cur_reading;
  141.  
  142. var total_answered = 0;
  143. var total_correct = 0;
  144.  
  145. function save_settings() {
  146. inputs = document.getElementsByTagName('input');
  147. for (i = 0; i < inputs.length; i++) {
  148. if (inputs[i].type == 'checkbox') {
  149. checked = inputs[i].checked ? '1' : '0';
  150. localStorage.setItem('kana_' + inputs[i].id, checked);
  151. }
  152. }
  153.  
  154. collect();
  155. }
  156.  
  157. function load_settings() {
  158. inputs = document.getElementsByTagName('input');
  159. for (i = 0; i < inputs.length; i++) {
  160. if (inputs[i].type == 'checkbox') {
  161. var setting = localStorage.getItem('kana_' + inputs[i].id);
  162. if(setting === '1') {
  163. inputs[i].checked = true;
  164. } else if(setting === '0') {
  165. inputs[i].checked = false;
  166. }
  167. }
  168. }
  169.  
  170. collect();
  171. }
  172.  
  173. function check(set) {
  174. var trs = document.getElementsByClassName(set);
  175. for (i = 0; i < trs.length; i++) {
  176. var tds = trs[i].children;
  177. for (x = 0; x < tds.length; x++) {
  178. if(tds[x].children[0].id != 'KOI-WIN') {
  179. tds[x].children[0].checked = true;
  180. }
  181. }
  182. }
  183. save_settings();
  184. }
  185.  
  186. function uncheck(set) {
  187. var trs = document.getElementsByClassName(set);
  188. for (i = 0; i < trs.length; i++) {
  189. var tds = trs[i].children;
  190. for (x = 0; x < tds.length; x++) {
  191. tds[x].children[0].checked = false;
  192. }
  193. }
  194. save_settings();
  195. }
  196.  
  197. function shuffle(orig_array) {
  198. var array = orig_array.slice(0);
  199. var currentIndex = array.length, temporaryValue, randomIndex;
  200.  
  201. while (0 !== currentIndex) {
  202.  
  203. randomIndex = Math.floor(Math.random() * currentIndex);
  204. currentIndex -= 1;
  205.  
  206. temporaryValue = array[currentIndex];
  207. array[currentIndex] = array[randomIndex];
  208. array[randomIndex] = temporaryValue;
  209. }
  210.  
  211. return array;
  212. }
  213.  
  214. function collect() {
  215. kanacheck = document.getElementsByClassName('kanacheck');
  216. active = [];
  217. shuffled = [];
  218. for (i = 0; i < kanacheck.length; i++) {
  219. cur = kanacheck[i];
  220. if(cur.checked == true) {
  221. for (p in kana[cur.id]) {
  222. active.push( [p, kana[cur.id][p]] );
  223. }
  224. }
  225. }
  226.  
  227. fonts = [];
  228. fontcheck = document.getElementsByClassName('fontcheck');
  229. for (i = 0; i < fontcheck.length; i++) {
  230. if(fontcheck[i].checked == true) {
  231. fonts.push(fontcheck[i].id);
  232. }
  233. }
  234. }
  235.  
  236. function show_kana() {
  237. wrong = false;
  238. document.getElementById('input_box').value = '';
  239.  
  240. if(active.length == 0) {
  241. document.getElementById('hsingle').checked = true;
  242. save_settings();
  243. }
  244.  
  245. if(fonts.length == 0) {
  246. document.getElementById('default').checked = true;
  247. save_settings();
  248. }
  249.  
  250. if(total_answered > 0) {
  251. document.getElementById('count').innerHTML = total_correct + '/' + total_answered;
  252. document.getElementById('message').innerHTML = '&nbsp;';
  253. }
  254.  
  255. if(shuffled.length == 0) {
  256. shuffled = shuffle(active);
  257. }
  258.  
  259. if(cur_kana && shuffled[0][0] == cur_kana) {
  260. shuffled.shift();
  261. }
  262.  
  263. cur_kana = shuffled[0][0];
  264. cur_reading = shuffled[0][1];
  265.  
  266. shuffled.shift();
  267.  
  268. var font = fonts[Math.floor(Math.random()*fonts.length)];
  269.  
  270. if(font == 'default') {
  271. document.getElementById('kana').innerHTML = cur_kana;
  272. } else {
  273. document.getElementById('kana').innerHTML = '<img class="inverse" src="kana/fonts/' + font + '/' + cur_kana + '.png" />';
  274. }
  275. document.getElementById('answer').innerHTML = cur_reading;
  276.  
  277. if(show_tools.indexOf(cur_kana) == -1) {
  278. document.getElementById('tool_stroke').style.visibility = 'hidden';
  279. } else {
  280. document.getElementById('tool_stroke').style.visibility = 'visible';
  281. }
  282. }
  283.  
  284. function check_answer() {
  285. answer = document.getElementById('input_box').value.toLowerCase();
  286. if(! answer) {
  287. answer = 'x';
  288. }
  289.  
  290. chars = answer.split('');
  291.  
  292. possible = [cur_reading];
  293. if(cur_reading in replacements) {
  294. possible = possible.concat(replacements[cur_reading]);
  295. }
  296.  
  297. for (i = 0; i < chars.length; i++) {
  298. var err = true;
  299.  
  300. for (x = 0; x < possible.length; x++) {
  301. if(chars[i] == possible[x].charAt(i)) {
  302. err = false;
  303. }
  304. if(answer == possible[x]) {
  305. answer = cur_reading;
  306. }
  307. }
  308.  
  309. if(err) {
  310. break;
  311. }
  312. }
  313.  
  314. if(err) {
  315. wrong = true;
  316. document.getElementById('message').innerHTML = '<span id="wrong">' + cur_kana + ' = ' + cur_reading + '</span>';
  317. }
  318.  
  319. if(answer == cur_reading) {
  320. total_answered += 1;
  321. if( ! wrong) {
  322. total_correct += 1;
  323. }
  324. show_kana();
  325. }
  326. }
  327.  
  328. function force_next() {
  329. if(shuffled.length > 3) {
  330. shuffled.splice(3, 0, [cur_kana, cur_reading]);
  331. }
  332. if(shuffled.length > 13) {
  333. shuffled.splice(13, 0, [cur_kana, cur_reading]);
  334. }
  335. total_answered += 1;
  336.  
  337. show_kana();
  338. }
  339.  
  340. function show_answer() {
  341. document.getElementById('answer').style.visibility = 'visible';
  342. }
  343.  
  344. function hide_answer() {
  345. document.getElementById('answer').style.visibility = 'hidden';
  346. }
  347.  
  348. function play_sound() {
  349. var audio = new Audio('kana/audio/' + cur_reading + '.mp3');
  350. audio.play();
  351. document.getElementById('input_box').focus();
  352. }
  353.  
  354. function play_other(file) {
  355. var audio = new Audio('kana/audio/' + file + '.mp3');
  356. audio.play();
  357. }
  358.  
  359. function stroke_order() {
  360. document.getElementById('kana').innerHTML = '<img src="/kana/stroke/' + cur_kana + '.gif" id="stroke" />';
  361. document.getElementById('input_box').focus();
  362. }
  363.  
  364.  
  365. onload = function () {
  366. load_settings();
  367.  
  368. inputs = document.getElementsByTagName('input');
  369. for (i = 0; i < inputs.length; i++) {
  370. if (inputs[i].type == 'checkbox') {
  371. inputs[i].onclick = save_settings;
  372. inputs[i].onpropertychange = inputs[i].oninput;
  373. }
  374. }
  375.  
  376. show_kana();
  377.  
  378. document.getElementById('tool_sound').onclick = play_sound;
  379. document.getElementById('tool_stroke').onclick = stroke_order;
  380.  
  381. var kana_div = document.getElementById('kana');
  382. kana_div.onmouseover = show_answer;
  383. kana_div.onmouseout = hide_answer;
  384.  
  385. var answer_input = document.getElementById('input_box');
  386. answer_input.focus();
  387. answer_input.oninput = check_answer;
  388. answer_input.onpropertychange = answer_input.oninput;
  389.  
  390. document.body.onkeydown = function(e){
  391. document.getElementById('input_box').focus();
  392. if(e.keyCode == 32 || e.keyCode == 13){
  393. e.preventDefault();
  394. if( ! wrong) {
  395. check_answer();
  396. } else {
  397. force_next();
  398. }
  399. }
  400. }
  401. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement