Misskey Translation Script

A Translation Script for Misskey Note | 一个用于misskey贴文的翻译脚本

当前为 2021-01-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Misskey Translation Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description A Translation Script for Misskey Note | 一个用于misskey贴文的翻译脚本
  6. // @author dogcraft
  7. // @match https://m.dogcraft.cn/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. var ApiUrl = 'https://test1-api.dogcraft.top/ts/';
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16.  
  17. console.log('Misskey Translate Script');
  18.  
  19.  
  20.  
  21. var cat = localStorage.getItem('lang');
  22. if (cat==null) {
  23. var lang_dog = navigator.language || navigator.userLanguage;
  24. } else {
  25. lang_dog=cat;
  26. }
  27.  
  28. lang_dog = navigator.language || navigator.userLanguage;//获取浏览器的语言
  29. lang_dog = lang_dog.substr(0, 2);
  30.  
  31. function dog_add_fy(eldog) {
  32. //添加翻译按钮、区域以及绑定点击事件
  33. if (eldog.fanyi == 1) {
  34. console.log('已经添加过了,重复添加。')
  35. } else {
  36. var cl = document.createElement('div');
  37. cl.className = '.clear';
  38. var cl2 = document.createElement('div');
  39. cl2.className = '.clear';
  40. var dogfy = document.createElement('span');
  41. dogfy.className = 'fanyi';
  42. dogfy.ct = 0;
  43. var dogbt = document.createElement('button');
  44. dogbt.innerText = 'Translate';
  45. dogbt.className = 'button _button';
  46. dogbt.style.backgroundColor="rgba(0,0,200,0.5)";
  47. dogbt.addEventListener('click', dog_fy);//绑定翻译函数
  48. eldog.appendChild(cl);
  49. eldog.appendChild(dogfy);
  50. eldog.appendChild(cl2);
  51. eldog.appendChild(dogbt);
  52. eldog.fanyi = 1;
  53. }
  54.  
  55. }
  56.  
  57. async function dog_fy() {
  58. //从后端获得翻译文本并写入到html中
  59. var pdog = this.parentElement;
  60. var ldog = pdog.getElementsByClassName('fanyi');
  61. if (ldog.length > 0) {
  62. var dog_fy_el = ldog[0];
  63. if (dog_fy_el.ct == 0) {
  64. var hdog = pdog.getElementsByClassName('havbbuyv')[0].innerText;
  65. var post_dog = { 'c': hdog, 't': lang_dog };
  66. dog_fy_el.innerText='Translating……';
  67. var uiy = await fetch(ApiUrl, {
  68. method: 'POST',
  69. body: JSON.stringify(post_dog),
  70. headers: new Headers({
  71. 'Content-Type': 'application/json'
  72. })
  73. });
  74. if (uiy.status == 200) {
  75. var rt = await uiy.json();
  76. var res_dog = rt.r;
  77. } else {
  78. res_dog = '接口不对劲';
  79. }
  80. dog_fy_el.innerText = `\n${res_dog}`;
  81. dog_fy_el.ct = 1
  82. this.innerText='folded';
  83.  
  84. } else {
  85. if (dog_fy_el.ct == 2) {
  86. console.log(dog_fy_el.style.display)
  87. dog_fy_el.style.display="";
  88. dog_fy_el.ct = 1;
  89. this.innerText='folded';
  90. } else if (dog_fy_el.ct == 1) {
  91. dog_fy_el.style.display="none";
  92. dog_fy_el.ct = 2;
  93. this.innerText='unfolded';
  94. }
  95. }
  96. } else {
  97. console.log('有地方不对劲');
  98. }
  99. }
  100.  
  101. var config = { attributes: false, childList: true, subtree: true };
  102. var sj = []
  103. // 当观察到突变时执行的回调函数
  104. var callback = function (mutationsList) {
  105. //console.log('doge');
  106. mutationsList.forEach(function (item, index) {
  107. if (item.type == 'childList') {
  108. for (let iy_dog = 0; iy_dog < item.addedNodes.length; iy_dog++) {
  109. const iadog = item.addedNodes[iy_dog];
  110. if (iadog.getElementsByClassName == undefined) {
  111. } else {
  112. var sld = iadog.getElementsByClassName('content');
  113. if (sld.length > 0) {
  114. var tty = sld[0].getElementsByClassName('text');
  115. if (tty.length > 0) {
  116. dog_add_fy(tty[0]);
  117. }
  118. }
  119. }
  120. }
  121. }
  122. });
  123. };
  124.  
  125.  
  126. window.onload = function () {
  127. console.log('页面加载完毕')
  128. var observer = new MutationObserver(callback);
  129. var sl = document.getElementsByClassName('article');
  130. var ar = document.getElementsByClassName("content")[0];
  131. observer.observe(ar, config);
  132. for (let si = 0; si < sl.length; si++) {
  133. const sl_dog = sl[si];
  134. dog_add_fy(sl_dog.getElementsByClassName('content')[0].getElementsByClassName('text')[0]);
  135. }
  136. }
  137. })();