1 | const 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 |
|
9 | const viewportSize = {
|
10 | width: 1600,
|
11 | height: 1000
|
12 | };
|
13 |
|
14 | const clipping = {
|
15 | x: 0,
|
16 | y: 0,
|
17 | width: 1600,
|
18 | height: 1000
|
19 | }
|
20 |
|
21 |
|
22 | async function timeout(ms) {
|
23 | return new Promise(resolve => setTimeout(resolve, ms));
|
24 | }
|
25 |
|
26 | module.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 | };
|