rordenerena / Mantis High Level Filter

// ==UserScript==
// @name         Mantis High Level Filter
// @namespace    http://zengarden/mantis
// @version      1.0.0.20201104
// @description  Filtra los proyectos de Mantis. Último ID: 404.
// @author       Daniel DAN <daniel@danidan.com>
// @require      https://code.jquery.com/jquery-3.3.1.min.js
// @match        http://zengarden/mantis/*
// @grant        none
// @license MIT
// ==/UserScript==

var $ = window.jQuery;
var combo = $("select[name='top_id']");
var opcionesPorDefecto = combo.find('option')

// NOTA: si se da de alta un nuevo proyecto, es necesario añadirlo a la lista
var opcionesAN = [ '<option value="0" selected="selected">Todos los Proyectos (AN)</option>',
	'<option type="comercial" value="272">GetFace Key</option>',
	'<option type="comercial" value="305">ZenCom Android</option>',
	'<option type="comercial" value="304">intercom-api</option>',
	'<option type="comercial" value="295">ZenCom iOS</option>',
	'<option type="comercial" value="307">intercom-server</option>',
	'<option type="comercial" value="306">intercom-web</option>',
    '<option type="comercial" value="341">lib-zad-ble-android</option>',
    '<option type="comercial" value="359">lib-zad-ble-ios</option>',
	'<option type="otros" value="59">Manual de usuario</option>',
	'<option type="comercial" value="195">MVCH</option>',
	'<option type="comercial" value="191">node-knx-ip</option>',
	'<option type="interna" value="165">TMDManager</option>',
	'<option type="comercial" value="55">TouchMyDesign_AppWeb</option>',
	'<option type="otros" value="62">Traducciones</option>',
	'<option type="comercial" value="223">Xenata</option>',
	'<option type="comercial" value="229">Z-Access</option>',
	'<option type="comercial" value="102">Z41 Android</option>',
	'<option type="comercial" value="63">Z41 iOS</option>',
	'<option type="comercial" value="75">Z41 Servidor</option>',
	'<option type="comercial" value="41">Z41 Update</option>',
    '<option type="comercial" value="402">Z41Web</option>',
	'<option type="comercial" value="283">Z70_COM</option>',
	'<option type="comercial" value="259">Z70_Lite</option>',
	'<option type="comercial" value="197">ZBMS</option>',
	'<option type="interna" value="290">ZenGarden</option>',
	'<option type="interna" value="4">ZenKNX</option>',
    '<option type="comercial" value="396">Zennio-Api-Utils</option>',
	'<option type="interna" value="40">ZenManager</option>',
	'<option type="interna" value="137">ZenProd</option>',
    '<option type="interna" value="345">ZenProject</option>',
	'<option type="interna" value="312">ZenSession</option>',
	'<option type="interna" value="24">ZenTranslate</option>',
	'<option type="interna" value="199">ZM AlmaZen</option>',
	'<option type="interna" value="114">ZM Calendario</option>',
	'<option type="interna" value="115">ZM RRHH</option>',
	'<option type="interna" value="163">ZM ZenMeeting</option>',
    '<option type="comercial" value="377">zrc-server</option>',
    '<option type="comercial" value="403">ZRC-SmartHome</option>',
    '<option type="comercial" value="378">zrc-vm</option>',
    '<option type="comercial" value="376">zrc-webapp</option>',
    '<option type="comercial" value="389">ZSH Cloud</option>',
	'<option type="comercial" value="315">ZSH-API</option>',
    '<option type="comercial" value="404">ZSH-Mail</option>',
	'<option type="comercial" value="201">ZSH_Security</option>',
	'<option type="comercial" value="203">ZSH_SysAdmin</option>'
];

function cargarComboNormal() {
	var valorSeleccionado = combo.val();
	combo.find('option').remove().end().append(opcionesPorDefecto);
	combo.val(valorSeleccionado);
}

function cargarComboAN() {
	var valorSeleccionado = combo.val();
	combo.find('option').remove();
	for(let i=0;i<opcionesAN.length;i++)
	{
		combo.find('option').end().append(opcionesAN[i]);
	}
	combo.val(valorSeleccionado);
}

(function() {
    'use strict';
    var input = $('<label />').html("Filtrar proyectos AN").attr({style: 'margin-right:30px'}).prepend($('<input/>')
    .attr({ type: 'checkbox', id: 'checkBoxFiltro', class: 'checkBoxFiltro'}))
    .on('change', () => {
        if($("#checkBoxFiltro")[0].checked == true)
        {
            cargarComboAN();
        }
        else
        {
            cargarComboNormal();
        }
    })
    .prependTo($("form[name='form_set_project']")[0]);
    input.click();
})();