NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name kb_track
// @version 0.1
// @description Управляем группами котиков
// @author Кышбрысь
// @match https://*.catwar.su/*
// @include /https:\/\/\w?\.?catwar\.su\/.*/
// @license MIT; https://opensource.org/licenses/MIT
// @updateurl https://openuserjs.org/install/infolafx.ru/kb_track.user.js
// @grant GM_xmlhttpRequest
// @grant GM.xmlHttpRequest
// @require https://abstract-class-shed.github.io/cwshed/jquery-3.4.1.min.js
// @require https://raw.githubusercontent.com/litera/jquery-scrollintoview/master/jquery.scrollintoview.min.js
// @require https://abstract-class-shed.github.io/cwshed/jquery-ui.js
// ==/UserScript==
/*global jQuery*/
(function (window, document, $) {
'use strict';
if (typeof $ === 'undefined') return;
const version = '0.1';
const MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
const isDesktop = !$('meta[name=viewport]').length;
const defaults = {
'la_version' : version
, 'la_min_value' : '-10000000000'
, 'la_max_value' : '10000000000'
, 'la_last_command' : '0'
, 'la_cats_visible' : false
, 'la_cats_list' : ''
, 'la_maps_list' : ''
, 'la_show_id' : true
, 'la_show_title' : true
};
const globals = {}; //Настройки
for (var key in defaults) {
let settings = getSettings(key);
if (settings === null) {
globals[key] = defaults[key];
} else {
if (Array.isArray(defaults[key])) {
globals[key] = JSON.parse(settings);
} else {
globals[key] = settings;
}
}
}
function getSettings(key) { //Получение настроек
let setting = 'cws_sett_' + key;
let val = window.localStorage.getItem(setting);
switch (val) {
case null: return null;
case 'true': return true;
case 'false': return false;
default:
return val;
}
}
var error_tm;
function error(t) {
$("#error").text(t).show();
clearTimeout(error_tm);
error_tm = setTimeout(function () {
hideError()
}, 10000);
}
function hideError() {
clearTimeout(error_tm);
$("#error").fadeOut(500);
}
function setSettings(key, val) {
let setting = 'cws_sett_' + key;
window.localStorage.setItem(setting, val);
}
function removeSettings(key) {
let setting = 'cws_sett_' + key;
window.localStorage.removeItem(setting);
}
function addCSS(css) {
$('head').append(`<style>${css}</style>`);
}
const pageurl = window.location.href;
const isCW3 = (/^https:\/\/\w?\.?catwar.su\/cw3(?!(\/kns|\/jagd))/.test(pageurl));
const isDM = (/^https:\/\/\w?\.?catwar.su\/ls/.test(pageurl));
const isHunt = (/^https:\/\/\w?\.?catwar.su\/cw3\/jagd/.test(pageurl));
const isSett = (/^https:\/\/\w?\.?catwar.su\/settings/.test(pageurl));
const isMyCat = (/^https:\/\/\w?\.?catwar.su\/$/.test(pageurl));
const isBlog = (/^https:\/\/\w?\.?catwar.su\/blog\d+/.test(pageurl));
const isCUMoves = (/^https:\/\/\w?\.?catwar.su\/moves$/.test(pageurl));
const isProfile = (/^https:\/\/\w?\.?catwar.su\/cat(\d+|\/)/.test(pageurl));
const isChat = (/^https:\/\/\w?\.?catwar.su\/chat/.test(pageurl));
try {
console.log('start');
if (isCW3) cw3();
//if (isDM) dm();
//if (isSett) sett();
//if (isHunt) hunt();
//if (isMyCat) myCat();
//if (isBlog) blog();
//if (isProfile) profile();
//if (isCUMoves) cumoves();
//if (isChat) chat();
} catch (err) {
window.console.error('la: Syslap error: ', err);
}
function cw3() {
addCSS(`#la_group {background-color: #222222;}
#la_table.hidden {display:none}
#la_group hr {
margin: 2px 0;
padding: 0;
height: 1px;
border: none;
background: linear-gradient(45deg, #333, #ddd);
}`);
let ids = [];
let names = [];
let statuses = [];
let titles = [];
let needUpdate = false;
let old_location = '';
function change_statuses() {
let color = '#000000';
let list = $('#la_cats_list').val();
let N = 0;
let catlist = '';
ids.forEach(id => {
if (statuses[id] == '[ В игре ]') color = '#006400';
if (statuses[id] == '[ Спит ]') color = '#640000';
if (list.length == 0 || list.includes(names[id]) || list.includes(id)) {
catlist = catlist + `<font size=2px color=${color}><a id="cats_click" href=#>${names[id]}</a> (${id}), ${titles[id]}</font><br>
`;
N = N + 1;
}
});
catlist = catlist + '';
$('#la_cmd_title').html(catlist);
$('#la_cats_count').html('[' + N + ']');
};
function update_maps() {
let N = 0;
let maplist = '';
let maps = $('#la_maps_list').val().split(/[\,,;,➝]/);
let currentMap = false;
maps.forEach(map => {
if (map.trim() != '') {
currentMap = map.trim().includes($('#location').html());
maplist = maplist + `<font size=2 color=#000000>${(currentMap ? '<b>' : '')}<a id="maps_click" href=#>${map.trim()}</a>${(currentMap ? '</b>' : '')}</font> -> `;
N = N + 1;
};
});
maplist = maplist + '<font size=2 color=#000000><b><a id="maps_click" href=#>Отмена</a></b></font>';
$('#la_maps_title').html(maplist);
$('#la_maps_count').html('[' + N + ']');
}
function updateCatsList() {
let cages = document.getElementById('cages');
let elemList = cages.querySelectorAll('.catWithArrow');
ids = [];
elemList.forEach(elem => {
let hrefa = $(elem).find('.cat_tooltip > u > a');
let href = hrefa.attr('href');
//debugger;
if (href !== undefined) {
let cat_id = href.replace(/\D/g, '');
ids[cat_id] = cat_id;
}
})
}
function updateTimerTick() {
if (globals.la_cats_visible && needUpdate) {
needUpdate = false;
updateCatsList();
change_statuses();
update_maps();
};
}; setInterval(updateTimerTick, 1000);
$(document).ready(function () {
ids = [];
$("#cages").on('DOMNodeInserted', '.catWithArrow', function () {
let href = $(this).find('.cat_tooltip > u > a').attr('href');
if (href !== undefined) {
let cat_id = href.replace(/\D/g, '');
ids[cat_id] = cat_id;
if (titles[cat_id] === undefined) {
let title = $(this).find('.cat_tooltip > small > i').html();
titles[cat_id] = title;
}
if (names[cat_id] === undefined) {
let name = $(this).find('.cat_tooltip > u > a').html();
names[cat_id] = name;
}
let status = $(this).find('.online').text(); // [ На удалении ]
let is_punished = $(this).find('div[style*="costume/295."]').length; // Подстилки?
if (is_punished) {
status = "[ В подстилках ]";
}
statuses[cat_id] = status;
needUpdate = true;
}
});
$("#cages").on('DOMNodeRemoved', '.catWithArrow', function () {
let href = $(this).find('.cat_tooltip > u > a').attr('href');
if (href !== undefined) {
let cat_id = href.replace(/\D/g, '');
delete ids[cat_id];
needUpdate = true;
}
});
$(` <tr id="la_group">
<td><input type="checkbox" id="la_show_cats" ${(globals.la_cats_visible ? 'checked' : '')}><label><b>Коты и локации</b></label>
<table id="la_table"${(globals.la_cats_visible ? '' : ' class="hidden"')}><tr>
<td colspan=2><hr class="la_hr"></td>
</tr><tr>
<td width=50%> <b>Коты: </b> <label id="la_cats_count"></label> <input id="la_cats_list" type="text" size="50"></td>
<td width=50%> <b>Локации: </b> <label id="la_maps_count"></label> <input id="la_maps_list" type="text" size="50"></td>
</tr><tr>
<td colspan=2><hr class="la_hr"></td>
</tr><tr>
<td id="la_cmd_title"></td>
<td id="la_maps_title"></td>
</tr></table>
</td>
</tr>`).insertAfter('#tr_chat');
$('#la_cats_list').val(globals.la_cats_list);
$('#la_maps_list').val(globals.la_maps_list);
update_maps();
$('body').on('change', '#la_show_cats', function () {
globals.la_cats_visible = $(this).prop('checked');
$('#la_table').toggleClass('hidden');
setSettings('la_cats_visible', globals.la_cats_visible)
needUpdate = true;
});
$('body').on('change', '#la_cats_list', function () {
globals.la_cats_list = $('#la_cats_list').val();
setSettings('la_cats_list', globals.la_cats_list);
needUpdate = true;
});
$('body').on('change', '#la_maps_list', function () {
globals.la_maps_list = $('#la_maps_list').val();
setSettings('la_maps_list', globals.la_maps_list);
update_maps();
});
$('body').on('click', '#cats_click', function () {
$('#text').val($('#text').val() + $(this).html() + ', ');
});
$('body').on('click', '#maps_click', function () {
$('#text').val($(this).html());
update_maps();
});
});
}
})(window, document, jQuery);