mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-09 16:32:39 +01:00
Teach ./bin/celerity
about sprite maps
Summary: Add `./bin/celerity sprites`, to replace script `./scripts/celerity/generate_sprites.php`. Also make new workflow run `./bin/celerity map` at the same time. Fixes T15437. Test Plan: Changes a file that goes in the sprites, run new command Reviewers: O1 Blessed Committers, speck Reviewed By: O1 Blessed Committers, speck Subscribers: speck, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno Maniphest Tasks: T15437 Differential Revision: https://we.phorge.it/D25274
This commit is contained in:
parent
d8d65f3f87
commit
cb938d869c
3 changed files with 113 additions and 77 deletions
|
@ -3,80 +3,6 @@
|
||||||
|
|
||||||
require_once dirname(dirname(__FILE__)).'/__init_script__.php';
|
require_once dirname(dirname(__FILE__)).'/__init_script__.php';
|
||||||
|
|
||||||
$args = new PhutilArgumentParser($argv);
|
echo pht('This script was replaced with `%s`!.', './bin/celerity sprites');
|
||||||
$args->setTagline(pht('regenerate CSS sprite sheets'));
|
echo "\n";
|
||||||
$args->setSynopsis(<<<EOHELP
|
exit(13);
|
||||||
**sprites**
|
|
||||||
Rebuild CSS sprite sheets.
|
|
||||||
|
|
||||||
EOHELP
|
|
||||||
);
|
|
||||||
$args->parseStandardArguments();
|
|
||||||
$args->parse(
|
|
||||||
array(
|
|
||||||
array(
|
|
||||||
'name' => 'force',
|
|
||||||
'help' => pht('Force regeneration even if sources have not changed.'),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
|
|
||||||
$root = dirname(phutil_get_library_root('phabricator'));
|
|
||||||
$webroot = $root.'/webroot/rsrc';
|
|
||||||
$webroot = Filesystem::readablePath($webroot);
|
|
||||||
|
|
||||||
$generator = new CeleritySpriteGenerator();
|
|
||||||
|
|
||||||
$sheets = array(
|
|
||||||
'tokens' => $generator->buildTokenSheet(),
|
|
||||||
'login' => $generator->buildLoginSheet(),
|
|
||||||
);
|
|
||||||
|
|
||||||
list($err) = exec_manual('optipng');
|
|
||||||
if ($err) {
|
|
||||||
$have_optipng = false;
|
|
||||||
echo phutil_console_format(
|
|
||||||
"<bg:red> %s </bg> %s\n%s\n",
|
|
||||||
pht('WARNING'),
|
|
||||||
pht('`%s` not found in PATH.', 'optipng'),
|
|
||||||
pht('Sprites will not be optimized! Install `%s`!', 'optipng'));
|
|
||||||
} else {
|
|
||||||
$have_optipng = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($sheets as $name => $sheet) {
|
|
||||||
|
|
||||||
$sheet->setBasePath($root);
|
|
||||||
|
|
||||||
$manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json';
|
|
||||||
if (!$args->getArg('force')) {
|
|
||||||
if (Filesystem::pathExists($manifest_path)) {
|
|
||||||
$data = Filesystem::readFile($manifest_path);
|
|
||||||
$data = phutil_json_decode($data);
|
|
||||||
if (!$sheet->needsRegeneration($data)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$sheet
|
|
||||||
->generateCSS($webroot."/css/sprite-{$name}.css")
|
|
||||||
->generateManifest($root."/resources/sprite/manifest/{$name}.json");
|
|
||||||
|
|
||||||
foreach ($sheet->getScales() as $scale) {
|
|
||||||
if ($scale == 1) {
|
|
||||||
$sheet_name = "sprite-{$name}.png";
|
|
||||||
} else {
|
|
||||||
$sheet_name = "sprite-{$name}-X{$scale}.png";
|
|
||||||
}
|
|
||||||
|
|
||||||
$full_path = "{$webroot}/image/{$sheet_name}";
|
|
||||||
$sheet->generateImage($full_path, $scale);
|
|
||||||
|
|
||||||
if ($have_optipng) {
|
|
||||||
echo pht('Optimizing...')."\n";
|
|
||||||
phutil_passthru('optipng -o7 -clobber %s', $full_path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
echo pht('Done.')."\n";
|
|
||||||
|
|
|
@ -318,6 +318,7 @@ phutil_register_library_map(array(
|
||||||
'CelerityDefaultPostprocessor' => 'applications/celerity/postprocessor/CelerityDefaultPostprocessor.php',
|
'CelerityDefaultPostprocessor' => 'applications/celerity/postprocessor/CelerityDefaultPostprocessor.php',
|
||||||
'CelerityHighContrastPostprocessor' => 'applications/celerity/postprocessor/CelerityHighContrastPostprocessor.php',
|
'CelerityHighContrastPostprocessor' => 'applications/celerity/postprocessor/CelerityHighContrastPostprocessor.php',
|
||||||
'CelerityLargeFontPostprocessor' => 'applications/celerity/postprocessor/CelerityLargeFontPostprocessor.php',
|
'CelerityLargeFontPostprocessor' => 'applications/celerity/postprocessor/CelerityLargeFontPostprocessor.php',
|
||||||
|
'CelerityManagementGenerateSpritesWorkflow' => 'applications/celerity/management/CelerityManagementGenerateSpritesWorkflow.php',
|
||||||
'CelerityManagementMapWorkflow' => 'applications/celerity/management/CelerityManagementMapWorkflow.php',
|
'CelerityManagementMapWorkflow' => 'applications/celerity/management/CelerityManagementMapWorkflow.php',
|
||||||
'CelerityManagementSyntaxWorkflow' => 'applications/celerity/management/CelerityManagementSyntaxWorkflow.php',
|
'CelerityManagementSyntaxWorkflow' => 'applications/celerity/management/CelerityManagementSyntaxWorkflow.php',
|
||||||
'CelerityManagementWorkflow' => 'applications/celerity/management/CelerityManagementWorkflow.php',
|
'CelerityManagementWorkflow' => 'applications/celerity/management/CelerityManagementWorkflow.php',
|
||||||
|
@ -6311,6 +6312,7 @@ phutil_register_library_map(array(
|
||||||
'CelerityDefaultPostprocessor' => 'CelerityPostprocessor',
|
'CelerityDefaultPostprocessor' => 'CelerityPostprocessor',
|
||||||
'CelerityHighContrastPostprocessor' => 'CelerityPostprocessor',
|
'CelerityHighContrastPostprocessor' => 'CelerityPostprocessor',
|
||||||
'CelerityLargeFontPostprocessor' => 'CelerityPostprocessor',
|
'CelerityLargeFontPostprocessor' => 'CelerityPostprocessor',
|
||||||
|
'CelerityManagementGenerateSpritesWorkflow' => 'CelerityManagementWorkflow',
|
||||||
'CelerityManagementMapWorkflow' => 'CelerityManagementWorkflow',
|
'CelerityManagementMapWorkflow' => 'CelerityManagementWorkflow',
|
||||||
'CelerityManagementSyntaxWorkflow' => 'CelerityManagementWorkflow',
|
'CelerityManagementSyntaxWorkflow' => 'CelerityManagementWorkflow',
|
||||||
'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
'CelerityManagementWorkflow' => 'PhabricatorManagementWorkflow',
|
||||||
|
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
final class CelerityManagementGenerateSpritesWorkflow
|
||||||
|
extends CelerityManagementWorkflow {
|
||||||
|
|
||||||
|
protected function didConstruct() {
|
||||||
|
$this
|
||||||
|
->setName('sprites')
|
||||||
|
->setExamples('**sprites** [options]')
|
||||||
|
->setSynopsis(pht('Rebuild CSS sprite sheets.'))
|
||||||
|
->setArguments(
|
||||||
|
array(
|
||||||
|
array(
|
||||||
|
'name' => 'force',
|
||||||
|
'help' => pht('Force regeneration even no sources have changed.'),
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'name' => 'no-map',
|
||||||
|
'help' =>
|
||||||
|
pht(
|
||||||
|
'Do not invoke `%s` after updating sprites',
|
||||||
|
'celerity map'),
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(PhutilArgumentParser $args) {
|
||||||
|
$resources_map = CelerityPhysicalResources::getAll();
|
||||||
|
|
||||||
|
$console = PhutilConsole::getConsole();
|
||||||
|
|
||||||
|
$root = dirname(phutil_get_library_root('phorge'));
|
||||||
|
$webroot = $root.'/webroot/rsrc';
|
||||||
|
$webroot = Filesystem::readablePath($webroot);
|
||||||
|
|
||||||
|
$generator = new CeleritySpriteGenerator();
|
||||||
|
|
||||||
|
$sheets = array(
|
||||||
|
'tokens' => $generator->buildTokenSheet(),
|
||||||
|
'login' => $generator->buildLoginSheet(),
|
||||||
|
);
|
||||||
|
|
||||||
|
list($err) = exec_manual('optipng');
|
||||||
|
if ($err) {
|
||||||
|
$have_optipng = false;
|
||||||
|
$console->writeErr(
|
||||||
|
"<bg:red> %s </bg> %s\n%s\n",
|
||||||
|
pht('WARNING'),
|
||||||
|
pht('`%s` not found in PATH.', 'optipng'),
|
||||||
|
pht('Sprites will not be optimized! Install `%s`!', 'optipng'));
|
||||||
|
} else {
|
||||||
|
$have_optipng = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($sheets as $name => $sheet) {
|
||||||
|
|
||||||
|
$sheet->setBasePath($root);
|
||||||
|
|
||||||
|
$manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json';
|
||||||
|
if (!$args->getArg('force')) {
|
||||||
|
if (Filesystem::pathExists($manifest_path)) {
|
||||||
|
$data = Filesystem::readFile($manifest_path);
|
||||||
|
$data = phutil_json_decode($data);
|
||||||
|
if (!$sheet->needsRegeneration($data)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$sheet
|
||||||
|
->generateCSS($webroot."/css/sprite-{$name}.css")
|
||||||
|
->generateManifest($root."/resources/sprite/manifest/{$name}.json");
|
||||||
|
|
||||||
|
foreach ($sheet->getScales() as $scale) {
|
||||||
|
if ($scale == 1) {
|
||||||
|
$sheet_name = "sprite-{$name}.png";
|
||||||
|
} else {
|
||||||
|
$sheet_name = "sprite-{$name}-X{$scale}.png";
|
||||||
|
}
|
||||||
|
|
||||||
|
$full_path = "{$webroot}/image/{$sheet_name}";
|
||||||
|
$sheet->generateImage($full_path, $scale);
|
||||||
|
|
||||||
|
if ($have_optipng) {
|
||||||
|
$console->writeOut("%s\n", pht('Optimizing...'));
|
||||||
|
phutil_passthru('optipng -o7 -clobber %s', $full_path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$run_map = !$args->getArg('no-map');
|
||||||
|
|
||||||
|
if ($run_map) {
|
||||||
|
$console->writeOut(
|
||||||
|
"%s\n",
|
||||||
|
pht('Done generating sprites - updating map...'));
|
||||||
|
$map_flow = id($args->getWorkflows())['map'];
|
||||||
|
// this is very hacky, but it works because `map` has no arguments.
|
||||||
|
$map_flow->execute($args);
|
||||||
|
} else {
|
||||||
|
$console->writeOut("%s\n", pht('Done.'));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue