// ==UserScript== // @name DeepL翻译记录同步至notion // @namespace http://tampermonkey.net/ // @version 1.0 // @description 脚本将三秒内未变化的原始文本和翻译文本提交至服务器,由服务器上传至notion // @author You // @match https://www.deepl.com/* // @icon https://static.deepl.com/img/logo/DeepL_Logo_darkBlue_v2.svg // @grant GM_xmlhttpRequest // @license MIT // @downloadURL none // ==/UserScript== (function() { 'use strict'; let host = 'enter your ip:port' // Your code here... //提示信息 封装 function Toast(msg,duration){ // console.log('66666') duration=isNaN(duration)?3000:duration; var m = document.createElement('div'); m.innerHTML = msg; m.style.cssText="font-size: .45rem;color: rgb(255, 255, 255);background-color: rgba(48,111,112, 0.8);padding: 10px 15px;margin: 0 0 0 -60px;border-radius: 4px;position: fixed; top: 45%;left: 50%;width: 180px;text-align: center;"; //document.body.appendChild(m); m.setAttribute("class","text-sm font-semibold text-white") let card = document.getElementsByClassName('lmt__sides_container')[0] card.appendChild(m); setTimeout(function() { var d = 0.5; m.style.opacity = '0'; setTimeout(function() { card.removeChild(m) }, d*1000); }, duration); } function SaveToRomote(text, translation, tags){ console.log('上传成功!'); console.log('save tags', tags); tags = JSON.stringify(tags) GM_xmlhttpRequest({ method: 'POST', url: `http://${host}`, data: `text=${text}&translation=${translation}&tags=${tags}`, onload: response => { console.log(response); Toast('翻译记录自动保存成功~'); console.log('保存成功')} }); } let tags = [] function GetAllTags(){ GM_xmlhttpRequest({ method: 'GET', url: `http://${host}/tags`, responseType: 'json', timeout: 6000, onload: response => { tags = response.response.data; Toast('获取notion标签成功~'); AddTagSelectToPage();} }); } let flag = true function AddTagSelectToPage(){ if(JSON.stringify($('#headlessui-tabs-tab-3')) != '{}'){ return } console.log('tags', tags); let tagCheckStr = '
'; for(let i = 0; i < tags.length; i++) { let tag = tags[i] let margin = i == 0 ? '' : "'margin-left: 5px !important'" tagCheckStr += `` } tagCheckStr += `` tagCheckStr += '
' var $btn = ` ` let tabbar = $('.flex.flex-row') //console.log('tabbar', tabbar) if(typeof(tabbar) == undefined) { return } flag = false tabbar.append($btn); $("#add_tag_checkbox").change(function(){ let checkbox = document.getElementById('add_tag_checkbox'); console.log('check', checkbox) if(checkbox.checked) { //console.log('123') $('#add_tag_input').css('border', '2px solid lightblue') $('#add_tag_input').removeAttr("disabled"); } else { //console.log('456') $('#add_tag_input').css('border', '2px solid gray') $('#add_tag_input').attr("disabled","disabled"); } }) // console.log(tabbar); //$('.gap-[10px]').append(btn) //$('.gap-[10px]').append('123456') //console.log($('.gap-[10px]')) } function GetSelectTags(){ if(JSON.stringify($('#headlessui-tabs-tab-3')) == '{}'){ Toast('获取notion标签失败,正在重试') GetAllTags(); return } let checkboxes = $('#tagcheckbox')[0] console.log(checkboxes) let selected = [] for(let i = 0; i < checkboxes.length - 2; i++) { let item = checkboxes[i] if(item.checked){ selected.push(item.name) } } let n = checkboxes.length; console.log(checkboxes) if(checkboxes[n - 2].checked) { selected.push(checkboxes[n - 1].value); } return selected } let my_text = ''; let cnt = 3; let saved_set = new Set(); let show_start = true let last = ''; let init = ''; console.log('DeepL translator logs auto save script start'); Toast('翻译记录保存脚本启动~') GetAllTags(); //let interval_tags = setInterval(AddTagSelectToPage, 2000); //AddTagSelectToPage(); setInterval(function () { // 根据xpath获取文本框的值 //let text = document.evaluate("/html/body/div[4]/main/div[6]/div[1]/div[2]/section[1]/div[3]/div[2]/d-textarea/div/p", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML; let text = $('#source-dummydiv').text().trim(); let translation = $('#target-dummydiv').text().trim(); //console.log('text', typeof(text), text.length, text); //console.log('translation', typeof(translation), translation.length, translation); let r = {'text': text, 'translation':translation}; let rs = JSON.stringify(r) if(text.length == 0 || translation.length == 0) { return } if(init == ''){ init = rs; last = rs; } if(rs == init) { return } init = '-1'; if (last != rs) { cnt = 3; last = rs; } else { cnt -= 1; if(cnt == 0) { cnt = 3; if(!saved_set.has(rs)) { saved_set.add(rs) //console.log('new string', text); //let translation = document.evaluate("/html/body/div[4]/main/div[6]/div[1]/div[2]/section[2]/div[3]/div[1]/d-textarea/div/p", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.innerHTML; Toast('翻译记录已自动上传~') let select_tags = GetSelectTags(); //console.log('selected', select_tags) SaveToRomote(text, translation, select_tags); //Toast('翻译记录已保存~') } else { console.log('chongfu', text, translation); } } } }, 1000); })();