Дополнительный фильтр на страницах подразделений
// ==UserScript==
// @name Virtonomica: фильтр по индикаторам
// @namespace virtonomica
// @version 1.5
// @description Дополнительный фильтр на страницах подразделений
// @include http*://*virtonomic*.ru/*/main/company/view/*/unit_list
// @include http*://igra.aup.ru/*/main/company/view/*/unit_list
// @include http*://virtonomic*.*/*/main/company/view/*
// ==/UserScript==
var run = function() {
var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
$ = win.$;
function showAll() {
$('table > tbody > tr > td.alerts').each(function() {
$(this).parent().show();
var nextRow = $(this).parent().next('tr');
if(nextRow.attr("class") == 'unit_comment'){
nextRow.show();
}
});
}
function containsWord(haystack, needle) {
return (" " + haystack + " ").indexOf(" " + needle + " ") !== -1;
}
function hideByCell(cell, imgSrc){
var notFound = true;
var row = cell.parent();
var nextRow = row.next('tr');
var childs = cell.children('img');
if(childs.length > 0){
childs.each(function() {
if(notFound){
if($(this).attr('src') !== imgSrc){
row.hide();
if(containsWord(nextRow.attr("class"), 'unit_comment')){
nextRow.hide();
}
} else {
notFound = false;
row.show();
if(containsWord(nextRow.attr("class"), 'unit_comment')){
nextRow.show();
}
}
}
});
} else {
row.hide();
if(containsWord(nextRow.attr("class"), 'unit_comment')){
nextRow.hide();
}
}
return notFound;
}
function showByImgSrc(imgSrc) {
var notFound = true;
$('table > tbody > tr > td.alerts').each(function() {
var cell = $(this);
notFound = hideByCell(cell, imgSrc);
if(notFound){
hideByCell(cell.parent().children('td.prod').eq(0), imgSrc);
}
});
}
//var container = $('#mainContent tr:first > td:first');
var container = $("td.u-l").parent().parent();
var panel = $("#indicator_filter");
// добавить панель, если её еще нет
var ext_panel = "<div style='padding: 2px; border: 1px solid #0184D0; border-radius: 4px 4px 4px 4px; float:left; white-space:nowrap; color:#0184D0; display:none;' id=indicator_filter></div>";
container.append( "<tr><td>" +ext_panel +"</td></tr>");
var alerts = {};
function addAlert(img) {
var imgSrc = img.attr('src');
var imgTitle = img.attr('title');
if (typeof alerts[imgSrc] !== 'undefined'){
alerts[imgSrc].cnt = alerts[imgSrc].cnt + 1;
}else{
alerts[imgSrc] = {
cnt: 1,
src: imgSrc,
title: imgTitle
}
}
}
$('table > tbody > tr > td.alerts > img').each(function() {
var img = $(this);
addAlert(img);
});
$('table > tbody > tr > td.prod > img').each(function() {
var img = $(this);
addAlert(img);
});
var alertsExists = 0;
$.each(alerts, function() {
alertsExists = 1;
var alertObj = this;
var imgText = $('<i>',{
title: alertObj.title,
text: alertObj.cnt,
click: function(){ showByImgSrc(alertObj.src);return false;},
});
var img = $('<img>',{
title: alertObj.title,
src: alertObj.src
});
var input = imgText.append(img);
$("#indicator_filter").append(input);
$("#indicator_filter").append(' ');
});
if(alertsExists == 1){
var showAllLink = $('<i>',{
text: 'Сбросить фильтр',
click: function(){ showAll();return false;}
});
$("#indicator_filter").append(showAllLink);
$("#indicator_filter").show();
}
}
if(window.top == window) {
var script = document.createElement("script");
script.textContent = '(' + run.toString() + ')();';
document.documentElement.appendChild(script);
}