Working on stuff
This commit is contained in:
		
							parent
							
								
									90dbd18b26
								
							
						
					
					
						commit
						2e4f86979b
					
				
							
								
								
									
										69
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										69
									
								
								index.js
									
									
									
									
									
								
							@ -82,6 +82,9 @@ function help() {
 | 
			
		||||
 | 
			
		||||
    const flattenLong = "\x1b[32m--flatten\x1b[0m";
 | 
			
		||||
 | 
			
		||||
    const allMasksShort = "\x1b[32m-a\x1b[0m";
 | 
			
		||||
    const allMasksLong = "\x1b[32m--all-masks\x1b[0m";
 | 
			
		||||
 | 
			
		||||
    println(`${name} ${version}
 | 
			
		||||
${description}
 | 
			
		||||
 | 
			
		||||
@ -95,7 +98,9 @@ ${args}
 | 
			
		||||
    ${thresholdShort}, ${thresholdLong} <VALUE>   Threshold for RGB mask computation (between 0 and 1)
 | 
			
		||||
    ${shrinkShort}, ${shrinkLong}              Shrink horizontally leaves' bounding boxes
 | 
			
		||||
    ${flattenLong}                 Flattens the tree into a list before serializing in JSON
 | 
			
		||||
    ${forceShort}, ${forceLong}               Delete the output directory before generating masks it again`);
 | 
			
		||||
    ${forceShort}, ${forceLong}               Delete the output directory before generating masks it again
 | 
			
		||||
    ${allMasksShort}, ${allMasksLong}           Compute and save all masks`
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function main() {
 | 
			
		||||
@ -106,6 +111,7 @@ async function main() {
 | 
			
		||||
    let forceMode = false;
 | 
			
		||||
    let shrinkBoxes = true;
 | 
			
		||||
    let flatten = false;
 | 
			
		||||
    let allMasks = false;
 | 
			
		||||
 | 
			
		||||
    let argIndex = 2;
 | 
			
		||||
 | 
			
		||||
@ -152,6 +158,12 @@ async function main() {
 | 
			
		||||
                help();
 | 
			
		||||
                process.exit(0);
 | 
			
		||||
 | 
			
		||||
            case "-a":
 | 
			
		||||
            case "--all-masks":
 | 
			
		||||
                allMasks = true;
 | 
			
		||||
                argIndex++;
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                error("unknown option " + process.argv[argIndex]);
 | 
			
		||||
                help();
 | 
			
		||||
@ -167,6 +179,11 @@ async function main() {
 | 
			
		||||
        process.exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (allMasks && outputDir === null) {
 | 
			
		||||
        error("in order to compute all masks, you need to specify an output directory");
 | 
			
		||||
        process.exit(1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (threshold !== undefined && isNaN(threshold)) {
 | 
			
		||||
        error(tmp + " is not a valid threshold value");
 | 
			
		||||
        process.exit(1);
 | 
			
		||||
@ -257,8 +274,10 @@ async function main() {
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        // Take a first screenshot
 | 
			
		||||
        await page.screenshot({path: (outputDir === null ? __dirname : outputDir) + '/' + 'screenshot1.png'});
 | 
			
		||||
        if (outputDir !== null) {
 | 
			
		||||
            // Take a first screenshot
 | 
			
		||||
            await page.screenshot({path: outputDir + '/' + 'screenshot1.png'});
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Edit the page to shrink elements in order to get better bounding boxes
 | 
			
		||||
        if (shrinkBoxes) {
 | 
			
		||||
@ -268,32 +287,30 @@ async function main() {
 | 
			
		||||
            eprintln();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Take another screenshot and check the modification we made didn't change the layout of the page
 | 
			
		||||
        await page.screenshot({path: (outputDir === null ? __dirname : outputDir) + '/' + 'screenshot2.png'});
 | 
			
		||||
        if (outputDir !== null) {
 | 
			
		||||
            // Take another screenshot and check the modification we made didn't change the layout of the page
 | 
			
		||||
            await page.screenshot({path: outputDir + '/' + 'screenshot2.png'});
 | 
			
		||||
 | 
			
		||||
        // Compare both screenshots
 | 
			
		||||
        let file1 = await fs.readFile((outputDir === null ? __dirname : outputDir) + '/' + 'screenshot1.png');
 | 
			
		||||
        let file2 = await fs.readFile((outputDir === null ? __dirname : outputDir) + '/' + 'screenshot2.png');
 | 
			
		||||
        let filesAreSame = file1.map((x, i) => x === file2[i]).reduce((a, b) => a && b, true);
 | 
			
		||||
            // Compare both screenshots
 | 
			
		||||
            let file1 = await fs.readFile(outputDir + '/' + 'screenshot1.png');
 | 
			
		||||
            let file2 = await fs.readFile(outputDir + '/' + 'screenshot2.png');
 | 
			
		||||
            let filesAreSame = file1.map((x, i) => x === file2[i]).reduce((a, b) => a && b, true);
 | 
			
		||||
 | 
			
		||||
        if (!filesAreSame) {
 | 
			
		||||
            // Check psnr
 | 
			
		||||
            let psnr = await image.psnr(
 | 
			
		||||
                (outputDir === null ? __dirname : outputDir) + '/' + 'screenshot1.png',
 | 
			
		||||
                (outputDir === null ? __dirname : outputDir) + '/' + 'screenshot2.png'
 | 
			
		||||
            );
 | 
			
		||||
            if (!filesAreSame) {
 | 
			
		||||
                // Check psnr
 | 
			
		||||
                let psnr = await image.psnr(outputDir + '/' + 'screenshot1.png', outputDir + '/' + 'screenshot2.png');
 | 
			
		||||
 | 
			
		||||
            // Crash if they're different
 | 
			
		||||
            if (psnr > 0) {
 | 
			
		||||
                warning(filename + " produced slight diff: psnr = " + psnr);
 | 
			
		||||
            } else {
 | 
			
		||||
                await error("page edit changed the layout: psnr = " + psnr);
 | 
			
		||||
                process.exit(1);
 | 
			
		||||
                // Crash if they're different
 | 
			
		||||
                if (psnr > 0) {
 | 
			
		||||
                    warning(filename + " produced slight diff: psnr = " + psnr);
 | 
			
		||||
                } else {
 | 
			
		||||
                    await error("page edit changed the layout: psnr = " + psnr);
 | 
			
		||||
                    process.exit(1);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if (outputDir !== null) {
 | 
			
		||||
            // Produce a screenshot without text
 | 
			
		||||
 | 
			
		||||
@ -324,7 +341,7 @@ async function main() {
 | 
			
		||||
 | 
			
		||||
        // Analyse the root and output the result
 | 
			
		||||
        info("performing analysis");
 | 
			
		||||
        let analyse = await analyseElement(root, page, outputDir, threshold);
 | 
			
		||||
        let analyse = await analyseElement(root, page, outputDir, allMasks, threshold);
 | 
			
		||||
        info("analysis done");
 | 
			
		||||
 | 
			
		||||
        // Append the current slide to the output
 | 
			
		||||
@ -393,7 +410,7 @@ async function addSpan(element) {
 | 
			
		||||
 | 
			
		||||
// Recursive function to analyse an HTML element.
 | 
			
		||||
// The output is written in hierarchy.
 | 
			
		||||
async function analyseElement(element, page, outputDir = null, threshold = undefined) {
 | 
			
		||||
async function analyseElement(element, page, outputDir = null, allMasks = false, threshold = undefined) {
 | 
			
		||||
    // Get some information on the element
 | 
			
		||||
    let tagAttr = await element.getProperty('tagName');
 | 
			
		||||
    let tagName = await tagAttr.jsonValue();
 | 
			
		||||
@ -424,7 +441,7 @@ async function analyseElement(element, page, outputDir = null, threshold = undef
 | 
			
		||||
 | 
			
		||||
    analyse.children = [];
 | 
			
		||||
 | 
			
		||||
    if (outputDir !== null) {
 | 
			
		||||
    if (outputDir !== null && allMasks) {
 | 
			
		||||
 | 
			
		||||
        info("computing screenshots \x1b[34m" + analyse.uuid + "\x1b[0m");
 | 
			
		||||
 | 
			
		||||
@ -462,7 +479,7 @@ async function analyseElement(element, page, outputDir = null, threshold = undef
 | 
			
		||||
 | 
			
		||||
        for (let child of children) {
 | 
			
		||||
            // Recursively analyse the children
 | 
			
		||||
            analyse.children.push(await analyseElement(child, page, outputDir, threshold));
 | 
			
		||||
            analyse.children.push(await analyseElement(child, page, outputDir, allMasks, threshold));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user