diff --git a/gen-screenshot.ts b/gen-screenshot.ts new file mode 100755 index 0000000..39396b5 --- /dev/null +++ b/gen-screenshot.ts @@ -0,0 +1,58 @@ +#! /usr/bin/env -S deno run --allow-run --allow-read --allow-write +// Generate the screenshot and its thumbnail for a project. +// To install the dependencies on Debian/Ubuntu: +// $ sudo apt install imagemagick optipng wkhtmltopdf + +const templateFile = "screenshot-page.html"; +const temporaryFile = "temp.html"; + +const slugify = (str: string) => + str + .toLowerCase() + .replace(/[^a-z0-9]+/g, "-") + .replace(/(^-|-$)/g, ""); + +if (Deno.args.length !== 2) { + console.error("usage: generate-screenshot.ts name css-file"); + Deno.exit(1); +} + +const screenshotFile = `${slugify(Deno.args[0])}.png`; +const cssFile = Deno.args[1]; + +try { + const htmlTemplate = await Deno.readTextFile(templateFile); + const css = await Deno.readTextFile(cssFile); + const html = htmlTemplate.replace(/%CSS_HERE%/, css); + await Deno.writeTextFile(temporaryFile, html); + + await Deno.run({ + cmd: ["wkhtmltoimage", temporaryFile, `screenshot/${screenshotFile}`], + }).status(); + await Deno.run({ + cmd: [ + "convert", + "-resize", + "25%", + "-adaptive-sharpen", + "10", + `screenshot/${screenshotFile}`, + `thumbnail/${screenshotFile}`, + ], + }).status(); + await Deno.run({ + cmd: [ + "optipng", + "-o", + "5", + "-strip", + "all", + `screenshot/${screenshotFile}`, + `thumbnail/${screenshotFile}`, + ], + }).status(); +} catch (err) { + console.error(err); +} finally { + Deno.remove(temporaryFile); +} diff --git a/generate-item.tcl b/generate-item.tcl deleted file mode 100644 index 6d3c500..0000000 --- a/generate-item.tcl +++ /dev/null @@ -1,43 +0,0 @@ -#! /usr/bin/env tclsh -# Generate the screenshot and its thumbnail for a framework. Print the -# Markdown to add to README.md. To install the dependencies on Debian/Ubuntu: -# $ sudo apt install imagemagick optipng tcl tcllib wkhtmltopdf - -package require fileutil - -proc [info script] {name css github demo} { - set src screenshot-page.html - set dest temp.html - - set filename [slugify $name].png - - fileutil::writeFile $dest [regsub %CSS_HERE% [fileutil::cat $src] $css] - run wkhtmltoimage $dest screenshot/$filename - run convert \ - -resize 25% \ - -adaptive-sharpen 10 \ - screenshot/$filename \ - thumbnail/$filename - run optipng -o5 -strip all screenshot/$filename thumbnail/$filename - - puts ------\n[markup $name $github $demo $filename] -} - -proc slugify text { - string trim [regsub -all {[^[:alnum:]]+} [string tolower $text] -] - -} - -proc run args { - exec {*}$args >@ stdout 2>@ stderr -} - -proc markup {name github demo filename} { - subst -nocommands {### $name - -* [Repository](https://github.com/$github) ![GitHub stars](https://img.shields.io/github/stars/$github?style=flat-square) ![GitHub contributors](https://img.shields.io/github/contributors-anon/$github?style=flat-square) ![Last commit](https://img.shields.io/github/last-commit/$github?style=flat-square) ![GitHub open issues](https://img.shields.io/github/issues-raw/$github?style=flat-square) ![GitHub closed issues](https://img.shields.io/github/issues-closed-raw/$github?style=flat-square) -* [Demo]($demo) - -[![$filename](thumbnail/$filename)](screenshot/$filename)} -} - -[info script] {*}$argv diff --git a/screenshot-page.html b/screenshot-page.html index bbef362..198ba90 100644 --- a/screenshot-page.html +++ b/screenshot-page.html @@ -5,7 +5,9 @@ Lorem ipsum dolor sit amet - +