js/trans.worker.js

/**=====LICENSE STATEMENT START=====
    Translator++ 
    CAT (Computer-Assisted Translation) tools and framework to create quality
    translations and localizations efficiently.
        
    Copyright (C) 2018  Dreamsavior<dreamsavior@gmail.com>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
=====LICENSE STATEMENT END=====*/
const thisWorker = new (require("www/js/CommonWorker.js").Worker)();

thisWorker.process = async function(workerData) {
    if (workerData.command == "calculateHeights") {
        let calculateTableHeight = function(table) {
            if (!table) return;
            let totalLines = 0;
            
            // Step 1: Find the maximum number of lines in any cell
            for (let i = 0; i < table.length; i++) {
                if (!table[i]?.length) continue;
                let thisLength = 1;
                for (let j = 0; j < table[i].length; j++) {
                    if (!table[i][j]) continue;
                    const lines = table[i][j].split('\n').length;
                    if (lines > thisLength) {
                        thisLength = lines;
                    }
                }
                totalLines += thisLength;
            }
        
            // Step 2: Calculate the height
            if (totalLines < table.length) return table.length;
            return totalLines;
        }
        return(calculateTableHeight(workerData.data));
    }    
}
thisWorker.init();