Path: blob/master/scripts/celerity/generate_sprites.php
12241 views
#!/usr/bin/env php1<?php23require_once dirname(dirname(__FILE__)).'/__init_script__.php';45$args = new PhutilArgumentParser($argv);6$args->setTagline(pht('regenerate CSS sprite sheets'));7$args->setSynopsis(<<<EOHELP8**sprites**9Rebuild CSS sprite sheets.1011EOHELP12);13$args->parseStandardArguments();14$args->parse(15array(16array(17'name' => 'force',18'help' => pht('Force regeneration even if sources have not changed.'),19),20));2122$root = dirname(phutil_get_library_root('phabricator'));23$webroot = $root.'/webroot/rsrc';24$webroot = Filesystem::readablePath($webroot);2526$generator = new CeleritySpriteGenerator();2728$sheets = array(29'tokens' => $generator->buildTokenSheet(),30'login' => $generator->buildLoginSheet(),31);3233list($err) = exec_manual('optipng');34if ($err) {35$have_optipng = false;36echo phutil_console_format(37"<bg:red> %s </bg> %s\n%s\n",38pht('WARNING'),39pht('`%s` not found in PATH.', 'optipng'),40pht('Sprites will not be optimized! Install `%s`!', 'optipng'));41} else {42$have_optipng = true;43}4445foreach ($sheets as $name => $sheet) {4647$sheet->setBasePath($root);4849$manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json';50if (!$args->getArg('force')) {51if (Filesystem::pathExists($manifest_path)) {52$data = Filesystem::readFile($manifest_path);53$data = phutil_json_decode($data);54if (!$sheet->needsRegeneration($data)) {55continue;56}57}58}5960$sheet61->generateCSS($webroot."/css/sprite-{$name}.css")62->generateManifest($root."/resources/sprite/manifest/{$name}.json");6364foreach ($sheet->getScales() as $scale) {65if ($scale == 1) {66$sheet_name = "sprite-{$name}.png";67} else {68$sheet_name = "sprite-{$name}-X{$scale}.png";69}7071$full_path = "{$webroot}/image/{$sheet_name}";72$sheet->generateImage($full_path, $scale);7374if ($have_optipng) {75echo pht('Optimizing...')."\n";76phutil_passthru('optipng -o7 -clobber %s', $full_path);77}78}79}8081echo pht('Done.')."\n";828384