diff --git a/conf/base.yaml b/conf/base.yaml index b937fb6576..3f0ddf1fa5 100644 --- a/conf/base.yaml +++ b/conf/base.yaml @@ -1,5 +1,11 @@ baseUrl: http://localhost:8000 capture: + pages: + - id: home + path: '' + selector: '#all' + viewport: [1400, 900] + home: - id: area-bump - id: bar-horizontal diff --git a/scripts/capture.js b/scripts/capture.js index 4c4d9fab7e..a2ae458494 100644 --- a/scripts/capture.js +++ b/scripts/capture.js @@ -24,6 +24,7 @@ const websiteDir = Path.join(projectDir, 'website') const websiteCapturesDir = Path.join(websiteDir, 'src', 'assets', 'captures') const websiteIconsDir = Path.join(websiteDir, 'src', 'assets', 'icons') const websiteHomeDemosDir = Path.join(websiteCapturesDir, 'home') +const websitePagesDir = Path.join(websiteCapturesDir, 'pages') const getChartFileName = (chart, flavor) => `${chart}${flavor !== DEFAULT_FLAVOR ? `-${flavor}` : ''}.png` const getChartWebsiteFilePath = (chart, flavor) => Path.join( websiteCapturesDir, @@ -44,6 +45,10 @@ const getChartIconFilePath = (chart, variant) => Path.join( `${chart}-${variant}.png` ) const getHomeDemoFilePath = (id) => Path.join(websiteHomeDemosDir, `${id}.png`) +const getPageUrl = (path) => { + return `${Path.join(config.get('baseUrl'), path)}/?capture=1` +} +const getPageFilePath = (id) => Path.join(websitePagesDir, `${id}.png`) const delay = (time) => new Promise((resolve) => { setTimeout(resolve, time) @@ -71,7 +76,6 @@ const captureChart = async (page, { pkg, chart, flavor, theme }) => { } const clip = await element.boundingBox() - const websiteFilePath = getChartWebsiteFilePath(chart, flavor) // initially saved to the package doc dir @@ -227,8 +231,64 @@ const captureHomeDemos = async () => { } } +const capturePages = async () => { + const pages = config.get('capture').pages + + console.log(chalk`{yellow Starting capture for ${pages.length} page(s)}`) + console.log('') + + try { + const browser = await puppeteer.launch({ + headless: true + }) + const page = await browser.newPage() + + for (let pageConfig of pages) { + const url = getPageUrl(pageConfig.path) + const selector = pageConfig.selector + + console.log(chalk`{yellow Capturing page {white ${pageConfig.id}}} {dim (url: ${url}, selector: ${selector})}`) + + await page.setViewport({ + width: pageConfig.viewport[0], + height: pageConfig.viewport[1], + }) + await page.goto(url) + + await page.waitFor(selector) + const element = await page.$(selector) + if (element === null) { + throw new Error(`Unable to find element matching selector: ${selector} (url: ${url})`) + } + + const clip = await element.boundingBox() + const pageFilePath = getPageFilePath(pageConfig.id) + + await page.screenshot({ + path: pageFilePath, + clip, + omitBackground: true, + }) + + console.log(chalk`{green saved to {white ${pageFilePath}}}`) + } + + await browser.close() + + console.log(chalk`{green Done!}`) + } catch (error) { + console.log('') + console.error(chalk`{red oops, something went wrong :(}`) + console.error(error) + + process.exit(1) + } +} + + const run = async () => { - await captureHomeDemos() + await capturePages() + // await captureHomeDemos() // await captureCharts() // await captureIcons() } diff --git a/website/src/assets/captures/pages/home.png b/website/src/assets/captures/pages/home.png new file mode 100644 index 0000000000..f0853a176a Binary files /dev/null and b/website/src/assets/captures/pages/home.png differ diff --git a/website/src/components/home/Home.tsx b/website/src/components/home/Home.tsx index a82c840f64..ed0ca89799 100644 --- a/website/src/components/home/Home.tsx +++ b/website/src/components/home/Home.tsx @@ -26,7 +26,7 @@ import logoImg from '../../assets/nivo-logo.png' const Home = () => { return ( - +