--- /dev/null
+<?php
+namespace Civi\Compile;
+
+class Scss {
+
+ /**
+ * Compile some SCSS file(s).
+ *
+ * NOTE: This function runs during 'composer install', which is a pre-boot
+ * environment. The composer autoloader has been configured, but no other
+ * Civi services are online.
+ *
+ * @param array $task
+ * With keys:
+ * - scss-includes: string[], list of paths with SCSS helper files
+ * - scss-files: array, key-value mapping with input-files and output-files
+ *
+ * @see composer.json
+ * @link https://github.com/civicrm/composer-compile-plugin/blob/master/doc/tasks.md
+ */
+ public static function build(array $task) {
+ $scssCompiler = new \ScssPhp\ScssPhp\Compiler();
+ $includes = $task['scss-includes'] ?? [];
+ foreach ($includes as $include) {
+ $scssCompiler->addImportPath($include);
+ }
+
+ if (empty($task['scss-files'])) {
+ throw new \InvalidArgumentException("Invalid task: required argument 'scss-files' is missing");
+ }
+ foreach ($task['scss-files'] as $inputFile => $outputFile) {
+ if (!file_exists($inputFile)) {
+ throw new \InvalidArgumentException("File does not exist: " . $inputFile);
+ }
+ $inputScss = file_get_contents($inputFile);
+ $css = $scssCompiler->compile($inputScss);
+ $autoprefixer = new \Padaliyajay\PHPAutoprefixer\Autoprefixer($css);
+
+ if (!file_exists(dirname($outputFile))) {
+ mkdir(dirname($outputFile), 0777, TRUE);
+ }
+ $outputCss = $autoprefixer->compile();
+ if (!file_put_contents($outputFile, $outputCss)) {
+ throw new \RuntimeException("Failed to write file: $outputFile");
+ }
+ }
+ }
+
+}
"zetacomponents/mail": {
"CiviCRM Custom Patches for ZetaCompoents mail": "https://raw.githubusercontent.com/civicrm/civicrm-core/9d93748a36c7c5d44422911db1c98fb2f7067b34/tools/scripts/composer/patches/civicrm-custom-patches-zetacompoents-mail.patch"
}
- }
+ },
+ "compile": [
+ {
+ "title": "Greenwich SCSS (<comment>ext/greenwich/dist/bootstrap3.css</comment>)",
+ "php-method": "\\Civi\\Compile\\Scss::build",
+ "watch-files": ["ext/greenwich/scss"],
+ "scss-files": {"ext/greenwich/scss/main.scss": "ext/greenwich/dist/bootstrap3.css"},
+ "scss-includes": ["ext/greenwich/scss", "ext/greenwich/extern/bootstrap3/assets/stylesheets"]
+ }
+ ]
}
}