PRF Sistema SEI - Lib - Filtra Processos

Biblioteca para compatilibilidade em filtrar processos

Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta // @require https://update.greasyfork.org/scripts/27243/174320/PRF%20Sistema%20SEI%20-%20Lib%20-%20Filtra%20Processos.js

// ==UserScript==
// @name        PRF Sistema SEI - Lib - Filtra Processos
// @namespace   br.gov.prf.sei.scripts.lib.filtraprocessos
// @description Biblioteca para compatilibilidade em filtrar processos
// @require     https://code.jquery.com/jquery-2.2.4.min.js
// @author      Marcelo Barros
// @version     1.1.0
// ==/UserScript==

var selectorTrDentroTabela = 'tbody>tr[class^="infraTr"]';
var attributeFiltro = 'data-filtro';
var prefixFiltroTabela = 'filtro';
var prefixFiltroTrMostrar = 'mostrar';
var separator = ',';

function addClassAttr(element, attr, clazz) {
    var attributeArray;
    var attrValue = element.attr(attr);
    if (attrValue) {
        attributeArray = attrValue.split(separator);
        if (attributeArray.indexOf(clazz) === -1)
            attributeArray.push(clazz);
    } else {
        attributeArray = [clazz];
    }
    element.attr(attr, attributeArray.join(separator));
    return element;
}

function removeClassAttr(element, attr, clazz) {
    var attrValue = element.attr(attr);
    if (attrValue) {
        var attributeArray = attrValue.split(separator);
        var posClazz = attributeArray.indexOf(clazz);
        if (posClazz !== -1) {
            attributeArray.splice(posClazz, 1);
            if (attributeArray.length)
                element.attr(attr, attributeArray);
            else
                element.removeAttr(attr);
        }
    }
    return element;
}

function toggleClassAttr(element, attr, clazz, value) {
    if (value) return addClassAttr(element, attr, clazz);
    else return removeClassAttr(element, attr, clazz);
}

function hasClassAttr(element, attr, clazz) {
    var attrValue = element.attr(attr);
    if (attrValue) return attrValue.split(separator).indexOf(clazz) !== -1;
    return false;
}

function filtrarTabela(tabela, trs, sufix, isShowTr) {
    addClassAttr(tabela, attributeFiltro, prefixFiltroTabela + sufix);
    if (trs === null) trs = tabela.find(selectorTrDentroTabela);
    trs.each(function (index, element) {
        toggleClassAttr($(element), attributeFiltro, prefixFiltroTrMostrar + sufix, isShowTr(index, element));
    });
    atualizaFiltro(tabela, trs);
}

function atualizaFiltro(tabela, trs) {
    var checkbox;
    var elementr;
    var possuiTodasClasses;
    var arrayFiltroClasse = [];
    $.each((tabela.attr(attributeFiltro) || '').split(separator), function(index, element) {
        if (element.indexOf(prefixFiltroTabela) === 0)
            arrayFiltroClasse.push(prefixFiltroTrMostrar + element.substring(prefixFiltroTabela.length));
    });

    var quantidadeMostrar = 0;
    var arrayFiltroClasseLen = arrayFiltroClasse.length;
    trs.each(function (index, element) {
        possuiTodasClasses = true;
        elementr = $(element);
        for (var i = 0; i < arrayFiltroClasseLen; i++) {
            if (!hasClassAttr(elementr, attributeFiltro, arrayFiltroClasse[i])) {
                possuiTodasClasses = false; break;
            }
        }

        checkbox = $(element.children[0].children[1]);
        if (possuiTodasClasses) {
            element.style.display = 'table-row';
            quantidadeMostrar++;
        } else {
            element.style.display = 'none';
            if (checkbox.prop('checked')) checkbox.click();
        }
        checkbox.prop('disabled', !possuiTodasClasses);
    });
    tabela.children('caption').text(quantidadeMostrar + ' registro' + (quantidadeMostrar === 1 ? '' : 's') + ':');
}

function removerFiltroTabela(tabela, trs, sufix) {
    removeClassAttr(tabela, attributeFiltro, prefixFiltroTabela + sufix);
    if (trs === null) trs = tabela.find(selectorTrDentroTabela);
    trs.each(function() {
        removeClassAttr($(this), attributeFiltro, prefixFiltroTrMostrar + sufix);
    });
    atualizaFiltro(tabela, trs);
}