NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name LNMTL - Translation Improved [ DEBUG ]
// @namespace justtesting
// @match https://lnmtl.com/chapter/*
// @grant GM_xmlhttpRequest
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @require https://userscripts-mirror.org/scripts/source/107941.user.js#sha384=Q8t880BurrlGKTdpvYv2+da12PYnvljdiU8aJvakk1uE3QMbzb190ueXNpAUY98p
// @version 1.0.1
// @author Spawner
// @license MIT
// @description 3/21/2020, 10:06:19 AM
// ==/UserScript==
/* CSS STYLES */
GM_addStyle("hgltr { color:#5352ed }");
GM_addStyle(".niut { color:white; font-size: 2.2rem; margin-bottom:42px; font-family: droidSerif }");
/* VARIABLES */
var uniqueWords = new Map();
var translationService = GM_SuperValue.get('translationService', "");
var autoNiuTransOn = GM_SuperValue.get('autoNiuTransOn' , false);
var autoShow_SOn = GM_SuperValue.get('autoShow_SOn' , false);
var autoGlow_SOn = GM_SuperValue.get('autoGlow_SOn' , false);
var isTranslated = false;
var extractRaw;
window.onload = async function ()
{
replaceRaws();
createBtnUI();
createSettings();
$( '.translated t' ).each( function ( index )
{
var value = $( this )
.attr( 'data-title', $( this ).text() )
.text()
.trimLeft();
uniqueWords.set( value, index );
} );
extractRaw = $('.original').text().trimStart().replace(/\n/g, '%0A');
var myData = [];
myData = await sendRequest(extractRaw);
createSentence( myData );
}
function sendRequest( rawText )
{
return new Promise( ( resolve ) =>
{
GM_xmlhttpRequest(
{
method : "GET",
url : "http://test.niutrans.vip/NiuTransServer/testtrans?&from=zh&to=en&src_text=" + rawText
,
onload: function ( result )
{
var myResponse = JSON.parse( result.response ).tgt_text;
//console.log( myResponse );
resolve( myResponse.split('\n') )
isTranslated = true;
}
});
});
}
function createSentence( gtpars )
{
gtpars.forEach( ( sentence, index ) =>
{
if ( autoGlow_SOn )
{
for ( const [ key, value ] of uniqueWords.entries() )
sentence = sentence.replace( new RegExp( '(\\b)(' + key + ')(\\b)', 'gi' ), '<span style="color:#52a9ff">' + key + '</span>' );
}
$( '.translated' ).eq( index ).after( "<div class='niut' tab-index=0><sentence data-index=" + index + ">" + sentence + "</sentence></div>" );
});
}
function createBtnUI()
{
$( '.js-toggle-original' ).after( '<button class="btn btn-enabled js-toggle-niut">NIUT</button>' );
$( '.btn.btn-enabled.js-toggle-niut' )[ 0 ].style.borderColor = "white";
$( '.btn.btn-enabled.js-toggle-niut' )[ 0 ].style.boxShadow = "0px 0px 20px #ecf0f1";
$( '.btn.btn-enabled.js-toggle-niut' )[ 0 ].style.color = "orange";
$( '.js-toggle-niut' ).click( function ()
{
isTranslated ? $( ".niut" ).toggle( { duration: 200 } ) : sendRequest( extractRaw );
})
.text( 'NIUT' ).addClass( 'btn-default' );
}
function createSettings()
{
let title = $( '<h3> Improved Translation Settings </h3>' );
let checked = autoNiuTransOn ? 'checked' : '';
let optionAutoswitch = $( '<sub><input id="autoNiuTransOn" type="checkbox" ' + checked + '></sub> <label for="autoNiuTransOn">Automatically display NiuTrans translation after loading the page.</label>' )
.on( 'change', function ()
{
autoNiuTransOn = $( '#autoNiuTransOn' )[ 0 ].checked;
GM_SuperValue.set( 'autoNiuTransOn', autoNiuTransOn );
});
let checked2 = autoGlow_SOn ? 'checked' : '';
let optionGlow = $( '<sub><input id="autoGlow_SOn" type="checkbox" ' + checked2 + '></sub> <label for="autoGlow_SOn">Apply the Glow word highlighter.</label>' )
.on( 'change', function ()
{
autoGlow_SOn = $( '#autoGlow_SOn' )[ 0 ].checked;
GM_SuperValue.set( 'autoGlow_SOn', autoGlow_SOn );
});
let checked3 = autoShow_SOn ? 'checked' : '';
let optionShow = $( '<sub><input id="autoShow_SOn" type="checkbox" ' + checked3 + '></sub> <label for="autoShow_SOn"><span style="color:rgb(26, 188, 156)">Show only Translation.</span></label>' )
.on( 'change', function ()
{
autoShow_SOn = $( '#autoShow_SOn' )[ 0 ].checked;
GM_SuperValue.set( 'autoShow_SOn', autoShow_SOn );
});
let row = $( '<div class="row"/>' );
$( "#chapter-display-options-modal .modal-body" )
.append( title )
.append( optionAutoswitch ).append( '<br>' )
.append( optionGlow ).append( '<br>' )
.append( optionShow ).append( '<br>' )
.append( '<span style="color:yellow">Changes apply after the page is reloaded.</span>' )
.append( row );
}
function replaceRaws()
{
$( '.original t' ).each( function ()
{
var mytext = $( this ).text();
$( this ).text( $( this ).attr( 'data-title' ).replace( /\(\w+\)/g, '' ) );
$( this ).attr( 'data-title', mytext );
});
// add whitespace between two english words
$( '.original' ).find( 't' ).filter( function ( index )
{
var prev = $( this ).get( 0 ).previousSibling;
return prev ? $( this ).get( 0 ).previousSibling.nodeName == 'T' : false;
}).each( function ()
{
$( this ).text( ' ' + $( this ).text() );
});
}