airflow2.9.3

"魔改 airflow2.9.3 的显示"

// ==UserScript==
// @name        airflow2.9.3
// @namespace   thedream
// @description "魔改 airflow2.9.3 的显示"
// @version     2.9.3
// @include     http://airflow-ins1.thedream.cc/*
// @include     http://airflow-ins2.thedream.cc/*
// @grant       none
// @author thedream
// ==/UserScript==

(function () {
    'use strict';

    var dtd = null;

    function addMenu() {

        console.log("执行: addMenu")

        var $ul = $(".navbar-nav .dropdown").eq(1).find("ul")
        $ul.find('li').eq(4).after('<li><a href="/taskinstance/list/?_oc_TaskInstanceModelView=start_date&_od_TaskInstanceModelView=desc" data-original-title="" title="">Task Instances (Ordered)</a></li>')
        $ul.find('li').eq(5).after('<li><a href="/taskinstance/list/?_flt_3_state=failed&_oc_TaskInstanceModelView=start_date&_od_TaskInstanceModelView=desc" data-original-title="" title="">Task Instances (Failed)</a></li>')
    }

    function deleteTh() {

        if (!location.pathname.startsWith('/taskinstance/list')) {
            return
        }

        console.log("执行: deleteTh")

        var len = 0

        do {
            var $ths = $(".table thead tr th")
            var $name = $($ths[len]).find('a').text().replace(/\s*/g, "")
            // console.log('name: ' + $name)
            var $name1 = $($ths[len]).text().replace(/\s*/g, "")
            // console.log('name1: ' + $name1)
            if ($name == 'QueuedByJobId' || $name1 == "ExternalExecutorId" || $name == 'Pool' || $name == 'Queue' || $name == 'Unixname' || $name == 'Hostname' || $name == 'RunId' || $name == 'MapIndex' || $name == 'LogicalDate' || $name1 == 'Note' || $name == 'JobId') {
                $($ths[len]).remove()
                deleteTd(len)
            } else {
                len++
            }
        } while (len < $ths.length)
    }

    function deleteTd(idx) {
        dtd = $.Deferred()
        var $trs = $(".table tbody tr")
        $trs.each(function () {
            var $td = $(this).find('td')
            $($td[idx]).remove()
        })
        dtd.resolve();
        return dtd
    }

    function addTitle() {

        if (!location.pathname.startsWith('/home')) {
            return
        }

        console.log("执行: addTitle")

        var $trs = $("body > div.container > div.row > div.dags-table-wrap > div > table > tbody > tr")
        $trs.each(function () {
            var txt = $(this).find("td").eq(1).find("a strong").text()
            var attrVal = $(this).find("td").eq(1).find("a").attr('data-original-title')
            if (attrVal) {
                $(this).find("td").eq(1).find("a strong").text(txt + ' - ' + attrVal + "")
            }
        })

    }

    function getUrlParam(name) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
        var r = window.location.search.substr(1).match(reg);  //匹配目标参数
        if (r != null) return unescape(r[2]);
        return null; //返回参数值
    }

    function setSearchParam() {
        let val = getUrlParam('_od_TaskInstanceModelView')
        $("#filter_form button").css({"height": "30px"})
        $("#filter_form").append(`
                        <a href="javascript:;" class="btn remove-filter" style="margin-left:5px;height: 30px;line-height: 16px;"><span class="close-icon"></span>根据 start date 排序: </a>
                        <input name="_oc_TaskInstanceModelView" type="hidden" value="start_date"></input>
                        <select name="_od_TaskInstanceModelView"
                                value="" id="start_date_select"
                                style="background-color:#ffffff;padding:0 8px;height: 30px;border-color:#ccc;outline: none;
                                border-radius: 4px;font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;color: #555555;
                                width: 150px;line-height:16px;vertical-align:middle;margin-left:5px;"
                                >
                            <option value="desc">desc</option>
                            <option value="asc">asc</option>
                        </select>`)
        if (val === "asc") {
            $("#start_date_select").find('option').eq(1).attr("selected", "selected")
        }
    }

    addMenu()
    deleteTh()
    addTitle()
    let pathname = window.location.pathname
    if (pathname === "/taskinstance/list/") {
        setSearchParam()
    }
})()