[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/scripts/celerity/ -> generate_sprites.php (source)

   1  #!/usr/bin/env php
   2  <?php
   3  
   4  require_once dirname(dirname(__FILE__)).'/__init_script__.php';
   5  
   6  $args = new PhutilArgumentParser($argv);
   7  $args->setTagline('regenerate CSS sprite sheets');
   8  $args->setSynopsis(<<<EOHELP
   9  **sprites**
  10      Rebuild CSS sprite sheets.
  11  
  12  EOHELP
  13  );
  14  $args->parseStandardArguments();
  15  $args->parse(
  16    array(
  17      array(
  18        'name'  => 'force',
  19        'help'  => 'Force regeneration even if sources have not changed.',
  20      ),
  21    ));
  22  
  23  $root = dirname(phutil_get_library_root('phabricator'));
  24  $webroot = $root.'/webroot/rsrc';
  25  $webroot = Filesystem::readablePath($webroot);
  26  
  27  $generator = new CeleritySpriteGenerator();
  28  
  29  $sheets = array(
  30    'menu' => $generator->buildMenuSheet(),
  31    'apps' => $generator->buildAppsSheet(),
  32    'conpherence' => $generator->buildConpherenceSheet(),
  33    'apps-large' => $generator->buildAppsLargeSheet(),
  34    'payments' => $generator->buildPaymentsSheet(),
  35    'tokens' => $generator->buildTokenSheet(),
  36    'docs' => $generator->buildDocsSheet(),
  37    'gradient' => $generator->buildGradientSheet(),
  38    'main-header' => $generator->buildMainHeaderSheet(),
  39    'login' => $generator->buildLoginSheet(),
  40    'projects' => $generator->buildProjectsSheet(),
  41  );
  42  
  43  list($err) = exec_manual('optipng');
  44  if ($err) {
  45    $have_optipng = false;
  46    echo phutil_console_format(
  47      "<bg:red> WARNING </bg> `optipng` not found in PATH.\n".
  48      "Sprites will not be optimized! Install `optipng`!\n");
  49  } else {
  50    $have_optipng = true;
  51  }
  52  
  53  foreach ($sheets as $name => $sheet) {
  54  
  55    $sheet->setBasePath($root);
  56  
  57    $manifest_path = $root.'/resources/sprite/manifest/'.$name.'.json';
  58    if (!$args->getArg('force')) {
  59      if (Filesystem::pathExists($manifest_path)) {
  60        $data = Filesystem::readFile($manifest_path);
  61        $data = json_decode($data, true);
  62        if (!$sheet->needsRegeneration($data)) {
  63          continue;
  64        }
  65      }
  66    }
  67  
  68    $sheet
  69      ->generateCSS($webroot."/css/sprite-{$name}.css")
  70      ->generateManifest($root."/resources/sprite/manifest/{$name}.json");
  71  
  72    foreach ($sheet->getScales() as $scale) {
  73      if ($scale == 1) {
  74        $sheet_name = "sprite-{$name}.png";
  75      } else {
  76        $sheet_name = "sprite-{$name}-X{$scale}.png";
  77      }
  78  
  79      $full_path = "{$webroot}/image/{$sheet_name}";
  80      $sheet->generateImage($full_path, $scale);
  81  
  82      if ($have_optipng) {
  83        echo "Optimizing...\n";
  84        phutil_passthru('optipng -o7 -clobber %s', $full_path);
  85      }
  86    }
  87  }
  88  
  89  echo "Done.\n";


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1