// ==UserScript==
// @name Thief-Book in Browser
// @namespace https://github.com/chocovon/thiefbook-js
// @version 0.3
// @description 浏览器版 Thief-Book 摸鱼神器
// @author chocovon
// @match http*://*/*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/418268/Thief-Book%20in%20Browser.user.js
// @updateURL https://update.greasyfork.icu/scripts/418268/Thief-Book%20in%20Browser.meta.js
// ==/UserScript==
(function() {
let text = '按,。键翻页\n-键退出/恢复显示\nGood Luck!'
let lines = [];
let lineLength = 10;
let pointer = 0;
let keyNextLine = 'Period';
let keyPreLine = 'Comma';
let keyHide = 'Minus';
let hide = false;
let progress = 0;
document.head.innerHTML +=
'';
document.body.innerHTML +=
'
';
parseText(false);
document.getElementById('thief-book-selectFile')
.addEventListener('change', function(){
let fr=new FileReader();
fr.onload=function(){
text = fr.result;
parseText(false);
}
fr.readAsText(this.files[0]);
document.getElementById('thief-book-settings').classList.add('thief-book-semi-hide');
})
document.getElementById('thief-book-progressSlider')
.addEventListener('input', function(){
pointer = parseInt(this.value);
printLine(true);
})
document.getElementById('thief-book-progressSlider')
.addEventListener('mouseup', function(){
printLine();
})
document.getElementById('thief-book-lineLengthSlider')
.addEventListener('input', function(){
lineLength = parseInt(this.value);
parseText(true)
})
window.addEventListener('keydown', function(e) {
if (e.code === keyNextLine) {
nextLine();
} else if (e.code === keyPreLine) {
preLine();
} else if (e.code === keyHide) {
onOff()
}
});
function parseText(keepProgress) {
lines = parseLines(text);
if (keepProgress) {
pointer = Math.round(progress * (lines.length - 1));
} else {
pointer = 0;
progress = 0;
}
let slider = document.getElementById('thief-book-progressSlider')
slider.min = 0;
slider.max = lines.length - 1;
printLine();
}
function parseLines(text) {
text = text.replace(/\r/g, "")
let i = 0,j = 0;
let lines = [];
while (j < text.length) {
if (j - i > lineLength || text[j] === '\n') {
lines.push(text.slice(i, j+1))
i = ++j;
continue;
}
j++;
}
if (j > i) {
lines.push(text.slice(i, j))
}
return lines;
}
function nextLine() {
if (pointer < lines.length - 1) {
pointer++;
}
printLine()
}
function preLine() {
if (pointer > 0) {
pointer--;
}
printLine();
}
function onOff() {
hide = !hide;
printLine();
}
function printLine(multiLine) {
if (hide) {
document.getElementById('thief-book-leftCorner').classList.add('thief-book-hide');
} else {
document.getElementById('thief-book-leftCorner').classList.remove('thief-book-hide');
}
document.getElementById('thief-book-lineBox').innerHTML = ''
if (multiLine) {
let i = pointer - 20;
while (i < pointer) {
if (i < 0) {
i++;
continue;
}
createLine(i);
i++;
}
}
createLine(pointer);
document.getElementById('thief-book-progressSlider').value = pointer;
function createLine(ptr) {
let newLine = document.createElement('div');
newLine.classList.add('thief-book-line');
let line = lines[ptr];
if (line.length < lineLength) {
line += ' '.repeat(lineLength - line.length);
}
newLine.innerText = calProgress(ptr) + ' ' + line;
document.getElementById('thief-book-lineBox').append(newLine);
}
}
function calProgress(ptr) {
progress = ptr / (lines.length - 1);
return ptr === lines.length - 1 ? '100.00%' :
('000' + ((100 * progress).toFixed(2))).slice(-5) + '%';
}
})();