Misskey Translation Script

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

当前为 2021-12-04 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Misskey Translation Script
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.5
  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.  
  14. (function () {
  15. 'use strict';
  16.  
  17.  
  18. console.log('Misskey Translate Script v1.3');
  19. var vdog = localStorage.getItem('v');
  20.  
  21.  
  22.  
  23. var cat = localStorage.getItem('lang');
  24. if (cat == null) {
  25. var lang_dog = navigator.language || navigator.userLanguage;
  26. } else {
  27. lang_dog = cat;
  28. }
  29.  
  30. lang_dog = navigator.language || navigator.userLanguage;//获取浏览器的语言
  31. lang_dog = lang_dog.substr(0, 2);
  32.  
  33. function dog_add_fy(eldog) {
  34. //添加翻译按钮、区域以及绑定点击事件
  35. if (eldog.fanyi == 1) {
  36. console.log('已经添加过了,重复添加。')
  37. } else {
  38. var cl = document.createElement('div');
  39. cl.className = '.clear';
  40. var cl2 = document.createElement('div');
  41. cl2.className = '.clear';
  42. var dogfy = document.createElement('span');
  43. dogfy.className = 'fanyi';
  44. dogfy.ct = 0;
  45. var dogbt = document.createElement('button');
  46. dogbt.innerText = 'Translate';
  47. dogbt.className = 'button _button';
  48. dogbt.style.backgroundColor = "rgba(0,0,200,0.5)";
  49. dogbt.addEventListener('click', dog_fy);//绑定翻译函数
  50. eldog.appendChild(cl);
  51. eldog.appendChild(dogfy);
  52. eldog.appendChild(cl2);
  53. eldog.appendChild(dogbt);
  54. eldog.fanyi = 1;
  55. }
  56.  
  57. }
  58.  
  59. async function dog_fy() {
  60. //从后端获得翻译文本并写入到html中
  61. var pdog = this.parentElement;
  62. var ldog = pdog.getElementsByClassName('fanyi');
  63. if (ldog.length > 0) {
  64. var dog_fy_el = ldog[0];
  65. if (dog_fy_el.ct == 0) {
  66. var hdog = pdog.getElementsByClassName('havbbuyv')[0].innerText;
  67. var post_dog = { 'c': hdog, 't': lang_dog };
  68. dog_fy_el.innerText = 'Translating……';
  69. var uiy = await fetch(ApiUrl, {
  70. method: 'POST',
  71. body: JSON.stringify(post_dog),
  72. headers: new Headers({
  73. 'Content-Type': 'application/json'
  74. })
  75. });
  76. if (uiy.status == 200) {
  77. var rt = await uiy.json();
  78. var res_dog = rt.r;
  79. } else {
  80. res_dog = '接口不对劲';
  81. }
  82. dog_fy_el.innerText = `\n${res_dog}`;
  83. dog_fy_el.ct = 1
  84. this.innerText = 'folded';
  85.  
  86. } else {
  87. if (dog_fy_el.ct == 2) {
  88. console.log(dog_fy_el.style.display)
  89. dog_fy_el.style.display = "";
  90. dog_fy_el.ct = 1;
  91. this.innerText = 'folded';
  92. } else if (dog_fy_el.ct == 1) {
  93. dog_fy_el.style.display = "none";
  94. dog_fy_el.ct = 2;
  95. this.innerText = 'unfolded';
  96. }
  97. }
  98. } else {
  99. console.log('有地方不对劲');
  100. }
  101. }
  102.  
  103. var config = { attributes: false, childList: true, subtree: true };
  104. var sj = []
  105. // 当观察到突变时执行的回调函数
  106. var callback = function (mutationsList) {
  107. mutationsList.forEach(function (item, index) {
  108. if (item.type == 'childList') {
  109. for (let iy_dog = 0; iy_dog < item.addedNodes.length; iy_dog++) {
  110. const iadog = item.addedNodes[iy_dog];
  111. if (iadog.getElementsByClassName == undefined) {
  112. } else {
  113. sld = iadog.getElementsByClassName('content');
  114. if (sld.length > 0) {
  115. for (let ct_dog = 0; ct_dog < sld.length; ct_dog++) {
  116. const sdldog = sld[ct_dog];
  117. tty = sdldog.getElementsByClassName('text');
  118. if (tty.length > 0) {
  119. dog_add_fy(tty[0]);
  120. }
  121. }
  122. }
  123. }
  124. }
  125. }
  126. });
  127. };
  128.  
  129.  
  130. function getar() {
  131. var dogui = localStorage.getItem('ui');
  132. if (dogui == null) {
  133. localStorage.setItem("ui", "default");
  134. dogui = "default";
  135. }
  136. if (vdog >= "10.98.0") {
  137. var ar = document.getElementsByClassName("dkgtipfy")[0];
  138. }
  139. else if (vdog >= "12.76.0") {
  140. if (dogui == 'chat') {
  141. var ar = document.getElementsByClassName("main")[0];
  142. } else if (dogui == 'pope') {
  143. var ar = document.getElementsByClassName("content")[0];
  144. }
  145. else {
  146. var ar = document.getElementsByClassName("main")[0];
  147. }
  148. }
  149. else {
  150. var ar = (dogui == 'chat') ? document.getElementsByClassName("main")[0] : document.getElementsByClassName("content")[0];
  151. }
  152. if (ar == null) {
  153. console.log("没找到,等一秒");
  154. setTimeout(getar, 1000);
  155. return null;
  156. }
  157. else {
  158. for (let si = 0; si < sl.length; si++) {
  159. const sl_dog = sl[si];
  160. dog_add_fy(sl_dog.getElementsByClassName('main')[0].getElementsByClassName('text')[0]);
  161. }
  162. console.log("找到了");
  163. var observer = new MutationObserver(callback);
  164. observer.observe(ar, config);
  165. return "dog"
  166. }
  167. }
  168.  
  169.  
  170. window.onload = function () {
  171. console.log('页面加载完毕');
  172. sl = document.getElementsByClassName('article');
  173. getar();
  174. }
  175.  
  176. })();