Greasy Fork is available in English.

Virtonomica: фильтр для отчета "городская энергосеть" (City power grid filter)

Фильтр для отчета "аналитика" - "анализ рынков" - "энергопотребление" - "городская энергосеть"

// ==UserScript==
// @name           Virtonomica: фильтр для отчета "городская энергосеть" (City power grid filter)
// @namespace      virtonomica
// @version        1.0
// @description    Фильтр для отчета "аналитика" - "анализ рынков" - "энергопотребление" - "городская энергосеть"
// @include        http*://*virtonomic*.*/*/main/globalreport/energy/city
// ==/UserScript==
var run = function() {

  var win = (typeof(unsafeWindow) != 'undefined' ? unsafeWindow : top.window);
  $ = win.$;

  var filterByCountry = '<option value="0">&nbsp;</option>';
  var filterByRegion = '<option value="0">&nbsp;</option>';
  var filterByTown = '<option value="0">&nbsp;</option>';

  /////////////////
  var countries = new Array();
  $('table[class="list"] > tbody > tr > td:nth-child(1) > div > img').each(function(){
    var country = $(this).attr('title');
    countries[country] = 1;
  });
  for (key in countries) {
    filterByCountry = filterByCountry + '<option>'+key+'</option>';
  }
  /////////////////
  var regions = new Array();
  $('table[class="list"] > tbody > tr > td:nth-child(1) > div:nth-child(2)').each(function(){
    var region = $(this).text();
    regions[region] = 1;
  });
  for (key in regions) {
    if(key != ''){
      filterByRegion = filterByRegion + '<option>'+key+'</option>';
    }
  }
  /////////////////
  var towns = new Array();
  $('table[class="list"] > tbody > tr > td:nth-child(1) > div > b').each(function(){
    var cell = $(this);
    var town = cell.text();
    towns[town] = 1;
  });
  for (key in towns) {
    if(key != ''){
      filterByTown = filterByTown + '<option>'+key+'</option>';
    }
  }
  /////////////////
  function getLocale() {
    return (document.location.hostname === 'virtonomica.ru') ? 'ru' : 'en';
  }
  $('table[class="list"]').first().before('<select id="filterByCountry">'+filterByCountry+'</select>');  
  $('table[class="list"]').first().before('<select id="filterByRegion">'+filterByRegion+'</select>');  
  $('table[class="list"]').first().before('<select id="filterByTown">'+filterByTown+'</select>');  

  var locale = getLocale();
  var fromLabel = (locale == 'en') ? 'from' : 'с';
  var toLabel = (locale == 'en') ? 'to' : 'по';

  var filterByRegPriceLabel = $('table[class="list"] > tbody > tr:nth-child(1) > th:nth-child(5)').text();
  var filterByRegPriceLabel2 = $('table[class="list"] > tbody > tr:nth-child(2) > th:nth-child(1) > div > table > tbody > tr > td').text();
  $('table[class="list"]').first().before('<br>'+filterByRegPriceLabel+'('+filterByRegPriceLabel2+')'+':<label for="filterByRegPriceFrom"> '+fromLabel+' </label><input type="number" step="0.01" id="filterByRegPriceFrom" value="1"><label for="filterByRegPriceTo"> '+toLabel+' </label><input type="number" step="0.01" id="filterByRegPriceTo">'); 

  var filterByUserPercentLabel = $('table[class="list"] > tbody > tr:nth-child(1) > th:nth-child(6)').text();
  var filterByUserPercentLabel2 = $('table[class="list"] > tbody > tr:nth-child(2) > th:nth-child(2) > div > table > tbody > tr > td').text();
  $('table[class="list"]').first().before('<br>'+filterByUserPercentLabel+'('+filterByUserPercentLabel2+')'+':<label for="filterByUserPriceFrom"> '+fromLabel+' </label><input type="number" step="0.01" id="filterByUserPriceFrom" value="0"><label for="filterByUserPriceTo"> '+toLabel+' </label><input type="number" step="0.01" id="filterByUserPriceTo" value="">'); 

  var filterByUserPriceLabel3 = $('table[class="list"] > tbody > tr:nth-child(2) > th:nth-child(3) > div > table > tbody > tr > td').text();
  $('table[class="list"]').first().before(' ('+filterByUserPriceLabel3+')'+':<label for="filterByUserPercentFrom"> '+fromLabel+' </label><input type="number" step="0.01" id="filterByUserPercentFrom" value="0"><label for="filterByUserPercentTo"> '+toLabel+' </label><input type="number" step="0.01" id="filterByUserPercentTo" value="75">'); 


  ///////////////// 
  function filterRowBy(){
    $('table[class="list"]:first > tbody > tr[class]').each(function() {
      var tableRow = $(this);
      var hide = false;

      if(!hide){
        var search = $('#filterByCountry').val();
        var img = $('> td:nth-child(1) > div > img', tableRow);
        var country = img.attr('title');
        if (search == '0' || country == search ){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide){
        var search = $('#filterByRegion').val();
        var cell = $('> td:nth-child(1) > div:nth-child(2)', tableRow);
        var region = cell.text();
        if (search == '0' || search == region ){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide){
        var search = $('#filterByTown').val();
        var cell = $('> td:nth-child(1) > div > b', tableRow);
        var town = cell.text();
        if (search == '0' || search == town) {
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByRegPriceFrom').val() != ''){
        var from = parseFloat($('#filterByRegPriceFrom').val());
        var value = toNumber($('> td:nth-child(3)', tableRow).text());

        if (from <= value){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByRegPriceTo').val() != ''){
        var to = parseFloat($('#filterByRegPriceTo').val());
        var value = toNumber($('> td:nth-child(3)', tableRow).text());

        if (to >= value ){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByUserPriceFrom').val() != ''){
        var from = parseFloat($('#filterByUserPriceFrom').val());
        var value = toNumber($('> td:nth-child(4)', tableRow).text());

        if (from <= value){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByUserPriceTo').val() != ''){
        var to = parseFloat($('#filterByUserPriceTo').val());
        var value = toNumber($('> td:nth-child(4)', tableRow).text());

        if (to >= value ){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByUserPercentFrom').val() != ''){
        var from = parseFloat($('#filterByUserPercentFrom').val());
        var value = toNumber($('> td:nth-child(5)', tableRow).text());

        if (from <= value){
          hide = false;
        } else {
          hide = true;
        }
      }
      if(!hide && $('#filterByUserPercentTo').val() != ''){
        var to = parseFloat($('#filterByUserPercentTo').val());
        var value = toNumber($('> td:nth-child(5)', tableRow).text());

        if (to >= value ){
          hide = false;
        } else {
          hide = true;
        }
      }
      

      if (hide){
        tableRow.hide();
      } else {
        tableRow.show();
      }
    });
  }
  function toNumber(spNum){
    return parseFloat(spNum.replace('$','').replace('%','').replace(/\s+/g,''),10);
  }

  $('#filterByCountry').change( function(){
    filterRowBy();
  });
  $('#filterByRegion').change( function(){
    filterRowBy();
  });
  $('#filterByTown').change( function(){
    filterRowBy();
  });
  $('#filterByRegPriceFrom').keyup( function(){
    filterRowBy();
  });
  $('#filterByRegPriceTo').keyup( function(){
    filterRowBy();
  });
  $('#filterByUserPercentFrom').keyup( function(){
    filterRowBy();
  });
  $('#filterByUserPercentTo').keyup( function(){
    filterRowBy();
  });
  $('#filterByUserPriceFrom').keyup( function(){
    filterRowBy();
  });
  $('#filterByUserPriceTo').keyup( function(){
    filterRowBy();
  });
  filterRowBy();
}

if(window.top == window) {
  var script = document.createElement("script");
  script.textContent = '(' + run.toString() + ')();';
  document.documentElement.appendChild(script);
}