Dell DFO Search

Easily search dells DFO listings by filtering information.

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Dell DFO Search
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Easily search dells DFO listings by filtering information.
// @author       Lauchlan Irwin
// @match        http://www1.ap.dell.com/content/topics/segtopic.aspx/products/quickship/*
// @grant        none
// ==/UserScript==

GLOBAL_DEBUG = false;
GLOBAL_SEARCH_TERMS = undefined;
GLOBAL_ROWS = undefined;

//Custom debug function to allow toggling of console logs from
debug = {

    log: GLOBAL_DEBUG == true ? function (string) {
        console.log(string);
    } : function () { },

    error: GLOBAL_DEBUG == true ? function (string) {
        console.error(string);
    } : function () { },

    assert: GLOBAL_DEBUG == true ? function (string) {
        console.assert(string);
    } : function () { }

};

(function () {
    GLOBAL_SEARCH_TERMS = [];
    GLOBAL_ROWS = getRows();

    //Add search bar
    var firstRow = GLOBAL_ROWS[0];
    if (!firstRow) return;

    var searchBar = firstRow.cloneNode(true);
    searchBar.id = "searchBar";


    for (var i = 0; i < searchBar.children.length; i++) {
        var column = searchBar.children[i];
        column.innerHTML = "";

        var input = document.createElement("input");
        input.id = "input" + i;
        input.columnNumber = i;
        input.onchange = function (e) {
            search(e.target.columnNumber);
        };

        GLOBAL_SEARCH_TERMS.push([]);

        column.appendChild(input);
    }

    firstRow.parentElement.insertBefore(searchBar, firstRow);
    console.log(firstRow.parentElement);
    console.log(firstRow);
    return;
}());

function getRows(numberOfRows) {

    var temp = [];
    var tableRows = document.getElementsByTagName("tr");

    for (var el in tableRows) {
        el = tableRows[el];

        if (el.children) {

            if (el.children.length > 1) {

                if (el.children[0].classList.contains("gridCell") ||
                    el.children[0].classList.contains("gridCellAlt")) {

                    temp.push(el);

                    if (numberOfRows == temp.length) {
                        return temp;
                    }

                }

            }

        }

    }

    return temp;
}

function getSearchTerms(colNumber) {

    var input = document.getElementById("input" + colNumber);
    GLOBAL_SEARCH_TERMS[colNumber] = [];

    var individualTerms = input.value.match(/\w(\s?(?:\w))*/g);

    if (individualTerms) {
        for (var singleTerm in individualTerms) {
            GLOBAL_SEARCH_TERMS[colNumber].push(individualTerms[singleTerm]);
        }
    } else {
        GLOBAL_SEARCH_TERMS[colNumber] = [];
    }

    debug.log(GLOBAL_SEARCH_TERMS);

}

function search(columnUpdated) {

    getSearchTerms(columnUpdated);

    for (var i = 0; i < GLOBAL_ROWS.length; i++) {

        debug.log("");

        var row = GLOBAL_ROWS[i];

        if (row.id == "searchBar") continue; //Skip if row is searchBar
        if (!row.children) continue; //Skip if no children property

        var rowPassed = true;
        var columns = row.children;

        for (var j = 0; j < columns.length; j++) {

            var column = columns[j];
            var columnPassed = true;

            var text = column.innerHTML;
            text = text ? text.toLowerCase() : "";
            var searchTerms = GLOBAL_SEARCH_TERMS[j];

            //if nothing to search => search passes automatically
            if (!searchTerms) {
                debug.log("Column PASSED: (no searchTerms) -> " + text);
                columnPassed = true;
                continue;
            } else if (searchTerms.length == 0) {
                debug.log("Column PASSED: (no searchTerms) -> " + text);
                columnPassed = true;
                continue;
            }

            var singleTerm = "";

            for (var n = 0; n < searchTerms.length; n++) {
                singleTerm = searchTerms[n];

                if (!text.includes(singleTerm.toLowerCase())) {
                    debug.log("Column FAILED: (" + singleTerm + ") -> " + text);
                    columnPassed = false;
                    break;
                }

            }

            if (!columnPassed) {
                rowPassed = false;
                break;
            }else{
                debug.log("Column PASSED: (" + document.getElementById("input"+columnUpdated).value + ") -> " + text);
            }

        }

        row.style.display = rowPassed ? "table-row" : "none";

        debug.log(rowPassed ? "    <<Row passed!>>    " : "    ##Row failed##    ");
        debug.log("");
        debug.log("");

    }
}