您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展(如 Stylus)后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
您需要先安装一款用户样式管理器扩展后才能安装此样式。
(我已经安装了用户样式管理器,让我安装!)
// ==UserScript==
// @name Hacker Experience Log Helper
// @namespace https://github.com/pohky/loghelper
// @version 0.5
// @description Adds a log database to help manage logs and some other little stuff
// @author sakuzyo
// @match *://legacy.hackerexperience.com/*
// @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_listValues
// @grant GM_deleteValue
// ==/UserScript==
// ############### Log DB page stuffs
if (window.location.href.search('logdb') > 0) {
$('#sidebar ul li.active').attr('class','');
$('#sidebar ul').append('<li class="active"><a href="log?logdb"><i class="fa fa-inverse"></i> <span>Log Database</span></a></li>');
modLogDBPage();
} else {
$('#sidebar ul').append('<li><a href="log?logdb"><i class="fa fa-inverse"></i> <span>Log Database</span></a></li>');
}
function modLogDBPage(){
document.title = 'Log Database';
$('.nav.nav-tabs:first').html('<li class="link active" id="tablocal"><a href="#" id="locallog"><span class="icon-tab he16-internet_log"></span>Local Logs</a></li>');
$('.nav.nav-tabs:first').append('<li class="link" id="tabweb"><a href="#" id="weblog"><span class="icon-tab he16-internet_log"></span>Internet Logs</a></li>');
$('.label.label-info').remove();
$('#link0').attr('href','log?logdb'); $('#link0').html('LogDB');
$('#content-header h1').html('Log Database');
setupLogDbPage('local', 'Local');
loadLocalLogs();
}
function setupLogDbPage(dbtype, dbname){
$('.widget-content').html('<div class="span12"><div class="span4"><div class="widget-box text-left">' +
'<div class="widget-title"><span class="icon"><span class="he16-collect_info"></span></span><h5>Select ' + dbname + ' Log</h5></div>' +
'<div class="widget-content ' + dbtype + 'logdb">' +
'<div id="logdblist"></div>' +
'</div></div></div>'+
'<div class="span8"><div class="widget-box text-left">' +
'<div class="widget-title"><span class="icon"><span class="he16-collect_info"></span></span><h5>Log Data</h5></div>' +
'<div class="widget-content">' +
'<textarea name="log" class="logarea" id="logdatatext" rows="15" spellcheck="FALSE" style="width: 98%;height: 350px;resize: vertical;"></textarea>'+
'</div></div>'
);
}
$('#tablocal').click(function(){
$('#tablocal').attr('class','link active');
$('#tabweb').attr('class','link');
setupLogDbPage('local', 'Local');
loadLocalLogs();
});
$('#tabweb').click(function(){
$('#tabweb').attr('class','link active');
$('#tablocal').attr('class','link');
setupLogDbPage('web', 'Internet');
loadWebLogs();
});
// ############### Error/Success Message
function logsuccess(message){
if (typeof(message)==='undefined' || typeof(message)==='object') message = '';
if($('.alert').length !== 0) {
$('.alert').remove();
}
$('.widget-box:first').before('<div class="alert alert-success"><button class="close" data-dismiss="alert">x</button><strong>Success!</strong> '+ message +' </div>');
}
function logerror(message){
if (typeof(message)==='undefined' || typeof(message)==='object') message = '';
if($('.alert').length !== 0) {
$('.alert').remove();
}
$('.widget-box:first').before('<div class="alert alert-error"><button class="close" data-dismiss="alert">x</button><strong>Error!</strong> '+ message +' </div>');
}
if ($('#link0[href=log]').length) {
$('form.log input.btn').before('<input class="btn btn-inverse" id="backuplocallog" type="button" value="Backup" style="width: 80px;" title="Save Log to Database">');
$('#backuplocallog').after('<span> </span><input class="btn btn-inverse" id="clearlocallog" type="button" value="Clear" style="width: 80px;"><span> </span>');
} else if ($('.internet.page-log').length) {
$('form.log input.btn').before('<input class="btn btn-inverse" id="backupweblog" type="button" value="Backup" style="width: 80px;" title="Save Log to Database">');
$('#backupweblog').after('<span> </span><input class="btn btn-inverse" id="hidemeweb" type="button" value="Hide Me" style="width: 80px;" title="Clear only lines with your IP"><span> </span>');
}
// ############### Local Log DB Function Stuff
$('#backuplocallog').click(function(){
if ($('form.log').length) {
var bckup = backupLocalLog();
if(bckup === 0){
logerror('Already saved.');
} else {
logsuccess('Log saved to database.');
}
}
else {
console.log('No log found');
}
});
$('#clearlocallog').click(function(){
if ($('form.log').length) {
$('form.log').find('.logarea').val('');
$('form.log').submit();
}
else {
console.log('No log found');
}
});
function backupLocalLog() {
var logArea = $('form.log').find('.logarea');
var logText = logArea.val();
var user = $('a[href=profile] span').text();
var bckText = GM_getValue('localhost.' + user);
if (typeof(bckText)==='undefined' || typeof(bckText)==='object') bckText = '';
var newBckText = logText + bckText;
var newLogArray = newBckText.split('\n');
newLogArray = newLogArray.filter(function(value, index, self){
return self.indexOf(value) === index;
});
newBckText = newLogArray.join('\n');
if(newBckText !== bckText){
GM_setValue('localhost.' + user, newBckText);
return 1;
} else {
logerror('This log is already saved.');
return 0;
}
}
function loadLocalLogs(){
var localList = GM_listValues();
for (var i = 0; i < localList.length; i++) {
var elem = localList[i];
if (elem.indexOf('localhost') >= 0){
elem = elem.split('.')[1];
$('#logdblist').append('<div id="'+ elem +'"><a href="#" id="loadlocal" name="' + elem + '">localhost ('+ elem +')</a> '+
'<a href="#" id="clearlocal" name="'+ elem +'">[clear]</a> '+
'<a href="#" id="deletelocal" name="'+ elem +'">[delete]</a>'+
'</br></div>'
);
}
}
$('a[id=loadlocal]').click(function(){
var user = $(this).attr('name');
var logText = GM_getValue('localhost.' + user);
$('#logdatatext').val(logText);
});
$('a[id=clearlocal]').click(function(){
var user = $(this).attr('name');
GM_setValue('localhost.' + user,'');
$('#logdatatext').val('');
if(GM_getValue('localhost.' + user) === '') {
logsuccess('Backup successfully cleared.');
}
});
$('a[id=deletelocal]').click(function(){
var user = $(this).attr('name');
GM_deleteValue('localhost.' + user);
$('div[id="'+ user +'"]').remove();
$('#logdatatext').val('');
});
}
// ############### Internet Log DB Function Stuff
$('#hidemeweb').click(function() {
if ($('form.log').length) {
var logLines = $('form.log').find('.logarea').val().split('\n');
var newLines = [];
$.each(logLines, function(i, el) {
if (el.indexOf($('.header-ip-show').text()) === -1)
newLines.push(el);
});
$('form.log').find('.logarea').val(newLines.join('\n'));
$('form.log').submit();
}
else {
console.log('No log found');
}
});
function loadWebLogs(){
var ipList = GM_listValues();
for (var i = 0; i < ipList.length; i++) {
var elem = ipList[i];
if (elem.indexOf('localhost') == -1){
$('#logdblist').append('<div id="'+ elem +'"><a href="#" id="loadweblog" name="' + elem + '">'+ elem +'</a> '+
'<a href="#" id="clearweblog" name="'+ elem +'">[clear]</a> '+
'<a href="#" id="deleteweblog" name="'+ elem +'">[delete]</a> '+
'<a href="internet?ip='+ elem +'">[open]</a>'+
'</br></div>'
);
}
}
$('a[id=loadweblog]').click(function(){
var logIP = $(this).attr('name');
$('#logdatatext').val(GM_getValue(logIP));
});
$('a[id=clearweblog]').click(function(){
var logIP = $(this).attr('name');
GM_setValue(logIP,'');
if(GM_getValue(logIP) === '') {
$('#logdatatext').val('');
logsuccess('Backup successfully cleared.');
}
});
$('a[id=deleteweblog]').click(function(){
var logIP = $(this).attr('name');
GM_deleteValue(logIP);
$('div[id="'+ logIP +'"]').remove();
$('#logdatatext').val('');
});
}
function backupWebLog() {
var logArea = $('form.log').find('.logarea');
var logText = logArea.val();
var bckIP = $('#link1').text().slice(1);
var bckText = GM_getValue(bckIP);
if (typeof(bckText)==='undefined' || typeof(bckText)==='object') bckText = '';
var newBckText = logText + bckText;
var newLogArray = newBckText.split('\n');
newLogArray = newLogArray.filter(function(value, index, self){
return self.indexOf(value) === index;
});
newBckText = newLogArray.join('\n');
if(newBckText !== bckText){
GM_setValue(bckIP, newBckText);
return 1;
} else {
logerror('This log is already saved.');
return 0;
}
}
$('#backupweblog').click(function(){
if ($('form.log').length) {
var bckup = backupWebLog();
if(bckup === 0){
logerror('Already saved.');
} else {
logsuccess('Log saved to database.');
}
}
else {
console.log('No log found');
}
});
// ############### Bitcoin stuffs
var bitcoinip = '214.87.50.225';
if ($('#link1').text() == ' '+bitcoinip) {
var btcobserver = new MutationObserver(function(mutations) {
mutations.forEach(function(mutationRecord) {
doBtcStuff();
});
});
var target = document.getElementById('modal');
btcobserver.observe(target, { attributes : true, childList: true, attributeFilter : ['style'] });
}
function doBtcStuff() {
if ($('.modal-header h3').text().match('Buy')) {
$('#btc-submit').before('<input id="btc-submit-max" class="btn btn-info" value="Buy Max. BTC" style="width: 95px" title="Buys maximum BTC with all money from all accounts!">');
var maxmoney = $('span[title="Finances"]').text().replace(/[$,]/g, '');
var curbtcp = $(document).text().match(/1 BTC = \$([0-9]{1,})/)[1];
var maxbtc = maxmoney/curbtcp | 0;
$('#btc-submit-max').click(function(){
$('#btc-amount').val(maxbtc + '.0 BTC');
document.getElementById('btc-submit').click();
});
$('input[name="btc-amount"]').keyup(function() {
var inp = $('input[name="btc-amount"]').val().replace(/(.BTC)/,'').replace(/[,]/g,'');
var newval = Math.round(inp*curbtcp).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
$('#btc-total').text(newval);
});
var btcaccobserver = new MutationObserver(function(mutations) {
mutations.some(function(mutationRecord) {
var elem = mutationRecord.target.childNodes[1].firstChild.firstElementChild;
if (elem.className == 'select2-chosen') {
$('.select2-chosen').bind("DOMSubtreeModified",function() {
var curbtcp = $(document).text().match(/1 BTC = \$([0-9]{1,})/)[1];
var maxmon = $('.select2-chosen').text().match(/\(\$(.*)\)/)
if(maxmon != null){
var maxmon = maxmon[1].replace(/[,]/g,'');
var maxbtc = maxmon/curbtcp | 0;
$('#btc-amount').val(maxbtc + '.0 BTC');
}
});
return true;
}
return false;
});
});
var target = document.getElementById('desc-money');
btcaccobserver.observe(target, { attributes : true, childList: true });
}
if ($('.modal-header h3').text().match('Sell')) {
$('input[name="btc-amount"]').keyup(function() {
var inp = $('input[name="btc-amount"]').val().replace(/(.BTC)/,'').replace(/[,]/g,'');
var curbtcp = $(document).text().match(/1 BTC = \$([0-9]{1,4})/)[1];
var newval = Math.ceil(curbtcp*inp).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
$('#btc-total').text(newval);
});
}
}