Greasy Fork

Greasy Fork is available in English.

轻小说阅读器

修改自pppploi8的通用阅读器,为“真白萌”和“哔哩轻小说”提供阅读模式

当前为 2024-07-20 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         轻小说阅读器
// @version      0.2.8
// @description  修改自pppploi8的通用阅读器,为“真白萌”和“哔哩轻小说”提供阅读模式
// @require https://update.greasyfork.icu/scripts/430421/1225835/%E4%B8%AD%E6%96%87%E7%B9%81%E4%BD%93%E7%AE%80%E4%BD%93%E8%BD%AC%E5%8C%96%E5%BA%93.js
// @author       Y_C_Z
// @match        https://masiro.me/*
// @match        https://www.linovelib.com/*
// @match        https://www.bilinovel.com/*
// @grant        none
// @namespace http://greasyfork.icu/users/1335970
// ==/UserScript==
(function() {
    var $ = function(selector){
        return document.querySelector(selector);
    }

    var blackList = {"masiro.me": true,"www.linovelib.com": true,"www.bilinovel.com": true};

    // 通用解析模板
    function parseContentAndTitle(){
        var mainDom = null;

        function findMainDom(doms){
            for(var i=0;i<doms.length;i++){
                var dom = doms[i];
                if (dom.classList.contains("nvl-content") || dom.classList.contains("read-content") || dom.classList.contains("bcontent")){//真白萌||哔哩轻小说PC||哔哩轻小说手机端
                    mainDom = dom;
                }
                findMainDom(dom.children||[]);
            }
        }
        findMainDom(document.body.children);
        var newTitle = '';
        var title = document.title;
        var textToRemove1 = "真白萌 | ";
        var textToRemove2 = " _哔哩轻小说";

        title = title.replace(textToRemove1, "").replace(textToRemove2, "");
        switch (location.host){
            case 'www.bilinovel.com':
                var atitle = document.querySelector('.atitle');
                if (atitle) {
                    newTitle = atitle.textContent;
                } else {
                    newTitle = title;
                }
                break;
            default:
                // 选择“哔哩轻小说PC”中id为"mlfy_main_text"的元素
                var mlfyMainTextElement = document.querySelector("#mlfy_main_text");
                if (mlfyMainTextElement) {
                    // 获取第一个<h1>元素
                    var firstH1Element = mlfyMainTextElement.querySelector("h1");
                    if (firstH1Element) {
                        newTitle = firstH1Element.textContent;
                    } else {
                        newTitle = title;
                    }
                } else {
                    newTitle = title;
                }
                break;
        }


        if (mainDom){
            return {content: mainDom.innerText, title: newTitle};
        }
    }

    function parsePageUp(){
        var reg, text;
        var href = "";
        var i = 0;
        var as = document.querySelectorAll('a');
        switch (location.host){
            case 'www.bilinovel.com':
                return ReadParams.url_previous;
                break;
            default:
                reg = /上一章|上一篇|上一页|上一话|navigation-prev/;
                for(i=0;i<as.length;i++){
                    text = as[i].outerHTML;
                    href = (as[i].attributes.href && as[i].attributes.href.value) || (as[i].dataset && as[i].dataset.url);
                    if (text && reg.test(text.trim()) && href && href != "#" && href.indexOf("javascript:") !== 0){
                        return href;
                    }
                }
                break;
        }
    }

    function parsePageDown(){
        var reg, text;
        var href = "";
        var i = 0;
        var as = document.querySelectorAll('a');
        switch (location.host){
            case 'www.bilinovel.com':
                return ReadParams.url_next;
                break;
            default:
                reg = /下一章|下一篇|下一页|下一话|navigation-next/;
                for(i=0;i<as.length;i++){
                    text = as[i].outerHTML;
                    href = (as[i].attributes.href && as[i].attributes.href.value) || (as[i].dataset && as[i].dataset.url);
                    if (text && reg.test(text.trim()) && href && href != "#" && href.indexOf("javascript:") !== 0){
                        return href;
                    }
                }
                break;
        }
    }

    function parsePageIndex(){
        var as = document.querySelectorAll('a');
        var reg = /目录/;
        switch (location.host){
            case 'www.bilinovel.com':
                return ReadParams.url_index;
                break;
            default:
                for(var i=0;i<as.length;i++){
                    var text = as[i].innerText;
                    var href = as[i].attributes.href && as[i].attributes.href.value;
                    if (text && text.length <= 10 && reg.test(text.trim()) && href && href != "#" && href.indexOf("javascript:") !== 0){
                        return href;
                    }
                }
                break;
        }
    }


    var fontsize = parseInt(localStorage["_er_fontsize"] || 0);
    var padding = parseInt(localStorage["_er_padding"] || 10);
    var autoplay = false;
    if (localStorage['_er-autoplay'] === 'true'){
        autoplay = true;
    }
    delete localStorage['_er-autoplay'];

    if (top.window !== window) return; // iframe内的网页不展示按钮,也不支持进入阅读模式
    if (localStorage['_er-enable'] === 'true'){
        localStorage['_er-enable'] = 'false';
        checkAndCreateReader(true);
    } else if (blackList[location.host] == true){
        // 创建阅读模式悬浮按钮
        $('body').children[0].insertAdjacentHTML('beforeBegin', '<button id="_er-entryReadMode" style="' +
            '    position: fixed;' +
            '    right: 50px;' +
            '    bottom: 50px;' +
            '    background-color: rgba(255,255,255,0.5);' +
            '    backdrop-filter: blur(1px);' +
            '    border: 0px solid black;' +
            '    border-radius: 10px;' +
            '    box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);' +
            '    padding: 0 5px;' +
            '    height: 50px;' +
            '    overflow: auto;' +
            '    z-index: 201901272210;">进入阅读模式</button>');
        $('#_er-entryReadMode').onclick = checkAndCreateReader;
        $('#_er-NotShowReadMode').onclick = function(){
            localStorage['_er-disabled'] = 'true';
            $('#_er-entryReadMode').remove();
            $('#_er-NotShowReadMode').remove();
        }
    }

    function checkAndCreateReader(notAlert){
        // 通过调用通用模板尝试是否能够成功匹配到阅读内容
        var content = parseContentAndTitle();
        if (content && content.content){
            content.pageup = parsePageUp();
            content.pagedown = parsePageDown();
            content.pageindex = parsePageIndex();
            createReader(content);
        }else{
            if (notAlert !== true){
                alert('当前页面解析失败,无法进入阅读模式!');
            }
        }
    }

    function setTheme(theme) {
        switch(theme) {
            case 'black':
                $('._er').style.backgroundColor = 'black';
                $('._er-title').style.color = 'lightgrey';
                $('._er-content').style.color = 'lightgrey';
                document.querySelectorAll('.buttonBottom').forEach(function(element) {
                    element.style.color = 'lightgrey';
                    element.style.border = '0.5px solid lightgrey';
                });
                document.querySelectorAll('.buttonTop').forEach(function(element) {
                    element.style.color = 'lightgrey';
                });
                document.querySelectorAll('.exit').forEach(function(element) {
                    element.style.setProperty('box-shadow', '0px 4px 8px rgba(255, 255, 255, 0.2)');
                    element.style.setProperty('background-color', 'rgb(59,59,59)');
                    element.style.setProperty('color', 'white');
                });
                document.querySelectorAll('.translator').forEach(function(element) {
                    element.style.setProperty('color', 'lightgrey');
                });
                break;
            case 'OliveDrab':
                $('._er').style.backgroundColor = '#D3E1D0';
                $('._er-title').style.color = 'black';
                $('._er-content').style.color = 'black';
                break;
            case 'Khaki':
                $('._er').style.backgroundColor = '#F6F2E7';
                $('._er-title').style.color = 'black';
                $('._er-content').style.color = 'black';
                break;
            case 'blue':
                $('._er').style.backgroundColor = '#D3E5F9';
                $('._er-title').style.color = 'black';
                $('._er-content').style.color = 'black';
                break;
            case 'white':
                $('._er').style.backgroundColor = 'white';
                $('._er-title').style.color = 'black';
                $('._er-content').style.color = 'black';
                document.querySelectorAll('.buttonBottom').forEach(function(element) {
                    element.style.border = '0.5px solid black';
                    element.style.color = 'black';
                });
                document.querySelectorAll('.buttonTop').forEach(function(element) {
                    element.style.border = '1px solid black';
                    element.style.color = 'black';
                });
                document.querySelectorAll('.exit').forEach(function(element) {
                    element.style.setProperty('box-shadow', '0px 4px 8px rgba(0, 0, 0, 0.2)');
                    element.style.setProperty('background-color', 'rgb(239,239,239)');
                    element.style.setProperty('color', 'black');
                });
                document.querySelectorAll('.translator').forEach(function(element) {
                    element.style.setProperty('color', 'black');
                });
                break;
        }
        localStorage['_er-theme'] = theme;
        $('._er').dataset['theme'] = theme;
    }
    function setSimplemode(simplemode, contentHtml) {//简繁切换
        switch(simplemode) {
            case 'simple':
                contentHtml = traditionalized(contentHtml);
                break;
            case 'traditional':
                contentHtml = simplized(contentHtml);
                break;
        }
        localStorage['_er-simplemode'] = simplemode;
        $('._er').dataset['simplemode'] = simplemode;
        return contentHtml;
    }

    // 创建阅读器
    function createReader(content){
        document.documentElement.style.overflow = 'hidden';
        $('#_er-entryReadMode') && $('#_er-entryReadMode').remove();
        $('#_er-NotShowReadMode') && $('#_er-NotShowReadMode').remove();
        addClassAndDom();
        if (localStorage['_er-theme']) {
            setTheme(localStorage['_er-theme']);
        }
        $('._er-title').innerText = content.title;
        var contentArr = content.content.split('\n');
        var contentHtml = '';
        for(var i=0;i<contentArr.length;i++){
            var line = contentArr[i];
            if (line){
                contentHtml += '<p style="text-indent: 2em; margin-bottom: 1em;">' + line + '</p>';
            }
        }
        $('._er-content').innerHTML = contentHtml;
        if (location.host == "masiro.me") {
            var translatorInfoElm = document.getElementById('translator-info-elm');
            var translator = translatorInfoElm.textContent.trim();
            $('.translator').innerHTML = translator;
            $('.translator').style.display = 'block';
        }
        if (localStorage['_er-simplemode']) {
            $('._er-content').innerHTML=setSimplemode(localStorage['_er-simplemode'],$('._er-content').innerHTML);
            $('._er-title').innerHTML=setSimplemode(localStorage['_er-simplemode'],$('._er-title').innerHTML);
            $('.translator').innerHTML=setSimplemode(localStorage['_er-simplemode'],$('.translator').innerHTML);
        }
        var spanNodes = document.querySelectorAll('._er-content span');
        // 挂接键盘事件,实现键盘上下左右切换阅读功能
        $('body').onkeydown = function(e){
            e.stopPropagation();
            switch(e.keyCode || e.which || e.charCode){
                case 38: // up
                    if (e.ctrlKey) {
                        $('._er').scrollTop = $('._er').scrollTop - (document.documentElement.clientHeight - 24)
                    } else {
                        toPrevReadPos();
                        updateReadPos();
                    }
                    break;
                case 40: // down
                    if (e.ctrlKey) {
                        $('._er').scrollTop = $('._er').scrollTop + (document.documentElement.clientHeight - 24);
                    } else {
                        toNextReadPos();
                        updateReadPos();
                    }
                    break;
                case 37: // left
                    if (e.ctrlKey) {
                        toPrevPage();
                    } else {
                        $('._er').scrollTop = $('._er').scrollTop - (document.documentElement.clientHeight - 24)
                    }
                    break;
                case 39: // right
                    if (e.ctrlKey) {
                        toNextPage()
                    } else {
                        $('._er').scrollTop = $('._er').scrollTop + (document.documentElement.clientHeight - 24);
                    }
                    break;
                default:
                    return true;
            }
            return false;

            function toPrevPage(){
                if (content.pageup){
                    localStorage['_er-enable'] = 'true';
                    location.href = content.pageup;
                }else{
                    alert('很抱歉,没有匹配到上一页!');
                }
            }
            function toNextPage(){
                if (content.pagedown){
                    localStorage['_er-enable'] = 'true';
                    location.href = content.pagedown;
                }else{
                    alert('很抱歉,没有匹配到下一页!');
                }
            }
        };
        $('._er-content').onclick = function(e){ // 适用于墨水屏的左右点击无动画翻页
            var x = e.pageX;
            var width = document.documentElement.clientWidth;
            if (x <= width*0.1){ // 前翻一页
                $('._er').scrollTop = $('._er').scrollTop - (document.documentElement.clientHeight - 24)
            }else if(x >= width*0.9){ // 后翻一页
                $('._er').scrollTop = $('._er').scrollTop + (document.documentElement.clientHeight - 24);
            }
        }
        var erpageindex = document.querySelectorAll('#_er-pageindex');
        for (i = 0; i < erpageindex.length; i++) {
            erpageindex[i].onclick = function() {
                if (content.pageindex) {
                    location.href = content.pageindex;
                } else {
                    alert('很抱歉,没有匹配到目录!');
                }
            };
        }
        $('#_er-switch-theme').onclick = function(){
            var current = $('._er').dataset['theme'] || 'white';
            var themeList = ['white', 'Khaki', 'blue', 'OliveDrab', 'black'];
            var index = themeList.indexOf(current);
            if (index === -1) index = 0;
            index++;
            if (index >= themeList.length) {
                index = 0;
            }
            setTheme(themeList[index]);
        }
        var pressTimer;//定时器
        var isLongPress = false; // 长按标记
        $('#_er-simplemode').addEventListener('mousedown', function() {
            pressTimer = setTimeout(function() {
                isLongPress = true;
                localStorage['_er-simplemode'] = '';
                $('._er-content').innerHTML = contentHtml;
                $('._er-title').innerText = content.title;
                if (location.host == "masiro.me") {
                    $('.translator').innerHTML = translator;
        }
            }, 500);
        });
 
        $('#_er-simplemode').addEventListener('mouseup', function() {
            clearTimeout(pressTimer);
            if (!isLongPress) {
                var current = $('._er').dataset['simplemode'] || 'traditional';
                var simplemodeList = ['simple', 'traditional'];
                var index = simplemodeList.indexOf(current);
                if (index === -1) index = 0;
                index++;
                if (index >= simplemodeList.length) {
                    index = 0;
                }
                $('._er-content').innerHTML=setSimplemode(simplemodeList[index],$('._er-content').innerHTML);
                $('.translator').innerHTML=setSimplemode(simplemodeList[index],$('.translator').innerHTML);
                $('._er-title').innerHTML=setSimplemode(simplemodeList[index],$('._er-title').innerHTML);
            } else {
                $('._er').dataset['simplemode'] = '';
                current = $('._er').dataset['simplemode'] || 'traditional';
                simplemodeList = ['simple', 'traditional'];
                index = simplemodeList.indexOf(current);;
            }
            isLongPress = false;
        });
        var erpageup = document.querySelectorAll('#_er-pageup');
        for (i = 0; i < erpageup.length; i++) {
            erpageup[i].onclick = function() {
                if (content.pageup) {
                    localStorage['_er-enable'] = 'true';
                    location.href = content.pageup;
                } else {
                    alert('很抱歉,没有匹配到上一页!');
                }
            };
        }
        var erpagedown = document.querySelectorAll('#_er-pagedown');
        for (i = 0; i < erpagedown.length; i++) {
            erpagedown[i].onclick = function() {
                if (content.pagedown) {
                    localStorage['_er-enable'] = 'true';
                    location.href = content.pagedown;
                } else {
                    alert('很抱歉,没有匹配到下一页!');
                }
            };
        }
        $('#_er-pagedown').dataset['nexturl'] = content.pagedown;
        setFontSize();
        setPadding();

        // 按钮事件处理
        $('#_er-close').onclick = removeDom;
        $('#_er-font-plus').onclick = function(){
            fontsize += 2;
            setFontSize();
        };
        $('#_er-font-minus').onclick = function(){
            fontsize -= 2;
            setFontSize();
        };
        $('#_er-border').onclick= function() {
            padding = padding == 10 ? 5 : 10;
            setPadding();
        }
    }

    function toNextReadPos(){
        var current = $('._er-current');
        var nextSpan = null;
         if (current){
            nextSpan = current.nextElementSibling;
            while(nextSpan && nextSpan.nodeName !== 'SPAN'){
                nextSpan = nextSpan.nextElementSibling;
            }
        }else{
            nextSpan = $('._er-content span');
        }
        if (current) current.classList.remove('_er-current');
        if (nextSpan) nextSpan.classList.add('_er-current');
    }

    function toPrevReadPos(){
        var current = $('._er-current');
        var prevSpan = null;
        if (current){
            prevSpan = current.previousElementSibling;
            while(prevSpan && prevSpan.nodeName !== 'SPAN'){
                prevSpan = prevSpan.previousElementSibling;
            }
        }
        if (current) current.classList.remove('_er-current');
        if (prevSpan) prevSpan.classList.add('_er-current');
    }

    function updateReadPos(){
        if ($('._er-current'))
            $('._er').scrollTop =  $('._er-current').offsetTop - (document.documentElement.clientHeight / 2);
    }

    function setFontSize(){
        localStorage["_er_fontsize"] = fontsize;
        $('._er-title').style.fontSize = (20+fontsize) + 'px';
        $('._er-title').style.lineHeight = ((20+fontsize)*1.5) + 'px';
        $('._er-content').style.fontSize = (14+fontsize) + 'px';
        $('._er-content').style.lineHeight = ((14+fontsize)*1.5) + 'px';
        $('.translator').style.fontSize = (10+fontsize) + 'px';
        $('.translator').style.lineHeight = ((10+fontsize)*1.5) + 'px';
    }

    function setPadding() {
        localStorage["_er_padding"] = padding;
        $('._er-content').style.padding = '10px ' + padding + '%';
    }

    var oldOverflow = '';
    var oldOnKeyDown = $('body').onkeydown;

    function removeDom(){
        var erScrollTop = document.querySelector('._er').scrollTop;
        var erScrollHeight = document.querySelector('._er').scrollHeight;
        var erClientHeight = document.documentElement.clientHeight;
        var scrollPercentage = (erScrollTop / (erScrollHeight - erClientHeight)) * 100;
        $('._er').remove();
        document.documentElement.style.overflow = 'auto';
        $('body').style.overflow = oldOverflow;
        $('body').onkeydown = oldOnKeyDown;
        $('body').children[0].insertAdjacentHTML('beforeBegin', '<button id="_er-entryReadMode" style="' +
            '    position: fixed;' +
            '    right: 50px;' +
            '    bottom: 50px;' +
            '    background-color: rgba(255,255,255,0.5);' +
            '    backdrop-filter: blur(1px);' +
            '    border: 0px solid black;' +
            '    border-radius: 10px;' +
            '    box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);' +
            '    padding: 0 5px;' +
            '    height: 50px;' +
            '    overflow: auto;' +
            '    z-index: 201901272210;">进入阅读模式</button>');
        $('#_er-entryReadMode').onclick = checkAndCreateReader;
        setTimeout(function() {
            var restoredScrollTop = ((erScrollHeight - erClientHeight) * (scrollPercentage / 100));
            window.scrollTo(0, restoredScrollTop);
        }, 0);
    }

    function addClassAndDom(){
        var originalScrollTop = window.pageYOffset;
        var originalScrollHeight = document.documentElement.scrollHeight;
        var originalClientHeight = document.documentElement.clientHeight;
        var scrollPercentage = (originalScrollTop / (originalScrollHeight - originalClientHeight)) * 100;
        oldOverflow = $('body').style.overflow;
        $('body').style.overflow = 'hidden';

        $('body').children[0].insertAdjacentHTML('beforeBegin',
            '<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no"><div class="_er">' +
            '    <div class="_er-tools" style="margin-top:0;">' +
            '        <button type="button" id="_er-pageup"  class="buttonBottom" style="width:50%; margin: 0;">上一页</button>' +
            '        <button type="button" id="_er-pageindex"  class="buttonBottom" style="padding: 5px 40px; margin: 0;">目录</button>' +
            '        <button type="button" id="_er-pagedown"  class="buttonBottom" style="width:50%; margin: 0;">下一页</button>' +
            '    </div>' +
            '    <div class="_er-tools">' +
            '        <button type="button" id="_er-switch-theme" class="buttonTop">切换主题</button>' +
            '        <button type="button" id="_er-font-plus" class="buttonTop">字号+</button>' +
            '        <button type="button" id="_er-font-minus" class="buttonTop">字号-</button>' +
            '        <button type="button" id="_er-border" class="buttonTop">边距</button>' +
            '        <button type="button" id="_er-simplemode" class="buttonTop">简 / 繁</button>' +
            '        <button type="button" id="_er-close" class="exit">退出</button>' +
            '    </div>' +
            '    <div class="_er-title"></div>' +
            '    <div class="translator"></div>' +
            '    <div class="_er-content">' +
            '    </div>' +
            '    <div class="_er-tools">' +
            '        <button type="button" id="_er-pageup"  class="buttonBottom" style="width: 50%;">上一页</button>' +
            '        <button type="button" id="_er-pageindex"  class="buttonBottom" style="padding: 5px 40px;">目录</button>' +
            '        <button type="button" id="_er-pagedown"  class="buttonBottom" style="width: 50%;">下一页</button>' +
            '    </div>' +
            '</div>');
        if (!document.querySelector('#_er-styles')) {
            $('body').children[0].insertAdjacentHTML('beforeBegin',
                '<style id="_er-styles">' +
                '* {' +
                    '-webkit-user-select: none; /* Safari */' +
                    '-moz-user-select: none; /* Firefox */' +
                    '-ms-user-select: none; /* IE 10+ */' +
                    'user-select: none; /* 标准语法 */' +
                '}' +
                '._er{' +
                '    position: fixed;' +
                '    left: 0;' +
                '    right: 0;' +
                '    top: 0;' +
                '    bottom: 0;' +
                '    overflow: auto;' +
                '    background-color: white;' +
                '    z-index: 201901272211;' +
                '}' +
                '._er-title{' +
                '    text-align: center;' +
                '    font-size: 20px;' +
                '    line-height: 30px;' +
                '    font-weight: 900;' +
                '    padding: 10px 10%;' +
                '    color: black;' +
                '}' +
                '.translator{' +
                '    text-align: center;' +
                '    font-size: 10px;' +
                '    line-height: 15px;' +
                '    padding: 0 10% 10px;' +
                '    color: black;' +
                '    display: none;' +
                '}' +
                '._er-content{' +
                '    padding: 10px 10%;' +
                '    font-size: 14px;' +
                '    line-height: 21px;' +
                '    color: black;' +
                '}' +
                '._er-content p:last-of-type {' +
                '    font-family: "read" !important;' +
                '}' +
                '._er-tools{' +
                '    margin-top: 10px;' +
                '    margin-bottom: 10px;' +
                '    text-align: center;' +
                '    display: flex;' +
                '    justify-content: center;' +
                '}' +
                '.buttonTop{' +
                '    cursor: pointer;' +
                '    color: black;' +
                '    background-color: rgba(255,255,255,0.5);' +
                '    border: 1px solid black;' +
                '    padding: 5px 8px;' +
                '    margin: 8px 5px 0;' +
                '    border-radius: 10px;' +
                '    white-space: nowrap;' +
                '}' +
                '.buttonTop:hover{' +
                '    background-color: rgba(255,255,255,0.9);' +
                '}' +
                '.buttonTop:active{' +
                '    background-color: rgba(255,255,255,0.7);' +
                '}' +
                '.buttonBottom{' +
                '    cursor: pointer;' +
                '    color: black;' +
                '    background-color: rgba(255,255,255,0);' +
                '    border: 0.5px solid black;' +
                '    padding: 5px 50px;' +
                '    margin: 20px 0 80px;' +
                '    font-size: 20px;' +
                '    white-space: nowrap;' +
                '}' +
                '.buttonBottom:hover{' +
                '    background-color: rgba(255,255,255,0.8);' +
                '}' +
                '.buttonBottom:active{' +
                '    background-color: rgba(255,255,255,0.5);' +
                '}' +
                '.exit{' +
                '    width: 50px;' +
                '    height: 50px;' +
                '    position: fixed;' +
                '    right: 15px;' +
                '    bottom: 15px;' +
                '    z-index: 201901272212;' +
                '    color: black;' +
                '    border: 0px solid black;' +
                '    box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);' +
                '    opacity: 0.8;' +
                '    cursor: pointer;' +
                '    border-radius: 25px;' +
                '    font-size: 14px;' +
                '    padding: 0;' +
                '    white-space: nowrap;' +
                '}' +
                '._er-current{' +
                '    background-color: yellow;' +
                '    color: black;' +
                '}' +
                '</style>');
        }
        setTimeout(function() {
            var restoredScrollTop = ((originalScrollHeight - originalClientHeight) * (scrollPercentage / 100));
            document.querySelector('._er').scrollTop = restoredScrollTop;
        }, 0);
    }

})();