// ==UserScript==
// @name BachNgocSach downloader
// @namespace https://nntoan.com/
// @description Tải truyện từ bachngocsach.com định dạng epub
// @version 1.0.1
// @icon http://i.imgur.com/3lomxTC.png
// @author Toan Nguyen
// @oujs:author nntoan
// @license MIT; https://nntoan.mit-license.org/
// @supportURL https://github.com/nntoan/UserScripts/issues
// @match http://bachngocsach.com/reader/*
// @match https://bachngocsach.com/reader/*
// @require https://unpkg.com/jszip@3.2.1/dist/jszip.min.js
// @require https://unpkg.com/ejs@2.6.1/ejs.min.js
// @require https://unpkg.com/jepub@2.1.0/dist/jepub.min.js
// @require https://unpkg.com/file-saver@2.0.2/dist/FileSaver.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js
// @require https://cdn.jsdelivr.net/npm/mbdownloader@0.2.4/src/mbDownloader.js
// @connect self
// @run-at document-idle
// @noframes
// ==/UserScript==
/*global console, location*/
(function ($, window, document) {
'use strict';
$(document).ready(function () {
$.widget('nntoan.mbDownloader', $.nntoan.mbDownloader, {
_create: function () {
this._super();
// Extending options
this.options.processing.ebookFileName = this.options.general.pathname.slice(8);
this.options.xhr.chapter.url = this.options.xhr.chapter.url + $(this.options.classNames.chapterList).attr('href');
this.options.xhr.chapter.data = $.extend(this.options.xhr.chapter.data, {
page: 'all'
});
// Styling download button for current site
this.elements.$downloadBtn.attr('class', 'truyen-button');
this.elements.$downloadBtn.css({ 'background': '#f4b759', 'border-color': '#eb813d' });
console.time('downloadAndGenerateEpub');
},
/**
* Update CSS of download button.
*
* @param {String} status Download status
* @returns void
*/
downloadStatus: function (status) {
this._super(status);
this.elements.$downloadBtn.css({ 'background': '#e05d59', 'color': '#ffffff !important', 'border-color': '#c83e35' });
},
/**
* Callback function to handle chap list values.
*
* @param {Object} options
* @param {String} val
* @returns {String}
*/
chapListValueFilter: function (options, val) {
val = this._super(options, val);
val = val.replace(location.protocol + '//' + location.host, '');
if (val.indexOf(location.pathname) === -1) {
val = '';
}
if (val === location.pathname) {
val = '';
}
return val.trim();
},
});
$(this).mbDownloader({
readyToInit: true,
processing: {
ebookFileExt: '.epub'
},
regularExp: {
chapter: null
},
classNames: {
novelId: '#login-user',
infoBlock: '.node-truyen',
chapterContent: '#noi-dung',
chapterNotContent: 'iframe, script, style, a, div, p:has(a[href*="bachngocsach.com"])',
chapterVip: '#btnChapterVip',
chapterList: '#chuong-list-more',
chapterTitle: 'h1#chuong-title',
ebookTitle: 'h1#truyen-title',
ebookAuthor: 'div#tacgia > a',
ebookCover: '#anhbia',
ebookDesc: '#gioithieu',
ebookType: 'div#theloai a',
downloadBtnStatus: 'btn-primary btn-success btn-info btn-warning btn-danger blue success warning info danger error',
downloadAppendTo: 'nav#truyen-nav:last',
},
ebook: {
corsAnywhere: '',
fallbackCover: 'https://bachngocsach.com/reader/sites/default/files/logo.png'
},
chapters: {
chapListSlice: [6],
},
xhr: {
chapter: {
type: 'GET',
url: '',
},
content: {
type: 'GET',
xhrFields: {
withCredentials: true
}
}
},
bookInfoUpdated: function (event, data) {
var that = data.that,
options = that.options,
$infoBlock = that.elements.$infoBlock;
options.ebook = $.extend(options.ebook, {
title: $infoBlock.find(options.classNames.ebookTitle).text().trim(),
author: $infoBlock.find(options.classNames.ebookAuthor).text().trim(),
cover: $infoBlock.find(options.classNames.ebookCover).find('img').attr('src'),
description: $infoBlock.find(options.classNames.ebookDesc).html(),
});
data.epubInfo = $.extend(data.epubInfo, options.ebook);
console.log('Book information updated...', data.epubInfo);
},
chapIdUpdated: function (event, that) {
var options = that.options;
options.xhr.content.url = location.protocol + '//' + options.general.host + options.chapters.chapId;
},
beforeCreateEpub: function (event, that) {
console.log('Prepare generate epub...');
},
complete: function (event, that) {
console.log('Epub downloaded successfully. Please check your Downloads folder.');
console.timeEnd('downloadAndGenerateEpub');
}
});
});
})(jQuery, window, document); // eslint-disable-line