Untitled

 avatar
unknown
javascript
3 months ago
3.3 kB
14
Indexable
(async function () {

    function waitForElement(selector, timeout = 10000) {
        return new Promise((resolve, reject) => {
            const interval = 200;
            let elapsed = 0;

            const timer = setInterval(() => {
                const element = document.querySelector(selector);
                if (element) {
                    clearInterval(timer);
                    resolve(element);
                }
                elapsed += interval;
                if (elapsed >= timeout) {
                    clearInterval(timer);
                    reject("Timeout waiting for " + selector);
                }
            }, interval);
        });
    }

    function delay(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

    const finalResults = [];

    const tbody = document.getElementById("dateRangeLogSummeryTableBody");
    if (!tbody) {
        console.error("Table body not found!");
        return;
    }

    const firstRow = tbody.querySelector("tr");
    if (!firstRow) {
        console.error("No row found!");
        return;
    }

    const logCells = firstRow.querySelectorAll("td.spanWithLog");

    for (let cell of logCells) {

        const icon = cell.querySelector("img.popupIcon");
        if (!icon) continue;

        icon.click();

        // wait for modal to load
        await waitForElement("#dataDivInModel");
        await waitForElement("#worklogs");

        await delay(500); // allow ajax data to populate

        const header = document.getElementById("popupHeader")?.innerText || "";
        const table = document.getElementById("worklogs");

        const rows = table.querySelectorAll("tr");

        const modalData = [];

        rows.forEach((row, index) => {

            if (index === 0) return; // skip header row

            const tds = row.querySelectorAll("td");

            const rowData = [];

            tds.forEach((td, tdIndex) => {
                if (tdIndex === 0 || tdIndex === 1) return; // skip first two columns
                rowData.push(td.innerHTML.trim());
            });

            if (rowData.length > 0) {
                modalData.push(rowData);
            }
        });

        finalResults.push({
            header: header,
            logs: modalData
        });

        // close modal
        document.getElementById("closemodal")?.click();
        await delay(500);
    }

    // ===== Format Output =====

    let formattedText = "";

    finalResults.forEach(group => {

        formattedText += "=====================================\n";
        formattedText += group.header + "\n";
        formattedText += "=====================================\n\n";

        group.logs.forEach(log => {

            // After skipping first 2 columns:
            // log[0] = User
            // log[1] = Time Spent
            // log[2] = Description

            formattedText += "User: " + log[0] + "\n";
            formattedText += "Time Spent: " + log[1] + "\n";
            formattedText += "Description:\n" + log[2] + "\n";
            formattedText += "-------------------------------------\n\n";
        });
    });

    console.log(formattedText);

})();
Editor is loading...
Leave a Comment