Фильтр для отчета "аналитика" - "анализ рынков" - "энергопотребление" - "городская энергосеть"
// ==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"> </option>'; var filterByRegion = '<option value="0"> </option>'; var filterByTown = '<option value="0"> </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); }