MediaWiki  master
minify.php
Go to the documentation of this file.
1 <?php
24 
25 require_once __DIR__ . '/Maintenance.php';
26 
32 class MinifyScript extends Maintenance {
33  public $outDir;
34 
35  public function __construct() {
36  parent::__construct();
37  $this->addOption( 'outfile',
38  'Write minified output to this file (instead of standard out).',
39  false, true, 'o'
40  );
41  $this->addOption( 'type',
42  'Override the input type (one of "js" or "css"). Defaults to file extension. ' .
43  'Required if reading from standard input.',
44  false, true, 'o'
45  );
46  $this->addArg( 'file', 'Input file. Use - to read from standard input.' );
47  $this->addDescription(
48  "Minify one or more JavaScript or CSS files.\n" .
49  "If multiple input files are given, they will be concatenated."
50  );
51  }
52 
53  public function execute() {
54  $outputFile = $this->getOption( 'outfile', false );
55  if ( $outputFile === false ) {
56  // Only output the minified result (or errors)
57  // Avoid output() because this should not honour --quiet
58  foreach ( $this->mArgs as $arg ) {
59  print $this->minify( $arg ) . "\n";
60  }
61  } else {
62  $result = '';
63  foreach ( $this->mArgs as $arg ) {
64  $this->output( "Minifying {$arg} ...\n" );
65  $result .= $this->minify( $arg );
66  }
67  $this->output( "Writing to {$outputFile} ...\n" );
68  file_put_contents( $outputFile, $result );
69  $this->output( "Done!\n" );
70  }
71  }
72 
73  public function getExtension( $fileName ) {
74  $dotPos = strrpos( $fileName, '.' );
75  if ( $dotPos === false ) {
76  $this->fatalError( "Unknown file type ($fileName). Use --type." );
77  }
78  return substr( $fileName, $dotPos + 1 );
79  }
80 
81  private function readFile( $fileName ) {
82  if ( $fileName === '-' ) {
83  $inText = $this->getStdin( self::STDIN_ALL );
84  } else {
85  AtEase::suppressWarnings();
86  $inText = file_get_contents( $fileName );
87  AtEase::restoreWarnings();
88  if ( $inText === false ) {
89  $this->fatalError( "Unable to open file $fileName for reading." );
90  }
91  }
92  return $inText;
93  }
94 
95  public function minify( $inPath ) {
96  $extension = $this->getOption( 'type', null ) ?? $this->getExtension( $inPath );
97  $inText = $this->readFile( $inPath );
98 
99  switch ( $extension ) {
100  case 'js':
101  $outText = JavaScriptMinifier::minify( $inText );
102  break;
103  case 'css':
104  $outText = CSSMin::minify( $inText );
105  break;
106  default:
107  $this->fatalError( "Unsupported file type \"$extension\"." );
108  }
109 
110  return $outText;
111  }
112 }
113 
114 $maintClass = MinifyScript::class;
115 require_once RUN_MAINTENANCE_IF_MAIN;
const RUN_MAINTENANCE_IF_MAIN
Definition: Maintenance.php:39
getOption( $name, $default=null)
Get an option, or return the default.
minify( $inPath)
Definition: minify.php:95
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
Definition: Maintenance.php:82
static minify( $css)
Removes whitespace from CSS data.
Definition: CSSMin.php:540
addDescription( $text)
Set the description text.
readFile( $fileName)
Definition: minify.php:81
addArg( $arg, $description, $required=true)
Add some args that are needed.
output( $out, $channel=null)
Throw some output to the user.
__construct()
Definition: minify.php:35
getExtension( $fileName)
Definition: minify.php:73
addOption( $name, $description, $required=false, $withArg=false, $shortName=false, $multiOccurrence=false)
Add a parameter to the script.
getStdin( $len=null)
Return input from stdin.
fatalError( $msg, $exitCode=1)
Output a message and terminate the current script.
Maintenance script that minifies a file or set of files.
Definition: minify.php:32
static minify( $s)
Returns minified JavaScript code.
$maintClass
Definition: minify.php:114