UNPKG

2.21 kBJavaScriptView Raw
1const puppeteer = require('puppeteer');
2 cp = require('child_process');
3 fs = require('fs'),
4 del = require('del'),
5 gulp = require('gulp'),
6 plumber = require('gulp-plumber'),
7 browserSync = require('browser-sync');
8
9const viewportSize = {
10 width: 1600,
11 height: 1000
12};
13
14const clipping = {
15 x: 0,
16 y: 0,
17 width: 1600,
18 height: 1000
19}
20
21
22async function timeout(ms) {
23 return new Promise(resolve => setTimeout(resolve, ms));
24}
25
26module.exports = (gulp, config) => {
27
28 const isDist = config.flags.isDist;
29 const rebuild = config.flags.rebuildShowcase;
30 const docs = isDist || rebuild ? true : config.flags.docs;
31
32 const screenshotDir = config.src.showcase_screenshots_dir;
33 const websiteList = config.data.showcase;
34
35 return async () => {
36 if (rebuild) {
37 await del(screenshotDir);
38 }
39
40 if (docs) {
41 const browser = await puppeteer.launch( { headless: true } );
42 const page = await browser.newPage();
43 await page.setViewport(viewportSize);
44
45 if (!fs.existsSync(screenshotDir)){
46 fs.mkdirSync(screenshotDir);
47 }
48
49 for (let i = 0; i < websiteList.length; i++) {
50 const url = websiteList[i].screenshotUrl;
51 const imageName = screenshotDir + websiteList[i].screenshotName + '.png';
52
53 if (fs.existsSync(imageName)) {
54 console.log('Skipped ' + imageName);
55 } else {
56 await page.goto(`${url}`, { waitUntil: 'networkidle2' });
57
58 if (websiteList[i].delayAmount) {
59 await page.evaluate(() => { window.scrollBy(0, window.innerHeight); })
60 await timeout(websiteList[i].delayAmount);
61 }
62
63 await page.screenshot({path: imageName, clip: clipping});
64 }
65 }
66
67 await browser.close();
68
69 await cp.spawn('./gulp_tasks/resize_showcase.sh');
70
71 console.log("Finished generating screenshots.");
72
73 await gulp.src(config.src.showcase_screenshots)
74 .pipe(plumber({
75 errorHandler: err => {
76 console.error(err);
77 }
78 }))
79 .pipe(gulp.dest(config.dist.showcase_screenshots))
80 .pipe(browserSync.reload({stream: true}));
81 }
82 };
83
84 return () => {
85
86 }
87};