Greasy Fork is available in English.
Writes Mangakakalot, Manganelo, Manganato Bookmarks (name and visited number) to "manga_bookmarks.txt" on "Export Bookmarks" button click
当前为
// ==UserScript==
// @name Mananelo/Mangakakalot/Manganato Bookmarks Export
// @namespace http://smoondev.com/
// @version 2.12
// @description Writes Mangakakalot, Manganelo, Manganato Bookmarks (name and visited number) to "manga_bookmarks.txt" on "Export Bookmarks" button click
// @author Shawn Moon
// @match https://mangakakalot.com/bookmark*
// @match https://manganelo.com/bookmark*
// @match https://manganato.com/bookmark*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js
// ==/UserScript==
function addBookarkStyles(css) {
var head, style;
head = document.getElementsByTagName('head')[0];
if (!head) { return; }
style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = css;
head.appendChild(style);
}
addBookarkStyles(`
#export_container_nato, #export_container_kakalot {
color: #000;
cursor: pointer;
float: right;
}
#export_container_kakalot {
margin-right: 10px;
}
#export_nato:hover, #export_kakalot:hover {
background-color: #b6e4e3;
color: #000;
cursor: pointer;
}
#export_nato, #export_kakalot {
padding: 4px 8px;
border-radius: 5px;
text-decoration: none;
color: #fff;
background-color: #76cdcb;
border: none;
font-weight: 600;
}
#inclURL_nano {
}
#inclURL_kakalot {
margin-left: 10px;
}
.inclURL_kakalot {
color: #ffffff;
}
#temp_data {
position: absolute; top: -9999px;
left: -9999px;
}
`);
(async function() {
'use strict';
let pageI, bmTag, bmTitle, lastViewed, btnContainer, exportButtonID, inclURL,
exportContainer, pageCount = 0, domain = window.location.hostname, bookmarkHeader = `===========================\n${domain} Bookmarks\n===========================\n`
if(domain == 'mangakakalot.com') {
pageI = '.group_page a'
bmTag = '.bookmark_item'
bmTitle = '.bookmark_title'
lastViewed = '.bookmark_chap a'
btnContainer = '.breadcrumbs p'
inclURL = 'inclURL_kakalot'
pageCount = parseInt($(`${pageI}`).last().text().replace(/\D+/g, ''))
exportButtonID = 'export_kakalot'
exportContainer = 'export_container_kakalot'
} else if(domain == 'manganato.com') {
btnContainer = '.panel-breadcrumb'
inclURL = 'inclURL_nato'
exportButtonID = 'export_nato'
exportContainer = 'export_container_nato'
}
const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay));
const saveFile = saveData => {
// save file
const fileData = new Blob([saveData], {type:"application/octet-stream"})
saveAs(fileData, "manga_bookmarks.txt")
$(`#${exportButtonID}`).html('Export Bookmarks').prop('disabled', false)
}
const deleteTemp = () => {
// delete temp container
$('#temp_data').remove()
}
const getCookie = (name = 'user_acc') => {
let returnVal = false
const value = `; ${document.cookie}`
const parts = value.split(`; ${name}=`)
try {
if (parts.length === 2) {
let user = parts.pop().split(';').shift()
user = JSON.parse(decodeURIComponent(user))
returnVal = user.user_data
}
} catch (e) {
returnVal = false
}
return returnVal
}
const getBMs = async (userCookie, currentPage = 1) => {
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("out_type", "json");
urlencoded.append("bm_source", "manganato");
urlencoded.append("bm_page", currentPage);
urlencoded.append("user_data", userCookie);
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
let bmArray = []
return await fetch("https://user.mngusr.com/bookmark_get_list_full", requestOptions)
.then(response => response.json())
.then(result => result)
.catch(error => console.log('ExportError', error));
}
if($('#export_container').length === 0){
$(`${btnContainer}`).append(`<div id='${exportContainer}'><button id='${exportButtonID}'>Export Bookmarks</button><input type="checkbox" id="${inclURL}"><span style="margin-left: 5px;"><label for="${inclURL}" class='${inclURL}'>Add URL</span></label></div>`)
}
const getBookmarks = (url) => {
// main function generate file
deleteTemp()
$('body').append("<div id='temp_data'>")
let pageSuccess = 0;
let bookmarkedTitles = bookmarkHeader
for(let i = 0; i < pageCount; i++) {
$("#temp_data").append(`<div id='page${i+1}'>`)
$(`#page${i+1}`).load(`https://${domain}/bookmark?page=${i+1} ${bmTag}`, (resp,status,xhr) => {
if(status == "success") { pageSuccess++ }
if(pageSuccess == pageCount) {
let bmItem = $(`#temp_data ${bmTag}`)
for(let j = 0; j < bmItem.length; j++) {
if($(bmItem[j]).find(`${bmTitle}`).text()) {
let last_viewed = $(bmItem[j]).find(`${lastViewed}`),
bookmarked_title = $(bmItem[j]).find(`${bmTitle}`);
if(bookmarked_title.length > 0) {
bookmarkedTitles += $(bmItem[j]).find(`${bmTitle}`).text() + ` || Viewed: ${last_viewed.length > 0 ? last_viewed[0].text : 'Not Found' } ${url ? `- ${last_viewed[0].href}` : ''} \n`
}
}
}
saveFile(bookmarkedTitles)
deleteTemp()
}
})
}
}
$(`#${exportButtonID}`).on('click', async function() {
let bookmarkedTitles = bookmarkHeader
let inclURLCheck = $(`#${inclURL}`).is(':checked');
if(domain == 'mangakakalot.com') {
$(this).html('Generating File...').prop('disabled', true)
getBookmarks(inclURLCheck)
} else if(domain == 'manganato.com') {
let userData = getCookie()
if(userData) {
$(this).html('Generating File...').prop('disabled', true)
let initBMFetch = await getBMs(userData)
pageCount = initBMFetch.bm_page_total || 0
if(pageCount > 0) {
for(let i = 1; i <= pageCount; i++) {
let currPage = await getBMs(userData, i)
let currPageBMs = currPage.data
for(let j = 0; j < currPageBMs.length; j++) {
bookmarkedTitles += `${currPageBMs[j].note_story_name} || Viewed: ${currPageBMs[j].chapter_namenow} ${inclURLCheck ? `- ${currPageBMs[j].link_chapter_now}` : ''} \n`
}
}
saveFile(bookmarkedTitles)
}
}
}
})
})();