Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Ficbook.net story export script
- // @namespace ficbooknet
- // @author Enobarbous
- // @description Загружает все главы работы для просмотра на одной странице. Работает только на странице "Содержание". ВНИМАНИЕ! Настоятельно не рекомендуется использовать скрипт на работах больше 1000 фикбук-страниц!
- // @version 1.2
- // @include https://ficbook.net/readfic/*
- // @exclude https://ficbook.net/readfic/*/*
- // @grant none
- // @noframes
- // ==/UserScript==
- //Проверка на oneshot
- if (document.querySelector('article.article a.part-link') ) {
- console.log('Run ficbook.net story export script');
- addStyle();
- addButton();
- addOverlay();
- } else {
- console.log('Oneshot')
- };
- function addStyle() {
- var style = document.createElement('style');
- style.type = 'text/css';
- style.innerHTML =
- '#as_button' +
- '{cursor:pointer;float:right;margin:0px 20px;padding:0px 20px;text-align:center;' +
- 'font-size:20px;font-weight:400;font-variant:small-caps;color:#542A00;' +
- 'background-color:#FAF4EA;border:1px solid #542A00;border-radius:2px;transition-duration:0.3s;} ' +
- '#as_button:hover' +
- '{color:#76482e;background-color:#e8d8bb;} ' +
- '#as_overlay' +
- '{display:none} ' +
- '#as_layer' +
- '{position:fixed;top:0;left:0;height:100%;width:100%;z-index:10000;background-color:#000000;opacity:0.6;} ' +
- '#as_popup' +
- '{position:fixed;width:350px;height:75px;top:0;right:0;bottom:0;left:0;margin:auto;z-index:20000;' +
- 'text-align:center;line-height:70px;font-size:18px;color:#542A00;' +
- 'border:1px solid #542A00;border-radius:3px;background-color:#FAF4EA;} ' +
- '.as-chapter' +
- '{margin: 0 1.5%;text-align:justify;} ' +
- '.as-chapter-link' +
- '{display:block!important;text-align:right;margin-bottom:4%;margin-top:-1%;margin-right:1.5%;} ' +
- '.as-chapter-link:visited' +
- '{color:#a09d98!important;} ' +
- '#accordion, .adult-warning, .start-reading, .rkl-desktop-in-text, .rkl-block, .fb-ads-block' +
- '{display:none!important;}';
- document.head.appendChild(style);
- console.log('Style');
- };
- function addButton() {
- var node = document.createElement('div');
- var button = document.createElement('span');
- button.setAttribute('id', 'as_button');
- button.setAttribute('title', 'Показать всю работу на этой странице');
- button.appendChild(document.createTextNode('all story') );
- button.onclick = runStoryExport;
- node.appendChild(button);
- //Для актуальных браузеров
- var parent = document.querySelector('article.article');
- parent.prepend(node);
- //Для старых браузеров
- /*var parent = document.querySelector('.start-reading');
- document.querySelector('article.article').insertBefore(node, parent);*/
- console.log('Button');
- };
- function addOverlay() {
- var overlay = document.createElement('div');
- overlay.setAttribute('id', 'as_overlay');
- var bg_layer = document.createElement('div');
- bg_layer.setAttribute('id', 'as_layer');
- var popup = document.createElement('div');
- popup.setAttribute('id', 'as_popup');
- popup.appendChild(document.createTextNode('ИДЕТ ЗАГРУЗКА РАБОТЫ...') );
- overlay.appendChild(bg_layer);
- overlay.appendChild(popup);
- document.body.appendChild(overlay);
- console.log('Overlay');
- };
- function runStoryExport() {
- setTimeout(showOverlay, 0);
- setTimeout(exportChapter, 100);
- setTimeout(hideOverlay, 200);
- };
- function showOverlay() {
- document.querySelector('#as_overlay').style.display = 'block';
- //console.log('Show overlay');
- };
- function hideOverlay() {
- document.querySelector('#as_overlay').style.display = 'none';
- //console.log('Hide overlay');
- };
- function getLinks() {
- var parser = document.querySelectorAll('article.article a.part-link');
- //console.log(parser);
- var arr = Array.prototype.slice.call(parser);
- var result = arr.map(function(item) { return item.href; } );
- //console.log(result);
- console.log('Links');
- return result;
- };
- function exportChapter() {
- var chapters = [];
- var links = getLinks();
- links.forEach(function(item) {
- var url = item;
- //console.log(url);
- //При асинхронном вызове сервер фикбука примерно в 1 из 10 запросов возвращает страницу "Технические работы"
- var xhr = new XMLHttpRequest();
- xhr.open('get', url, false);
- xhr.onload = function() {
- //console.log(xhr.responseText);
- var resp = document.createElement('div');
- resp.innerHTML = xhr.responseText;
- var chapter_text = resp.querySelector('article.article');
- //console.log(chapter_text);
- chapters.push(chapter_text);
- console.log('Load ' + url);
- var div = document.createElement('div');
- var chapter_link = document.createElement('a');
- chapter_link.setAttribute('href', url);
- chapter_link.setAttribute('target', '_blank');
- chapter_link.setAttribute('class', 'as-chapter-link');
- chapter_link.setAttribute('onclick', 'window.open(this.href, this.target); return false');
- chapter_link.appendChild(document.createTextNode('Открыть главу в новой вкладке') );
- div.appendChild(chapter_link);
- //console.log(div);
- chapters.push(div);
- };
- xhr.send();
- } );
- //console.log(chapters);
- var content = document.querySelector('article.article');
- content.innerHTML = '';
- chapters.forEach(function(item) {
- var text = item;
- var chapter = document.createElement('div');
- chapter.setAttribute('class','as-chapter');
- chapter.innerHTML = text.innerHTML;
- //console.log(chapter);
- content.appendChild(chapter);
- } );
- console.log('Story loaded');
- };
Advertisement
Add Comment
Please, Sign In to add comment